From 64af9524b773907770dd1e84f4b0f1915bb29992 Mon Sep 17 00:00:00 2001 From: Dave Halter Date: Mon, 12 May 2014 16:03:41 +0200 Subject: [PATCH] simple generator static analysis subscript check --- jedi/evaluate/analysis.py | 1 + jedi/evaluate/iterable.py | 4 +++- test/static_analysis/generators.py | 8 ++++++++ 3 files changed, 12 insertions(+), 1 deletion(-) create mode 100644 test/static_analysis/generators.py diff --git a/jedi/evaluate/analysis.py b/jedi/evaluate/analysis.py index 965c892e..ac3afdb8 100644 --- a/jedi/evaluate/analysis.py +++ b/jedi/evaluate/analysis.py @@ -8,6 +8,7 @@ from jedi import debug CODES = { 'attribute-error': (1, 'Potential AttributeError.'), 'import-error': (2, 'Potential ImportError.'), + 'type-error-generator': (3, "TypeError: 'generator' object is not subscriptable."), } diff --git a/jedi/evaluate/iterable.py b/jedi/evaluate/iterable.py index 9ff78e65..c8d8e64d 100644 --- a/jedi/evaluate/iterable.py +++ b/jedi/evaluate/iterable.py @@ -32,6 +32,7 @@ from jedi.evaluate import helpers from jedi.evaluate import precedence from jedi.evaluate.cache import CachedMetaClass, memoize_default, NO_DEFAULT from jedi.cache import underscore_memoization +from jedi.evaluate import analysis class Generator(use_metaclass(CachedMetaClass, pr.Base)): @@ -61,7 +62,8 @@ class Generator(use_metaclass(CachedMetaClass, pr.Base)): return self._evaluator.execute(self.func, self.var_args, True) def get_index_types(self, index_array): - debug.warning('Tried to get array access on a generator: %s', self) + #debug.warning('Tried to get array access on a generator: %s', self) + analysis.add(self._evaluator, 'type-error-generator', index_array) return [] def __getattr__(self, name): diff --git a/test/static_analysis/generators.py b/test/static_analysis/generators.py new file mode 100644 index 00000000..9606d663 --- /dev/null +++ b/test/static_analysis/generators.py @@ -0,0 +1,8 @@ +def generator(): + yield 1 + +#! type-error-generator +generator()[0] + +list(generator())[0] +