79 # looks for "dict[candidate]='some_string'" |
81 # looks for "dict[candidate]='some_string'" |
80 # assign -> subscript -> index -> string |
82 # assign -> subscript -> index -> string |
81 assign = node._securityParent._securityParent._securityParent |
83 assign = node._securityParent._securityParent._securityParent |
82 if ( |
84 if ( |
83 isinstance(assign, ast.Assign) and |
85 isinstance(assign, ast.Assign) and |
84 isinstance(assign.value, ast.Str) |
86 AstUtilities.isString(assign.value) |
85 ): |
87 ): |
86 reportError( |
88 reportError( |
87 context.node.lineno - 1, |
89 context.node.lineno - 1, |
88 context.node.col_offset, |
90 context.node.col_offset, |
89 "S105", |
91 "S105", |
95 elif isinstance(node._securityParent, ast.Compare): |
97 elif isinstance(node._securityParent, ast.Compare): |
96 # looks for "candidate == 'some_string'" |
98 # looks for "candidate == 'some_string'" |
97 comp = node._securityParent |
99 comp = node._securityParent |
98 if isinstance(comp.left, ast.Name): |
100 if isinstance(comp.left, ast.Name): |
99 if RE_CANDIDATES.search(comp.left.id): |
101 if RE_CANDIDATES.search(comp.left.id): |
100 if isinstance(comp.comparators[0], ast.Str): |
102 if AstUtilities.isString(comp.comparators[0]): |
101 reportError( |
103 reportError( |
102 context.node.lineno - 1, |
104 context.node.lineno - 1, |
103 context.node.col_offset, |
105 context.node.col_offset, |
104 "S105", |
106 "S105", |
105 "L", |
107 "L", |
119 @param config dictionary with configuration data |
121 @param config dictionary with configuration data |
120 @type dict |
122 @type dict |
121 """ |
123 """ |
122 # looks for "function(candidate='some_string')" |
124 # looks for "function(candidate='some_string')" |
123 for kw in context.node.keywords: |
125 for kw in context.node.keywords: |
124 if isinstance(kw.value, ast.Str) and RE_CANDIDATES.search(kw.arg): |
126 if AstUtilities.isString(kw.value) and RE_CANDIDATES.search(kw.arg): |
125 reportError( |
127 reportError( |
126 context.node.lineno - 1, |
128 context.node.lineno - 1, |
127 context.node.col_offset, |
129 context.node.col_offset, |
128 "S106", |
130 "S106", |
129 "L", |
131 "L", |
155 isPy3Arg = True |
157 isPy3Arg = True |
156 if sys.version_info[0] > 2: |
158 if sys.version_info[0] > 2: |
157 isPy3Arg = isinstance(key, ast.arg) |
159 isPy3Arg = isinstance(key, ast.arg) |
158 if isinstance(key, ast.Name) or isPy3Arg: |
160 if isinstance(key, ast.Name) or isPy3Arg: |
159 check = key.arg if sys.version_info[0] > 2 else key.id # Py3 |
161 check = key.arg if sys.version_info[0] > 2 else key.id # Py3 |
160 if isinstance(val, ast.Str) and RE_CANDIDATES.search(check): |
162 if AstUtilities.isString(val) and RE_CANDIDATES.search(check): |
161 reportError( |
163 reportError( |
162 context.node.lineno - 1, |
164 context.node.lineno - 1, |
163 context.node.col_offset, |
165 context.node.col_offset, |
164 "S107", |
166 "S107", |
165 "L", |
167 "L", |