diff --git a/Cargo.lock b/Cargo.lock
index 237768b4..fb94d1e0 100644
--- a/Cargo.lock
+++ b/Cargo.lock
@@ -101,9 +101,9 @@ dependencies = [
[[package]]
name = "clipboard-win"
-version = "4.4.1"
+version = "4.4.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "2f3e1238132dc01f081e1cbb9dace14e5ef4c3a51ee244bd982275fb514605db"
+checksum = "c4ab1b92798304eedc095b53942963240037c0516452cb11aeba709d420b2219"
dependencies = [
"error-code",
"str-buf",
@@ -335,9 +335,9 @@ dependencies = [
[[package]]
name = "grep-regex"
-version = "0.1.9"
+version = "0.1.10"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "121553c9768c363839b92fc2d7cdbbad44a3b70e8d6e7b1b72b05c977527bd06"
+checksum = "1345f8d33c89f2d5b081f2f2a41175adef9fd0bed2fea6a26c96c2deb027e58e"
dependencies = [
"aho-corasick",
"bstr",
@@ -350,9 +350,9 @@ dependencies = [
[[package]]
name = "grep-searcher"
-version = "0.1.8"
+version = "0.1.10"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "7fbdbde90ba52adc240d2deef7b6ad1f99f53142d074b771fe9b7bede6c4c23d"
+checksum = "48852bd08f9b4eb3040ecb6d2f4ade224afe880a9a0909c5563cc59fa67932cc"
dependencies = [
"bstr",
"bytecount",
@@ -644,9 +644,9 @@ checksum = "308cc39be01b73d0d18f82a0e7b2a3df85245f84af96fdddc5d202d27e47b86a"
[[package]]
name = "memmap2"
-version = "0.3.1"
+version = "0.5.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "00b6c2ebff6180198788f5db08d7ce3bc1d0b617176678831a7510825973e357"
+checksum = "3a79b39c93a7a5a27eeaf9a23b5ff43f1b9e0ad6b1cdd441140ae53c35613fc7"
dependencies = [
"libc",
]
diff --git a/book/src/configuration.md b/book/src/configuration.md
index cfa302f0..617071b6 100644
--- a/book/src/configuration.md
+++ b/book/src/configuration.md
@@ -38,7 +38,7 @@ hidden = false
| `shell` | Shell to use when running external commands. | Unix: `["sh", "-c"]`
Windows: `["cmd", "/C"]` |
| `line-number` | Line number display: `absolute` simply shows each line's number, while `relative` shows the distance from the current line. When unfocused or in insert mode, `relative` will still show absolute line numbers. | `absolute` |
| `cursorline` | Highlight all lines with a cursor. | `false` |
-| `gutters` | Gutters to display: Available are `diagnostics` and `line-numbers`, note that `diagnostics` also includes other features like breakpoints | `["diagnostics", "line-numbers"]` |
+| `gutters` | Gutters to display: Available are `diagnostics` and `line-numbers` and `padding`, note that `diagnostics` also includes other features like breakpoints | `["diagnostics", "line-numbers", "padding"]` |
| `auto-completion` | Enable automatic pop up of auto-completion. | `true` |
| `auto-format` | Enable automatic formatting on save. | `true` |
| `idle-timeout` | Time in milliseconds since last keypress before idle timers trigger. Used for autocompletion, set to 0 for instant. | `400` |
@@ -48,19 +48,52 @@ hidden = false
| `rulers` | List of column positions at which to display the rulers. Can be overridden by language specific `rulers` in `languages.toml` file. | `[]` |
| `color-modes` | Whether to color the mode indicator with different colors depending on the mode itself | `false` |
+### `[editor.statusline]` Section
+
+Allows configuring the statusline at the bottom of the editor.
+
+The configuration distinguishes between three areas of the status line:
+
+`[ ... ... LEFT ... ... | ... ... ... ... CENTER ... ... ... ... | ... ... RIGHT ... ... ]`
+
+Statusline elements can be defined as follows:
+
+```toml
+[editor.statusline]
+left = ["mode", "spinner"]
+center = ["file-name"]
+right = ["diagnostics", "selections", "position", "file-encoding", "file-line-ending", "file-type"]
+```
+
+The following elements can be configured:
+
+| Key | Description |
+| ------ | ----------- |
+| `mode` | The current editor mode (`NOR`/`INS`/`SEL`) |
+| `spinner` | A progress spinner indicating LSP activity |
+| `file-name` | The path/name of the opened file |
+| `file-encoding` | The encoding of the opened file if it differs from UTF-8 |
+| `file-line-ending` | The file line endings (CRLF or LF) |
+| `file-type` | The type of the opened file |
+| `diagnostics` | The number of warnings and/or errors |
+| `selections` | The number of active selections |
+| `position` | The cursor position |
+
### `[editor.lsp]` Section
-| Key | Description | Default |
-| --- | ----------- | ------- |
-| `display-messages` | Display LSP progress messages below statusline[^1] | `false` |
+| Key | Description | Default |
+| --- | ----------- | ------- |
+| `display-messages` | Display LSP progress messages below statusline[^1] | `false` |
+| `auto-signature-help` | Enable automatic popup of signature help (parameter hints) | `true` |
+| `display-signature-help-docs` | Display docs under signature help popup | `true` |
-[^1]: A progress spinner is always shown in the statusline beside the file path.
+[^1]: By default, a progress spinner is shown in the statusline beside the file path.
### `[editor.cursor-shape]` Section
Defines the shape of cursor in each mode. Note that due to limitations
of the terminal environment, only the primary cursor can change shape.
-Valid values for these options are `block`, `bar`, `underline`, or `none`.
+Valid values for these options are `block`, `bar`, `underline`, or `hidden`.
| Key | Description | Default |
| --- | ----------- | ------- |
diff --git a/book/src/generated/lang-support.md b/book/src/generated/lang-support.md
index 64cb32c3..21371c93 100644
--- a/book/src/generated/lang-support.md
+++ b/book/src/generated/lang-support.md
@@ -30,7 +30,7 @@
| git-diff | ✓ | | | |
| git-ignore | ✓ | | | |
| git-rebase | ✓ | | | |
-| gleam | ✓ | ✓ | | |
+| gleam | ✓ | ✓ | | `gleam` |
| glsl | ✓ | ✓ | ✓ | |
| go | ✓ | ✓ | ✓ | `gopls` |
| gomod | ✓ | | | `gopls` |
@@ -85,6 +85,7 @@
| rust | ✓ | ✓ | ✓ | `rust-analyzer` |
| scala | ✓ | | ✓ | `metals` |
| scheme | ✓ | | | |
+| scss | ✓ | | | `vscode-css-language-server` |
| solidity | ✓ | | | `solc` |
| sql | ✓ | | | |
| sshclientconfig | ✓ | | | |
diff --git a/book/src/keymap.md b/book/src/keymap.md
index aec876a6..c2f99edd 100644
--- a/book/src/keymap.md
+++ b/book/src/keymap.md
@@ -238,6 +238,7 @@ This layer is a kludge of mappings, mostly pickers.
| ----- | ----------- | ------- |
| `f` | Open file picker | `file_picker` |
| `b` | Open buffer picker | `buffer_picker` |
+| `j` | Open jumplist picker | `jumplist_picker` |
| `k` | Show documentation for item under cursor in a [popup](#popup) (**LSP**) | `hover` |
| `s` | Open document symbol picker (**LSP**) | `symbol_picker` |
| `S` | Open workspace symbol picker (**LSP**) | `workspace_symbol_picker` |
@@ -354,6 +355,7 @@ Keys to use within picker. Remapping currently not supported.
| `Enter` | Open selected |
| `Ctrl-s` | Open horizontally |
| `Ctrl-v` | Open vertically |
+| `Ctrl-t` | Toggle preview |
| `Escape`, `Ctrl-c` | Close picker |
# Prompt
diff --git a/docs/releases.md b/docs/releases.md
new file mode 100644
index 00000000..0608a201
--- /dev/null
+++ b/docs/releases.md
@@ -0,0 +1,59 @@
+## Checklist
+
+Helix releases are versioned in the Calendar Versioning scheme:
+`YY.0M(.MICRO)`, for example `22.05` for May of 2022. In these instructions
+we'll use `` as a placeholder for the tag being published.
+
+* Merge the changelog PR
+* Tag and push
+ * `git tag -s -m "" -a && git push`
+ * Make sure to switch to master and pull first
+* Edit the `VERSION` file and change the date to the next planned release
+ * Releases are planned to happen every two months, so `22.05` would change to `22.07`
+* Wait for the Release CI to finish
+ * It will automatically turn the git tag into a GitHub release when it uploads artifacts
+* Edit the new release
+ * Use `` as the title
+ * Link to the changelog and release notes
+* Merge the release notes PR
+* Download the macos and linux binaries and update the `sha256`s in the [homebrew formula]
+ * Use `sha256sum` on the downloaded `.tar.xz` files to determine the hash
+* Link to the release notes in this-week-in-rust
+ * [Example PR](https://github.com/rust-lang/this-week-in-rust/pull/3300)
+* Post to reddit
+ * [Example post](https://www.reddit.com/r/rust/comments/uzp5ze/helix_editor_2205_released/)
+
+[homebrew formula]: https://github.com/helix-editor/homebrew-helix/blob/master/Formula/helix.rb
+
+## Changelog Curation
+
+The changelog is currently created manually by reading through commits in the
+log since the last release. GitHub's compare view is a nice way to approach
+this. For example when creating the 22.07 release notes, this compare link
+may be used
+
+```
+https://github.com/helix-editor/helix/compare/22.05...master
+```
+
+Either side of the triple-dot may be replaced with an exact revision, so if
+you wish to incrementally compile the changelog, you can tackle a weeks worth
+or so, record the revision where you stopped, and use that as a starting point
+next week:
+
+```
+https://github.com/helix-editor/helix/compare/7706a4a0d8b67b943c31d0c5f7b00d357b5d838d...master
+```
+
+A work-in-progress commit for a changelog might look like
+[this example](https://github.com/helix-editor/helix/commit/831adfd4c709ca16b248799bfef19698d5175e55).
+
+Not every PR or commit needs a blurb in the changelog. Each release section
+tends to have a blurb that links to a GitHub comparison between release
+versions for convenience:
+
+> As usual, the following is a summary of each of the changes since the last
+> release. For the full log, check out the git log.
+
+Typically, small changes like dependencies or documentation updates, refactors,
+or meta changes like GitHub Actions work are left out.
\ No newline at end of file
diff --git a/helix-core/src/syntax.rs b/helix-core/src/syntax.rs
index 8d7520c3..9011f835 100644
--- a/helix-core/src/syntax.rs
+++ b/helix-core/src/syntax.rs
@@ -328,29 +328,15 @@ fn read_query(language: &str, filename: &str) -> String {
let query = load_runtime_file(language, filename).unwrap_or_default();
- // TODO: the collect() is not ideal
- let inherits = INHERITS_REGEX
- .captures_iter(&query)
- .flat_map(|captures| {
+ // replaces all "; inherits (,)*" with the queries of the given language(s)
+ INHERITS_REGEX
+ .replace_all(&query, |captures: ®ex::Captures| {
captures[1]
.split(',')
- .map(str::to_owned)
- .collect::>()
+ .map(|language| format!("\n{}\n", read_query(language, filename)))
+ .collect::()
})
- .collect::>();
-
- if inherits.is_empty() {
- return query;
- }
-
- let mut queries = inherits
- .iter()
- .map(|language| read_query(language, filename))
- .collect::>();
-
- queries.push(query);
-
- queries.concat()
+ .to_string()
}
impl LanguageConfiguration {
diff --git a/helix-lsp/src/client.rs b/helix-lsp/src/client.rs
index 9187a61e..f6cec6aa 100644
--- a/helix-lsp/src/client.rs
+++ b/helix-lsp/src/client.rs
@@ -322,6 +322,16 @@ impl Client {
content_format: Some(vec![lsp::MarkupKind::Markdown]),
..Default::default()
}),
+ signature_help: Some(lsp::SignatureHelpClientCapabilities {
+ signature_information: Some(lsp::SignatureInformationSettings {
+ documentation_format: Some(vec![lsp::MarkupKind::Markdown]),
+ parameter_information: Some(lsp::ParameterInformationSettings {
+ label_offset_support: Some(true),
+ }),
+ active_parameter_support: Some(true),
+ }),
+ ..Default::default()
+ }),
rename: Some(lsp::RenameClientCapabilities {
dynamic_registration: Some(false),
prepare_support: Some(false),
@@ -646,7 +656,12 @@ impl Client {
text_document: lsp::TextDocumentIdentifier,
position: lsp::Position,
work_done_token: Option,
- ) -> impl Future