mirror of
https://github.com/davidhalter/jedi.git
synced 2026-10-14 08:08:57 +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)
|
||||
for arg in arguments)
|
||||
elif name:
|
||||
# While with_generics only exists on very specific objects, we
|
||||
# should probably be fine, because we control all the typing
|
||||
# objects.
|
||||
# These are typically typing module objects. Try to use that to create generics.
|
||||
return ValueSet([
|
||||
v.with_generics(arguments)
|
||||
for v in self.inference_state.typing_module.py__getattribute__(name)
|
||||
if hasattr(v, "with_generics")
|
||||
]).execute_annotation(context)
|
||||
return super().execute_annotation(context)
|
||||
|
||||
|
||||
@@ -873,3 +873,20 @@ def test_whitespace_after_dot_completion(Script):
|
||||
# From #1954
|
||||
completions = jedi.Interpreter("object. \n", []).complete(1, 8)
|
||||
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