Files
SnowLuma/.pnpm-store/v11/files/f1/d9ae18a4a6463e4a970920c65649fc182460a163eefc4f9c3fbf0650ff56e04df5f5bab98fc3179126ed5a270064fda3fcefe3ae32d56d4228a56381a4e4be
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

66 lines
1.8 KiB
Plaintext

import { f as createRule } from "../utils.js";
var rest_spread_spacing_default = createRule({
name: "rest-spread-spacing",
meta: {
type: "layout",
docs: { description: "Enforce spacing between rest and spread operators and their expressions" },
fixable: "whitespace",
schema: [{
type: "string",
enum: ["always", "never"]
}],
defaultOptions: ["never"],
messages: {
unexpectedWhitespace: "Unexpected whitespace after {{type}} operator.",
expectedWhitespace: "Expected whitespace after {{type}} operator."
}
},
create(context, [style]) {
const sourceCode = context.sourceCode;
const alwaysSpace = style === "always";
function checkWhiteSpace(node) {
const operator = sourceCode.getFirstToken(node);
const nextToken = sourceCode.getTokenAfter(operator);
const hasWhitespace = sourceCode.isSpaceBetween(operator, nextToken);
let type;
switch (node.type) {
case "SpreadElement":
type = "spread";
if (node.parent.type === "ObjectExpression") type += " property";
break;
case "RestElement":
type = "rest";
if (node.parent.type === "ObjectPattern") type += " property";
break;
default: return;
}
if (alwaysSpace && !hasWhitespace) context.report({
node,
loc: operator.loc,
messageId: "expectedWhitespace",
data: { type },
fix(fixer) {
return fixer.replaceTextRange([operator.range[1], nextToken.range[0]], " ");
}
});
else if (!alwaysSpace && hasWhitespace) context.report({
node,
loc: {
start: operator.loc.end,
end: nextToken.loc.start
},
messageId: "unexpectedWhitespace",
data: { type },
fix(fixer) {
return fixer.removeRange([operator.range[1], nextToken.range[0]]);
}
});
}
return {
SpreadElement: checkWhiteSpace,
RestElement: checkWhiteSpace
};
}
});
export { rest_spread_spacing_default as t };