げっとシステムログ

WEB開発メモ

coc.nvim で Rust Language Server する

vim で Rust するときの設定をまとめる。

CONTENTS
  1. 出来上がったもの
  2. rust.vim のインストール
  3. 必要なコンポーネントのインストール
  4. CocConfig の設定
  5. ALE の設定
  6. まとめ
  7. 参考資料
ENVIRONMENTS

出来上がったもの

rust.vim の設定。

[[plugins]]
repo = 'rust-lang/rust.vim'
hook_add = '''
let g:rustfmt_autosave = 0
'''
on_ft = ['rust']

必要なコンポーネントのインストール。

rustup component add rls rust-analysis rust-src

CocConfig の設定。

{
  "languageserver": {
    "rust": {
      "command": "rustup",
      "args": ["run", "stable", "rls"],
      "filetypes": ["rust"]
    }
  }
}

ALE による、保存後の整形の設定。

[[plugins]]
repo = 'dense-analysis/ale'
hook_add = '''
let g:ale_fix_on_save = 1
let g:ale_fixers = {
\   'rust': ['rustfmt'],
\}
let g:ale_rustfmt_executable = 'rustfmt'
'''

TOP

rust.vim のインストール

基本的なプラグインとして rust.vim をインストールしておく。 以下は dein の設定内容。

[[plugins]]
repo = 'rust-lang/rust.vim'
hook_add = '''
let g:rustfmt_autosave = 0
'''
on_ft = ['rust']

保存後の整形は ALE に任せるので、g:rustfmt_autosave = 0 に設定しておく。

というよりも、rust.vim から rustfmt をうまく呼びだせず、この設定を off にしていたことを思い出した。 rust.vim から rustfmt できるなら、ALE の設定は必要ない。

  • Rust をいじっていた時期を振り返ってみたらもう1年か…

TOP

必要なコンポーネントのインストール

Language Server として、rust-lang/rls を使用する。 README によれば、rlsrust-analysisrust-src が必要。

rustup component add rls rust-analysis rust-src

TOP

CocConfig の設定

Language Server の起動には coc.nvim を使用している。 :CocConfig に以下の設定を追加する。

{
  "languageserver": {
    "rust": {
      "command": "rustup",
      "args": ["run", "stable", "rls"],
      "filetypes": ["rust"]
    }
  }
}

これで補完が効くようになれば成功。

TOP

ALE の設定

保存後の整形は ALE で行なっている。

[[plugins]]
repo = 'dense-analysis/ale'
hook_add = '''
let g:ale_fix_on_save = 1
let g:ale_fixers = {
\   'rust': ['rustfmt'],
\}
let g:ale_rustfmt_executable = 'rustfmt'
'''

rust.vim で rustfmt にアクセスできれば、この設定は必要ないはず。

TOP

まとめ

vim で rust するときの設定をまとめた。

Language Server の力は偉大。

TOP

参考資料

TOP