💨

neovimにrust-analyzer(インストールメモ)

2023/02/23に公開

とりあえずneovimにプラグインマナージャー(dein.vim)のインストールが完了したのでRustの開発(勉強)を便利にするrust-analyzer(Rustの入力補完や型チェック、文法ミスのチェックなどを行うための言語サーバープロトコル(Language Server Protocol、lsp))を入れることにしました。
https://zenn.dev/technicarium/articles/92a60ffaab7d66

rust-analyzerを使うためにcoc.nvimプラグイン、さらにcoc.nvimが使用するnode.jsのインストールも必要なのでそれぞれインストールしました。

ただcoc.nvimのインストールに四苦八苦しなんとかインストールは完了したものの色々試したのであくまでも作業記録です。

node.jsインストール

Raspberry Pi OS標準のnode.jsは12.22.12と若干古そうなので公式サイトの手順でなるべく新しいバージョンをインストールしました。

$ curl -fsSL https://deb.nodesource.com/setup_18.x | sudo -E bash -

$ sudo apt-get install -y nodejs
パッケージリストを読み込んでいます... 完了
依存関係ツリーを作成しています... 完了        
状態情報を読み取っています... 完了        
以下のパッケージが新たにインストールされます:
  nodejs
アップグレード: 0 個、新規インストール: 1 個、削除: 0 個、保留: 4 個。
27.9 MB のアーカイブを取得する必要があります。
この操作後に追加で 186 MB のディスク容量が消費されます。
取得:1 https://deb.nodesource.com/node_18.x bullseye/main arm64 nodejs arm64 18.14.2-deb-1nodesource1 [27.9 MB]
27.9 MB を 5秒 で取得しました (5,423 kB/s)
以前に未選択のパッケージ nodejs を選択しています。
(データベースを読み込んでいます ... 現在 102107 個のファイルとディレクトリがインストールされてい)
.../nodejs_18.14.2-deb-1nodesource1_arm64.deb を展開する準備をしています ...
nodejs (18.14.2-deb-1nodesource1) を展開しています...
nodejs (18.14.2-deb-1nodesource1) を設定しています ...
man-db (2.9.4-2) のトリガを処理しています ...
$ node --version
v18.14.2

yarnインストール

$ sudo npm install -g yarn

npm ERR! code ECONNREFUSED
npm ERR! syscall connect
npm ERR! errno ECONNREFUSED
npm ERR! FetchError: request to https://registry.npmjs.org/yarn failed, reason: connect ECONNREFUSED 2606:4700::6810:1623:443
npm ERR!     at ClientRequest.<anonymous> (/usr/lib/node_modules/npm/node_modules/minipass-fetch/lib/index.js:130:14)
npm ERR!     at ClientRequest.emit (node:events:512:28)
npm ERR!     at TLSSocket.socketErrorListener (node:_http_client:496:9)
npm ERR!     at TLSSocket.emit (node:events:524:35)
npm ERR!     at emitErrorNT (node:internal/streams/destroy:151:8)
npm ERR!     at emitErrorCloseNT (node:internal/streams/destroy:116:3)
npm ERR!     at process.processTicksAndRejections (node:internal/process/task_queues:82:21)
npm ERR!  FetchError: request to https://registry.npmjs.org/yarn failed, reason: connect ECONNREFUSED 2606:4700::6810:1623:443
npm ERR!     at ClientRequest.<anonymous> (/usr/lib/node_modules/npm/node_modules/minipass-fetch/lib/index.js:130:14)
npm ERR!     at ClientRequest.emit (node:events:512:28)
npm ERR!     at TLSSocket.socketErrorListener (node:_http_client:496:9)
npm ERR!     at TLSSocket.emit (node:events:524:35)
npm ERR!     at emitErrorNT (node:internal/streams/destroy:151:8)
npm ERR!     at emitErrorCloseNT (node:internal/streams/destroy:116:3)
npm ERR!     at process.processTicksAndRejections (node:internal/process/task_queues:82:21) {
npm ERR!   code: 'ECONNREFUSED',
npm ERR!   errno: 'ECONNREFUSED',
npm ERR!   syscall: 'connect',
npm ERR!   address: '2606:4700::6810:1623',
npm ERR!   port: 443,
npm ERR!   type: 'system',
npm ERR!   requiredBy: '.'
npm ERR! }
npm ERR! 
npm ERR! If you are behind a proxy, please make sure that the
npm ERR! 'proxy' config is set properly.  See: 'npm help config'

npm ERR! A complete log of this run can be found in:
npm ERR!     /home/hoto/.npm/_logs/2023-02-22T14_37_59_190Z-debug-0.log

いきなりエラー、調べてみるとどうやらIPv6で接続できないようです。

$ curl -v registry.npmjs.org

*   Trying 2606:4700::6810:1123:80...
* connect to 2606:4700::6810:1123 port 80 failed: 接続を拒否されました
*   Trying 2606:4700::6810:1223:80...
* connect to 2606:4700::6810:1223 port 80 failed: 接続を拒否されました
*   Trying 2606:4700::6810:1423:80...
* connect to 2606:4700::6810:1423 port 80 failed: 接続を拒否されました
*   Trying 2606:4700::6810:1723:80...
* connect to 2606:4700::6810:1723 port 80 failed: 接続を拒否されました
*   Trying 2606:4700::6810:1623:80...
* connect to 2606:4700::6810:1623 port 80 failed: 接続を拒否されました
*   Trying 2606:4700::6810:1523:80...
* connect to 2606:4700::6810:1523 port 80 failed: 接続を拒否されました
*   Trying 2606:4700::6810:1923:80...
* connect to 2606:4700::6810:1923 port 80 failed: 接続を拒否されました
*   Trying 2606:4700::6810:1823:80...
* connect to 2606:4700::6810:1823 port 80 failed: 接続を拒否されました
*   Trying 2606:4700::6810:1023:80...
* connect to 2606:4700::6810:1023 port 80 failed: 接続を拒否されました
*   Trying 2606:4700::6810:1b23:80...
* connect to 2606:4700::6810:1b23 port 80 failed: 接続を拒否されました
*   Trying 2606:4700::6810:1a23:80...
* connect to 2606:4700::6810:1a23 port 80 failed: 接続を拒否されました
*   Trying 2606:4700::6810:1323:80...
* connect to 2606:4700::6810:1323 port 80 failed: 接続を拒否されました
*   Trying 104.16.18.35:80...
* Connected to registry.npmjs.org (104.16.18.35) port 80 (#0)
> GET / HTTP/1.1
> Host: registry.npmjs.org
> User-Agent: curl/7.74.0
> Accept: */*
> 
* Mark bundle as not supporting multiuse
< HTTP/1.1 301 Moved Permanently
< Date: Wed, 22 Feb 2023 14:44:27 GMT
< Content-Type: text/plain;charset=UTF-8
< Content-Length: 0
< Connection: keep-alive
< Location: https://registry.npmjs.org/
< Server: cloudflare
< CF-RAY: 79d87ff71cf63469-NRT
< 
* Connection #0 to host registry.npmjs.org left intact

IPv4のアドレスを確認

$ host registry.npmjs.org

registry.npmjs.org has address 104.16.21.35

/etc/hostsにIPv4のアドレスを設定
104.16.21.35 registry.npmjs.org registry.yarnpkg.com

$ sudo npm install -g yarn

added 1 package in 3s

coc.nvimプラグインをインストール

init.vimに以下を追加
call dein#add('neoclide/coc.nvim')

neovimを起動すると以下のエラーが表示

[coc.nvim] build/index.js not found, please install dependencies and compile coc.nvim by: yarn in
[coc.nvim] build/index.js not found, please install dependencies and compile coc.nvim by: yarn in
stall

調べてみるとneovimのコマンドラインで以下のコマンドを実行する手順が紹介されていたので試してみる

: call coc#util#install()
yarn install v1.22.19                                                         
[1/4] Resolving packages...                                                   
[2/4] Fetching packages...                                                   
[3/4] Linking dependencies...                                                 
warning Workspaces can only be enabled in private projects.                   
[4/4] Building fresh packages...                                             
$ node esbuild.js                                                             
fatal: not a git repository (or any of the parent directories): .git         
Error: Cannot find module 'esbuild'                                           
Require stack:                                                               
- /home/hoto/.cache/dein/repos/github.com/neoclide/coc.nvim/esbuild.js       
    at Module._resolveFilename (node:internal/modules/cjs/loader:1090:15)     
    at Module._load (node:internal/modules/cjs/loader:934:27)                 
    at Module.require (node:internal/modules/cjs/loader:1157:19)             
    at require (node:internal/modules/helpers:119:18)                         
    at start (/home/hoto/.cache/dein/repos/github.com/neoclide/coc.nvim/esbuild.js:72:9)   
    at Object.<anonymous> (/home/hoto/.cache/dein/repos/github.com/neoclide/coc.nvim/esbuild.js:1
12:1)                                                                         
    at Module._compile (node:internal/modules/cjs/loader:1275:14)             
    at Module._extensions..js (node:internal/modules/cjs/loader:1329:10)     
    at Module.load (node:internal/modules/cjs/loader:1133:32)                 
    at Module._load (node:internal/modules/cjs/loader:972:12) {               
  code: 'MODULE_NOT_FOUND',        
 requireStack: [                                                             
    '/home/hoto/.cache/dein/repos/github.com/neoclide/coc.nvim/esbuild.js'   
  ]                                                                           
}                                                                                                
Done in 108.11s.                                                             [Process exited 0]

エラーのために試したこと

1.gitの設定をしていなかったので追加(失敗)
git config --global user.name "xxxxxx"
git config --global user.email "xxxx@xxxxxx"
2.node.js v19からv18にダウングレード(失敗)
3.esbuildをnpmで手動インストール(失敗)
sudo npm install --save-exact esbuild

成功した手順

偶然見つけたサイトの手順に従いcoc.nvimのフォルダでyarn installを実行

$ find ~/ -name coc.nvim
/home/hoto/.cache/dein/repos/github.com/neoclide/coc.nvim
$ cd /home/hoto/.cache/dein/repos/github.com/neoclide/coc.nvim
$ sudo yarn install
yarn install v1.22.19
warning ../../../../../../package.json: No license field
[1/5] Validating package.json...
[2/5] Resolving packages...
[3/5] Fetching packages...
[4/5] Linking dependencies...
warning Workspaces can only be enabled in private projects.
[5/5] Building fresh packages...
$ node esbuild.js
Done in 105.29s.

必要か分からないが以下のコマンドも続けて実行

sudo yarn build
yarn run v1.22.19
warning ../../../../../../package.json: No license field
$ node esbuild.js
Done in 1.10s.

coc-rust-analyzerとrust-analyzerインストール

neovimのコマンドモードで以下を実行しcoc-rust-analyzerをインストール

CocInstall coc-rust-analyzer

インストールされた模様

試しにテスト用のmain.rsを読み込んでみるとrust-analyzerをインストールするか聞かれるので1を選びインストールを実施

使い方はおいおい覚えるとしてなんとかインストール完了した模様。

Discussion