Refactor language config loading (#1658)
This commit is contained in:
parent
e267dc834a
commit
4c424d5ee4
3 changed files with 46 additions and 26 deletions
33
helix-core/src/config.rs
Normal file
33
helix-core/src/config.rs
Normal file
|
@ -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()
|
||||
}
|
|
@ -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;
|
||||
|
|
|
@ -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(
|
||||
|
|
Loading…
Add table
Reference in a new issue