@@ -5,7 +5,10 @@ mod rename_type;
5
5
use std:: collections:: HashMap ;
6
6
7
7
use emmylua_code_analysis:: { LuaCompilation , LuaSemanticDeclId , SemanticDeclLevel , SemanticModel } ;
8
- use emmylua_parser:: { LuaAstNode , LuaLiteralExpr , LuaSyntaxNode , LuaSyntaxToken , LuaTokenKind } ;
8
+ use emmylua_parser:: {
9
+ LuaAst , LuaAstNode , LuaComment , LuaDocTagParam , LuaLiteralExpr , LuaSyntaxKind , LuaSyntaxNode ,
10
+ LuaSyntaxToken , LuaTokenKind ,
11
+ } ;
9
12
use lsp_types:: {
10
13
ClientCapabilities , OneOf , PrepareRenameResponse , RenameOptions , RenameParams ,
11
14
ServerCapabilities , TextDocumentPositionParams , WorkspaceEdit ,
@@ -119,7 +122,7 @@ fn rename_references(
119
122
new_name : String ,
120
123
) -> Option < WorkspaceEdit > {
121
124
let mut result = HashMap :: new ( ) ;
122
- let semantic_decl = match get_literal_expr_parent ( token. clone ( ) ) {
125
+ let semantic_decl = match get_target_node ( token. clone ( ) ) {
123
126
Some ( node) => semantic_model. find_decl ( node. into ( ) , SemanticDeclLevel :: NoTrace ) ,
124
127
None => semantic_model. find_decl ( token. into ( ) , SemanticDeclLevel :: NoTrace ) ,
125
128
} ?;
@@ -168,10 +171,49 @@ fn rename_references(
168
171
} )
169
172
}
170
173
171
- fn get_literal_expr_parent ( token : LuaSyntaxToken ) -> Option < LuaSyntaxNode > {
174
+ fn get_target_node ( token : LuaSyntaxToken ) -> Option < LuaSyntaxNode > {
172
175
let parent = token. parent ( ) ?;
173
- let literal_expr = LuaLiteralExpr :: cast ( parent) ?;
174
- literal_expr. syntax ( ) . parent ( )
176
+ match parent. kind ( ) . into ( ) {
177
+ LuaSyntaxKind :: LiteralExpr => {
178
+ let literal_expr = LuaLiteralExpr :: cast ( parent) ?;
179
+ return literal_expr. syntax ( ) . parent ( ) ;
180
+ }
181
+ LuaSyntaxKind :: DocTagParam => {
182
+ let doc_tag_param = LuaDocTagParam :: cast ( parent) ?;
183
+ let name = doc_tag_param. get_name_token ( ) ?;
184
+ let name_text = name. get_name_text ( ) ;
185
+ let comment = doc_tag_param. get_parent :: < LuaComment > ( ) ?;
186
+ let owner = comment. get_owner ( ) ?;
187
+ match owner {
188
+ LuaAst :: LuaLocalFuncStat ( local_func_stat) => {
189
+ let closure_expr = local_func_stat. get_closure ( ) ?;
190
+ let param_list = closure_expr. get_params_list ( ) ?;
191
+ let param_name = param_list. get_params ( ) . find ( |param| {
192
+ if let Some ( name_token) = param. get_name_token ( ) {
193
+ name_token. get_name_text ( ) == name_text
194
+ } else {
195
+ false
196
+ }
197
+ } ) ?;
198
+ return Some ( param_name. syntax ( ) . clone ( ) ) ;
199
+ }
200
+ LuaAst :: LuaFuncStat ( func_stat) => {
201
+ let closure_expr = func_stat. get_closure ( ) ?;
202
+ let param_list = closure_expr. get_params_list ( ) ?;
203
+ let param_name = param_list. get_params ( ) . find ( |param| {
204
+ if let Some ( name_token) = param. get_name_token ( ) {
205
+ name_token. get_name_text ( ) == name_text
206
+ } else {
207
+ false
208
+ }
209
+ } ) ?;
210
+ return Some ( param_name. syntax ( ) . clone ( ) ) ;
211
+ }
212
+ _ => return None ,
213
+ }
214
+ }
215
+ _ => return None ,
216
+ }
175
217
}
176
218
177
219
pub struct RenameCapabilities ;
0 commit comments