117 for filename, source in iter(input.get, 'STOP'): |
115 for filename, source in iter(input.get, 'STOP'): |
118 result = __analyze(filename, source) |
116 result = __analyze(filename, source) |
119 output.put((filename, result)) |
117 output.put((filename, result)) |
120 |
118 |
121 |
119 |
122 def __analyze(file, text=""): |
120 def __analyze(filename, text=""): |
123 """ |
121 """ |
124 Private function to analyze one Python file. |
122 Private function to analyze one Python file. |
125 |
123 |
126 @param file source file name |
124 @param filename source file name |
127 @type str |
125 @type str |
128 @param text source text |
126 @param text source text |
129 @type str |
127 @type str |
130 @return tuple containing the result dictionary |
128 @return tuple containing the result dictionary |
131 @rtype (tuple of dict) |
129 @rtype (tuple of dict) |
136 text = text.encode('utf-8') |
134 text = text.encode('utf-8') |
137 except UnicodeError: |
135 except UnicodeError: |
138 pass |
136 pass |
139 |
137 |
140 try: |
138 try: |
141 v = EricVulture(file) |
139 v = EricVulture() |
142 v.scan(text) |
140 v.scan(text, filename=filename) |
143 res = v.getResults() |
141 res = v.getResults() |
144 except Exception as err: |
142 except Exception as err: |
145 res = {"error": str(err)} |
143 res = {"error": str(err)} |
146 return (res, ) |
144 return (res, ) |
147 |
145 |
148 |
146 |
149 class EricVulture(Vulture): |
147 class EricVulture(Vulture): |
150 """ |
148 """ |
151 Class to adopt the Vulture class to the eric plug-in functionality. |
149 Class to adopt the Vulture class to the eric plug-in functionality. |
152 """ |
150 """ |
153 def __init__(self, filename): |
|
154 """ |
|
155 Constructor |
|
156 |
|
157 @param filename source file name |
|
158 @type str |
|
159 """ |
|
160 super(EricVulture, self).__init__() |
|
161 |
|
162 self.file = filename |
|
163 self.code = None |
|
164 |
|
165 def scan(self, source): |
|
166 """ |
|
167 Public method to scan the source text. |
|
168 |
|
169 @param source source text |
|
170 @type str |
|
171 """ |
|
172 self.code = source.splitlines() |
|
173 node = ast.parse(source, filename=self.file) |
|
174 self.visit(node) |
|
175 |
|
176 def __item2Dict(self, item): |
151 def __item2Dict(self, item): |
177 """ |
152 """ |
178 Private method to convert a vulture item to a dictionary. |
153 Private method to convert a vulture item to a dictionary. |
179 |
154 |
180 @param item vulture item |
155 @param item vulture item |
183 @rtype dict |
158 @rtype dict |
184 """ |
159 """ |
185 d = { |
160 d = { |
186 "name": str(item), |
161 "name": str(item), |
187 "type": getattr(item, "typ", ""), |
162 "type": getattr(item, "typ", ""), |
188 "file": getattr(item, "file", ""), |
163 "file": getattr(item, "filename", ""), |
189 "line": getattr(item, "lineno", ""), |
164 "line": getattr(item, "lineno", ""), |
190 } |
165 } |
191 return d |
166 return d |
192 |
167 |
193 def getResults(self): |
168 def getResults(self): |