sbt server hello world

less than 1 minute read

前言

sbt 在今天发布了v1.1.0 版本,新增了sbt-server 功能,支持Language Server Protocol 3.0. eed3si9n 写了一个neovim 插件 支持sbt-server, 我按照这篇文档 进行了安装尝试

安装

  • 安装neovim 插件

    Plug 'autozimu/LanguageClient-neovim', { 'do': ':UpdateRemotePlugins' }
    
  • 下载sbt-server-stdio.js 到本地, 例如~/.vim/sbt-server-stdio.js

  • 在neovim中添加如下配置

    let g:LanguageClient_autoStart = 1 " 启动后自动连接sbt-server
    
    let g:LanguageClient_serverCommands = {
         "\ 'scala': ['node', expand('~/.vim/sbt-server-stdio.js')] " 指向sbt-server-stdio.js的本地位置
         "\ }
    
    nnoremap <silent> gd :call LanguageClient_textDocument_definition()<CR> "将快捷键gd 定义为跳转到声明位置
    

测试

  • 声明查找

    • 执行gd 后提示server 无法启动

      vim 插件是通过LanguageClient_serverCommands 建立与sbt-server 的socket 链接,这要求启动vim 时sbt-server 已经启动或在sbt-server 启动后执行LanguageClientStart 命令。 我在启动sbt后再打开vim就解决了这个问题。

    • 执行gd 后提示Not found

      sbt-server 是通过已编译的文件对声明进行查找,在我第一次执行gd 时整个工程并没有进行compile, 所以出现了Not found 错误。在sbt 中执行compile 后终于可以正确跳转啦。

    • 在测试代码中执行gd 无效

      当我在测试代码中执行gd 时仍然提示Not found,我发现sbt compile 只会编译功能代码,测试代码只会在sbt test时编译,可能是这个原因导致的gd 无效,需要进一步定位解决。

  • 错误提示

    当我编辑完源文件并保存后,sbt 会自动进行compile,也可以在vim 中显示编译错误,并给出错误的行和列

评价

从功能上讲sbt-server 很强大,可以支持目前IDE 的大多数功能。但鉴于刚刚发布,vim 插件还有待完善,和ensime 在使用体验上还有一定差距。

Updated:

Comments