on master help sign in
Use the correct language ID for JavaScript & TypeScript (#1466)

* Use correct language ID for JavaScript/TypeScript * Add missing slash * Only calculate fallback when needed

commit3a34036310d502fe99887c7f15f02784475d6dc5 authorKevin Sjöberg <mail@kevinsjoberg.com> dateSat 15 Jan 2022, 07:23 (5 years ago) parent97e6f2a
5 files changed+26−14
helix-core/src/syntax.rs+1 helix-term/src/application.rs+2−6 helix-view/src/document.rs+18 helix-view/src/editor.rs+2−5 languages.toml+3−3
helix-core/src/syntax.rs+1
@@ -95,6 +95,7 @@ pub struct LanguageServerConfiguration {
9595 #[serde(default)]
9696 #[serde(skip_serializing_if = "Vec::is_empty")]
9797 pub args: Vec<String>,
98+ pub language_id: Option<String>,
9899}
99100
100101#[derive(Debug, Serialize, Deserialize)]
helix-term/src/application.rs+2−6
@@ -358,12 +358,8 @@ impl Application {
358358
359359 // trigger textDocument/didOpen for docs that are already open
360360 for doc in docs {
361− // TODO: extract and share with editor.open
362− let language_id = doc
363− .language()
364− .and_then(|s| s.split('.').last()) // source.rust
365− .map(ToOwned::to_owned)
366− .unwrap_or_default();
361+ let language_id =
362+ doc.language_id().map(ToOwned::to_owned).unwrap_or_default();
367363
368364 tokio::spawn(language_server.text_document_did_open(
369365 doc.url().unwrap(),
helix-view/src/document.rs+18
@@ -844,6 +844,24 @@ impl Document {
844844 .map(|language| language.scope.as_str())
845845 }
846846
847+ /// Language ID for the document. Either the `language-id` from the
848+ /// `language-server` configuration, or the document language if no
849+ /// `language-id` has been specified.
850+ pub fn language_id(&self) -> Option<&str> {
851+ self.language
852+ .as_ref()
853+ .and_then(|config| config.language_server.as_ref())
854+ .and_then(|lsp_config| lsp_config.language_id.as_ref())
855+ .map_or_else(
856+ || {
857+ self.language()
858+ .and_then(|s| s.rsplit_once('.'))
859+ .map(|(_, language_id)| language_id)
860+ },
861+ |language_id| Some(language_id.as_str()),
862+ )
863+ }
864+
847865 /// Corresponding [`LanguageConfiguration`].
848866 pub fn language_config(&self) -> Option<&LanguageConfiguration> {
849867 self.language.as_deref()
helix-view/src/editor.rs+2−5
@@ -307,11 +307,8 @@ impl Editor {
307307 if let Some(language_server) = doc.language_server() {
308308 tokio::spawn(language_server.text_document_did_close(doc.identifier()));
309309 }
310− let language_id = doc
311− .language()
312− .and_then(|s| s.split('.').last()) // source.rust
313− .map(ToOwned::to_owned)
314− .unwrap_or_default();
310+
311+ let language_id = doc.language_id().map(ToOwned::to_owned).unwrap_or_default();
315312
316313 // TODO: this now races with on_init code if the init happens too quickly
317314 tokio::spawn(language_server.text_document_did_open(
languages.toml+3−3
@@ -128,7 +128,7 @@ roots = []
128128comment-token = "//"
129129# TODO: highlights-jsx, highlights-params
130130
131−language-server = { command = "typescript-language-server", args = ["--stdio"] }
131+language-server = { command = "typescript-language-server", args = ["--stdio"], language-id = "javascript" }
132132indent = { tab-width = 2, unit = " " }
133133
134134[[language]]
@@ -140,7 +140,7 @@ shebangs = []
140140roots = []
141141# TODO: highlights-jsx, highlights-params
142142
143−language-server = { command = "typescript-language-server", args = ["--stdio"] }
143+language-server = { command = "typescript-language-server", args = ["--stdio"], language-id = "typescript"}
144144indent = { tab-width = 2, unit = " " }
145145
146146[[language]]
@@ -151,7 +151,7 @@ file-types = ["tsx"]
151151roots = []
152152# TODO: highlights-jsx, highlights-params
153153
154−language-server = { command = "typescript-language-server", args = ["--stdio"] }
154+language-server = { command = "typescript-language-server", args = ["--stdio"], language-id = "typescriptreact" }
155155indent = { tab-width = 2, unit = " " }
156156
157157[[language]]