ESLint の quotes、avoidEscape 風味

初めてのおつかいでどうしたもんかと思ったやつ。

enforce the consistent use of either backticks, double, or single quotes (quotes) をちゃんと読んでみる。なんかこんだけのもんだから、きっとコントロール出来るにちげぇねぇぜっ、と信頼してみる。

何? うん、おさらい。

  1. 文字列リテラルを書くのに「ポリシーもなく」不統一だと読みにくい
  2. ついでに言うと、Syntax Highlighting 時に一重引用符と二重引用符を区別しちゃうヤツもいる
  3. ので、「原則としてどちらか」に統一したいが
  4. だからと言って、「二重引用符を含む文字列」を、エスケープしてまで二重引用符で囲め、なんて許容出来ない

ごくごく当たり前のニーズでしょ。

でドキュメント。なんか制御がわかりにくい気がすんだけれど、「avoidEscape」を true にすると、「エスケープしてまで二重引用符にしようとすんなや」という、まさにワタシの思ったことをしてくれるみたい。英語だけ読んででもピンと来なくて、correct/incorrect 例をガン見しててようやっと理解した。

ゆえ、ワタシの .eslintrc.js(抜粋):

 1 module.exports = {
 2     "env": {
 3         "browser": true,
 4         "commonjs": true,
 5         "es6": true
 6     },
 7     "extends": "eslint:recommended",
 8     "parserOptions": {
 9         "sourceType": "module",
10         "ecmaVersion": 2017
11     },
12     "rules": {
13         "indent": [
14             "error",
15             4
16         ],
17         //...
18         "quotes": [
19             "warn",
20             "double",
21             {
22                 // ありがとぅー…ありがとぅー…ありがとぅー…
23                 "avoidEscape": true,
24 
25                 // まだワタシには関係ないが将来のために
26                 "allowTemplateLiterals": true,
27             }
28         ],
29         "semi": [
30             "error",
31             "always"
32         ],
33         // ...
34         "switch-colon-spacing": [
35             "error",
36             {"after": true, "before": false}
37         ],
38     }
39 };

それはそうと、「backtick」の意味が、このドキュメントで初めてわかった。あぁ、だんだん他の言語で「ええもん」とされて使われてるものが取り込まれてるんだね。イキのいい最近の Python では f-string、ruby なら pp、そして「化石」の bourne-shell なら(ややこしいが)二重引用符、に相当。つまり substitution を解釈する。ついでに python の “”” とか ”’ みたいに、改行をそのままブチ込める。うーん、すぐにでも使いたくなってきた。それこそ複雑な正規表現を書くのに便利だったりするかもしれん。