1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106
|
# Copyright 2017-2020 Palantir Technologies, Inc.
# Copyright 2021- Python Language Server Contributors.
import pytest
from pylsp import uris
from pylsp.plugins import signature
from pylsp.workspace import Document
DOC_URI = uris.from_fs_path(__file__)
DOC = """import sys
def main(param1, param2):
\"\"\" Main docstring
Args:
param1 (str): Docs for param1
\"\"\"
raise Exception()
main(
"""
MULTI_LINE_DOC = """import sys
def main(param1=None,
param2=None,
param3=None,
param4=None,
param5=None,
param6=None,
param7=None,
param8=None):
\"\"\" Main docstring
Args:
param1 (str): Docs for param1
\"\"\"
raise Exception()
main(
"""
def test_no_signature(workspace) -> None:
# Over blank line
sig_position = {"line": 9, "character": 0}
doc = Document(DOC_URI, workspace, DOC)
sigs = signature.pylsp_signature_help(doc._config, doc, sig_position)["signatures"]
assert not sigs
def test_signature(workspace) -> None:
# Over '( ' in main(
sig_position = {"line": 10, "character": 5}
doc = Document(DOC_URI, workspace, DOC)
sig_info = signature.pylsp_signature_help(doc._config, doc, sig_position)
sigs = sig_info["signatures"]
assert len(sigs) == 1
assert sigs[0]["label"] == "main(param1, param2)"
assert sigs[0]["parameters"][0]["label"] == "param1"
assert sigs[0]["parameters"][0]["documentation"] == {
"kind": "markdown",
"value": "Docs for param1",
}
assert sig_info["activeParameter"] == 0
def test_multi_line_signature(workspace) -> None:
# Over '( ' in main(
sig_position = {"line": 17, "character": 5}
doc = Document(DOC_URI, workspace, MULTI_LINE_DOC)
sig_info = signature.pylsp_signature_help(doc._config, doc, sig_position)
sigs = sig_info["signatures"]
assert len(sigs) == 1
assert sigs[0]["label"] == (
"main(param1=None, param2=None, param3=None, param4=None, "
"param5=None, param6=None, param7=None, param8=None)"
)
assert sigs[0]["parameters"][0]["label"] == "param1"
assert sigs[0]["parameters"][0]["documentation"] == {
"kind": "markdown",
"value": "Docs for param1",
}
assert sig_info["activeParameter"] == 0
@pytest.mark.parametrize(
"regex,doc",
[
(signature.SPHINX, " :param test: parameter docstring"),
(signature.EPYDOC, " @param test: parameter docstring"),
(signature.GOOGLE, " test (str): parameter docstring"),
],
)
def test_docstring_params(regex, doc) -> None:
m = regex.match(doc)
assert m.group("param") == "test"
assert m.group("doc") == "parameter docstring"
|