Textlint模块化使用指南:从基础到高级API详解

Textlint模块化使用指南:从基础到高级API详解

textlint The pluggable natural language linter for text and markdown. textlint 项目地址: https://gitcode.com/gh_mirrors/te/textlint

前言

Textlint作为一款强大的文本校验工具,除了提供命令行接口外,还提供了丰富的模块化API,允许开发者将其集成到各种JavaScript项目中。本文将全面介绍Textlint的模块化使用方法,帮助开发者更好地理解和使用这套工具。

核心概念

Textlint提供了两种主要的使用方式:

  1. 高级API:通过.textlintrc配置文件加载规则和插件
  2. 内核API:直接使用@textlint/kernel进行更底层的控制

对于大多数用户来说,使用高级API是更便捷的选择,因为它可以自动处理配置文件的加载和解析。

现代API详解

Textlint在v12.3.0版本中引入了全新的API设计,这些API更好地支持了现代JavaScript模块系统。

核心方法

createLinter

创建lint实例的主要方法,接收一个配置描述符对象,返回具有多种方法的linter实例。

import { createLinter, loadTextlintrc } from "textlint";

const descriptor = await loadTextlintrc();
const linter = createLinter({ descriptor });
linter实例方法
  • lintFiles(files):校验多个文件
  • lintText(text, filePath):校验文本内容(需提供虚拟文件路径)
  • fixFiles(files):自动修复多个文件
  • fixText(text, filePath):自动修复文本内容
  • scanFilePath(filePath):检查文件路径是否可被校验

配置加载

loadTextlintrc方法用于加载配置文件:

const descriptor = await loadTextlintrc({
  configFilePath: "/path/to/.textlintrc"
});

实际应用示例

基础文件校验

import { createLinter, loadTextlintrc, loadLinterFormatter } from "textlint";

async function runLint() {
  const descriptor = await loadTextlintrc();
  const linter = createLinter({ descriptor });
  const results = await linter.lintFiles(["*.md"]);
  
  const formatter = await loadLinterFormatter({ formatterName: "stylish" });
  console.log(formatter.format(results));
}

runLint();

文本自动修复

import { createLinter, loadTextlintrc } from "textlint";

async function fixText() {
  const descriptor = await loadTextlintrc();
  const linter = createLinter({ descriptor });
  
  const result = await linter.fixText("TODO: fix me", "DUMMY.md");
  console.log(result.output); // 输出修复后的文本
}

fixText();

高级用法

自定义规则和插件

import { createLinter, loadTextlintrc } from "textlint";
import { TextlintKernelDescriptor } from "@textlint/kernel";
import { moduleInterop } from "@textlint/module-interop";

async function useCustomRules() {
  const customDescriptor = new TextlintKernelDescriptor({
    rules: [{
      ruleId: "my-rule",
      rule: moduleInterop((await import("./my-rule")).default)
    }]
  });

  const rcDescriptor = await loadTextlintrc();
  const linter = createLinter({
    descriptor: customDescriptor.concat(rcDescriptor)
  });

  const result = await linter.lintText("Some text", "README.md");
  console.log(result);
}

文件扩展名检测

const descriptor = await loadTextlintrc();
console.log(descriptor.availableExtensions); // [".md", ".txt"]

迁移指南

从旧版API迁移到新版API需要注意以下几点:

  1. 配置加载方式变化:

    • 旧版:自动查找配置文件
    • 新版:需要显式调用loadTextlintrc
  2. 文本校验方法变化:

    // 旧版
    engine.executeOnText("text");
    
    // 新版
    linter.lintText("text", "dummy.md");
    
  3. 结果处理方式变化:

    • 新版API返回的结果结构更加清晰
    • 格式化输出需要单独调用formatter

测试自定义规则

开发自定义规则时,可以使用textlint-tester工具进行测试:

import { TextlintTester } from "textlint-tester";

const tester = new TextlintTester();
tester.run("my-rule", rule, {
  valid: ["valid text"],
  invalid: [{
    text: "invalid text",
    errors: [{ message: "Expected error" }]
  }]
});

总结

Textlint的模块化API提供了强大的灵活性,允许开发者:

  • 轻松集成到现有项目中
  • 动态加载自定义规则和插件
  • 精确控制校验过程
  • 实现自动修复功能

通过合理使用这些API,开发者可以构建出功能丰富的文本处理工具链,满足各种复杂的文本校验需求。

textlint The pluggable natural language linter for text and markdown. textlint 项目地址: https://gitcode.com/gh_mirrors/te/textlint

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

华坦璞Teresa

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值