textlintをコマンドラインから実行するのではなく、プログラムに組み込んで使う方法です。
textlintをインストールする
textlintをインストールします。
npm install --save-dev textlint
textlintで使用するルールをインストールする
使用するルールをインストールします。
npm install --save-dev textlint-rule-max-kanji-continuous-len
npm install --save-dev textlint-rule-preset-ja-spacing
npm install --save-dev textlint-rule-preset-ja-technical-writing
npm install --save-dev textlint-rule-prh
textlintを読み込み
JavaScriptのプログラムから、textlintモジュールを読み込みます。
// index.js
const TextLintEngine = require("textlint").TextLintEngine;
ルールをファイルから読み込む
ルールをファイルから読み込むときは、configFileキーの値にファイルの場所を指定します。
config/.textlintrcファイル
{
"filters": {},
"rules": {
"max-kanji-continuous-len": true,
"preset-ja-spacing": true,
"preset-ja-technical-writing": true,
"prh": {
"rulePaths": [
"../node_modules/prh/prh-rules/media/WEB+DB_PRESS.yml"
]
}
}
}
ルールをconfig/.textlintrcファイルから読み込む。
const options = {
configFile: 'config/.textlintrc'
};
ルールをコードで設定する
ルールをコードで指定するときは、rulesキーの値に使用するルールを指定し、ルールの設定をrulesConfigの値に設定します。
const options = {
rules: [
'max-kanji-continuous-len',
'prh',
],
rulesConfig: {
'no-todo': true,
'max-kanji-continuous-len': true,
'prh': {
'rulePaths':[
'node_modules/prh/prh-rules/media/WEB+DB_PRESS.yml'
]
}
},
};
ルールプリセットを使用するときは、presetsキーの値に使用するルールプリセットを指定します。
const options = {
presets: [
'preset-ja-spacing',
'preset-ja-technical-writing',
],
};
TextLintEngineを作成する
TextLintEngineコンストラクターの引数に設定を指定して、TextLintEngineのインスタンスを作成します。
const engine = new TextLintEngine(options);
チェックする文字列をファイルから読み込む
チェックする文字列をファイルから読み込むときは、TextLintEngineのexecuteOnFilesメソッドの引数にファイルのパスを指定します。
const path = require("path");
const filePath = 'index.txt';
const filePathList = [path.resolve(process.cwd(), filePath)];
const engine = new TextLintEngine(options);
engine.executeOnFiles(filePathList)
チェックする文字列を引数で指定する
チェックする文字列を引数で指定するときは、TextLintEngineのexecuteOnTextメソッドを使用します。
const TEXT = `私の javascript がバグっている
一二三`
const engine = new TextLintEngine(options);
engine.executeOnText(TEXT)
チェックした結果を受け取る
executeOnFilesメソッドやexecuteOnTextメソッドはPromiseを返します。
結果(LintResultの配列)を受け取ったら、isErrorResultsメソッドでエラーの有無を確認します。
エラーがあるときは、formatResultsメソッドで結果を文字列に変換できます。
engine.executeOnText(TEXT)
.then(function (results) {
if (engine.isErrorResults(results)) {
const output = engine.formatResults(results);
console.log(output);
} else {
console.log("All Passed!");
}
}).catch(function (error) {
console.error(error);
});