M

textlint plugin メモ

Apr 10, 2024

Plugin · textlintを読んでメモ。

  • textlintのプラグインについての公式ドキュメント。

    • textlintはデフォルトでテキストファイルとマークダウンをサポートしているけど、他のフォーマットのサポートについてはプラグインが必要。
  • プラグインのパッケージ名はtextlint-plugin-<plugin-name>の形式にする。

  • プロセッサー

    • Processorは必須。

    • export default {
        Processor: require('./YourProcessor'),
      };
    • 利用可能なファイルタイプとその前後処理を定義するクラス。

    • デフォルトのプラグインの実装

    • import { parse } from 'text-to-ast';
      
      export default class YourProcessor {
        constructor(options = {}) {
          this.options = options;
          // サポートする拡張子をオプションから指定
          this.extensions = options.extensions || [];
        }
        availableExtensions() {
          return ['.txt'].concat(this.extensions);
        }
        // 前後処理を定義(解析および生成)
        processor(ext) {
          return {
            preProcess(text, filePath) {
              // 解析結果はASTオブジェクト。
              return parse(text);
            },
            postProcess(messages, filePath) {
              return {
                messages,
                filePath,
              };
            },
          };
        }
      }
      • Processorクラスはこれらのメソッド定義が必要。
      • preProcess
        • TxtParentNode{ text: string, ast: TxtParentNode }のいずれかを返す。非同期ならPromise<TxtParentNode> | Promise<{ text: string, ast: TxtParentNode }>で。
        • プロセッサープラグインのテストは@textlint/ast-tester.を利用する。
        • parseの実装が大変そう。
      • postProcess
        • { messages, filePath }を返す。非同期ならPromise<{ messages, filePath }>で。
        • 標準入力ならfilePathundefined
  • プラグインをconfigで指定するときはpluginsに。

    {
      "plugins": ["plugin-name"]
    }
    • オプションがあるなら
      • {
          "plugins": {
            "plugin-name": { "option": "value" }
          }
        }
  • publish

    • textlint-plugin-をプレフィックスにしてnpmに公開する。
    • textlintのconfigに指定するときはプレフィックスなしで指定する。スコープ付きのパッケージならスコープはそのまま。少し分かりにくいかもしれない。
  • プラグインのリスト