File tree Expand file tree Collapse file tree
crates/emmylua_ls/src/handlers Expand file tree Collapse file tree Original file line number Diff line number Diff line change @@ -187,7 +187,7 @@ fn resolve_member_owner(
187187
188188 let root = semantic_model. get_root ( ) . syntax ( ) ;
189189 let current_node = member_id. get_syntax_id ( ) . to_node_from_root ( & root) ?;
190- match member_id. get_syntax_id ( ) . get_kind ( ) {
190+ let result = match member_id. get_syntax_id ( ) . get_kind ( ) {
191191 LuaSyntaxKind :: TableFieldAssign => {
192192 if LuaTableField :: can_cast ( current_node. kind ( ) . into ( ) ) {
193193 let table_field = LuaTableField :: cast ( current_node. clone ( ) ) ?;
@@ -213,18 +213,35 @@ fn resolve_member_owner(
213213 let assign_stat = LuaAssignStat :: cast ( assign_node) ?;
214214 let ( vars, exprs) = assign_stat. get_var_and_expr_list ( ) ;
215215
216+ let mut result = None ;
216217 for ( var, expr) in vars. iter ( ) . zip ( exprs. iter ( ) ) {
217218 if var. syntax ( ) . text_range ( ) == current_node. text_range ( ) {
218219 let expr_node = expr. get_syntax_id ( ) . to_node_from_root ( & root) ?;
219- return semantic_model. find_decl (
220+ result = semantic_model. find_decl (
220221 expr_node. into ( ) ,
221222 emmylua_code_analysis:: SemanticDeclLevel :: default ( ) ,
222223 ) ;
224+ break ;
223225 }
224226 }
225- None
227+ result
226228 }
227229 _ => None ,
230+ } ;
231+
232+ // 禁止追溯到参数
233+ match result {
234+ Some ( LuaSemanticDeclId :: LuaDecl ( decl_id) ) => {
235+ let decl = semantic_model
236+ . get_db ( )
237+ . get_decl_index ( )
238+ . get_decl ( & decl_id) ?;
239+ if decl. is_param ( ) {
240+ return None ;
241+ }
242+ result
243+ }
244+ _ => result,
228245 }
229246}
230247
Original file line number Diff line number Diff line change @@ -46,4 +46,26 @@ mod tests {
4646 ) ;
4747 assert ! ( result) ;
4848 }
49+
50+ #[ test]
51+ fn test_rename_class_field ( ) {
52+ let mut ws = ProviderVirtualWorkspace :: new ( ) ;
53+ let result = ws. check_rename (
54+ r#"
55+ ---@class AnonymousObserver
56+ local AnonymousObserver
57+
58+ function AnonymousObserver:__init(next)
59+ self.ne<??>xt = next
60+ end
61+
62+ function AnonymousObserver:onNextCore(value)
63+ self.next(value)
64+ end
65+ "# ,
66+ "_next" . to_string ( ) ,
67+ 2 ,
68+ ) ;
69+ assert ! ( result) ;
70+ }
4971}
You can’t perform that action at this time.
0 commit comments