Commit Graph

1991 Commits (cf9669f276dc223323d526d3dcf7c1bbc67a3922)

Author SHA1 Message Date
wongjiahau 10032eb156 fix(ci): cargo fmt 2 years ago
Kyle Smith 44ff8a1df1
LSP: Support textDocument/prepareRename (#6103)
* LSP: Support textDocument/prepareRename

'textDocument/prepareRename' can be used by the client to ask the
server the range of the symbol under the cursor which would be changed
by a subsequent call to 'textDocument/rename' with that position.

We can use this information to fill the prompt with an accurate prefill
which can improve the UX for renaming symbols when the symbol doesn't
align with the "word" textobject. (We currently use the "word"
textobject as a default value for the prompt.)

Co-authored-by: Michael Davis <mcarsondavis@gmail.com>

* clippy fixes

* rustfmt

* Update helix-term/src/commands/lsp.rs

Co-authored-by: Michael Davis <mcarsondavis@gmail.com>

* Update helix-term/src/commands/lsp.rs

Co-authored-by: Michael Davis <mcarsondavis@gmail.com>

* fix clippy from suggestions

* Update helix-term/src/commands/lsp.rs

Co-authored-by: Michael Davis <mcarsondavis@gmail.com>

---------

Co-authored-by: Michael Davis <mcarsondavis@gmail.com>
2 years ago
Clément Delafargue 8dd1ab4899
Softwrapping improvements (#5893)
* use max_line_width + 1 during softwrap to account for newline char

Helix softwrap implementation always wraps lines so that the newline
character doesn't get cut off so he line wraps one chars earlier then
in other editors. This is necessary, because newline chars are always
selecatble in helix and must never be hidden.

However That means that `max_line_width` currently wraps one char
earlier than expected. The typical definition of line width does not
include the newline character and other helix commands like `:reflow`
also don't count the newline character here.

This commit makes softwrap use `max_line_width + 1` instead of
`max_line_width` to correct the impedance missmatch.

* fix typos

Co-authored-by: Jonathan Lebon <jonathan@jlebon.com>

* Add text-width to config.toml

* text-width: update setting documentation

* rename leftover config item

* remove leftover max-line-length occurrences

* Make `text-width` optional in editor config

When it was only used for `:reflow` it made sense to have a default
value set to `80`, but now that soft-wrapping uses this setting, keeping
a default set to `80` would make soft-wrapping behave more aggressively.

* Allow softwrapping to ignore `text-width`

Softwrapping wraps by default to the viewport width or a configured
`text-width` (whichever's smaller). In some cases we only want to set
`text-width` to use for hard-wrapping and let longer lines flow if they
have enough space. This setting allows that.

* Revert "Make `text-width` optional in editor config"

This reverts commit b247d526d69adf41434b6fd9c4983369c785aa22.

* soft-wrap: allow per-language overrides

* Update book/src/configuration.md

Co-authored-by: Pascal Kuthe <pascal.kuthe@semimod.de>

* Update book/src/languages.md

Co-authored-by: Pascal Kuthe <pascal.kuthe@semimod.de>

* Update book/src/configuration.md

Co-authored-by: Pascal Kuthe <pascal.kuthe@semimod.de>

---------

Co-authored-by: Pascal Kuthe <pascal.kuthe@semimod.de>
Co-authored-by: Jonathan Lebon <jonathan@jlebon.com>
Co-authored-by: Alex Boehm <alexb@ozrunways.com>
Co-authored-by: Blaž Hrastnik <blaz@mxxn.io>
2 years ago
Kyle Smith f4bdbe4674
Do not add intermediate lines to jumplist with :<linenum> command. (#5751)
* Do not add intermediate lines to jumplist with :<linenum> command.

* Revert jumplist index changes.

* Reduce calculations during update cycle.

* Use jumplist for undo, set jumplist before preview.

* remove some debug logging

* Revert "remove some debug logging"

This reverts commit 5772c4327e7121c53ea0726a4d7333ae1c413ffb.

* Revert "Use jumplist for undo, set jumplist before preview."

This reverts commit f73a1b29824feaf16477b9df547fb28d9db81923.

* Add last_selection, update implementation.

* @pascalkuthe initial feedback

* Ensure ":goto 123" keybinding works as expected.

* fix clippies, prefer expect() for expect last_selection state
2 years ago
Michael Davis 0c6d25acae
DynamicPicker: Recalculate column widths for new options (#6004)
This fixes blank row text in a DynamicPicker which is initially given
no options. This can happen for language servers which respond to
the workspace symbol request for an empty query with an empty list
of symbols, and that behavior is somewhat common since returning all
symbols as the spec suggests is very expensive.

For empty options, `Picker::new` calculated the widths of each column
as 0. We can recalculate the column widths when the new options are
set to fix this. This refactor is also a good opportunity to formalize
setting new options on a picker: besides setting the new options and
calculating column widths we also want to reset the cursor and rescore
the options.
2 years ago
Michael Davis 6dc017b9e2
Jump to symbol ranges in LSP goto commands (#5986)
This follows prior changes like 42ad1a9e: we select the range given
by the language server rather than the starting point.
2 years ago
Michael Davis 170593161c
LSP: Send replies for malformed and unhandled RPC requests (#6058)
Previously we did not respond to malformed or unhandled LSP requests.
The JSONRPC spec says that all non-notification requests must have
responses:

> When a rpc call is made, the Server MUST reply with a Response,
> except for in the case of Notifications

(Note that Helix is the "Server" in this case. Also from the spec:
"The Server is defined as the origin of Response objects and the
handler of Request objects.")

So this change sends error replies for requests which can't be parsed
or handled. Request IDs are also now added to the log messages for
unhandled requests.
2 years ago
Michael Davis 3d85024717 Move terminal claim/restore code to helix-tui
This moves the `Application::claim_term` and
`helix-term::application::restore_term` functions into the helix-tui
crate. How the terminal should be claimed and restored is a TUI concern
and is implemented differently through different TUI backends.

This cleans out a lot of crossterm and TUI code in Application and
makes it easier to modify claim/restore based on information we query
from the terminal host. The child commit will take advantage of this
to cache the check for whether the host terminal supports the keyboard
enhancement protocol. Without this change, caching that information
takes much more code which is not easily reusable for anything else.

The code to restore the terminal is somewhat duplicated by this patch:
we want to restore the terminal in cases of panics. Panic handler hooks
must live for `'static` and the Application's terminal does not.
2 years ago
Pascal Kuthe 48b6aa9a69
Add command for resetting diff hunks (#5736) 2 years ago
Andrii Grynenko 8c2e447b16 Handle snippets for LSPs not providing offsets for completion 2 years ago
Andrii Grynenko 1866b43cd3 Render every LSP snippets for every cursor
This refactors the snippet logic to be largely unaware of the rest of
the document. The completion application logic is moved into
generate_transaction_from_snippet which is extended to support
dynamically computing replacement text.
2 years ago
Pascal Kuthe ba24cfe912 Delete snippet placeholders when accepting completion
When accepting a snippet completion we automatically delete the
placeholders for now as doing so manual is quite cumbersome. In the
future we should keep these as a mark + virtual text that is
automatically removed once the cursor moves there.
2 years ago
Michael Davis b9b1ec2208 Apply snippets as transactions 2 years ago
Davide Galassi f976c004e2
Allow LSP server to be stopped (#5964) 2 years ago
wongjiahau 9726ae7dbb fix(ci/test): failing on Windows 2 years ago
wongjiahau d1e6a21016 Merge branch 'master' of https://github.com/helix-editor/helix into tree_explore 2 years ago
wongjiahau d62b487321 feat(ui/tree): undo breaking changes
- bind tree-based movements to other keys, namely J,K,H,L
2 years ago
wongjiahau aa6780e149 feat(ui/tree): tree-based movements 2 years ago
Filip Dutescu 376c19e06b
feat(dap): implement Restart request (#5651)
Add a restart debug session command, which would issue a
[Restart Request][1], if the debugger supports it and a session is
running. It uses the same arguments and requests used to start the
initial session, when recreating it.

It builds upon #5532, making use of the changes to the termination
workflow of a session.

[1]: https://microsoft.github.io/debug-adapter-protocol/specification#Requests_Restart

Closes: #5594

Signed-off-by: Filip Dutescu <filip.dutescu@gmail.com>
2 years ago
wongjiahau bc62b7615d fix(ci): failing windows test & clippy 2 years ago
wongjiahau d3db1b6204 style(tree): improve ancestor contrast 2 years ago
wongjiahau 8ef95ee56a Merge branch 'master' of https://github.com/helix-editor/helix into tree_explore 2 years ago
Santiago Vrancovich 39d5fb0e59
Remove centering view from Unimpaired commands (#6193)
Remove `align_view` calls from `goto_*_diag` as per issue #6177
2 years ago
nuid32 def26966d2
Fix lacking space panic (#6109)
* Fix lack of space for popup crash

* Fix saturating -> wrapping

* Fix wrapping -> saturating (I am an idiot)

* Remove useless "mut" in helix-tui/src/buffer.rs

Co-authored-by: Michael Davis <mcarsondavis@gmail.com>

* Remove redundant bound-check

* Return bound-check back

* Add bound-check for set_style

* Remove set_style bound-check

* Revert bound-check

---------

Co-authored-by: Michael Davis <mcarsondavis@gmail.com>
2 years ago
Pascal Kuthe ccdb144665 update MSRV to 1.65 2 years ago
Alexander Brevig a2e54167d8
fix: Handle signals before crossterm events (#6170)
This is a workaround for a freeze when suspending Helix with C-z on
non-Windows systems. The check for the keyboard enhancement protocol
locks up crossterm's internal event reading/polling system by trying to
set up multiple concurrent readers. `input_stream.next()` sets up one
reader looking for regular crossterm events while the
`supports_keyboard_enhancement` query sets up another looking for
internal events. The latter hangs for two seconds or until the former
yields an event. By handling signals first we don't lock up the mutex
by trying to read keyboard events.
2 years ago
nuid32 ddc5bf4e60
Fix 'attempt to divide by zero' panic (#6155) 2 years ago
wongjiahau a4943a7226 fix(explorer/overlay): prompt overflow
- Previously the prompt appears within the float, which has very limited
  space
- Now, the prompt will be rendered at the editor command area
2 years ago
wongjiahau c2e2f050da feat(explorer/delete): no need to press Enter, just press y
Reference: https://github.com/helix-editor/helix/pull/5768#issuecomment-1449536275
2 years ago
wongjiahau 43b226a2ab feat(explorer/keymap): combine 'a' with 'A'
Reference: https://github.com/helix-editor/helix/pull/5768#issuecomment-1449536275
2 years ago
NomisIV c082ef2863
Fix indentation lines (#6134) (#6136) 2 years ago
Michael Davis 27211abf06
Ignore key-release keyboard events (#6139)
Since crossterm 0.26.x, we receive press/release keyboard events on
Windows always. We can ignore the release events though to emulate
the behavior of keyboard input on Windows on crossterm 0.25.x.
2 years ago
wongjiahau 19d436ee56 Merge branch 'master' of https://github.com/helix-editor/helix into tree_explore 2 years ago
wongjiahau b18a9746e9 fix(explorer): go to previous root does not update state.current_root 2 years ago
lesleyrs 8dab8a0a03 Add shift-backspace keybind alias for backspace (#4937)
When the Kitty Keyboard Protocol is enabled, S-backspace is
distinguished from backspace with no modifiers. This is awkward when
typing because it's very easy to accidentally hold shift and press
backspace temporarily when typing capital letters.

Kakoune (which is also a Kitty Keyboard Protocol application) treats
S-backspace as backspace too:
3150e9b3cd/src/input_handler.cc (L1275)
2 years ago
Michael Davis a066815833 Enable the enhanced keyboard protocol if supported 2 years ago
wongjiahau fae4990444 test(tree): search prompt and filter prompt 2 years ago
wongjiahau 7e4feb02ef fix(explore): search using previous search word after filter does not work
- Also implemented restore_saved_view for filter and search
2 years ago
wongjiahau 4a0c620b77 fix(explorer/filter): not working for newly opened folder 2 years ago
WJH c3b8be978e
fix(ci): clippy + failure on Windows 2 years ago
wongjiahau 601f2c4e5f chore(ui/tree): remove useless comments 2 years ago
wongjiahau ba00a80037 fix(tree): shouldn't use patched font 2 years ago
wongjiahau 24b50bb525 feat(explorer): toggle preview 2 years ago
wongjiahau 38ef079099 feat(tree): jump forward 2 years ago
wongjiahau b5d92aca45 chore: fix clippy warnings 2 years ago
wongjiahau 36769cb3f6 fix(explorer/keymap): change 'b' to 'B'
- to not clash with Tree 'zb'
2 years ago
wongjiahau dffbc15067 refactor(explorer,tree): remove unwrap to avoid panics 2 years ago
wongjiahau cf9b60a3d1 feat(tree): sticky ancestors 2 years ago
wongjiahau 9205117505 fix: failing tests 2 years ago
wongjiahau 6af9a06e74 feat(explorer): bind "="/"_" to "Zoom in"/"Zoom out" 2 years ago
wongjiahau 899491ba25 feat(tree): add C-n/C-p keybinding 2 years ago
wongjiahau f9ff01dd9c chore(ui/tree): bind 'o' to Toggle 2 years ago
wongjiahau 7b63fda7d2 test(explorer): add integration tests 2 years ago
wongjiahau 6321dc9ade chore: rename explore to explorer 2 years ago
wongjiahau 78bb29732a Merge branch 'master' of https://github.com/helix-editor/helix into add-integration-test 2 years ago
wongjiahau bcb1672378 fix(explore):
- preview panics when term height becomes too small
- preview content not sorted
2 years ago
wongjiahau a259c205c0 fix(explore): help overflow
- render with Info
2 years ago
wongjiahau 2e7709e505 MULTI
- refactor(explore):Move filter to Tree
- feat(explore): Implement mkdir -p (but not tested yet)
- feat(ui/tree): Implement jump backward
- test(ui/tree): Refresh
2 years ago
Filip Dutescu 44729fbaf9
fix(dap): validate key and index exist when requesting vars (#5628)
Check if the stack frames contain the thread id and the frame before
trying to get the frame id. If case any of the two fails to be
found, provide the user with messages to inform them of the issue and
gracefully return.

Closes: #5625

Signed-off-by: Filip Dutescu <filip.dutescu@gmail.com>
2 years ago
Filip Dutescu e3765ac6d2
feat(dap): send Disconnect if Terminated event received (#5532)
Send a `Disconnect` DAP request if the `Terminated` event is received.
According to the specification, if the debugging session was started by
as `launch`, the debuggee should be terminated alongside the session. If
instead the session was started as `attach`, it should not be disposed of.

This default behaviour can be overriden if the `supportTerminateDebuggee`
capability is supported by the adapter, through the `Disconnect` request
`terminateDebuggee` argument, as described in
[the specification][discon-spec].

This also implies saving the starting command for a debug sessions, in
order to decide which behaviour should be used, as well as validating the
capabilities of the adapter, in order to decide what the disconnect should
do.

An additional change made is handling of the `Exited` event, showing a
message if the exit code is different than `0`, for the user to be aware
off the termination failure.

[discon-spec]: https://microsoft.github.io/debug-adapter-protocol/specification#Requests_Disconnect

Closes: #4674

Signed-off-by: Filip Dutescu <filip.dutescu@gmail.com>
2 years ago
wongjiahau 2e654a0775 refactor(explore): move search function to Tree 2 years ago
wongjiahau 2a60662e8b feat(explore): add focus indicator 2 years ago
wongjiahau 64059fba47 feat(tree): move left/right 2 years ago
Guillaume 78a1e2db60
feat: show current language when no argument is provided (#5895) 2 years ago
Triton171 a1a6d5f334
Replace incorrect usages of tab_width with indent_width. (#5918) 2 years ago
Erasin b7fb52d0e4
fix: decode lsp url for workspace_diagnostics_picker (#6016) 2 years ago
Jonathan LEI 9368ac76b3
Ignore invalid file URIs from LSP (#6000) 2 years ago
wongjiahau c88164f2fa feat(tree-view): add unit tests 2 years ago
wongjiahau 4dfa8696bd style(tree): increase indentation 2 years ago
Pascal Kuthe c332b16855
ignore case while filtering completions (#6008) 2 years ago
Michael Davis d8526a752c
Use Popup::ignore_escape_key helper for completion (#6006)
The completion component has a separate branch for handling the
Escape key but it can use the `ignore_escape_key` helper added for
signature-help instead.

This should not cause a behavior change - it's just cleaning up the
completion component.
2 years ago
wongjiahau 70984fd148 Merge branch 'master' of https://github.com/helix-editor/helix into refactor-tree-explorer 2 years ago
wongjiahau ef73559a8e fix(explore): cannot focus explorer if no opened document 2 years ago
wongjiahau c8578ba3cc fix: warnings 2 years ago
wongjiahau 94e2c2989b fix(command): space e does not focus explorer when no files are opened 2 years ago
Pascal Kuthe 715c4b24d9
Fix crash in goto_window_center at EOF (#5987) 2 years ago
wongjiahau 72495363f1 fix(explore): 'h' does not realign preview properly 2 years ago
wongjiahau 9bd534bb6f fix(explore): filter 2 years ago
wongjiahau 85fa1c56b7 feat(explore):
- filter
- close document if the file is deleted or renamed
2 years ago
wongjiahau a079477a23 fix(compile): warnings 2 years ago
wongjiahau 56056e8556 fix(explore): increase size will cause panic 2 years ago
wongjiahau b38a941955 feat(explore): close without clearing previous state 2 years ago
wongjiahau 2c221f0af1 fix(explore): help page overflow 2 years ago
wongjiahau 35ffc6036d feat(explore): increase/decrease explorer size 2 years ago
wongjiahau 2bafac0c4e feat(explore): go to previous root 2 years ago
wongjiahau ddb7564809 feat(explore): add help 2 years ago
wongjiahau ec2059bf93 style(ui/tree): highlight ancestor 2 years ago
wongjiahau 52a26ff72c feat(explore): refresh 2 years ago
wongjiahau 5a5a1de4b8 fix(explore/rename): should regenarate index 2 years ago
wongjiahau 44b46dda6a feat(explore): rename file/folder 2 years ago
Matouš Dzivjak 2bebc5042e
feat(ui): deprecated completions (#5932)
* feat(ui): deprecated completions

Mark deprecated completions using strike-through
(CROSSED_OUT modifier). The deprection information
is taken either from the `deprecated` field of the
completion item or from the completion tags.

The field seems to be the older way of passing
the deprecated information and it was already
marked as deprecated for Symbol. In completion
item the field is still valid but it seems that
the LSP is moving in the general direction of using
tags for this kind of information and as such
relying on tags as well seems reasonable and
future-proof.
2 years ago
wongjiahau 2af8b41007 feat(explore): remove files/folder 2 years ago
A-Walrus 8b09b00942
Add :toggle-option command (#4085)
This command toggles the value of boolean options
2 years ago
wongjiahau 458fa1ca58 feat(explore): add folder/file 2 years ago
wongjiahau 0f8b641a5d feat(tree): filter 2 years ago
wongjiahau 82fe4a309d test(ui/tree): find 2 years ago
wongjiahau bdab93e856 feat(explore): search 2 years ago
wongjiahau aa397ef801 feat(explore): reveal current file 2 years ago
wongjiahau d04a1ce214 refactor(tree): change internal implementation
Previous: Vec+Tree hybrid, hard to debug and understand
Now: Pure Tree structure, easy to understand and test
2 years ago
Gokul Soumya 425315d752 Fix completion doc popup area calculation logic
Earlier the doc popup would draw over the compeltion popup
itself and sometimes over the cursor too.
2 years ago