0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

ESLintとPrettierを同時に良い感じに動かす。今回はESLintからPrettierを呼び出す

Posted at

プロジェクトにeslintを入れてルールを書いてるプロジェクト、

VSCodeのPrettierの設定と、ESLintの衝突を回避したい。とりあえず文末のセミコロン - 青いやつの進捗日記。

このブログでも書いたが、VSCodeの拡張機能のPrettierが.vscode/settings.jsonに書いてある

{
  "editor.formatOnSave": true,
}

でPrettierが起動することによりESLintと衝突し、ESLintの

"semi": ["error", "never"],

で末尾のセミコロンはだめなのに、Prettierの拡張機能のデフォルトの

Prettier: Semi
Whether to add a semicolon at the end of every line

と衝突する、という。まあデフォルトの設定外せばいいし、もしくは.prettierrc

{
  "semi": false,
}

とすればプロジェクトの設定としてfalseになるので、おそらく衝突しない。けど、そもそもフォーマット系は保存時に動いてほしいし、あとそもそもプロジェクトとして設定は統一させて統一して良い感じに動いてくれるようになってほしい。


で、色々調べました。
方法はざっくりたぶん2つ。

eslint-config-prettier(unnecessaryかmight conflict with PrettierなESLintのルールをオフにしてくれる)https://github.com/prettier/eslint-config-prettier

eslint-plugin-prettier(ESLintからPrettierを動かす)https://github.com/prettier/eslint-plugin-prettier

を入れて、

.vscode/settings.json で保存時にESLintを実行するように記述して、ESLintからPrettierを動かす

参考

ESLint と Prettier の共存設定とその根拠について

ESLintとPrettierを併用するときの設定(eslint-plugin-prettier, eslint-config-prettier) - dackdive's blog

②ESLintとPrettierをそれぞれ別に動かす

これは結局やってないからまだちゃんとはわかってないけど…ESLintはまあ通常通りで、Prettierは①で入れた2つのプラグイン両方を入れないで、eslint-config-prettierのみ入れてESLintとPrettierを別々に実行する方法。

参考記事にも書いてあるが、たしかにPrettierの公式ドキュメントとしては①の方法はgenerally not recommendedだと言っている。

Prettierはnpm scriptsから実行する、ということらしい。Prettierを使って保存時にソースコードを自動で整形してもらう

たしかにwatchしてPrettier動かせば良い気はしている

参考

TypeScript + Node.jsプロジェクトにESLint + Prettierを導入する手順2020 - Qiita


なんかいま書いてて②でも良い気がしてきたけれど、今回やってみたのは①なので①の方法について話す。

とりあえずインストール

$ yarn install --dev prettier eslint-plugin-prettier eslint-config-prettier

で、.eslintrc.jsonにextendsに"plugin:prettier/recommended"を追加

"extends": ["eslint:recommended", "plugin:prettier/recommended"],

(extendsとpluginとrulesにそれぞれ書く方法もあるが、これだけでも済む)

.vscode/settings.jsonに保存時ESLintを起動する設定を追加

{
  "editor.formatOnPaste": true,
  "editor.codeActionsOnSave": {
    // For ESLint
    "source.fixAll.eslint": true,
    // For TSLint
    "source.fixAll.tslint": true,
    // For Stylelint
    "source.fixAll.stylelint": true
  }
}

で、これで保存時にESLint経由でPrettierも動きます。

しかし、Prettierの設定は前述の通りデフォルトがセミコロンが末尾についたり、ESLintの設定にもしセミコロン許さない設定をしていたら衝突してしまうものがあります。

なので、あとは.prettierrcにESLintに合わせて設定を追加します。私の場合、ESLintとPrettierで衝突していたものに

"comma-dangle": ["error", "never"],
"quotes": ["error", "single"],
"semi": ["error", "never"]

があったので、これを回避するために.prettierrc

{
  "semi": false,
  "singleQuote": true,
  "trailingComma": "none"
}

と追加します。

これで、保存時にPrettierも動いて良い感じになってくれます。

0
1
0

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
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?