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

83 lines
2.7 KiB
Plaintext

import { f as createRule } from "../utils.js";
var jsx_props_no_multi_spaces_default = createRule({
name: "jsx-props-no-multi-spaces",
meta: {
type: "layout",
docs: { description: "Disallow multiple spaces between inline JSX props. Deprecated, use `no-multi-spaces` rule instead." },
fixable: "code",
deprecated: {
message: "The rule was replaced with a more general rule.",
deprecatedSince: "5.0.0",
replacedBy: [{ rule: {
name: "no-multi-spaces",
url: "https://eslint.style/rules/no-multi-spaces"
} }]
},
schema: [],
messages: {
noLineGap: "Expected no line gap between “{{prop1}}” and “{{prop2}}”",
onlyOneSpace: "Expected only one space between “{{prop1}}” and “{{prop2}}”"
}
},
create(context) {
const sourceCode = context.sourceCode;
function getPropName(propNode) {
switch (propNode.type) {
case "JSXSpreadAttribute": return sourceCode.getText(propNode.argument);
case "JSXIdentifier": return propNode.name;
case "JSXMemberExpression": return `${getPropName(propNode.object)}.${propNode.property.name}`;
default: return propNode.name ? propNode.name.name : `${sourceCode.getText(propNode.object)}.${propNode.property.name}`;
}
}
function hasEmptyLines(first, second) {
const comments = sourceCode.getCommentsBefore ? sourceCode.getCommentsBefore(second) : [];
const nodes = [].concat(first, comments, second);
for (let i = 1; i < nodes.length; i += 1) {
const prev = nodes[i - 1];
if (nodes[i].loc.start.line - prev.loc.end.line >= 2) return true;
}
return false;
}
function checkSpacing(prev, node) {
if (hasEmptyLines(prev, node)) context.report({
messageId: "noLineGap",
node,
data: {
prop1: getPropName(prev),
prop2: getPropName(node)
}
});
if (prev.loc.end.line !== node.loc.end.line) return;
if (sourceCode.text.slice(prev.range[1], node.range[0]) !== " ") context.report({
node,
messageId: "onlyOneSpace",
data: {
prop1: getPropName(prev),
prop2: getPropName(node)
},
fix(fixer) {
return fixer.replaceTextRange([prev.range[1], node.range[0]], " ");
}
});
}
function containsGenericType(node) {
return typeof node.typeArguments !== "undefined" && node.typeArguments?.type === "TSTypeParameterInstantiation";
}
function getGenericNode(node) {
const name = node.name;
if (containsGenericType(node)) {
const type = node.typeArguments;
return Object.assign({}, node, { range: [name.range[0], type?.range[1]] });
}
return name;
}
return { JSXOpeningElement(node) {
node.attributes.reduce((prev, prop) => {
checkSpacing(prev, prop);
return prop;
}, getGenericNode(node));
} };
}
});
export { jsx_props_no_multi_spaces_default as t };