Skip to content

English

@yuu1111/quality-check ​

設定したengineを1つのCLIで実行し baselineの差分判定も持つ統合runner

Install ​

bash
bun add -D @yuu1111/quality-check

4つの検出engine code-style-check、comment-check、document-style-check、tsdoc-check はこのpackageへ同梱する bun build がprivateなworkspace packageを dist/cli.js へbundleするため、このpackageを導入すればengine packageの追加導入も実行時の解決も要らない Biome、tsc、Knipは子プロセスのままで、利用Projectの node_modules/.bin から解決する

Usage ​

quality.json で起動するengineを指定し、scriptから起動する

json
{
  "scripts": {
    "check:quality": "quality-check"
  }
}
ts
{
  "$schema": "./node_modules/@yuu1111/quality-check/schema.json",
  "failOnWarnings": true,
  "biome": {
    "enabled": true
  },
  "comment-check": {
    "enabled": true,
    "includes": ["**", "!another-project/**"],
    "rules": {
      "preset": "recommended",
      "content": {
        "japanese-period": "on"
      }
    }
  },
  "document-style-check": {
    "enabled": true,
    "rules": {
      "preset": "all"
    }
  },
  "tsdoc-check": {
    "enabled": true,
    "rules": {
      "preset": "all"
    }
  }
}

engineごとの出力と所要時間、集約summaryを並べて出し、どのengineが失敗したかと実行にかかった合計時間を1回の実行で示す

text
== biome ==
Checked 128 files in 260ms. No fixes applied.
biome: passed (exit 0, 296ms)

== comment-check ==
src/queue.ts:18:2 placeholder-comment placeholder comment should be resolved or tracked
comment-check: failed (1 new, 0 resolved, 0 warnings, 118ms)

quality-check: 1 of 3 engines failed (1250ms)
  failed: comment-check
  passed: biome, tsdoc-check

終了codeは0が全engine成功、1が失敗したengineあり、2が設定またはengine起動の失敗

engine名を渡すとそのengineだけを実行する

bash
quality-check biome knip
quality-check comment-check docs

位置引数のうちengine名と一致するものはengine選択になり、残りは対象pathになる --update-baseline は常に有効な全engineを実行するため、engine選択との併用は拒否する engine名と一致するpathは quality-check ./biome のように ./ を付ける

Config ​

Field説明
<engine>engineごとのsectionで enabled が起動を決める
<engine>.includes同梱する4つの検出engineが検査するfileのglob
<engine>.rules同梱する4つの検出engineのrule選択
failOnWarningswarningを阻害する検出として扱い、Biomeにも同じ方針を渡す
baselinebaseline fileのpath false なら差分判定を行わない

engineは biome → typecheck → knip → code-style-check → comment-check → document-style-check → tsdoc-check の順に実行する

engineごとのsectionが enabled とそのengineが受け取る条件を持つ engineが受け取らない条件は設定errorにし、打ち間違いが黙って無視されないようにする biome、typecheck、knip は子プロセスで起動し、4つの検出engineはin-processで起動する

EngineCommand条件
biomebiome checkargs 対象fileは biome.json が持つ
typechecktsc --noEmitargs、projects 設定は tsconfig.json が持つ
knipknipargs 設定は knip.ts が持つ
code-style-checkin-processincludes、rules
comment-checkin-processincludes、rules
document-style-checkin-processincludes、rules
tsdoc-checkin-processincludes、rules

args は子プロセスengineだけが受け取り、engineの既定引数の後ろへ足す 設定fileで表せない起動条件や、engineの引数が変わったときの逃げ道として使う failOnWarnings がtrueならBiomeへ --error-on-warnings を自動で渡し、他の子プロセスengineは終了codeをそのまま使う

includes はProject rootからの相対pathをglobで選ぶ 指定を省略すると ** になり、空の配列は何も検査しない 否定globは先に選んだfileを除外し、後の肯定globで再び含められるため、配列の順序が結果へ影響する

engineが受け取らない条件は渡さず、その旨をそのengineのsectionへ出す

text
== biome ==
biome: ignore skipped (biome.json holds its settings)

rules は同梱するengineのどのruleを実行してどう報告するかを選ぶ rules.preset は一括で選び recommended はengineの既定 all は全て有効 none は全て無効にする group名のkeyはengineが公開するruleのまとまりで、そのgroupの全ruleへ off、on、warn、error を渡す group名の下のobjectはruleを1つずつ選ぶ 具体的な指定が勝つため preset、group、rule の順に書ける off は既定で有効なruleにも渡せ、on はengineの既定severityのままにする warn と error は全ての検出engineでruleの重大度を変更し、opt-inのruleは先に有効にする engineが知らないgroup名やrule名は設定errorになり、配布する schema.json がeditorへ同じ語彙を教える 選んだruleは同梱するengineへ直接渡すため、CLIは --enable、--disable、--error へは変換しない

検出engineはbaselineを持たないため、新規と解消済みの判定はengineごとではなく統合CLIが1つのbaseline fileで行う

typecheck は projects に並べたtsconfigごとに tsc --noEmit -p <path> を起動する 省略時はカレントの tsconfig.json を1回だけ読む

Rules ​

同梱するengineはそれぞれrule語彙を公開し、設定とruleをengineごとに1つの文書へまとめる

EngineGroup設定とrule
code-style-checkspacingdocs/engines/code-style-check.md
comment-checksuppression、shape、contentdocs/engines/comment-check.md
document-style-checkwhitespace、typography、structure、contentdocs/engines/document-style-check.md
tsdoc-checksyntax、documentation、contract、suppressiondocs/engines/tsdoc-check.md

Baseline ​

既存のtreeへ検査を導入するProjectは、その時点の検出を quality-baseline.json へ記録し、後から増えた検出だけを失敗にする --update-baseline はそのfileを現在の検出で置き換える

bash
quality-check --update-baseline

実行のたびに新規の検出を報告し、現れなくなったbaselineのentryを resolved として数える 新規の検出は直し、意図して受け入れるときだけ --update-baseline を実行する entryの同一性はengineとruleとfileと検出messageで決まるため、messageが変わるとそのruleは再登録が必要になる quality.json の baseline を false にすると差分判定を行わず、全ての検出を報告する

Commands ​

quality-check document-style は同梱する document-style-check の検証記録を実行する

bash
quality-check document-style lint .
quality-check document-style lint --write .
quality-check document-style lint --preset all .
quality-check document-style scan doc.md --rules SKILL.md --review review.json
quality-check document-style check doc.md --rules SKILL.md --review review.json
Command説明
scan対象文書の未確認の検証記録を書き出す
check埋めた検証記録を現在の本文と基準に対して確認する
lint機械的な違反を報告し、--writeで整形する

記録は本文と基準のhashを固定するため、どちらかを編集すると無効になる checkが保証するのは全項目に判断と根拠があることだけで、文体判断の正しさは別に確認する

Options ​

Option説明
--config <path>読み込むconfig file(既定は quality.json)
--baseline <path>baseline fileを上書きする
--ignore <path>除外pathを追加する、複数指定できる
--update-baseline現在の検出でbaselineを置き換える
--jsonengineごとの結果をJSONで出力する
document-style <command>検証記録を実行する(scan、check、lint)

--ignore と位置引数の対象pathは、その条件を受け取るengineへだけ渡す

document-style ​

Option説明
--rules <path>## 判断基準を持つ基準fileで、scanとcheckでは必須
--review <path>読み書きする検証記録file
--preset <preset>起点にするpresetで recommended(既定)、all、none のいずれか
--enable <rule>opt-in ruleを実行する、複数指定できる
--disable <rule>既定で有効なruleも含めて無効にする、複数指定できる
--ignore <path>検査から外すpath、複数指定できる
--write報告の代わりに整形を適用する
--json検出をJSONで出力する

色は標準出力が端末のときだけ付ける NO_COLOR で無効にし、FORCE_COLOR で強制できる --json の出力には付けない