| Commit message (Collapse) | Author | Age |
... | |
| |
|
| |
|
| |
|
|
|
|
|
|
| |
Previously a count or register selection would be lost while opening
the command palette. This change allows using a register selection or
count in any command chosen from the command palette.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Previously the register selection (via `"`) would be lost in the middle
of any key sequence longer than one key. For example, `<space>f` would
clear the register selection after the `<space>` making it inaccessible
for the `file_picker` command.
This behavior does not currently have any effect in the default keymap
but might affect custom keymaps. This change aligns the behavior of the
register with count. Making this change allows propagating the register
to the `command_palette` (see the child commit) or other pickers should
we decide to use registers in those in the future. (Interactive global
search for example.)
|
| |
|
| |
|
|
|
|
| |
The plan is let `Keymaps` simply store `KeyTrie`s, as the `Keymap(Keytrie)` wrapping serves little to no purpose.
|
|
|
|
| |
`keymap.name` is only used internally.
|
|
|
|
|
| |
This makes it easier later control the order in which the key events
are presented.
|
|
|
|
|
|
|
| |
Does not change any behavior other than making the tuple slightly
more idiomatic. Keymap infobox shows key events, then the respective
description. This commit makes sure that order is used from the get go,
rather than flipping it midway.
|
| |
|
|
|
|
|
| |
Exist under the wrong (possibly just outdated) assumption that command
descriptions are written with their `KeyTrie` name prefixed
|
| |
|
| |
|
|
|
|
| |
The variant Sequence is technically also a leaf.
|
| |
|
| |
|
| |
|
| |
|
| |
|
| |
|
|
|
|
|
|
|
| |
* chore: avoid format! call with argument when useless
* feat: also clear diagnostics for unopened documents when exiting an LSP
* feat: we already worked on `self.editor.diagnostics` no need to redo the checks
|
|
|
|
|
|
|
|
|
|
|
| |
* Add command for merging non-consecutive ranges
* Add `merge_selections` command to book
* Simplify `merge_ranges`
Heeded the advice of @the-mikedavis to stop iterating over all ranges and simply merge the first and the last range, as the invariants of `Selection` guarantee that the list of ranges is always sorted and never empty.
* Clarify doc comment of `merge_ranges`
|
| |
|
|
|
|
| |
Co-authored-by: Pascal Kuthe <pascal.kuthe@semimod.de>
|
|
|
|
| |
Co-authored-by: Pascal Kuthe <pascal.kuthe@semimod.de>
|
|
|
|
| |
code, also don't 'crash' in completion menu if language_server somehow disappeared
|
|
|
|
| |
weren't restarted, if not of the same scope id), and fix some smaller rebase issues
|
|
|
|
| |
demand
|
|
|
|
|
|
|
|
|
| |
`doc.language_servers_with_feature`
* Add `helix_lsp::client::Client::supports_feature(&self, LanguageServerFeature)`
* Extend `doc.language_servers_with_feature` to use this method as filter as well
* Add macro `language_server_with_feature!` to reduce boilerplate for non-mergeable language server requests (like goto-definition)
* Refactored most of the `find_map` code to use the either the macro or filter directly via `doc.language_servers_with_feature`
|
|
|
|
| |
multiple language servers (code-action, completion, symbol pickers)
|
|
|
|
| |
Co-authored-by: Pascal Kuthe <pascal.kuthe@semimod.de>
|
| |
|
|
|
|
| |
retain order
|
| |
|
| |
|
| |
|
| |
|
| |
|
|
|
|
|
|
| |
return an iterator and refactor LanguageServerFeature handling to a HashMap (language server name maps to features)
Co-authored-by: Pascal Kuthe <pascal.kuthe@semimod.de>
|
|
|
|
| |
Co-authored-by: Pascal Kuthe <pascal.kuthe@semimod.de>
|
|
|
|
| |
Co-authored-by: Skyler Hawthorne <skyler@dead10ck.com>
|
|
|
|
|
|
| |
related review suggestions
Co-authored-by: Pascal Kuthe <pascal.kuthe@semimod.de>
|
| |
|
| |
|
| |
|
| |
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Language Servers are now configured in a separate table in `languages.toml`:
```toml
[langauge-server.mylang-lsp]
command = "mylang-lsp"
args = ["--stdio"]
config = { provideFormatter = true }
[language-server.efm-lsp-prettier]
command = "efm-langserver"
[language-server.efm-lsp-prettier.config]
documentFormatting = true
languages = { typescript = [ { formatCommand ="prettier --stdin-filepath ${INPUT}", formatStdin = true } ] }
```
The language server for a language is configured like this (`typescript-language-server` is configured by default):
```toml
[[language]]
name = "typescript"
language-servers = [ { name = "efm-lsp-prettier", only-features = [ "format" ] }, "typescript-language-server" ]
```
or equivalent:
```toml
[[language]]
name = "typescript"
language-servers = [ { name = "typescript-language-server", except-features = [ "format" ] }, "efm-lsp-prettier" ]
```
Each requested LSP feature is priorized in the order of the `language-servers` array.
For example the first `goto-definition` supported language server (in this case `typescript-language-server`) will be taken for the relevant LSP request (command `goto_definition`).
If no `except-features` or `only-features` is given all features for the language server are enabled, as long as the language server supports these. If it doesn't the next language server which supports the feature is tried.
The list of supported features are:
- `format`
- `goto-definition`
- `goto-declaration`
- `goto-type-definition`
- `goto-reference`
- `goto-implementation`
- `signature-help`
- `hover`
- `document-highlight`
- `completion`
- `code-action`
- `workspace-command`
- `document-symbols`
- `workspace-symbols`
- `diagnostics`
- `rename-symbol`
- `inlay-hints`
Another side-effect/difference that comes with this PR, is that only one language server instance is started if different languages use the same language server.
|