Files
SnowLuma/.pnpm-store/v11/files/2b/c27ac810a698293436e59481e6e83755147c9868926cc1f34a91d6458308d0d0a7347f912bdb6c8d2b382b30544c752c3366f8430c37192140578c4fbe8f73
T
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) Canceled after 0s
docs: 仓库链接指向本镜像仓库
2026-11-13 09:27:07 +08:00

142 lines
4.6 KiB
Plaintext

import { f as createRule, g as import_ast_utils, m as AST_NODE_TYPES } from "../utils.js";
var semi_spacing_default = createRule({
name: "semi-spacing",
meta: {
type: "layout",
docs: { description: "Enforce consistent spacing before and after semicolons" },
fixable: "whitespace",
schema: [{
type: "object",
properties: {
before: { type: "boolean" },
after: { type: "boolean" }
},
additionalProperties: false
}],
defaultOptions: [{
before: false,
after: true
}],
messages: {
unexpectedWhitespaceBefore: "Unexpected whitespace before semicolon.",
unexpectedWhitespaceAfter: "Unexpected whitespace after semicolon.",
missingWhitespaceBefore: "Missing whitespace before semicolon.",
missingWhitespaceAfter: "Missing whitespace after semicolon."
}
},
create(context, [config]) {
const { before: requireSpaceBefore, after: requireSpaceAfter } = config;
const sourceCode = context.sourceCode;
function hasLeadingSpace(token) {
const tokenBefore = sourceCode.getTokenBefore(token);
return tokenBefore && (0, import_ast_utils.isTokenOnSameLine)(tokenBefore, token) && sourceCode.isSpaceBetween(tokenBefore, token);
}
function hasTrailingSpace(token) {
const tokenAfter = sourceCode.getTokenAfter(token);
return tokenAfter && (0, import_ast_utils.isTokenOnSameLine)(token, tokenAfter) && sourceCode.isSpaceBetween(token, tokenAfter);
}
function isLastTokenInCurrentLine(token) {
const tokenAfter = sourceCode.getTokenAfter(token);
return !(tokenAfter && (0, import_ast_utils.isTokenOnSameLine)(token, tokenAfter));
}
function isFirstTokenInCurrentLine(token) {
const tokenBefore = sourceCode.getTokenBefore(token);
return !(tokenBefore && (0, import_ast_utils.isTokenOnSameLine)(token, tokenBefore));
}
function isBeforeClosingParen(token) {
const nextToken = sourceCode.getTokenAfter(token);
return nextToken && (0, import_ast_utils.isClosingBraceToken)(nextToken) || (0, import_ast_utils.isClosingParenToken)(nextToken);
}
function checkSemicolonSpacing(token, node) {
if ((0, import_ast_utils.isSemicolonToken)(token)) {
if (hasLeadingSpace(token)) {
if (!requireSpaceBefore) {
const tokenBefore = sourceCode.getTokenBefore(token);
const loc = {
start: tokenBefore.loc.end,
end: token.loc.start
};
context.report({
node,
loc,
messageId: "unexpectedWhitespaceBefore",
fix(fixer) {
return fixer.removeRange([tokenBefore.range[1], token.range[0]]);
}
});
}
} else if (requireSpaceBefore) {
const loc = token.loc;
context.report({
node,
loc,
messageId: "missingWhitespaceBefore",
fix(fixer) {
return fixer.insertTextBefore(token, " ");
}
});
}
if (!isFirstTokenInCurrentLine(token) && !isLastTokenInCurrentLine(token) && !isBeforeClosingParen(token)) {
if (hasTrailingSpace(token)) {
if (!requireSpaceAfter) {
const tokenAfter = sourceCode.getTokenAfter(token);
const loc = {
start: token.loc.end,
end: tokenAfter.loc.start
};
context.report({
node,
loc,
messageId: "unexpectedWhitespaceAfter",
fix(fixer) {
return fixer.removeRange([token.range[1], tokenAfter.range[0]]);
}
});
}
} else if (requireSpaceAfter) {
const loc = token.loc;
context.report({
node,
loc,
messageId: "missingWhitespaceAfter",
fix(fixer) {
return fixer.insertTextAfter(token, " ");
}
});
}
}
}
}
function checkNode(node) {
checkSemicolonSpacing(sourceCode.getLastToken(node), node);
}
return {
VariableDeclaration: checkNode,
ExpressionStatement: checkNode,
BreakStatement: checkNode,
ContinueStatement: checkNode,
DebuggerStatement: checkNode,
DoWhileStatement: checkNode,
ReturnStatement: checkNode,
ThrowStatement: checkNode,
ImportDeclaration: checkNode,
ExportNamedDeclaration: checkNode,
ExportAllDeclaration: checkNode,
ExportDefaultDeclaration: checkNode,
ForStatement(node) {
if (node.init) checkSemicolonSpacing(sourceCode.getTokenAfter(node.init), node);
if (node.test) checkSemicolonSpacing(sourceCode.getTokenAfter(node.test), node);
},
PropertyDefinition: checkNode,
AccessorProperty: checkNode,
TSDeclareFunction: checkNode,
TSTypeAliasDeclaration: checkNode,
TSTypeAnnotation(node) {
const excludeNodeTypes = new Set([AST_NODE_TYPES.TSDeclareFunction]);
if (node.parent && !excludeNodeTypes.has(node.parent.type)) checkNode(node.parent);
}
};
}
});
export { semi_spacing_default as t };