Files
SnowLuma/.pnpm-store/v11/files/15/a9b807791ae7c17678142e7c7dc0a51ea431e2abf388b5be87da66b69434635d54da8c75bbcc8d8b220f59a72a45d73621cfb909e5116a168c4da32bc62dd3
T
TanTan 2a69b23b47
Dev Build / cleanup (push) Waiting to run
Dev Build / typecheck (push) Waiting to run
docs: 仓库链接指向本镜像仓库
2026-11-13 09:27:07 +08:00

71 lines
2.7 KiB
Plaintext

import { f as createRule, g as import_ast_utils } from "../utils.js";
var no_multi_spaces_default = createRule({
name: "no-multi-spaces",
meta: {
type: "layout",
docs: { description: "Disallow multiple spaces" },
fixable: "whitespace",
schema: [{
type: "object",
properties: {
exceptions: {
type: "object",
patternProperties: { "^([A-Z][a-z]*)+$": { type: "boolean" } },
additionalProperties: false
},
ignoreEOLComments: { type: "boolean" },
includeTabs: { type: "boolean" }
},
additionalProperties: false
}],
defaultOptions: [{
exceptions: {
Property: true,
ImportAttribute: true
},
ignoreEOLComments: false,
includeTabs: true
}],
messages: { multipleSpaces: "Multiple spaces found before '{{displayValue}}'." }
},
create(context, [options]) {
const { ignoreEOLComments, exceptions, includeTabs } = options;
const sourceCode = context.sourceCode;
const hasExceptions = Object.keys(exceptions).some((key) => exceptions[key]);
const spacesRe = includeTabs ? /[ \t]{2}/ : / {2}/;
function formatReportedCommentValue(token) {
const valueLines = token.value.split("\n");
const value = valueLines[0];
const formattedValue = `${value.slice(0, 12)}...`;
return valueLines.length === 1 && value.length <= 12 ? value : formattedValue;
}
return { Program() {
sourceCode.tokensAndComments.forEach((leftToken, leftIndex, tokensAndComments) => {
if (leftIndex === tokensAndComments.length - 1) return;
const rightToken = tokensAndComments[leftIndex + 1];
if (!spacesRe.test(sourceCode.text.slice(leftToken.range[1], rightToken.range[0])) || leftToken.loc.end.line < rightToken.loc.start.line) return;
if (ignoreEOLComments && (0, import_ast_utils.isCommentToken)(rightToken) && (leftIndex === tokensAndComments.length - 2 || rightToken.loc.end.line < tokensAndComments[leftIndex + 2].loc.start.line)) return;
if (hasExceptions) {
const parentNode = sourceCode.getNodeByRangeIndex(rightToken.range[0] - 1);
if (parentNode && exceptions[parentNode.type]) return;
}
let displayValue;
if (rightToken.type === "Block") displayValue = `/*${formatReportedCommentValue(rightToken)}*/`;
else if (rightToken.type === "Line") displayValue = `//${formatReportedCommentValue(rightToken)}`;
else displayValue = rightToken.value;
context.report({
node: rightToken,
loc: {
start: leftToken.loc.end,
end: rightToken.loc.start
},
messageId: "multipleSpaces",
data: { displayValue },
fix: (fixer) => fixer.replaceTextRange([leftToken.range[1], rightToken.range[0]], " ")
});
});
} };
}
});
export { no_multi_spaces_default as t };