mirror of
https://github.com/davidhalter/jedi.git
synced 2026-10-17 20:31:25 +08:00
Avoid a crash, fixes #1990
This commit is contained in:
1 parent
ea1b96ff10
commit
dd7d4a92f4
2 files changed
+19
-3
No files matched your search
@@ -256,12 +256,11 @@ class CompiledValue(Value):
|
|||||||
arg.execute_annotation(context)
|
arg.execute_annotation(context)
|
||||||
for arg in arguments)
|
for arg in arguments)
|
||||||
elif name:
|
elif name:
|
||||||
# While with_generics only exists on very specific objects, we
|
# These are typically typing module objects. Try to use that to create generics.
|
||||||
# should probably be fine, because we control all the typing
|
|
||||||
# objects.
|
|
||||||
return ValueSet([
|
return ValueSet([
|
||||||
v.with_generics(arguments)
|
v.with_generics(arguments)
|
||||||
for v in self.inference_state.typing_module.py__getattribute__(name)
|
for v in self.inference_state.typing_module.py__getattribute__(name)
|
||||||
|
if hasattr(v, "with_generics")
|
||||||
]).execute_annotation(context)
|
]).execute_annotation(context)
|
||||||
return super().execute_annotation(context)
|
return super().execute_annotation(context)
|
||||||
|
|
||||||
|
|||||||
@@ -873,3 +873,20 @@ def test_whitespace_after_dot_completion(Script):
|
|||||||
# From #1954
|
# From #1954
|
||||||
completions = jedi.Interpreter("object. \n", []).complete(1, 8)
|
completions = jedi.Interpreter("object. \n", []).complete(1, 8)
|
||||||
assert "mro" in [c.name for c in completions]
|
assert "mro" in [c.name for c in completions]
|
||||||
|
|
||||||
|
|
||||||
|
def test_interpreter_with_literals_no_crash():
|
||||||
|
# From #1990
|
||||||
|
class A:
|
||||||
|
@property
|
||||||
|
def value(self) -> typing.Literal["a"]:
|
||||||
|
return "a"
|
||||||
|
|
||||||
|
a = A()
|
||||||
|
|
||||||
|
interpreter = jedi.Interpreter("a.", [{"a": a}])
|
||||||
|
value = next(filter(lambda c: c.name == "value", interpreter.complete()))
|
||||||
|
assert value.name == "value"
|
||||||
|
|
||||||
|
interpreter = jedi.Interpreter("a.value.", [{"a": a}])
|
||||||
|
assert "upper" in [c.name for c in interpreter.complete()]
|
||||||
Reference in new issue
Block a user