routie dev init since i didn't adhere to any proper guidance up until now
This commit is contained in:
+99
@@ -0,0 +1,99 @@
|
||||
const require_runtime = require('../_virtual/_rolldown/runtime.js');
|
||||
const require_index = require('../utils/index.js');
|
||||
const require_casing = require('../utils/casing.js');
|
||||
let node_path = require("node:path");
|
||||
node_path = require_runtime.__toESM(node_path);
|
||||
|
||||
//#region lib/rules/match-component-file-name.ts
|
||||
var import_utils = /* @__PURE__ */ require_runtime.__toESM(require_index.default);
|
||||
function canVerify(node) {
|
||||
return node.type === "Literal" || node.type === "TemplateLiteral" && node.expressions.length === 0 && node.quasis.length === 1;
|
||||
}
|
||||
var match_component_file_name_default = {
|
||||
meta: {
|
||||
type: "suggestion",
|
||||
docs: {
|
||||
description: "require component name property to match its file name",
|
||||
categories: void 0,
|
||||
url: "https://eslint.vuejs.org/rules/match-component-file-name.html"
|
||||
},
|
||||
fixable: null,
|
||||
hasSuggestions: true,
|
||||
schema: [{
|
||||
type: "object",
|
||||
properties: {
|
||||
extensions: {
|
||||
type: "array",
|
||||
items: { type: "string" },
|
||||
uniqueItems: true,
|
||||
additionalItems: false
|
||||
},
|
||||
shouldMatchCase: { type: "boolean" }
|
||||
},
|
||||
additionalProperties: false
|
||||
}],
|
||||
messages: { shouldMatchFileName: "Component name `{{name}}` should match file name `{{filename}}`." }
|
||||
},
|
||||
create(context) {
|
||||
const options = context.options[0];
|
||||
const shouldMatchCase = options && options.shouldMatchCase || false;
|
||||
const extensionsArray = options && options.extensions;
|
||||
const allowedExtensions = Array.isArray(extensionsArray) ? extensionsArray : ["jsx"];
|
||||
const extension = node_path.default.extname(context.filename);
|
||||
const filename = node_path.default.basename(context.filename, extension);
|
||||
const errors = [];
|
||||
let componentCount = 0;
|
||||
if (!allowedExtensions.includes(extension.replace(/^\./, ""))) return {};
|
||||
function compareNames(name, filename) {
|
||||
if (shouldMatchCase) return name === filename;
|
||||
return require_casing.pascalCase(name) === filename || require_casing.kebabCase(name) === filename;
|
||||
}
|
||||
function verifyName(node) {
|
||||
let name;
|
||||
if (node.type === "TemplateLiteral") name = node.quasis[0].value.cooked;
|
||||
else name = `${node.value}`;
|
||||
if (!compareNames(name, filename)) errors.push({
|
||||
node,
|
||||
messageId: "shouldMatchFileName",
|
||||
data: {
|
||||
filename,
|
||||
name
|
||||
},
|
||||
suggest: [{
|
||||
desc: "Rename component to match file name.",
|
||||
fix(fixer) {
|
||||
const quote = node.type === "TemplateLiteral" ? "`" : node.raw[0];
|
||||
return fixer.replaceText(node, `${quote}${filename}${quote}`);
|
||||
}
|
||||
}]
|
||||
});
|
||||
}
|
||||
return import_utils.default.compositingVisitors(import_utils.default.executeOnCallVueComponent(context, (node) => {
|
||||
if (node.arguments.length === 2) {
|
||||
const argument = node.arguments[0];
|
||||
if (canVerify(argument)) verifyName(argument);
|
||||
}
|
||||
}), import_utils.default.executeOnVue(context, (object) => {
|
||||
const node = import_utils.default.findProperty(object, "name");
|
||||
componentCount++;
|
||||
if (!node) return;
|
||||
if (!canVerify(node.value)) return;
|
||||
verifyName(node.value);
|
||||
}), import_utils.default.defineScriptSetupVisitor(context, { onDefineOptionsEnter(node) {
|
||||
componentCount++;
|
||||
if (node.arguments.length === 0) return;
|
||||
const define = node.arguments[0];
|
||||
if (define.type !== "ObjectExpression") return;
|
||||
const nameNode = import_utils.default.findProperty(define, "name");
|
||||
if (!nameNode) return;
|
||||
if (!canVerify(nameNode.value)) return;
|
||||
verifyName(nameNode.value);
|
||||
} }), { "Program:exit"() {
|
||||
if (componentCount > 1) return;
|
||||
for (const error of errors) context.report(error);
|
||||
} });
|
||||
}
|
||||
};
|
||||
|
||||
//#endregion
|
||||
exports.default = match_component_file_name_default;
|
||||
Reference in New Issue
Block a user