From 13b2dc31f540e5e87a410ab45162bb3c3d1ea74b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebastian=20D=C3=B6rner?= Date: Mon, 24 Mar 2025 14:21:37 +0100 Subject: [PATCH 01/51] Book: Add a section with links to "Helix mode" in non-Helix software. (#12258) --- book/src/SUMMARY.md | 4 +++- book/src/ecosystem.md | 3 +++ book/src/other-software.md | 32 ++++++++++++++++++++++++++++++++ 3 files changed, 38 insertions(+), 1 deletion(-) create mode 100644 book/src/ecosystem.md create mode 100644 book/src/other-software.md diff --git a/book/src/SUMMARY.md b/book/src/SUMMARY.md index 0aa705675..82715b7ef 100644 --- a/book/src/SUMMARY.md +++ b/book/src/SUMMARY.md @@ -15,7 +15,9 @@ - [Command line](./command-line.md) - [Commands](./commands.md) - [Language support](./lang-support.md) -- [Migrating from Vim](./from-vim.md) +- [Ecosystem](./ecosystem.md) + - [Migrating from Vim](./from-vim.md) + - [Helix mode in other software](./other-software.md) - [Configuration](./configuration.md) - [Editor](./editor.md) - [Themes](./themes.md) diff --git a/book/src/ecosystem.md b/book/src/ecosystem.md new file mode 100644 index 000000000..91d902806 --- /dev/null +++ b/book/src/ecosystem.md @@ -0,0 +1,3 @@ +# Ecosystem + +This section has information related to the wider Helix ecosystem. diff --git a/book/src/other-software.md b/book/src/other-software.md new file mode 100644 index 000000000..8d6414c53 --- /dev/null +++ b/book/src/other-software.md @@ -0,0 +1,32 @@ +# Helix mode in other software + +Helix' keymap and interaction model ([Using Helix](#usage.md)) is easier to adopt if it can be used consistently in many editing contexts. Yet, certain use cases cannot easily be addressed directly in Helix. Similar to vim, this leads to the creation of "Helix mode" in various other software products, allowing Helix-style editing for a greater variety of use cases. + +"Helix mode" is frequently still in early stages or missing entirely. For such cases, we also link to relevant bugs or discussions. + +## Other editors + +| Editor | Plugin or feature providing Helix editing | Comments +| --- | --- | --- | +| [Vim](https://www.vim.org/) | [helix.vim](https://github.com/chtenb/helix.vim) config | +| [IntelliJ IDEA](https://www.jetbrains.com/idea/) / [Android Studio](https://developer.android.com/studio)| [IdeaVim](https://plugins.jetbrains.com/plugin/164-ideavim) plugin + [helix.idea.vim](https://github.com/chtenb/helix.vim) config | Minimum recommended version is IdeaVim 2.19.0. +| [Visual Studio Code](https://code.visualstudio.com/) | [Dance](https://marketplace.visualstudio.com/items?itemName=gregoire.dance) extension, or its [Helix fork](https://marketplace.visualstudio.com/items?itemName=kend.dancehelixkey) | The Helix fork has diverged. You can also use the original Dance and tweak its keybindings directly (try [this config](https://github.com/71/dance/issues/299#issuecomment-1655509531)). +| [Visual Studio Code](https://code.visualstudio.com/) | [Helix for VS Code](https://marketplace.visualstudio.com/items?itemName=jasew.vscode-helix-emulation) extension| +| [Zed](https://zed.dev/) | native via keybindings ([Bug](https://github.com/zed-industries/zed/issues/4642)) | +| [CodeMirror](https://codemirror.net/) | [codemirror-helix](https://gitlab.com/_rvidal/codemirror-helix) | + + +## Shells + +| Shell | Plugin or feature providing Helix editing +| --- | --- +| Fish | [Feature Request](https://github.com/fish-shell/fish-shell/issues/7748) +| Fish | [fish-helix](https://github.com/sshilovsky/fish-helix/tree/main) +| Zsh | [helix-zsh](https://github.com/john-h-k/helix-zsh) +| Nushell | [Feature Request](https://github.com/nushell/reedline/issues/639) + +## Other software + +| Software | Plugin or feature providing Helix editing. | Comments +| --- | --- | --- | +| [Obsidian](https://obsidian.md/) | [Obsidian-Helix](https://github.com/Sinono3/obsidian-helix) | Uses `codemirror-helix` listed above. From 5adb4b7413e294d80494a1dea6294e68dd0cd49c Mon Sep 17 00:00:00 2001 From: Nick Date: Tue, 25 Mar 2025 15:13:26 +0530 Subject: [PATCH 02/51] Allow `:theme` to show current theme (#13192) Updates the signature for the command to take 0 arguments. This probably regressed during 0efa8207d86d39f9bdd54e72117ae9c8817e2cc6. --- helix-term/src/commands/typed.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/helix-term/src/commands/typed.rs b/helix-term/src/commands/typed.rs index e1c09a04d..4e912127c 100644 --- a/helix-term/src/commands/typed.rs +++ b/helix-term/src/commands/typed.rs @@ -2924,7 +2924,7 @@ pub const TYPABLE_COMMAND_LIST: &[TypableCommand] = &[ fun: theme, completer: CommandCompleter::positional(&[completers::theme]), signature: Signature { - positionals: (1, Some(1)), + positionals: (0, Some(1)), ..Signature::DEFAULT }, }, From 04d1180a0c858971a91f8c09dfbd7eab5990cb75 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 25 Mar 2025 07:40:40 -0500 Subject: [PATCH 03/51] build(deps): bump the rust-dependencies group with 4 updates (#13190) Bumps the rust-dependencies group with 4 updates: [tempfile](https://github.com/Stebalien/tempfile), [log](https://github.com/rust-lang/log), [rustix](https://github.com/bytecodealliance/rustix) and [cc](https://github.com/rust-lang/cc-rs). Updates `tempfile` from 3.19.0 to 3.19.1 - [Changelog](https://github.com/Stebalien/tempfile/blob/master/CHANGELOG.md) - [Commits](https://github.com/Stebalien/tempfile/compare/v3.19.0...v3.19.1) Updates `log` from 0.4.26 to 0.4.27 - [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.26...0.4.27) Updates `rustix` from 1.0.2 to 1.0.3 - [Release notes](https://github.com/bytecodealliance/rustix/releases) - [Changelog](https://github.com/bytecodealliance/rustix/blob/main/CHANGES.md) - [Commits](https://github.com/bytecodealliance/rustix/compare/v1.0.2...v1.0.3) Updates `cc` from 1.2.16 to 1.2.17 - [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.16...cc-v1.2.17) --- updated-dependencies: - dependency-name: tempfile dependency-type: direct:production update-type: version-update:semver-patch dependency-group: rust-dependencies - dependency-name: log dependency-type: direct:production update-type: version-update:semver-patch dependency-group: rust-dependencies - dependency-name: rustix dependency-type: direct:production update-type: version-update:semver-patch dependency-group: rust-dependencies - dependency-name: cc dependency-type: direct:production update-type: version-update:semver-patch dependency-group: rust-dependencies ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- Cargo.lock | 22 +++++++++++----------- Cargo.toml | 2 +- 2 files changed, 12 insertions(+), 12 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index b0e34b3f5..cabb98a70 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -136,9 +136,9 @@ checksum = "df8670b8c7b9dae1793364eafadf7239c40d669904660c5960d74cfd80b46a53" [[package]] name = "cc" -version = "1.2.16" +version = "1.2.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "be714c154be609ec7f5dad223a33bf1482fff90472de28f7362806e6d4832b8c" +checksum = "1fcb57c740ae1daf453ae85f16e37396f672b039e00d9d866e07ddb24e328e3a" dependencies = [ "shlex", ] @@ -1449,7 +1449,7 @@ dependencies = [ "regex-automata", "regex-cursor", "ropey", - "rustix 1.0.2", + "rustix 1.0.3", "tempfile", "unicode-segmentation", "which", @@ -1556,7 +1556,7 @@ dependencies = [ "log", "once_cell", "parking_lot", - "rustix 1.0.2", + "rustix 1.0.3", "serde", "serde_json", "slotmap", @@ -1911,9 +1911,9 @@ dependencies = [ [[package]] name = "log" -version = "0.4.26" +version = "0.4.27" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "30bde2b3dc3671ae49d8e2e9f044c7c005836e7a023ee57cffa25ab82764bb9e" +checksum = "13dc2df351e3202783a1fe0d44375f7295ffb4049267b0f3018346dc122a1d94" [[package]] name = "maybe-async" @@ -2259,9 +2259,9 @@ dependencies = [ [[package]] name = "rustix" -version = "1.0.2" +version = "1.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f7178faa4b75a30e269c71e61c353ce2748cf3d76f0c44c393f4e60abf49b825" +checksum = "e56a18552996ac8d29ecc3b190b4fdbb2d91ca4ec396de7bbffaf43f3d637e96" dependencies = [ "bitflags", "errno", @@ -2485,14 +2485,14 @@ dependencies = [ [[package]] name = "tempfile" -version = "3.19.0" +version = "3.19.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "488960f40a3fd53d72c2a29a58722561dee8afdd175bd88e3db4677d7b2ba600" +checksum = "7437ac7763b9b123ccf33c338a5cc1bac6f69b45a136c19bdd8a65e3916435bf" dependencies = [ "fastrand", "getrandom 0.3.1", "once_cell", - "rustix 1.0.2", + "rustix 1.0.3", "windows-sys 0.59.0", ] diff --git a/Cargo.toml b/Cargo.toml index 4b9e8fea6..667a83967 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -41,7 +41,7 @@ tree-sitter = { version = "0.22" } nucleo = "0.5.0" slotmap = "1.0.7" thiserror = "2.0" -tempfile = "3.19.0" +tempfile = "3.19.1" bitflags = "2.9" unicode-segmentation = "1.2" ropey = { version = "1.6.1", default-features = false, features = ["simd"] } From d43de148076aded237c3641668392705816a98bb Mon Sep 17 00:00:00 2001 From: Michael Davis Date: Tue, 25 Mar 2025 08:52:46 -0400 Subject: [PATCH 04/51] LSP: Avoid requesting document colors for ghost transactions The point of ghost transactions is to avoid notifying language servers about changes since the change is meant to be temporary. This is used for completion while selecting items in the menu: updating the language server would mess up incomplete completions. When a document is changed by a ghost transaction the language server will not be notified so its understanding of the document will not be synchronized and any positions it sends may be out-of-date. So we should avoid triggering a request for new document color information when a document is changed by a ghost transaction. --- helix-term/src/handlers/document_colors.rs | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/helix-term/src/handlers/document_colors.rs b/helix-term/src/handlers/document_colors.rs index cffe56888..956cecbfb 100644 --- a/helix-term/src/handlers/document_colors.rs +++ b/helix-term/src/handlers/document_colors.rs @@ -167,10 +167,14 @@ pub(super) fn register_hooks(handlers: &Handlers) { apply_color_swatch_changes(color_swatches_padding); } - // Cancel the ongoing request, if present. - event.doc.color_swatch_controller.cancel(); - - helix_event::send_blocking(&tx, DocumentColorsEvent(event.doc.id())); + // Avoid re-requesting document colors if the change is a ghost transaction (completion) + // because the language server will not know about the updates to the document and will + // give out-of-date locations. + if !event.ghost_transaction { + // Cancel the ongoing request, if present. + event.doc.color_swatch_controller.cancel(); + helix_event::send_blocking(&tx, DocumentColorsEvent(event.doc.id())); + } Ok(()) }); From 388a3b78e3c4feff9c058b020c12f9eb47e72168 Mon Sep 17 00:00:00 2001 From: Michael Davis Date: Tue, 25 Mar 2025 09:03:28 -0400 Subject: [PATCH 05/51] Avoid removing modified documents in Editor::close_document This fixes a regression from 6da1a79d80d9. `:buffer-close` on an unmodified document would cause later panics since the document should not have been removed. Instead of eagerly removing the document on the first line we need to wait until we've checked that it's unmodified. --- helix-view/src/editor.rs | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/helix-view/src/editor.rs b/helix-view/src/editor.rs index 27a985ac3..dfade86ba 100644 --- a/helix-view/src/editor.rs +++ b/helix-view/src/editor.rs @@ -1809,13 +1809,14 @@ impl Editor { } pub fn close_document(&mut self, doc_id: DocumentId, force: bool) -> Result<(), CloseError> { - let doc = match self.documents.remove(&doc_id) { + let doc = match self.documents.get(&doc_id) { Some(doc) => doc, None => return Err(CloseError::DoesNotExist), }; if !force && doc.is_modified() { return Err(CloseError::BufferModified(doc.display_name().into_owned())); } + let doc = self.documents.remove(&doc_id).unwrap(); // This will also disallow any follow-up writes self.saves.remove(&doc_id); From cf7eb5517f397e668b029407acd815aa4f1b6171 Mon Sep 17 00:00:00 2001 From: Steven Vancoillie <1499470+steabert@users.noreply.github.com> Date: Thu, 27 Mar 2025 14:37:32 +0100 Subject: [PATCH 06/51] Add earl_grey theme (#13203) --- runtime/themes/earl_grey.toml | 64 +++++++++++++++++++++++++++++++++++ 1 file changed, 64 insertions(+) create mode 100644 runtime/themes/earl_grey.toml diff --git a/runtime/themes/earl_grey.toml b/runtime/themes/earl_grey.toml new file mode 100644 index 000000000..d4d8f9f55 --- /dev/null +++ b/runtime/themes/earl_grey.toml @@ -0,0 +1,64 @@ +# Author : Steven Vancoillie +# +# Migraine-friendly, minimal color scheme focused only on structural elements +# like types, functions, and keywords. + +"comment" = { modifiers = ["dim"] } +"diagnostic.error" = { underline = { color = "blush", style = "curl" } } +"diagnostic.hint" = { underline = { color = "sky", style = "curl" } } +"diagnostic.info" = { underline = { color = "grey", style = "curl" } } +"diagnostic.warning" = { underline = { color = "maple", style = "curl" } } +"diff.delta" = "silver" +"diff.minus" = "blush" +"diff.plus" = "jade" +"error" = "blush" +"function" = { modifiers = ["bold"] } +"hint" = "sky" +"info" = "grey" +"keyword" = "earl" +"type" = "maple" +"ui.background" = { bg = "chaotica" } +"ui.background.separator" = { fg = "snow" } +"ui.cursor" = { fg = "black", bg = "earl" } +"ui.cursorline.primary" = { bg = "deepspace" } +"ui.help" = { bg = "deepspace", fg = "snow" } +"ui.highlight" = { bg = "space" } +"ui.linenr" = { fg = "grey" } +"ui.linenr.selected" = { fg = "earl" } +"ui.menu" = { fg = "snow", bg = "deepspace" } +"ui.menu.scroll" = { fg = "grey", bg = "deepspace" } +"ui.menu.selected" = { fg = "snow", bg = "lacquer" } +"ui.popup" = { bg = "deepspace" } +"ui.selection" = { bg = "lacquer" } +"ui.statusline" = { fg = "earl", bg = "deepspace" } +"ui.statusline.inactive" = { fg = "snow", bg = "deepspace", modifiers = ["dim"] } +"ui.statusline.insert" = { fg = "chaotica", bg = "earl", modifiers = ["bold"] } +"ui.statusline.normal" = { fg = "chaotica", bg = "sky", modifiers = ["bold"] } +"ui.statusline.select" = { fg = "chaotica", bg = "myrtle", modifiers = ["bold"] } +"ui.text" = { fg = "silver" } +"ui.text.focus" = { fg = "snow" } +"ui.virtual" = { fg = "space" } +"ui.virtual.indent-guide" = { fg = "space" } +"ui.virtual.inlay-hint" = { fg = "lacquer" } +"ui.virtual.jump-label" = { fg = "myrtle" } +"ui.virtual.ruler" = { bg = "space" } +"ui.window" = { fg = "space" } +"warning" = "maple" + +[palette] +black = "#000000" +chaotica = "#101010" +deepspace = "#1b1b1b" +space = "#2a2a2d" +lacquer = "#3e3e3e" +darkgrey = "#505050" +grey = "#808080" +silver = "#a6a6a6" +snow = "#f0f0f0" +white = "#ffffff" +blush = "#e78284" +jade = "#90b99f" +earl = "#b59efc" +sky = "#99bbe0" +myrtle = "#e29eca" +maple = "#e5c890" From a2c580c4aef80b6f53729e0828260bf3cefc03f6 Mon Sep 17 00:00:00 2001 From: Daniel Fichtinger Date: Thu, 27 Mar 2025 09:39:10 -0400 Subject: [PATCH 07/51] feat: add tmTheme as XML filetype (#13202) --- languages.toml | 1 + 1 file changed, 1 insertion(+) diff --git a/languages.toml b/languages.toml index 079671b27..9870e49c4 100644 --- a/languages.toml +++ b/languages.toml @@ -2782,6 +2782,7 @@ file-types = [ "rng", "shproj", "tld", + { glob = "*.tm[Tt]heme" }, "tmx", "vbproj.user", "vcxproj", From 68d7308e25aa5905d344041d8f4cdf82662fa106 Mon Sep 17 00:00:00 2001 From: Alexandre Legent Date: Thu, 27 Mar 2025 17:27:25 +0100 Subject: [PATCH 08/51] Update golangci-lint command for v2 (#13204) --- languages.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/languages.toml b/languages.toml index 9870e49c4..cf6471dea 100644 --- a/languages.toml +++ b/languages.toml @@ -175,7 +175,7 @@ rangeVariableTypes = true command = "golangci-lint-langserver" [language-server.golangci-lint-lsp.config] -command = ["golangci-lint", "run", "--out-format", "json", "--issues-exit-code=1"] +command = ["golangci-lint", "run", "--output.json.path=stdout", "--show-stats=false", "--issues-exit-code=1"] [language-server.rust-analyzer] From 7929c0719d739e248adfd80cd7e5b8e386a43938 Mon Sep 17 00:00:00 2001 From: Keir Lawson Date: Thu, 27 Mar 2025 17:00:23 +0000 Subject: [PATCH 09/51] Track progress title an display in place of internal token (#13180) Co-authored-by: Michael Davis --- helix-lsp/src/lib.rs | 44 ++++++++++++++++--- helix-term/src/application.rs | 81 +++++++++++++++++------------------ 2 files changed, 77 insertions(+), 48 deletions(-) diff --git a/helix-lsp/src/lib.rs b/helix-lsp/src/lib.rs index ba41cbc5a..1a2557de2 100644 --- a/helix-lsp/src/lib.rs +++ b/helix-lsp/src/lib.rs @@ -733,14 +733,17 @@ impl Registry { #[derive(Debug)] pub enum ProgressStatus { Created, - Started(lsp::WorkDoneProgress), + Started { + title: String, + progress: lsp::WorkDoneProgress, + }, } impl ProgressStatus { pub fn progress(&self) -> Option<&lsp::WorkDoneProgress> { match &self { ProgressStatus::Created => None, - ProgressStatus::Started(progress) => Some(progress), + ProgressStatus::Started { title: _, progress } => Some(progress), } } } @@ -777,6 +780,13 @@ impl LspProgressMap { self.0.get(&id).and_then(|values| values.get(token)) } + pub fn title(&self, id: LanguageServerId, token: &lsp::ProgressToken) -> Option<&String> { + self.progress(id, token).and_then(|p| match p { + ProgressStatus::Created => None, + ProgressStatus::Started { title, .. } => Some(title), + }) + } + /// Checks if progress `token` for server with `id` is created. pub fn is_created(&mut self, id: LanguageServerId, token: &lsp::ProgressToken) -> bool { self.0 @@ -801,17 +811,39 @@ impl LspProgressMap { self.0.get_mut(&id).and_then(|vals| vals.remove(token)) } - /// Updates the progress of `token` for server with `id` to `status`, returns the value replaced or `None`. + /// Updates the progress of `token` for server with `id` to begin state `status` + pub fn begin( + &mut self, + id: LanguageServerId, + token: lsp::ProgressToken, + status: lsp::WorkDoneProgressBegin, + ) { + self.0.entry(id).or_default().insert( + token, + ProgressStatus::Started { + title: status.title.clone(), + progress: lsp::WorkDoneProgress::Begin(status), + }, + ); + } + + /// Updates the progress of `token` for server with `id` to report state `status`. pub fn update( &mut self, id: LanguageServerId, token: lsp::ProgressToken, - status: lsp::WorkDoneProgress, - ) -> Option { + status: lsp::WorkDoneProgressReport, + ) { self.0 .entry(id) .or_default() - .insert(token, ProgressStatus::Started(status)) + .entry(token) + .and_modify(|e| match e { + ProgressStatus::Created => (), + ProgressStatus::Started { progress, .. } => { + *progress = lsp::WorkDoneProgress::Report(status) + } + }); } } diff --git a/helix-term/src/application.rs b/helix-term/src/application.rs index 3bc324395..16a26cb26 100644 --- a/helix-term/src/application.rs +++ b/helix-term/src/application.rs @@ -756,10 +756,11 @@ impl Application { .compositor .find::() .expect("expected at least one EditorView"); - let lsp::ProgressParams { token, value } = params; - - let lsp::ProgressParamsValue::WorkDone(work) = value; - let parts = match &work { + let lsp::ProgressParams { + token, + value: lsp::ProgressParamsValue::WorkDone(work), + } = params; + let (title, message, percentage) = match &work { lsp::WorkDoneProgress::Begin(lsp::WorkDoneProgressBegin { title, message, @@ -787,47 +788,43 @@ impl Application { } }; - let token_d: &dyn std::fmt::Display = match &token { - lsp::NumberOrString::Number(n) => n, - lsp::NumberOrString::String(s) => s, - }; - - let status = match parts { - (Some(title), Some(message), Some(percentage)) => { - format!("[{}] {}% {} - {}", token_d, percentage, title, message) + if self.editor.config().lsp.display_progress_messages { + let title = + title.or_else(|| self.lsp_progress.title(server_id, &token)); + if title.is_some() || percentage.is_some() || message.is_some() { + use std::fmt::Write as _; + let mut status = format!("{}: ", language_server!().name()); + if let Some(percentage) = percentage { + write!(status, "{percentage:>2}% ").unwrap(); + } + if let Some(title) = title { + status.push_str(title); + } + if title.is_some() && message.is_some() { + status.push_str(" ⋅ "); + } + if let Some(message) = message { + status.push_str(message); + } + self.editor.set_status(status); } - (Some(title), None, Some(percentage)) => { - format!("[{}] {}% {}", token_d, percentage, title) - } - (Some(title), Some(message), None) => { - format!("[{}] {} - {}", token_d, title, message) - } - (None, Some(message), Some(percentage)) => { - format!("[{}] {}% {}", token_d, percentage, message) - } - (Some(title), None, None) => { - format!("[{}] {}", token_d, title) - } - (None, Some(message), None) => { - format!("[{}] {}", token_d, message) - } - (None, None, Some(percentage)) => { - format!("[{}] {}%", token_d, percentage) - } - (None, None, None) => format!("[{}]", token_d), - }; - - if let lsp::WorkDoneProgress::End(_) = work { - self.lsp_progress.end_progress(server_id, &token); - if !self.lsp_progress.is_progressing(server_id) { - editor_view.spinners_mut().get_or_create(server_id).stop(); - } - } else { - self.lsp_progress.update(server_id, token, work); } - if self.config.load().editor.lsp.display_progress_messages { - self.editor.set_status(status); + match work { + lsp::WorkDoneProgress::Begin(begin_status) => { + self.lsp_progress + .begin(server_id, token.clone(), begin_status); + } + lsp::WorkDoneProgress::Report(report_status) => { + self.lsp_progress + .update(server_id, token.clone(), report_status); + } + lsp::WorkDoneProgress::End(_) => { + self.lsp_progress.end_progress(server_id, &token); + if !self.lsp_progress.is_progressing(server_id) { + editor_view.spinners_mut().get_or_create(server_id).stop(); + }; + } } } Notification::ProgressMessage(_params) => { From 01fce51c45529fad2283716d81d7bb35f6182c73 Mon Sep 17 00:00:00 2001 From: RoloEdits Date: Fri, 28 Mar 2025 06:51:36 -0700 Subject: [PATCH 10/51] fix(keymap): point to proper `MappableCommand` instead of `Command` (#13214) --- helix-term/src/keymap/macros.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/helix-term/src/keymap/macros.rs b/helix-term/src/keymap/macros.rs index 15d2aa53b..9cddd8250 100644 --- a/helix-term/src/keymap/macros.rs +++ b/helix-term/src/keymap/macros.rs @@ -90,7 +90,7 @@ macro_rules! keymap { }; (@trie [$($cmd:ident),* $(,)?]) => { - $crate::keymap::KeyTrie::Sequence(vec![$($crate::commands::Command::$cmd),*]) + $crate::keymap::KeyTrie::Sequence(vec![$($crate::commands::MappableCommand::$cmd),*]) }; ( From bb96a535fc13137bb709abf3ff25e9eefe586745 Mon Sep 17 00:00:00 2001 From: Keir Lawson Date: Sat, 29 Mar 2025 19:41:43 +0000 Subject: [PATCH 11/51] Add ui.text.directory to spacebones (#13213) --- runtime/themes/spacebones_light.toml | 1 + 1 file changed, 1 insertion(+) diff --git a/runtime/themes/spacebones_light.toml b/runtime/themes/spacebones_light.toml index 1d744019b..9736ba35e 100644 --- a/runtime/themes/spacebones_light.toml +++ b/runtime/themes/spacebones_light.toml @@ -64,6 +64,7 @@ "ui.help" = { bg = "bg1", fg = "fg1" } "ui.text" = { fg = "fg1" } "ui.text.focus" = { fg = "fg1", modifiers = ["bold"] } +"ui.text.directory" = { fg = "theme_blue" } "ui.selection" = { bg = "hl2" } "ui.selection.primary" = { bg = "hl1" } "ui.cursor.primary" = { modifiers = ["reversed"] } From e7354852779f61cbbcc1eb3f6f7b69b590c9ed40 Mon Sep 17 00:00:00 2001 From: Gavin Morrow Date: Sat, 29 Mar 2025 15:43:33 -0400 Subject: [PATCH 12/51] Remove bg from tokyonight text (#13216) --- runtime/themes/tokyonight.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/runtime/themes/tokyonight.toml b/runtime/themes/tokyonight.toml index 08e7ce3ae..e95b11785 100644 --- a/runtime/themes/tokyonight.toml +++ b/runtime/themes/tokyonight.toml @@ -85,7 +85,7 @@ hint = { fg = "hint" } "ui.statusline.normal" = { bg = "blue", fg = "bg", modifiers = ["bold"] } "ui.statusline.insert" = { bg = "light-green", fg = "bg", modifiers = ["bold"] } "ui.statusline.select" = { bg = "magenta", fg = "bg", modifiers = ["bold"] } -"ui.text" = { bg = "bg", fg = "fg" } +"ui.text" = { fg = "fg" } "ui.text.focus" = { bg = "bg-focus" } "ui.text.inactive" = { fg = "comment", modifiers = ["italic"] } "ui.text.info" = { bg = "bg-menu", fg = "fg" } From fb815e2c6f0738eea3491e6a278c27209479bc25 Mon Sep 17 00:00:00 2001 From: Andrea Novellini Date: Sat, 29 Mar 2025 20:44:55 +0100 Subject: [PATCH 13/51] Add peachpuff theme (#13225) --- runtime/themes/peachpuff.toml | 65 +++++++++++++++++++++++++++++++++++ 1 file changed, 65 insertions(+) create mode 100644 runtime/themes/peachpuff.toml diff --git a/runtime/themes/peachpuff.toml b/runtime/themes/peachpuff.toml new file mode 100644 index 000000000..c38aee181 --- /dev/null +++ b/runtime/themes/peachpuff.toml @@ -0,0 +1,65 @@ +# Author : geonove +# License : Vim License + +"ui.menu" = { fg = "light-gray", bg = "gray" } +"ui.menu.selected" = { modifiers = ["reversed"] } +"ui.linenr" = "yellow" +"ui.popup" = { bg = "black" } +"ui.window" = { bg = "black" } +"ui.linenr.selected" = "light-yellow" +"ui.selection" = { fg = "gray", modifiers = ["reversed"] } +"ui.text.focus" = { fg = "black", bg = "white" } +"comment" = "light-green" +"comment.line" = "light-green" +"comment.block" = "red" +"comment.block.documentation" = "red" +"ui.statusline" = { fg = "black", bg = "light-cyan" } +"ui.statusline.inactive" = { fg = "gray", bg = "black" } +"ui.help" = { fg = "white", bg = "black" } +"ui.cursor" = { fg = "light-gray", modifiers = ["reversed"] } +"ui.cursor.primary" = { fg = "light-gray", modifiers = ["reversed"] } +"ui.virtual.whitespace" = "light-gray" +"ui.virtual.jump-label" = { fg = "blue", modifiers = ["bold", "underlined"] } +"ui.virtual.ruler" = { bg = "black" } +"variable" = "white" +"constant.numeric" = "red" +"constant" = "white" +"constant.builtin" = "red" +"attribute" = "yellow" +"type" = "green" +"type.builtin" = "cyan" +"ui.cursor.match" = { fg = "light-gray", modifiers = ["reversed"] } +"string" = "red" +"variable.other.member" = "white" +"constant.character.escape" = "light-cyan" +#"function.builtin" = "cyan" +#"function.method" = "cyan" +#"function.method.private" = "cyan" +"function" = "cyan" +"constructor" = "cyan" +"special" = "light-blue" +"keyword" = "yellow" +"keyword.control.import" = "magenta" +"label" = "white" +"namespace" = "white" + +"markup.heading" = "light-magenta" +"markup.list" = "light-red" +"markup.bold" = { fg = "light-yellow", modifiers = ["bold"] } +"markup.italic" = { fg = "light-magenta", modifiers = ["italic"] } +"markup.strikethrough" = { modifiers = ["crossed_out"] } +"markup.link.url" = { fg = "yellow", modifiers = ["underlined"] } +"markup.link.text" = "light-red" +"markup.quote" = "light-cyan" +"markup.raw" = "light-green" + +"diff.plus" = "light-green" +"diff.delta" = "yellow" +"diff.minus" = "light-red" + +"diagnostic" = { modifiers = ["underlined"] } +"info" = "light-blue" +"hint" = "gray" +"debug" = "gray" +"warning" = "yellow" +"error" = "light-red" From e148d8b3110ace99505c0871714cd64391cc4ba3 Mon Sep 17 00:00:00 2001 From: Michael Davis Date: Sun, 30 Mar 2025 10:35:35 -0400 Subject: [PATCH 14/51] editor: Remove closed Document after updating Views When closing a document we must wait until all views have been updated first - either replacing their current document or closing the view - before we remove the document from the `documents` map. The `Editor::_refresh` helper is called by `Editor::close`. It accesses each View's Document to sync changes and ensure that the cursor is in view. When closing multiple Views at once, `Editor::_refresh` will attempt to access the closing Document while refreshing a to-be-closed View. --- helix-view/src/editor.rs | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/helix-view/src/editor.rs b/helix-view/src/editor.rs index dfade86ba..be2218997 100644 --- a/helix-view/src/editor.rs +++ b/helix-view/src/editor.rs @@ -1816,7 +1816,6 @@ impl Editor { if !force && doc.is_modified() { return Err(CloseError::BufferModified(doc.display_name().into_owned())); } - let doc = self.documents.remove(&doc_id).unwrap(); // This will also disallow any follow-up writes self.saves.remove(&doc_id); @@ -1857,6 +1856,8 @@ impl Editor { } } + let doc = self.documents.remove(&doc_id).unwrap(); + // If the document we removed was visible in all views, we will have no more views. We don't // want to close the editor just for a simple buffer close, so we need to create a new view // containing either an existing document, or a brand new document. From db187c487092d42d080226d5b57493778aa11588 Mon Sep 17 00:00:00 2001 From: Sri Senthil Balaji J <50240805+SymphonySimper@users.noreply.github.com> Date: Mon, 31 Mar 2025 19:58:50 +0530 Subject: [PATCH 15/51] feat: add ConsoleOnly to desktop entry categories (#13236) --- contrib/Helix.desktop | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/contrib/Helix.desktop b/contrib/Helix.desktop index 25d5c3b1a..666828716 100644 --- a/contrib/Helix.desktop +++ b/contrib/Helix.desktop @@ -86,6 +86,6 @@ Keywords[ru]=текст;текстовый редактор; Keywords[sr]=Текст;едитор; Keywords[tr]=Metin;düzenleyici; Icon=helix -Categories=Utility;TextEditor; +Categories=Utility;TextEditor;ConsoleOnly StartupNotify=false MimeType=text/english;text/plain;text/x-makefile;text/x-c++hdr;text/x-c++src;text/x-chdr;text/x-csrc;text/x-java;text/x-moc;text/x-pascal;text/x-tcl;text/x-tex;application/x-shellscript;text/x-c;text/x-c++; From 7ebf65002940d0ce8d6e59c3ec22c736f7d57d9c Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 1 Apr 2025 13:55:16 +0900 Subject: [PATCH 16/51] build(deps): bump once_cell in the rust-dependencies group (#13244) Bumps the rust-dependencies group with 1 update: [once_cell](https://github.com/matklad/once_cell). Updates `once_cell` from 1.21.1 to 1.21.3 - [Changelog](https://github.com/matklad/once_cell/blob/master/CHANGELOG.md) - [Commits](https://github.com/matklad/once_cell/compare/v1.21.1...v1.21.3) --- updated-dependencies: - dependency-name: once_cell dependency-version: 1.21.3 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: rust-dependencies ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- Cargo.lock | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index cabb98a70..3fbb80c90 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2023,9 +2023,9 @@ dependencies = [ [[package]] name = "once_cell" -version = "1.21.1" +version = "1.21.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d75b0bedcc4fe52caa0e03d9f1151a323e4aa5e2d78ba3580400cd3c9e2bc4bc" +checksum = "42f5e15c9953c5e4ccceeb2e7382a716482c34515315f7b03532b8b4e8393d2d" [[package]] name = "open" From 2bb0d52f3ebed216e56294f5f06c21d2613d292a Mon Sep 17 00:00:00 2001 From: Tshepang Mbambo Date: Sun, 6 Apr 2025 18:41:10 +0200 Subject: [PATCH 17/51] book: avoid uncomfortable flow disruption (#13271) --- book/src/building-from-source.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/book/src/building-from-source.md b/book/src/building-from-source.md index fc8631b00..b2ed3f7fc 100644 --- a/book/src/building-from-source.md +++ b/book/src/building-from-source.md @@ -184,11 +184,11 @@ cargo deb -- --locked > 💡 This locks you into the `--release` profile. But you can also build helix in any way you like. > As long as you leave a `target/release/hx` file, it will get packaged with `cargo deb --no-build` -> 💡 Don't worry about the repeated +> 💡 Don't worry about the following: > ``` > warning: Failed to find dependency specification > ``` -> warnings. Cargo deb just reports which packaged files it didn't derive dependencies for. But +> Cargo deb just reports which packaged files it didn't derive dependencies for. But > so far the dependency deriving seams very good, even if some of the grammar files are skipped. You can find the resulted `.deb` in `target/debian/`. It should contain everything it needs, including the From d0c5a2044d9e6b25740031c25689155c2b38c547 Mon Sep 17 00:00:00 2001 From: Daniel Fichtinger Date: Sun, 6 Apr 2025 12:41:53 -0400 Subject: [PATCH 18/51] feat: added lsp for just (#13276) --- book/src/generated/lang-support.md | 2 +- languages.toml | 2 ++ 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/book/src/generated/lang-support.md b/book/src/generated/lang-support.md index f6aee3fe3..c76c48413 100644 --- a/book/src/generated/lang-support.md +++ b/book/src/generated/lang-support.md @@ -118,7 +118,7 @@ | jsonnet | ✓ | | | `jsonnet-language-server` | | jsx | ✓ | ✓ | ✓ | `typescript-language-server` | | julia | ✓ | ✓ | ✓ | `julia` | -| just | ✓ | ✓ | ✓ | | +| just | ✓ | ✓ | ✓ | `just-lsp` | | kdl | ✓ | ✓ | ✓ | | | koka | ✓ | | ✓ | `koka` | | kotlin | ✓ | ✓ | ✓ | `kotlin-language-server` | diff --git a/languages.toml b/languages.toml index cf6471dea..045868c50 100644 --- a/languages.toml +++ b/languages.toml @@ -57,6 +57,7 @@ jedi = { command = "jedi-language-server" } jq-lsp = { command = "jq-lsp" } jsonnet-language-server = { command = "jsonnet-language-server", args= ["-t", "--lint"] } julia = { command = "julia", timeout = 60, args = [ "--startup-file=no", "--history-file=no", "--quiet", "-e", "using LanguageServer; runserver()", ] } +just-lsp = { command = "just-lsp" } koka = { command = "koka", args = ["--language-server", "--lsstdio"] } koto-ls = { command = "koto-ls" } kotlin-language-server = { command = "kotlin-language-server" } @@ -3271,6 +3272,7 @@ file-types = ["just", { glob = "justfile" }, { glob = "Justfile" }, { glob = ".j injection-regex = "just" comment-token = "#" indent = { tab-width = 4, unit = " " } +language-servers = ["just-lsp"] # auto-format = true # formatter = { command = "just", args = ["--dump"] } # Please see: https://github.com/helix-editor/helix/issues/9703 From 1fc19c6d8e1d4eeeb6d3afad56e4f92d2c2c3af1 Mon Sep 17 00:00:00 2001 From: Max Date: Sun, 6 Apr 2025 16:43:53 +0000 Subject: [PATCH 19/51] Add Prolog tree-sitter grammar (#11611) --- book/src/generated/lang-support.md | 2 +- languages.toml | 4 +++ runtime/queries/prolog/folds.scm | 6 ++++ runtime/queries/prolog/highlights.scm | 43 +++++++++++++++++++++++++++ runtime/queries/prolog/indents.scm | 12 ++++++++ runtime/queries/prolog/injections.scm | 2 ++ 6 files changed, 68 insertions(+), 1 deletion(-) create mode 100644 runtime/queries/prolog/folds.scm create mode 100644 runtime/queries/prolog/highlights.scm create mode 100644 runtime/queries/prolog/indents.scm create mode 100644 runtime/queries/prolog/injections.scm diff --git a/book/src/generated/lang-support.md b/book/src/generated/lang-support.md index c76c48413..dbd2f1bfd 100644 --- a/book/src/generated/lang-support.md +++ b/book/src/generated/lang-support.md @@ -175,7 +175,7 @@ | ponylang | ✓ | ✓ | ✓ | | | powershell | ✓ | | | | | prisma | ✓ | ✓ | | `prisma-language-server` | -| prolog | | | | `swipl` | +| prolog | ✓ | | ✓ | `swipl` | | protobuf | ✓ | ✓ | ✓ | `buf`, `pb`, `protols` | | prql | ✓ | | | | | purescript | ✓ | ✓ | | `purescript-language-server` | diff --git a/languages.toml b/languages.toml index 045868c50..36ae6f626 100644 --- a/languages.toml +++ b/languages.toml @@ -1501,6 +1501,10 @@ comment-token = "%" block-comment-tokens = { start = "/*", end = "*/" } language-servers = [ "swipl" ] +[[grammar]] +name = "prolog" +source = { git = "https://codeberg.org/foxy/tree-sitter-prolog", subpath = "grammars/prolog", rev = "d8d415f6a1cf80ca138524bcc395810b176d40fa" } + [[language]] name = "tsq" scope = "source.tsq" diff --git a/runtime/queries/prolog/folds.scm b/runtime/queries/prolog/folds.scm new file mode 100644 index 000000000..70a401511 --- /dev/null +++ b/runtime/queries/prolog/folds.scm @@ -0,0 +1,6 @@ +[ + (directive_term) + (clause_term) + (arg_list) + (list_notation) +] @fold diff --git a/runtime/queries/prolog/highlights.scm b/runtime/queries/prolog/highlights.scm new file mode 100644 index 000000000..e496a88a2 --- /dev/null +++ b/runtime/queries/prolog/highlights.scm @@ -0,0 +1,43 @@ +(comment) @comment + +(atom) @constant + +((atom) @constant.builtin.boolean + (#any-of? @constant.builtin.boolean "true" "false")) + +(functional_notation + function: (atom) @function) + +(integer) @constant.numeric.integer + +(float_number) @constant.numeric.float + +(directive_head) @operator + +(operator_notation + operator: _ @operator) + +[ + (open) + (open_ct) + (close) + (open_list) + "|" + (close_list) + (open_curly) + (close_curly) +] @punctuation.bracket + +[ + (arg_list_separator) + (comma) + (end) + (list_notation_separator) +] @punctuation.delimiter + +(operator_notation + operator: (semicolon) @punctuation.delimiter) + +(double_quoted_list_notation) @string + +(variable_term) @variable diff --git a/runtime/queries/prolog/indents.scm b/runtime/queries/prolog/indents.scm new file mode 100644 index 000000000..335d06bbb --- /dev/null +++ b/runtime/queries/prolog/indents.scm @@ -0,0 +1,12 @@ +(functional_notation + (atom) + (open_ct) @indent + (close) @outdent) + +(list_notation + (open_list) @indent + (close_list) @outdent) + +(curly_bracketed_notation + (open_curly) @indent + (close_curly) @outdent) diff --git a/runtime/queries/prolog/injections.scm b/runtime/queries/prolog/injections.scm new file mode 100644 index 000000000..2f0e58eb6 --- /dev/null +++ b/runtime/queries/prolog/injections.scm @@ -0,0 +1,2 @@ +((comment) @injection.content + (#set! injection.language "comment")) From 994b750dd47d3bf04944db39f1e2b6c56b259600 Mon Sep 17 00:00:00 2001 From: Mykyta <114003900+Nikita0x@users.noreply.github.com> Date: Sun, 6 Apr 2025 19:49:21 +0300 Subject: [PATCH 20/51] fixed: typo in capture group, removed duplicate query (#13251) --- runtime/queries/ada/highlights.scm | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/runtime/queries/ada/highlights.scm b/runtime/queries/ada/highlights.scm index 38e67d823..6367305ac 100644 --- a/runtime/queries/ada/highlights.scm +++ b/runtime/queries/ada/highlights.scm @@ -75,7 +75,7 @@ "parallel" "reverse" "some" -] @kewyord.control.repeat +] @keyword.control.repeat [ "return" ] @keyword.control.return @@ -114,7 +114,6 @@ (loop_statement "end" @keyword.control.repeat) (if_statement "end" @keyword.control.conditional) (loop_parameter_specification "in" @keyword.control.repeat) -(loop_parameter_specification "in" @keyword.control.repeat) (iterator_specification ["in" "of"] @keyword.control.repeat) (range_attribute_designator "range" @keyword.control.repeat) From 5a671e65fd6e64d23d27163a537a7e2e273b45e2 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sun, 6 Apr 2025 12:02:20 -0500 Subject: [PATCH 21/51] build(deps): bump gix from 0.70.0 to 0.71.0 (#13269) * build(deps): bump gix from 0.70.0 to 0.71.0 Bumps [gix](https://github.com/GitoxideLabs/gitoxide) from 0.70.0 to 0.71.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.70.0...gix-v0.71.0) --- updated-dependencies: - dependency-name: gix dependency-version: 0.71.0 dependency-type: direct:production ... Signed-off-by: dependabot[bot] * minor: Migrate from Repository::work_dir to Repository::workdir The former was deprecated in favor of the latter --------- Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Michael Davis --- Cargo.lock | 324 ++++++++++++++++++++++++++----------------- helix-vcs/Cargo.toml | 2 +- helix-vcs/src/git.rs | 6 +- 3 files changed, 204 insertions(+), 128 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 3fbb80c90..03c43148e 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -105,6 +105,15 @@ version = "2.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5c8214115b7bf84099f1309324e63141d4c5d7cc26862f97a0a857dbefe165bd" +[[package]] +name = "block-buffer" +version = "0.10.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71" +dependencies = [ + "generic-array", +] + [[package]] name = "bstr" version = "1.10.0" @@ -202,6 +211,15 @@ version = "0.8.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "773648b94d0e5d620f64f280777445740e61fe701025087ec8b57f45c791888b" +[[package]] +name = "cpufeatures" +version = "0.2.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "59ed5838eebb26a2bb2e58f6d5b5316989ae9d08bab10e0e6d103e656d1b0280" +dependencies = [ + "libc", +] + [[package]] name = "crc32fast" version = "1.4.2" @@ -264,6 +282,16 @@ dependencies = [ "winapi", ] +[[package]] +name = "crypto-common" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3" +dependencies = [ + "generic-array", + "typenum", +] + [[package]] name = "dashmap" version = "6.1.0" @@ -278,6 +306,16 @@ dependencies = [ "parking_lot_core", ] +[[package]] +name = "digest" +version = "0.10.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292" +dependencies = [ + "block-buffer", + "crypto-common", +] + [[package]] name = "displaydoc" version = "0.2.5" @@ -407,12 +445,12 @@ dependencies = [ [[package]] name = "flate2" -version = "1.0.33" +version = "1.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "324a1be68054ef05ad64b861cc9eaf1d623d2d8cb25b4bf2cb9cdd902b4bf253" +checksum = "7ced92e76e966ca2fd84c8f7aa01a4aea65b0eb6648d72f7c8f3e2764a67fece" dependencies = [ "crc32fast", - "miniz_oxide 0.8.0", + "miniz_oxide 0.8.7", ] [[package]] @@ -472,6 +510,16 @@ dependencies = [ "slab", ] +[[package]] +name = "generic-array" +version = "0.14.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a" +dependencies = [ + "typenum", + "version_check", +] + [[package]] name = "getrandom" version = "0.2.15" @@ -503,9 +551,9 @@ checksum = "40ecd4077b5ae9fd2e9e169b102c6c330d0605168eb0e8bf79952b256dbefffd" [[package]] name = "gix" -version = "0.70.0" +version = "0.71.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "736f14636705f3a56ea52b553e67282519418d9a35bb1e90b3a9637a00296b68" +checksum = "a61e71ec6817fc3c9f12f812682cfe51ee6ea0d2e27e02fc3849c35524617435" dependencies = [ "gix-actor", "gix-attributes", @@ -553,23 +601,23 @@ dependencies = [ [[package]] name = "gix-actor" -version = "0.33.2" +version = "0.34.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "20018a1a6332e065f1fcc8305c1c932c6b8c9985edea2284b3c79dc6fa3ee4b2" +checksum = "f438c87d4028aca4b82f82ba8d8ab1569823cfb3e5bc5fa8456a71678b2a20e7" dependencies = [ "bstr", "gix-date", "gix-utils", "itoa", "thiserror 2.0.12", - "winnow 0.6.18", + "winnow", ] [[package]] name = "gix-attributes" -version = "0.24.0" +version = "0.25.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f151000bf662ef5f641eca6102d942ee31ace80f271a3ef642e99776ce6ddb38" +checksum = "e4e25825e0430aa11096f8b65ced6780d4a96a133f81904edceebb5344c8dd7f" dependencies = [ "bstr", "gix-glob", @@ -602,25 +650,25 @@ dependencies = [ [[package]] name = "gix-command" -version = "0.4.1" +version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cb410b84d6575db45e62025a9118bdbf4d4b099ce7575a76161e898d9ca98df1" +checksum = "c0378995847773a697f8e157fe2963ecf3462fe64be05b7b3da000b3b472def8" dependencies = [ "bstr", "gix-path", + "gix-quote", "gix-trace", "shell-words", ] [[package]] name = "gix-commitgraph" -version = "0.26.0" +version = "0.27.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e23a8ec2d8a16026a10dafdb6ed51bcfd08f5d97f20fa52e200bc50cb72e4877" +checksum = "043cbe49b7a7505150db975f3cb7c15833335ac1e26781f615454d9d640a28fe" dependencies = [ "bstr", "gix-chunk", - "gix-features", "gix-hash", "memmap2", "thiserror 2.0.12", @@ -628,9 +676,9 @@ dependencies = [ [[package]] name = "gix-config" -version = "0.43.0" +version = "0.44.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "377c1efd2014d5d469e0b3cd2952c8097bce9828f634e04d5665383249f1d9e9" +checksum = "9c6f830bf746604940261b49abf7f655d2c19cadc9f4142ae9379e3a316e8cfa" dependencies = [ "bstr", "gix-config-value", @@ -644,14 +692,14 @@ dependencies = [ "smallvec", "thiserror 2.0.12", "unicode-bom", - "winnow 0.6.18", + "winnow", ] [[package]] name = "gix-config-value" -version = "0.14.11" +version = "0.14.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "11365144ef93082f3403471dbaa94cfe4b5e72743bdb9560719a251d439f4cee" +checksum = "8dc2c844c4cf141884678cabef736fd91dd73068b9146e6f004ba1a0457944b6" dependencies = [ "bitflags", "bstr", @@ -662,9 +710,9 @@ dependencies = [ [[package]] name = "gix-date" -version = "0.9.3" +version = "0.9.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c57c477b645ee248b173bb1176b52dd528872f12c50375801a58aaf5ae91113f" +checksum = "daa30058ec7d3511fbc229e4f9e696a35abd07ec5b82e635eff864a2726217e4" dependencies = [ "bstr", "itoa", @@ -674,9 +722,9 @@ dependencies = [ [[package]] name = "gix-diff" -version = "0.50.0" +version = "0.51.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "62afb7f4ca0acdf4e9dad92065b2eb1bf2993bcc5014b57bc796e3a365b17c4d" +checksum = "a2c975dad2afc85e4e233f444d1efbe436c3cdcf3a07173984509c436d00a3f8" dependencies = [ "bstr", "gix-attributes", @@ -698,9 +746,9 @@ dependencies = [ [[package]] name = "gix-dir" -version = "0.12.0" +version = "0.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c1d78db3927a12f7d1b788047b84efacaab03ef25738bd1c77856ad8966bd57b" +checksum = "5879497bd3815d8277ed864ec8975290a70de5b62bb92d2d666a4cefc5d4793b" dependencies = [ "bstr", "gix-discover", @@ -718,9 +766,9 @@ dependencies = [ [[package]] name = "gix-discover" -version = "0.38.0" +version = "0.39.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d0c2414bdf04064e0f5a5aa029dfda1e663cf9a6c4bfc8759f2d369299bb65d8" +checksum = "f7fb8a4349b854506a3915de18d3341e5f1daa6b489c8affc9ca0d69efe86781" dependencies = [ "bstr", "dunce", @@ -734,28 +782,26 @@ dependencies = [ [[package]] name = "gix-features" -version = "0.40.0" +version = "0.41.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8bfdd4838a8d42bd482c9f0cb526411d003ee94cc7c7b08afe5007329c71d554" +checksum = "729b7e708352a35b2b37ab39cbc7a2b9d22f8386808a10b6ea7dd4cd1cf817cd" dependencies = [ "crc32fast", "flate2", - "gix-hash", "gix-trace", "gix-utils", "libc", "once_cell", "prodash", - "sha1_smol", "thiserror 2.0.12", "walkdir", ] [[package]] name = "gix-filter" -version = "0.17.0" +version = "0.18.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bdcc36cd7dbc63ed0ec3558645886553d1afd3cd09daa5efb9cba9cceb942bbb" +checksum = "cb2b2bbffdc5cc9b2b82fc82da1b98163c9b423ac2b45348baa83a947ac9ab89" dependencies = [ "bstr", "encoding_rs", @@ -774,20 +820,23 @@ dependencies = [ [[package]] name = "gix-fs" -version = "0.13.0" +version = "0.14.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "182e7fa7bfdf44ffb7cfe7451b373cdf1e00870ac9a488a49587a110c562063d" +checksum = "951e886120dc5fa8cac053e5e5c89443f12368ca36811b2e43d1539081f9c111" dependencies = [ + "bstr", "fastrand", "gix-features", + "gix-path", "gix-utils", + "thiserror 2.0.12", ] [[package]] name = "gix-glob" -version = "0.18.0" +version = "0.19.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4e9c7249fa0a78f9b363aa58323db71e0a6161fd69860ed6f48dedf0ef3a314e" +checksum = "20972499c03473e773a2099e5fd0c695b9b72465837797a51a43391a1635a030" dependencies = [ "bitflags", "bstr", @@ -797,19 +846,21 @@ dependencies = [ [[package]] name = "gix-hash" -version = "0.16.0" +version = "0.17.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e81c5ec48649b1821b3ed066a44efb95f1a268b35c1d91295e61252539fbe9f8" +checksum = "834e79722063958b03342edaa1e17595cd2939bb2b3306b3225d0815566dcb49" dependencies = [ "faster-hex", + "gix-features", + "sha1-checked", "thiserror 2.0.12", ] [[package]] name = "gix-hashtable" -version = "0.7.0" +version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "189130bc372accd02e0520dc5ab1cef318dcc2bc829b76ab8d84bbe90ac212d1" +checksum = "f06066d8702a9186dc1fdc1ed751ff2d7e924ceca21cb5d51b8f990c9c2e014a" dependencies = [ "gix-hash", "hashbrown 0.14.5", @@ -818,9 +869,9 @@ dependencies = [ [[package]] name = "gix-ignore" -version = "0.13.0" +version = "0.14.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4f529dcb80bf9855c0a7c49f0ac588df6d6952d63a63fefc254b9c869d2cdf6f" +checksum = "9a27c8380f493a10d1457f756a3f81924d578fc08d6535e304dfcafbf0261d18" dependencies = [ "bstr", "gix-glob", @@ -831,9 +882,9 @@ dependencies = [ [[package]] name = "gix-index" -version = "0.38.0" +version = "0.39.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "acd12e3626879369310fffe2ac61acc828613ef656b50c4ea984dd59d7dc85d8" +checksum = "855bece2d4153453aa5d0a80d51deea1ce8cd6a3b4cf213da85ac344ccb908a7" dependencies = [ "bitflags", "bstr", @@ -859,9 +910,9 @@ dependencies = [ [[package]] name = "gix-lock" -version = "16.0.0" +version = "17.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9739815270ff6940968441824d162df9433db19211ca9ba8c3fc1b50b849c642" +checksum = "df47b8f11c34520db5541bc5fc9fbc8e4b0bdfcec3736af89ccb1a5728a0126f" dependencies = [ "gix-tempfile", "gix-utils", @@ -870,9 +921,9 @@ dependencies = [ [[package]] name = "gix-object" -version = "0.47.0" +version = "0.48.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ddc4b3a0044244f0fe22347fb7a79cca165e37829d668b41b85ff46a43e5fd68" +checksum = "4943fcdae6ffc135920c9ea71e0362ed539182924ab7a85dd9dac8d89b0dd69a" dependencies = [ "bstr", "gix-actor", @@ -886,14 +937,14 @@ dependencies = [ "itoa", "smallvec", "thiserror 2.0.12", - "winnow 0.6.18", + "winnow", ] [[package]] name = "gix-odb" -version = "0.67.0" +version = "0.68.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3e93457df69cd09573608ce9fa4f443fbd84bc8d15d8d83adecd471058459c1b" +checksum = "50306d40dcc982eb6b7593103f066ea6289c7b094cb9db14f3cd2be0b9f5e610" dependencies = [ "arc-swap", "gix-date", @@ -912,9 +963,9 @@ dependencies = [ [[package]] name = "gix-pack" -version = "0.57.0" +version = "0.58.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fc13a475b3db735617017fb35f816079bf503765312d4b1913b18cf96f3fa515" +checksum = "9b65fffb09393c26624ca408d32cfe8776fb94cd0a5cdf984905e1d2f39779cb" dependencies = [ "clru", "gix-chunk", @@ -930,9 +981,9 @@ dependencies = [ [[package]] name = "gix-packetline" -version = "0.18.3" +version = "0.18.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c7e5ae6bc3ac160a6bf44a55f5537813ca3ddb08549c0fd3e7ef699c73c439cd" +checksum = "123844a70cf4d5352441dc06bab0da8aef61be94ec239cb631e0ba01dc6d3a04" dependencies = [ "bstr", "faster-hex", @@ -942,9 +993,9 @@ dependencies = [ [[package]] name = "gix-packetline-blocking" -version = "0.18.2" +version = "0.18.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c1cbf8767c6abd5a6779f586702b5bcd8702380f4208219449cf1c9d0cd1e17c" +checksum = "1ecf3ea2e105c7e45587bac04099824301262a6c43357fad5205da36dbb233b3" dependencies = [ "bstr", "faster-hex", @@ -954,9 +1005,9 @@ dependencies = [ [[package]] name = "gix-path" -version = "0.10.14" +version = "0.10.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c40f12bb65a8299be0cfb90fe718e3be236b7a94b434877012980863a883a99f" +checksum = "f910668e2f6b2a55ff35a1f04df88a1a049f7b868507f4cbeeaa220eaba7be87" dependencies = [ "bstr", "gix-trace", @@ -967,9 +1018,9 @@ dependencies = [ [[package]] name = "gix-pathspec" -version = "0.9.0" +version = "0.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6430d3a686c08e9d59019806faa78c17315fe22ae73151a452195857ca02f86c" +checksum = "fef8422c3c9066d649074b24025125963f85232bfad32d6d16aea9453b82ec14" dependencies = [ "bitflags", "bstr", @@ -982,9 +1033,9 @@ dependencies = [ [[package]] name = "gix-protocol" -version = "0.48.0" +version = "0.49.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6c61bd61afc6b67d213241e2100394c164be421e3f7228d3521b04f48ca5ba90" +checksum = "5678ddae1d62880bc30e2200be1b9387af3372e0e88e21f81b4e7f8367355b5a" dependencies = [ "bstr", "gix-date", @@ -996,14 +1047,14 @@ dependencies = [ "gix-utils", "maybe-async", "thiserror 2.0.12", - "winnow 0.6.18", + "winnow", ] [[package]] name = "gix-quote" -version = "0.4.15" +version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e49357fccdb0c85c0d3a3292a9f6db32d9b3535959b5471bb9624908f4a066c6" +checksum = "1b005c550bf84de3b24aa5e540a23e6146a1c01c7d30470e35d75a12f827f969" dependencies = [ "bstr", "gix-utils", @@ -1012,9 +1063,9 @@ dependencies = [ [[package]] name = "gix-ref" -version = "0.50.0" +version = "0.51.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "47adf4c5f933429f8554e95d0d92eee583cfe4b95d2bf665cd6fd4a1531ee20c" +checksum = "b2e1f7eb6b7ce82d2d19961f74bd637bab3ea79b1bc7bfb23dbefc67b0415d8b" dependencies = [ "gix-actor", "gix-features", @@ -1028,14 +1079,14 @@ dependencies = [ "gix-validate", "memmap2", "thiserror 2.0.12", - "winnow 0.6.18", + "winnow", ] [[package]] name = "gix-refspec" -version = "0.28.0" +version = "0.29.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "59650228d8f612f68e7f7a25f517fcf386c5d0d39826085492e94766858b0a90" +checksum = "1d8587b21e2264a6e8938d940c5c99662779c13a10741a5737b15fc85c252ffc" dependencies = [ "bstr", "gix-hash", @@ -1047,9 +1098,9 @@ dependencies = [ [[package]] name = "gix-revision" -version = "0.32.0" +version = "0.33.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3fe28bbccca55da6d66e6c6efc6bb4003c29d407afd8178380293729733e6b53" +checksum = "342caa4e158df3020cadf62f656307c3948fe4eacfdf67171d7212811860c3e9" dependencies = [ "bstr", "gix-commitgraph", @@ -1062,9 +1113,9 @@ dependencies = [ [[package]] name = "gix-revwalk" -version = "0.18.0" +version = "0.19.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d4ecb80c235b1e9ef2b99b23a81ea50dd569a88a9eb767179793269e0e616247" +checksum = "2dc7c3d7e5cdc1ab8d35130106e4af0a4f9f9eca0c81f4312b690780e92bde0d" dependencies = [ "gix-commitgraph", "gix-date", @@ -1077,9 +1128,9 @@ dependencies = [ [[package]] name = "gix-sec" -version = "0.10.11" +version = "0.10.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d84dae13271f4313f8d60a166bf27e54c968c7c33e2ffd31c48cafe5da649875" +checksum = "47aeb0f13de9ef2f3033f5ff218de30f44db827ac9f1286f9ef050aacddd5888" dependencies = [ "bitflags", "gix-path", @@ -1089,9 +1140,9 @@ dependencies = [ [[package]] name = "gix-shallow" -version = "0.2.0" +version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ab72543011e303e52733c85bef784603ef39632ddf47f69723def52825e35066" +checksum = "cc0598aacfe1d52575a21c9492fee086edbb21e228ec36c819c42ab923f434c3" dependencies = [ "bstr", "gix-hash", @@ -1101,9 +1152,9 @@ dependencies = [ [[package]] name = "gix-status" -version = "0.17.0" +version = "0.18.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "414cc1d85079d7ca32c3ab4a6479bf7e174cd251c74a82339c6cc393da3f4883" +checksum = "605a6d0eb5891680c46e24b2ee7a63ef7bd39cb136dc7c7e55172960cf68b2f5" dependencies = [ "bstr", "filetime", @@ -1124,9 +1175,9 @@ dependencies = [ [[package]] name = "gix-submodule" -version = "0.17.0" +version = "0.18.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "74972fe8d46ac8a09490ae1e843b4caf221c5b157c5ac17057e8e1c38417a3ac" +checksum = "78c7390c2059505c365e9548016d4edc9f35749c6a9112b7b1214400bbc68da2" dependencies = [ "bstr", "gix-config", @@ -1139,9 +1190,9 @@ dependencies = [ [[package]] name = "gix-tempfile" -version = "16.0.0" +version = "17.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2558f423945ef24a8328c55d1fd6db06b8376b0e7013b1bb476cc4ffdf678501" +checksum = "3d6de439bbb9a5d3550c9c7fab0e16d2d637d120fcbe0dfbc538772a187f099b" dependencies = [ "dashmap", "gix-fs", @@ -1159,9 +1210,9 @@ checksum = "7c396a2036920c69695f760a65e7f2677267ccf483f25046977d87e4cb2665f7" [[package]] name = "gix-transport" -version = "0.45.0" +version = "0.46.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "11187418489477b1b5b862ae1aedbbac77e582f2c4b0ef54280f20cfe5b964d9" +checksum = "b3f68c2870bfca8278389d2484a7f2215b67d0b0cc5277d3c72ad72acf41787e" dependencies = [ "bstr", "gix-command", @@ -1175,9 +1226,9 @@ dependencies = [ [[package]] name = "gix-traverse" -version = "0.44.0" +version = "0.45.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2bec70e53896586ef32a3efa7e4427b67308531ed186bb6120fb3eca0f0d61b4" +checksum = "36c0b049f8bdb61b20016694102f7b507f2e1727e83e9c5e6dad4f7d84ff7384" dependencies = [ "bitflags", "gix-commitgraph", @@ -1192,9 +1243,9 @@ dependencies = [ [[package]] name = "gix-url" -version = "0.29.0" +version = "0.30.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "29218c768b53dd8f116045d87fec05b294c731a4b2bdd257eeca2084cc150b13" +checksum = "48dfe23f93f1ddb84977d80bb0dd7aa09d1bf5d5afc0c9b6820cccacc25ae860" dependencies = [ "bstr", "gix-features", @@ -1206,9 +1257,9 @@ dependencies = [ [[package]] name = "gix-utils" -version = "0.1.14" +version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ff08f24e03ac8916c478c8419d7d3c33393da9bb41fa4c24455d5406aeefd35f" +checksum = "189f8724cf903e7fd57cfe0b7bc209db255cacdcb22c781a022f52c3a774f8d0" dependencies = [ "bstr", "fastrand", @@ -1217,9 +1268,9 @@ dependencies = [ [[package]] name = "gix-validate" -version = "0.9.3" +version = "0.9.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9eaa01c3337d885617c0a42e92823922a2aea71f4caeace6fe87002bdcadbd90" +checksum = "34b5f1253109da6c79ed7cf6e1e38437080bb6d704c76af14c93e2f255234084" dependencies = [ "bstr", "thiserror 2.0.12", @@ -1227,9 +1278,9 @@ dependencies = [ [[package]] name = "gix-worktree" -version = "0.39.0" +version = "0.40.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6673512f7eaa57a6876adceca6978a501d6c6569a4f177767dc405f8b9778958" +checksum = "f7760dbc4b79aa274fed30adc0d41dca6b917641f26e7867c4071b1fb4dc727b" dependencies = [ "bstr", "gix-attributes", @@ -1813,25 +1864,29 @@ checksum = "49f1f14873335454500d59611f1cf4a4b0f786f9ac11f4312a78e4cf2566695b" [[package]] name = "jiff" -version = "0.1.13" +version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8a45489186a6123c128fdf6016183fcfab7113e1820eb813127e036e287233fb" +checksum = "3590fea8e9e22d449600c9bbd481a8163bef223e4ff938e5f55899f8cf1adb93" dependencies = [ "jiff-tzdb-platform", + "log", + "portable-atomic", + "portable-atomic-util", + "serde", "windows-sys 0.59.0", ] [[package]] name = "jiff-tzdb" -version = "0.1.1" +version = "0.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "91335e575850c5c4c673b9bd467b0e025f164ca59d0564f69d0c2ee0ffad4653" +checksum = "c1283705eb0a21404d2bfd6eef2a7593d240bc42a0bdb39db0ad6fa2ec026524" [[package]] name = "jiff-tzdb-platform" -version = "0.1.1" +version = "0.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9835f0060a626fe59f160437bc725491a6af23133ea906500027d1bd2f8f4329" +checksum = "875a5a69ac2bab1a891711cf5eccbec1ce0341ea805560dcd90b7a2e925132e8" dependencies = [ "jiff-tzdb", ] @@ -1952,9 +2007,9 @@ dependencies = [ [[package]] name = "miniz_oxide" -version = "0.8.0" +version = "0.8.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e2d80299ef12ff69b16a84bb182e3b9df68b5a91574d3d4fa6e41b65deec4df1" +checksum = "ff70ce3e48ae43fa075863cef62e8b43b71a4f2382229920e0df362592919430" dependencies = [ "adler2", ] @@ -2087,9 +2142,18 @@ checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" [[package]] name = "portable-atomic" -version = "1.7.0" +version = "1.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "da544ee218f0d287a911e9c99a39a8c9bc8fcad3cb8db5959940044ecfc67265" +checksum = "350e9b48cbc6b0e028b0473b114454c6316e57336ee184ceab6e53f72c178b3e" + +[[package]] +name = "portable-atomic-util" +version = "0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d8a2f0d8d040d7848a709caf78912debcc3f33ee4b3cac47d73d1e1069e83507" +dependencies = [ + "portable-atomic", +] [[package]] name = "proc-macro2" @@ -2102,9 +2166,9 @@ dependencies = [ [[package]] name = "prodash" -version = "29.0.0" +version = "29.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a266d8d6020c61a437be704c5e618037588e1985c7dbb7bf8d265db84cffe325" +checksum = "9ee7ce24c980b976607e2d6ae4aae92827994d23fed71659c3ede3f92528b58b" dependencies = [ "log", "parking_lot", @@ -2333,10 +2397,25 @@ dependencies = [ ] [[package]] -name = "sha1_smol" -version = "1.0.1" +name = "sha1" +version = "0.10.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bbfa15b3dddfee50a0fff136974b3e1bde555604ba463834a7eb7deb6417705d" +checksum = "e3bf829a2d51ab4a5ddf1352d8470c140cadc8301b2ae1789db023f01cedd6ba" +dependencies = [ + "cfg-if", + "cpufeatures", + "digest", +] + +[[package]] +name = "sha1-checked" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "89f599ac0c323ebb1c6082821a54962b839832b03984598375bff3975b804423" +dependencies = [ + "digest", + "sha1", +] [[package]] name = "shell-words" @@ -2661,7 +2740,7 @@ dependencies = [ "serde", "serde_spanned", "toml_datetime", - "winnow 0.7.2", + "winnow", ] [[package]] @@ -2674,6 +2753,12 @@ dependencies = [ "regex", ] +[[package]] +name = "typenum" +version = "1.18.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1dccffe3ce07af9386bfd29e80c0ab1a8205a2fc34e4bcd40364df902cfa8f3f" + [[package]] name = "unicase" version = "2.7.0" @@ -2984,15 +3069,6 @@ version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec" -[[package]] -name = "winnow" -version = "0.6.18" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "68a9bda4691f099d435ad181000724da8e5899daa10713c2d432552b9ccd3a6f" -dependencies = [ - "memchr", -] - [[package]] name = "winnow" version = "0.7.2" diff --git a/helix-vcs/Cargo.toml b/helix-vcs/Cargo.toml index c08122421..aaac83517 100644 --- a/helix-vcs/Cargo.toml +++ b/helix-vcs/Cargo.toml @@ -19,7 +19,7 @@ tokio = { version = "1", features = ["rt", "rt-multi-thread", "time", "sync", "p parking_lot.workspace = true arc-swap = { version = "1.7.1" } -gix = { version = "0.70.0", features = ["attributes", "status"], default-features = false, optional = true } +gix = { version = "0.71.0", features = ["attributes", "status"], default-features = false, optional = true } imara-diff = "0.1.8" anyhow = "1" diff --git a/helix-vcs/src/git.rs b/helix-vcs/src/git.rs index b8ddd79fa..1be71afac 100644 --- a/helix-vcs/src/git.rs +++ b/helix-vcs/src/git.rs @@ -45,7 +45,7 @@ pub fn get_diff_base(file: &Path) -> Result> { let data = file_object.detach().data; // Get the actual data that git would make out of the git object. // This will apply the user's git config or attributes like crlf conversions. - if let Some(work_dir) = repo.work_dir() { + if let Some(work_dir) = repo.workdir() { let rela_path = file.strip_prefix(work_dir)?; let rela_path = gix::path::try_into_bstr(rela_path)?; let (mut pipeline, _) = repo.filter_pipeline(None)?; @@ -128,7 +128,7 @@ fn open_repo(path: &Path) -> Result { /// Emulates the result of running `git status` from the command line. fn status(repo: &Repository, f: impl Fn(Result) -> bool) -> Result<()> { let work_dir = repo - .work_dir() + .workdir() .ok_or_else(|| anyhow::anyhow!("working tree not found"))? .to_path_buf(); @@ -195,7 +195,7 @@ fn status(repo: &Repository, f: impl Fn(Result) -> bool) -> Result<( /// Finds the object that contains the contents of a file at a specific commit. fn find_file_in_commit(repo: &Repository, commit: &Commit, file: &Path) -> Result { - let repo_dir = repo.work_dir().context("repo has no worktree")?; + let repo_dir = repo.workdir().context("repo has no worktree")?; let rel_path = file.strip_prefix(repo_dir)?; let tree = commit.tree()?; let tree_entry = tree From f857a98671d38f79268a017d1bc68475549ad435 Mon Sep 17 00:00:00 2001 From: Rolo Date: Thu, 3 Apr 2025 14:35:35 -0700 Subject: [PATCH 22/51] refactor: uneeded string conversion for Display type --- helix-view/src/document.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/helix-view/src/document.rs b/helix-view/src/document.rs index 41c9ee1ef..92c1e3ca0 100644 --- a/helix-view/src/document.rs +++ b/helix-view/src/document.rs @@ -854,7 +854,7 @@ impl Document { } else if !output.stderr.is_empty() { log::debug!( "Formatter printed to stderr: {}", - String::from_utf8_lossy(&output.stderr).to_string() + String::from_utf8_lossy(&output.stderr) ); } From 1bc45c8b3a6d61a8857e3bacbe2341192bb44dd2 Mon Sep 17 00:00:00 2001 From: Rolo Date: Thu, 3 Apr 2025 14:36:17 -0700 Subject: [PATCH 23/51] refactor: change empty check to `is_empty` instead of `len > 0` --- helix-term/src/ui/prompt.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/helix-term/src/ui/prompt.rs b/helix-term/src/ui/prompt.rs index 03adeb05b..3c97a93cd 100644 --- a/helix-term/src/ui/prompt.rs +++ b/helix-term/src/ui/prompt.rs @@ -732,7 +732,7 @@ impl Component for Prompt { fn cursor(&self, area: Rect, editor: &Editor) -> (Option, CursorKind) { let area = area .clip_left(self.prompt.len() as u16) - .clip_right(if self.prompt.len() > 0 { 0 } else { 2 }); + .clip_right(if self.prompt.is_empty() { 2 } else { 0 }); let anchor = self.anchor.min(self.line.len().saturating_sub(1)); let mut col = area.left() as usize From 5b72b59448768b7a26cb49e1095acd9089f95e3c Mon Sep 17 00:00:00 2001 From: Rolo Date: Thu, 3 Apr 2025 14:37:20 -0700 Subject: [PATCH 24/51] perf: use `next_back` on `DoubleEndedIterator` --- helix-core/src/test.rs | 2 +- helix-lsp/src/client.rs | 2 +- helix-view/src/register.rs | 3 ++- 3 files changed, 4 insertions(+), 3 deletions(-) diff --git a/helix-core/src/test.rs b/helix-core/src/test.rs index 7183302c6..71c71cce2 100644 --- a/helix-core/src/test.rs +++ b/helix-core/src/test.rs @@ -65,7 +65,7 @@ pub fn print(s: &str) -> (String, Selection) { let head_at_beg = iter.next_if_eq(&"|").is_some(); let last_grapheme = |s: &str| { UnicodeSegmentation::graphemes(s, true) - .last() + .next_back() .map(String::from) }; diff --git a/helix-lsp/src/client.rs b/helix-lsp/src/client.rs index f2b78a118..f82751051 100644 --- a/helix-lsp/src/client.rs +++ b/helix-lsp/src/client.rs @@ -39,7 +39,7 @@ fn workspace_for_uri(uri: lsp::Url) -> WorkspaceFolder { lsp::WorkspaceFolder { name: uri .path_segments() - .and_then(|segments| segments.last()) + .and_then(|mut segments| segments.next_back()) .map(|basename| basename.to_string()) .unwrap_or_default(), uri, diff --git a/helix-view/src/register.rs b/helix-view/src/register.rs index d286a85cc..b2bb53ac2 100644 --- a/helix-view/src/register.rs +++ b/helix-view/src/register.rs @@ -145,7 +145,8 @@ impl Registers { } pub fn last<'a>(&'a self, name: char, editor: &'a Editor) -> Option> { - self.read(name, editor).and_then(|values| values.last()) + self.read(name, editor) + .and_then(|mut values| values.next_back()) } pub fn iter_preview(&self) -> impl Iterator { From 6c42ed1bd5a50ab6016271081dacbf5c3d5fe766 Mon Sep 17 00:00:00 2001 From: Wesley Hershberger Date: Sun, 6 Apr 2025 12:05:43 -0500 Subject: [PATCH 25/51] Debian control file syntax highlighting (#13245) File format described at https://www.debian.org/doc/debian-policy/ch-controlfields.html Co-authored-by: Wesley Hershberger --- book/src/generated/lang-support.md | 1 + languages.toml | 15 +++++++++++++++ runtime/queries/debian/highlights.scm | 2 ++ 3 files changed, 18 insertions(+) create mode 100644 runtime/queries/debian/highlights.scm diff --git a/book/src/generated/lang-support.md b/book/src/generated/lang-support.md index dbd2f1bfd..de2995442 100644 --- a/book/src/generated/lang-support.md +++ b/book/src/generated/lang-support.md @@ -36,6 +36,7 @@ | d | ✓ | ✓ | ✓ | `serve-d` | | dart | ✓ | ✓ | ✓ | `dart` | | dbml | ✓ | | | | +| debian | ✓ | | | | | devicetree | ✓ | | | | | dhall | ✓ | ✓ | | `dhall-lsp-server` | | diff | ✓ | | | | diff --git a/languages.toml b/languages.toml index 36ae6f626..5298c29a4 100644 --- a/languages.toml +++ b/languages.toml @@ -4261,3 +4261,18 @@ indent = { tab-width = 2, unit = " " } [[grammar]] name = "werk" source = { git = "https://github.com/little-bonsai/tree-sitter-werk", rev = "92b0f7fe98465c4c435794a58e961306193d1c1e" } + +[[language]] +name = "debian" +scope = "text.debian" +file-types = [ + "dsc", + "changes", + { glob = "debian/**/control" }, + { glob = "etc/apt/sources.list.d/*.sources"} +] +comment-tokens = "#" + +[[grammar]] +name = "debian" +source = { git = "https://gitlab.com/MggMuggins/tree-sitter-debian", rev = "9b3f4b78c45aab8a2f25a5f9e7bbc00995bc3dde" } diff --git a/runtime/queries/debian/highlights.scm b/runtime/queries/debian/highlights.scm new file mode 100644 index 000000000..d62f0278c --- /dev/null +++ b/runtime/queries/debian/highlights.scm @@ -0,0 +1,2 @@ +(comment) @comment +(field_name) @tag From 42de785779ca9f2911860b797a55d34eeb73f5f0 Mon Sep 17 00:00:00 2001 From: Nik Revenco <154856872+nik-rev@users.noreply.github.com> Date: Sun, 6 Apr 2025 18:06:21 +0100 Subject: [PATCH 26/51] feat: sync catppuccin theme changes (#13262) Co-authored-by: Nik Revenco <154856872+NikitaRevenco@users.noreply.github.com> --- runtime/themes/catppuccin_mocha.toml | 42 +++++++++++++++------------- 1 file changed, 22 insertions(+), 20 deletions(-) diff --git a/runtime/themes/catppuccin_mocha.toml b/runtime/themes/catppuccin_mocha.toml index 8cb17f64d..5e542dc8f 100644 --- a/runtime/themes/catppuccin_mocha.toml +++ b/runtime/themes/catppuccin_mocha.toml @@ -43,21 +43,22 @@ "special" = "blue" # fuzzy highlight -"markup.heading.marker" = { fg = "peach", modifiers = ["bold"] } -"markup.heading.1" = "lavender" -"markup.heading.2" = "mauve" -"markup.heading.3" = "green" -"markup.heading.4" = "yellow" -"markup.heading.5" = "pink" -"markup.heading.6" = "teal" -"markup.list" = "mauve" +"markup.heading.1" = "red" +"markup.heading.2" = "peach" +"markup.heading.3" = "yellow" +"markup.heading.4" = "green" +"markup.heading.5" = "sapphire" +"markup.heading.6" = "lavender" +"markup.list" = "teal" "markup.list.unchecked" = "overlay2" "markup.list.checked" = "green" -"markup.bold" = { modifiers = ["bold"] } -"markup.italic" = { modifiers = ["italic"] } +"markup.bold" = { fg = "red", modifiers = ["bold"] } +"markup.italic" = { fg = "red", modifiers = ["italic"] } "markup.link.url" = { fg = "blue", modifiers = ["italic", "underlined"] } -"markup.link.text" = "blue" -"markup.raw" = "flamingo" +"markup.link.text" = "lavender" +"markup.link.label" = "sapphire" +"markup.raw" = "green" +"markup.quote" = "pink" "diff.plus" = "green" "diff.minus" = "red" @@ -72,9 +73,9 @@ "ui.statusline" = { fg = "subtext1", bg = "mantle" } "ui.statusline.inactive" = { fg = "surface2", bg = "mantle" } -"ui.statusline.normal" = { fg = "base", bg = "lavender", modifiers = ["bold"] } -"ui.statusline.insert" = { fg = "base", bg = "green", modifiers = ["bold"] } -"ui.statusline.select" = { fg = "base", bg = "flamingo", modifiers = ["bold"] } +"ui.statusline.normal" = { fg = "base", bg = "rosewater", modifiers = ["bold"] } +"ui.statusline.insert" = { fg = "base", bg = "green", modifiers = ["bold"] } +"ui.statusline.select" = { fg = "base", bg = "lavender", modifiers = ["bold"] } "ui.popup" = { fg = "text", bg = "surface0" } "ui.window" = { fg = "crust" } @@ -101,13 +102,13 @@ "ui.cursor.primary" = { fg = "base", bg = "rosewater" } "ui.cursor.match" = { fg = "peach", modifiers = ["bold"] } -"ui.cursor.primary.normal" = { fg = "base", bg = "lavender" } +"ui.cursor.primary.normal" = { fg = "base", bg = "rosewater" } "ui.cursor.primary.insert" = { fg = "base", bg = "green" } -"ui.cursor.primary.select" = { fg = "base", bg = "flamingo" } +"ui.cursor.primary.select" = { fg = "base", bg = "lavender" } "ui.cursor.normal" = { fg = "base", bg = "secondary_cursor_normal" } "ui.cursor.insert" = { fg = "base", bg = "secondary_cursor_insert" } -"ui.cursor.select" = { fg = "base", bg = "secondary_cursor" } +"ui.cursor.select" = { fg = "base", bg = "secondary_cursor_select" } "ui.cursorline.primary" = { bg = "cursorline" } @@ -116,11 +117,11 @@ "ui.menu" = { fg = "overlay2", bg = "surface0" } "ui.menu.selected" = { fg = "text", bg = "surface1", modifiers = ["bold"] } -"diagnostic.unnecessary" = { modifiers = ["dim"] } "diagnostic.error" = { underline = { color = "red", style = "curl" } } "diagnostic.warning" = { underline = { color = "yellow", style = "curl" } } "diagnostic.info" = { underline = { color = "sky", style = "curl" } } "diagnostic.hint" = { underline = { color = "teal", style = "curl" } } +"diagnostic.unnecessary" = { modifiers = ["dim"] } error = "red" warning = "yellow" @@ -157,5 +158,6 @@ crust = "#11111b" cursorline = "#2a2b3c" secondary_cursor = "#b5a6a8" -secondary_cursor_normal = "#878ec0" +secondary_cursor_select = "#878ec0" +secondary_cursor_normal = "#b5a6a8" secondary_cursor_insert = "#7ea87f" From 130f72502607f1a26f57825a0b5a0ffc5ac327d6 Mon Sep 17 00:00:00 2001 From: Jorge Gomez Date: Sun, 6 Apr 2025 12:21:33 -0500 Subject: [PATCH 27/51] Update mint lsp command args (#13248) --- languages.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/languages.toml b/languages.toml index 5298c29a4..0d9cb59a0 100644 --- a/languages.toml +++ b/languages.toml @@ -69,7 +69,7 @@ markdown-oxide = { command = "markdown-oxide" } marksman = { command = "marksman", args = ["server"] } metals = { command = "metals", config = { "isHttpEnabled" = true, metals = { inlayHints = { typeParameters = {enable = true} , hintsInPatternMatch = {enable = true} } } } } mesonlsp = { command = "mesonlsp", args = ["--lsp"] } -mint = { command = "mint", args = ["ls"] } +mint = { command = "mint", args = ["tool", "ls"] } mojo-lsp = { command = "magic", args = ["run", "mojo-lsp-server"] } nil = { command = "nil" } nimlangserver = { command = "nimlangserver" } From effe849cf4f9bdbcf6ddde8b1dfb144d98227397 Mon Sep 17 00:00:00 2001 From: Mykyta <114003900+Nikita0x@users.noreply.github.com> Date: Sun, 6 Apr 2025 20:22:06 +0300 Subject: [PATCH 28/51] Update themes.md (#13247) added small description to `label` and `special` - because for me it was not clear what it was for, maybe I am not the one --- book/src/themes.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/book/src/themes.md b/book/src/themes.md index 412d17efc..dc377db17 100644 --- a/book/src/themes.md +++ b/book/src/themes.md @@ -181,7 +181,7 @@ We use a similar set of scopes as - `member` - Fields of composite data types (e.g. structs, unions) - `private` - Private fields that use a unique syntax (currently just ECMAScript-based languages) -- `label` +- `label` - `.class`, `#id` in CSS, etc. - `punctuation` - `delimiter` - Commas, colons @@ -216,7 +216,7 @@ We use a similar set of scopes as - `namespace` -- `special` +- `special` - `derive` in Rust, etc. - `markup` - `heading` From e9a3dcd858e0889c625c6bce6aede3370116b4c8 Mon Sep 17 00:00:00 2001 From: Weihnachtsbaum <140716472+Weihnachtsbaum@users.noreply.github.com> Date: Sun, 6 Apr 2025 19:23:34 +0200 Subject: [PATCH 29/51] Add WESL language (#13267) Co-authored-by: uncenter --- book/src/generated/lang-support.md | 1 + languages.toml | 12 ++ runtime/queries/wesl/highlights.scm | 176 +++++++++++++++++++++++++++ runtime/queries/wesl/injections.scm | 2 + runtime/queries/wesl/locals.scm | 18 +++ runtime/queries/wesl/textobjects.scm | 23 ++++ 6 files changed, 232 insertions(+) create mode 100644 runtime/queries/wesl/highlights.scm create mode 100644 runtime/queries/wesl/injections.scm create mode 100644 runtime/queries/wesl/locals.scm create mode 100644 runtime/queries/wesl/textobjects.scm diff --git a/book/src/generated/lang-support.md b/book/src/generated/lang-support.md index de2995442..f866c4b4a 100644 --- a/book/src/generated/lang-support.md +++ b/book/src/generated/lang-support.md @@ -249,6 +249,7 @@ | wat | ✓ | | | `wat_server` | | webc | ✓ | | | | | werk | ✓ | | | | +| wesl | ✓ | ✓ | | | | wgsl | ✓ | | | `wgsl-analyzer` | | wit | ✓ | | ✓ | | | wren | ✓ | ✓ | ✓ | | diff --git a/languages.toml b/languages.toml index 0d9cb59a0..400018e6d 100644 --- a/languages.toml +++ b/languages.toml @@ -1625,6 +1625,18 @@ injection-regex = "comment" name = "comment" source = { git = "https://github.com/stsewd/tree-sitter-comment", rev = "aefcc2813392eb6ffe509aa0fc8b4e9b57413ee1" } +[[language]] +name = "wesl" +scope = "source.wesl" +file-types = ["wesl"] +comment-token = "//" +block-comment-tokens = { start = "/*", end = "*/" } +indent = { tab-width = 4, unit = " " } + +[[grammar]] +name = "wesl" +source = { git = "https://github.com/wgsl-tooling-wg/tree-sitter-wesl", rev = "94ee6122680ef8ce2173853ca7c99f7aaeeda8ce" } + [[language]] name = "wgsl" scope = "source.wgsl" diff --git a/runtime/queries/wesl/highlights.scm b/runtime/queries/wesl/highlights.scm new file mode 100644 index 000000000..1bb5fdeed --- /dev/null +++ b/runtime/queries/wesl/highlights.scm @@ -0,0 +1,176 @@ +; reserved: must not be used in source code. https://www.w3.org/TR/WGSL/#reserved-words + +; ((identifier) @special +; (#any-of? @special +; "NULL" "Self" "abstract" "active" "alignas" "alignof" "as" "asm" +; "asm_fragment" "async" "attribute" "auto" "await" "become" "binding_array" +; "cast" "catch" "class" "co_await" "co_return" "co_yield" "coherent" +; "column_major" "common" "compile" "compile_fragment" "concept" "const_cast" +; "consteval" "constexpr" "constinit" "crate" "debugger" "decltype" "delete" +; "demote" "demote_to_helper" "do" "dynamic_cast" "enum" "explicit" "export" +; "extends" "extern" "external" "fallthrough" "filter" "final" "finally" "friend" +; "from" "fxgroup" "get" "goto" "groupshared" "highp" "impl" "implements" "import" +; "inline" "instanceof" "interface" "layout" "lowp" "macro" "macro_rules" "match" +; "mediump" "meta" "mod" "module" "move" "mut" "mutable" "namespace" "new" +; "nil" "noexcept" "noinline" "nointerpolation" "non_coherent" "noncoherent" +; "noperspective" "null" "nullptr" "of" "operator" "package" "packoffset" +; "partition" "pass" "patch" "pixelfragment" "precise" "precision" "premerge" +; "priv" "protected" "pub" "public" "readonly" "ref" "regardless" "register" +; "reinterpret_cast" "require" "resource" "restrict" "self" "set" "shared" +; "sizeof" "smooth" "snorm" "static" "static_assert" "static_cast" "std" +; "subroutine" "super" "target" "template" "this" "thread_local" "throw" "trait" +; "try" "type" "typedef" "typeid" "typename" "typeof" "union" "unless" "unorm" +; "unsafe" "unsized" "use" "using" "varying" "virtual" "volatile" "wgsl" "where" +; "with" "writeonly" "yield")) + +; comments + +(line_comment) @comment.line +(block_comment) @comment.block + +; imports (WESL extension) + +(import_item (identifier) @type + (#match? @type "^[A-Z]")) + +(import_item (identifier) @constant + (#match? @constant "^[A-Z0-9_]+$")) + +(import_item (identifier) @namespace) + +(import_path (identifier) @namespace) + +(ident_path (identifier) @namespace) + +; types + +((identifier) @constant + (#match? @constant "^[A-Z0-9_]+$")) + +((identifier) @type + (#match? @type "^[A-Z]")) + +(type_specifier + (identifier) @type) + +; functions + +(function_decl + (function_header + (identifier) @function)) + +(call_expression + (identifier) @function) + +; templates + +(template_list) @punctuation + +(variable_decl ; this is var et.al + (template_list + (identifier) @keyword.storage.modifier)) + +(type_specifier + (template_list + (identifier) @type)) + +(template_list + (template_list + (identifier) @type)) + +; attributes + +(attribute + (identifier) @attribute) @attribute + +(attribute + (identifier) @attr-name + (argument_list + (identifier) @variable.builtin) + (#eq? @attr-name "builtin")) + +; variables, names + +(param + (identifier) @variable.parameter) +(variable_decl + (identifier) @variable) +(const_assert_statement) @variable + +(struct_decl + (identifier) @type) + +(struct_member + name: (_) @variable.other.member) + +(named_component_expression + component: (_) @variable.other.member) + +(identifier) @variable + +; literals + +(bool_literal) @constant.builtin.boolean +(int_literal) @constant.numeric.integer +(float_literal) @constant.numeric.float + + +; keywords + +[ + "if" + "else" +] @keyword.control.conditional +[ + "loop" + "for" + "while" + "break" + "continue" +] @keyword.control.repeat +[ + "return" +] @keyword.control.return +[ + "switch" + "case" + "default" + "discard" +] @keyword.control +[ ; WESL import extension + "import" + "as" +] @keyword.control.import +[ + "fn" +] @keyword.function +[ + "var" + "let" + "const" + "struct" +] @keyword.storage.type +[ + "alias" + "virtual" ; Bevy / naga_oil extension + "override" ; Bevy / naga_oil extension +] @keyword + +; expressions + +[ + "-" "!" "~" "*" "&" ; unary + "^" "|" "/" "%" "+" (shift_left) (shift_right) ; binary + (less_than) (greater_than) (less_than_equal) (greater_than_equal) "==" "!=" ; relational + "+=" "-=" "*=" "/=" "%=" "|=" "^=" "++" "--" "=" ; assign + "->" ; return +] @operator + +; punctuation + +[ "(" ")" "[" "]" "{" "}" ] @punctuation.bracket +[ "," "." ":" ";" ] @punctuation.delimiter + +; preprocessor + +[ (preproc_directive) "#import" ] @keyword.directive diff --git a/runtime/queries/wesl/injections.scm b/runtime/queries/wesl/injections.scm new file mode 100644 index 000000000..e4509a5fd --- /dev/null +++ b/runtime/queries/wesl/injections.scm @@ -0,0 +1,2 @@ +([(line_comment) (block_comment)] @injection.content + (#set! injection.language "comment")) diff --git a/runtime/queries/wesl/locals.scm b/runtime/queries/wesl/locals.scm new file mode 100644 index 000000000..9aade0e3e --- /dev/null +++ b/runtime/queries/wesl/locals.scm @@ -0,0 +1,18 @@ +; Scopes + +[ + (global_decl) + (switch_body) + (compound_statement) +] @local.scope + +; Definitions + +(param + (identifier) @local.definition) + +; References + +(identifier) @local.reference +; (type_specifier) @local.reference + diff --git a/runtime/queries/wesl/textobjects.scm b/runtime/queries/wesl/textobjects.scm new file mode 100644 index 000000000..c5b3f93e6 --- /dev/null +++ b/runtime/queries/wesl/textobjects.scm @@ -0,0 +1,23 @@ +(function_decl + body: (_) @function.inside) @function.around + +(struct_decl + body: (_) @class.inside) @class.around + +(param_list + ((_) @parameter.inside . ","? @parameter.around) @parameter.around) + +(argument_list + ((_) @parameter.inside . ","? @parameter.around) @parameter.around) + +(template_list + ((_) @parameter.inside . ","? @parameter.around) @parameter.around) + +[ + (line_comment) + (block_comment) +] @comment.inside + +(line_comment)+ @comment.around + +(block_comment) @comment.around From efdcf34b79708e90bd142084e5f2f83021871287 Mon Sep 17 00:00:00 2001 From: Austin L Wolfgram Date: Sun, 6 Apr 2025 20:00:18 +0200 Subject: [PATCH 30/51] Fix out of date comments on merge_toml_values (#13253) merge_toplevel_arrays is no longer a parameter for this method, and the example fits better in a doc comment. --- helix-loader/src/config.rs | 16 -------------- helix-loader/src/lib.rs | 44 +++++++++++++++++++++++++------------- 2 files changed, 29 insertions(+), 31 deletions(-) diff --git a/helix-loader/src/config.rs b/helix-loader/src/config.rs index d092d20f7..1f414de67 100644 --- a/helix-loader/src/config.rs +++ b/helix-loader/src/config.rs @@ -23,22 +23,6 @@ pub fn user_lang_config() -> Result { .collect::, _>>()? .into_iter() .fold(default_lang_config(), |a, b| { - // combines for example - // b: - // [[language]] - // name = "toml" - // language-server = { command = "taplo", args = ["lsp", "stdio"] } - // - // a: - // [[language]] - // language-server = { command = "/usr/bin/taplo" } - // - // into: - // [[language]] - // name = "toml" - // language-server = { command = "/usr/bin/taplo" } - // - // thus it overrides the third depth-level of b with values of a if they exist, but otherwise merges their values crate::merge_toml_values(a, b, 3) }); diff --git a/helix-loader/src/lib.rs b/helix-loader/src/lib.rs index ae9ffe550..54980dd7d 100644 --- a/helix-loader/src/lib.rs +++ b/helix-loader/src/lib.rs @@ -154,17 +154,36 @@ pub fn default_log_file() -> PathBuf { /// Merge two TOML documents, merging values from `right` onto `left` /// -/// When an array exists in both `left` and `right`, `right`'s array is -/// used. When a table exists in both `left` and `right`, the merged table -/// consists of all keys in `left`'s table unioned with all keys in `right` -/// with the values of `right` being merged recursively onto values of -/// `left`. +/// `merge_depth` sets the nesting depth up to which values are merged instead +/// of overridden. /// -/// `merge_toplevel_arrays` controls whether a top-level array in the TOML -/// document is merged instead of overridden. This is useful for TOML -/// documents that use a top-level array of values like the `languages.toml`, -/// where one usually wants to override or add to the array instead of -/// replacing it altogether. +/// When a table exists in both `left` and `right`, the merged table consists of +/// all keys in `left`'s table unioned with all keys in `right` with the values +/// of `right` being merged recursively onto values of `left`. +/// +/// `crate::merge_toml_values(a, b, 3)` combines, for example: +/// +/// b: +/// ```toml +/// [[language]] +/// name = "toml" +/// language-server = { command = "taplo", args = ["lsp", "stdio"] } +/// ``` +/// a: +/// ```toml +/// [[language]] +/// language-server = { command = "/usr/bin/taplo" } +/// ``` +/// +/// into: +/// ```toml +/// [[language]] +/// name = "toml" +/// language-server = { command = "/usr/bin/taplo" } +/// ``` +/// +/// thus it overrides the third depth-level of b with values of a if they exist, +/// but otherwise merges their values pub fn merge_toml_values(left: toml::Value, right: toml::Value, merge_depth: usize) -> toml::Value { use toml::Value; @@ -174,11 +193,6 @@ pub fn merge_toml_values(left: toml::Value, right: toml::Value, merge_depth: usi match (left, right) { (Value::Array(mut left_items), Value::Array(right_items)) => { - // The top-level arrays should be merged but nested arrays should - // act as overrides. For the `languages.toml` config, this means - // that you can specify a sub-set of languages in an overriding - // `languages.toml` but that nested arrays like Language Server - // arguments are replaced instead of merged. if merge_depth > 0 { left_items.reserve(right_items.len()); for rvalue in right_items { From 29789f2a9faabb830d12f94702c172f18b7b5fef Mon Sep 17 00:00:00 2001 From: Dimitri Sabadie Date: Sun, 6 Apr 2025 20:18:47 +0200 Subject: [PATCH 31/51] Add support for extend_file_{start,end} (#11767) --- book/src/generated/static-cmd.md | 7 +++-- helix-term/src/commands.rs | 49 +++++++++++++++++++++++++++----- helix-term/src/commands/typed.rs | 10 ++++++- helix-term/src/keymap/default.rs | 2 ++ 4 files changed, 58 insertions(+), 10 deletions(-) diff --git a/book/src/generated/static-cmd.md b/book/src/generated/static-cmd.md index af7515b8e..f6a82020f 100644 --- a/book/src/generated/static-cmd.md +++ b/book/src/generated/static-cmd.md @@ -126,8 +126,10 @@ | `add_newline_below` | Add newline below | normal: `` ] ``, select: `` ] `` | | `goto_type_definition` | Goto type definition | normal: `` gy ``, select: `` gy `` | | `goto_implementation` | Goto implementation | normal: `` gi ``, select: `` gi `` | -| `goto_file_start` | Goto line number else file start | normal: `` gg ``, select: `` gg `` | +| `goto_file_start` | Goto line number else file start | normal: `` gg `` | | `goto_file_end` | Goto file end | | +| `extend_to_file_start` | Extend to line number else file start | select: `` gg `` | +| `extend_to_file_end` | Extend to file end | | | `goto_file` | Goto files/URLs in selections | normal: `` gf ``, select: `` gf `` | | `goto_file_hsplit` | Goto files in selections (hsplit) | normal: `` f ``, `` wf ``, select: `` f ``, `` wf `` | | `goto_file_vsplit` | Goto files in selections (vsplit) | normal: `` F ``, `` wF ``, select: `` F ``, `` wF `` | @@ -139,7 +141,8 @@ | `goto_last_modified_file` | Goto last modified file | normal: `` gm ``, select: `` gm `` | | `goto_last_modification` | Goto last modification | normal: `` g. ``, select: `` g. `` | | `goto_line` | Goto line | normal: `` G ``, select: `` G `` | -| `goto_last_line` | Goto last line | normal: `` ge ``, select: `` ge `` | +| `goto_last_line` | Goto last line | normal: `` ge `` | +| `extend_to_last_line` | Extend to last line | select: `` ge `` | | `goto_first_diag` | Goto first diagnostic | normal: `` [D ``, select: `` [D `` | | `goto_last_diag` | Goto last diagnostic | normal: `` ]D ``, select: `` ]D `` | | `goto_next_diag` | Goto next diagnostic | normal: `` ]d ``, select: `` ]d `` | diff --git a/helix-term/src/commands.rs b/helix-term/src/commands.rs index 2e15dcdcc..f80c277b2 100644 --- a/helix-term/src/commands.rs +++ b/helix-term/src/commands.rs @@ -426,6 +426,8 @@ impl MappableCommand { goto_implementation, "Goto implementation", goto_file_start, "Goto line number else file start", goto_file_end, "Goto file end", + extend_to_file_start, "Extend to line number else file start", + extend_to_file_end, "Extend to file end", goto_file, "Goto files/URLs in selections", goto_file_hsplit, "Goto files in selections (hsplit)", goto_file_vsplit, "Goto files in selections (vsplit)", @@ -438,6 +440,7 @@ impl MappableCommand { goto_last_modification, "Goto last modification", goto_line, "Goto line", goto_last_line, "Goto last line", + extend_to_last_line, "Extend to last line", goto_first_diag, "Goto first diagnostic", goto_last_diag, "Goto last diagnostic", goto_next_diag, "Goto next diagnostic", @@ -1253,28 +1256,44 @@ fn goto_next_paragraph(cx: &mut Context) { } fn goto_file_start(cx: &mut Context) { + goto_file_start_impl(cx, Movement::Move); +} + +fn extend_to_file_start(cx: &mut Context) { + goto_file_start_impl(cx, Movement::Extend); +} + +fn goto_file_start_impl(cx: &mut Context, movement: Movement) { if cx.count.is_some() { - goto_line(cx); + goto_line_impl(cx, movement); } else { let (view, doc) = current!(cx.editor); let text = doc.text().slice(..); let selection = doc .selection(view.id) .clone() - .transform(|range| range.put_cursor(text, 0, cx.editor.mode == Mode::Select)); + .transform(|range| range.put_cursor(text, 0, movement == Movement::Extend)); push_jump(view, doc); doc.set_selection(view.id, selection); } } fn goto_file_end(cx: &mut Context) { + goto_file_end_impl(cx, Movement::Move); +} + +fn extend_to_file_end(cx: &mut Context) { + goto_file_end_impl(cx, Movement::Extend) +} + +fn goto_file_end_impl(cx: &mut Context, movement: Movement) { let (view, doc) = current!(cx.editor); let text = doc.text().slice(..); let pos = doc.text().len_chars(); let selection = doc .selection(view.id) .clone() - .transform(|range| range.put_cursor(text, pos, cx.editor.mode == Mode::Select)); + .transform(|range| range.put_cursor(text, pos, movement == Movement::Extend)); push_jump(view, doc); doc.set_selection(view.id, selection); } @@ -3746,15 +3765,23 @@ fn push_jump(view: &mut View, doc: &Document) { } fn goto_line(cx: &mut Context) { + goto_line_impl(cx, Movement::Move); +} + +fn goto_line_impl(cx: &mut Context, movement: Movement) { if cx.count.is_some() { let (view, doc) = current!(cx.editor); push_jump(view, doc); - goto_line_without_jumplist(cx.editor, cx.count); + goto_line_without_jumplist(cx.editor, cx.count, movement); } } -fn goto_line_without_jumplist(editor: &mut Editor, count: Option) { +fn goto_line_without_jumplist( + editor: &mut Editor, + count: Option, + movement: Movement, +) { if let Some(count) = count { let (view, doc) = current!(editor); let text = doc.text().slice(..); @@ -3769,13 +3796,21 @@ fn goto_line_without_jumplist(editor: &mut Editor, count: Option) let selection = doc .selection(view.id) .clone() - .transform(|range| range.put_cursor(text, pos, editor.mode == Mode::Select)); + .transform(|range| range.put_cursor(text, pos, movement == Movement::Extend)); doc.set_selection(view.id, selection); } } fn goto_last_line(cx: &mut Context) { + goto_last_line_impl(cx, Movement::Move) +} + +fn extend_to_last_line(cx: &mut Context) { + goto_last_line_impl(cx, Movement::Extend) +} + +fn goto_last_line_impl(cx: &mut Context, movement: Movement) { let (view, doc) = current!(cx.editor); let text = doc.text().slice(..); let line_idx = if text.line(text.len_lines() - 1).len_chars() == 0 { @@ -3788,7 +3823,7 @@ fn goto_last_line(cx: &mut Context) { let selection = doc .selection(view.id) .clone() - .transform(|range| range.put_cursor(text, pos, cx.editor.mode == Mode::Select)); + .transform(|range| range.put_cursor(text, pos, movement == Movement::Extend)); push_jump(view, doc); doc.set_selection(view.id, selection); diff --git a/helix-term/src/commands/typed.rs b/helix-term/src/commands/typed.rs index 4e912127c..a7d1c5f03 100644 --- a/helix-term/src/commands/typed.rs +++ b/helix-term/src/commands/typed.rs @@ -1880,7 +1880,15 @@ fn update_goto_line_number_preview(cx: &mut compositor::Context, args: Args) -> let scrolloff = cx.editor.config().scrolloff; let line = args[0].parse::()?; - goto_line_without_jumplist(cx.editor, NonZeroUsize::new(line)); + goto_line_without_jumplist( + cx.editor, + NonZeroUsize::new(line), + if cx.editor.mode == Mode::Select { + Movement::Extend + } else { + Movement::Move + }, + ); let (view, doc) = current!(cx.editor); view.ensure_cursor_in_view(doc, scrolloff); diff --git a/helix-term/src/keymap/default.rs b/helix-term/src/keymap/default.rs index e160b2246..b9189eb30 100644 --- a/helix-term/src/keymap/default.rs +++ b/helix-term/src/keymap/default.rs @@ -367,6 +367,8 @@ pub fn default() -> HashMap { "v" => normal_mode, "g" => { "Goto" + "g" => extend_to_file_start, + "e" => extend_to_last_line, "k" => extend_line_up, "j" => extend_line_down, "w" => extend_to_word, From 9cfb8afa9918c79904b5ec96b1c7e39a77387883 Mon Sep 17 00:00:00 2001 From: Mykyta <114003900+Nikita0x@users.noreply.github.com> Date: Mon, 7 Apr 2025 18:00:03 +0300 Subject: [PATCH 32/51] Added: missing highlighting to `queries/_typescript` (#13250) * Added: missing highlighting * moved: delete, typeof, instanceof, void - from keywords to keyword.operator --- runtime/queries/_typescript/highlights.scm | 12 ++++++++++++ runtime/queries/ecma/highlights.scm | 8 ++++---- 2 files changed, 16 insertions(+), 4 deletions(-) diff --git a/runtime/queries/_typescript/highlights.scm b/runtime/queries/_typescript/highlights.scm index a5bfd9ed0..8ce9cb653 100644 --- a/runtime/queries/_typescript/highlights.scm +++ b/runtime/queries/_typescript/highlights.scm @@ -64,6 +64,10 @@ (array_pattern (identifier) @variable.parameter)) +(public_field_definition) @punctuation.special +(this_type) @variable.builtin +(type_predicate) @keyword.operator + ; Punctuation ; ----------- @@ -82,6 +86,7 @@ [ "abstract" "declare" + "module" "export" "infer" "implements" @@ -127,9 +132,16 @@ ">" ] @punctuation.bracket) +(omitting_type_annotation) @punctuation.special +(opting_type_annotation) @punctuation.special + ; Literals ; -------- [ (template_literal_type) ] @string + +(import_require_clause + (identifier) "=" + ("require") @keyword) diff --git a/runtime/queries/ecma/highlights.scm b/runtime/queries/ecma/highlights.scm index d56bbe14a..fcc47ce11 100644 --- a/runtime/queries/ecma/highlights.scm +++ b/runtime/queries/ecma/highlights.scm @@ -74,16 +74,12 @@ [ "async" "debugger" - "delete" "extends" "from" "get" "new" "set" "target" - "typeof" - "instanceof" - "void" "with" ] @keyword @@ -91,6 +87,10 @@ "of" "as" "in" + "delete" + "typeof" + "instanceof" + "void" ] @keyword.operator [ From 46f7cdb5a94fcc831418eccc5301fe5195b0e1b5 Mon Sep 17 00:00:00 2001 From: Jason Fuchs <157738564+jasonfuchs@users.noreply.github.com> Date: Mon, 7 Apr 2025 18:00:45 +0200 Subject: [PATCH 33/51] feat: add ! alias for sh and | for pipe (#13263) --- book/src/generated/typable-cmd.md | 4 ++-- helix-term/src/commands/typed.rs | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/book/src/generated/typable-cmd.md b/book/src/generated/typable-cmd.md index dc5a6d08a..219f6b95f 100644 --- a/book/src/generated/typable-cmd.md +++ b/book/src/generated/typable-cmd.md @@ -78,9 +78,9 @@ | `:log-open` | Open the helix log file. | | `:insert-output` | Run shell command, inserting output before each selection. | | `:append-output` | Run shell command, appending output after each selection. | -| `:pipe` | Pipe each selection to the shell command. | +| `:pipe`, `:|` | Pipe each selection to the shell command. | | `:pipe-to` | Pipe each selection to the shell command, ignoring output. | -| `:run-shell-command`, `:sh` | Run a shell command | +| `:run-shell-command`, `:sh`, `:!` | Run a shell command | | `:reset-diff-change`, `:diffget`, `:diffg` | Reset the diff change at the cursor position. | | `:clear-register` | Clear given register. If no argument is provided, clear all registers. | | `:redraw` | Clear and re-render the whole UI | diff --git a/helix-term/src/commands/typed.rs b/helix-term/src/commands/typed.rs index a7d1c5f03..5274c2801 100644 --- a/helix-term/src/commands/typed.rs +++ b/helix-term/src/commands/typed.rs @@ -3450,7 +3450,7 @@ pub const TYPABLE_COMMAND_LIST: &[TypableCommand] = &[ }, TypableCommand { name: "pipe", - aliases: &[], + aliases: &["|"], doc: "Pipe each selection to the shell command.", fun: pipe, completer: SHELL_COMPLETER, @@ -3466,7 +3466,7 @@ pub const TYPABLE_COMMAND_LIST: &[TypableCommand] = &[ }, TypableCommand { name: "run-shell-command", - aliases: &["sh"], + aliases: &["sh", "!"], doc: "Run a shell command", fun: run_shell_command, completer: SHELL_COMPLETER, From 4130b162a7bbc7de739807abc05a0e8ba3712133 Mon Sep 17 00:00:00 2001 From: James Rogers <151384517+DyonaCode@users.noreply.github.com> Date: Mon, 7 Apr 2025 17:08:09 +0100 Subject: [PATCH 34/51] Update docs link to Commands.md in Remapping.md (#13284) --- book/src/remapping.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/book/src/remapping.md b/book/src/remapping.md index 4eb14c558..23bb80c55 100644 --- a/book/src/remapping.md +++ b/book/src/remapping.md @@ -12,7 +12,7 @@ There are three kinds of commands that can be used in keymaps: in [`helix-term/src/commands.rs`](https://github.com/helix-editor/helix/blob/master/helix-term/src/commands.rs) at the invocation of `static_commands!` macro. * Typable commands: commands that can be executed from command mode (`:`), for - example `:write!`. See the [Commands](./commands.html) documentation for a + example `:write!`. See the [Commands](./commands.md) documentation for a list of available typeable commands or the `TypableCommandList` declaration in the source code at [`helix-term/src/commands/typed.rs`](https://github.com/helix-editor/helix/blob/master/helix-term/src/commands/typed.rs). * Macros: sequences of keys that are executed in order. These keybindings From 0609b066381993b2ccb35bf56d005861992d85ec Mon Sep 17 00:00:00 2001 From: Multirious <77918086+Multirious@users.noreply.github.com> Date: Tue, 8 Apr 2025 00:15:54 +0000 Subject: [PATCH 35/51] Book: Mentions zsh-helix-mode in other-softwares (#13294) --- book/src/other-software.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/book/src/other-software.md b/book/src/other-software.md index 8d6414c53..76c49b41f 100644 --- a/book/src/other-software.md +++ b/book/src/other-software.md @@ -22,7 +22,7 @@ Helix' keymap and interaction model ([Using Helix](#usage.md)) is easier to adop | --- | --- | Fish | [Feature Request](https://github.com/fish-shell/fish-shell/issues/7748) | Fish | [fish-helix](https://github.com/sshilovsky/fish-helix/tree/main) -| Zsh | [helix-zsh](https://github.com/john-h-k/helix-zsh) +| Zsh | [helix-zsh](https://github.com/john-h-k/helix-zsh) or [zsh-helix-mode](https://github.com/Multirious/zsh-helix-mode) | Nushell | [Feature Request](https://github.com/nushell/reedline/issues/639) ## Other software From a79979462395a1804e59b97732481b15874187a7 Mon Sep 17 00:00:00 2001 From: Julien THILLARD <54775010+supersurviveur@users.noreply.github.com> Date: Tue, 8 Apr 2025 02:16:31 +0200 Subject: [PATCH 36/51] Change highlights order (#13293) --- runtime/queries/ocaml/highlights.scm | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/runtime/queries/ocaml/highlights.scm b/runtime/queries/ocaml/highlights.scm index 5e2a576f3..4be4bb94b 100644 --- a/runtime/queries/ocaml/highlights.scm +++ b/runtime/queries/ocaml/highlights.scm @@ -37,6 +37,13 @@ [(constructor_name) (tag)] @constructor +; Variables +;---------- + +[(value_name) (type_variable)] @variable + +(value_pattern) @variable.parameter + ; Functions ;---------- @@ -75,13 +82,6 @@ (application_expression function: (value_path (value_name) @function)) -; Variables -;---------- - -[(value_name) (type_variable)] @variable - -(value_pattern) @variable.parameter - ; Properties ;----------- From 5d16aae58e3ec4a960955bba0c7e35ea6c4cb582 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 7 Apr 2025 21:33:46 -0500 Subject: [PATCH 37/51] build(deps): bump the rust-dependencies group across 1 directory with 5 updates (#13301) Bumps the rust-dependencies group with 5 updates in the / directory: | Package | From | To | | --- | --- | --- | | [smallvec](https://github.com/servo/rust-smallvec) | `1.14.0` | `1.15.0` | | [tokio](https://github.com/tokio-rs/tokio) | `1.44.1` | `1.44.2` | | [rustix](https://github.com/bytecodealliance/rustix) | `1.0.3` | `1.0.5` | | [indexmap](https://github.com/indexmap-rs/indexmap) | `2.8.0` | `2.9.0` | | [cc](https://github.com/rust-lang/cc-rs) | `1.2.17` | `1.2.18` | Updates `smallvec` from 1.14.0 to 1.15.0 - [Release notes](https://github.com/servo/rust-smallvec/releases) - [Commits](https://github.com/servo/rust-smallvec/compare/v1.14.0...v1.15.0) Updates `tokio` from 1.44.1 to 1.44.2 - [Release notes](https://github.com/tokio-rs/tokio/releases) - [Commits](https://github.com/tokio-rs/tokio/compare/tokio-1.44.1...tokio-1.44.2) Updates `rustix` from 1.0.3 to 1.0.5 - [Release notes](https://github.com/bytecodealliance/rustix/releases) - [Changelog](https://github.com/bytecodealliance/rustix/blob/main/CHANGES.md) - [Commits](https://github.com/bytecodealliance/rustix/compare/v1.0.3...v1.0.5) Updates `indexmap` from 2.8.0 to 2.9.0 - [Changelog](https://github.com/indexmap-rs/indexmap/blob/main/RELEASES.md) - [Commits](https://github.com/indexmap-rs/indexmap/compare/2.8.0...2.9.0) Updates `cc` from 1.2.17 to 1.2.18 - [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.17...cc-v1.2.18) --- updated-dependencies: - dependency-name: smallvec dependency-version: 1.15.0 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: rust-dependencies - dependency-name: tokio dependency-version: 1.44.2 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: rust-dependencies - dependency-name: rustix dependency-version: 1.0.5 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: rust-dependencies - dependency-name: indexmap dependency-version: 2.9.0 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: rust-dependencies - dependency-name: cc dependency-version: 1.2.18 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: rust-dependencies ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- Cargo.lock | 26 +++++++++++++------------- helix-core/Cargo.toml | 2 +- helix-term/Cargo.toml | 4 ++-- 3 files changed, 16 insertions(+), 16 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 03c43148e..2087b9a43 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -145,9 +145,9 @@ checksum = "df8670b8c7b9dae1793364eafadf7239c40d669904660c5960d74cfd80b46a53" [[package]] name = "cc" -version = "1.2.17" +version = "1.2.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1fcb57c740ae1daf453ae85f16e37396f672b039e00d9d866e07ddb24e328e3a" +checksum = "525046617d8376e3db1deffb079e91cef90a89fc3ca5c185bbf8c9ecdd15cd5c" dependencies = [ "shlex", ] @@ -1500,7 +1500,7 @@ dependencies = [ "regex-automata", "regex-cursor", "ropey", - "rustix 1.0.3", + "rustix 1.0.5", "tempfile", "unicode-segmentation", "which", @@ -1607,7 +1607,7 @@ dependencies = [ "log", "once_cell", "parking_lot", - "rustix 1.0.3", + "rustix 1.0.5", "serde", "serde_json", "slotmap", @@ -1823,9 +1823,9 @@ dependencies = [ [[package]] name = "indexmap" -version = "2.8.0" +version = "2.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3954d50fe15b02142bf25d3b8bdadb634ec3948f103d04ffe3031bc8fe9d7058" +checksum = "cea70ddb795996207ad57735b50c5982d8844f38ba9ee5f1aedcfb708a2aa11e" dependencies = [ "equivalent", "hashbrown 0.15.2", @@ -2323,9 +2323,9 @@ dependencies = [ [[package]] name = "rustix" -version = "1.0.3" +version = "1.0.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e56a18552996ac8d29ecc3b190b4fdbb2d91ca4ec396de7bbffaf43f3d637e96" +checksum = "d97817398dd4bb2e6da002002db259209759911da105da92bec29ccb12cf58bf" dependencies = [ "bitflags", "errno", @@ -2491,9 +2491,9 @@ dependencies = [ [[package]] name = "smallvec" -version = "1.14.0" +version = "1.15.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7fcf8323ef1faaee30a44a340193b1ac6814fd9b7b4e88e9d4519a3e4abe1cfd" +checksum = "8917285742e9f3e1683f0a9c4e6b57960b7314d0b08d30d1ecd426713ee2eee9" [[package]] name = "smartstring" @@ -2571,7 +2571,7 @@ dependencies = [ "fastrand", "getrandom 0.3.1", "once_cell", - "rustix 1.0.3", + "rustix 1.0.5", "windows-sys 0.59.0", ] @@ -2671,9 +2671,9 @@ checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" [[package]] name = "tokio" -version = "1.44.1" +version = "1.44.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f382da615b842244d4b8738c82ed1275e6c5dd90c459a30941cd07080b06c91a" +checksum = "e6b88822cbe49de4185e3a4cbf8321dd487cf5fe0c5c65695fef6346371e9c48" dependencies = [ "backtrace", "bytes", diff --git a/helix-core/Cargo.toml b/helix-core/Cargo.toml index 10fb5a52c..fe9a8c939 100644 --- a/helix-core/Cargo.toml +++ b/helix-core/Cargo.toml @@ -21,7 +21,7 @@ helix-loader = { path = "../helix-loader" } helix-parsec = { path = "../helix-parsec" } ropey.workspace = true -smallvec = "1.14" +smallvec = "1.15" smartstring = "1.0.1" unicode-segmentation.workspace = true # unicode-width is changing width definitions diff --git a/helix-term/Cargo.toml b/helix-term/Cargo.toml index 9ea2d4589..7709d741b 100644 --- a/helix-term/Cargo.toml +++ b/helix-term/Cargo.toml @@ -61,7 +61,7 @@ tokio-stream = "0.1" futures-util = { version = "0.3", features = ["std", "async-await"], default-features = false } arc-swap = { version = "1.7.1" } termini = "1" -indexmap = "2.8" +indexmap = "2.9" # Logging fern = "0.7" @@ -102,7 +102,7 @@ crossterm = { version = "0.28", features = ["event-stream", "use-dev-tty", "libc helix-loader = { path = "../helix-loader" } [dev-dependencies] -smallvec = "1.14" +smallvec = "1.15" indoc = "2.0.6" tempfile.workspace = true same-file = "1.0.1" From 032c7b897d8b2ce10c1f27751c6ece3f816dadb3 Mon Sep 17 00:00:00 2001 From: PL Pery Date: Tue, 8 Apr 2025 17:18:17 +0200 Subject: [PATCH 38/51] flake: fix Helix.desktop and helix.png output paths (#13305) --- default.nix | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/default.nix b/default.nix index d94e707d3..45f34fff4 100644 --- a/default.nix +++ b/default.nix @@ -75,9 +75,9 @@ in mkdir -p $out/lib installShellCompletion ${./contrib/completion}/hx.{bash,fish,zsh} mkdir -p $out/share/{applications,icons/hicolor/{256x256,scalable}/apps} - cp ${./contrib/Helix.desktop} $out/share/applications + cp ${./contrib/Helix.desktop} $out/share/applications/Helix.desktop cp ${./logo.svg} $out/share/icons/hicolor/scalable/apps/helix.svg - cp ${./contrib/helix.png} $out/share/icons/hicolor/256x256/apps + cp ${./contrib/helix.png} $out/share/icons/hicolor/256x256/apps/helix.png ''; meta.mainProgram = "hx"; From 34aa4d41c67924e13de597df46c4d9d4bc8fffb8 Mon Sep 17 00:00:00 2001 From: RoloEdits Date: Tue, 8 Apr 2025 09:54:12 -0700 Subject: [PATCH 39/51] ci: add arm64 runner (#13273) --- .github/workflows/build.yml | 18 +++++++++--------- .github/workflows/release.yml | 8 ++++---- 2 files changed, 13 insertions(+), 13 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index f712a5315..5cdc795fc 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -35,8 +35,8 @@ jobs: uses: actions/cache@v4 with: path: runtime/grammars - key: ${{ runner.os }}-stable-v${{ env.GRAMMAR_CACHE_VERSION }}-tree-sitter-grammars-${{ hashFiles('languages.toml') }} - restore-keys: ${{ runner.os }}-stable-v${{ env.GRAMMAR_CACHE_VERSION }}-tree-sitter-grammars- + key: ${{ runner.os }}-${{ runner.arch }}-stable-v${{ env.GRAMMAR_CACHE_VERSION }}-tree-sitter-grammars-${{ hashFiles('languages.toml') }} + restore-keys: ${{ runner.os }}-${{ runner.arch }}-stable-v${{ env.GRAMMAR_CACHE_VERSION }}-tree-sitter-grammars- - name: Run cargo check run: cargo check @@ -65,8 +65,8 @@ jobs: uses: actions/cache@v4 with: path: runtime/grammars - key: ${{ runner.os }}-stable-v${{ env.GRAMMAR_CACHE_VERSION }}-tree-sitter-grammars-${{ hashFiles('languages.toml') }} - restore-keys: ${{ runner.os }}-stable-v${{ env.GRAMMAR_CACHE_VERSION }}-tree-sitter-grammars- + key: ${{ runner.os }}-${{ runner.arch }}-stable-v${{ env.GRAMMAR_CACHE_VERSION }}-tree-sitter-grammars-${{ hashFiles('languages.toml') }} + restore-keys: ${{ runner.os }}-${{ runner.arch }}-stable-v${{ env.GRAMMAR_CACHE_VERSION }}-tree-sitter-grammars- - name: Run cargo test run: cargo test --workspace @@ -76,7 +76,7 @@ jobs: strategy: matrix: - os: [ubuntu-latest, macos-latest, windows-latest] + os: [ubuntu-latest, macos-latest, windows-latest, ubuntu-24.04-arm] lints: name: Lints @@ -100,8 +100,8 @@ jobs: uses: actions/cache@v4 with: path: runtime/grammars - key: ${{ runner.os }}-stable-v${{ env.GRAMMAR_CACHE_VERSION }}-tree-sitter-grammars-${{ hashFiles('languages.toml') }} - restore-keys: ${{ runner.os }}-stable-v${{ env.GRAMMAR_CACHE_VERSION }}-tree-sitter-grammars- + key: ${{ runner.os }}-${{ runner.arch }}-stable-v${{ env.GRAMMAR_CACHE_VERSION }}-tree-sitter-grammars-${{ hashFiles('languages.toml') }} + restore-keys: ${{ runner.os }}-${{ runner.arch }}-stable-v${{ env.GRAMMAR_CACHE_VERSION }}-tree-sitter-grammars- - name: Run cargo fmt run: cargo fmt --all --check @@ -135,8 +135,8 @@ jobs: uses: actions/cache@v4 with: path: runtime/grammars - key: ${{ runner.os }}-stable-v${{ env.GRAMMAR_CACHE_VERSION }}-tree-sitter-grammars-${{ hashFiles('languages.toml') }} - restore-keys: ${{ runner.os }}-stable-v${{ env.GRAMMAR_CACHE_VERSION }}-tree-sitter-grammars- + key: ${{ runner.os }}-${{ runner.arch }}-stable-v${{ env.GRAMMAR_CACHE_VERSION }}-tree-sitter-grammars-${{ hashFiles('languages.toml') }} + restore-keys: ${{ runner.os }}-${{ runner.arch }}-stable-v${{ env.GRAMMAR_CACHE_VERSION }}-tree-sitter-grammars- - name: Validate queries run: cargo xtask query-check diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index de0a25f67..273680e49 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -58,18 +58,18 @@ jobs: strategy: fail-fast: false # don't fail other jobs if one fails matrix: - build: [x86_64-linux, x86_64-macos, x86_64-windows] #, x86_64-win-gnu, win32-msvc + build: [x86_64-linux, aarch64-linux, x86_64-macos, x86_64-windows] #, x86_64-win-gnu, win32-msvc include: - build: x86_64-linux - os: ubuntu-22.04 + os: ubuntu-24.04 rust: stable target: x86_64-unknown-linux-gnu cross: false - build: aarch64-linux - os: ubuntu-22.04 + os: ubuntu-24.04-arm rust: stable target: aarch64-unknown-linux-gnu - cross: true + cross: false # - build: riscv64-linux # os: ubuntu-22.04 # rust: stable From d24e4fcf0fcf52055838022ea80ae1dc9712a51e Mon Sep 17 00:00:00 2001 From: RoloEdits Date: Tue, 8 Apr 2025 11:58:14 -0700 Subject: [PATCH 40/51] feat(config): add `[workspace-]diagnostics` fields to statusline (#13288) --- book/src/editor.md | 4 + helix-term/src/ui/statusline.rs | 162 ++++++++++++++++++++------------ helix-view/src/editor.rs | 4 + 3 files changed, 110 insertions(+), 60 deletions(-) diff --git a/book/src/editor.md b/book/src/editor.md index 1e5c2a507..b79792058 100644 --- a/book/src/editor.md +++ b/book/src/editor.md @@ -104,6 +104,8 @@ separator = "│" mode.normal = "NORMAL" mode.insert = "INSERT" mode.select = "SELECT" +diagnostics = ["warning", "error"] +workspace-diagnostics = ["warning", "error"] ``` The `[editor.statusline]` key takes the following sub-keys: @@ -116,6 +118,8 @@ The `[editor.statusline]` key takes the following sub-keys: | `mode.normal` | The text shown in the `mode` element for normal mode | `"NOR"` | | `mode.insert` | The text shown in the `mode` element for insert mode | `"INS"` | | `mode.select` | The text shown in the `mode` element for select mode | `"SEL"` | +| `diagnostics` | A list of severities which are displayed for the current buffer | `["warning", "error"]` | +| `workspace-diagnostics` | A list of severities which are displayed for the workspace | `["warning", "error"]` | The following statusline elements can be configured: diff --git a/helix-term/src/ui/statusline.rs b/helix-term/src/ui/statusline.rs index 7437cbd07..adf01bdad 100644 --- a/helix-term/src/ui/statusline.rs +++ b/helix-term/src/ui/statusline.rs @@ -226,36 +226,58 @@ fn render_diagnostics(context: &mut RenderContext, write: F) where F: Fn(&mut RenderContext, String, Option