#语言服务器 #tremor #错误 #编辑器 #补全 #建议 #协议

app tremor-language-server

震颤语言服务器(Trill)

26个发布版本

0.13.0-rc.112022年12月21日
0.13.0-rc.92022年11月11日
0.12.4 2022年6月24日
0.11.7 2021年9月28日
0.7.3 2020年2月24日

#105 in 文本编辑器

Apache-2.0

50KB
876

震颤语言服务器(Trill)

用于编辑器和IDE的WIP服务器,与tremor语言一起使用。遵循语言服务器协议

功能

诊断

tremor脚本解释器错误(您输入时或文件保存时),带有修复提示(如适用)

好主意:应用错误中的修复建议

补全

模块函数的代码补全(您输入/按需)-- 包含签名/文档信息的功能名称以及参数的占位符。

好主意:变量的代码补全以及其他语言结构

悬停

鼠标悬停(或编辑器命令)上的诊断和函数文档

好主意:变量的文档(例如:赋值信息)

导航

好主意:查找所有引用,符号搜索

以后:转到定义,预览定义,符号列表(当tremor脚本有函数时)

重构

好主意:重命名所有引用

快速入门

对于安装

RUSTFLAGS='-C target-cpu=native' cargo install tremor-language-server

确保 .cargo/bin 在您的 $PATH 中(或通过cargo将其安装到$PATH中的某个位置)。

如果您正在开发语言服务器

git clone [email protected]:tremor-rs/tremor-language-server.git
cd tremor-language-server

# build and link somewhere in your path (for easy access/use in testing via editors)
cargo build
ln -s target/debug/tremor-language-server ~/bin/ # or anywhere in your $PATH

# to install the release build
cargo install --path . --root ~/ # make sure ~/bin/ is in your $PATH

VS Code设置

请参阅以下说明

https://github.com/tremor-rs/tremor-vscode

Vim设置

先决条件:安装https://github.com/tremor-rs/tremor-vim,以便vim了解tremor文件类型(您还将获得语法高亮显示作为额外奖励)。

ale

对于与vim一起使用,我们有一个与ale分叉的版本,可以与tremor语言服务器交互

https://github.com/anupdhml/ale/tree/tremor

请按照插件安装说明操作。如果您使用vim-plug,这将执行

Plug 'anupdhml/ale', { 'branch': 'tremor' }

与tremor语言服务器配合使用的Vim和ale设置

" completion menu
set completeopt=menuone,longest,popup " always show the menu, insert longest match, use popup window for extra info
"set completepopup=border:off          " remove the border from the completion popup window

" turn on omnicomplete based on ale
set omnifunc=ale#completion#OmniFunc

" enable ale completion (as you type), where available
"let g:ale_completion_enabled = 1

" turn on vim mouse support in all modes (for hover info)
set mouse=a

" show hover information on mouse over (vim mouse support should be turned on)
" xterm2 makes hover work with tmux as well
let g:ale_set_balloons = 1
set ttymouse=xterm2

" only run linters named in ale_linters settings
let g:ale_linters_explicit = 1

" active linters
let g:ale_linters = {
\   'tremor': ['tremor-language-server'],
\   'trickle': ['tremor-language-server'],
\}

" when to run linting/fixing. choose as desired
"
" aggressive
let g:ale_fix_on_save = 1
let g:ale_lint_on_text_changed = 'always'
let g:ale_lint_on_enter = 1
let g:ale_lint_on_insert_leave = 1
"
" conservative
"let g:ale_lint_on_text_changed = 'never'
"let g:ale_lint_on_enter = 0
"let g:ale_lint_on_insert_leave = 0

" key mappings
nmap <silent> <leader>j <Plug>(ale_next_wrap)
nmap <silent> <leader>k <Plug>(ale_previous_wrap)
nmap <silent> <leader>/ <Plug>(ale_hover)
nmap <silent> <leader>? <Plug>(ale_detail)
nmap <silent> <leader>] <Plug>(ale_go_to_definition)
nmap <silent> <leader># <Plug>(ale_find_references)

您可能希望将ALE计数器显示在vim状态行中。如果您使用lightline

" for showing linter errrors/warnings. depends on lightline-ale
let g:lightline.component_expand = {
    \  'linter_checking': 'lightline#ale#checking',
    \  'linter_warnings': 'lightline#ale#warnings',
    \  'linter_errors': 'lightline#ale#errors',
    \  'linter_ok': 'lightline#ale#ok',
    \ }
let g:lightline.component_type = {
    \  'linter_checking': 'left',
    \  'linter_warnings': 'warning',
    \  'linter_errors': 'error',
    \  'linter_ok': 'left',
    \ }
let g:lightline#ale#indicator_checking = ''
let g:lightline#ale#indicator_warnings = '▲'
let g:lightline#ale#indicator_errors = '✗'
let g:lightline#ale#indicator_ok = '✓'

" configure lightline components
let g:lightline.active = {
    \   'left':  [ ['mode', 'paste'],
    \              ['fugitive', 'readonly', 'filename', 'modified'] ],
    \   'right': [ [ 'lineinfo' ],
    \              [ 'percent' ],
    \              [ 'fileformat', 'fileencoding', 'filetype' ],
    \              ['linter_checking', 'linter_errors', 'linter_warnings', 'linter_ok' ] ]
    \ }

" ale indicators (aligned with indicators used in lightline-ale)
" 2 chars to cover the full sign width
let g:ale_sign_warning = '▲▲'
let g:ale_sign_error = '✗✗'

关于更多 ale 配置和 vim 配置

https://github.com/anupdhml/dotfiles/blob/virtualbox_new/data/.vimrc

coc-nvim

按照他们的README说明安装 coc.nvim。

启动 vim 并输入 :CocConfig 并作为附加条目输入以下内容

{
  "tremor": {
    "command": "tremor-language-server",
    "fileTypes": ["tremor", "trickle"]
  }
}

其他 VIM 语言服务器客户端

如果您不想使用 ale 或 coc-nvim,这些 vim 插件也可以作为服务器客户端很好地工作

注意

  • 如果您在终端中使用 vim 并且没有看到错误诊断或悬停时的函数文档,请检查您使用的 vim 版本是否已编译了气球支持 -- 输出 vim --version 应显示项目 +balloon_eval+balloon_eval_term。如果不是,您将需要找到适合您环境的带有内置支持的 vim 软件包(或自己编译 vim)。例如,对于 mac,这可能意味着通过 homebrew 安装 macvim
  • 默认情况下,vim 的 omni-completion 项(例如:在输入 module_name:: 后的 tremor 函数名称)通过 Ctrl-x Ctrl-o 触发,而正常的关键字完成是通过 Ctrl-p/Ctrl-n 触发。如果您希望这些有更易用的快捷键(例如:Tab),可以查看类似 VimCompletesMeSupertab 的扩展。

待办事项

  • 集成到 emacs
  • 支持对 trickle 和 tremor 文件的并行编辑
  • 改进调试
  • 添加测试
  • 处理多个脚本错误的能力
  • 在 tower 和 json rpc crates 中使用 simd-json?
  • 无需编译的发行版

依赖项

~42–59MB
~1M SLoC