fix: deeply nested module id

This commit is contained in:
blindfs 2025-04-09 15:02:28 +08:00
parent 457cb3652b
commit 302e8ec323
4 changed files with 27 additions and 10 deletions

View File

@ -137,13 +137,18 @@ fn try_find_id_in_mod(
any_id = false; any_id = false;
id_num_ref = id_ref.get(); id_num_ref = id_ref.get();
} }
let block_span = call.arguments.last()?.span();
(0..working_set.num_modules()) (0..working_set.num_modules())
.find(|id| { .find(|id| {
(any_id || id_num_ref == *id) (any_id || id_num_ref == *id)
&& working_set && working_set.get_module(ModuleId::new(*id)).span.is_some_and(
.get_module(ModuleId::new(*id)) |mod_span| {
.span mod_span.start <= block_span.start + 1
.is_some_and(|mod_span| call.span().contains_span(mod_span)) && block_span.start <= mod_span.start
&& block_span.end >= mod_span.end
&& block_span.end <= mod_span.end + 1
},
)
}) })
.map(ModuleId::new) .map(ModuleId::new)
})?; })?;

View File

@ -279,7 +279,7 @@ mod hover_tests {
open_unchecked(&client_connection, script.clone()); open_unchecked(&client_connection, script.clone());
// For module record // 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); let result = result_from_message(resp);
assert_json_eq!( assert_json_eq!(
result.pointer("/contents/value").unwrap(), result.pointer("/contents/value").unwrap(),
@ -398,7 +398,6 @@ mod hover_tests {
open_unchecked(&client_connection, script.clone()); open_unchecked(&client_connection, script.clone());
let resp = send_hover_request(&client_connection, script.clone(), 15, 15); let resp = send_hover_request(&client_connection, script.clone(), 15, 15);
let result = result_from_message(resp); let result = result_from_message(resp);
assert_eq!( assert_eq!(
result result
.pointer("/contents/value") .pointer("/contents/value")
@ -408,9 +407,8 @@ mod hover_tests {
"\"# cmt\"" "\"# 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); let result = result_from_message(resp);
assert_eq!( assert_eq!(
result result
.pointer("/contents/value") .pointer("/contents/value")
@ -419,6 +417,17 @@ mod hover_tests {
.replace("\\r", ""), .replace("\\r", ""),
"\"# sub cmt\"" "\"# 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] #[test]

View File

@ -6,7 +6,7 @@ overlay hide prefix
use ./foo.nu [ "mod name" cst_mod ] 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 mod name sub module cmd name
let $cst_mod = 1 let $cst_mod = 1
$cst_mod $cst_mod

View File

@ -16,6 +16,9 @@ export module "mod name" {
export module cst_mod { export module cst_mod {
# sub cmt # sub cmt
export module "sub module" { export module "sub module" {
export const var_name = "const value" # sub sub cmt
export module "sub sub module" {
export const var_name = "const value"
}
} }
} }