26个发布版本
0.13.0-rc.11 | 2022年12月21日 |
---|---|
0.13.0-rc.9 | 2022年11月11日 |
0.12.4 | 2022年6月24日 |
0.11.7 | 2021年9月28日 |
0.7.3 | 2020年2月24日 |
#105 in 文本编辑器
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
),可以查看类似 VimCompletesMe 或 Supertab 的扩展。
待办事项
- 集成到 emacs
- 支持对 trickle 和 tremor 文件的并行编辑
- 改进调试
- 添加测试
- 处理多个脚本错误的能力
- 在 tower 和 json rpc crates 中使用 simd-json?
- 无需编译的发行版
依赖项
~42–59MB
~1M SLoC