Files
NapCatQQ/.pnpm-store/v3/files/52/df7b9212fed883cfc29d13e98e7b51b56a9cbe6383637276ad47b41984af6c1d307c6e1f5e5df101ce0a092746cfa4ff37de3bd1668deb6cd276814fb8b812
T
TanTan e311ca3275
Build NapCat Artifacts / Type Check & Test (push) Waiting to run
docs: 仓库链接指向本镜像仓库
2026-11-13 09:25:58 +08:00

67 lines
2.2 KiB
Plaintext

'use strict';
var utils = require('../utils.js');
require('eslint-visitor-keys');
require('espree');
require('estraverse');
const messages = {
propOnNewLine: "Property should be placed on a new line",
propOnSameLine: "Property should be placed on the same line as the component declaration"
};
var jsxFirstPropNewLine = utils.createRule({
name: "jsx-first-prop-new-line",
package: "jsx",
meta: {
type: "layout",
docs: {
description: "Enforce proper position of the first property in JSX"
},
fixable: "code",
messages,
schema: [
{
type: "string",
enum: ["always", "never", "multiline", "multiline-multiprop", "multiprop"]
}
]
},
create(context) {
const configuration = context.options[0] || "multiline-multiprop";
function isMultilineJSX(jsxNode) {
return jsxNode.loc.start.line < jsxNode.loc.end.line;
}
return {
JSXOpeningElement(node) {
if (configuration === "multiline" && isMultilineJSX(node) || configuration === "multiline-multiprop" && isMultilineJSX(node) && node.attributes.length > 1 || configuration === "multiprop" && node.attributes.length > 1 || configuration === "always") {
node.attributes.some((decl) => {
if (decl.loc.start.line === node.loc.start.line) {
context.report({
node: decl,
messageId: "propOnNewLine",
fix(fixer) {
return fixer.replaceTextRange([(node.typeArguments || node.name).range[1], decl.range[0]], "\n");
}
});
}
return true;
});
} else if (configuration === "never" && node.attributes.length > 0 || configuration === "multiprop" && isMultilineJSX(node) && node.attributes.length <= 1) {
const firstNode = node.attributes[0];
if (node.loc.start.line < firstNode.loc.start.line) {
context.report({
node: firstNode,
messageId: "propOnSameLine",
fix(fixer) {
return fixer.replaceTextRange([node.name.range[1], firstNode.range[0]], " ");
}
});
}
}
}
};
}
});
module.exports = jsxFirstPropNewLine;