textlint 6.2.0でSharable Configの機能を追加しました。

これは.textlintrcの中身をnpmパッケージとして公開して、使うときはtextlint --config @azu/textlint-config のようにパッケージを指定して使えるという機能です。

簡単にいうと設定を共有する機能です。

ESLintのやつと基本的に同じですが、ESLintと違って"extend"での設定ファイルの継承は対応してません。 多分JavaScriptとしてやった方が良さそうな気がしていて実装してないです。(いい案があればIssueに下さい)

.textlintrcはJavaScriptとして以下のような感じで書くことができます。

module.exports = { 
	rules : {
	}
 };

設定ファイルを公開する場合はmainのスクリプトに.textlintrcの設定をJavaScriptで書いてexportするだけです。

例えば、azu/textlint-config-readme: Sharable config for textlintは以下のファイルをpackage.jsonの”main”に指定しているだけです。

module.exports = {
    rules: {
        "no-todo": true,
        "no-dead-link": true,
        "alex": true,
        "write-good": true,
        "rousseau": true
    }
};

pacakge.jsonは次の通り

{
  "name": "@azu/textlint-config-readme",
  "repository": {
    "type": "git",
    "url": "git+https://github.com/azu/textlint-config-readme.git"
  },
  "author": "azu",
  "email": "[email protected]",
  "homepage": "https://github.com/azu/textlint-config-readme",
  "license": "MIT",
  "files": [
    "src/",
    "lib/"
  ],
  "bugs": {
    "url": "https://github.com/azu/textlint-config-readme/issues"
  },
  "version": "1.0.2",
  "description": "textlint config module for writing readme",
  "main": "textlint-config.js",
  "directories": {
    "test": "test"
  },
  "scripts": {
    "test": "textlint -c ./textlint-config.js ./*.md"
  },
  "keywords": [
    "textlint",
    "config"
  ],
  "dependencies": {
    "textlint-rule-alex": "^1.0.1",
    "textlint-rule-common-misspellings": "^1.0.1",
    "textlint-rule-no-dead-link": "^0.2.0",
    "textlint-rule-no-todo": "^2.0.0",
    "textlint-rule-rousseau": "^1.4.1",
    "textlint-rule-write-good": "^0.1.4"
  },
  "devDependencies": {
    "textlint": "^6.2.0"
  }
}

使うときは

npm install -D @azu/textlint-config-readme textlint

でインストールして

$(npm bin)/textlint --config @azu/textlint-config-readme README.md

--configにパッケージ名を指定するだけです。

具体的には以下を見てみてください。

Scoped module(@azu/abcのような形式)も対応してるので、自分の名前空間なら気軽に公開できて便利です。