summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlex Vinyals2023-06-07 08:50:16 +0000
committerGitHub2023-06-07 08:50:16 +0000
commit204bac1706badaf562304b67a4beb63102560e40 (patch)
treeef6e862f77c6fb592046ea7eaec3a2ab9d041291
parentba691f4fb0c0ef3baf34ee5f05360dd11ac204bc (diff)
commands(toggle): use pattern matching on the Value enum (#7240)
-rw-r--r--helix-term/src/commands/typed.rs26
1 files changed, 11 insertions, 15 deletions
diff --git a/helix-term/src/commands/typed.rs b/helix-term/src/commands/typed.rs
index fb285e72..824abbf4 100644
--- a/helix-term/src/commands/typed.rs
+++ b/helix-term/src/commands/typed.rs
@@ -8,6 +8,7 @@ use super::*;
use helix_core::{encoding, shellwords::Shellwords};
use helix_view::document::DEFAULT_LANGUAGE_NAME;
use helix_view::editor::{Action, CloseError, ConfigEvent};
+use serde_json::Value;
use ui::completers::{self, Completer};
#[derive(Clone)]
@@ -1764,7 +1765,7 @@ fn set_option(
*value = if value.is_string() {
// JSON strings require quotes, so we can't .parse() directly
- serde_json::Value::String(arg.to_string())
+ Value::String(arg.to_string())
} else {
arg.parse().map_err(field_error)?
};
@@ -1800,29 +1801,21 @@ fn toggle_option(
let pointer = format!("/{}", key.replace('.', "/"));
let value = config.pointer_mut(&pointer).ok_or_else(key_error)?;
- *value = match value.as_bool() {
- Some(value) => {
+ *value = match value {
+ Value::Bool(ref value) => {
ensure!(
args.len() == 1,
"Bad arguments. For boolean configurations use: `:toggle key`"
);
- serde_json::Value::Bool(!value)
+ Value::Bool(!value)
}
- None => {
+ Value::String(ref value) => {
ensure!(
args.len() > 2,
- "Bad arguments. For non-boolean configurations use: `:toggle key val1 val2 ...`",
- );
- ensure!(
- value.is_string(),
- "Bad configuration. Cannot cycle non-string configurations"
+ "Bad arguments. For string configurations use: `:toggle key val1 val2 ...`",
);
- let value = value
- .as_str()
- .expect("programming error: should have been ensured before");
-
- serde_json::Value::String(
+ Value::String(
args[1..]
.iter()
.skip_while(|e| *e != value)
@@ -1831,6 +1824,9 @@ fn toggle_option(
.to_string(),
)
}
+ Value::Null | Value::Object(_) | Value::Array(_) | Value::Number(_) => {
+ anyhow::bail!("Configuration {key} does not support toggle yet")
+ }
};
let status = format!("'{key}' is now set to {value}");