tyankatsu’s blog

カレーと炭酸が苦手なほうれん草好きマンの技術ブログとか

eslint-plugin-gridsomeを作った

www.npmjs.com

VueのSFCのカスタムブロックに何も当たらない

以前こんな記事を書くぐらいGridsomeに魅了されたわけですが、一つ気になることがありました。
それはESlintのfix、もしくはPrettierがカスタムブロックに効かないということです。

著者はVSCodeでVeturを使用しSFCでVueを書いています。
Gridsomeは<page-query><static-query>といったGridsome独自のカスタムブロックにGraphQLを書き、Dataを拾ってきます。
このカスタムブロックは現状Vue公式が正式に認めたブロックではないので、公式が作成しているeslint-plugin-vueがもちろん対応しているわけもなく、最近Vueに対応したPrettierもこの独自ブロックに対応しているわけでもありません。

脱線しますが、Veturはカスタムブロックのシンタックスハイライトが定義可能です。詳しくはこちらを御覧ください。
現状graphqlという項目がありませんが、こちらのissueで取り上げられています。

Gridsomeにissueを立てる

既にこのことに関して構想があるかもしれないので、issueを立てました。

github.com

しかし反応が全然ありませんでした。
「もうこの際自分で作ってみて提案するか。駄目だったとしてもいい経験になるし」という考えから、自分で作ってみることにしました。

ESlintのルール作成

PrettierかESlintか

Prettierにはpluginがいくつかありますが、それはPrettierが現在対応していない言語の開発用パッケージ(後に本体に組み込まれる)という認識でした。 現段階ではどっちにしようか決めかねてましたが、Prettierのプラグインではなさそうかも??って思ってました。

ESlintのルールの作り方を調べる

ESlintの公式には開発者向けのページが存在します。
その中でも著者はRuleを作りたいわけですので、こちらのページを眺めました。

挫折

というわけで、全く理解ができませんでした。
そもそもASTがわかってなかったわけです。

eslint-jpにてissueを立てる

途方に暮れているとこちらの記事を発見しました。

qiita.com

早速質問させていただきました。

github.com

同時にこちらの記事を参考にルールの作り方もざっくり理解しました。

qiita.com

Toru Nagashimaさんには、全く理解が追いついていない著者に対してとても親切丁寧にアドバイスをしていただきました。本当にありがとうございます。

twitter.com

また、こちらのイベントでゆうてんさんにASTとはなにか、ゆうてんさんが作っているmarkuplintを参考にしながらlintが適用されていく過程、著者がESlintで何をしたいのかの整理を手伝っていただきました。ありがとうございます。そしていつもありがとうございます。

cdg.connpass.com

twitter.com

github.com

作っていることを発信する

同時進行でTwitterでの情報の発信も行いました。

この内容がGridsomeコアメンバーの目に留まり、以前投げたissueの返事が来ました。 試したいということだったので、ユニットテストも書き終えていたので、パッケージを公開し、試してもらいました。

公式のDiscordを覗くと、著者が試行錯誤していたリポジトリが取り上げられていました。

現状

まだ返事待ちの状態ですが、公式のリポジトリに含まれたらいいなーという感じです。

最後に

OSSの良いところは、簡単に要望や質問を投げられるところです。 運営者の目に止まらないところでやんややんや言うのも良いですが、直接意見を投げてみると進展があったりすると思いますので、著者は今後も情報発信をしてみたいです。

2018/12/09 追記

こうなりました。

tyankatsu.hatenablog.com