@@ -82,14 +82,30 @@ fn load_runtime_file(language: &str, filename: &str) -> Result<String, std::io::
83#[cfg(feature = "embed_runtime")]
83#[cfg(feature = "embed_runtime")]
84fn load_runtime_file(language: &str, filename: &str) -> Result<String, Box<dyn std::error::Error>> {
84fn load_runtime_file(language: &str, filename: &str) -> Result<String, Box<dyn std::error::Error>> {
85 #[derive(rust_embed::RustEmbed)]
87 #[derive(rust_embed::RustEmbed)]
86 #[folder = "../runtime/"]
88 #[folder = "../runtime/"]
87 struct Runtime;
89 struct Runtime;
92+ struct EmbeddedFileNotFoundError {
95+ impl std::error::Error for EmbeddedFileNotFoundError {}
96+ impl fmt::Display for EmbeddedFileNotFoundError {
97+ fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
98+ write!(f, "failed to load embedded file {}", self.path.display())
89 let path = PathBuf::from("queries").join(language).join(filename);
102 let path = PathBuf::from("queries").join(language).join(filename);
91− let query_bytes = Runtime::get(&path.display().to_string()).unwrap_or_default();
104+ if let Some(query_bytes) = Runtime::get(&path.display().to_string()) {
92− String::from_utf8(query_bytes.to_vec()).map_err(|err| err.into())
105+ String::from_utf8(query_bytes.to_vec()).map_err(|err| err.into())
107+ Err(Box::new(EmbeddedFileNotFoundError { path }))
95fn read_query(language: &str, filename: &str) -> String {
111fn read_query(language: &str, filename: &str) -> String {
@@ -1722,5 +1738,8 @@ fn test_input_edits() {
1722fn test_load_runtime_file() {
1738fn test_load_runtime_file() {
1723 // Test to make sure we can load some data from the runtime directory.
1739 // Test to make sure we can load some data from the runtime directory.
1724 let contents = load_runtime_file("rust", "indents.toml").unwrap();
1740 let contents = load_runtime_file("rust", "indents.toml").unwrap();
1725− assert!(!contents.is_empty())
1741+ assert!(!contents.is_empty());
1743+ let results = load_runtime_file("rust", "does-not-exist");
1744+ assert!(results.is_err());