diff --git a/kclvm/parser/src/lib.rs b/kclvm/parser/src/lib.rs index ecfc34a32..396ab240e 100644 --- a/kclvm/parser/src/lib.rs +++ b/kclvm/parser/src/lib.rs @@ -70,7 +70,14 @@ pub fn parse_file(filename: &str, code: Option) -> Result src, + Err(_err) => { + let err_msg = + format!("Failed to load KCL file '{}'. Because '{}'", filename, _err); + return Err(err_msg); + } + } }; let sm = kclvm_span::SourceMap::new(FilePathMapping::empty()); diff --git a/kclvm/parser/src/parser/tests.rs b/kclvm/parser/src/parser/tests.rs index f99398b05..f794055c8 100644 --- a/kclvm/parser/src/parser/tests.rs +++ b/kclvm/parser/src/parser/tests.rs @@ -1,4 +1,5 @@ use crate::lexer::parse_token_streams; +use crate::parse_file; use crate::parser::Parser; use crate::session::ParseSession; use expect_test::{expect, Expect}; @@ -1266,3 +1267,15 @@ fn smoke_test_parsing_stmt() { assert_eq!(got, expect); }); } + +#[test] +fn test_parse_file_not_found() { + match parse_file("The file path is invalid", None) { + Ok(_) => { + panic!("unreachable") + } + Err(err_msg) => { + assert_eq!(err_msg, "Failed to load KCL file 'The file path is invalid'. Because 'No such file or directory (os error 2)'"); + } + } +}