Files
NapCatQQ/.pnpm-store/v3/files/64/0b7ee1ba18cefa376685a85383797806b7ac71f6f172f428f6e1e5ca407b645f65e88ef30166b7e9ceaf7c4dc59a5de6e216e81b704ab24714ab17374f48d1
T
TanTan e311ca3275
Build NapCat Artifacts / Type Check & Test (push) Waiting to run
docs: 仓库链接指向本镜像仓库
2026-11-13 09:25:58 +08:00

95 lines
2.8 KiB
Plaintext

'use strict';
var utils = require('../utils.js');
require('eslint-visitor-keys');
require('espree');
require('estraverse');
const PRESERVE_PREFIX_SPACE_BEFORE_GENERIC = /* @__PURE__ */ new Set([
"TSCallSignatureDeclaration",
"ArrowFunctionExpression",
"TSFunctionType",
"FunctionExpression"
]);
var typeGenericSpacing = utils.createRule({
name: "type-generic-spacing",
package: "plus",
meta: {
type: "layout",
docs: {
description: "Enforces consistent spacing inside TypeScript type generics"
},
fixable: "whitespace",
schema: [],
messages: {
genericSpacingMismatch: "Generic spaces mismatch"
}
},
defaultOptions: [],
create: (context) => {
const sourceCode = context.sourceCode;
return {
TSTypeParameterDeclaration: (node) => {
if (!PRESERVE_PREFIX_SPACE_BEFORE_GENERIC.has(node.parent.type)) {
const pre = sourceCode.text.slice(0, node.range[0]);
const preSpace = pre.match(/(\s+)$/)?.[0];
if (preSpace && preSpace.length) {
context.report({
node,
messageId: "genericSpacingMismatch",
*fix(fixer) {
yield fixer.replaceTextRange([node.range[0] - preSpace.length, node.range[0]], "");
}
});
}
}
const params = node.params;
for (let i = 1; i < params.length; i++) {
const prev = params[i - 1];
const current = params[i];
const from = prev.range[1];
const to = current.range[0];
const span = sourceCode.text.slice(from, to);
if (span !== ", " && !span.match(/,\s*\n/)) {
context.report({
*fix(fixer) {
yield fixer.replaceTextRange([from, to], ", ");
},
loc: {
start: prev.loc.end,
end: current.loc.start
},
messageId: "genericSpacingMismatch",
node
});
}
}
},
// add space around = in type Foo<T = true>
TSTypeParameter: (node) => {
if (!node.default)
return;
const endNode = node.constraint || node.name;
const from = endNode.range[1];
const to = node.default.range[0];
const span = sourceCode.text.slice(from, to);
if (!span.match(/(?:^|[^ ]) = (?:$|[^ ])/)) {
context.report({
*fix(fixer) {
yield fixer.replaceTextRange([from, to], span.replace(/\s*=\s*/, " = "));
},
loc: {
start: endNode.loc.end,
end: node.default.loc.start
},
messageId: "genericSpacingMismatch",
node
});
}
}
};
}
});
module.exports = typeGenericSpacing;