ESLint 自定义 Processor(处理器)

ESLint 自定义 Processor(处理器)

🔹 什么是 Processor?

在 ESLint 中,Processor(处理器)是一种扩展机制,允许处理非标准 JavaScript/TypeScript 文件。默认情况下,ESLint 仅能处理常规的 JS/TS 文件。

通过自定义处理器,你可以:

  1. 从非 JS 文件中提取 JS 代码
  2. 将 ESLint 报错信息映射回原始文件

典型应用场景:

  • @eslint/markdown 插件:提取 Markdown 文件中的代码块进行检查
  • eslint-plugin-vue 插件:处理 Vue 单文件组件中的 <script>

🔹 Processor 的基本结构

一个 Processor 需要符合以下接口:

const plugin = {meta: {name: "eslint-plugin-example", // 插件名称version: "1.2.3"              // 插件版本},processors: {"processor-name": {meta: {name: "eslint-processor-name",version: "1.2.3"},preprocess(text, filename) {// text: 文件内容// filename: 文件名return [{ text: code1, filename: "0.js" },{ text: code2, filename: "1.js" }];},postprocess(messages, filename) {// messages: 二维数组 [[msg1, msg2], [msg3]]// 每个子数组对应 preprocess 返回的代码块return [].concat(...messages); // 转换为一维数组},supportsAutofix: true // 是否支持自动修复,默认为 false}}
};// 导出插件对象
module.exports = plugin; // CommonJS
export default plugin;   // ESM

🔹 preprocess(预处理)

输入参数

  • text: 文件内容
  • filename: 文件名

返回值
代码块数组,每个元素包含 { text, filename } 对象

功能说明

  1. 从非 JS 文件中提取 JS 代码
  2. 可拆分为多个独立代码块(如 Markdown 中的多个 ```js 代码块)

示例

  • .html 文件:合并所有 <script> 标签为一个代码块
  • .md 文件:返回多个独立代码块

🔹 postprocess(后处理)

输入参数

  • messages: 二维数组,每个子数组对应一个代码块的报错信息
  • filename: 文件名

返回值
一维数组,包含最终返回给 ESLint 的报错信息

注意事项
需要将报错信息中的行号、列号修正为原始文件中的位置,因为 ESLint 报错是基于提取的代码,而用户查看的是原始文件。

🔹 autofix(自动修复支持)

默认情况下 Processor 不支持 --fix 自动修复。要启用该功能:

  1. postprocess 中修正 fix 对象的范围:

    fix: {range: [start, end], // 原始文件中的替换范围text: "替换内容"
    }
    
  2. 在 Processor 定义中添加:

    supportsAutofix: true
    

🔹 meta 对象

两种 meta 类型

  1. 插件 meta:

    meta: {name: "eslint-plugin-example",version: "1.2.3"
    }
    

    用途

    • ESLint 配置缓存
    • 显示调试信息
  2. Processor meta:

    meta: {name: "eslint-processor-name",version: "1.2.3"
    }
    

    用途

    • 直接引用 Processor 对象时正确识别

最佳实践:同时为插件和每个 Processor 定义 meta,确保各种使用场景下都能正常工作。

🔹 配置文件中使用 Processor

两种使用方式

  1. 通过插件名称:

    // eslint.config.js
    import { defineConfig } from "eslint/config";
    import example from "eslint-plugin-example";export default defineConfig([{files: ["**/*.txt"], // 处理 .txt 文件plugins: { example },processor: "example/processor-name" // 使用插件中的 processor}
    ]);
    
  2. 直接使用 Processor 对象:

    // eslint.config.js
    import { defineConfig } from "eslint/config";
    import example from "eslint-plugin-example";export default defineConfig([{files: ["**/*.txt"],processor: example.processors["processor-name"]}
    ]);
    

🔹 总结

Processor 的核心功能:

  • 将非 JS 文件转换为 JS 代码块
  • 将报错信息映射回原始文件

主要方法:

  • preprocess():提取代码块
  • postprocess():聚合并修正报错位置

其他特性:

  • 默认不支持 --fix,需手动开启
  • 推荐同时定义插件和 Processor 的 meta

使用方式:

  • plugin-name/processor-name
  • 直接访问 processors["xxx"]

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/diannao/100366.shtml
繁体地址,请注明出处:http://hk.pswp.cn/diannao/100366.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C++语法 | static静态|单例模式

这里写目录标题static 关键字静态局部变量 vs 局部变量静态全局变量 vs 全局变量静态成员变量 vs 成员变量静态成员函数单例模式static 关键字 在此之前, 先了解一下 static 关键字 静态局部变量 vs 局部变量 在静态局部变量中&#xff0c;变量不会在函数调用结束后销毁&…

KEDA/HPA/VPA 三件套:ABP 后台作业的事件驱动伸缩

&#x1f680; KEDA/HPA/VPA 三件套&#xff1a;ABP 后台作业的事件驱动伸缩 &#x1f4da; 目录&#x1f680; KEDA/HPA/VPA 三件套&#xff1a;ABP 后台作业的事件驱动伸缩0. TL;DR ✨1. 背景与目标 &#x1f3af;2. 架构与协作机制 &#x1f9e9;2.1 系统总览&#xff08;组…

webRTc 为何深受直播实现的青睐?

WebRTC(Web Real-Time Communication)之所以在直播场景中备受青睐,核心原因在于它天然契合了现代直播对低延迟、实时互动、跨平台兼容性的核心需求,同时大幅降低了实时音视频开发的门槛。具体来说,其优势体现在以下几个方面: 1. 超低延迟,满足实时互动需求 传统直播协…

HarmonyOS迷宫游戏鸿蒙应用开发实战:从零构建随机迷宫游戏(初版)

在鸿蒙应用开发中&#xff0c;游戏类应用能很好地锻炼 UI 布局、状态管理与逻辑交互能力。本文将以一个随机迷宫游戏为例&#xff0c;详细拆解从首页设计到迷宫生成、角色控制、通关判定的完整开发流程&#xff0c;带你掌握 ArkUI 框架的核心应用技巧。一、项目整体架构本次开发…

石头科技出海升级:全球电商业财一体化与OMS实践

石头科技作为智能清洁设备领域的独角兽&#xff0c;2023 年海外收入占比超过 60%&#xff0c;产品销往全球 60 多个国家。然而&#xff0c;智能硬件出海的复杂性&#xff0c;让企业在业财管理上面临前所未有的挑战。智能硬件业财痛点 产品生命周期管理&#xff1a;研发、生产到…

《URP管线中后处理效果的创新应用与优化实践》

硬件性能的飞速提升与玩家对画面品质的高要求形成了相互推动的态势,而渲染效果作为游戏视觉体验的核心载体,直接决定了玩家对游戏的第一印象与沉浸感。后处理效果作为URP管线的“点睛之笔”,通过在渲染流程末尾对最终图像进行二次加工,能够模拟真实世界的光学现象(如光线散…

【Java 底层】JVM 垃圾回收机制深度剖析:从对象生死判定到收集器实战

【Java 底层】JVM 垃圾回收机制深度剖析&#xff1a;从对象生死判定到收集器实战 【Java 底层】JVM 垃圾回收机制深度剖析&#xff1a;从对象生死判定到收集器实战 Java 之所以被称为 “开发效率利器”&#xff0c;很大程度上得益于其自动内存管理机制 —— 开发者无需手动分配…

网络问题排查

网络连通性测试&#xff1a;ping ip持续性监测&#xff1a;ping -t ipnetstat 可以查看网络连接状态&#xff0c;可以看到显示系统的网络连接&#xff0c;路由表&#xff0c;接口等信息。netstat -nult 回车-t:显示的是tcp的连接-u:显示udp的连接-l:只显示监听状态的端口-n:显示…

tuple/dict/list 这三个数据类型在取值时候的区别

tuple&#xff08;元组&#xff09;、dict&#xff08;字典&#xff09;、list&#xff08;列表&#xff09;在取值时的区别。 1. list&#xff08;列表&#xff09; &#x1f449; 列表就是“一串有顺序的东西”&#xff0c;像排队的人。 取值方式&#xff1a;用 下标&#xf…

深度解析大模型服务性能评测:AI Ping平台助力开发者精准选型MaaS服务

深度解析大模型服务性能评测&#xff1a;AI Ping平台助力开发者精准选型MaaS服务 &#x1f31f; Hello&#xff0c;我是摘星&#xff01; &#x1f308; 在彩虹般绚烂的技术栈中&#xff0c;我是那个永不停歇的色彩收集者。 &#x1f98b; 每一个优化都是我培育的花朵&#xff…

OpenCV物体跟踪:从理论到实战的全面解析

​ 一、引言​ 在计算机视觉的广阔领域中&#xff0c;物体跟踪技术宛如一颗璀璨的明星&#xff0c;散发着独特的魅力与价值&#xff0c;发挥着举足轻重的作用。它致力于在连续的图像帧或视频序列里&#xff0c;精准识别并持续定位特定的目标物体&#xff0c;这一过程看似简单…

【Python】OS模块操作目录

1、概述os模块是一个Python内置的操作目录和查看系统基础信息的模块&#xff0c;可用于让我们对目录进行批量操作&#xff0c;其中包括&#xff1a;查看系统信息&#xff08;环境变量、分隔符、换行符等&#xff09;&#xff0c;对目录进行创建、删除、重命名、查看目录内容等&…

JavaScript中 i++ 与 ++i

在 JavaScript 编程中&#xff0c;i&#xff08;前置自增&#xff09;和i&#xff08;后置自增&#xff09;是两个常用但极易混淆的运算符。它们看似都能实现变量自增 1 的功能&#xff0c;但其执行时机和返回值的差异&#xff0c;常常导致开发者在实际编码中出现逻辑错误。本文…

fastapi 中间件的使用

1. 中间件基础结构from starlette.middleware.base import BaseHTTPMiddlewareclass RequestLoggerMiddleware(BaseHTTPMiddleware):async def dispatch(self, request: Request, call_next):# 1. 请求处理前逻辑# 2. 调用后续处理response await call_next(request)# 3. 响应…

网络白菜包子手动安装 Arch Linux

大家好&#xff01;我是大聪明-PLUS&#xff01;针对初学者的 Arch Linux 安装详细教程。我曾经花了不少时间才搞清楚安装过程。本文旨在提供一种“捷径”&#xff0c;让每个人都能轻松上手&#xff0c;无论他们是否有 Linux 使用经验。Arch 的主要特点是极其灵活的系统配置&am…

Linux学习笔记(五)--Linux基础开发工具使用

在Linux中软件包通常是指一个包含了软件程序、元数据、依赖关系信息和安装脚本的压缩文件​​。因为在Linux上如果没有软件包管理器,那么想要下载软件会非常麻烦,不仅需要自己去手动编译和安装,而且难以卸载和管理,所以软件包的出现解决了这些问题.软件包一般是由程序文件(编译…

数据结构(陈越,何钦铭) 第十讲 排序(下)

10.1 快速排序 10.1.1 算法概述10.1.2 选主元10.1.3 子集划分10.1.4 算法实现10.2 表排序 10.2.1 算法概述10.2.2 物理排序10.3 基数排序 10.3.1 桶排序10.3.2 基数排序10.3.3 多关键字的排序10.4 排序算法的比较

vue 使用print.js 打印文本,HTML元素,图片,PDF

vue 使用print.js 打印文本,HTML元素,图片,PDF 安装 npm install print-js --save示例 <template><div class"print-example"><h2>Print.js 打印示例</h2><!-- 打印区域 --><div id"printableArea" class"printable…

jenkins审批机器人功能概述-Telegram版

Jenkins审批机器人 - 功能概述 代码链接&#xff0c;私聊可得 项目简介 Jenkins审批机器人是一个集成Jenkins CI/CD流程的自动化审批系统&#xff0c;通过Telegram机器人提供便捷的发布审批功能。该系统支持多环境部署审批、用户权限管理、构建结果通知等完整的DevOps审批流程。…

Rust : 关于解引用“*”

关于解引用*操作符&#xff0c;谨供参考&#xff01; 一、主要代码 use std::ops::Deref; fn main() {model_1();model_2();model_3();model_4();model_5();model_6();model_7();model_8();model_9(); }二、*操作符与常见的引用和解引用 fn model_1(){let reference:&St…