forked from extern/nushell
Fix wrong parsing of signatures in predecl scan (#10637)
This commit is contained in:
parent
eb4fd144eb
commit
67b5e1bde9
@ -31,7 +31,7 @@ use crate::{
|
|||||||
lite_parser::{lite_parse, LiteCommand, LiteElement},
|
lite_parser::{lite_parse, LiteCommand, LiteElement},
|
||||||
parser::{
|
parser::{
|
||||||
check_call, check_name, garbage, garbage_pipeline, parse, parse_call, parse_expression,
|
check_call, check_name, garbage, garbage_pipeline, parse, parse_call, parse_expression,
|
||||||
parse_import_pattern, parse_internal_call, parse_multispan_value, parse_signature,
|
parse_full_signature, parse_import_pattern, parse_internal_call, parse_multispan_value,
|
||||||
parse_string, parse_value, parse_var_with_opt_type, trim_quotes, ParsedInternalCall,
|
parse_string, parse_value, parse_var_with_opt_type, trim_quotes, ParsedInternalCall,
|
||||||
},
|
},
|
||||||
unescape_unquote_string, Token, TokenContents,
|
unescape_unquote_string, Token, TokenContents,
|
||||||
@ -228,7 +228,7 @@ pub fn parse_def_predecl(working_set: &mut StateWorkingSet, spans: &[Span]) {
|
|||||||
// The second time is when we actually parse the body itworking_set.
|
// The second time is when we actually parse the body itworking_set.
|
||||||
// We can't reuse the first time because the variables that are created during parse_signature
|
// We can't reuse the first time because the variables that are created during parse_signature
|
||||||
// are lost when we exit the scope below.
|
// are lost when we exit the scope below.
|
||||||
let sig = parse_signature(working_set, spans[signature_pos]);
|
let sig = parse_full_signature(working_set, &spans[signature_pos..]);
|
||||||
working_set.parse_errors.truncate(starting_error_count);
|
working_set.parse_errors.truncate(starting_error_count);
|
||||||
working_set.exit_scope();
|
working_set.exit_scope();
|
||||||
|
|
||||||
|
@ -102,6 +102,23 @@ fn parse_file_relative_to_parsed_file_simple() {
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn predecl_signature_parse() {
|
||||||
|
Playground::setup("predecl_signature_parse", |dirs, sandbox| {
|
||||||
|
sandbox.with_files(vec![FileWithContentToBeTrimmed(
|
||||||
|
"spam.nu",
|
||||||
|
"
|
||||||
|
def main [] { foo }
|
||||||
|
|
||||||
|
def foo []: nothing -> nothing { print 'foo' }
|
||||||
|
",
|
||||||
|
)]);
|
||||||
|
|
||||||
|
let actual = nu!(cwd: dirs.test(), pipeline("nu spam.nu"));
|
||||||
|
|
||||||
|
assert_eq!(actual.out, "foo");
|
||||||
|
})
|
||||||
|
}
|
||||||
#[ignore]
|
#[ignore]
|
||||||
#[test]
|
#[test]
|
||||||
fn parse_file_relative_to_parsed_file() {
|
fn parse_file_relative_to_parsed_file() {
|
||||||
|
Loading…
Reference in New Issue
Block a user