aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGokul Soumya2022-02-14 16:41:53 +0000
committerGitHub2022-02-14 16:41:53 +0000
commit4c424d5ee442788b32eaaee67b4256aaa93aafa2 (patch)
tree7ea2a8e579b16400ae9573264c96b82123e1c828
parente267dc834a815ae2dd9d04c9e81fb206f81a2c99 (diff)
Refactor language config loading (#1658)
-rw-r--r--helix-core/src/config.rs33
-rw-r--r--helix-core/src/lib.rs1
-rw-r--r--helix-term/src/application.rs38
3 files changed, 46 insertions, 26 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;
diff --git a/helix-term/src/application.rs b/helix-term/src/application.rs
index 52a5321f..6ba05498 100644
--- a/helix-term/src/application.rs
+++ b/helix-term/src/application.rs
@@ -1,4 +1,7 @@
-use helix_core::{merge_toml_values, pos_at_coords, syntax, Selection};
+use helix_core::{
+ config::{default_syntax_loader, user_syntax_loader},
+ pos_at_coords, syntax, Selection,
+};
use helix_dap::{self as dap, Payload, Request};
use helix_lsp::{lsp, util::lsp_pos_to_pos, LspProgressMap};
use helix_view::{editor::Breakpoint, theme, Editor};
@@ -69,21 +72,6 @@ impl Application {
std::sync::Arc::new(theme::Loader::new(&conf_dir, &helix_core::runtime_dir()));
// load default and user config, and merge both
- let builtin_err_msg =
- "Could not parse built-in languages.toml, something must be very wrong";
- let def_lang_conf: toml::Value =
- toml::from_slice(include_bytes!("../../languages.toml")).expect(builtin_err_msg);
- let def_syn_loader_conf: helix_core::syntax::Configuration =
- def_lang_conf.clone().try_into().expect(builtin_err_msg);
- let user_lang_conf = std::fs::read(conf_dir.join("languages.toml"))
- .ok()
- .map(|raw| toml::from_slice(&raw));
- let lang_conf = match user_lang_conf {
- Some(Ok(value)) => Ok(merge_toml_values(def_lang_conf, value)),
- Some(err @ Err(_)) => err,
- None => Ok(def_lang_conf),
- };
-
let true_color = config.editor.true_color || crate::true_color();
let theme = config
.theme
@@ -106,16 +94,14 @@ impl Application {
}
});
- let syn_loader_conf: helix_core::syntax::Configuration = lang_conf
- .and_then(|conf| conf.try_into())
- .unwrap_or_else(|err| {
- eprintln!("Bad language config: {}", err);
- eprintln!("Press <ENTER> to continue with default language config");
- use std::io::Read;
- // This waits for an enter press.
- let _ = std::io::stdin().read(&mut []);
- def_syn_loader_conf
- });
+ let syn_loader_conf = user_syntax_loader().unwrap_or_else(|err| {
+ eprintln!("Bad language config: {}", err);
+ eprintln!("Press <ENTER> to continue with default language config");
+ use std::io::Read;
+ // This waits for an enter press.
+ let _ = std::io::stdin().read(&mut []);
+ default_syntax_loader()
+ });
let syn_loader = std::sync::Arc::new(syntax::Loader::new(syn_loader_conf));
let mut editor = Editor::new(