プロパティを設定する
設定は、以下のプロパティを持ちます。
{
"extends": [],
"plugins": {},
"parser": {},
"parserOptions": {},
"specs": [],
"excludeFiles": [],
"rules": {},
"nodeRules": [],
"childNodeRules": [],
"pretenders": [],
"overrides": {}
}
パスの解決
extends
、plugins
、parser
、specs
、excludeFiles
はパスを指定できます。そのうちextends
、plugins
、parser
、specs
の4つでは、パスの代わりにnpmパッケージを指定できます。
まず、パッケージとしてインポートします。パッケージが存在しない、文字列がパッケージでないなど、失敗した場合は、文字列を単なるパスとして解決します。相対パスは、設定ファイルのあるディレクトリが基準となります。
各プロパティの詳細
extends
他の設定ファイルへのパスを指定した場合、その設定をマージします。
{
"extends": [
// ローカルファイルとして読み込む
"../../.markuplintrc",
// パッケージとして読み込む
"third-party-config"
]
}
markuplint:
というプレフィックスがついた名前は、Markuplintから提供されたpresetを読み込みます。
{
"extends": ["markuplint:recommended"]
}
plugin:
というプレフィックスがついた名前は、プラグインから提供された設定を読み込みます。スラッシュの前はプラグインがもつ名前空間です。スラッシュの後ろは、そのプラグイン固有の設定名です。
{
"extends": ["plugin:third-party-plugin-name/config-name"],
"plugins": ["third-party-plugin"]
}
インターフェイス
interface Config {
extends?: string[];
}
plugins
任意のプラグインを読み込むことができます。パッケージ名またはパスを指定します。プラグインが設定をもつ場合はsettings
に指定できます。
{
"plugins": [
"third-party-plugin",
"@third-party/markuplint-plugin",
{
"name": "third-party-plugin2",
"settings": {
"foo": "bar"
}
},
"./path/to/local-plugin.js",
{
"name": "./path/to/local-plugin.js2",
"settings": {
"foo": "bar"
}
}
]
}
インターフェイス
interface Config {
plugins?: (
| string
| {
name: string;
settings?: Record<string, string | number | boolean | Object>;
}
)[];
}
parser
キーに正規表現を、値にパーサのファイルパスまたはパッケージ名を指定します。正規表現は、対象ファイルにマッチするものを指定します(例は拡張子を示しています)。
{
"parser": {
"\\.pug$": "@markuplint/pug-parser",
"\\.[jt]sx?$": "@markuplint/jsx-parser",
"\\.vue$": "@markuplint/vue-parser",
"\\.svelte$": "@markuplint/svelte-parser",
"\\.ext$": "./path/to/custom-parser/any-lang.js"
}
}
インターフェイス
interface Config {
parser?: {
[regex: string]: string;
};
}
parserOptions
{
"parserOptions": {
"ignoreFrontMatter": true,
"authoredElementName": ["AuthoredElement"]
}
}
ignoreFrontMatter
true
を設定すると、パーサはソースコードのFront Matterフォーマット部分を無視します。デフォルトはfalse
です。
---
prop: value
---
<html>
...
</html>
authoredElementName
ReactやVueなどを使っている場合、Markuplintのパーサーはコンポーネントに小文字の名前を付けると、ネイティブのHTML要素として検出します。ほとんどの場合、コンポーネントは大文字から命名する必要がありますが、パーサプラグインごとに特定のパターンがあります(例:Vue: Built-in Special Elements)。もし、異なる命名パターンが必要な場合は、authoredElementName
オプションを指定することで解決できます。デフォルトはundefined
です。
{
"parserOptions": {
"authoredElementName": ["custom", "mine"]
}
}
<template>
<custom><!-- 指定がない場合はネイティブのHTML要素として検出されます。 --></custom>
<mine><!-- 指定がない場合はネイティブのHTML要素として検出されます。 --></mine>
</template>
インターフェイス
interface Config {
parserOptions?: {
ignoreFrontMatter?: boolean;
authoredElementName?: string | RegExp | Function | (string | RegExp | Function)[];
};
}
specs
キーに正規表現を、値にスペックファイルのパスまたはパッケージ名を指定します。正規表現は、対象ファイルにマッチするものを指定します(例は拡張子を示しています)。
{
"specs": {
"\\.vue$": "@markuplint/vue-spec",
"\\.ext$": "./path/to/custom-specs/any-lang.js"
}
}
インターフェイス
interface Config {
specs?: {
[regex: string]: string;
};
}
v1.x
まで非推奨の構文
配列または文字列で指定可能ですが、非推奨です。
{
// 非推奨
"specs": ["@markuplint/vue-spec", "./path/to/custom-specs/any-lang"]
}
{
// 非推奨
"specs": "@markuplint/vue-spec"
}
excludeFiles
必要であれば、ファイルを除外できます。値は設定ファイルからの相対パスか絶対パスが必要です。パスはglob形式も可能です。否定を表す!
シンボルを使うこともできます。後から指定したものが優先されます。パターンは.gitignore
の仕様に従って動作します。(node-ignoreを用いて解決されます)
{
"excludeFiles": ["./ignore.html", "./ignore/*.html", "!./ignore/no-ignore.html"]
}
インターフェイス
interface Config {
excludeFiles?: string[];
}
rules
ルールを有効にしたり、詳細を設定します。各ルールの値は、文字列、数値、および配列のいずれかです。
false
を指定した場合、ルールは無効になります。true
を指定すると、各ルールが持つデフォルト値として適用されます。
{
"rules": {
"rule-name": "value" // ここにルール名と値を設定します
}
}
もしくは、Objectで詳細を指定します。
{
"rules": {
"rule-name": {
"value": "any-value",
"severity": "error",
"options": {
"any-option": "any-optional-value"
}
}
}
}
value
省略可能です。省略した場合は、各ルールが持つデフォルト値として評価されます。
severity
"error"
または"warning"
を受け取ります。省略可能です。省略した場合は、各ルールが持つデフォルトの深刻度で評価されます。
options
ルールが定義するObjectを受け取ります。省略可能です。フィールドの一部がデフォルト値を持つ場合があります。
非推奨のoption
フィールド
option
フィールドは、v3.0.0
からoptions
に置き換えられました。互換性のためにoption
を通しても適用できますが、非推奨です。代わりにoptions
を使用してください。
ルール名について
ルール名はスラッシュを含む場合があります。その場合、そのルールがプラグイ ンによるものであることを示します。スラッシュの前はプラグインがもつ名前空間です。スラッシュの後ろは、そのプラグイン固有の一意なルール名です。
{
"plugins": ["third-party-plugin", "./path/to/local-plugin.js"],
"rules": {
"core-rule-name": true,
"third-party-plugin/rule-name": true,
"named-plugin-imported-form-local/rule-name": true
}
}
インターフェイス
interface Config {
rules?: {
[ruleName: string]: Rule<T, O>;
};
}
type Rule<T, O> =
| boolean
| T
| {
severity?: 'error' | 'warning' | 'info';
value?: T;
option?: O;
reason?: string;
};
nodeRules
特定の要素にのみルールを適用させたい場合、このプロパティを指定します。値が配列であることに注意してください。
selector
かregexSelector
のどちらかが必要です。rules
フィールドも必須です。rules
プロパティと同じ値を指定します。
{
"nodeRules": [
{
"selector": "main",
"rules": {
"class-naming": "/[a-z]+(__[a-z]+)?/"
}
}
]
}