Skip to content

Commit e9b6431

Browse files
committed
feat: "create keyword" quick fix detects bdd prefixes in the keyword being created and creates keywords without the prefix
1 parent 840778e commit e9b6431

File tree

1 file changed

+19
-10
lines changed

1 file changed

+19
-10
lines changed

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

Lines changed: 19 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -32,22 +32,24 @@
3232
from robotcode.language_server.robotframework.protocol import RobotLanguageServerProtocol # pragma: no cover
3333

3434

35-
CODEACTIONKINDS_QUICKFIX_CREATEKEYWORD = f"{CodeActionKind.QUICK_FIX.value}.createKeyword"
35+
CODEACTIONKIND_QUICKFIX_CREATEKEYWORD = f"{CodeActionKind.QUICK_FIX.value}.createKeyword"
3636

3737

3838
KEYWORD_WITH_ARGS_TEMPLATE = Template(
3939
"""\
4040
${name}
4141
[Arguments] ${args}
42-
Fail
42+
# TODO: implement keyword "${name}".
43+
Fail Not Implemented
4344
4445
"""
4546
)
4647

4748
KEYWORD_TEMPLATE = Template(
4849
"""\
4950
${name}
50-
Fail
51+
# TODO: implement keyword "${name}".
52+
Fail Not Implemented
5153
5254
"""
5355
)
@@ -80,7 +82,7 @@ def __init__(self, parent: RobotLanguageServerProtocol) -> None:
8082
@language_id("robotframework")
8183
@code_action_kinds(
8284
[
83-
CODEACTIONKINDS_QUICKFIX_CREATEKEYWORD,
85+
CODEACTIONKIND_QUICKFIX_CREATEKEYWORD,
8486
]
8587
)
8688
@_logger.call
@@ -130,14 +132,21 @@ async def create_keyword(self, document_uri: DocumentUri, range: Range, context:
130132
node = await get_node_at_position(model, range.start)
131133

132134
if isinstance(node, (KeywordCall, Fixture, TestTemplate, Template)):
133-
keyword = (
134-
node.value
135-
if isinstance(node, (TestTemplate, Template))
136-
else node.keyword
137-
if isinstance(node, KeywordCall)
138-
else node.name
135+
keyword_token = (
136+
node.get_token(RobotToken.NAME)
137+
if isinstance(node, (TestTemplate, Template, Fixture))
138+
else node.get_token(RobotToken.KEYWORD)
139139
)
140140

141+
if keyword_token is None:
142+
return
143+
144+
bdd_token, token = self.split_bdd_prefix(namespace, keyword_token)
145+
if bdd_token is not None and token is not None:
146+
keyword = token.value
147+
else:
148+
keyword = keyword_token.value
149+
141150
arguments = []
142151

143152
for t in node.get_tokens(RobotToken.ARGUMENT):

0 commit comments

Comments
 (0)