LoginSignup
2
2

More than 1 year has passed since last update.

jscpd に無視してもらいたい

Last updated at Posted at 2021-07-05

はじめに

jscpd は素晴らしいツールです

あらゆる言語で書かれたコードから重複を見つけ出して指摘してくれます

コピー&ペーストであちこちに重複ができてしまうと、無駄にコード量が増えるだけでなく、メンテナンス時にもあちこちを修正せねばならず、変更漏れがあればバグが発生してしまいます

重複はバグの温床、取り除かねばならないのです

以前の記事でも書きましたが、私は GitHub Actions の Super-Linter でいつもお世話になっています

jscpd に指摘されて、処理を共通化することもよくあります(つまり未熟)

しかし、それでも、どうしても見逃して貰いたいときもあるのです

どうしても無視してほしい

ある仕組みの中で、設定情報を json ファイルに持っています

個別のものに対して、同一項目同一値の行が続き、 jscpd に怒られました

例えばこんな感じだと

{
  "aaa": {
    "vvv": "VVV",
    "www": "WWW",
    "xxx": "XXX",
    "yyy": "YYY",
    "zzz": "ZZZ"
  },
  "bbb": {
    "vvv": "VVV",
    "www": "WWW",
    "xxx": "XXX",
    "yyy": "YYY",
    "zzz": "ZZZ"
  }
}

jscpd がこんな風に指摘してきます

Clone found (json):
 - /hello.json [9:7 - 15:3] (7 lines, 97 tokens)
   /hello.json [2:7 - 8:3]

  9 | 2 | ": {
 10 | 3 |     "vvv": "VVV",
 11 | 4 |     "www": "WWW",
 12 | 5 |     "xxx": "XXX",
 13 | 6 |     "yyy": "YYY",
 14 | 7 |     "zzz": "ZZZ"
 15 | 8 |   }

しかし、同じ値ではあるものの、別のものなので共通化せずに別のままにしておきたいのです

コメントで無視する箇所を指定する方法もあります

/* jscpd:ignore-start */
import lodash from 'lodash';
import React from 'react';
import {User} from './models';
import {UserService} from './services';
/* jscpd:ignore-end */

しかし、 json にはコメントを入れることができません

jscpd の設定ファイル

というわけで、設定ファイルで無視対象を指定することにしました

GitHub Actions で動かしている場合、 .github/linters/.jscpd.json に以下のように記載します

{
  "threshold": 0,
  "reporters": [
    "consoleFull"
  ],
  "ignore": [
    "**/*.json"
  ],
  "absolute": true
}

これで json については jscpd の対象外にすることができました

最後に

Super-Linter は様々な linter を動かしてくれます

基本的には設定ファイルを指定できるようになっているので、各 linter の公式を参照して設定方法を確認しましょう

2
2
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
2
2