if not symbol_is_local and not symbol_is_param:
if node.id in self.literals:
anno.setanno(node, 'live_val', self.literals[node.id])
- # TODO(mdan): Could live values have FQNs? i.e. 'a'.join()
elif node.id in self.context.namespace:
obj = self.context.namespace[node.id]
anno.setanno(node, 'live_val', obj)
- anno.setanno(node, 'fqn', (obj.__name__,))
+ if hasattr(obj, '__name__'):
+ # If the symbol value is for example a primitive, then it will not
+ # have a name.
+ anno.setanno(node, 'fqn', (obj.__name__,))
else:
pass
# TODO(mdan): Should we raise an error here?
def test_literals(self):
+ a = None
+
def test_fn():
- return Foo # pylint: disable=undefined-variable
+ return a
- node = self._parse_and_analyze(test_fn, {}, {'Foo': 'bar'})
+ node = self._parse_and_analyze(test_fn, {}, literals={'a': 'bar'})
retval_node = node.body[0].body[0].value
self.assertEquals('bar', anno.getanno(retval_node, 'live_val'))
+ def test_primitive_values(self):
+
+ a = None
+
+ def test_fn():
+ return a
+
+ node = self._parse_and_analyze(test_fn, {'a': True})
+ retval_node = node.body[0].body[0].value
+ self.assertFalse(anno.hasanno(retval_node, 'fqn'))
+
def test_namespace(self):
def foo():