From 99925a3140a730522e71a593150b85c6986d7599 Mon Sep 17 00:00:00 2001 From: HolonProduction Date: Fri, 9 Jan 2026 14:29:08 +0100 Subject: [PATCH] LSP: Optimize `find_usages_in_file` --- .../language_server/gdscript_workspace.cpp | 25 +++++++++++-------- 1 file changed, 15 insertions(+), 10 deletions(-) diff --git a/modules/gdscript/language_server/gdscript_workspace.cpp b/modules/gdscript/language_server/gdscript_workspace.cpp index 39fc21ebd4..4bf5181cb4 100644 --- a/modules/gdscript/language_server/gdscript_workspace.cpp +++ b/modules/gdscript/language_server/gdscript_workspace.cpp @@ -433,7 +433,7 @@ bool GDScriptWorkspace::can_rename(const LSP::TextDocumentPositionParams &p_doc_ Vector GDScriptWorkspace::find_usages_in_file(const LSP::DocumentSymbol &p_symbol, const String &p_file_path) { Vector usages; - String identifier = p_symbol.name; + const String &identifier = p_symbol.name; const ExtendGDScriptParser *parser = GDScriptLanguageProtocol::get_singleton()->get_parse_result(p_file_path); if (parser) { const PackedStringArray &content = parser->get_lines(); @@ -451,18 +451,23 @@ Vector GDScriptWorkspace::find_usages_in_file(const LSP::Document params.position.line = i; params.position.character = character; - const LSP::DocumentSymbol *other_symbol = resolve_symbol(params); + LSP::Range range; + String identifier_under_cursor = parser->get_identifier_under_position(params.position, range); - if (other_symbol == &p_symbol) { - LSP::Location loc; - loc.uri = text_doc.uri; - loc.range.start = params.position; - loc.range.end.line = params.position.line; - loc.range.end.character = params.position.character + identifier.length(); - usages.append(loc); + if (identifier_under_cursor == identifier) { + const LSP::DocumentSymbol *other_symbol = resolve_symbol(params); + + if (other_symbol == &p_symbol) { + LSP::Location loc; + loc.uri = text_doc.uri; + loc.range.start = params.position; + loc.range.end.line = params.position.line; + loc.range.end.character = params.position.character + identifier.length(); + usages.append(loc); + } } - character = line.find(identifier, character + 1); + character = line.find(identifier, range.end.character); } } }