Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(127)

Side by Side Diff: third_party/logilab/astroid/rebuilder.py

Issue 753543006: pylint: upgrade to 1.4.0 (Closed) Base URL: https://chromium.googlesource.com/chromium/tools/depot_tools.git@master
Patch Set: Created 6 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 # copyright 2003-2013 LOGILAB S.A. (Paris, FRANCE), all rights reserved. 1 # copyright 2003-2013 LOGILAB S.A. (Paris, FRANCE), all rights reserved.
2 # contact http://www.logilab.fr/ -- mailto:contact@logilab.fr 2 # contact http://www.logilab.fr/ -- mailto:contact@logilab.fr
3 # 3 #
4 # This file is part of astroid. 4 # This file is part of astroid.
5 # 5 #
6 # astroid is free software: you can redistribute it and/or modify it 6 # astroid is free software: you can redistribute it and/or modify it
7 # under the terms of the GNU Lesser General Public License as published by the 7 # under the terms of the GNU Lesser General Public License as published by the
8 # Free Software Foundation, either version 2.1 of the License, or (at your 8 # Free Software Foundation, either version 2.1 of the License, or (at your
9 # option) any later version. 9 # option) any later version.
10 # 10 #
(...skipping 81 matching lines...) Expand 10 before | Expand all | Expand 10 after
92 'keyword': 'Keyword', 92 'keyword': 'Keyword',
93 'Repr': 'Backquote', 93 'Repr': 'Backquote',
94 } 94 }
95 PY3K = sys.version_info >= (3, 0) 95 PY3K = sys.version_info >= (3, 0)
96 PY34 = sys.version_info >= (3, 4) 96 PY34 = sys.version_info >= (3, 4)
97 97
98 def _init_set_doc(node, newnode): 98 def _init_set_doc(node, newnode):
99 newnode.doc = None 99 newnode.doc = None
100 try: 100 try:
101 if isinstance(node.body[0], Discard) and isinstance(node.body[0].value, Str): 101 if isinstance(node.body[0], Discard) and isinstance(node.body[0].value, Str):
102 newnode.tolineno = node.body[0].lineno
103 newnode.doc = node.body[0].value.s 102 newnode.doc = node.body[0].value.s
104 node.body = node.body[1:] 103 node.body = node.body[1:]
105 104
106 except IndexError: 105 except IndexError:
107 pass # ast built from scratch 106 pass # ast built from scratch
108 107
109 def _lineno_parent(oldnode, newnode, parent): 108 def _lineno_parent(oldnode, newnode, parent):
110 newnode.parent = parent 109 newnode.parent = parent
111 if hasattr(oldnode, 'lineno'): 110 newnode.lineno = oldnode.lineno
112 newnode.lineno = oldnode.lineno 111 newnode.col_offset = oldnode.col_offset
113 if hasattr(oldnode, 'col_offset'):
114 newnode.col_offset = oldnode.col_offset
115 112
116 def _set_infos(oldnode, newnode, parent): 113 def _set_infos(oldnode, newnode, parent):
117 newnode.parent = parent 114 newnode.parent = parent
118 if hasattr(oldnode, 'lineno'): 115 if hasattr(oldnode, 'lineno'):
119 newnode.lineno = oldnode.lineno 116 newnode.lineno = oldnode.lineno
120 if hasattr(oldnode, 'col_offset'): 117 if hasattr(oldnode, 'col_offset'):
121 newnode.col_offset = oldnode.col_offset 118 newnode.col_offset = oldnode.col_offset
122 newnode.set_line_info(newnode.last_child()) # set_line_info accepts None
123 119
124 def _create_yield_node(node, parent, rebuilder, factory): 120 def _create_yield_node(node, parent, rebuilder, factory):
125 newnode = factory() 121 newnode = factory()
126 _lineno_parent(node, newnode, parent) 122 _lineno_parent(node, newnode, parent)
127 if node.value is not None: 123 if node.value is not None:
128 newnode.value = rebuilder.visit(node.value, newnode) 124 newnode.value = rebuilder.visit(node.value, newnode)
129 newnode.set_line_info(newnode.last_child())
130 return newnode 125 return newnode
131 126
132 127
133 class TreeRebuilder(object): 128 class TreeRebuilder(object):
134 """Rebuilds the _ast tree to become an Astroid tree""" 129 """Rebuilds the _ast tree to become an Astroid tree"""
135 130
136 def __init__(self, manager): 131 def __init__(self, manager):
137 self._manager = manager 132 self._manager = manager
138 self.asscontext = None 133 self.asscontext = None
139 self._global_names = [] 134 self._global_names = []
140 self._from_nodes = [] 135 self._from_nodes = []
141 self._delayed_assattr = [] 136 self._delayed_assattr = []
142 self._visit_meths = {} 137 self._visit_meths = {}
143 self._transform = manager.transform 138 self._transform = manager.transform
144 139
145 def visit_module(self, node, modname, package): 140 def visit_module(self, node, modname, modpath, package):
146 """visit a Module node by returning a fresh instance of it""" 141 """visit a Module node by returning a fresh instance of it"""
147 newnode = new.Module(modname, None) 142 newnode = new.Module(modname, None)
148 newnode.package = package 143 newnode.package = package
149 _lineno_parent(node, newnode, parent=None) 144 newnode.parent = None
150 _init_set_doc(node, newnode) 145 _init_set_doc(node, newnode)
151 newnode.body = [self.visit(child, newnode) for child in node.body] 146 newnode.body = [self.visit(child, newnode) for child in node.body]
152 newnode.set_line_info(newnode.last_child()) 147 newnode.file = newnode.path = modpath
153 return self._transform(newnode) 148 return self._transform(newnode)
154 149
155 def visit(self, node, parent): 150 def visit(self, node, parent):
156 cls = node.__class__ 151 cls = node.__class__
157 if cls in self._visit_meths: 152 if cls in self._visit_meths:
158 visit_method = self._visit_meths[cls] 153 visit_method = self._visit_meths[cls]
159 else: 154 else:
160 cls_name = cls.__name__ 155 cls_name = cls.__name__
161 visit_name = 'visit_' + REDIRECT.get(cls_name, cls_name).lower() 156 visit_name = 'visit_' + REDIRECT.get(cls_name, cls_name).lower()
162 visit_method = getattr(self, visit_name) 157 visit_method = getattr(self, visit_name)
163 self._visit_meths[cls] = visit_method 158 self._visit_meths[cls] = visit_method
164 return self._transform(visit_method(node, parent)) 159 return self._transform(visit_method(node, parent))
165 160
166 def _save_assignment(self, node, name=None): 161 def _save_assignment(self, node, name=None):
167 """save assignement situation since node.parent is not available yet""" 162 """save assignement situation since node.parent is not available yet"""
168 if self._global_names and node.name in self._global_names[-1]: 163 if self._global_names and node.name in self._global_names[-1]:
169 node.root().set_local(node.name, node) 164 node.root().set_local(node.name, node)
170 else: 165 else:
171 node.parent.set_local(node.name, node) 166 node.parent.set_local(node.name, node)
172 167
173 168
174 def visit_arguments(self, node, parent): 169 def visit_arguments(self, node, parent):
175 """visit a Arguments node by returning a fresh instance of it""" 170 """visit a Arguments node by returning a fresh instance of it"""
176 newnode = new.Arguments() 171 newnode = new.Arguments()
177 _lineno_parent(node, newnode, parent) 172 newnode.parent = parent
178 self.asscontext = "Ass" 173 self.asscontext = "Ass"
179 newnode.args = [self.visit(child, newnode) for child in node.args] 174 newnode.args = [self.visit(child, newnode) for child in node.args]
180 self.asscontext = None 175 self.asscontext = None
181 newnode.defaults = [self.visit(child, newnode) for child in node.default s] 176 newnode.defaults = [self.visit(child, newnode) for child in node.default s]
182 newnode.kwonlyargs = [] 177 newnode.kwonlyargs = []
183 newnode.kw_defaults = [] 178 newnode.kw_defaults = []
184 vararg, kwarg = node.vararg, node.kwarg 179 vararg, kwarg = node.vararg, node.kwarg
185 # change added in 82732 (7c5c678e4164), vararg and kwarg 180 # change added in 82732 (7c5c678e4164), vararg and kwarg
186 # are instances of `_ast.arg`, not strings 181 # are instances of `_ast.arg`, not strings
187 if vararg: 182 if vararg:
(...skipping 15 matching lines...) Expand all
203 if node.kwargannotation: 198 if node.kwargannotation:
204 newnode.kwargannotation = self.visit(node.kwargannotation, 199 newnode.kwargannotation = self.visit(node.kwargannotation,
205 newnode) 200 newnode)
206 newnode.vararg = vararg 201 newnode.vararg = vararg
207 newnode.kwarg = kwarg 202 newnode.kwarg = kwarg
208 # save argument names in locals: 203 # save argument names in locals:
209 if vararg: 204 if vararg:
210 newnode.parent.set_local(vararg, newnode) 205 newnode.parent.set_local(vararg, newnode)
211 if kwarg: 206 if kwarg:
212 newnode.parent.set_local(kwarg, newnode) 207 newnode.parent.set_local(kwarg, newnode)
213 newnode.set_line_info(newnode.last_child())
214 return newnode 208 return newnode
215 209
216 def visit_assattr(self, node, parent): 210 def visit_assattr(self, node, parent):
217 """visit a AssAttr node by returning a fresh instance of it""" 211 """visit a AssAttr node by returning a fresh instance of it"""
218 assc, self.asscontext = self.asscontext, None 212 assc, self.asscontext = self.asscontext, None
219 newnode = new.AssAttr() 213 newnode = new.AssAttr()
220 _lineno_parent(node, newnode, parent) 214 _lineno_parent(node, newnode, parent)
221 newnode.expr = self.visit(node.expr, newnode) 215 newnode.expr = self.visit(node.expr, newnode)
222 self.asscontext = assc 216 self.asscontext = assc
223 self._delayed_assattr.append(newnode) 217 self._delayed_assattr.append(newnode)
224 newnode.set_line_info(newnode.last_child())
225 return newnode 218 return newnode
226 219
227 def visit_assert(self, node, parent): 220 def visit_assert(self, node, parent):
228 """visit a Assert node by returning a fresh instance of it""" 221 """visit a Assert node by returning a fresh instance of it"""
229 newnode = new.Assert() 222 newnode = new.Assert()
230 _lineno_parent(node, newnode, parent) 223 _lineno_parent(node, newnode, parent)
231 newnode.test = self.visit(node.test, newnode) 224 newnode.test = self.visit(node.test, newnode)
232 if node.msg is not None: 225 if node.msg is not None:
233 newnode.fail = self.visit(node.msg, newnode) 226 newnode.fail = self.visit(node.msg, newnode)
234 newnode.set_line_info(newnode.last_child())
235 return newnode 227 return newnode
236 228
237 def visit_assign(self, node, parent): 229 def visit_assign(self, node, parent):
238 """visit a Assign node by returning a fresh instance of it""" 230 """visit a Assign node by returning a fresh instance of it"""
239 newnode = new.Assign() 231 newnode = new.Assign()
240 _lineno_parent(node, newnode, parent) 232 _lineno_parent(node, newnode, parent)
241 self.asscontext = "Ass" 233 self.asscontext = "Ass"
242 newnode.targets = [self.visit(child, newnode) for child in node.targets] 234 newnode.targets = [self.visit(child, newnode) for child in node.targets]
243 self.asscontext = None 235 self.asscontext = None
244 newnode.value = self.visit(node.value, newnode) 236 newnode.value = self.visit(node.value, newnode)
245 # set some function or metaclass infos XXX explain ? 237 # set some function or metaclass infos XXX explain ?
246 klass = newnode.parent.frame() 238 klass = newnode.parent.frame()
247 if (isinstance(klass, new.Class) 239 if (isinstance(klass, new.Class)
248 and isinstance(newnode.value, new.CallFunc) 240 and isinstance(newnode.value, new.CallFunc)
249 and isinstance(newnode.value.func, new.Name)): 241 and isinstance(newnode.value.func, new.Name)):
250 func_name = newnode.value.func.name 242 func_name = newnode.value.func.name
251 for ass_node in newnode.targets: 243 for ass_node in newnode.targets:
252 try: 244 try:
253 meth = klass[ass_node.name] 245 meth = klass[ass_node.name]
254 if isinstance(meth, new.Function): 246 if isinstance(meth, new.Function):
255 if func_name in ('classmethod', 'staticmethod'): 247 if func_name in ('classmethod', 'staticmethod'):
256 meth.type = func_name 248 meth.type = func_name
257 elif func_name == 'classproperty': # see lgc.decorators 249 elif func_name == 'classproperty': # see lgc.decorators
258 meth.type = 'classmethod' 250 meth.type = 'classmethod'
259 meth.extra_decorators.append(newnode.value) 251 meth.extra_decorators.append(newnode.value)
260 except (AttributeError, KeyError): 252 except (AttributeError, KeyError):
261 continue 253 continue
262 newnode.set_line_info(newnode.last_child())
263 return newnode 254 return newnode
264 255
265 def visit_assname(self, node, parent, node_name=None): 256 def visit_assname(self, node, parent, node_name=None):
266 '''visit a node and return a AssName node''' 257 '''visit a node and return a AssName node'''
267 newnode = new.AssName() 258 newnode = new.AssName()
268 _set_infos(node, newnode, parent) 259 _set_infos(node, newnode, parent)
269 newnode.name = node_name 260 newnode.name = node_name
270 self._save_assignment(newnode) 261 self._save_assignment(newnode)
271 return newnode 262 return newnode
272 263
273 def visit_augassign(self, node, parent): 264 def visit_augassign(self, node, parent):
274 """visit a AugAssign node by returning a fresh instance of it""" 265 """visit a AugAssign node by returning a fresh instance of it"""
275 newnode = new.AugAssign() 266 newnode = new.AugAssign()
276 _lineno_parent(node, newnode, parent) 267 _lineno_parent(node, newnode, parent)
277 newnode.op = _BIN_OP_CLASSES[node.op.__class__] + "=" 268 newnode.op = _BIN_OP_CLASSES[node.op.__class__] + "="
278 self.asscontext = "Ass" 269 self.asscontext = "Ass"
279 newnode.target = self.visit(node.target, newnode) 270 newnode.target = self.visit(node.target, newnode)
280 self.asscontext = None 271 self.asscontext = None
281 newnode.value = self.visit(node.value, newnode) 272 newnode.value = self.visit(node.value, newnode)
282 newnode.set_line_info(newnode.last_child())
283 return newnode 273 return newnode
284 274
285 def visit_backquote(self, node, parent): 275 def visit_backquote(self, node, parent):
286 """visit a Backquote node by returning a fresh instance of it""" 276 """visit a Backquote node by returning a fresh instance of it"""
287 newnode = new.Backquote() 277 newnode = new.Backquote()
288 _lineno_parent(node, newnode, parent) 278 _lineno_parent(node, newnode, parent)
289 newnode.value = self.visit(node.value, newnode) 279 newnode.value = self.visit(node.value, newnode)
290 newnode.set_line_info(newnode.last_child())
291 return newnode 280 return newnode
292 281
293 def visit_binop(self, node, parent): 282 def visit_binop(self, node, parent):
294 """visit a BinOp node by returning a fresh instance of it""" 283 """visit a BinOp node by returning a fresh instance of it"""
295 newnode = new.BinOp() 284 newnode = new.BinOp()
296 _lineno_parent(node, newnode, parent) 285 _lineno_parent(node, newnode, parent)
297 newnode.left = self.visit(node.left, newnode) 286 newnode.left = self.visit(node.left, newnode)
298 newnode.right = self.visit(node.right, newnode) 287 newnode.right = self.visit(node.right, newnode)
299 newnode.op = _BIN_OP_CLASSES[node.op.__class__] 288 newnode.op = _BIN_OP_CLASSES[node.op.__class__]
300 newnode.set_line_info(newnode.last_child())
301 return newnode 289 return newnode
302 290
303 def visit_boolop(self, node, parent): 291 def visit_boolop(self, node, parent):
304 """visit a BoolOp node by returning a fresh instance of it""" 292 """visit a BoolOp node by returning a fresh instance of it"""
305 newnode = new.BoolOp() 293 newnode = new.BoolOp()
306 _lineno_parent(node, newnode, parent) 294 _lineno_parent(node, newnode, parent)
307 newnode.values = [self.visit(child, newnode) for child in node.values] 295 newnode.values = [self.visit(child, newnode) for child in node.values]
308 newnode.op = _BOOL_OP_CLASSES[node.op.__class__] 296 newnode.op = _BOOL_OP_CLASSES[node.op.__class__]
309 newnode.set_line_info(newnode.last_child())
310 return newnode 297 return newnode
311 298
312 def visit_break(self, node, parent): 299 def visit_break(self, node, parent):
313 """visit a Break node by returning a fresh instance of it""" 300 """visit a Break node by returning a fresh instance of it"""
314 newnode = new.Break() 301 newnode = new.Break()
315 _set_infos(node, newnode, parent) 302 _set_infos(node, newnode, parent)
316 return newnode 303 return newnode
317 304
318 def visit_callfunc(self, node, parent): 305 def visit_callfunc(self, node, parent):
319 """visit a CallFunc node by returning a fresh instance of it""" 306 """visit a CallFunc node by returning a fresh instance of it"""
320 newnode = new.CallFunc() 307 newnode = new.CallFunc()
321 _lineno_parent(node, newnode, parent) 308 _lineno_parent(node, newnode, parent)
322 newnode.func = self.visit(node.func, newnode) 309 newnode.func = self.visit(node.func, newnode)
323 newnode.args = [self.visit(child, newnode) for child in node.args] 310 newnode.args = [self.visit(child, newnode) for child in node.args]
324 if node.starargs is not None: 311 if node.starargs is not None:
325 newnode.starargs = self.visit(node.starargs, newnode) 312 newnode.starargs = self.visit(node.starargs, newnode)
326 if node.kwargs is not None: 313 if node.kwargs is not None:
327 newnode.kwargs = self.visit(node.kwargs, newnode) 314 newnode.kwargs = self.visit(node.kwargs, newnode)
328 newnode.args.extend(self.visit(child, newnode) for child in node.keyword s) 315 for child in node.keywords:
329 newnode.set_line_info(newnode.last_child()) 316 newnode.args.append(self.visit(child, newnode))
330 return newnode 317 return newnode
331 318
332 def visit_class(self, node, parent): 319 def visit_class(self, node, parent):
333 """visit a Class node to become astroid""" 320 """visit a Class node to become astroid"""
334 newnode = new.Class(node.name, None) 321 newnode = new.Class(node.name, None)
335 _lineno_parent(node, newnode, parent) 322 _lineno_parent(node, newnode, parent)
336 _init_set_doc(node, newnode) 323 _init_set_doc(node, newnode)
337 newnode.bases = [self.visit(child, newnode) for child in node.bases] 324 newnode.bases = [self.visit(child, newnode) for child in node.bases]
338 newnode.body = [self.visit(child, newnode) for child in node.body] 325 newnode.body = [self.visit(child, newnode) for child in node.body]
339 if 'decorator_list' in node._fields and node.decorator_list:# py >= 2.6 326 if 'decorator_list' in node._fields and node.decorator_list:# py >= 2.6
340 newnode.decorators = self.visit_decorators(node, newnode) 327 newnode.decorators = self.visit_decorators(node, newnode)
341 newnode.set_line_info(newnode.last_child())
342 newnode.parent.frame().set_local(newnode.name, newnode) 328 newnode.parent.frame().set_local(newnode.name, newnode)
343 return newnode 329 return newnode
344 330
345 def visit_const(self, node, parent): 331 def visit_const(self, node, parent):
346 """visit a Const node by returning a fresh instance of it""" 332 """visit a Const node by returning a fresh instance of it"""
347 newnode = new.Const(node.value) 333 newnode = new.Const(node.value)
348 _set_infos(node, newnode, parent) 334 _set_infos(node, newnode, parent)
349 return newnode 335 return newnode
350 336
351 def visit_continue(self, node, parent): 337 def visit_continue(self, node, parent):
352 """visit a Continue node by returning a fresh instance of it""" 338 """visit a Continue node by returning a fresh instance of it"""
353 newnode = new.Continue() 339 newnode = new.Continue()
354 _set_infos(node, newnode, parent) 340 _set_infos(node, newnode, parent)
355 return newnode 341 return newnode
356 342
357 def visit_compare(self, node, parent): 343 def visit_compare(self, node, parent):
358 """visit a Compare node by returning a fresh instance of it""" 344 """visit a Compare node by returning a fresh instance of it"""
359 newnode = new.Compare() 345 newnode = new.Compare()
360 _lineno_parent(node, newnode, parent) 346 _lineno_parent(node, newnode, parent)
361 newnode.left = self.visit(node.left, newnode) 347 newnode.left = self.visit(node.left, newnode)
362 newnode.ops = [(_CMP_OP_CLASSES[op.__class__], self.visit(expr, newnode) ) 348 newnode.ops = [(_CMP_OP_CLASSES[op.__class__], self.visit(expr, newnode) )
363 for (op, expr) in zip(node.ops, node.comparators)] 349 for (op, expr) in zip(node.ops, node.comparators)]
364 newnode.set_line_info(newnode.last_child())
365 return newnode 350 return newnode
366 351
367 def visit_comprehension(self, node, parent): 352 def visit_comprehension(self, node, parent):
368 """visit a Comprehension node by returning a fresh instance of it""" 353 """visit a Comprehension node by returning a fresh instance of it"""
369 newnode = new.Comprehension() 354 newnode = new.Comprehension()
370 _lineno_parent(node, newnode, parent) 355 newnode.parent = parent
371 self.asscontext = "Ass" 356 self.asscontext = "Ass"
372 newnode.target = self.visit(node.target, newnode) 357 newnode.target = self.visit(node.target, newnode)
373 self.asscontext = None 358 self.asscontext = None
374 newnode.iter = self.visit(node.iter, newnode) 359 newnode.iter = self.visit(node.iter, newnode)
375 newnode.ifs = [self.visit(child, newnode) for child in node.ifs] 360 newnode.ifs = [self.visit(child, newnode) for child in node.ifs]
376 newnode.set_line_info(newnode.last_child())
377 return newnode 361 return newnode
378 362
379 def visit_decorators(self, node, parent): 363 def visit_decorators(self, node, parent):
380 """visit a Decorators node by returning a fresh instance of it""" 364 """visit a Decorators node by returning a fresh instance of it"""
381 # /!\ node is actually a _ast.Function node while 365 # /!\ node is actually a _ast.Function node while
382 # parent is a astroid.nodes.Function node 366 # parent is a astroid.nodes.Function node
383 newnode = new.Decorators() 367 newnode = new.Decorators()
384 _lineno_parent(node, newnode, parent) 368 _lineno_parent(node, newnode, parent)
385 if 'decorators' in node._fields: # py < 2.6, i.e. 2.5 369 if 'decorators' in node._fields: # py < 2.6, i.e. 2.5
386 decorators = node.decorators 370 decorators = node.decorators
387 else: 371 else:
388 decorators = node.decorator_list 372 decorators = node.decorator_list
389 newnode.nodes = [self.visit(child, newnode) for child in decorators] 373 newnode.nodes = [self.visit(child, newnode) for child in decorators]
390 newnode.set_line_info(newnode.last_child())
391 return newnode 374 return newnode
392 375
393 def visit_delete(self, node, parent): 376 def visit_delete(self, node, parent):
394 """visit a Delete node by returning a fresh instance of it""" 377 """visit a Delete node by returning a fresh instance of it"""
395 newnode = new.Delete() 378 newnode = new.Delete()
396 _lineno_parent(node, newnode, parent) 379 _lineno_parent(node, newnode, parent)
397 self.asscontext = "Del" 380 self.asscontext = "Del"
398 newnode.targets = [self.visit(child, newnode) for child in node.targets] 381 newnode.targets = [self.visit(child, newnode) for child in node.targets]
399 self.asscontext = None 382 self.asscontext = None
400 newnode.set_line_info(newnode.last_child())
401 return newnode 383 return newnode
402 384
403 def visit_dict(self, node, parent): 385 def visit_dict(self, node, parent):
404 """visit a Dict node by returning a fresh instance of it""" 386 """visit a Dict node by returning a fresh instance of it"""
405 newnode = new.Dict() 387 newnode = new.Dict()
406 _lineno_parent(node, newnode, parent) 388 _lineno_parent(node, newnode, parent)
407 newnode.items = [(self.visit(key, newnode), self.visit(value, newnode)) 389 newnode.items = [(self.visit(key, newnode), self.visit(value, newnode))
408 for key, value in zip(node.keys, node.values)] 390 for key, value in zip(node.keys, node.values)]
409 newnode.set_line_info(newnode.last_child())
410 return newnode 391 return newnode
411 392
412 def visit_dictcomp(self, node, parent): 393 def visit_dictcomp(self, node, parent):
413 """visit a DictComp node by returning a fresh instance of it""" 394 """visit a DictComp node by returning a fresh instance of it"""
414 newnode = new.DictComp() 395 newnode = new.DictComp()
415 _lineno_parent(node, newnode, parent) 396 _lineno_parent(node, newnode, parent)
416 newnode.key = self.visit(node.key, newnode) 397 newnode.key = self.visit(node.key, newnode)
417 newnode.value = self.visit(node.value, newnode) 398 newnode.value = self.visit(node.value, newnode)
418 newnode.generators = [self.visit(child, newnode) 399 newnode.generators = [self.visit(child, newnode)
419 for child in node.generators] 400 for child in node.generators]
420 newnode.set_line_info(newnode.last_child())
421 return newnode 401 return newnode
422 402
423 def visit_discard(self, node, parent): 403 def visit_discard(self, node, parent):
424 """visit a Discard node by returning a fresh instance of it""" 404 """visit a Discard node by returning a fresh instance of it"""
425 newnode = new.Discard() 405 newnode = new.Discard()
426 _lineno_parent(node, newnode, parent) 406 _lineno_parent(node, newnode, parent)
427 newnode.value = self.visit(node.value, newnode) 407 newnode.value = self.visit(node.value, newnode)
428 newnode.set_line_info(newnode.last_child())
429 return newnode 408 return newnode
430 409
431 def visit_ellipsis(self, node, parent): 410 def visit_ellipsis(self, node, parent):
432 """visit an Ellipsis node by returning a fresh instance of it""" 411 """visit an Ellipsis node by returning a fresh instance of it"""
433 newnode = new.Ellipsis() 412 newnode = new.Ellipsis()
434 _set_infos(node, newnode, parent) 413 _set_infos(node, newnode, parent)
435 return newnode 414 return newnode
436 415
437 def visit_emptynode(self, node, parent): 416 def visit_emptynode(self, node, parent):
438 """visit an EmptyNode node by returning a fresh instance of it""" 417 """visit an EmptyNode node by returning a fresh instance of it"""
439 newnode = new.EmptyNode() 418 newnode = new.EmptyNode()
440 _set_infos(node, newnode, parent) 419 _set_infos(node, newnode, parent)
441 return newnode 420 return newnode
442 421
443 def visit_excepthandler(self, node, parent): 422 def visit_excepthandler(self, node, parent):
444 """visit an ExceptHandler node by returning a fresh instance of it""" 423 """visit an ExceptHandler node by returning a fresh instance of it"""
445 newnode = new.ExceptHandler() 424 newnode = new.ExceptHandler()
446 _lineno_parent(node, newnode, parent) 425 _lineno_parent(node, newnode, parent)
447 if node.type is not None: 426 if node.type is not None:
448 newnode.type = self.visit(node.type, newnode) 427 newnode.type = self.visit(node.type, newnode)
449 if node.name is not None: 428 if node.name is not None:
450 # /!\ node.name can be a tuple 429 # /!\ node.name can be a tuple
451 self.asscontext = "Ass" 430 self.asscontext = "Ass"
452 newnode.name = self.visit(node.name, newnode) 431 newnode.name = self.visit(node.name, newnode)
453 self.asscontext = None 432 self.asscontext = None
454 newnode.body = [self.visit(child, newnode) for child in node.body] 433 newnode.body = [self.visit(child, newnode) for child in node.body]
455 newnode.set_line_info(newnode.last_child())
456 return newnode 434 return newnode
457 435
458 def visit_exec(self, node, parent): 436 def visit_exec(self, node, parent):
459 """visit an Exec node by returning a fresh instance of it""" 437 """visit an Exec node by returning a fresh instance of it"""
460 newnode = new.Exec() 438 newnode = new.Exec()
461 _lineno_parent(node, newnode, parent) 439 _lineno_parent(node, newnode, parent)
462 newnode.expr = self.visit(node.body, newnode) 440 newnode.expr = self.visit(node.body, newnode)
463 if node.globals is not None: 441 if node.globals is not None:
464 newnode.globals = self.visit(node.globals, newnode) 442 newnode.globals = self.visit(node.globals, newnode)
465 if node.locals is not None: 443 if node.locals is not None:
466 newnode.locals = self.visit(node.locals, newnode) 444 newnode.locals = self.visit(node.locals, newnode)
467 newnode.set_line_info(newnode.last_child())
468 return newnode 445 return newnode
469 446
470 def visit_extslice(self, node, parent): 447 def visit_extslice(self, node, parent):
471 """visit an ExtSlice node by returning a fresh instance of it""" 448 """visit an ExtSlice node by returning a fresh instance of it"""
472 newnode = new.ExtSlice() 449 newnode = new.ExtSlice()
473 _lineno_parent(node, newnode, parent) 450 newnode.parent = parent
474 newnode.dims = [self.visit(dim, newnode) for dim in node.dims] 451 newnode.dims = [self.visit(dim, newnode) for dim in node.dims]
475 newnode.set_line_info(newnode.last_child())
476 return newnode 452 return newnode
477 453
478 def visit_for(self, node, parent): 454 def visit_for(self, node, parent):
479 """visit a For node by returning a fresh instance of it""" 455 """visit a For node by returning a fresh instance of it"""
480 newnode = new.For() 456 newnode = new.For()
481 _lineno_parent(node, newnode, parent) 457 _lineno_parent(node, newnode, parent)
482 self.asscontext = "Ass" 458 self.asscontext = "Ass"
483 newnode.target = self.visit(node.target, newnode) 459 newnode.target = self.visit(node.target, newnode)
484 self.asscontext = None 460 self.asscontext = None
485 newnode.iter = self.visit(node.iter, newnode) 461 newnode.iter = self.visit(node.iter, newnode)
486 newnode.body = [self.visit(child, newnode) for child in node.body] 462 newnode.body = [self.visit(child, newnode) for child in node.body]
487 newnode.orelse = [self.visit(child, newnode) for child in node.orelse] 463 newnode.orelse = [self.visit(child, newnode) for child in node.orelse]
488 newnode.set_line_info(newnode.last_child())
489 return newnode 464 return newnode
490 465
491 def visit_from(self, node, parent): 466 def visit_from(self, node, parent):
492 """visit a From node by returning a fresh instance of it""" 467 """visit a From node by returning a fresh instance of it"""
493 names = [(alias.name, alias.asname) for alias in node.names] 468 names = [(alias.name, alias.asname) for alias in node.names]
494 newnode = new.From(node.module or '', names, node.level or None) 469 newnode = new.From(node.module or '', names, node.level or None)
495 _set_infos(node, newnode, parent) 470 _set_infos(node, newnode, parent)
496 # store From names to add them to locals after building 471 # store From names to add them to locals after building
497 self._from_nodes.append(newnode) 472 self._from_nodes.append(newnode)
498 return newnode 473 return newnode
499 474
500 def visit_function(self, node, parent): 475 def visit_function(self, node, parent):
501 """visit an Function node to become astroid""" 476 """visit an Function node to become astroid"""
502 self._global_names.append({}) 477 self._global_names.append({})
503 newnode = new.Function(node.name, None) 478 newnode = new.Function(node.name, None)
504 _lineno_parent(node, newnode, parent) 479 _lineno_parent(node, newnode, parent)
505 _init_set_doc(node, newnode) 480 _init_set_doc(node, newnode)
506 newnode.args = self.visit(node.args, newnode) 481 newnode.args = self.visit(node.args, newnode)
507 newnode.body = [self.visit(child, newnode) for child in node.body] 482 newnode.body = [self.visit(child, newnode) for child in node.body]
508 if 'decorators' in node._fields: # py < 2.6 483 if 'decorators' in node._fields: # py < 2.6
509 attr = 'decorators' 484 attr = 'decorators'
510 else: 485 else:
511 attr = 'decorator_list' 486 attr = 'decorator_list'
512 decorators = getattr(node, attr) 487 decorators = getattr(node, attr)
513 if decorators: 488 if decorators:
514 newnode.decorators = self.visit_decorators(node, newnode) 489 newnode.decorators = self.visit_decorators(node, newnode)
515 if PY3K and node.returns: 490 if PY3K and node.returns:
516 newnode.returns = self.visit(node.returns, newnode) 491 newnode.returns = self.visit(node.returns, newnode)
517 newnode.set_line_info(newnode.last_child())
518 self._global_names.pop() 492 self._global_names.pop()
519 frame = newnode.parent.frame() 493 frame = newnode.parent.frame()
520 if isinstance(frame, new.Class): 494 if isinstance(frame, new.Class):
521 if newnode.name == '__new__': 495 if newnode.name == '__new__':
522 newnode._type = 'classmethod' 496 newnode._type = 'classmethod'
523 else: 497 else:
524 newnode._type = 'method' 498 newnode._type = 'method'
525 if newnode.decorators is not None: 499 if newnode.decorators is not None:
526 for decorator_expr in newnode.decorators.nodes: 500 for decorator_expr in newnode.decorators.nodes:
527 if isinstance(decorator_expr, new.Name): 501 if isinstance(decorator_expr, new.Name):
528 if decorator_expr.name in ('classmethod', 'staticmethod'): 502 if decorator_expr.name in ('classmethod', 'staticmethod'):
529 newnode._type = decorator_expr.name 503 newnode._type = decorator_expr.name
530 elif decorator_expr.name == 'classproperty': 504 elif decorator_expr.name == 'classproperty':
531 newnode._type = 'classmethod' 505 newnode._type = 'classmethod'
532 frame.set_local(newnode.name, newnode) 506 frame.set_local(newnode.name, newnode)
533 return newnode 507 return newnode
534 508
535 def visit_genexpr(self, node, parent): 509 def visit_genexpr(self, node, parent):
536 """visit a GenExpr node by returning a fresh instance of it""" 510 """visit a GenExpr node by returning a fresh instance of it"""
537 newnode = new.GenExpr() 511 newnode = new.GenExpr()
538 _lineno_parent(node, newnode, parent) 512 _lineno_parent(node, newnode, parent)
539 newnode.elt = self.visit(node.elt, newnode) 513 newnode.elt = self.visit(node.elt, newnode)
540 newnode.generators = [self.visit(child, newnode) for child in node.gener ators] 514 newnode.generators = [self.visit(child, newnode) for child in node.gener ators]
541 newnode.set_line_info(newnode.last_child())
542 return newnode 515 return newnode
543 516
544 def visit_getattr(self, node, parent): 517 def visit_getattr(self, node, parent):
545 """visit a Getattr node by returning a fresh instance of it""" 518 """visit a Getattr node by returning a fresh instance of it"""
546 if self.asscontext == "Del": 519 if self.asscontext == "Del":
547 # FIXME : maybe we should reintroduce and visit_delattr ? 520 # FIXME : maybe we should reintroduce and visit_delattr ?
548 # for instance, deactivating asscontext 521 # for instance, deactivating asscontext
549 newnode = new.DelAttr() 522 newnode = new.DelAttr()
550 elif self.asscontext == "Ass": 523 elif self.asscontext == "Ass":
551 # FIXME : maybe we should call visit_assattr ? 524 # FIXME : maybe we should call visit_assattr ?
552 newnode = new.AssAttr() 525 newnode = new.AssAttr()
553 self._delayed_assattr.append(newnode) 526 self._delayed_assattr.append(newnode)
554 else: 527 else:
555 newnode = new.Getattr() 528 newnode = new.Getattr()
556 _lineno_parent(node, newnode, parent) 529 _lineno_parent(node, newnode, parent)
557 asscontext, self.asscontext = self.asscontext, None 530 asscontext, self.asscontext = self.asscontext, None
558 newnode.expr = self.visit(node.value, newnode) 531 newnode.expr = self.visit(node.value, newnode)
559 self.asscontext = asscontext 532 self.asscontext = asscontext
560 newnode.attrname = node.attr 533 newnode.attrname = node.attr
561 newnode.set_line_info(newnode.last_child())
562 return newnode 534 return newnode
563 535
564 def visit_global(self, node, parent): 536 def visit_global(self, node, parent):
565 """visit an Global node to become astroid""" 537 """visit an Global node to become astroid"""
566 newnode = new.Global(node.names) 538 newnode = new.Global(node.names)
567 _set_infos(node, newnode, parent) 539 _set_infos(node, newnode, parent)
568 if self._global_names: # global at the module level, no effect 540 if self._global_names: # global at the module level, no effect
569 for name in node.names: 541 for name in node.names:
570 self._global_names[-1].setdefault(name, []).append(newnode) 542 self._global_names[-1].setdefault(name, []).append(newnode)
571 return newnode 543 return newnode
572 544
573 def visit_if(self, node, parent): 545 def visit_if(self, node, parent):
574 """visit a If node by returning a fresh instance of it""" 546 """visit a If node by returning a fresh instance of it"""
575 newnode = new.If() 547 newnode = new.If()
576 _lineno_parent(node, newnode, parent) 548 _lineno_parent(node, newnode, parent)
577 newnode.test = self.visit(node.test, newnode) 549 newnode.test = self.visit(node.test, newnode)
578 newnode.body = [self.visit(child, newnode) for child in node.body] 550 newnode.body = [self.visit(child, newnode) for child in node.body]
579 newnode.orelse = [self.visit(child, newnode) for child in node.orelse] 551 newnode.orelse = [self.visit(child, newnode) for child in node.orelse]
580 newnode.set_line_info(newnode.last_child())
581 return newnode 552 return newnode
582 553
583 def visit_ifexp(self, node, parent): 554 def visit_ifexp(self, node, parent):
584 """visit a IfExp node by returning a fresh instance of it""" 555 """visit a IfExp node by returning a fresh instance of it"""
585 newnode = new.IfExp() 556 newnode = new.IfExp()
586 _lineno_parent(node, newnode, parent) 557 _lineno_parent(node, newnode, parent)
587 newnode.test = self.visit(node.test, newnode) 558 newnode.test = self.visit(node.test, newnode)
588 newnode.body = self.visit(node.body, newnode) 559 newnode.body = self.visit(node.body, newnode)
589 newnode.orelse = self.visit(node.orelse, newnode) 560 newnode.orelse = self.visit(node.orelse, newnode)
590 newnode.set_line_info(newnode.last_child())
591 return newnode 561 return newnode
592 562
593 def visit_import(self, node, parent): 563 def visit_import(self, node, parent):
594 """visit a Import node by returning a fresh instance of it""" 564 """visit a Import node by returning a fresh instance of it"""
595 newnode = new.Import() 565 newnode = new.Import()
596 _set_infos(node, newnode, parent) 566 _set_infos(node, newnode, parent)
597 newnode.names = [(alias.name, alias.asname) for alias in node.names] 567 newnode.names = [(alias.name, alias.asname) for alias in node.names]
598 # save import names in parent's locals: 568 # save import names in parent's locals:
599 for (name, asname) in newnode.names: 569 for (name, asname) in newnode.names:
600 name = asname or name 570 name = asname or name
601 newnode.parent.set_local(name.split('.')[0], newnode) 571 newnode.parent.set_local(name.split('.')[0], newnode)
602 return newnode 572 return newnode
603 573
604 def visit_index(self, node, parent): 574 def visit_index(self, node, parent):
605 """visit a Index node by returning a fresh instance of it""" 575 """visit a Index node by returning a fresh instance of it"""
606 newnode = new.Index() 576 newnode = new.Index()
607 _lineno_parent(node, newnode, parent) 577 newnode.parent = parent
608 newnode.value = self.visit(node.value, newnode) 578 newnode.value = self.visit(node.value, newnode)
609 newnode.set_line_info(newnode.last_child())
610 return newnode 579 return newnode
611 580
612 def visit_keyword(self, node, parent): 581 def visit_keyword(self, node, parent):
613 """visit a Keyword node by returning a fresh instance of it""" 582 """visit a Keyword node by returning a fresh instance of it"""
614 newnode = new.Keyword() 583 newnode = new.Keyword()
615 _lineno_parent(node, newnode, parent) 584 newnode.parent = parent
616 newnode.arg = node.arg 585 newnode.arg = node.arg
617 newnode.value = self.visit(node.value, newnode) 586 newnode.value = self.visit(node.value, newnode)
618 newnode.set_line_info(newnode.last_child())
619 return newnode 587 return newnode
620 588
621 def visit_lambda(self, node, parent): 589 def visit_lambda(self, node, parent):
622 """visit a Lambda node by returning a fresh instance of it""" 590 """visit a Lambda node by returning a fresh instance of it"""
623 newnode = new.Lambda() 591 newnode = new.Lambda()
624 _lineno_parent(node, newnode, parent) 592 _lineno_parent(node, newnode, parent)
625 newnode.args = self.visit(node.args, newnode) 593 newnode.args = self.visit(node.args, newnode)
626 newnode.body = self.visit(node.body, newnode) 594 newnode.body = self.visit(node.body, newnode)
627 newnode.set_line_info(newnode.last_child())
628 return newnode 595 return newnode
629 596
630 def visit_list(self, node, parent): 597 def visit_list(self, node, parent):
631 """visit a List node by returning a fresh instance of it""" 598 """visit a List node by returning a fresh instance of it"""
632 newnode = new.List() 599 newnode = new.List()
633 _lineno_parent(node, newnode, parent) 600 _lineno_parent(node, newnode, parent)
634 newnode.elts = [self.visit(child, newnode) for child in node.elts] 601 newnode.elts = [self.visit(child, newnode) for child in node.elts]
635 newnode.set_line_info(newnode.last_child())
636 return newnode 602 return newnode
637 603
638 def visit_listcomp(self, node, parent): 604 def visit_listcomp(self, node, parent):
639 """visit a ListComp node by returning a fresh instance of it""" 605 """visit a ListComp node by returning a fresh instance of it"""
640 newnode = new.ListComp() 606 newnode = new.ListComp()
641 _lineno_parent(node, newnode, parent) 607 _lineno_parent(node, newnode, parent)
642 newnode.elt = self.visit(node.elt, newnode) 608 newnode.elt = self.visit(node.elt, newnode)
643 newnode.generators = [self.visit(child, newnode) 609 newnode.generators = [self.visit(child, newnode)
644 for child in node.generators] 610 for child in node.generators]
645 newnode.set_line_info(newnode.last_child())
646 return newnode 611 return newnode
647 612
648 def visit_name(self, node, parent): 613 def visit_name(self, node, parent):
649 """visit a Name node by returning a fresh instance of it""" 614 """visit a Name node by returning a fresh instance of it"""
650 # True and False can be assigned to something in py2x, so we have to 615 # True and False can be assigned to something in py2x, so we have to
651 # check first the asscontext 616 # check first the asscontext
652 if self.asscontext == "Del": 617 if self.asscontext == "Del":
653 newnode = new.DelName() 618 newnode = new.DelName()
654 elif self.asscontext is not None: # Ass 619 elif self.asscontext is not None: # Ass
655 assert self.asscontext == "Ass" 620 assert self.asscontext == "Ass"
656 newnode = new.AssName() 621 newnode = new.AssName()
657 elif node.id in CONST_NAME_TRANSFORMS: 622 elif node.id in CONST_NAME_TRANSFORMS:
658 newnode = new.Const(CONST_NAME_TRANSFORMS[node.id]) 623 newnode = new.Const(CONST_NAME_TRANSFORMS[node.id])
659 _set_infos(node, newnode, parent) 624 _set_infos(node, newnode, parent)
660 return newnode 625 return newnode
661 else: 626 else:
662 newnode = new.Name() 627 newnode = new.Name()
663 _lineno_parent(node, newnode, parent) 628 _lineno_parent(node, newnode, parent)
664 newnode.name = node.id 629 newnode.name = node.id
665 # XXX REMOVE me : 630 # XXX REMOVE me :
666 if self.asscontext in ('Del', 'Ass'): # 'Aug' ?? 631 if self.asscontext in ('Del', 'Ass'): # 'Aug' ??
667 self._save_assignment(newnode) 632 self._save_assignment(newnode)
668 newnode.set_line_info(newnode.last_child())
669 return newnode 633 return newnode
670 634
671 def visit_bytes(self, node, parent): 635 def visit_bytes(self, node, parent):
672 """visit a Bytes node by returning a fresh instance of Const""" 636 """visit a Bytes node by returning a fresh instance of Const"""
673 newnode = new.Const(node.s) 637 newnode = new.Const(node.s)
674 _set_infos(node, newnode, parent) 638 _set_infos(node, newnode, parent)
675 return newnode 639 return newnode
676 640
677 def visit_num(self, node, parent): 641 def visit_num(self, node, parent):
678 """visit a Num node by returning a fresh instance of Const""" 642 """visit a Num node by returning a fresh instance of Const"""
(...skipping 14 matching lines...) Expand all
693 return newnode 657 return newnode
694 658
695 def visit_print(self, node, parent): 659 def visit_print(self, node, parent):
696 """visit a Print node by returning a fresh instance of it""" 660 """visit a Print node by returning a fresh instance of it"""
697 newnode = new.Print() 661 newnode = new.Print()
698 _lineno_parent(node, newnode, parent) 662 _lineno_parent(node, newnode, parent)
699 newnode.nl = node.nl 663 newnode.nl = node.nl
700 if node.dest is not None: 664 if node.dest is not None:
701 newnode.dest = self.visit(node.dest, newnode) 665 newnode.dest = self.visit(node.dest, newnode)
702 newnode.values = [self.visit(child, newnode) for child in node.values] 666 newnode.values = [self.visit(child, newnode) for child in node.values]
703 newnode.set_line_info(newnode.last_child())
704 return newnode 667 return newnode
705 668
706 def visit_raise(self, node, parent): 669 def visit_raise(self, node, parent):
707 """visit a Raise node by returning a fresh instance of it""" 670 """visit a Raise node by returning a fresh instance of it"""
708 newnode = new.Raise() 671 newnode = new.Raise()
709 _lineno_parent(node, newnode, parent) 672 _lineno_parent(node, newnode, parent)
710 if node.type is not None: 673 if node.type is not None:
711 newnode.exc = self.visit(node.type, newnode) 674 newnode.exc = self.visit(node.type, newnode)
712 if node.inst is not None: 675 if node.inst is not None:
713 newnode.inst = self.visit(node.inst, newnode) 676 newnode.inst = self.visit(node.inst, newnode)
714 if node.tback is not None: 677 if node.tback is not None:
715 newnode.tback = self.visit(node.tback, newnode) 678 newnode.tback = self.visit(node.tback, newnode)
716 newnode.set_line_info(newnode.last_child())
717 return newnode 679 return newnode
718 680
719 def visit_return(self, node, parent): 681 def visit_return(self, node, parent):
720 """visit a Return node by returning a fresh instance of it""" 682 """visit a Return node by returning a fresh instance of it"""
721 newnode = new.Return() 683 newnode = new.Return()
722 _lineno_parent(node, newnode, parent) 684 _lineno_parent(node, newnode, parent)
723 if node.value is not None: 685 if node.value is not None:
724 newnode.value = self.visit(node.value, newnode) 686 newnode.value = self.visit(node.value, newnode)
725 newnode.set_line_info(newnode.last_child())
726 return newnode 687 return newnode
727 688
728 def visit_set(self, node, parent): 689 def visit_set(self, node, parent):
729 """visit a Set node by returning a fresh instance of it""" 690 """visit a Set node by returning a fresh instance of it"""
730 newnode = new.Set() 691 newnode = new.Set()
731 _lineno_parent(node, newnode, parent) 692 _lineno_parent(node, newnode, parent)
732 newnode.elts = [self.visit(child, newnode) for child in node.elts] 693 newnode.elts = [self.visit(child, newnode) for child in node.elts]
733 newnode.set_line_info(newnode.last_child())
734 return newnode 694 return newnode
735 695
736 def visit_setcomp(self, node, parent): 696 def visit_setcomp(self, node, parent):
737 """visit a SetComp node by returning a fresh instance of it""" 697 """visit a SetComp node by returning a fresh instance of it"""
738 newnode = new.SetComp() 698 newnode = new.SetComp()
739 _lineno_parent(node, newnode, parent) 699 _lineno_parent(node, newnode, parent)
740 newnode.elt = self.visit(node.elt, newnode) 700 newnode.elt = self.visit(node.elt, newnode)
741 newnode.generators = [self.visit(child, newnode) 701 newnode.generators = [self.visit(child, newnode)
742 for child in node.generators] 702 for child in node.generators]
743 newnode.set_line_info(newnode.last_child())
744 return newnode 703 return newnode
745 704
746 def visit_slice(self, node, parent): 705 def visit_slice(self, node, parent):
747 """visit a Slice node by returning a fresh instance of it""" 706 """visit a Slice node by returning a fresh instance of it"""
748 newnode = new.Slice() 707 newnode = new.Slice()
749 _lineno_parent(node, newnode, parent) 708 newnode.parent = parent
750 if node.lower is not None: 709 if node.lower is not None:
751 newnode.lower = self.visit(node.lower, newnode) 710 newnode.lower = self.visit(node.lower, newnode)
752 if node.upper is not None: 711 if node.upper is not None:
753 newnode.upper = self.visit(node.upper, newnode) 712 newnode.upper = self.visit(node.upper, newnode)
754 if node.step is not None: 713 if node.step is not None:
755 newnode.step = self.visit(node.step, newnode) 714 newnode.step = self.visit(node.step, newnode)
756 newnode.set_line_info(newnode.last_child())
757 return newnode 715 return newnode
758 716
759 def visit_subscript(self, node, parent): 717 def visit_subscript(self, node, parent):
760 """visit a Subscript node by returning a fresh instance of it""" 718 """visit a Subscript node by returning a fresh instance of it"""
761 newnode = new.Subscript() 719 newnode = new.Subscript()
762 _lineno_parent(node, newnode, parent) 720 _lineno_parent(node, newnode, parent)
763 subcontext, self.asscontext = self.asscontext, None 721 subcontext, self.asscontext = self.asscontext, None
764 newnode.value = self.visit(node.value, newnode) 722 newnode.value = self.visit(node.value, newnode)
765 newnode.slice = self.visit(node.slice, newnode) 723 newnode.slice = self.visit(node.slice, newnode)
766 self.asscontext = subcontext 724 self.asscontext = subcontext
767 newnode.set_line_info(newnode.last_child())
768 return newnode 725 return newnode
769 726
770 def visit_tryexcept(self, node, parent): 727 def visit_tryexcept(self, node, parent):
771 """visit a TryExcept node by returning a fresh instance of it""" 728 """visit a TryExcept node by returning a fresh instance of it"""
772 newnode = new.TryExcept() 729 newnode = new.TryExcept()
773 _lineno_parent(node, newnode, parent) 730 _lineno_parent(node, newnode, parent)
774 newnode.body = [self.visit(child, newnode) for child in node.body] 731 newnode.body = [self.visit(child, newnode) for child in node.body]
775 newnode.handlers = [self.visit(child, newnode) for child in node.handler s] 732 newnode.handlers = [self.visit(child, newnode) for child in node.handler s]
776 newnode.orelse = [self.visit(child, newnode) for child in node.orelse] 733 newnode.orelse = [self.visit(child, newnode) for child in node.orelse]
777 newnode.set_line_info(newnode.last_child())
778 return newnode 734 return newnode
779 735
780 def visit_tryfinally(self, node, parent): 736 def visit_tryfinally(self, node, parent):
781 """visit a TryFinally node by returning a fresh instance of it""" 737 """visit a TryFinally node by returning a fresh instance of it"""
782 newnode = new.TryFinally() 738 newnode = new.TryFinally()
783 _lineno_parent(node, newnode, parent) 739 _lineno_parent(node, newnode, parent)
784 newnode.body = [self.visit(child, newnode) for child in node.body] 740 newnode.body = [self.visit(child, newnode) for child in node.body]
785 newnode.finalbody = [self.visit(n, newnode) for n in node.finalbody] 741 newnode.finalbody = [self.visit(n, newnode) for n in node.finalbody]
786 newnode.set_line_info(newnode.last_child())
787 return newnode 742 return newnode
788 743
789 def visit_tuple(self, node, parent): 744 def visit_tuple(self, node, parent):
790 """visit a Tuple node by returning a fresh instance of it""" 745 """visit a Tuple node by returning a fresh instance of it"""
791 newnode = new.Tuple() 746 newnode = new.Tuple()
792 _lineno_parent(node, newnode, parent) 747 _lineno_parent(node, newnode, parent)
793 newnode.elts = [self.visit(child, newnode) for child in node.elts] 748 newnode.elts = [self.visit(child, newnode) for child in node.elts]
794 newnode.set_line_info(newnode.last_child())
795 return newnode 749 return newnode
796 750
797 def visit_unaryop(self, node, parent): 751 def visit_unaryop(self, node, parent):
798 """visit a UnaryOp node by returning a fresh instance of it""" 752 """visit a UnaryOp node by returning a fresh instance of it"""
799 newnode = new.UnaryOp() 753 newnode = new.UnaryOp()
800 _lineno_parent(node, newnode, parent) 754 _lineno_parent(node, newnode, parent)
801 newnode.operand = self.visit(node.operand, newnode) 755 newnode.operand = self.visit(node.operand, newnode)
802 newnode.op = _UNARY_OP_CLASSES[node.op.__class__] 756 newnode.op = _UNARY_OP_CLASSES[node.op.__class__]
803 newnode.set_line_info(newnode.last_child())
804 return newnode 757 return newnode
805 758
806 def visit_while(self, node, parent): 759 def visit_while(self, node, parent):
807 """visit a While node by returning a fresh instance of it""" 760 """visit a While node by returning a fresh instance of it"""
808 newnode = new.While() 761 newnode = new.While()
809 _lineno_parent(node, newnode, parent) 762 _lineno_parent(node, newnode, parent)
810 newnode.test = self.visit(node.test, newnode) 763 newnode.test = self.visit(node.test, newnode)
811 newnode.body = [self.visit(child, newnode) for child in node.body] 764 newnode.body = [self.visit(child, newnode) for child in node.body]
812 newnode.orelse = [self.visit(child, newnode) for child in node.orelse] 765 newnode.orelse = [self.visit(child, newnode) for child in node.orelse]
813 newnode.set_line_info(newnode.last_child())
814 return newnode 766 return newnode
815 767
816 def visit_with(self, node, parent): 768 def visit_with(self, node, parent):
817 newnode = new.With() 769 newnode = new.With()
818 _lineno_parent(node, newnode, parent) 770 _lineno_parent(node, newnode, parent)
819 expr = self.visit(node.context_expr, newnode) 771 expr = self.visit(node.context_expr, newnode)
820 self.asscontext = "Ass" 772 self.asscontext = "Ass"
821 if node.optional_vars is not None: 773 if node.optional_vars is not None:
822 vars = self.visit(node.optional_vars, newnode) 774 vars = self.visit(node.optional_vars, newnode)
823 else: 775 else:
824 vars = None 776 vars = None
825 self.asscontext = None 777 self.asscontext = None
826 newnode.items = [(expr, vars)] 778 newnode.items = [(expr, vars)]
827 newnode.body = [self.visit(child, newnode) for child in node.body] 779 newnode.body = [self.visit(child, newnode) for child in node.body]
828 newnode.set_line_info(newnode.last_child())
829 return newnode 780 return newnode
830 781
831 def visit_yield(self, node, parent): 782 def visit_yield(self, node, parent):
832 """visit a Yield node by returning a fresh instance of it""" 783 """visit a Yield node by returning a fresh instance of it"""
833 return _create_yield_node(node, parent, self, new.Yield) 784 return _create_yield_node(node, parent, self, new.Yield)
834 785
835 class TreeRebuilder3k(TreeRebuilder): 786 class TreeRebuilder3k(TreeRebuilder):
836 """extend and overwrite TreeRebuilder for python3k""" 787 """extend and overwrite TreeRebuilder for python3k"""
837 788
838 def visit_arg(self, node, parent): 789 def visit_arg(self, node, parent):
(...skipping 21 matching lines...) Expand all
860 811
861 def visit_excepthandler(self, node, parent): 812 def visit_excepthandler(self, node, parent):
862 """visit an ExceptHandler node by returning a fresh instance of it""" 813 """visit an ExceptHandler node by returning a fresh instance of it"""
863 newnode = new.ExceptHandler() 814 newnode = new.ExceptHandler()
864 _lineno_parent(node, newnode, parent) 815 _lineno_parent(node, newnode, parent)
865 if node.type is not None: 816 if node.type is not None:
866 newnode.type = self.visit(node.type, newnode) 817 newnode.type = self.visit(node.type, newnode)
867 if node.name is not None: 818 if node.name is not None:
868 newnode.name = self.visit_assname(node, newnode, node.name) 819 newnode.name = self.visit_assname(node, newnode, node.name)
869 newnode.body = [self.visit(child, newnode) for child in node.body] 820 newnode.body = [self.visit(child, newnode) for child in node.body]
870 newnode.set_line_info(newnode.last_child())
871 return newnode 821 return newnode
872 822
873 def visit_nonlocal(self, node, parent): 823 def visit_nonlocal(self, node, parent):
874 """visit a Nonlocal node and return a new instance of it""" 824 """visit a Nonlocal node and return a new instance of it"""
875 newnode = new.Nonlocal(node.names) 825 newnode = new.Nonlocal(node.names)
876 _set_infos(node, newnode, parent) 826 _set_infos(node, newnode, parent)
877 return newnode 827 return newnode
878 828
879 def visit_raise(self, node, parent): 829 def visit_raise(self, node, parent):
880 """visit a Raise node by returning a fresh instance of it""" 830 """visit a Raise node by returning a fresh instance of it"""
881 newnode = new.Raise() 831 newnode = new.Raise()
882 _lineno_parent(node, newnode, parent) 832 _lineno_parent(node, newnode, parent)
883 # no traceback; anyway it is not used in Pylint 833 # no traceback; anyway it is not used in Pylint
884 if node.exc is not None: 834 if node.exc is not None:
885 newnode.exc = self.visit(node.exc, newnode) 835 newnode.exc = self.visit(node.exc, newnode)
886 if node.cause is not None: 836 if node.cause is not None:
887 newnode.cause = self.visit(node.cause, newnode) 837 newnode.cause = self.visit(node.cause, newnode)
888 newnode.set_line_info(newnode.last_child())
889 return newnode 838 return newnode
890 839
891 def visit_starred(self, node, parent): 840 def visit_starred(self, node, parent):
892 """visit a Starred node and return a new instance of it""" 841 """visit a Starred node and return a new instance of it"""
893 newnode = new.Starred() 842 newnode = new.Starred()
894 _lineno_parent(node, newnode, parent) 843 _lineno_parent(node, newnode, parent)
895 newnode.value = self.visit(node.value, newnode) 844 newnode.value = self.visit(node.value, newnode)
896 newnode.set_line_info(newnode.last_child())
897 return newnode 845 return newnode
898 846
899 def visit_try(self, node, parent): 847 def visit_try(self, node, parent):
900 # python 3.3 introduce a new Try node replacing TryFinally/TryExcept nod es 848 # python 3.3 introduce a new Try node replacing TryFinally/TryExcept nod es
901 if node.finalbody: 849 if node.finalbody:
902 newnode = new.TryFinally() 850 newnode = new.TryFinally()
903 _lineno_parent(node, newnode, parent) 851 _lineno_parent(node, newnode, parent)
904 newnode.finalbody = [self.visit(n, newnode) for n in node.finalbody] 852 newnode.finalbody = [self.visit(n, newnode) for n in node.finalbody]
905 if node.handlers: 853 if node.handlers:
906 excnode = new.TryExcept() 854 excnode = new.TryExcept()
907 _lineno_parent(node, excnode, newnode) 855 _lineno_parent(node, excnode, newnode)
908 excnode.body = [self.visit(child, excnode) for child in node.bod y] 856 excnode.body = [self.visit(child, excnode) for child in node.bod y]
909 excnode.handlers = [self.visit(child, excnode) for child in node .handlers] 857 excnode.handlers = [self.visit(child, excnode) for child in node .handlers]
910 excnode.orelse = [self.visit(child, excnode) for child in node.o relse] 858 excnode.orelse = [self.visit(child, excnode) for child in node.o relse]
911 excnode.set_line_info(excnode.last_child())
912 newnode.body = [excnode] 859 newnode.body = [excnode]
913 else: 860 else:
914 newnode.body = [self.visit(child, newnode) for child in node.bod y] 861 newnode.body = [self.visit(child, newnode) for child in node.bod y]
915 elif node.handlers: 862 elif node.handlers:
916 newnode = new.TryExcept() 863 newnode = new.TryExcept()
917 _lineno_parent(node, newnode, parent) 864 _lineno_parent(node, newnode, parent)
918 newnode.body = [self.visit(child, newnode) for child in node.body] 865 newnode.body = [self.visit(child, newnode) for child in node.body]
919 newnode.handlers = [self.visit(child, newnode) for child in node.han dlers] 866 newnode.handlers = [self.visit(child, newnode) for child in node.han dlers]
920 newnode.orelse = [self.visit(child, newnode) for child in node.orels e] 867 newnode.orelse = [self.visit(child, newnode) for child in node.orels e]
921 newnode.set_line_info(newnode.last_child())
922 return newnode 868 return newnode
923 869
924 def visit_with(self, node, parent): 870 def visit_with(self, node, parent):
925 if 'items' not in node._fields: 871 if 'items' not in node._fields:
926 # python < 3.3 872 # python < 3.3
927 return super(TreeRebuilder3k, self).visit_with(node, parent) 873 return super(TreeRebuilder3k, self).visit_with(node, parent)
928 874
929 newnode = new.With() 875 newnode = new.With()
930 _lineno_parent(node, newnode, parent) 876 _lineno_parent(node, newnode, parent)
931 def visit_child(child): 877 def visit_child(child):
932 expr = self.visit(child.context_expr, newnode) 878 expr = self.visit(child.context_expr, newnode)
933 self.asscontext = 'Ass' 879 self.asscontext = 'Ass'
934 if child.optional_vars: 880 if child.optional_vars:
935 var = self.visit(child.optional_vars, newnode) 881 var = self.visit(child.optional_vars, newnode)
936 else: 882 else:
937 var = None 883 var = None
938 self.asscontext = None 884 self.asscontext = None
939 return expr, var 885 return expr, var
940 newnode.items = [visit_child(child) 886 newnode.items = [visit_child(child)
941 for child in node.items] 887 for child in node.items]
942 newnode.body = [self.visit(child, newnode) for child in node.body] 888 newnode.body = [self.visit(child, newnode) for child in node.body]
943 newnode.set_line_info(newnode.last_child())
944 return newnode 889 return newnode
945 890
946 def visit_yieldfrom(self, node, parent): 891 def visit_yieldfrom(self, node, parent):
947 return _create_yield_node(node, parent, self, new.YieldFrom) 892 return _create_yield_node(node, parent, self, new.YieldFrom)
948 893
949 def visit_class(self, node, parent): 894 def visit_class(self, node, parent):
950 newnode = super(TreeRebuilder3k, self).visit_class(node, parent) 895 newnode = super(TreeRebuilder3k, self).visit_class(node, parent)
951 newnode._newstyle = True 896 newnode._newstyle = True
952 for keyword in node.keywords: 897 for keyword in node.keywords:
953 if keyword.arg == 'metaclass': 898 if keyword.arg == 'metaclass':
954 newnode._metaclass = self.visit(keyword, newnode).value 899 newnode._metaclass = self.visit(keyword, newnode).value
955 break 900 break
956 return newnode 901 return newnode
957 902
958 if sys.version_info >= (3, 0): 903 if sys.version_info >= (3, 0):
959 TreeRebuilder = TreeRebuilder3k 904 TreeRebuilder = TreeRebuilder3k
960 905
961 906
OLDNEW
« no previous file with comments | « third_party/logilab/astroid/raw_building.py ('k') | third_party/logilab/astroid/scoped_nodes.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698