]> git.ipfire.org Git - thirdparty/jinja.git/commitdiff
exclude globals from find_undeclared_variables 994/head
authorBrendan <brendancq@gmail.com>
Tue, 7 May 2019 16:00:06 +0000 (12:00 -0400)
committerDavid Lord <davidism@gmail.com>
Mon, 22 Jul 2019 17:43:47 +0000 (10:43 -0700)
CHANGES.rst
jinja2/meta.py
tests/test_api.py

index 9a116531397a6bc7f340890296cb5546021242e2..ae7f9d60143e1c281675d24eeb263957314613ac 100644 (file)
@@ -19,6 +19,8 @@ unreleased
 - Allow ``{%+`` syntax (with NOP behavior) when
   ``lstrip_blocks == False`` (`#748`_)
 - Added a ``default`` parameter for the ``map`` filter. (`#557`_)
+-   Exclude environment globals from
+    :func:`meta.find_undeclared_variables`. #931
 
 .. _#557: https://github.com/pallets/jinja/issues/557
 .. _#765: https://github.com/pallets/jinja/issues/765
index 7421914f77242d755ede1a43b9518e73b85e894e..0d259165c4e47a5790a52c6ed8e39e36d8a23f2e 100644 (file)
@@ -29,7 +29,7 @@ class TrackingCodeGenerator(CodeGenerator):
         """Remember all undeclared identifiers."""
         CodeGenerator.enter_frame(self, frame)
         for _, (action, param) in iteritems(frame.symbols.loads):
-            if action == 'resolve':
+            if action == 'resolve' and param not in self.environment.globals:
                 self.undeclared_identifiers.add(param)
 
 
index 47dc4095d3c7ae0e9c5358bdd76938a91432968f..c73ae744e4cfd878d336a90940403c19c3520322 100644 (file)
@@ -121,6 +121,10 @@ class TestMeta(object):
         x = meta.find_undeclared_variables(ast)
         assert x == set(['bar', 'seq', 'muh'])
 
+        ast = env.parse('{% for x in range(5) %}{{ x }}{% endfor %}{{ foo }}')
+        x = meta.find_undeclared_variables(ast)
+        assert x == set(['foo'])
+
     def test_find_refererenced_templates(self, env):
         ast = env.parse('{% extends "layout.html" %}{% include helper %}')
         i = meta.find_referenced_templates(ast)