Crates.io | hx-lsp |
lib.rs | hx-lsp |
version | 0.1.2 |
source | src |
created_at | 2024-05-17 02:34:20.104648 |
updated_at | 2024-07-10 14:24:26.999855 |
description | One LSP server support snippets and actions for helix editor. |
homepage | |
repository | https://github.com/erasin/hx-lsp |
max_upload_size | |
id | 1242754 |
size | 109,335 |
An LSP tool that provides custom code snippets and Code Actions for Helix Editor.
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" ]
About
language id
, Read helix/languages.toml and helix wiki language server configurations。
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:
String
, indexString
Or Vec<String>
, editor completion itemString
Or Vec<String>
, snippet connentOption<String>
, Tip{
"markdown a": {
// name
"prefix": "mda", // string
"body": "mda in .helix: ${1:abc} : ${2:cde}", // string
"description": "test a info content in .helix",
},
"markdown b": {
"prefix": [
// array
"mdb",
],
"body": "mdb: ${1:abc} : ${2:cde}", // string
"description": "test b info content",
},
"markdown c": {
"prefix": [
// array
"mdc",
"mdd",
],
"body": [
// array
"mda: ${1:abc} : ${2:cde}",
"test",
],
"description": "test c,d info content",
},
}
.
└── actions
├── html.json
└── markdown.json
Snippet Formatter:
String
helix editor show Code Action ItemString
catch line content,regex ,code actionString
Or Vec<String>
, take shell scriptOption<String>
Tip content/* actions/go.json */
{
"run main": {
"title": "go run main",
"catch": "func main",
"shell": [
"alacritty --hold --working-directory ${TM_DIRECTORY} -e go run ${TM_FILENAME}"
],
"description": "go run main"
},
"run main in tmux": {
"title": "tmux: go run main",
"catch": "func main",
"shell": [
"tmux split-window -h -c ${WORKSPACE_FOLDER};",
"tmux send 'go build' Enter"
],
"description": "go run main"
}
}
/* test */
{
"tmux split window helix": {
"title": "tmux split window in project",
"catch": "fn",
"shell": [
"tmux split-window -h",
"tmux send \"cd ${WORKSPACE_FOLDER}\n\""
],
"description": "tmux split and open helix in project"
}
}
catch:
regex line
selected content
match in regex
Support variable for snippet body and action shell.
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
action catch
CATCH1..9