コードを整えるフォーマッターPrettierの設定の覚書です。eslintでも整形できますがさらに補ってくれます。ちなみにvue(nuxt)で利用しています。
Contents
htmlWhitespaceSensitivityのignoreやstrict
templete内のhtmlの改行がいやで少し設定をいじりました。ホワイトスペースをどう扱うかに付随して改行も変わってしまうようです。
rules: { 'prettier/prettier': [ 'error', { // htmlタグの改行方針 // htmlWhitespaceSensitivity: 'ignore' htmlWhitespaceSensitivity: 'css' // htmlWhitespaceSensitivity: 'strict' } ], }
公式サイトをみると、
whitespace is significant in inline elements.
と書かれています。ホワイトスペースはインライン要素で重要とありますが、レイアウトに関わるからでしょう。改行を綺麗に入れた際にホワイトススペースも入り、出力のレイアウトが変わってしまうとそりゃまずいよねということですね。
公式サイトの解説がわかりやすいです。
https://prettier.io/blog/2018/11/07/1.15.0.html#whitespace-sensitive-formatting
stackoverflowでも話題になっていまいました。
設定はeslintとの設定の兼ね合いもあるでしょうが、strictを推奨している人が多そうでした。
Prettierの htmlWhitespaceSensitivityを “strict” で指定することがいいような話しをどこかで聞いたことあるんだけど、理由を忘れてしまった😅
— tomouchi (@tomouchi_) January 13, 2019
“ignore”がダメな理由はすぐわかったけど。
ただ外しちゃている人もいましたね…。
#今日の積み上げ
— amos@仮想通貨×プログラミング勉強中 (@amos_sweb) December 3, 2021
Day:74
Today:4h
Total:340.5h
Prettierで変に改行されてしまう問題ひとまず解決しました、、
インライン要素で起こるみたいですね。画像の様にsetting.jsonの設定を変えてあげると直りました!#駆け出しエンジニアと繋がりたい#Web制作#VueJS pic.twitter.com/pJohyXO4W5
prettier に日本語の長文テキストを改行されたくないので入れてない
— ユーン🍆💉💉 (@euxn23) September 16, 2021
liタグの長文でエラーがでたことがあり、気持ちはわかります。
cssでデザインを改善する方法もあり
cssの指定が悪さすることもあります。たとえば、次のようなホワイトスペースに関わるコードだったりdisplayの属性を変えるコードだったり。prettier君は「divだから改行しちゃて問題なし」みたいな感じで、CSSの変更まで加味して正しくソースコードを整形しないって感じですかね。
white-space: pre-wrap;
pre-wrapはソース中のホワイトスペースをそのまま表示する指定です。その場合、css側を修正する方法もあります。strictを指定する方法もありますが、使うか若干悩むところです…。
eslintのmax-lenも無効に!?
長いcssを書くと、eslintをかけるように指示されるためmax-lenも追記してあげました。
'prettier/prettier': [
'error',
{
htmlWhitespaceSensitivity: 'css',
'max-len': ["error", { "code": 120 }]
}
]
‘max-len’: ‘off’は無効にすることもできますが、ひっかれば数を変更すればいいかなとオフは使っていません。
'max-len': 'off'
max-lenとprintWidthの違い
もうひとつ似たものにprintWidthがあります。公式サイトの説明によると、max-lenとprintWidthは同じものではないとあります。
In other words, don’t try to use printWidth as if it was ESLint’s max-len – they’re not the same. max-len just says what the maximum allowed line length is, but not what the generally preferred length is – which is what printWidth specifies.
https://prettier.io/docs/en/options.html#print-width
max-lenは最大文字数ですが、printWidthは若干違うようです。printWidthのデフォルトは80ですが、カスタマイズできます。片方で調整するか両方で調整するかお好みなのでしょうか。ただ改行はこの2つをチェックすればよいかもしれません。
printWidthの設定
VsCodeで設定できます。
Vs Codeの拡張[ Prettier – Code formatter ]をインストール > Extension Setting > [printWidth]で検索
なお、この設定を変えると、VsCodeのsetting.jsonに反映されます。
しかし、チーム開発する場合は異なる環境ができてしまうため望ましくないようです。
そのため、JSの場合、prettier.config.jsか.prettierrc.jsに設定するとよさそうです。prettier.config.jsはコメントアウトできます。
module.exports = {
printWidth: 120
// printWidth: 100
}
公式リファレンスはこちらのようです。
https://prettier.io/docs/en/configuration.html
.eslintrc.jsのprintWidth
.eslintrc.jsのprintWidthはあくまでeslintをかけるときです…。
この設定と他の設定がミスマッチしていると、eslintをかけたとき改行されて、自動保存したときに改行が元に戻るみたいな症状に悩まされることになります。.eslintrc.jsの設定が短く、他の設定が長くなっている場合ですね。
plugins: ['prettier'],
// add your custom rules here
rules: {
// https://prettier.io/docs/en/options.html
'prettier/prettier': [
'error',
{
htmlWhitespaceSensitivity: 'ignore',
printWidth: 120
}
]
printWidthは80?120?200?
Prettier の printWidth ってみんなどれくらいにしてるんだろう
— アカツキ (@pokemium) October 14, 2020
僕は今まで100だったけど最近120にしてみた
みんな .prettierrc の printWidth はどれくらいにしてるんだろう?
— tk_r1d3r (@tk_r1d3r) September 16, 2020
デフォルトは短いよねー。。。
100とか120くらいかな?
「フォーマッタの設定に好みを持ち込む奴は害悪!デフォルトのまま使うべき!!」ってイキってたけどprintWidthだけは耐えられなくて120にしました。
— いわた (@wonderful_panda) March 31, 2020
prettierのprintWidth、折り返し幅なら120じゃね?と思って設定したら広くされすぎて辛かった。ドキュメントに書いてる通り、いっぱいまで入れようとするから、体感的には普通の折り返し幅より小さく設定するほうが良いと思う。ただ、デフォルトの80はちょっと狭すぎ感あるので、100かなぁ、という感じ
— sunnyone (@_sunnyone) March 31, 2020
カッっとなって VSCode の prettier.printWidth を 160 にした
— らぃと (@lightnet328) May 26, 2020
PrettierのprintWidthの設定デフォルトが80で辛いから120にしてたけど、120も微妙だから200にした
— むた (@mmmmmtaaa) February 21, 2020
space2つ、ダブルクォート、セミコロン有、printWidthは200が好き
— べじ. (@vegedot) November 14, 2019
個人的には120に落ち着きました。横にスクロールする状況はさすがに避けたく。
MacBookProを使っています。
【比較】そもそもPrettierではなくBeautify
prettierではなくBeautifyを使っている人がいることを知りました。
htmlの改行で困ってる人いるのかな?最近PVが増えてたので😃
— すずのん|Webやる母 (@suzunon11) May 27, 2021
私はBeautifyにしたら調子いいよ〜
コード整形で困った改行位置 PrettierからBeautifyに変更したお話【VS Code】 https://t.co/BzGc0bm2Lo
settings.jsonにこんな設定ができるのですね。
“html.format.wrapLineLength”: 0
TSを使うからPrettier派。
— クロレ@ニートのフリーランス。 (@v_kurore) March 16, 2021
DonwloadもBeautify=6M、Prettier=12Mだし、長いものには巻かれてしまう。 https://t.co/sMQqblu07B
VSCode使いだしてから一番てこずるのってフォーマッターかもしれない・・・。
— ko-ichi🇨🇦 (@starterPG_51) October 19, 2020
Beautifyの設定でJSのインデント設定に今まで何時間かけたことか。
そしてTypeScriptだとまた変な感じになるからPrettier導入してショートカットでTypeScriptの時はbeautify使わないようにしてetc….
prettierの改行はあまり好きじゃなくて気持ちがわかるのですが、個人的に今のところprettierを使っています。情報提供のみで。
参考になれば幸いです。
コメント