aboutsummaryrefslogtreecommitdiff
path: root/helix-core
diff options
context:
space:
mode:
Diffstat (limited to 'helix-core')
-rw-r--r--helix-core/src/config.rs33
-rw-r--r--helix-core/src/lib.rs1
2 files changed, 34 insertions, 0 deletions
diff --git a/helix-core/src/config.rs b/helix-core/src/config.rs
new file mode 100644
index 00000000..5bd16abd
--- /dev/null
+++ b/helix-core/src/config.rs
@@ -0,0 +1,33 @@
+use crate::merge_toml_values;
+
+/// Default bultin-in languages.toml.
+pub fn default_lang_config() -> toml::Value {
+ toml::from_slice(include_bytes!("../../languages.toml"))
+ .expect("Could not parse bultin-in languages.toml to valid toml")
+}
+
+/// User configured languages.toml file, merged with the default config.
+pub fn user_lang_config() -> Result<toml::Value, toml::de::Error> {
+ let def_lang_conf = default_lang_config();
+ let data = std::fs::read(crate::config_dir().join("languages.toml"));
+ let user_lang_conf = match data {
+ Ok(raw) => {
+ let value = toml::from_slice(&raw)?;
+ merge_toml_values(def_lang_conf, value)
+ }
+ Err(_) => def_lang_conf,
+ };
+
+ Ok(user_lang_conf)
+}
+
+/// Syntax configuration loader based on built-in languages.toml.
+pub fn default_syntax_loader() -> crate::syntax::Configuration {
+ default_lang_config()
+ .try_into()
+ .expect("Could not serialize built-in language.toml")
+}
+/// Syntax configuration loader based on user configured languages.toml.
+pub fn user_syntax_loader() -> Result<crate::syntax::Configuration, toml::de::Error> {
+ user_lang_config()?.try_into()
+}
diff --git a/helix-core/src/lib.rs b/helix-core/src/lib.rs
index fa8566ab..8e5950de 100644
--- a/helix-core/src/lib.rs
+++ b/helix-core/src/lib.rs
@@ -3,6 +3,7 @@ pub use encoding_rs as encoding;
pub mod auto_pairs;
pub mod chars;
pub mod comment;
+pub mod config;
pub mod diagnostic;
pub mod diff;
pub mod graphemes;