Lines Matching refs:node
55 def generate(node, environment, name, filename, stream=None,
57 """Generate the python source for a node tree."""
58 if not isinstance(node, nodes.Template):
61 generator.visit(node)
67 """Does the node have a safe representation?"""
94 for node in nodes:
95 visitor.visit(node)
193 """Walk the node and check for identifiers. If the scope is hard (eg:
198 for node in nodes:
199 visitor.visit(node)
237 def visit_Filter(self, node):
238 self.generic_visit(node)
239 self.filters.add(node.name)
241 def visit_Test(self, node):
242 self.generic_visit(node)
243 self.tests.add(node.name)
245 def visit_Block(self, node):
259 def visit_Name(self, node):
260 if node.ctx == 'load' and node.name in self.names:
261 self.undeclared.add(node.name)
265 self.names.discard(node.name)
267 def visit_Block(self, node):
277 def visit_Name(self, node):
279 if node.ctx == 'store':
280 self.identifiers.declared_locally.add(node.name)
281 elif node.ctx == 'param':
282 self.identifiers.declared_parameter.add(node.name)
283 elif node.ctx == 'load' and not \
284 self.identifiers.is_declared(node.name):
285 self.identifiers.undeclared.add(node.name)
287 def visit_If(self, node):
288 self.visit(node.test)
307 body = inner_visit(node.body)
308 else_ = inner_visit(node.else_ or ())
318 def visit_Macro(self, node):
319 self.identifiers.declared_locally.add(node.name)
321 def visit_Import(self, node):
322 self.generic_visit(node)
323 self.identifiers.declared_locally.add(node.target)
325 def visit_FromImport(self, node):
326 self.generic_visit(node)
327 for name in node.names:
333 def visit_Assign(self, node):
335 self.visit(node.node)
336 self.visit(node.target)
338 def visit_For(self, node):
342 self.visit(node.iter)
344 def visit_CallBlock(self, node):
345 self.visit(node.call)
347 def visit_FilterBlock(self, node):
348 self.visit(node.filter)
350 def visit_Scope(self, node):
353 def visit_Block(self, node):
459 def start_write(self, frame, node=None):
462 self.writeline('yield ', node)
464 self.writeline('%s.append(' % frame.buffer, node)
471 def simple_write(self, s, frame, node=None):
473 self.start_write(frame, node)
487 for node in nodes:
488 self.visit(node, frame)
507 def writeline(self, x, node=None, extra=0):
509 self.newline(node, extra)
512 def newline(self, node=None, extra=0):
515 if node is not None and node.lineno != self._last_line:
516 self._write_debug_info = node.lineno
517 self._last_line = node.lineno
519 def signature(self, node, frame, extra_kwargs=None):
520 """Writes a function call to the stream for the current node.
529 for kwarg in chain((x.key for x in node.kwargs), extra_kwargs or ()):
534 for arg in node.args:
539 for kwarg in node.kwargs:
545 if node.dyn_args:
547 self.visit(node.dyn_args, frame)
550 if node.dyn_kwargs is not None:
554 for kwarg in node.kwargs:
561 if node.dyn_kwargs is not None:
563 self.visit(node.dyn_kwargs, frame)
568 elif node.dyn_kwargs is not None:
570 self.visit(node.dyn_kwargs, frame)
580 for node in nodes:
581 visitor.visit(node)
638 def function_scoping(self, node, frame, children=None,
653 children = node.iter_child_nodes()
673 ', '.join(sorted(overridden_closure_vars)), node.lineno)
689 func_frame.arguments = args = ['l_' + x.name for x in node.args]
707 def macro_body(self, node, frame, children=None):
709 frame = self.function_scoping(node, frame, children)
722 self.writeline('def macro(%s):' % ', '.join(args), node)
726 self.blockvisit(node.body, frame)
731 def macro_def(self, node, frame):
733 arg_tuple = ', '.join(repr(x.name) for x in node.args)
734 name = getattr(node, 'name', None)
735 if len(node.args) == 1:
739 for arg in node.defaults:
748 def position(self, node):
749 """Return a human readable position for the node."""
750 rv = 'line %d' % node.lineno
757 def visit_Template(self, node, frame=None):
773 have_extends = node.find(nodes.Extends) is not None
776 for block in node.find_all(nodes.Block):
782 for import_ in node.find_all(nodes.ImportedName):
801 frame.inspect(node.body)
807 if 'self' in find_undeclared(node.body, ('self',)):
811 self.pull_dependencies(node.body)
812 self.blockvisit(node.body, frame)
856 def visit_Block(self, node, frame):
868 context = node.scoped and 'context.derived(locals())' or 'context'
870 node.name, context), node)
875 def visit_Extends(self, node, frame):
879 node.lineno)
903 self.writeline('parent_template = environment.get_template(', node)
904 self.visit(node.template, frame)
922 def visit_Include(self, node, frame):
924 if node.with_context:
926 if node.ignore_missing:
931 if isinstance(node.template, nodes.Const):
932 if isinstance(node.template.value, string_types):
934 elif isinstance(node.template.value, (tuple, list)):
936 elif isinstance(node.template, (nodes.Tuple, nodes.List)):
939 self.writeline('template = environment.%s(' % func_name, node)
940 self.visit(node.template, frame)
942 if node.ignore_missing:
951 if node.with_context:
962 if node.ignore_missing:
965 def visit_Import(self, node, frame):
967 if node.with_context:
969 self.writeline('l_%s = ' % node.target, node)
971 self.write('context.vars[%r] = ' % node.target)
973 self.visit(node.template, frame)
975 if node.with_context:
979 if frame.toplevel and not node.target.startswith('_'):
980 self.writeline('context.exported_vars.discard(%r)' % node.target)
981 frame.assigned_names.add(node.target)
983 def visit_FromImport(self, node, frame):
985 self.newline(node)
987 self.visit(node.template, frame)
989 if node.with_context:
996 for name in node.names:
1010 self.position(node),
1036 def visit_For(self, node, frame):
1039 children = node.iter_child_nodes(exclude=('iter',))
1040 if node.recursive:
1041 loop_frame = self.function_scoping(node, frame, children,
1050 extended_loop = node.recursive or 'loop' in \
1051 find_undeclared(node.iter_child_nodes(
1057 if not node.recursive:
1062 self.writeline('def loop(reciter, loop_render_func, depth=0):', node)
1072 for name in node.find_all(nodes.Name):
1078 if node.else_:
1086 node.iter_child_nodes(only=('else_', 'test')), ('loop',)):
1092 self.position(node)))
1094 self.writeline('for ', node)
1095 self.visit(node.target, loop_frame)
1098 # if we have an extened loop and a node test, we filter in the
1100 if extended_loop and node.test is not None:
1102 self.visit(node.target, loop_frame)
1104 self.visit(node.target, loop_frame)
1106 if node.recursive:
1109 self.visit(node.iter, loop_frame)
1112 self.visit(node.test, test_frame)
1115 elif node.recursive:
1118 self.visit(node.iter, loop_frame)
1120 if node.recursive:
1126 if not extended_loop and node.test is not None:
1129 self.visit(node.test, loop_frame)
1136 self.blockvisit(node.body, loop_frame)
1137 if node.else_:
1141 if node.else_:
1144 self.blockvisit(node.else_, loop_frame)
1148 if not node.recursive:
1151 # if the node was recursive we have to return the buffer contents
1153 if node.recursive:
1156 self.start_write(frame, node)
1158 self.visit(node.iter, frame)
1162 def visit_If(self, node, frame):
1164 self.writeline('if ', node)
1165 self.visit(node.test, if_frame)
1168 self.blockvisit(node.body, if_frame)
1170 if node.else_:
1173 self.blockvisit(node.else_, if_frame)
1176 def visit_Macro(self, node, frame):
1177 macro_frame = self.macro_body(node, frame)
1180 if not node.name.startswith('_'):
1181 self.write('context.exported_vars.add(%r)' % node.name)
1182 self.writeline('context.vars[%r] = ' % node.name)
1183 self.write('l_%s = ' % node.name)
1184 self.macro_def(node, macro_frame)
1185 frame.assigned_names.add(node.name)
1187 def visit_CallBlock(self, node, frame):
1188 children = node.iter_child_nodes(exclude=('call',))
1189 call_frame = self.macro_body(node, frame, children)
1191 self.macro_def(node, call_frame)
1192 self.start_write(frame, node)
1193 self.visit_Call(node.call, call_frame, forward_caller=True)
1196 def visit_FilterBlock(self, node, frame):
1198 filter_frame.inspect(node.iter_child_nodes())
1202 self.blockvisit(node.body, filter_frame)
1203 self.start_write(frame, node)
1204 self.visit_Filter(node.filter, filter_frame)
1208 def visit_ExprStmt(self, node, frame):
1209 self.newline(node)
1210 self.visit(node.node, frame)
1212 def visit_Output(self, node, frame):
1233 for child in node.nodes:
1250 # if something goes wrong here we evaluate the node
1335 def visit_Assign(self, node, frame):
1336 self.newline(node)
1346 self.visit(node.target, assignment_frame)
1348 self.visit(node.node, frame)
1374 def visit_Name(self, node, frame):
1375 if node.ctx == 'store' and frame.toplevel:
1376 frame.toplevel_assignments.add(node.name)
1377 self.write('l_' + node.name)
1378 frame.assigned_names.add(node.name)
1380 def visit_Const(self, node, frame):
1381 val = node.value
1387 def visit_TemplateData(self, node, frame):
1389 self.write(repr(node.as_const(frame.eval_ctx)))
1392 % node.data)
1394 def visit_Tuple(self, node, frame):
1397 for idx, item in enumerate(node.items):
1403 def visit_List(self, node, frame):
1405 for idx, item in enumerate(node.items):
1411 def visit_Dict(self, node, frame):
1413 for idx, item in enumerate(node.items):
1422 def visitor(self, node, frame):
1426 self.visit(node.left, frame)
1428 self.visit(node.right, frame)
1431 self.visit(node.left, frame)
1433 self.visit(node.right, frame)
1438 def visitor(self, node, frame):
1442 self.visit(node.node, frame)
1445 self.visit(node.node, frame)
1463 def visit_Concat(self, node, frame):
1472 for arg in node.nodes:
1477 def visit_Compare(self, node, frame):
1478 self.visit(node.expr, frame)
1479 for op in node.ops:
1482 def visit_Operand(self, node, frame):
1483 self.write(' %s ' % operators[node.op])
1484 self.visit(node.expr, frame)
1486 def visit_Getattr(self, node, frame):
1488 self.visit(node.node, frame)
1489 self.write(', %r)' % node.attr)
1491 def visit_Getitem(self, node, frame):
1493 if isinstance(node.arg, nodes.Slice):
1494 self.visit(node.node, frame)
1496 self.visit(node.arg, frame)
1500 self.visit(node.node, frame)
1502 self.visit(node.arg, frame)
1505 def visit_Slice(self, node, frame):
1506 if node.start is not None:
1507 self.visit(node.start, frame)
1509 if node.stop is not None:
1510 self.visit(node.stop, frame)
1511 if node.step is not None:
1513 self.visit(node.step, frame)
1515 def visit_Filter(self, node, frame):
1516 self.write(self.filters[node.name] + '(')
1517 func = self.environment.filters.get(node.name)
1519 self.fail('no filter named %r' % node.name, node.lineno)
1527 # if the filter node is None we are inside a filter block
1529 if node.node is not None:
1530 self.visit(node.node, frame)
1539 self.signature(node, frame)
1542 def visit_Test(self, node, frame):
1543 self.write(self.tests[node.name] + '(')
1544 if node.name not in self.environment.tests:
1545 self.fail('no test named %r' % node.name, node.lineno)
1546 self.visit(node.node, frame)
1547 self.signature(node, frame)
1550 def visit_CondExpr(self, node, frame):
1552 if node.expr2 is not None:
1553 return self.visit(node.expr2, frame)
1556 'no else section was defined.' % self.position(node)))
1559 self.visit(node.expr1, frame)
1561 self.visit(node.test, frame)
1566 def visit_Call(self, node, frame, forward_caller=False):
1571 self.visit(node.node, frame)
1573 self.signature(node, frame, extra_kwargs)
1576 def visit_Keyword(self, node, frame):
1577 self.write(node.key + '=')
1578 self.visit(node.value, frame)
1582 def visit_MarkSafe(self, node, frame):
1584 self.visit(node.expr, frame)
1587 def visit_MarkSafeIfAutoescape(self, node, frame):
1589 self.visit(node.expr, frame)
1592 def visit_EnvironmentAttribute(self, node, frame):
1593 self.write('environment.' + node.name)
1595 def visit_ExtensionAttribute(self, node, frame):
1596 self.write('environment.extensions[%r].%s' % (node.identifier, node.name))
1598 def visit_ImportedName(self, node, frame):
1599 self.write(self.import_aliases[node.importname])
1601 def visit_InternalName(self, node, frame):
1602 self.write(node.name)
1604 def visit_ContextReference(self, node, frame):
1607 def visit_Continue(self, node, frame):
1608 self.writeline('continue', node)
1610 def visit_Break(self, node, frame):
1611 self.writeline('break', node)
1613 def visit_Scope(self, node, frame):
1615 scope_frame.inspect(node.iter_child_nodes())
1618 self.blockvisit(node.body, scope_frame)
1621 def visit_EvalContextModifier(self, node, frame):
1622 for keyword in node.options:
1632 def visit_ScopedEvalContextModifier(self, node, frame):
1636 self.visit_EvalContextModifier(node, frame)
1637 for child in node.body: