forked from VimPlug/jedi
typing.Union and typing.Optional
This commit is contained in:
@@ -110,6 +110,13 @@ def get_types_for_typing_module(evaluator, typ, node):
|
|||||||
nodes = node.children[::2] # skip the commas
|
nodes = node.children[::2] # skip the commas
|
||||||
else:
|
else:
|
||||||
nodes = [node]
|
nodes = [node]
|
||||||
|
del node
|
||||||
|
|
||||||
|
# hacked in Union and Optional, since it's hard to do nicely in parsed code
|
||||||
|
if typ.name.value == "Union":
|
||||||
|
return set().union(*[evaluator.eval_element(node) for node in nodes])
|
||||||
|
if typ.name.value == "Optional":
|
||||||
|
return evaluator.eval_element(nodes[0])
|
||||||
|
|
||||||
typing = _get_typing_replacement_module()
|
typing = _get_typing_replacement_module()
|
||||||
factories = evaluator.find_types(typing, "factory")
|
factories = evaluator.find_types(typing, "factory")
|
||||||
|
|||||||
@@ -154,5 +154,32 @@ def mapping(
|
|||||||
##? Value() --- TODO fix support for tuple assignment
|
##? Value() --- TODO fix support for tuple assignment
|
||||||
value
|
value
|
||||||
|
|
||||||
|
def union(
|
||||||
|
p: typing.Union[int],
|
||||||
|
q: typing.Union[int, int],
|
||||||
|
r: typing.Union[int, str, "int"],
|
||||||
|
s: typing.Union[int, typing.Union[str, "typing.Union['float', 'dict']"]],
|
||||||
|
t: typing.Union[int, None]):
|
||||||
|
#? int()
|
||||||
|
p
|
||||||
|
#? int()
|
||||||
|
q
|
||||||
|
#? int() str()
|
||||||
|
r
|
||||||
|
#? int() str() float() dict()
|
||||||
|
s
|
||||||
|
#? int()
|
||||||
|
t
|
||||||
|
|
||||||
|
def optional(
|
||||||
|
p: typing.Optional[int]):
|
||||||
|
"""
|
||||||
|
Optional does not do anything special. However it should be recognised
|
||||||
|
as being of that type. Jedi doesn't do anything with the extra into that
|
||||||
|
it can be None as well
|
||||||
|
"""
|
||||||
|
#? int()
|
||||||
|
p
|
||||||
|
|
||||||
class ForwardReference:
|
class ForwardReference:
|
||||||
pass
|
pass
|
||||||
|
|||||||
Reference in New Issue
Block a user