@@ -73,16 +73,37 @@ pub struct IndentQuery {
73 pub outdent: HashSet<String>,
73 pub outdent: HashSet<String>,
76+#[cfg(not(feature = "embed_runtime"))]
76−fn read_query(language: &str, filename: &str) -> String {
77+fn load_runtime_file(language: &str, filename: &str) -> Result<String, std::io::Error> {
77− static INHERITS_REGEX: Lazy<Regex> =
78− Lazy::new(|| Regex::new(r";+\s*inherits\s*:?\s*([a-z_,()]+)\s*").unwrap());
80 let root = crate::runtime_dir();
78 let root = crate::runtime_dir();
81− // let root = PathBuf::from(env!("CARGO_MANIFEST_DIR"));
79+ let path = root.join("queries").join(language).join(filename);
80+ std::fs::read_to_string(&path)
83+#[cfg(feature = "embed_runtime")]
84+use rust_embed::RustEmbed;
86+#[cfg(feature = "embed_runtime")]
88+#[folder = "../runtime/"]
91+#[cfg(feature = "embed_runtime")]
92+fn load_runtime_file(language: &str, filename: &str) -> Result<String, Box<dyn std::error::Error>> {
93+ let root = PathBuf::new();
83 let path = root.join("queries").join(language).join(filename);
94 let path = root.join("queries").join(language).join(filename);
85− let query = std::fs::read_to_string(&path).unwrap_or_default();
96+ let query_bytes = Runtime::get(&path.as_path().display().to_string()).unwrap_or_default();
97+ std::str::from_utf8(query_bytes.as_ref())
98+ .map(|s| s.to_string())
99+ .map_err(|err| err.into())
102+fn read_query(language: &str, filename: &str) -> String {
103+ static INHERITS_REGEX: Lazy<Regex> =
104+ Lazy::new(|| Regex::new(r";+\s*inherits\s*:?\s*([a-z_,()]+)\s*").unwrap());
106+ let query = load_runtime_file(language, filename).unwrap_or_default();
87 // TODO: the collect() is not ideal
108 // TODO: the collect() is not ideal
88 let inherits = INHERITS_REGEX
109 let inherits = INHERITS_REGEX
@@ -146,11 +167,8 @@ impl LanguageConfiguration {
146 .get_or_init(|| {
167 .get_or_init(|| {
147 let language = get_language_name(self.language_id).to_ascii_lowercase();
168 let language = get_language_name(self.language_id).to_ascii_lowercase();
149− let root = crate::runtime_dir();
150− let path = root.join("queries").join(language).join("indents.toml");
170+ let toml = load_runtime_file(&language, "indents.toml").ok()?;
152− let toml = std::fs::read(&path).ok()?;
153− toml::from_slice(&toml).ok()
171+ toml::from_slice(&toml.as_bytes()).ok()
155 .as_ref()
173 .as_ref()