Closed14

Romeを軽く試す

ikura1ikura1

とりあえず、インストール

yarn
yarn add -D rome@next
ikura1ikura1
$ yarn lint:prettier
yarn run v1.22.19
$ prettier src/**/*.js --check
Checking formatting...
All matched files use Prettier code style!
Done in 2.54s.
ikura1ikura1
$ yarn lint:rome
yarn run v1.22.19
$ rome check src/**/*.js

The number of diagnostics exceeds the number allowed by Rome.
Diagnostics not shown: 221.
Checked 132 files in 27ms
ikura1ikura1

Rome速すぎて笑えるが、lintでは下記のようなものがチェックされる

error[js/noDelete]: This is an unexpected use of the delete operator.
   ┌─ src/language-css/clean.js:37:7
 37 │       delete newObj.text;
 ^^^^^^^^^^^^^^^^^^

Suggested fix: Replace with undefined assignment
      | @@ -34,7 +34,7 @@
33 33 |          *
34 34 |          * @format
35 35 |          */
36    | -       delete newObj.text;
   36 | +       newObj.text = undefined;
37 37 |   
38 38 |         // standalone pragma
39 39 |         if (/^\*\s*@(?:format|prettier)\s*$/.test(ast.text)) {
ikura1ikura1

他には

  • error[js/noDelete]: This is an unexpected use of the delete operator.
  • error[js/useSimplifiedLogicExpression]: Logical expression contains unnecessary complexity.
  • error[js/useTemplate]: Template literals are preferred over string concatenation.
  • error[js/noUnusedVariables]: This parameter is unused.
  • error[js/useSingleCaseStatement]: A switch case should only have a single statement. If you want more, then wrap it in a block.
  • Suggested fix: Exchange alternate and consequent of the node
  • error[js/noNegationElse]: Invert blocks when performing a negation test.

下記にあるルールに基いているらしい
https://rome.tools/docs/lint/rules/

ikura1ikura1
$ yarn fix:rome
yarn run v1.22.19
$ rome format --write src/**/*.js
Formatted 132 files in 45ms
Done in 0.17s.
ikura1ikura1
$ yarn fix:prettier
yarn run v1.22.19
$ yarn lint:prettier --write
$ prettier src/**/*.js --check --write
Checking formatting...
[warn] Code style issues found in 130 files.
Done in 3.54s.
ikura1ikura1

デフォルトフォーマットの違い

Prettier Rome
タブ/スペース スペース タブ
2 2
末尾カンマ es5 all
ikura1ikura1

他には改行やコメントの処理が違う
Romeは厳密に指定制限を越えていない場合は、1行にまとめる。
また無名関数のタイミングで改行をしているかもしれない。

- const {
-   cjkPattern,
-   kPattern,
-   punctuationPattern,
- } = require("./constants.evaluate.js");

+ const { cjkPattern, kPattern, punctuationPattern } = require(
+   "./constants.evaluate.js",
+ );


-   const descriptors = srcset
-     .map((src) => src[key])
-     .map((descriptor) => (descriptor ? descriptor.toString() : ""));
+   const descriptors = srcset.map((src) => src[key]).map(
+     (descriptor) => (descriptor ? descriptor.toString() : ""),
+   );
ikura1ikura1

rome checkでの提案の適用は下記のオプションを使用することでできます。

  • --apply
    • 安全な修正を適用する
  • --apply-suggested
    • 安全な修正と推奨される修正を適用する
ikura1ikura1

rome checkrome formatを混合してました。

rome checkはLinter
rome formatはFormater

rome ciは両方を実行できる

このスクラップは2022/09/29にクローズされました