LoginSignup
3
1

More than 1 year has passed since last update.

denops.vimを使ってdein.vimでインストールしているプラグインのリポジトリにstarをつける

Last updated at Posted at 2021-12-15

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を叩けそう

参考

さいごに

みなさんも年末年始でよいVim活を!!

3
1
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
1