mirror of
https://github.com/sphinx-doc/sphinx.git
synced 2025-02-25 18:55:22 -06:00
pycode: Detect @overload decorators
This commit is contained in:
@@ -13,6 +13,7 @@ import sys
|
||||
import pytest
|
||||
|
||||
from sphinx.pycode.parser import Parser
|
||||
from sphinx.util.inspect import signature_from_str
|
||||
|
||||
|
||||
def test_comment_picker_basic():
|
||||
@@ -452,3 +453,80 @@ def test_typing_final_not_imported():
|
||||
parser = Parser(source)
|
||||
parser.parse()
|
||||
assert parser.finals == []
|
||||
|
||||
|
||||
def test_typing_overload():
|
||||
source = ('import typing\n'
|
||||
'\n'
|
||||
'@typing.overload\n'
|
||||
'def func(x: int, y: int) -> int: pass\n'
|
||||
'\n'
|
||||
'@typing.overload\n'
|
||||
'def func(x: str, y: str) -> str: pass\n'
|
||||
'\n'
|
||||
'def func(x, y): pass\n')
|
||||
parser = Parser(source)
|
||||
parser.parse()
|
||||
assert parser.overloads == {'func': [signature_from_str('(x: int, y: int) -> int'),
|
||||
signature_from_str('(x: str, y: str) -> str')]}
|
||||
|
||||
|
||||
def test_typing_overload_from_import():
|
||||
source = ('from typing import overload\n'
|
||||
'\n'
|
||||
'@overload\n'
|
||||
'def func(x: int, y: int) -> int: pass\n'
|
||||
'\n'
|
||||
'@overload\n'
|
||||
'def func(x: str, y: str) -> str: pass\n'
|
||||
'\n'
|
||||
'def func(x, y): pass\n')
|
||||
parser = Parser(source)
|
||||
parser.parse()
|
||||
assert parser.overloads == {'func': [signature_from_str('(x: int, y: int) -> int'),
|
||||
signature_from_str('(x: str, y: str) -> str')]}
|
||||
|
||||
|
||||
def test_typing_overload_import_as():
|
||||
source = ('import typing as foo\n'
|
||||
'\n'
|
||||
'@foo.overload\n'
|
||||
'def func(x: int, y: int) -> int: pass\n'
|
||||
'\n'
|
||||
'@foo.overload\n'
|
||||
'def func(x: str, y: str) -> str: pass\n'
|
||||
'\n'
|
||||
'def func(x, y): pass\n')
|
||||
parser = Parser(source)
|
||||
parser.parse()
|
||||
assert parser.overloads == {'func': [signature_from_str('(x: int, y: int) -> int'),
|
||||
signature_from_str('(x: str, y: str) -> str')]}
|
||||
|
||||
|
||||
def test_typing_overload_from_import_as():
|
||||
source = ('from typing import overload as bar\n'
|
||||
'\n'
|
||||
'@bar\n'
|
||||
'def func(x: int, y: int) -> int: pass\n'
|
||||
'\n'
|
||||
'@bar\n'
|
||||
'def func(x: str, y: str) -> str: pass\n'
|
||||
'\n'
|
||||
'def func(x, y): pass\n')
|
||||
parser = Parser(source)
|
||||
parser.parse()
|
||||
assert parser.overloads == {'func': [signature_from_str('(x: int, y: int) -> int'),
|
||||
signature_from_str('(x: str, y: str) -> str')]}
|
||||
|
||||
|
||||
def test_typing_overload_not_imported():
|
||||
source = ('@typing.final\n'
|
||||
'def func(x: int, y: int) -> int: pass\n'
|
||||
'\n'
|
||||
'@typing.final\n'
|
||||
'def func(x: str, y: str) -> str: pass\n'
|
||||
'\n'
|
||||
'def func(x, y): pass\n')
|
||||
parser = Parser(source)
|
||||
parser.parse()
|
||||
assert parser.overloads == {}
|
||||
|
||||
Reference in New Issue
Block a user