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;
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)
})?;

View File

@ -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]

View File

@ -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

View File

@ -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"
}
}
}