From 521e240c5fae81af8bf2843d8f6aea546bc0f52a Mon Sep 17 00:00:00 2001 From: Dave Halter Date: Fri, 13 Mar 2020 12:53:05 +0100 Subject: [PATCH] Changed semantics of ClassVar attributes in classes, fixes #1502 --- jedi/inference/value/klass.py | 6 +++++- test/completion/pep0526_variables.py | 6 +++--- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/jedi/inference/value/klass.py b/jedi/inference/value/klass.py index 9f7e4982..13a483e3 100644 --- a/jedi/inference/value/klass.py +++ b/jedi/inference/value/klass.py @@ -115,7 +115,11 @@ class ClassFilter(ParserTreeFilter): annassign = expr_stmt.children[1] if annassign.type == 'annassign': # TODO this is not proper matching - if 'ClassVar' not in annassign.children[1].get_code(): + + # If there is an =, the variable is obviously also + # defined on the class. + if 'ClassVar' not in annassign.children[1].get_code() \ + and '=' not in annassign.children: return False # Filter for name mangling of private variables like __foo diff --git a/test/completion/pep0526_variables.py b/test/completion/pep0526_variables.py index 6af77d91..39168339 100644 --- a/test/completion/pep0526_variables.py +++ b/test/completion/pep0526_variables.py @@ -57,7 +57,7 @@ Foo.baz Foo().baz class VarClass: - var_instance1: int = 1 + var_instance1: int = '' var_instance2: float var_class1: typing.ClassVar[str] = 1 var_class2: typing.ClassVar[bytes] @@ -77,9 +77,9 @@ class VarClass: self.var_ -#? ['var_class1', 'var_class2'] +#? ['var_class1', 'var_class2', 'var_instance1'] VarClass.var_ -#? +#? int() VarClass.var_instance1 #? VarClass.var_instance2