From 302e8ec323c379033702778d82432690e0db5dec Mon Sep 17 00:00:00 2001 From: blindfs Date: Wed, 9 Apr 2025 15:02:28 +0800 Subject: [PATCH] fix: deeply nested module id --- crates/nu-lsp/src/ast.rs | 13 +++++++++---- crates/nu-lsp/src/hover.rs | 17 +++++++++++++---- tests/fixtures/lsp/workspace/baz.nu | 2 +- tests/fixtures/lsp/workspace/foo.nu | 5 ++++- 4 files changed, 27 insertions(+), 10 deletions(-) diff --git a/crates/nu-lsp/src/ast.rs b/crates/nu-lsp/src/ast.rs index cd3ffadbd7..4fec23b01c 100644 --- a/crates/nu-lsp/src/ast.rs +++ b/crates/nu-lsp/src/ast.rs @@ -137,13 +137,18 @@ fn try_find_id_in_mod( any_id = false; id_num_ref = id_ref.get(); } + let block_span = call.arguments.last()?.span(); (0..working_set.num_modules()) .find(|id| { (any_id || id_num_ref == *id) - && working_set - .get_module(ModuleId::new(*id)) - .span - .is_some_and(|mod_span| call.span().contains_span(mod_span)) + && working_set.get_module(ModuleId::new(*id)).span.is_some_and( + |mod_span| { + mod_span.start <= block_span.start + 1 + && block_span.start <= mod_span.start + && block_span.end >= mod_span.end + && block_span.end <= mod_span.end + 1 + }, + ) }) .map(ModuleId::new) })?; diff --git a/crates/nu-lsp/src/hover.rs b/crates/nu-lsp/src/hover.rs index 83b64d6f64..df6de49fc2 100644 --- a/crates/nu-lsp/src/hover.rs +++ b/crates/nu-lsp/src/hover.rs @@ -279,7 +279,7 @@ mod hover_tests { open_unchecked(&client_connection, script.clone()); // For module record - let resp = send_hover_request(&client_connection, script, 8, 22); + let resp = send_hover_request(&client_connection, script, 8, 42); let result = result_from_message(resp); assert_json_eq!( result.pointer("/contents/value").unwrap(), @@ -398,7 +398,6 @@ mod hover_tests { open_unchecked(&client_connection, script.clone()); let resp = send_hover_request(&client_connection, script.clone(), 15, 15); let result = result_from_message(resp); - assert_eq!( result .pointer("/contents/value") @@ -408,9 +407,8 @@ mod hover_tests { "\"# cmt\"" ); - let resp = send_hover_request(&client_connection, script, 17, 27); + let resp = send_hover_request(&client_connection, script.clone(), 17, 27); let result = result_from_message(resp); - assert_eq!( result .pointer("/contents/value") @@ -419,6 +417,17 @@ mod hover_tests { .replace("\\r", ""), "\"# sub cmt\"" ); + + let resp = send_hover_request(&client_connection, script, 19, 33); + let result = result_from_message(resp); + assert_eq!( + result + .pointer("/contents/value") + .unwrap() + .to_string() + .replace("\\r", ""), + "\"# sub sub cmt\"" + ); } #[test] diff --git a/tests/fixtures/lsp/workspace/baz.nu b/tests/fixtures/lsp/workspace/baz.nu index c06848e75d..462655d6c9 100644 --- a/tests/fixtures/lsp/workspace/baz.nu +++ b/tests/fixtures/lsp/workspace/baz.nu @@ -6,7 +6,7 @@ overlay hide prefix use ./foo.nu [ "mod name" cst_mod ] -$cst_mod."sub module".var_name +$cst_mod."sub module"."sub sub module".var_name mod name sub module cmd name let $cst_mod = 1 $cst_mod diff --git a/tests/fixtures/lsp/workspace/foo.nu b/tests/fixtures/lsp/workspace/foo.nu index c0566efa72..784ce27581 100644 --- a/tests/fixtures/lsp/workspace/foo.nu +++ b/tests/fixtures/lsp/workspace/foo.nu @@ -16,6 +16,9 @@ export module "mod name" { export module cst_mod { # sub cmt export module "sub module" { - export const var_name = "const value" + # sub sub cmt + export module "sub sub module" { + export const var_name = "const value" + } } }