Skip to content

Commit ed7b186

Browse files
committed
feat(langserver): better argument signatures for completion and signature help
don't break between prefix and name of signature
1 parent 063d105 commit ed7b186

File tree

3 files changed

+27
-20
lines changed

3 files changed

+27
-20
lines changed

packages/language_server/src/robotcode/language_server/robotframework/diagnostics/library_doc.py

Lines changed: 23 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@
2424
List,
2525
NamedTuple,
2626
Optional,
27+
Sequence,
2728
Set,
2829
Tuple,
2930
TypeVar,
@@ -370,25 +371,32 @@ def from_robot(arg: Any) -> ArgumentInfo:
370371
)
371372

372373
def __str__(self) -> str:
374+
return self.signature()
375+
376+
def signature(self, add_types: bool = True) -> str:
373377
prefix = ""
374378
if self.kind == KeywordArgumentKind.POSITIONAL_ONLY_MARKER:
375-
prefix = "*"
379+
prefix = "*\u200d"
376380
elif self.kind == KeywordArgumentKind.NAMED_ONLY_MARKER:
377-
prefix = "/"
381+
prefix = "/\u200d"
378382
elif self.kind == KeywordArgumentKind.VAR_NAMED:
379-
prefix = "**"
383+
prefix = "*\u200d*\u200d"
380384
elif self.kind == KeywordArgumentKind.VAR_POSITIONAL:
381-
prefix = "*"
385+
prefix = "*\u200d"
382386
elif self.kind == KeywordArgumentKind.NAMED_ONLY:
383-
prefix = "🏷"
387+
prefix = "🏷\u200d"
384388
elif self.kind == KeywordArgumentKind.POSITIONAL_ONLY:
385-
prefix = "⟶"
386-
return (
387-
f"{prefix}{self.name!s}"
388-
f"{(': ' + (' | '.join(f'{s}' for s in self.types))) if self.types else ''}"
389-
f"{' =' if self.default_value is not None else ''}"
390-
f"{f' {self.default_value!s}' if self.default_value else ''}"
391-
)
389+
prefix = "⟶\u200d"
390+
result = f"{prefix}{self.name!s}"
391+
if add_types:
392+
result += (
393+
f"{(': ' + (' | '.join(f'{s}' for s in self.types))) if self.types else ''}"
394+
f"{' =' if self.default_value is not None else ''}"
395+
f"{f' {self.default_value!s}' if self.default_value else ''}"
396+
if add_types
397+
else ""
398+
)
399+
return result
392400

393401
def __hash__(self) -> int:
394402
return id(self)
@@ -676,13 +684,12 @@ def signature(self) -> str:
676684
+ ")"
677685
)
678686

679-
@property
680-
def parameter_signature(self) -> str:
687+
def parameter_signature(self, full_signatures: Optional[Sequence[int]] = None) -> str:
681688
return (
682689
"("
683690
+ ", ".join(
684-
str(a)
685-
for a in self.arguments
691+
a.signature(full_signatures is None or i in full_signatures)
692+
for i, a in enumerate(self.arguments)
686693
if a.kind not in [KeywordArgumentKind.POSITIONAL_ONLY_MARKER, KeywordArgumentKind.NAMED_ONLY_MARKER]
687694
)
688695
+ ")"

packages/language_server/src/robotcode/language_server/robotframework/parts/completion.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2162,7 +2162,7 @@ async def _complete_KeywordCall_or_Fixture( # noqa: N802
21622162
if complete_argument_names:
21632163
result += [
21642164
CompletionItem(
2165-
label=f"{e.name}=",
2165+
label=f"{e.signature(False)}=",
21662166
kind=CompletionItemKind.VARIABLE,
21672167
detail="Argument",
21682168
filter_text=e.name,

packages/language_server/src/robotcode/language_server/robotframework/parts/signature_help.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -145,18 +145,18 @@ def _get_signature_help(
145145
)
146146

147147
signature = SignatureInformation(
148-
label=keyword_doc.parameter_signature,
148+
label=keyword_doc.parameter_signature(),
149149
parameters=[
150150
ParameterInformation(
151-
label=str(p),
151+
label=p.signature(),
152152
documentation=MarkupContent(
153153
kind=MarkupKind.MARKDOWN,
154154
value="\n\n---\n\n".join([t.to_markdown() for t in keyword_doc.parent.get_types(p.types)]),
155155
)
156156
if p.types and keyword_doc.parent is not None
157157
else None,
158158
)
159-
for p in kw_arguments
159+
for i, p in enumerate(kw_arguments)
160160
],
161161
active_parameter=argument_index,
162162
documentation=MarkupContent(kind=MarkupKind.MARKDOWN, value=keyword_doc.to_markdown(False)),

0 commit comments

Comments
 (0)