Fix a panic when parsing empty file (#11314)

The previous implementation presumed that if files were given, they had
contents. The change makes the fallback to permanent files uniform.

Fix #11256
This commit is contained in:
Andrej Kolchin 2024-02-08 00:47:44 +00:00 committed by GitHub
parent 3633772d52
commit fb7f6fc08b
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
2 changed files with 15 additions and 5 deletions

View file

@ -355,11 +355,10 @@ impl<'a> StateWorkingSet<'a> {
return &contents[begin..end];
}
}
} else {
return self.permanent_state.get_span_contents(span);
}
panic!("internal error: missing span contents in file cache")
// if no files with span were found, fall back on permanent ones
return self.permanent_state.get_span_contents(span);
}
pub fn enter_scope(&mut self) {

View file

@ -297,7 +297,7 @@ fn main_script_can_have_subcommands1() {
r#"def "main foo" [x: int] {
print ($x + 100)
}
def "main" [] {
print "usage: script.nu <command name>"
}"#,
@ -318,7 +318,7 @@ fn main_script_can_have_subcommands2() {
r#"def "main foo" [x: int] {
print ($x + 100)
}
def "main" [] {
print "usage: script.nu <command name>"
}"#,
@ -329,3 +329,14 @@ fn main_script_can_have_subcommands2() {
assert!(actual.out.contains("usage: script.nu"));
})
}
#[test]
fn source_empty_file() {
Playground::setup("source_empty_file", |dirs, sandbox| {
sandbox.mkdir("source_empty_file");
sandbox.with_files(vec![FileWithContent("empty.nu", "")]);
let actual = nu!(cwd: dirs.test(), pipeline("nu empty.nu"));
assert!(actual.out.is_empty());
})
}