Skip to content

Commit 2d374dc

Browse files
alevinvalmtoohey31
authored andcommitted
commands(toggle): use pattern matching on the Value enum (helix-editor#7240)
1 parent bb74287 commit 2d374dc

File tree

1 file changed

+11
-15
lines changed

1 file changed

+11
-15
lines changed

helix-term/src/commands/typed.rs

+11-15
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ use super::*;
88
use helix_core::{encoding, shellwords::Shellwords};
99
use helix_view::document::DEFAULT_LANGUAGE_NAME;
1010
use helix_view::editor::{Action, CloseError, ConfigEvent};
11+
use serde_json::Value;
1112
use ui::completers::{self, Completer};
1213

1314
#[derive(Clone)]
@@ -1764,7 +1765,7 @@ fn set_option(
17641765

17651766
*value = if value.is_string() {
17661767
// JSON strings require quotes, so we can't .parse() directly
1767-
serde_json::Value::String(arg.to_string())
1768+
Value::String(arg.to_string())
17681769
} else {
17691770
arg.parse().map_err(field_error)?
17701771
};
@@ -1800,29 +1801,21 @@ fn toggle_option(
18001801
let pointer = format!("/{}", key.replace('.', "/"));
18011802
let value = config.pointer_mut(&pointer).ok_or_else(key_error)?;
18021803

1803-
*value = match value.as_bool() {
1804-
Some(value) => {
1804+
*value = match value {
1805+
Value::Bool(ref value) => {
18051806
ensure!(
18061807
args.len() == 1,
18071808
"Bad arguments. For boolean configurations use: `:toggle key`"
18081809
);
1809-
serde_json::Value::Bool(!value)
1810+
Value::Bool(!value)
18101811
}
1811-
None => {
1812+
Value::String(ref value) => {
18121813
ensure!(
18131814
args.len() > 2,
1814-
"Bad arguments. For non-boolean configurations use: `:toggle key val1 val2 ...`",
1815-
);
1816-
ensure!(
1817-
value.is_string(),
1818-
"Bad configuration. Cannot cycle non-string configurations"
1815+
"Bad arguments. For string configurations use: `:toggle key val1 val2 ...`",
18191816
);
18201817

1821-
let value = value
1822-
.as_str()
1823-
.expect("programming error: should have been ensured before");
1824-
1825-
serde_json::Value::String(
1818+
Value::String(
18261819
args[1..]
18271820
.iter()
18281821
.skip_while(|e| *e != value)
@@ -1831,6 +1824,9 @@ fn toggle_option(
18311824
.to_string(),
18321825
)
18331826
}
1827+
Value::Null | Value::Object(_) | Value::Array(_) | Value::Number(_) => {
1828+
anyhow::bail!("Configuration {key} does not support toggle yet")
1829+
}
18341830
};
18351831

18361832
let status = format!("'{key}' is now set to {value}");

0 commit comments

Comments
 (0)