textlintをプログラムに組み込んで使う

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);
    });

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください