eslint-plugin-vue にやっと contribute した

やるやる詐欺をしていた eslint-plugin-vue への contribute をやっとした。

最終出社を終え、ある程度時間があったので、eslint-plugin-gridsome に、なにか持ち込める考え方があるかもなーという期待も抱きつつコードを見たり、issue や PR を見た。

なにをやったのか

ESLint クラスを使うように変更

ESLint v7 から CLIEngine クラスの代わりに ESLint クラスが追加されたので、それを使うようにissuePRで対応した。

新しい ESLint クラスが CLIEngine クラスを置き換えます

eslint-plugin-vue は v6 もサポートしているので、rule を使用するのに影響がない範囲、例えば tools の中だったら問題なさそうだったので対応した。

no-multiple-objects-in-classルールの追加

:classの中で配列使ってたら、オブジェクトは一つにして使うように警告出すルール。
既存 issue があったのでPR出した。
初めてのルール追加でちゃんとできるか不安だったけど、今メインでメンテナンスしてくれてるota さんのサポートが凄いので「はぁーありがてぇ〜」って思わず口にしながら進めた。

no-empty-component-blockルールの追加

template script styleブロックが空だったら警告を出すルール。
既存 issue があったのでPR出した。
vue-loader のドキュメントでは<template src="./template.html" />みたいに書くことも可能と書いてるので、それも考慮。
value が改行、空白かどうかの判定を正規表現でどうにかしようとしたけど、このコメントのやり方は思いつかなかったし、スマートだったのでこっち採用した。

やってみて

context.parserServices.getDocumentFragment()で SFC の最上位の node 取得できるようになってたのを知れたので、eslint-plugin-gridsome でも使おうと思う。
今後も動向チェックしながら貢献できたら良いなと思う。