eslint-plugin-text
Version:
An incredible ESLint plugin for retext or textlint
304 lines (287 loc) • 9.03 kB
JavaScript
;
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;