@@ -5,7 +5,10 @@ mod rename_type;
55use std:: collections:: HashMap ;
66
77use 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+ } ;
912use lsp_types:: {
1013 ClientCapabilities , OneOf , PrepareRenameResponse , RenameOptions , RenameParams ,
1114 ServerCapabilities , TextDocumentPositionParams , WorkspaceEdit ,
@@ -119,7 +122,7 @@ fn rename_references(
119122 new_name : String ,
120123) -> Option < WorkspaceEdit > {
121124 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 ( ) ) {
123126 Some ( node) => semantic_model. find_decl ( node. into ( ) , SemanticDeclLevel :: NoTrace ) ,
124127 None => semantic_model. find_decl ( token. into ( ) , SemanticDeclLevel :: NoTrace ) ,
125128 } ?;
@@ -168,10 +171,49 @@ fn rename_references(
168171 } )
169172}
170173
171- fn get_literal_expr_parent ( token : LuaSyntaxToken ) -> Option < LuaSyntaxNode > {
174+ fn get_target_node ( token : LuaSyntaxToken ) -> Option < LuaSyntaxNode > {
172175 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+ }
175217}
176218
177219pub struct RenameCapabilities ;
0 commit comments