メインコンテンツまでスキップ

除外設定

ファイルの除外

設定のexcludeFilesプロパティを使用します。

ルールの無効化

セレクタによる無効化

設定のnodeRulesもしくはchildNodeRulesプロパティを使います。 特定の要素にルールを適用するを参考にしてください。

{
"rules": {
"[[target-rule-id]]": true
},
"nodeRules": [
{
"selector": ".ignore",
"rules": {
"[[target-rule-id]]": false
}
}
]
}

[[target-rule-id]]の部分は無効化したいルールIDに適宜変えてください。

名前付きルールに対しても同じ方法が使えます — ベースルール名や名前空間ワイルドカードを使用できます:

{
"extends": ["markuplint:recommended"],
"nodeRules": [
{
"selector": ".legacy",
"rules": {
// ベースルール名で無効化 — a11y/wai-aria も無効化されます
"wai-aria": false,

// この要素のすべての a11y/* 名前付きルールを無効化
"a11y/*": false
}
}
]
}

名前付きルールの無効化

プリセットが定義する名前付きルールは、rules プロパティで false を指定して個別に無効化できます。名前空間ワイルドカードを使えば名前空間内のすべての名前付きルールを一括で無効化できます。また、ベースルール名をfalseに設定すると、そのベースルールを含むすべての名前付きルールグループ内で該当ルールが無効化されます — 詳細はベースルール名による無効化を参照してください。

{
"extends": ["markuplint:recommended"],
"rules": {
// 特定の名前付きルールを無効化
"a11y/html-lang": false,

// 名前空間内のすべての名前付きルールを無効化
"a11y/*": false,

// ベースルール名で無効化(詳細はプロパティリファレンス参照)
"id-duplication": false
}
}

これらの機能は nodeRuleschildNodeRules でも使えます — 詳細は nodeRules リファレンス を参照してください。

利用可能な名前付きルールの一覧はプリセット内の名前付きルールを参照してください。

ルールを上書きして無効化

設定のoverridesプロパティとoverrideModeを使います。

{
"rules": {
"[[target-rule-id]]": true
},
"overrideMode": "merge",
"overrides": {
"./path/to/**/*": {
"rules": {
"any-rule": false
}
}
}
}

[[target-rule-id]]の部分は無効化したいルールIDに適宜変えてください。

一括抑制(Bulk Suppressions)

実験的機能

この機能は実験的であり、今後のリリースで変更される可能性があります。

既存プロジェクトに新しいルールを導入する際、現在の違反をすべて抑制し、新規コードに対してのみルールを適用できます。既存の違反を一度に修正するのが現実的でない場合に有用です。

ワークフロー

# 1. 設定ファイルで新しいルールを有効化した後、現在のエラーをすべて抑制
$ markuplint --suppress "src/**/*.html"

# 2. 生成されたsuppressionsファイルをリポジトリにコミット
$ git add markuplint-suppressions.json

# 3. 以降は新規の違反のみが報告される
$ markuplint "src/**/*.html"

# 4. 既存の違反を修正したら、不要なエントリを削除
$ markuplint --prune-suppressions "src/**/*.html"

仕組み

--suppressコマンドは、現在のerrorレベルの違反をmarkuplint-suppressions.jsonファイルに記録します。以降の実行時にこのファイルを読み込み、記録された違反を抑制します。ファイル+ルールの組み合わせで違反数が抑制カウントを超えた場合、その組み合わせのすべての違反が報告されます。これにより新しいリグレッションが隠されることを防ぎます。

各エントリには、抑制を特定のDOMサブツリーに絞り込むオプションのスコープセレクタが含まれます。スコープは、すべての違反ノードの最小共通祖先(LCA: Lowest Common Ancestor)を使用して自動的に計算されます。

markuplint-suppressions.json
{
"src/index.html": {
"attr-duplication": { "count": 3, "scope": "#main-nav > ul" }
}
}

主な動作

  • errorレベルの違反のみが抑制対象です。warninginfoは常にパススルーされます
  • --suppressは常に終了コード0(成功)を返します
  • --suppress--prune-suppressionsは同時に使用できません
  • suppressionsファイルはリポジトリにコミットすることを推奨します

CLIオプション

オプション説明
--suppress現在の全エラー違反を記録
--suppress-rule <rule>指定ルールの違反のみ記録
--prune-suppressions修正済みの違反のエントリを削除
--suppressions-location <path>suppressionsファイルのカスタムパス(デフォルト: markuplint-suppressions.json

スコープセレクタ

スコープセレクタはドキュメントの特定の部分に抑制を絞り込みます。自動的に生成され、以下の戦略が優先順位順に使用されます:

  1. #id — 祖先にid属性がある場合
  2. tag.class — 祖先にCSSクラスがある場合
  3. tag[role="..."] — 祖先にrole属性がある場合(<input>の場合はtypeも対象)
  4. tag:nth-of-type(n) — 同名の兄弟要素を区別するため

スコープを絞れない場合(例: 違反がドキュメント全体に分散している場合)、抑制はファイル全体に適用されます。

スコープセレクタが要素にマッチしなくなった場合(例: リファクタリング後)、抑制は維持され--prune-suppressionsがクリーンアップを推奨します。壊れたスコープが新しい違反を隠すことはありません。

詳しい設計理念については、Bulk Suppressions設計ドキュメントを参照してください。

次のステップ

  • CLI--suppress--prune-suppressions を含むCLIオプション一覧
  • ルールを適用する — 完全に無効化する代わりにルールを調整する
  • 設定プロパティexcludeFilesnodeRuleschildNodeRulesoverrides のリファレンス