Coc.nvimを触ってみようアドベントカレンダー 24日目 – coc-extension

とっても楽しいcoc.nvimを触ってみようというアドベントカレンダーです。24日目はcoc-extension。coc拡張を自作する上では避けて通れません。解説が多く存在するわけではないため、既存拡張の実装等を参考にする必要があります。
2021.12.24

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

Coc.nvimを触ってみよう Advent Calendar 2021 24日目です。

今回は coc-extension です。

coc-extension について

coc.nvim用拡張を作成する時に用いるスケルトンとなります。沢山拡張を紹介してきましたが、幾つか正常にリリースされていないためか期待通りには動かずお蔵入りした原稿もあります。動かない原因を追える様になるには作れることが一番と思い、とりあえず取っ掛かりを触ってみました。

必要となるのはPOSIX仕様のターミナル環境(bash、zsh、他)と以下の通り。

  • git
  • Nodejs(>=8.10.0)
  • yarn (>=1.22.4)
  • Neovim 0.4.4+
  • coc.nvim 0.0.78

coc-extension を使ってセットアップする

yarnにてプロジェクトを作ります。今回は適当にcoc-s3にて。

% yarn create coc-extension coc-s3
yarn create v1.22.17
[1/4] ?  Resolving packages...
[2/4] ?  Fetching packages...
[3/4] ?  Linking dependencies...
[4/4] ?  Building fresh packages...
success Installed "create-coc-extension@0.6.3" with binaries:
      - create-coc-extension
? Project title: coc-s3
? Project description:
? Author full name: haoyayoi
? Author email address: st.hao.yayoi@gmail.com
? Initialize a git repository? Yes
? Install node dependencies? Yes

  installing node dependencies...

yarn install v1.22.17
info No lockfile found.
[1/5] Validating package.json...
[2/5] Resolving packages...
[3/5] Fetching packages...
[4/5] Linking dependencies...
[5/5] Building fresh packages...
success Saved lockfile.
$ node esbuild.js
Done in 25.86s.

coc-s3 is created. Now "set runtimepath^=/Users/path/to/coc-s3" in vimrc/init.vim, open vim and you will see "[coc.nvim] coc-s3 works!" in vim messages.
✨  Done in 485.70s.

set runtimepath^=......init.vim に追加しておきます。

settings.json反映用の実装

:CocConfig にて適用される設定はpackage.jsonの contributes 以下を編集します。

coc-xxx.enabledが初期設定として含まれているものの、contributes 以下にあるとしても処理に自動反映されるわけではなく、そこは個別での追加実装が必要です。

まずは enabled が反映されるようにしてみます。

src/index.ts を開き、7行目辺りに以下4列を加えてみます。

  const config = workspace.getConfiguration('coc-s3');
  const isEnable = config.get<boolean>('enabled', true);
  if (!isEnable) {
    return;
  }

workspaceについては行頭で coc.nvim からimportされているので利用可能です。

Deployについて

基本はGitHubにパブリッシュするだけです。インストールはinit.vimへ以下のような一文をいれておきます。

  call dein#add('haoyayoi/coc-s3', {'tag': '', 'do': 'yarn install --frozen-lockfile'})

完成後に一般公開したいのであればnpmへのDeployを検討しましょう。

あとがき

今回は以下の記事を参考にしてみました。本当に入り口であるため、作り込みたい場合はnodejsの知識や他のcoc拡張の実装を参考にするのもよさそうです。