on master help sign in
Allow `language.config` (in languages.toml) to be passed in as a toml object (#807)

* allow language.config (in languages.toml) to be passed in as a toml object * Change config field for languages from json string to toml object * remove indents on languages.toml config * fix: remove patch version from serde_json import in helix-core * Use same tree-sitter-zig as upstream/master

commiteedcea7e6bdae7d18610ae8d035e7f732099e619 authorMidnight Exigent <36641328+midnightexigent@users.noreply.github.com> dateFri 8 Oct 2021, 04:14 (5 years ago) parent9f27be4
5 files changed+42−45
Cargo.lock+25−24 helix-core/Cargo.toml+1 helix-core/src/syntax.rs+12−1 helix-lsp/src/lib.rs+1−9 languages.toml+3−11
Cargo.lock+25−24
@@ -37,9 +37,9 @@ checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a"
3737
3838[[package]]
3939name = "bstr"
40−version = "0.2.16"
40+version = "0.2.17"
4141source = "registry+https://github.com/rust-lang/crates.io-index"
42−checksum = "90682c8d613ad3373e66de8c6411e0ae2ab2571e879d2efbf73558cc66f21279"
42+checksum = "ba3569f383e8f1598449f1a423e72e99569137b47740b1da11ef19af3d5c3223"
4343dependencies = [
4444 "lazy_static",
4545 "memchr",
@@ -54,9 +54,9 @@ checksum = "72feb31ffc86498dacdbd0fcebb56138e7177a8cc5cea4516031d15ae85a742e"
5454
5555[[package]]
5656name = "bytes"
57−version = "1.0.1"
57+version = "1.1.0"
5858source = "registry+https://github.com/rust-lang/crates.io-index"
59−checksum = "b700ce4376041dcd0a327fd0097c41095743c4c8af8887265942faf1100bd040"
59+checksum = "c4872d67bab6358e59559027aa3b9157c53d9358c51423c17554809a8858e0f8"
6060
6161[[package]]
6262name = "cassowary"
@@ -368,6 +368,7 @@ dependencies = [
368368 "regex",
369369 "ropey",
370370 "serde",
371+ "serde_json",
371372 "similar",
372373 "smallvec",
373374 "tendril",
@@ -514,18 +515,18 @@ dependencies = [
514515
515516[[package]]
516517name = "instant"
517−version = "0.1.10"
518+version = "0.1.11"
518519source = "registry+https://github.com/rust-lang/crates.io-index"
519−checksum = "bee0328b1209d157ef001c94dd85b4f8f64139adb0eac2659f4b08382b2f474d"
520+checksum = "716d3d89f35ac6a34fd0eed635395f4c3b76fa889338a4632e5231a8684216bd"
520521dependencies = [
521522 "cfg-if",
522523]
523524
524525[[package]]
525526name = "itoa"
526−version = "0.4.7"
527+version = "0.4.8"
527528source = "registry+https://github.com/rust-lang/crates.io-index"
528−checksum = "dd25036021b0de88a0aff6b850051563c6516d0bf53f8638938edbb9de732736"
529+checksum = "b71991ff56294aa922b450139ee08b3bfc70982c6b2c7562771375cf73542dd4"
529530
530531[[package]]
531532name = "jsonrpc-core"
@@ -548,9 +549,9 @@ checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646"
548549
549550[[package]]
550551name = "libc"
551−version = "0.2.99"
552+version = "0.2.103"
552553source = "registry+https://github.com/rust-lang/crates.io-index"
553−checksum = "a7f823d141fe0a24df1e23b4af4e3c7ba9e5966ec514ea068c93024aa7deb765"
554+checksum = "dd8f7255a17a627354f321ef0055d63b898c6fb27eff628af4d1b66b7331edf6"
554555
555556[[package]]
556557name = "libloading"
@@ -564,9 +565,9 @@ dependencies = [
564565
565566[[package]]
566567name = "lock_api"
567−version = "0.4.4"
568+version = "0.4.5"
568569source = "registry+https://github.com/rust-lang/crates.io-index"
569−checksum = "0382880606dff6d15c9476c416d18690b72742aa7b605bb6dd6ec9030fbf07eb"
570+checksum = "712a4d093c9976e24e7dbca41db895dabcbac38eb5f4045393d17a95bdfb1109"
570571dependencies = [
571572 "scopeguard",
572573]
@@ -694,9 +695,9 @@ checksum = "692fcb63b64b1758029e0a96ee63e049ce8c5948587f2f7208df04625e5f6b56"
694695
695696[[package]]
696697name = "parking_lot"
697−version = "0.11.1"
698+version = "0.11.2"
698699source = "registry+https://github.com/rust-lang/crates.io-index"
699−checksum = "6d7744ac029df22dca6284efe4e898991d28e3085c706c972bcd7da4a27a15eb"
700+checksum = "7d17b78036a60663b797adeaee46f5c9dfebb86948d1255007a1d6be0271ff99"
700701dependencies = [
701702 "instant",
702703 "lock_api",
@@ -705,9 +706,9 @@ dependencies = [
705706
706707[[package]]
707708name = "parking_lot_core"
708−version = "0.8.3"
709+version = "0.8.5"
709710source = "registry+https://github.com/rust-lang/crates.io-index"
710−checksum = "fa7a782938e745763fe6907fc6ba86946d72f49fe7e21de074e08128a99fb018"
711+checksum = "d76e8e1493bcac0d2766c42737f34458f1c8c50c0d23bcb24ea953affb273216"
711712dependencies = [
712713 "cfg-if",
713714 "instant",
@@ -737,9 +738,9 @@ checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184"
737738
738739[[package]]
739740name = "proc-macro2"
740−version = "1.0.28"
741+version = "1.0.29"
741742source = "registry+https://github.com/rust-lang/crates.io-index"
742−checksum = "5c7ed8b8c7b886ea3ed7dde405212185f423ab44682667c8c6dd14aa1d9f6612"
743+checksum = "b9f5105d4fdaab20335ca9565e106a5d9b82b6219b5ba735731124ac6711d23d"
743744dependencies = [
744745 "unicode-xid",
745746]
@@ -982,9 +983,9 @@ checksum = "d44a3643b4ff9caf57abcee9c2c621d6c03d9135e0d8b589bd9afb5992cb176a"
982983
983984[[package]]
984985name = "syn"
985−version = "1.0.74"
986+version = "1.0.78"
986987source = "registry+https://github.com/rust-lang/crates.io-index"
987−checksum = "1873d832550d4588c3dbc20f01361ab00bfe741048f71e3fecf145a7cc18b29c"
988+checksum = "a4eac2e6c19f5c3abc0c229bea31ff0b9b091c7b14990e8924b92902a303a0c0"
988989dependencies = [
989990 "proc-macro2",
990991 "quote",
@@ -1042,9 +1043,9 @@ dependencies = [
10421043
10431044[[package]]
10441045name = "tinyvec"
1045−version = "1.3.1"
1046+version = "1.5.0"
10461047source = "registry+https://github.com/rust-lang/crates.io-index"
1047−checksum = "848a1e1181b9f6753b5e96a092749e29b11d19ede67dfbbd6c7dc7e0f49b5338"
1048+checksum = "f83b2a3d4d9091d0abd7eba4dc2710b1718583bd4d8992e2190720ea38f391f7"
10481049dependencies = [
10491050 "tinyvec_macros",
10501051]
@@ -1077,9 +1078,9 @@ dependencies = [
10771078
10781079[[package]]
10791080name = "tokio-macros"
1080−version = "1.3.0"
1081+version = "1.4.1"
10811082source = "registry+https://github.com/rust-lang/crates.io-index"
1082−checksum = "54473be61f4ebe4efd09cec9bd5d16fa51d70ea0192213d754d2d500457db110"
1083+checksum = "154794c8f499c2619acd19e839294703e9e32e7630ef5f46ea80d4ef0fbee5eb"
10831084dependencies = [
10841085 "proc-macro2",
10851086 "quote",
helix-core/Cargo.toml+1
@@ -28,6 +28,7 @@ arc-swap = "1"
2828regex = "1"
2929
3030serde = { version = "1.0", features = ["derive"] }
31+serde_json = "1.0"
3132toml = "0.5"
3233
3334similar = "2.1"
helix-core/src/syntax.rs+12−1
@@ -30,6 +30,15 @@ where
3030 .transpose()
3131}
3232
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+
3342#[derive(Debug, Serialize, Deserialize)]
3443pub struct Configuration {
3544 pub language: Vec<LanguageConfiguration>,
@@ -45,7 +54,9 @@ pub struct LanguageConfiguration {
4554 pub file_types: Vec<String>, // filename ends_with? <Gemfile, rb, etc>
4655 pub roots: Vec<String>, // these indicate project roots <.git, Cargo.toml>
4756 pub comment_token: Option<String>,
48− pub config: Option<String>,
57+
58+ #[serde(default, skip_serializing, deserialize_with = "deserialize_lsp_config")]
59+ pub config: Option<serde_json::Value>,
4960
5061 #[serde(default)]
5162 pub auto_format: bool,
helix-lsp/src/lib.rs+1−9
@@ -318,15 +318,7 @@ impl Registry {
318318 let (client, incoming, initialize_notify) = Client::start(
319319 &config.command,
320320 &config.args,
321− serde_json::from_str(language_config.config.as_deref().unwrap_or(""))
322− .map_err(|e| {
323− log::error!(
324− "LSP Config, {}, in `languages.toml` for `{}`",
325− e,
326− language_config.scope()
327− )
328− })
329− .ok(),
321+ language_config.config.clone(),
330322 id,
331323 )?;
332324 self.incoming.push(UnboundedReceiverStream::new(incoming));
languages.toml+3−11
@@ -6,19 +6,11 @@ file-types = ["rs"]
66roots = []
77auto-format = true
88comment-token = "//"
9−config = """
10−{
11− "cargo": {
12− "loadOutDirsFromCheck": true
13− },
14− "procMacro": {
15− "enable": false
16− }
17−}
18−"""
19−
209language-server = { command = "rust-analyzer" }
2110indent = { tab-width = 4, unit = " " }
11+[language.config]
12+cargo = { loadOutDirsFromCheck = true }
13+procMacro = { enable = false }
2214
2315[[language]]
2416name = "toml"