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]; 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) { pub fn enter_scope(&mut self) {

View File

@ -329,3 +329,14 @@ fn main_script_can_have_subcommands2() {
assert!(actual.out.contains("usage: script.nu")); 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());
})
}