36
36
37
37
38
38
KEYWORD_WITH_ARGS_TEMPLATE = Template (
39
- """\n
39
+ """\
40
40
${name}
41
41
[Arguments] ${args}
42
- Fail Not implemented
42
+ Fail
43
43
"""
44
44
)
45
45
46
46
KEYWORD_TEMPLATE = Template (
47
- """\n
47
+ """\
48
48
${name}
49
- Fail Not implemented
49
+ Fail
50
50
"""
51
51
)
52
52
@@ -117,6 +117,7 @@ async def create_keyword(self, document_uri: DocumentUri, range: Range, context:
117
117
TestTemplate ,
118
118
)
119
119
from robot .utils .escaping import split_from_equals
120
+ from robot .variables .search import contains_variable
120
121
121
122
document = await self .parent .documents .get (document_uri )
122
123
if document is None :
@@ -142,7 +143,7 @@ async def create_keyword(self, document_uri: DocumentUri, range: Range, context:
142
143
143
144
for t in node .get_tokens (RobotToken .ARGUMENT ):
144
145
name , value = split_from_equals (cast (Token , t ).value )
145
- if value is not None :
146
+ if value is not None and not contains_variable ( name , "$@&%" ) :
146
147
arguments .append (f"${{{ name } }}" )
147
148
else :
148
149
arguments .append (f"${{arg{ len (arguments )+ 1 } }}" )
@@ -159,10 +160,24 @@ async def create_keyword(self, document_uri: DocumentUri, range: Range, context:
159
160
if keyword_section is not None :
160
161
node_range = range_from_node (keyword_section )
161
162
162
- insert_range = Range (node_range .end , node_range .end )
163
+ insert_pos = Position (node_range .end .line + 1 , 0 )
164
+ insert_range = Range (insert_pos , insert_pos )
165
+
166
+ insert_text = f"\n { insert_text } "
163
167
else :
164
- insert_text = f"\n \n \n *** Keywords ***\n { insert_text } "
165
- doc_pos = Position (len (document .get_lines ()), 0 )
168
+ if namespace .languages is None or not namespace .languages .languages :
169
+ keywords_text = "Keywords"
170
+ else :
171
+ keywords_text = namespace .languages .languages [- 1 ].keywords_header
172
+
173
+ insert_text = f"\n \n *** { keywords_text } ***\n { insert_text } "
174
+
175
+ lines = document .get_lines ()
176
+ end_line = len (lines ) - 1
177
+ while end_line >= 0 and not lines [end_line ].strip ():
178
+ end_line -= 1
179
+ doc_pos = Position (end_line + 1 , 0 )
180
+
166
181
insert_range = Range (doc_pos , doc_pos )
167
182
168
183
we = WorkspaceEdit (
@@ -176,3 +191,10 @@ async def create_keyword(self, document_uri: DocumentUri, range: Range, context:
176
191
)
177
192
178
193
await self .parent .workspace .apply_edit (we , "Rename Keyword" )
194
+
195
+ lines = insert_text .rstrip ().splitlines ()
196
+ insert_range .start .line += len (lines ) - 1
197
+ insert_range .start .character = 4
198
+ insert_range .end = Position (insert_range .start .line , insert_range .start .character )
199
+ insert_range .end .character += len (lines [- 1 ])
200
+ await self .parent .window .show_document (str (document .uri ), take_focus = True , selection = insert_range )
0 commit comments