hx-lsp

Crates.iohx-lsp
lib.rshx-lsp
version0.1.2
sourcesrc
created_at2024-05-17 02:34:20.104648
updated_at2024-07-10 14:24:26.999855
descriptionOne LSP server support snippets and actions for helix editor.
homepage
repositoryhttps://github.com/erasin/hx-lsp
max_upload_size
id1242754
size109,335
Erasin Wang (erasin)

documentation

README

hx-lsp

中文文档 中文文档

An LSP tool that provides custom code snippets and Code Actions for Helix Editor.

features

  • Completion: snippets
  • CodeAction: actions

Install

From crate

cargo install --force hx-lsp

From source

git clone https://github.com/erasin/hx-lsp.git
cd hx-lsp
cargo install --path .

Use

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

Configuration

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.

Completion: snippets

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 Or Vec<String>, editor completion item
  • body: String Or Vec<String>, snippet connent
  • description: Option<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",
  },
}

CodeAction: actions

.
└── actions
    ├── html.json
    └── markdown.json

Snippet Formatter:

  • title: String helix editor show Code Action Item
  • catch: String catch line content,regex ,code action
  • shell: String Or Vec<String> , take shell script
  • description: Option<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

Variables

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
Commit count: 45

cargo fmt