Commits
Bumps [dtolnay/rust-toolchain](https://github.com/dtolnay/rust-toolchain) from 67ef31d5b988238dd797d409d6f9574278e20537 to fa04a1451ff1842e2626ccb99004d0195b455a88.
- [Release notes](https://github.com/dtolnay/rust-toolchain/releases)
- [Commits](https://github.com/dtolnay/rust-toolchain/compare/67ef31d5b988238dd797d409d6f9574278e20537...fa04a1451ff1842e2626ccb99004d0195b455a88)
---
updated-dependencies:
- dependency-name: dtolnay/rust-toolchain
dependency-version: fa04a1451ff1842e2626ccb99004d0195b455a88
dependency-type: direct:production
...
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Bumps [taiki-e/install-action](https://github.com/taiki-e/install-action) from 2.82.2 to 2.82.7.
- [Release notes](https://github.com/taiki-e/install-action/releases)
- [Changelog](https://github.com/taiki-e/install-action/blob/main/CHANGELOG.md)
- [Commits](https://github.com/taiki-e/install-action/compare/9e1e5806d4a4822de933115878265be9aaa786d9...16b05812d776ae1dfaabc8277e421fb6d2506419)
---
updated-dependencies:
- dependency-name: taiki-e/install-action
dependency-version: 2.82.7
dependency-type: direct:production
update-type: version-update:semver-patch
...
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Bumps the rust-dependencies group with 5 updates in the / directory:
| Package | From | To |
| --- | --- | --- |
| [arc-swap](https://github.com/vorner/arc-swap) | `1.9.1` | `1.9.2` |
| [arrayvec](https://github.com/bluss/arrayvec) | `0.7.7` | `0.7.8` |
| [anyhow](https://github.com/dtolnay/anyhow) | `1.0.102` | `1.0.103` |
| [ignore](https://github.com/BurntSushi/ripgrep) | `0.4.26` | `0.4.27` |
| [open](https://github.com/Byron/open-rs) | `5.3.5` | `5.3.6` |
Updates `arc-swap` from 1.9.1 to 1.9.2
- [Changelog](https://github.com/vorner/arc-swap/blob/master/CHANGELOG.md)
- [Commits](https://github.com/vorner/arc-swap/commits)
Updates `arrayvec` from 0.7.7 to 0.7.8
- [Release notes](https://github.com/bluss/arrayvec/releases)
- [Changelog](https://github.com/bluss/arrayvec/blob/master/CHANGELOG.md)
- [Commits](https://github.com/bluss/arrayvec/compare/0.7.7...0.7.8)
Updates `anyhow` from 1.0.102 to 1.0.103
- [Release notes](https://github.com/dtolnay/anyhow/releases)
- [Commits](https://github.com/dtolnay/anyhow/compare/1.0.102...1.0.103)
Updates `ignore` from 0.4.26 to 0.4.27
- [Release notes](https://github.com/BurntSushi/ripgrep/releases)
- [Changelog](https://github.com/BurntSushi/ripgrep/blob/master/CHANGELOG.md)
- [Commits](https://github.com/BurntSushi/ripgrep/compare/ignore-0.4.26...ignore-0.4.27)
Updates `open` from 5.3.5 to 5.3.6
- [Release notes](https://github.com/Byron/open-rs/releases)
- [Changelog](https://github.com/Byron/open-rs/blob/main/changelog.md)
- [Commits](https://github.com/Byron/open-rs/compare/v5.3.5...v5.3.6)
---
updated-dependencies:
- dependency-name: arc-swap
dependency-version: 1.9.2
dependency-type: direct:production
update-type: version-update:semver-patch
dependency-group: rust-dependencies
- dependency-name: arrayvec
dependency-version: 0.7.8
dependency-type: direct:production
update-type: version-update:semver-patch
dependency-group: rust-dependencies
- dependency-name: anyhow
dependency-version: 1.0.103
dependency-type: direct:production
update-type: version-update:semver-patch
dependency-group: rust-dependencies
- dependency-name: ignore
dependency-version: 0.4.27
dependency-type: direct:production
update-type: version-update:semver-patch
dependency-group: rust-dependencies
- dependency-name: open
dependency-version: 5.3.6
dependency-type: direct:production
update-type: version-update:semver-patch
dependency-group: rust-dependencies
...
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Bumps [gix](https://github.com/GitoxideLabs/gitoxide) from 0.84.0 to 0.85.0.
- [Release notes](https://github.com/GitoxideLabs/gitoxide/releases)
- [Changelog](https://github.com/GitoxideLabs/gitoxide/blob/main/CHANGELOG.md)
- [Commits](https://github.com/GitoxideLabs/gitoxide/compare/gix-v0.84.0...gix-v0.85.0)
---
updated-dependencies:
- dependency-name: gix
dependency-version: 0.85.0
dependency-type: direct:production
update-type: version-update:semver-minor
...
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Noticed in Go which injects `comment` syntax for comments.
The comment continuation wouldn't work because it would try to
resolve the comment continuation token from the injected comment
syntax which doesn't define one.
Resolved by bubbling up until we find a first layer that defines comment
token.
Bumps [dtolnay/rust-toolchain](https://github.com/dtolnay/rust-toolchain) from 3c5f7ea28cd621ae0bf5283f0e981fb97b8a7af9 to 67ef31d5b988238dd797d409d6f9574278e20537.
- [Release notes](https://github.com/dtolnay/rust-toolchain/releases)
- [Commits](https://github.com/dtolnay/rust-toolchain/compare/3c5f7ea28cd621ae0bf5283f0e981fb97b8a7af9...67ef31d5b988238dd797d409d6f9574278e20537)
---
updated-dependencies:
- dependency-name: dtolnay/rust-toolchain
dependency-version: 67ef31d5b988238dd797d409d6f9574278e20537
dependency-type: direct:production
...
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Bumps [taiki-e/install-action](https://github.com/taiki-e/install-action) from 2.81.8 to 2.82.2.
- [Release notes](https://github.com/taiki-e/install-action/releases)
- [Changelog](https://github.com/taiki-e/install-action/blob/main/CHANGELOG.md)
- [Commits](https://github.com/taiki-e/install-action/compare/0631aa6515c7d545823c67cfae7ef4fc7f490154...9e1e5806d4a4822de933115878265be9aaa786d9)
---
updated-dependencies:
- dependency-name: taiki-e/install-action
dependency-version: 2.82.2
dependency-type: direct:production
update-type: version-update:semver-minor
...
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Bumps [actions/checkout](https://github.com/actions/checkout) from 6 to 7.
- [Release notes](https://github.com/actions/checkout/releases)
- [Changelog](https://github.com/actions/checkout/blob/main/CHANGELOG.md)
- [Commits](https://github.com/actions/checkout/compare/v6...v7)
---
updated-dependencies:
- dependency-name: actions/checkout
dependency-version: '7'
dependency-type: direct:production
update-type: version-update:semver-major
...
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
This should be a user decision in most languages but it's almost
mandatory in Go to drop unused imports (compile error).
On :wq we use the single threaded futures_executor::block_on, and calling
block_on to resolve code actions would hit the nested guard.
Resolve code actions async within a job.
Fixes #15928
Bumps the rust-dependencies group with 9 updates in the / directory:
| Package | From | To |
| --- | --- | --- |
| [bitflags](https://github.com/bitflags/bitflags) | `2.12.1` | `2.13.0` |
| [arrayvec](https://github.com/bluss/arrayvec) | `0.7.6` | `0.7.7` |
| [smallvec](https://github.com/servo/rust-smallvec) | `1.15.1` | `1.15.2` |
| [regex](https://github.com/rust-lang/regex) | `1.12.3` | `1.12.4` |
| [log](https://github.com/rust-lang/log) | `0.4.32` | `0.4.33` |
| [ignore](https://github.com/BurntSushi/ripgrep) | `0.4.25` | `0.4.26` |
| [cc](https://github.com/rust-lang/cc-rs) | `1.2.63` | `1.2.65` |
| [which](https://github.com/harryfei/which-rs) | `8.0.2` | `8.0.4` |
| [percent-encoding](https://github.com/servo/rust-url) | `2.3.1` | `2.3.2` |
Updates `bitflags` from 2.12.1 to 2.13.0
- [Release notes](https://github.com/bitflags/bitflags/releases)
- [Changelog](https://github.com/bitflags/bitflags/blob/main/CHANGELOG.md)
- [Commits](https://github.com/bitflags/bitflags/compare/2.12.1...2.13.0)
Updates `arrayvec` from 0.7.6 to 0.7.7
- [Release notes](https://github.com/bluss/arrayvec/releases)
- [Changelog](https://github.com/bluss/arrayvec/blob/master/CHANGELOG.md)
- [Commits](https://github.com/bluss/arrayvec/compare/0.7.6...0.7.7)
Updates `smallvec` from 1.15.1 to 1.15.2
- [Release notes](https://github.com/servo/rust-smallvec/releases)
- [Commits](https://github.com/servo/rust-smallvec/compare/v1.15.1...v1.15.2)
Updates `regex` from 1.12.3 to 1.12.4
- [Release notes](https://github.com/rust-lang/regex/releases)
- [Changelog](https://github.com/rust-lang/regex/blob/master/CHANGELOG.md)
- [Commits](https://github.com/rust-lang/regex/compare/1.12.3...1.12.4)
Updates `log` from 0.4.32 to 0.4.33
- [Release notes](https://github.com/rust-lang/log/releases)
- [Changelog](https://github.com/rust-lang/log/blob/master/CHANGELOG.md)
- [Commits](https://github.com/rust-lang/log/compare/0.4.32...0.4.33)
Updates `ignore` from 0.4.25 to 0.4.26
- [Release notes](https://github.com/BurntSushi/ripgrep/releases)
- [Changelog](https://github.com/BurntSushi/ripgrep/blob/master/CHANGELOG.md)
- [Commits](https://github.com/BurntSushi/ripgrep/compare/ignore-0.4.25...ignore-0.4.26)
Updates `cc` from 1.2.63 to 1.2.65
- [Release notes](https://github.com/rust-lang/cc-rs/releases)
- [Changelog](https://github.com/rust-lang/cc-rs/blob/main/CHANGELOG.md)
- [Commits](https://github.com/rust-lang/cc-rs/compare/cc-v1.2.63...cc-v1.2.65)
Updates `which` from 8.0.2 to 8.0.4
- [Release notes](https://github.com/harryfei/which-rs/releases)
- [Changelog](https://github.com/harryfei/which-rs/blob/master/CHANGELOG.md)
- [Commits](https://github.com/harryfei/which-rs/compare/8.0.2...8.0.4)
Updates `percent-encoding` from 2.3.1 to 2.3.2
- [Release notes](https://github.com/servo/rust-url/releases)
- [Commits](https://github.com/servo/rust-url/commits)
---
updated-dependencies:
- dependency-name: bitflags
dependency-version: 2.13.0
dependency-type: direct:production
update-type: version-update:semver-minor
dependency-group: rust-dependencies
- dependency-name: arrayvec
dependency-version: 0.7.7
dependency-type: direct:production
update-type: version-update:semver-patch
dependency-group: rust-dependencies
- dependency-name: smallvec
dependency-version: 1.15.2
dependency-type: direct:production
update-type: version-update:semver-patch
dependency-group: rust-dependencies
- dependency-name: regex
dependency-version: 1.12.4
dependency-type: direct:production
update-type: version-update:semver-patch
dependency-group: rust-dependencies
- dependency-name: log
dependency-version: 0.4.33
dependency-type: direct:production
update-type: version-update:semver-patch
dependency-group: rust-dependencies
- dependency-name: ignore
dependency-version: 0.4.26
dependency-type: direct:production
update-type: version-update:semver-patch
dependency-group: rust-dependencies
- dependency-name: cc
dependency-version: 1.2.65
dependency-type: direct:production
update-type: version-update:semver-patch
dependency-group: rust-dependencies
- dependency-name: which
dependency-version: 8.0.4
dependency-type: direct:production
update-type: version-update:semver-patch
dependency-group: rust-dependencies
- dependency-name: percent-encoding
dependency-version: 2.3.2
dependency-type: direct:production
update-type: version-update:semver-patch
dependency-group: rust-dependencies
...
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
When there is a code action hint and either the selection or document
changes, it would stick around until the debounce period ends. Instead
it's better to clear it immediately so that it isn't as misleading.
See: https://github.com/helix-editor/helix/pull/15820#issuecomment-4768055579
Should help with flashing on screen resize. Fixes #15169
* add cursorcolumn and cursorline to base16_transparent theme
* remove-margins-from-overlay
* remove-bottom-clip
* cleanup-and-comments
* typo-correction
* slightly-adjust-comment-wording
* ui/picker.rs: remove a comment
* undo-picker-preview-ratio-change
* undo-fullscreen-without-status-line-and-bring-back-old-code
* make-overlaid-content-conditionally-take-all-the-space
* Apply suggestion from @archseer
---------
Co-authored-by: Blaž Hrastnik <blaz@mxxn.io>
Add an indicator for whether a code action is available on the current
selection. This can either be in the gutter or in the statusline by
adding `code-action-hint` to `editor.gutters` or `editor.statusline`.
Co-authored-by: Ryan Mehri <rmehri01@pm.me>
Code actions can be a thin wrapper around a Fn(&mut Editor) and still
support the LSP implementation. This extracts the code actions so that
they can be reused by arbitrary core actions. This is an important step
towards the spell checking integration: a spelling handler can expose
code actions to add a misspelled word to a personal dictionary, or to
suggest alternatives. These code actions also only need a closure over
an exclusive borrow of the Editor to accomplish either.
Co-authored-by: Jonatan Pettersson <jonatan.pettersson@proton.me>
Co-authored-by: Michael Davis <mcarsondavis@gmail.com>
Co-authored-by: Blaž Hrastnik <blaz@mxxn.io>
This prevents Linguist from counting them as source and changing the
language breakdown of the repo.
* workspace trust: v2
Simplifies the previous implementation: user is prompted to either trust
or deny, esc skips the prompt for now. Less choice fatigue and matches
other implementations.
Unlike other editors, we follow direnv implementation: .helix/ contents
are hashed and a change to the config requires the user to re-approve.
This avoids attack vectors where the user trusts the workspace but pulls
in an untrusted PR branch. To make the hashing safe I had to pull in
sha2, we could in practice use sha1 that's already in the dependency
tree via gix, but that seems like a bad cryptographic choice in 2026.
The on-disk file layout changed to use a directory with a file per
filepath, this avoids concurrent conflicts if you have multiple different
editor instances writing to the trust config.
If the workspace is running in untrusted mode and trusting would make a
meaningful change (local config exists, or in level=none a language
server would start), then we show an indicator on the bottom corner of
the editor.
There's still a problem with git config: smudge filters still get
executed and disabling that in untrusted mode would break autocrlf diffs.
Since we only leverage gix for diffing, I'm hoping upstream could
consider a patch for this.
* Address lints
* Address clippy lint
* Break doc links to private items
Should get the lints CI green
* fix: gix regression
* Rename all to insecure, reintroduce globs
* fix lint
* Remove unused function
---------
Co-authored-by: Michael Davis <mcarsondavis@gmail.com>
additionally marks the enum variants for struct and tuple struct
patterns.
and also fix a few other cases, that were previously marked incorrectly:
- `namespace::Type` should be `@type`, not `@type.enum.variant`
- `Type::CONST` should be `@constant`, not `@type.enum.variant`
* fix(lsp): break shutdown deadlock and use fire-and-forget exit
Two related problems caused `Error: Timed out waiting for language
servers to shutdown`, most visibly with gopls on large Go monorepos.
**Problem 1 — deadlock**
When helix sends `shutdown`, some servers (gopls, vscode-languageserver-
node family) send `client/registerCapability` and `workspace/configuration`
requests *back* to helix before responding. The application event loop is
blocked at `close_language_servers().await` and cannot consume these
requests. The server waits for helix to respond; helix waits for the
server's shutdown response. Classic deadlock broken only by the 3-second
timeout.
Fix: add `shutdown_requested: AtomicBool` and an `inject_tx` channel to
`Transport`. When the flag is set and a server-to-client `MethodCall`
arrives, the `recv` task immediately sends a null-success response via
`inject_tx` rather than forwarding to the dead application queue. The flag
is set *before* writing shutdown to stdin to close the race window. Null
success is used rather than an error because `application.rs` already
documents that an error response to `registerCapability` causes
vscode-languageserver-node servers to abort rather than complete the
shutdown handshake.
**Problem 2 — blocking design**
Even with the deadlock broken, `force_shutdown` blocked on `shutdown().await`
(up to 20 s per-request timeout) while the outer `join_all` had only a 3 s
budget. On large monorepos gopls flushes ~1 300 `window/logMessage`
notifications before responding, pushing the total past 3 s.
The deeper issue is that blocking the application task during shutdown
prevents it from handling any server-to-client traffic, making the system
fragile against any slow or chatty server.
Fix: make `force_shutdown` a plain (non-async) fire-and-forget function
that queues `shutdown` + `exit` in the send channel and returns immediately.
The response channel receiver is dropped on purpose; any late response is
discarded at debug level. `close_language_servers` is simplified to a
synchronous loop + a 50 ms sleep, which gives the send tasks one scheduling
quantum to flush the queued bytes before the runtime drops. Servers that do
not receive the bytes before process exit will see stdin EOF and exit cleanly.
This matches the approach already used for uninitialized servers since #7449,
and mirrors Neovim's default `exit_timeout = false` behaviour.
Fixes #14724
Fixes #14679
See also #5117, #5174, #4551, #11542
* fix linter issues
* transfer child to background thread on shutdown
* lsp: Immediately terminate on quit, wait until servers have been notified
* clippy lint
---------
Co-authored-by: Blaž Hrastnik <blaz@mxxn.io>
Currently a word index task working through a large document can block
the editor shutdown. We can reuse the task controller and handle types
to check whether we're in editor drop and bail of the indexing job.
The prior version used the core movement functions. Those operate on
chars, though, so we can get odd splits where a word cuts within a
grapheme cluster. Instead we want to iterate forward by grapheme
clusters. This also lets us reuses the grapheme cursor, which is much
more efficient than the one-shot grapheme-aligning functions that the
core movement functions use.
This is an easy but very modest improvement for performance for adding
words to the word index. It looks to be ~1-6% improvement depending on
the inserted text. (Though the improvements might be small enough to be
noise in some benchmarks.)
Macro names might match recursively within a pattern (in the future).
They're not parameters / locals at all, so we can override the capture
from the previous pattern to avoid ever highlighting them as parameters.
Starting `languageserver::run()` with `R --vanilla` avoids loading the
user/site profile, saved workspace, and environment restore hooks. This
keeps the language server startup path small and predictable, which is
especially useful when `.Rprofile` is large, slow, project-specific, or
performs complex side effects.
This reduces editor/LSP overhead and avoids unrelated user startup logic
from affecting diagnostics, completion, and background indexing, or even
crashing the LSP when there is a bug within the user's RProfile.
* languages: add bxl file type to starlark
The Buck Extension Language is a Starlark-based scripting system to
interact with the Buck2 graph.
* languages: add buck2 lsp to starlark
Ideally we'd be able to differentiate between Buck2 and Bazel in order to
use the appropriate LSP for each. Since they share the file type `bzl`
however, this requires contextual information (e.g., does a .buckroot
file exist in the working directory or some parent).
Therefore we can't simply create a separate language for Buck2 Starlark
files, and this is the best solution for now.
This is a partial revert of 93c3a4c914c86f34d190c1a6e6c7a6c0ec308a6b to
switch back to `lld`. `mold` doesn't appear to be much faster for us
than `lld`, and `mold` does not work on darwin.
We can replace it with a couple of simple functions and drop timezone
crates altogether
Bumps [dtolnay/rust-toolchain](https://github.com/dtolnay/rust-toolchain) from 67ef31d5b988238dd797d409d6f9574278e20537 to fa04a1451ff1842e2626ccb99004d0195b455a88.
- [Release notes](https://github.com/dtolnay/rust-toolchain/releases)
- [Commits](https://github.com/dtolnay/rust-toolchain/compare/67ef31d5b988238dd797d409d6f9574278e20537...fa04a1451ff1842e2626ccb99004d0195b455a88)
---
updated-dependencies:
- dependency-name: dtolnay/rust-toolchain
dependency-version: fa04a1451ff1842e2626ccb99004d0195b455a88
dependency-type: direct:production
...
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Bumps [taiki-e/install-action](https://github.com/taiki-e/install-action) from 2.82.2 to 2.82.7.
- [Release notes](https://github.com/taiki-e/install-action/releases)
- [Changelog](https://github.com/taiki-e/install-action/blob/main/CHANGELOG.md)
- [Commits](https://github.com/taiki-e/install-action/compare/9e1e5806d4a4822de933115878265be9aaa786d9...16b05812d776ae1dfaabc8277e421fb6d2506419)
---
updated-dependencies:
- dependency-name: taiki-e/install-action
dependency-version: 2.82.7
dependency-type: direct:production
update-type: version-update:semver-patch
...
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Bumps the rust-dependencies group with 5 updates in the / directory:
| Package | From | To |
| --- | --- | --- |
| [arc-swap](https://github.com/vorner/arc-swap) | `1.9.1` | `1.9.2` |
| [arrayvec](https://github.com/bluss/arrayvec) | `0.7.7` | `0.7.8` |
| [anyhow](https://github.com/dtolnay/anyhow) | `1.0.102` | `1.0.103` |
| [ignore](https://github.com/BurntSushi/ripgrep) | `0.4.26` | `0.4.27` |
| [open](https://github.com/Byron/open-rs) | `5.3.5` | `5.3.6` |
Updates `arc-swap` from 1.9.1 to 1.9.2
- [Changelog](https://github.com/vorner/arc-swap/blob/master/CHANGELOG.md)
- [Commits](https://github.com/vorner/arc-swap/commits)
Updates `arrayvec` from 0.7.7 to 0.7.8
- [Release notes](https://github.com/bluss/arrayvec/releases)
- [Changelog](https://github.com/bluss/arrayvec/blob/master/CHANGELOG.md)
- [Commits](https://github.com/bluss/arrayvec/compare/0.7.7...0.7.8)
Updates `anyhow` from 1.0.102 to 1.0.103
- [Release notes](https://github.com/dtolnay/anyhow/releases)
- [Commits](https://github.com/dtolnay/anyhow/compare/1.0.102...1.0.103)
Updates `ignore` from 0.4.26 to 0.4.27
- [Release notes](https://github.com/BurntSushi/ripgrep/releases)
- [Changelog](https://github.com/BurntSushi/ripgrep/blob/master/CHANGELOG.md)
- [Commits](https://github.com/BurntSushi/ripgrep/compare/ignore-0.4.26...ignore-0.4.27)
Updates `open` from 5.3.5 to 5.3.6
- [Release notes](https://github.com/Byron/open-rs/releases)
- [Changelog](https://github.com/Byron/open-rs/blob/main/changelog.md)
- [Commits](https://github.com/Byron/open-rs/compare/v5.3.5...v5.3.6)
---
updated-dependencies:
- dependency-name: arc-swap
dependency-version: 1.9.2
dependency-type: direct:production
update-type: version-update:semver-patch
dependency-group: rust-dependencies
- dependency-name: arrayvec
dependency-version: 0.7.8
dependency-type: direct:production
update-type: version-update:semver-patch
dependency-group: rust-dependencies
- dependency-name: anyhow
dependency-version: 1.0.103
dependency-type: direct:production
update-type: version-update:semver-patch
dependency-group: rust-dependencies
- dependency-name: ignore
dependency-version: 0.4.27
dependency-type: direct:production
update-type: version-update:semver-patch
dependency-group: rust-dependencies
- dependency-name: open
dependency-version: 5.3.6
dependency-type: direct:production
update-type: version-update:semver-patch
dependency-group: rust-dependencies
...
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Bumps [gix](https://github.com/GitoxideLabs/gitoxide) from 0.84.0 to 0.85.0.
- [Release notes](https://github.com/GitoxideLabs/gitoxide/releases)
- [Changelog](https://github.com/GitoxideLabs/gitoxide/blob/main/CHANGELOG.md)
- [Commits](https://github.com/GitoxideLabs/gitoxide/compare/gix-v0.84.0...gix-v0.85.0)
---
updated-dependencies:
- dependency-name: gix
dependency-version: 0.85.0
dependency-type: direct:production
update-type: version-update:semver-minor
...
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Bumps [dtolnay/rust-toolchain](https://github.com/dtolnay/rust-toolchain) from 3c5f7ea28cd621ae0bf5283f0e981fb97b8a7af9 to 67ef31d5b988238dd797d409d6f9574278e20537.
- [Release notes](https://github.com/dtolnay/rust-toolchain/releases)
- [Commits](https://github.com/dtolnay/rust-toolchain/compare/3c5f7ea28cd621ae0bf5283f0e981fb97b8a7af9...67ef31d5b988238dd797d409d6f9574278e20537)
---
updated-dependencies:
- dependency-name: dtolnay/rust-toolchain
dependency-version: 67ef31d5b988238dd797d409d6f9574278e20537
dependency-type: direct:production
...
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Bumps [taiki-e/install-action](https://github.com/taiki-e/install-action) from 2.81.8 to 2.82.2.
- [Release notes](https://github.com/taiki-e/install-action/releases)
- [Changelog](https://github.com/taiki-e/install-action/blob/main/CHANGELOG.md)
- [Commits](https://github.com/taiki-e/install-action/compare/0631aa6515c7d545823c67cfae7ef4fc7f490154...9e1e5806d4a4822de933115878265be9aaa786d9)
---
updated-dependencies:
- dependency-name: taiki-e/install-action
dependency-version: 2.82.2
dependency-type: direct:production
update-type: version-update:semver-minor
...
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Bumps [actions/checkout](https://github.com/actions/checkout) from 6 to 7.
- [Release notes](https://github.com/actions/checkout/releases)
- [Changelog](https://github.com/actions/checkout/blob/main/CHANGELOG.md)
- [Commits](https://github.com/actions/checkout/compare/v6...v7)
---
updated-dependencies:
- dependency-name: actions/checkout
dependency-version: '7'
dependency-type: direct:production
update-type: version-update:semver-major
...
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Bumps the rust-dependencies group with 9 updates in the / directory:
| Package | From | To |
| --- | --- | --- |
| [bitflags](https://github.com/bitflags/bitflags) | `2.12.1` | `2.13.0` |
| [arrayvec](https://github.com/bluss/arrayvec) | `0.7.6` | `0.7.7` |
| [smallvec](https://github.com/servo/rust-smallvec) | `1.15.1` | `1.15.2` |
| [regex](https://github.com/rust-lang/regex) | `1.12.3` | `1.12.4` |
| [log](https://github.com/rust-lang/log) | `0.4.32` | `0.4.33` |
| [ignore](https://github.com/BurntSushi/ripgrep) | `0.4.25` | `0.4.26` |
| [cc](https://github.com/rust-lang/cc-rs) | `1.2.63` | `1.2.65` |
| [which](https://github.com/harryfei/which-rs) | `8.0.2` | `8.0.4` |
| [percent-encoding](https://github.com/servo/rust-url) | `2.3.1` | `2.3.2` |
Updates `bitflags` from 2.12.1 to 2.13.0
- [Release notes](https://github.com/bitflags/bitflags/releases)
- [Changelog](https://github.com/bitflags/bitflags/blob/main/CHANGELOG.md)
- [Commits](https://github.com/bitflags/bitflags/compare/2.12.1...2.13.0)
Updates `arrayvec` from 0.7.6 to 0.7.7
- [Release notes](https://github.com/bluss/arrayvec/releases)
- [Changelog](https://github.com/bluss/arrayvec/blob/master/CHANGELOG.md)
- [Commits](https://github.com/bluss/arrayvec/compare/0.7.6...0.7.7)
Updates `smallvec` from 1.15.1 to 1.15.2
- [Release notes](https://github.com/servo/rust-smallvec/releases)
- [Commits](https://github.com/servo/rust-smallvec/compare/v1.15.1...v1.15.2)
Updates `regex` from 1.12.3 to 1.12.4
- [Release notes](https://github.com/rust-lang/regex/releases)
- [Changelog](https://github.com/rust-lang/regex/blob/master/CHANGELOG.md)
- [Commits](https://github.com/rust-lang/regex/compare/1.12.3...1.12.4)
Updates `log` from 0.4.32 to 0.4.33
- [Release notes](https://github.com/rust-lang/log/releases)
- [Changelog](https://github.com/rust-lang/log/blob/master/CHANGELOG.md)
- [Commits](https://github.com/rust-lang/log/compare/0.4.32...0.4.33)
Updates `ignore` from 0.4.25 to 0.4.26
- [Release notes](https://github.com/BurntSushi/ripgrep/releases)
- [Changelog](https://github.com/BurntSushi/ripgrep/blob/master/CHANGELOG.md)
- [Commits](https://github.com/BurntSushi/ripgrep/compare/ignore-0.4.25...ignore-0.4.26)
Updates `cc` from 1.2.63 to 1.2.65
- [Release notes](https://github.com/rust-lang/cc-rs/releases)
- [Changelog](https://github.com/rust-lang/cc-rs/blob/main/CHANGELOG.md)
- [Commits](https://github.com/rust-lang/cc-rs/compare/cc-v1.2.63...cc-v1.2.65)
Updates `which` from 8.0.2 to 8.0.4
- [Release notes](https://github.com/harryfei/which-rs/releases)
- [Changelog](https://github.com/harryfei/which-rs/blob/master/CHANGELOG.md)
- [Commits](https://github.com/harryfei/which-rs/compare/8.0.2...8.0.4)
Updates `percent-encoding` from 2.3.1 to 2.3.2
- [Release notes](https://github.com/servo/rust-url/releases)
- [Commits](https://github.com/servo/rust-url/commits)
---
updated-dependencies:
- dependency-name: bitflags
dependency-version: 2.13.0
dependency-type: direct:production
update-type: version-update:semver-minor
dependency-group: rust-dependencies
- dependency-name: arrayvec
dependency-version: 0.7.7
dependency-type: direct:production
update-type: version-update:semver-patch
dependency-group: rust-dependencies
- dependency-name: smallvec
dependency-version: 1.15.2
dependency-type: direct:production
update-type: version-update:semver-patch
dependency-group: rust-dependencies
- dependency-name: regex
dependency-version: 1.12.4
dependency-type: direct:production
update-type: version-update:semver-patch
dependency-group: rust-dependencies
- dependency-name: log
dependency-version: 0.4.33
dependency-type: direct:production
update-type: version-update:semver-patch
dependency-group: rust-dependencies
- dependency-name: ignore
dependency-version: 0.4.26
dependency-type: direct:production
update-type: version-update:semver-patch
dependency-group: rust-dependencies
- dependency-name: cc
dependency-version: 1.2.65
dependency-type: direct:production
update-type: version-update:semver-patch
dependency-group: rust-dependencies
- dependency-name: which
dependency-version: 8.0.4
dependency-type: direct:production
update-type: version-update:semver-patch
dependency-group: rust-dependencies
- dependency-name: percent-encoding
dependency-version: 2.3.2
dependency-type: direct:production
update-type: version-update:semver-patch
dependency-group: rust-dependencies
...
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
* add cursorcolumn and cursorline to base16_transparent theme
* remove-margins-from-overlay
* remove-bottom-clip
* cleanup-and-comments
* typo-correction
* slightly-adjust-comment-wording
* ui/picker.rs: remove a comment
* undo-picker-preview-ratio-change
* undo-fullscreen-without-status-line-and-bring-back-old-code
* make-overlaid-content-conditionally-take-all-the-space
* Apply suggestion from @archseer
---------
Co-authored-by: Blaž Hrastnik <blaz@mxxn.io>
Code actions can be a thin wrapper around a Fn(&mut Editor) and still
support the LSP implementation. This extracts the code actions so that
they can be reused by arbitrary core actions. This is an important step
towards the spell checking integration: a spelling handler can expose
code actions to add a misspelled word to a personal dictionary, or to
suggest alternatives. These code actions also only need a closure over
an exclusive borrow of the Editor to accomplish either.
* workspace trust: v2
Simplifies the previous implementation: user is prompted to either trust
or deny, esc skips the prompt for now. Less choice fatigue and matches
other implementations.
Unlike other editors, we follow direnv implementation: .helix/ contents
are hashed and a change to the config requires the user to re-approve.
This avoids attack vectors where the user trusts the workspace but pulls
in an untrusted PR branch. To make the hashing safe I had to pull in
sha2, we could in practice use sha1 that's already in the dependency
tree via gix, but that seems like a bad cryptographic choice in 2026.
The on-disk file layout changed to use a directory with a file per
filepath, this avoids concurrent conflicts if you have multiple different
editor instances writing to the trust config.
If the workspace is running in untrusted mode and trusting would make a
meaningful change (local config exists, or in level=none a language
server would start), then we show an indicator on the bottom corner of
the editor.
There's still a problem with git config: smudge filters still get
executed and disabling that in untrusted mode would break autocrlf diffs.
Since we only leverage gix for diffing, I'm hoping upstream could
consider a patch for this.
* Address lints
* Address clippy lint
* Break doc links to private items
Should get the lints CI green
* fix: gix regression
* Rename all to insecure, reintroduce globs
* fix lint
* Remove unused function
---------
Co-authored-by: Michael Davis <mcarsondavis@gmail.com>
* fix(lsp): break shutdown deadlock and use fire-and-forget exit
Two related problems caused `Error: Timed out waiting for language
servers to shutdown`, most visibly with gopls on large Go monorepos.
**Problem 1 — deadlock**
When helix sends `shutdown`, some servers (gopls, vscode-languageserver-
node family) send `client/registerCapability` and `workspace/configuration`
requests *back* to helix before responding. The application event loop is
blocked at `close_language_servers().await` and cannot consume these
requests. The server waits for helix to respond; helix waits for the
server's shutdown response. Classic deadlock broken only by the 3-second
timeout.
Fix: add `shutdown_requested: AtomicBool` and an `inject_tx` channel to
`Transport`. When the flag is set and a server-to-client `MethodCall`
arrives, the `recv` task immediately sends a null-success response via
`inject_tx` rather than forwarding to the dead application queue. The flag
is set *before* writing shutdown to stdin to close the race window. Null
success is used rather than an error because `application.rs` already
documents that an error response to `registerCapability` causes
vscode-languageserver-node servers to abort rather than complete the
shutdown handshake.
**Problem 2 — blocking design**
Even with the deadlock broken, `force_shutdown` blocked on `shutdown().await`
(up to 20 s per-request timeout) while the outer `join_all` had only a 3 s
budget. On large monorepos gopls flushes ~1 300 `window/logMessage`
notifications before responding, pushing the total past 3 s.
The deeper issue is that blocking the application task during shutdown
prevents it from handling any server-to-client traffic, making the system
fragile against any slow or chatty server.
Fix: make `force_shutdown` a plain (non-async) fire-and-forget function
that queues `shutdown` + `exit` in the send channel and returns immediately.
The response channel receiver is dropped on purpose; any late response is
discarded at debug level. `close_language_servers` is simplified to a
synchronous loop + a 50 ms sleep, which gives the send tasks one scheduling
quantum to flush the queued bytes before the runtime drops. Servers that do
not receive the bytes before process exit will see stdin EOF and exit cleanly.
This matches the approach already used for uninitialized servers since #7449,
and mirrors Neovim's default `exit_timeout = false` behaviour.
Fixes #14724
Fixes #14679
See also #5117, #5174, #4551, #11542
* fix linter issues
* transfer child to background thread on shutdown
* lsp: Immediately terminate on quit, wait until servers have been notified
* clippy lint
---------
Co-authored-by: Blaž Hrastnik <blaz@mxxn.io>
The prior version used the core movement functions. Those operate on
chars, though, so we can get odd splits where a word cuts within a
grapheme cluster. Instead we want to iterate forward by grapheme
clusters. This also lets us reuses the grapheme cursor, which is much
more efficient than the one-shot grapheme-aligning functions that the
core movement functions use.
Starting `languageserver::run()` with `R --vanilla` avoids loading the
user/site profile, saved workspace, and environment restore hooks. This
keeps the language server startup path small and predictable, which is
especially useful when `.Rprofile` is large, slow, project-specific, or
performs complex side effects.
This reduces editor/LSP overhead and avoids unrelated user startup logic
from affecting diagnostics, completion, and background indexing, or even
crashing the LSP when there is a bug within the user's RProfile.
* languages: add bxl file type to starlark
The Buck Extension Language is a Starlark-based scripting system to
interact with the Buck2 graph.
* languages: add buck2 lsp to starlark
Ideally we'd be able to differentiate between Buck2 and Bazel in order to
use the appropriate LSP for each. Since they share the file type `bzl`
however, this requires contextual information (e.g., does a .buckroot
file exist in the working directory or some parent).
Therefore we can't simply create a separate language for Buck2 Starlark
files, and this is the best solution for now.