Skip to content

Commit 4601d08

Browse files
committed
correct triggering of keyword completion window
1 parent c7f05e3 commit 4601d08

File tree

2 files changed

+45
-16
lines changed

2 files changed

+45
-16
lines changed

CHANGELOG.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,9 @@ All notable changes to the "robotcode" extension will be documented in this file
55
## [Unreleased]
66

77
### added
8+
89
- correct semantic highlight of variables and settings
10+
- completion window for keywords is now opened only after triggering Ctrl+Space or input of the first character
911

1012
## 0.4.4
1113

robotcode/language_server/robotframework/parts/completion.py

Lines changed: 43 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -423,9 +423,7 @@ async def create_keyword_settings_completion_items(self, range: Optional[Range])
423423
]
424424

425425
async def create_keyword_completion_items(
426-
self,
427-
token: Optional[Token],
428-
position: Position,
426+
self, token: Optional[Token], position: Position, add_reserverd: bool = True
429427
) -> List[CompletionItem]:
430428
result: List[CompletionItem] = []
431429
if self.document is None:
@@ -561,15 +559,16 @@ def enumerate_indexes(s: str, c: str) -> Iterator[int]:
561559
)
562560
result.append(c)
563561

564-
for k in RESERVERD_KEYWORDS:
565-
c = CompletionItem(
566-
label=k,
567-
kind=CompletionItemKind.KEYWORD,
568-
sort_text=f"040_{k}",
569-
insert_text_format=InsertTextFormat.PLAINTEXT,
570-
text_edit=TextEdit(range=r, new_text=k) if r is not None else None,
571-
)
572-
result.append(c)
562+
if add_reserverd:
563+
for k in RESERVERD_KEYWORDS:
564+
c = CompletionItem(
565+
label=k,
566+
kind=CompletionItemKind.KEYWORD,
567+
sort_text=f"999_{k}",
568+
insert_text_format=InsertTextFormat.PLAINTEXT,
569+
text_edit=TextEdit(range=r, new_text=k) if r is not None else None,
570+
)
571+
result.append(c)
573572

574573
return result
575574

@@ -701,6 +700,14 @@ async def _complete_TestCase_or_Keyword( # noqa: N802
701700
from robot.parsing.lexer.tokens import Token as RobotToken
702701
from robot.parsing.model.statements import KeywordName, Statement, TestCaseName
703702

703+
# TODO should this be configurable?
704+
if (
705+
context is not None
706+
and context.trigger_kind == CompletionTriggerKind.TRIGGERCHARACTER
707+
and context.trigger_character in [" ", "\t"]
708+
):
709+
return None
710+
704711
index = 0
705712
in_assign = False
706713

@@ -854,6 +861,14 @@ async def _complete_SuiteSetup_or_SuiteTeardown_or_TestTemplate( # noqa: N802
854861
) -> Union[List[CompletionItem], CompletionList, None]:
855862
from robot.parsing.model.statements import Statement
856863

864+
# TODO should this be configurable?
865+
if (
866+
context is not None
867+
and context.trigger_kind == CompletionTriggerKind.TRIGGERCHARACTER
868+
and context.trigger_character in [" ", "\t"]
869+
):
870+
return None
871+
857872
statement_node = cast(Statement, node)
858873
if len(statement_node.tokens) > 1:
859874
token = cast(Token, statement_node.tokens[1])
@@ -867,14 +882,16 @@ async def _complete_SuiteSetup_or_SuiteTeardown_or_TestTemplate( # noqa: N802
867882

868883
if position.is_in_range(r) or r.end == position:
869884
return await self.create_keyword_completion_items(
870-
statement_node.tokens[2] if r.end == position and len(statement_node.tokens) > 2 else None, position
885+
statement_node.tokens[2] if r.end == position and len(statement_node.tokens) > 2 else None,
886+
position,
887+
add_reserverd=False,
871888
)
872889

873890
if len(statement_node.tokens) > 2:
874891
token = cast(Token, statement_node.tokens[2])
875892
r = range_from_token(token)
876893
if position.is_in_range(r) or r.end == position:
877-
return await self.create_keyword_completion_items(token, position)
894+
return await self.create_keyword_completion_items(token, position, add_reserverd=False)
878895

879896
return None
880897

@@ -947,6 +964,14 @@ async def complete_Setup_or_Teardown_or_Template( # noqa: N802
947964
) -> Union[List[CompletionItem], CompletionList, None]:
948965
from robot.parsing.model.statements import Statement
949966

967+
# TODO should this be configurable?
968+
if (
969+
context is not None
970+
and context.trigger_kind == CompletionTriggerKind.TRIGGERCHARACTER
971+
and context.trigger_character in [" ", "\t"]
972+
):
973+
return None
974+
950975
statement_node = cast(Statement, node)
951976
if len(statement_node.tokens) > 2:
952977
token = cast(Token, statement_node.tokens[2])
@@ -960,14 +985,16 @@ async def complete_Setup_or_Teardown_or_Template( # noqa: N802
960985

961986
if position.is_in_range(r) or r.end == position:
962987
return await self.create_keyword_completion_items(
963-
statement_node.tokens[3] if r.end == position and len(statement_node.tokens) > 3 else None, position
988+
statement_node.tokens[3] if r.end == position and len(statement_node.tokens) > 3 else None,
989+
position,
990+
add_reserverd=False,
964991
)
965992

966993
if len(statement_node.tokens) > 3:
967994
token = cast(Token, statement_node.tokens[3])
968995
r = range_from_token(token)
969996
if position.is_in_range(r) or r.end == position:
970-
return await self.create_keyword_completion_items(token, position)
997+
return await self.create_keyword_completion_items(token, position, add_reserverd=False)
971998

972999
return None
9731000

0 commit comments

Comments
 (0)