Files
SnowLuma/.pnpm-store/v11/files/47/3fa643d0bd46c0f1c2241d638204b3d862f6bbcbcc14072716ca63dc707e65a373f439b88091d5790f1412a8efb53c1a672568297803e2631f5017105e766f
TanTan 2a69b23b47
Dev Build / cleanup (push) Canceled after 0s
Dev Build / typecheck (push) Canceled after 0s
Dev Build / build (linux-arm64, ubuntu-24.04-arm, linux-arm64) (push) Canceled after 0s
Dev Build / build (linux-x64, ubuntu-latest, linux-x64) (push) Canceled after 0s
Dev Build / build (win-x64, windows-latest, win32-x64) (push) Canceled after 0s
Dev Build / dispatch-dev-docker (push) Skipped
docs: 仓库链接指向本镜像仓库
2026-11-13 09:27:07 +08:00

112 lines
4.5 KiB
Plaintext

import { f as createRule, g as import_ast_utils, h as AST_TOKEN_TYPES, m as AST_NODE_TYPES } from "../utils.js";
const UNIONS = ["|", "&"];
var space_infix_ops_default = createRule({
name: "space-infix-ops",
meta: {
type: "layout",
docs: { description: "Require spacing around infix operators" },
fixable: "whitespace",
schema: [{
type: "object",
properties: {
int32Hint: { type: "boolean" },
ignoreTypes: { type: "boolean" }
},
additionalProperties: false
}],
defaultOptions: [{
int32Hint: false,
ignoreTypes: false
}],
messages: { missingSpace: "Operator '{{operator}}' must be spaced." }
},
create(context, [options]) {
const { int32Hint, ignoreTypes } = options;
const sourceCode = context.sourceCode;
function report(node, operator) {
context.report({
node,
loc: operator.loc,
messageId: "missingSpace",
data: { operator: operator.value },
fix(fixer) {
const previousToken = sourceCode.getTokenBefore(operator);
const afterToken = sourceCode.getTokenAfter(operator);
let fixString = "";
if (operator.range[0] - previousToken.range[1] === 0) fixString = " ";
fixString += operator.value;
if (afterToken.range[0] - operator.range[1] === 0) fixString += " ";
return fixer.replaceText(operator, fixString);
}
});
}
function getFirstNonSpacedToken(left, right, op) {
const operator = sourceCode.getFirstTokenBetween(left, right, (token) => token.value === op);
const prev = sourceCode.getTokenBefore(operator);
const next = sourceCode.getTokenAfter(operator);
if (!sourceCode.isSpaceBetween(prev, operator) || !sourceCode.isSpaceBetween(operator, next)) return operator;
return null;
}
function checkBinary(node) {
const leftNode = "typeAnnotation" in node.left && node.left.typeAnnotation ? node.left.typeAnnotation : node.left;
const rightNode = node.right;
const nonSpacedNode = getFirstNonSpacedToken(leftNode, rightNode, "operator" in node && node.operator ? node.operator : "=");
if (nonSpacedNode) {
if (!(int32Hint && sourceCode.getText(node).endsWith("|0"))) report(node, nonSpacedNode);
}
}
function isSpaceChar(token) {
return token.type === AST_TOKEN_TYPES.Punctuator && /^[=?:]$/.test(token.value);
}
function checkAndReportAssignmentSpace(node, leftNode, rightNode) {
if (!rightNode || !leftNode) return;
const operator = sourceCode.getFirstTokenBetween(leftNode, rightNode, isSpaceChar);
const prev = sourceCode.getTokenBefore(operator);
const next = sourceCode.getTokenAfter(operator);
if (!sourceCode.isSpaceBetween(prev, operator) || !sourceCode.isSpaceBetween(operator, next)) report(node, operator);
}
function checkPropertyAssignment(node) {
checkAndReportAssignmentSpace(node, node.optional && !node.typeAnnotation ? sourceCode.getTokenAfter(node.key) : node.typeAnnotation ?? node.key, node.value);
}
function checkTSBinary(typeAnnotation) {
typeAnnotation.types.forEach((type) => {
const skipFunctionParenthesis = type.type === AST_NODE_TYPES.TSFunctionType ? import_ast_utils.isNotOpeningParenToken : 0;
const operator = sourceCode.getTokenBefore(type, skipFunctionParenthesis);
if (!ignoreTypes && operator != null && UNIONS.includes(operator.value)) {
const prev = sourceCode.getTokenBefore(operator);
const next = sourceCode.getTokenAfter(operator);
if (!sourceCode.isSpaceBetween(prev, operator) || !sourceCode.isSpaceBetween(operator, next)) report(typeAnnotation, operator);
}
});
}
return {
AssignmentExpression: checkBinary,
AssignmentPattern: checkBinary,
BinaryExpression: checkBinary,
LogicalExpression: checkBinary,
ConditionalExpression(node) {
checkAndReportAssignmentSpace(node, node.test, node.consequent);
checkAndReportAssignmentSpace(node, node.consequent, node.alternate);
},
VariableDeclarator(node) {
checkAndReportAssignmentSpace(node, node.id.typeAnnotation ?? node.id, node.init);
},
PropertyDefinition: checkPropertyAssignment,
AccessorProperty: checkPropertyAssignment,
TSEnumMember(node) {
checkAndReportAssignmentSpace(node, node.id, node.initializer);
},
TSTypeAliasDeclaration(node) {
checkAndReportAssignmentSpace(node, node.typeParameters ?? node.id, node.typeAnnotation);
},
TSUnionType: checkTSBinary,
TSIntersectionType: checkTSBinary,
TSConditionalType(node) {
checkAndReportAssignmentSpace(node, node.extendsType, node.trueType);
checkAndReportAssignmentSpace(node, node.trueType, node.falseType);
}
};
}
});
export { space_infix_ops_default as t };