Skip to content

Commit

Permalink
Derive Document language name from languages.toml name key
Browse files Browse the repository at this point in the history
This changes switches from deriving the language name from the
`languages.toml` `scope` key to `name` (`language_id` in the
`LanguageConfiguration` type). For the most part it works to derive
the language name from scope by chopping off `source.` or `rsplit_once`
on `.` but for some languages we have now like html (`text.html.basic`),
it doesn't. This should be a more accurate fallback for the `language_id`
method which is used in LSP and currently uses the `rsplit_once`
strategy.

Here we expose the language's name as `language_name` on `Document` and
replace ad-hoc calculations of the language name with the new method.

This is most impactful for the `file-type` statusline element which is
using `language_id`.
  • Loading branch information
the-mikedavis committed Aug 5, 2022
1 parent bf6f704 commit f56f518
Show file tree
Hide file tree
Showing 3 changed files with 15 additions and 11 deletions.
5 changes: 1 addition & 4 deletions helix-term/src/commands/lsp.rs
Original file line number Diff line number Diff line change
Expand Up @@ -863,10 +863,7 @@ pub fn signature_help_impl(cx: &mut Context, invoked: SignatureHelpInvoked) {
}
};
let doc = doc!(editor);
let language = doc
.language()
.and_then(|scope| scope.strip_prefix("source."))
.unwrap_or("");
let language = doc.language_name().unwrap_or("");

let signature = match response
.signatures
Expand Down
5 changes: 1 addition & 4 deletions helix-term/src/ui/completion.rs
Original file line number Diff line number Diff line change
Expand Up @@ -321,10 +321,7 @@ impl Component for Completion {
// option.documentation

let (view, doc) = current!(cx.editor);
let language = doc
.language()
.and_then(|scope| scope.strip_prefix("source."))
.unwrap_or("");
let language = doc.language_name().unwrap_or("");
let text = doc.text().slice(..);
let cursor_pos = doc.selection(view.id).primary().cursor(text);
let coords = helix_core::visual_coords_at_pos(text, cursor_pos, doc.tab_width());
Expand Down
16 changes: 13 additions & 3 deletions helix-view/src/document.rs
Original file line number Diff line number Diff line change
Expand Up @@ -927,22 +927,32 @@ impl Document {
}

/// Corresponding language scope name. Usually `source.<lang>`.
pub fn language(&self) -> Option<&str> {
pub fn language_scope(&self) -> Option<&str> {
self.language
.as_ref()
.map(|language| language.scope.as_str())
}

/// Language name for the document. Corresponds to the `name` key in
/// `languages.toml` configuration.
pub fn language_name(&self) -> Option<&str> {
self.language
.as_ref()
.map(|language| language.language_id.as_str())
}

/// Language ID for the document. Either the `language-id` from the
/// `language-server` configuration, or the document language if no
/// `language-id` has been specified.
pub fn language_id(&self) -> Option<&str> {
self.language_config()?
let language_config = self.language.as_deref()?;

language_config
.language_server
.as_ref()?
.language_id
.as_deref()
.or_else(|| Some(self.language()?.rsplit_once('.')?.1))
.or_else(|| Some(language_config.language_id.as_str()))
}

/// Corresponding [`LanguageConfiguration`].
Expand Down

0 comments on commit f56f518

Please sign in to comment.