diff --git a/jedi/inference/value/klass.py b/jedi/inference/value/klass.py index 0135624a..071ec4d5 100644 --- a/jedi/inference/value/klass.py +++ b/jedi/inference/value/klass.py @@ -75,17 +75,17 @@ class ClassName(TreeNameDefinition): @property def api_type(self): - if self.tree_name is not None: + type_ = super().api_type + if type_ == 'function': definition = self.tree_name.get_definition() - if definition.type == 'funcdef': - if function_is_property(definition): - # This essentially checks if there is an @property before - # the function. @property could be something different, but - # any programmer that redefines property as something that - # is not really a property anymore, should be shot. (i.e. - # this is a heuristic). - return 'property' - return super().api_type + if function_is_property(definition): + # This essentially checks if there is an @property before + # the function. @property could be something different, but + # any programmer that redefines property as something that + # is not really a property anymore, should be shot. (i.e. + # this is a heuristic). + return 'property' + return type_ class ClassFilter(ParserTreeFilter): diff --git a/test/completion/arrays.py b/test/completion/arrays.py index 545082d6..59b8f2fe 100644 --- a/test/completion/arrays.py +++ b/test/completion/arrays.py @@ -214,6 +214,20 @@ f #? str() g +# ----------------- +# setitem +# ----------------- + +class F: + setitem_x = [1,2] + setitem_x[0] = 3 + +#? ['setitem_x'] +F().setitem_x +#? list() +F().setitem_x + + # ----------------- # dicts # ----------------- diff --git a/test/run.py b/test/run.py index a55cd4bc..92e21d61 100755 --- a/test/run.py +++ b/test/run.py @@ -209,6 +209,9 @@ class IntegrationTestCase(BaseTestCase): # import cProfile; cProfile.run('...') comp_str = {c.name for c in completions} + for r in completions: + # Test if this access raises an error + assert isinstance(r.type, str) return compare_cb(self, comp_str, set(literal_eval(self.correct))) def run_inference(self, compare_cb, environment): @@ -244,6 +247,9 @@ class IntegrationTestCase(BaseTestCase): should = definition(self.correct, self.start, script.path) result = script.infer(self.line_nr, self.column) is_str = set(comparison(r) for r in result) + for r in result: + # Test if this access raises an error + assert isinstance(r.type, str) return compare_cb(self, is_str, should) def run_goto(self, compare_cb, environment):