use block signature instead of decl signature for generating help output and when parsing calls

This commit is contained in:
Gwendolyn 2024-07-24 21:22:36 +02:00
parent a88c3f48e2
commit 368ab10efe
3 changed files with 75 additions and 2 deletions

View File

@ -21,7 +21,9 @@ pub fn get_full_help(
}; };
let stack = &mut stack.start_capture(); let stack = &mut stack.start_capture();
let signature = command.signature().update_from_command(command); let signature = engine_state
.get_signature(command)
.update_from_command(command);
get_documentation( get_documentation(
&signature, &signature,

View File

@ -954,7 +954,12 @@ pub fn parse_internal_call(
let _ = working_set.add_span(call.head); let _ = working_set.add_span(call.head);
let decl = working_set.get_decl(decl_id); let decl = working_set.get_decl(decl_id);
let signature = decl.signature(); let signature = if let Some(block_id) = decl.block_id() {
let block = working_set.get_block(block_id);
*block.signature.clone()
} else {
decl.signature()
};
let output = signature.get_output_type(); let output = signature.get_output_type();
// storing the var ID for later due to borrowing issues // storing the var ID for later due to borrowing issues

View File

@ -334,3 +334,69 @@ fn source_empty_file() {
assert!(actual.out.is_empty()); assert!(actual.out.is_empty());
}) })
} }
#[test]
fn main_script_help_uses_script_name1() {
// Note: this test is somewhat fragile and might need to be adapted if the usage help message changes
Playground::setup("main_filename", |dirs, sandbox| {
sandbox.mkdir("main_filename");
sandbox.with_files(&[FileWithContent(
"script.nu",
r#"def main [] {}
"#,
)]);
let actual = nu!(cwd: dirs.test(), pipeline("nu script.nu --help"));
assert!(actual.out.contains("> script.nu"));
assert!(!actual.out.contains("> main"));
})
}
#[test]
fn main_script_help_uses_script_name2() {
// Note: this test is somewhat fragile and might need to be adapted if the usage help message changes
Playground::setup("main_filename", |dirs, sandbox| {
sandbox.mkdir("main_filename");
sandbox.with_files(&[FileWithContent(
"script.nu",
r#"def main [foo: string] {}
"#,
)]);
let actual = nu!(cwd: dirs.test(), pipeline("nu script.nu"));
assert!(actual.err.contains("Usage: script.nu"));
assert!(!actual.err.contains("Usage: main"));
})
}
#[test]
fn main_script_subcommand_help_uses_script_name1() {
// Note: this test is somewhat fragile and might need to be adapted if the usage help message changes
Playground::setup("main_filename", |dirs, sandbox| {
sandbox.mkdir("main_filename");
sandbox.with_files(&[FileWithContent(
"script.nu",
r#"def main [] {}
def 'main foo' [] {}
"#,
)]);
let actual = nu!(cwd: dirs.test(), pipeline("nu script.nu foo --help"));
assert!(actual.out.contains("> script.nu foo"));
assert!(!actual.out.contains("> main foo"));
})
}
#[test]
fn main_script_subcommand_help_uses_script_name2() {
// Note: this test is somewhat fragile and might need to be adapted if the usage help message changes
Playground::setup("main_filename", |dirs, sandbox| {
sandbox.mkdir("main_filename");
sandbox.with_files(&[FileWithContent(
"script.nu",
r#"def main [] {}
def 'main foo' [bar: string] {}
"#,
)]);
let actual = nu!(cwd: dirs.test(), pipeline("nu script.nu foo"));
assert!(actual.err.contains("Usage: script.nu foo"));
assert!(!actual.err.contains("Usage: main foo"));
})
}