An LSP tool that provides custom code snippets and Code Actions for Helix Editor.
- Completion: snippets (helix#9801)
- CodeAction: actions
- Document Color (helix#12308)
From crate
cargo install --force hx-lsp
From source
git clone https://github.com/erasin/hx-lsp.git
cd hx-lsp
cargo install --path .
Modify the language configuration file languages.toml
for Helix Editor.
$XDG_CONFIG_HOME/helix/languages.toml
: Helix Configuration file.WORKSPACE_ROOT/.helix/languages.toml
: Configuration file under project workspace root.
About 'WORKSPACE_ROOT', It is read the 'rootPath' from the 'initialize' provided by Helix, when there are multiple levels of rootPath(
language.roots
of languages.toml), It will read the closest of root '.helix'.
Example, Add support for markdown.
[language-server.hx-lsp]
command = "hx-lsp"
[[language]]
name = "markdown"
language-servers = [ "marksman", "markdown-oxide", "hx-lsp" ]
# or only use choose features
language-servers = [ "marksman", "markdown-oxide", { name = "hx-lsp", only-features = [ "document-colors" ] } ]
About
language id
, Read helix/languages.toml and helix wiki language server configurations。
helix lsp 使用
only-features
和except-features
来过滤功能。 hx-lsp 支持
- completion
- code-action
- document-colors
The Configuration file supports the jsonc
format.
Comment style:
// ...
,/* ... */
,# ...
。
Snippets file loading path:
$XDG_CONFIG_HOME/helix/snippets/
WORKSPACE_ROOT/.helix/snippets/
Actions file loading path:
$XDG_CONFIG_HOME/helix/actions/
WORKSPACE_ROOT/.helix/actions/
In LSP textDocument/didOpen
request, The Configuration file with name that is language_id.json
will be loading.
Unsupported Dynamic loading config. If you modify configuration file, use
:lsp-restart
to restart lsp and reload the file.
Code Snippets support vscode snippets format. The same file suffix supports global suffixes such as. code-snippets
and language pack suffixes such as. json
.
~~For better use snippet completion, Use helix master and merge helix#9081 Add a snippet system to support smart-tab。 ~~
.
└── snippets
├── global.code-snippets
├── html.json
└── markdown.json
Snippet Format:
- name:
String
, index - prefix:
String
OrVec<String>
, editor completion item - body:
String
OrVec<String>
, snippet connent - description:
Option<String | Vec<String>>
Tip content
.
└── actions
├── html.json
└── markdown.json
Snippet Formatter:
- title:
String
helix editor show Code Action Item - flter:
String
OrVec<String>
Shell script: returntrue
,1
or empty , - shell:
String
OrVec<String>
Shell script: take shell script - description:
Option<String | Vec<String>>
Tip content
/* actions/markdown.json */
{
"bold": {
"title": "bold",
"filter": "",
"shell": ["echo -n **${TM_SELECTED_TEXT}**"],
"description": "bold"
},
"italic": {
"title": "italic",
"filter": "",
"shell": ["echo -n _${TM_SELECTED_TEXT}_"],
"description": "italic"
}
}
/* actions/go.json */
{
"run main": {
"title": "run main",
"filter": "[[ \"$TM_CURRENT_LINE\" == *main* ]] && echo true || echo false",
"shell": [
"alacritty --hold --working-directory ${TM_DIRECTORY} -e go run ${TM_FILENAME};"
"notify-send \"Golang\" \"RUN: ${TM_FILENAME}\""
],
"description": "go run main"
},
"run main in tmux": {
"title": "tmux: go run main",
"filter": "[[ \"$(cat)\" == *main* ]] && echo true || echo false",
"shell": [
"tmux split-window -h -c ${WORKSPACE_FOLDER}; tmux send 'go run ${TM_FILENAME}' Enter"
],
"description": "go run main"
}
}
Support variable for snippet body and action shell.
Read vscode Variables
Support like $UUID
和 ${UUID}
。
path
TM_SELECTED_TEXT
TM_CURRENT_LINE
TM_CURRENT_WORD
TM_LINE_INDEX
TM_LINE_NUMBER
TM_FILENAME
TM_FILENAME_BASE
TM_DIRECTORY
TM_FILEPATH
RELATIVE_FILEPATH
CLIPBOARD
WORKSPACE_NAME
WORKSPACE_FOLDER
time
CURRENT_YEAR
CURRENT_YEAR_SHORT
CURRENT_MONTH
CURRENT_MONTH_NAME
CURRENT_MONTH_NAME_SHORT
CURRENT_DATE
CURRENT_DAY_NAME
CURRENT_DAY_NAME_SHORT
CURRENT_HOUR
CURRENT_MINUTE
CURRENT_SECOND
CURRENT_SECONDS_UNIX
CURRENT_TIMEZONE_OFFSET
other
RANDOM
RANDOM_HEX
UUID
- hex
- #ffffff; support hex color
- rgb
- rgb(255, 255, 255) supports integers
- rgb(2.0, 255.0, 255.0) supports floating-point values
- rgb(100%, 0%, 50%) supports percentages
- rgba(1.0, 0.0, 0.0, 0.5)
- hsl
- hsl(240, 50%, 50%) hue 0-360 degrees, saturation and lightness in percentages.
- hsl(180, 0.5, 0.5) floating-point values
- hsla(300, 100%, 100%, 0.5)
- hsv
- hsv(300, 100%, 100%) hue 0-360 degrees, saturation and value in percentages.
- hsv(180, 0.5, 0.5) floating-point values
- hsva(180, 0.5, 0.5, 0.5)
- srgb(1.0,0.0,0.0)
- srgba(1.0, 0.0, 0.0, 0.8)