on master help sign in
Allow `language.config` (in languages.toml) to be passed in as a toml object (#807)
eedcea7Midnight Exigent
Cargo.lock+25−24
@@ -37,9 +37,9 @@ checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a"
37
37
38[[package]]
38[[package]]
39name = "bstr"
39name = "bstr"
40−version = "0.2.16"
40+version = "0.2.17"
41source = "registry+https://github.com/rust-lang/crates.io-index"
41source = "registry+https://github.com/rust-lang/crates.io-index"
42−checksum = "90682c8d613ad3373e66de8c6411e0ae2ab2571e879d2efbf73558cc66f21279"
42+checksum = "ba3569f383e8f1598449f1a423e72e99569137b47740b1da11ef19af3d5c3223"
43dependencies = [
43dependencies = [
44 "lazy_static",
44 "lazy_static",
45 "memchr",
45 "memchr",
@@ -54,9 +54,9 @@ checksum = "72feb31ffc86498dacdbd0fcebb56138e7177a8cc5cea4516031d15ae85a742e"
54
54
55[[package]]
55[[package]]
56name = "bytes"
56name = "bytes"
57−version = "1.0.1"
57+version = "1.1.0"
58source = "registry+https://github.com/rust-lang/crates.io-index"
58source = "registry+https://github.com/rust-lang/crates.io-index"
59−checksum = "b700ce4376041dcd0a327fd0097c41095743c4c8af8887265942faf1100bd040"
59+checksum = "c4872d67bab6358e59559027aa3b9157c53d9358c51423c17554809a8858e0f8"
60
60
61[[package]]
61[[package]]
62name = "cassowary"
62name = "cassowary"
@@ -368,6 +368,7 @@ dependencies = [
368 "regex",
368 "regex",
369 "ropey",
369 "ropey",
370 "serde",
370 "serde",
371+ "serde_json",
371 "similar",
372 "similar",
372 "smallvec",
373 "smallvec",
373 "tendril",
374 "tendril",
@@ -514,18 +515,18 @@ dependencies = [
514
515
515[[package]]
516[[package]]
516name = "instant"
517name = "instant"
517−version = "0.1.10"
518+version = "0.1.11"
518source = "registry+https://github.com/rust-lang/crates.io-index"
519source = "registry+https://github.com/rust-lang/crates.io-index"
519−checksum = "bee0328b1209d157ef001c94dd85b4f8f64139adb0eac2659f4b08382b2f474d"
520+checksum = "716d3d89f35ac6a34fd0eed635395f4c3b76fa889338a4632e5231a8684216bd"
520dependencies = [
521dependencies = [
521 "cfg-if",
522 "cfg-if",
522]
523]
523
524
524[[package]]
525[[package]]
525name = "itoa"
526name = "itoa"
526−version = "0.4.7"
527+version = "0.4.8"
527source = "registry+https://github.com/rust-lang/crates.io-index"
528source = "registry+https://github.com/rust-lang/crates.io-index"
528−checksum = "dd25036021b0de88a0aff6b850051563c6516d0bf53f8638938edbb9de732736"
529+checksum = "b71991ff56294aa922b450139ee08b3bfc70982c6b2c7562771375cf73542dd4"
529
530
530[[package]]
531[[package]]
531name = "jsonrpc-core"
532name = "jsonrpc-core"
@@ -548,9 +549,9 @@ checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646"
548
549
549[[package]]
550[[package]]
550name = "libc"
551name = "libc"
551−version = "0.2.99"
552+version = "0.2.103"
552source = "registry+https://github.com/rust-lang/crates.io-index"
553source = "registry+https://github.com/rust-lang/crates.io-index"
553−checksum = "a7f823d141fe0a24df1e23b4af4e3c7ba9e5966ec514ea068c93024aa7deb765"
554+checksum = "dd8f7255a17a627354f321ef0055d63b898c6fb27eff628af4d1b66b7331edf6"
554
555
555[[package]]
556[[package]]
556name = "libloading"
557name = "libloading"
@@ -564,9 +565,9 @@ dependencies = [
564
565
565[[package]]
566[[package]]
566name = "lock_api"
567name = "lock_api"
567−version = "0.4.4"
568+version = "0.4.5"
568source = "registry+https://github.com/rust-lang/crates.io-index"
569source = "registry+https://github.com/rust-lang/crates.io-index"
569−checksum = "0382880606dff6d15c9476c416d18690b72742aa7b605bb6dd6ec9030fbf07eb"
570+checksum = "712a4d093c9976e24e7dbca41db895dabcbac38eb5f4045393d17a95bdfb1109"
570dependencies = [
571dependencies = [
571 "scopeguard",
572 "scopeguard",
572]
573]
@@ -694,9 +695,9 @@ checksum = "692fcb63b64b1758029e0a96ee63e049ce8c5948587f2f7208df04625e5f6b56"
694
695
695[[package]]
696[[package]]
696name = "parking_lot"
697name = "parking_lot"
697−version = "0.11.1"
698+version = "0.11.2"
698source = "registry+https://github.com/rust-lang/crates.io-index"
699source = "registry+https://github.com/rust-lang/crates.io-index"
699−checksum = "6d7744ac029df22dca6284efe4e898991d28e3085c706c972bcd7da4a27a15eb"
700+checksum = "7d17b78036a60663b797adeaee46f5c9dfebb86948d1255007a1d6be0271ff99"
700dependencies = [
701dependencies = [
701 "instant",
702 "instant",
702 "lock_api",
703 "lock_api",
@@ -705,9 +706,9 @@ dependencies = [
705
706
706[[package]]
707[[package]]
707name = "parking_lot_core"
708name = "parking_lot_core"
708−version = "0.8.3"
709+version = "0.8.5"
709source = "registry+https://github.com/rust-lang/crates.io-index"
710source = "registry+https://github.com/rust-lang/crates.io-index"
710−checksum = "fa7a782938e745763fe6907fc6ba86946d72f49fe7e21de074e08128a99fb018"
711+checksum = "d76e8e1493bcac0d2766c42737f34458f1c8c50c0d23bcb24ea953affb273216"
711dependencies = [
712dependencies = [
712 "cfg-if",
713 "cfg-if",
713 "instant",
714 "instant",
@@ -737,9 +738,9 @@ checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184"
737
738
738[[package]]
739[[package]]
739name = "proc-macro2"
740name = "proc-macro2"
740−version = "1.0.28"
741+version = "1.0.29"
741source = "registry+https://github.com/rust-lang/crates.io-index"
742source = "registry+https://github.com/rust-lang/crates.io-index"
742−checksum = "5c7ed8b8c7b886ea3ed7dde405212185f423ab44682667c8c6dd14aa1d9f6612"
743+checksum = "b9f5105d4fdaab20335ca9565e106a5d9b82b6219b5ba735731124ac6711d23d"
743dependencies = [
744dependencies = [
744 "unicode-xid",
745 "unicode-xid",
745]
746]
@@ -982,9 +983,9 @@ checksum = "d44a3643b4ff9caf57abcee9c2c621d6c03d9135e0d8b589bd9afb5992cb176a"
982
983
983[[package]]
984[[package]]
984name = "syn"
985name = "syn"
985−version = "1.0.74"
986+version = "1.0.78"
986source = "registry+https://github.com/rust-lang/crates.io-index"
987source = "registry+https://github.com/rust-lang/crates.io-index"
987−checksum = "1873d832550d4588c3dbc20f01361ab00bfe741048f71e3fecf145a7cc18b29c"
988+checksum = "a4eac2e6c19f5c3abc0c229bea31ff0b9b091c7b14990e8924b92902a303a0c0"
988dependencies = [
989dependencies = [
989 "proc-macro2",
990 "proc-macro2",
990 "quote",
991 "quote",
@@ -1042,9 +1043,9 @@ dependencies = [
1042
1043
1043[[package]]
1044[[package]]
1044name = "tinyvec"
1045name = "tinyvec"
1045−version = "1.3.1"
1046+version = "1.5.0"
1046source = "registry+https://github.com/rust-lang/crates.io-index"
1047source = "registry+https://github.com/rust-lang/crates.io-index"
1047−checksum = "848a1e1181b9f6753b5e96a092749e29b11d19ede67dfbbd6c7dc7e0f49b5338"
1048+checksum = "f83b2a3d4d9091d0abd7eba4dc2710b1718583bd4d8992e2190720ea38f391f7"
1048dependencies = [
1049dependencies = [
1049 "tinyvec_macros",
1050 "tinyvec_macros",
1050]
1051]
@@ -1077,9 +1078,9 @@ dependencies = [
1077
1078
1078[[package]]
1079[[package]]
1079name = "tokio-macros"
1080name = "tokio-macros"
1080−version = "1.3.0"
1081+version = "1.4.1"
1081source = "registry+https://github.com/rust-lang/crates.io-index"
1082source = "registry+https://github.com/rust-lang/crates.io-index"
1082−checksum = "54473be61f4ebe4efd09cec9bd5d16fa51d70ea0192213d754d2d500457db110"
1083+checksum = "154794c8f499c2619acd19e839294703e9e32e7630ef5f46ea80d4ef0fbee5eb"
1083dependencies = [
1084dependencies = [
1084 "proc-macro2",
1085 "proc-macro2",
1085 "quote",
1086 "quote",
helix-core/Cargo.toml+1
@@ -28,6 +28,7 @@ arc-swap = "1"
28regex = "1"
28regex = "1"
29
29
30serde = { version = "1.0", features = ["derive"] }
30serde = { version = "1.0", features = ["derive"] }
31+serde_json = "1.0"
31toml = "0.5"
32toml = "0.5"
32
33
33similar = "2.1"
34similar = "2.1"
helix-core/src/syntax.rs+12−1
@@ -30,6 +30,15 @@ where
30 .transpose()
30 .transpose()
31}
31}
32
32
33+fn deserialize_lsp_config<'de, D>(deserializer: D) -> Result<Option<serde_json::Value>, D::Error>
34+where
35+ D: serde::Deserializer<'de>,
36+{
37+ Option::<toml::Value>::deserialize(deserializer)?
38+ .map(|toml| toml.try_into().map_err(serde::de::Error::custom))
39+ .transpose()
40+}
41+
33#[derive(Debug, Serialize, Deserialize)]
42#[derive(Debug, Serialize, Deserialize)]
34pub struct Configuration {
43pub struct Configuration {
35 pub language: Vec<LanguageConfiguration>,
44 pub language: Vec<LanguageConfiguration>,
@@ -45,7 +54,9 @@ pub struct LanguageConfiguration {
45 pub file_types: Vec<String>, // filename ends_with? <Gemfile, rb, etc>
54 pub file_types: Vec<String>, // filename ends_with? <Gemfile, rb, etc>
46 pub roots: Vec<String>, // these indicate project roots <.git, Cargo.toml>
55 pub roots: Vec<String>, // these indicate project roots <.git, Cargo.toml>
47 pub comment_token: Option<String>,
56 pub comment_token: Option<String>,
57+
58+ #[serde(default, skip_serializing, deserialize_with = "deserialize_lsp_config")]
48− pub config: Option<String>,
59+ pub config: Option<serde_json::Value>,
49
60
50 #[serde(default)]
61 #[serde(default)]
51 pub auto_format: bool,
62 pub auto_format: bool,
helix-lsp/src/lib.rs+1−9
@@ -318,15 +318,7 @@ impl Registry {
318 let (client, incoming, initialize_notify) = Client::start(
318 let (client, incoming, initialize_notify) = Client::start(
319 &config.command,
319 &config.command,
320 &config.args,
320 &config.args,
321− serde_json::from_str(language_config.config.as_deref().unwrap_or(""))
321+ language_config.config.clone(),
322− .map_err(|e| {
323− log::error!(
324− "LSP Config, {}, in `languages.toml` for `{}`",
325− e,
326− language_config.scope()
327− )
328− })
329− .ok(),
330 id,
322 id,
331 )?;
323 )?;
332 self.incoming.push(UnboundedReceiverStream::new(incoming));
324 self.incoming.push(UnboundedReceiverStream::new(incoming));
languages.toml+3−11
@@ -6,19 +6,11 @@ file-types = ["rs"]
6roots = []
6roots = []
7auto-format = true
7auto-format = true
8comment-token = "//"
8comment-token = "//"
9−config = """
10−{
11− "cargo": {
12− "loadOutDirsFromCheck": true
13− },
14− "procMacro": {
15− "enable": false
16− }
17−}
18−"""
19−
20language-server = { command = "rust-analyzer" }
9language-server = { command = "rust-analyzer" }
21indent = { tab-width = 4, unit = " " }
10indent = { tab-width = 4, unit = " " }
11+[language.config]
12+cargo = { loadOutDirsFromCheck = true }
13+procMacro = { enable = false }
22
14
23[[language]]
15[[language]]
24name = "toml"
16name = "toml"