Launch with defaults upon invalid config/theme (#982)
* Launch with defaults upon invalid config/theme * Startup message if there is a problematic config * Statusline error if trying to switch to an invalid theme * Use serde `deny_unknown_fields` for config
This commit is contained in:
parent
2c1313c064
commit
ed23057ff8
@ -3,6 +3,7 @@
|
||||
use crate::keymap::Keymaps;
|
||||
|
||||
#[derive(Debug, Default, Clone, PartialEq, Deserialize)]
|
||||
#[serde(deny_unknown_fields)]
|
||||
pub struct Config {
|
||||
pub theme: Option<String>,
|
||||
#[serde(default)]
|
||||
@ -14,7 +15,7 @@ pub struct Config {
|
||||
}
|
||||
|
||||
#[derive(Debug, Default, Clone, PartialEq, Deserialize)]
|
||||
#[serde(rename_all = "kebab-case")]
|
||||
#[serde(rename_all = "kebab-case", deny_unknown_fields)]
|
||||
pub struct LspConfig {
|
||||
pub display_messages: bool,
|
||||
}
|
||||
|
@ -91,7 +91,16 @@ async fn main() -> Result<()> {
|
||||
}
|
||||
|
||||
let config = match std::fs::read_to_string(conf_dir.join("config.toml")) {
|
||||
Ok(config) => merge_keys(toml::from_str(&config)?),
|
||||
Ok(config) => toml::from_str(&config)
|
||||
.map(merge_keys)
|
||||
.unwrap_or_else(|err| {
|
||||
eprintln!("Bad config: {}", err);
|
||||
eprintln!("Press <ENTER> to continue with default config");
|
||||
use std::io::Read;
|
||||
// This waits for an enter press.
|
||||
let _ = std::io::stdin().read(&mut []);
|
||||
Config::default()
|
||||
}),
|
||||
Err(err) if err.kind() == std::io::ErrorKind::NotFound => Config::default(),
|
||||
Err(err) => return Err(Error::new(err)),
|
||||
};
|
||||
|
@ -34,7 +34,7 @@ fn deserialize_duration_millis<'de, D>(deserializer: D) -> Result<Duration, D::E
|
||||
}
|
||||
|
||||
#[derive(Debug, Clone, PartialEq, Deserialize)]
|
||||
#[serde(rename_all = "kebab-case", default)]
|
||||
#[serde(rename_all = "kebab-case", default, deny_unknown_fields)]
|
||||
pub struct Config {
|
||||
/// Padding to keep between the edge of the screen and the cursor when scrolling. Defaults to 5.
|
||||
pub scrolloff: usize,
|
||||
@ -195,6 +195,12 @@ pub fn set_error(&mut self, error: String) {
|
||||
}
|
||||
|
||||
pub fn set_theme(&mut self, theme: Theme) {
|
||||
// `ui.selection` is the only scope required to be able to render a theme.
|
||||
if theme.find_scope_index("ui.selection").is_none() {
|
||||
self.set_error("Invalid theme: `ui.selection` required".to_owned());
|
||||
return;
|
||||
}
|
||||
|
||||
let scopes = theme.scopes();
|
||||
for config in self
|
||||
.syn_loader
|
||||
|
Loading…
Reference in New Issue
Block a user