denops.vimを使ってdein.vimでインストールしているプラグインのリポジトリにstarをつける
これはvim advent calendar 2021の16日目の記事としての投稿です。
はじめに
Vimを使っているといろいろなプラグインをインストールすると思います。
私はなんかかっこいいという雑な理由でdein.vimを使ってプラグインをインストールしています。
インストールしているプラグインのリポジトリにコマンドでスターがつけられると便利だなあと思ったのでdenops.vimを使って実験的なプラグインを作ってみました。
denops.vim
denops.vimはTypescriptのランタイムであるDenoを使ってvim/neovimのプラグインを書くフレームワークです。
APIの乖離が進むVim/neovimの両方に対応することができるほか、重い処理をDenoに負担させることで高速なプラグインを書くことができるようです。(個人的にはそこまで大きいプラグインを作ったことが無いので速度の恩恵はあまり受けれてないです)
出来上がったもの
実験なのでまだヘルプ等はありません。ごめんなさい。
中身
githubのREST APIのドキュメントを見てみると。以下のアクセスポイントにPUT
するとスターがつけられるとあります。
https://api.github.com/user/starred/${owner}/${repo}
また、このAPIを叩くためにrepo:public_repo
の権限がついたパーソナルトークンを発行しておく必要があります。
これをDenoで実行できるようにしてみるとこんな感じ
export async function star(owner: string, repo: string, token: string) {
const url = `https://api.github.com/user/starred/${owner}/${repo}`;
const res = await fetch(
url,
{
headers: new Headers({
Authorization: `Bearer ${token}`,
Accept: "application/vnd.github.v3+json",
}),
method: "PUT",
},
);
if (res.status != 204) {
throw new Error(`${res.status} ${res.statusText} ${url}`);
}
}
これをvimから実行できるようにしたのが前述のプラグインです。
(明らかにアクセスするのが推奨されてなさそうなg:dein#_plugins
にアクセスしているのでいつ動かなくなってもおかしくありません)
2021-12-18追記
g:dein#_plugins
ではなく、dein#get()
でも同様の情報が取得できました。
簡単なドキュメントを以下に書いておきます。
-
コマンド
-
deinStar
deinを使ってインストールしているプラグイン全てにスターをつけます
-
-
変数
-
g:dps_dein_star_token
先述したREST APIを実行するためのトークン
-
g:dps_dein_star_ignore_users
スターをつけたくないプラグインのowner(自分など)をリストとして指定
-
できなかったこと
- REST APIでスターをつけてるため、バックグラウンドで処理しているとはいえそこそこ時間がかかる
- GraphQLを使えばいい感じになるかも
- denopsを使わなくてもできそう
- Vitalを使えばDenoに頼らずにWebAPIを叩けそう
参考
-
https://github.com/google/go-github/blob/master/github/activity_star.go
-
https://docs.github.com/en/rest/reference/activity#star-a-repository-for-the-authenticated-user
さいごに
みなさんも年末年始でよいVim活を!!