UNPKG

eslint-plugin-text

Version:

An incredible ESLint plugin for retext or textlint

304 lines (287 loc) 9.03 kB
'use strict'; var eslintPluginUtils = require('eslint-plugin-utils'); var path = require('node:path'); var node_url = require('node:url'); var node_module = require('node:module'); var synckit = require('synckit'); var _documentCurrentScript = typeof document !== 'undefined' ? document.currentScript : null; var __defProp$2 = Object.defineProperty; var __defProps$2 = Object.defineProperties; var __getOwnPropDescs$2 = Object.getOwnPropertyDescriptors; var __getOwnPropSymbols$2 = Object.getOwnPropertySymbols; var __hasOwnProp$2 = Object.prototype.hasOwnProperty; var __propIsEnum$2 = Object.prototype.propertyIsEnumerable; var __defNormalProp$2 = (obj, key, value) => key in obj ? __defProp$2(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value; var __spreadValues$2 = (a, b) => { for (var prop in b || (b = {})) if (__hasOwnProp$2.call(b, prop)) __defNormalProp$2(a, prop, b[prop]); if (__getOwnPropSymbols$2) for (var prop of __getOwnPropSymbols$2(b)) { if (__propIsEnum$2.call(b, prop)) __defNormalProp$2(a, prop, b[prop]); } return a; }; var __spreadProps$2 = (a, b) => __defProps$2(a, __getOwnPropDescs$2(b)); const base = { parser: "eslint-plugin-text", plugins: ["text", "utils"], processor: "utils/jsonMessage" }; const recommended = __spreadProps$2(__spreadValues$2({}, base), { rules: { "text/retext": 1, "text/textlint": 1 } }); const retext$1 = __spreadProps$2(__spreadValues$2({}, base), { rules: { "text/retext": 1 } }); const textlint$1 = __spreadProps$2(__spreadValues$2({}, base), { rules: { "text/textlint": 1 } }); var configs_ = /*#__PURE__*/Object.freeze({ __proto__: null, base: base, recommended: recommended, retext: retext$1, textlint: textlint$1 }); process.cwd(); const cjsRequire = typeof require === 'undefined' ? node_module.createRequire((typeof document === 'undefined' ? require('u' + 'rl').pathToFileURL(__filename).href : (_documentCurrentScript && _documentCurrentScript.tagName.toUpperCase() === 'SCRIPT' && _documentCurrentScript.src || new URL('index.cjs', document.baseURI).href))) : require; const EVAL_FILENAMES = new Set([ '[eval]', '[worker eval]' ]); [ '.ts', '.tsx', ...Object.keys(cjsRequire.extensions) ]; const import_meta = {}; const _filename = typeof __filename === "undefined" || EVAL_FILENAMES.has(__filename) ? node_url.fileURLToPath(import_meta.url) : __filename; const _dirname = path.dirname(_filename); const { name, version } = cjsRequire( path.resolve(_dirname, "../package.json") ); var meta$1 = /*#__PURE__*/Object.freeze({ __proto__: null, name: name, version: version }); const meta = { name: "text-eslint", version }; const parseForESLint = (text, _options) => { var _a, _b; const lines = text.split("\n"); return { ast: { // @ts-expect-error -- bad ts enum type: "Program", sourceType: "module", comments: [], tokens: [], body: [], range: [0, text.length], loc: { start: { line: 1, column: 0 }, end: { line: lines.length, column: (_b = (_a = lines.at(-1)) == null ? void 0 : _a.length) != null ? _b : 0 } } } }; }; const parse = (text, options) => parseForESLint(text).ast; var parser = /*#__PURE__*/Object.freeze({ __proto__: null, meta: meta, parse: parse, parseForESLint: parseForESLint }); const lint = synckit.createSyncFn(path.resolve(_dirname, "./worker.js")); var __defProp$1 = Object.defineProperty; var __defProps$1 = Object.defineProperties; var __getOwnPropDescs$1 = Object.getOwnPropertyDescriptors; var __getOwnPropSymbols$1 = Object.getOwnPropertySymbols; var __hasOwnProp$1 = Object.prototype.hasOwnProperty; var __propIsEnum$1 = Object.prototype.propertyIsEnumerable; var __defNormalProp$1 = (obj, key, value) => key in obj ? __defProp$1(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value; var __spreadValues$1 = (a, b) => { for (var prop in b || (b = {})) if (__hasOwnProp$1.call(b, prop)) __defNormalProp$1(a, prop, b[prop]); if (__getOwnPropSymbols$1) for (var prop of __getOwnPropSymbols$1(b)) { if (__propIsEnum$1.call(b, prop)) __defNormalProp$1(a, prop, b[prop]); } return a; }; var __spreadProps$1 = (a, b) => __defProps$1(a, __getOwnPropDescs$1(b)); const retext = { meta: { type: "problem", fixable: "code", messages: {}, schema: [] }, defaultOptions: [], create(context) { const sourceText = context.sourceCode.text; return { Program(node) { const { messages, content: fixedText } = lint({ text: sourceText, filename: context.filename, linter: "retext", fix: true }); let fixed = 0; for (const { reason, ruleId, fatal, line, column, place } of messages) { const severity = fatal ? 2 : fatal == null ? 0 : 1; if (!severity) { continue; } const message = { message: reason, ruleId, severity }; const pos = place && "start" in place ? place : void 0; context.report({ // @ts-expect-error -- it's fine // related to https://github.com/eslint/eslint/issues/14198 message: JSON.stringify(message), // ! eslint ast column is 0-indexed, but unified is 1-indexed loc: pos ? { start: __spreadProps$1(__spreadValues$1({}, pos.start), { column: pos.start.column - 1 }), end: __spreadProps$1(__spreadValues$1({}, pos.end), { column: pos.end.column - 1 }) } : { line, column: column - 1 }, node, fix: fixedText === sourceText ? null : () => fixed++ ? null : { range: [0, sourceText.length], text: fixedText } }); } } }; } }; const textlint = { meta: { type: "problem", fixable: "code", messages: {}, schema: [] }, defaultOptions: [], create(context) { const sourceText = context.sourceCode.text; return { Program() { const result = lint({ text: sourceText, filename: context.filename, linter: "textlint", fix: true }); for (const { message, loc, severity, ruleId, fix } of result.messages) { if (severity === 0) { continue; } const msg = { severity, message, ruleId }; context.report({ // @ts-expect-error -- it's fine message: JSON.stringify(msg), loc, fix: fix && (() => fix) }); } } }; } }; var rules = /*#__PURE__*/Object.freeze({ __proto__: null, retext: retext, textlint: textlint }); const arrayify = (...args) => args.reduce((arr, curr) => { arr.push( ...Array.isArray(curr) ? curr.filter((it) => it != null) : ( // eslint-disable-next-line sonarjs/no-nested-conditional curr == null ? [] : [curr] ) ); return arr; }, []); var __defProp = Object.defineProperty; var __defProps = Object.defineProperties; var __getOwnPropDescs = Object.getOwnPropertyDescriptors; var __getOwnPropSymbols = Object.getOwnPropertySymbols; var __hasOwnProp = Object.prototype.hasOwnProperty; var __propIsEnum = Object.prototype.propertyIsEnumerable; var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value; var __spreadValues = (a, b) => { for (var prop in b || (b = {})) if (__hasOwnProp.call(b, prop)) __defNormalProp(a, prop, b[prop]); if (__getOwnPropSymbols) for (var prop of __getOwnPropSymbols(b)) { if (__propIsEnum.call(b, prop)) __defNormalProp(a, prop, b[prop]); } return a; }; var __spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b)); const text = { meta: meta$1, rules }; const flatBase = { name: "text/flat-base", files: ["**/*"], plugins: { text }, processor: eslintPluginUtils.jsonMessage, languageOptions: { parser }, rules: recommended.rules }; const flatRecommended = __spreadProps(__spreadValues({}, flatBase), { name: "text/flat-recommended" }); const configs = __spreadProps(__spreadValues({}, configs_), { flatBase, flatRecommended }); eslintPluginUtils.registerJsonMessageHandler( "text/retext", ({ ruleId, message, url }) => ({ ruleId: `retext/${ruleId}`, message: `${message} reference: ${// istanbul ignore next url != null ? url : "-"}` }) ); eslintPluginUtils.registerJsonMessageHandler( "text/textlint", ({ ruleId, message }) => ({ ruleId: `textlint/${ruleId}`, message: `${message}` }) ); exports.arrayify = arrayify; exports.configs = configs; exports.meta = meta$1; exports.parser = parser; exports.rules = rules; exports.text = text;