86 lines
2.9 KiB
JavaScript
86 lines
2.9 KiB
JavaScript
"use strict";
|
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
const utils_1 = require("../utils");
|
|
const compat_1 = require("../utils/compat");
|
|
exports.default = (0, utils_1.createRule)("quoted-keys", {
|
|
meta: {
|
|
docs: {
|
|
description: "require or disallow quotes around keys",
|
|
categories: ["standard"],
|
|
extensionRule: false,
|
|
},
|
|
fixable: "code",
|
|
schema: [
|
|
{
|
|
type: "object",
|
|
properties: {
|
|
prefer: {
|
|
enum: ["as-needed", "always"],
|
|
},
|
|
numbers: {
|
|
type: "boolean",
|
|
},
|
|
},
|
|
additionalProperties: false,
|
|
},
|
|
],
|
|
messages: {
|
|
unnecessarilyQuotedKey: "Unnecessarily quoted key '{{key}}' found.",
|
|
unquotedNumericKey: "Unquoted number '{{key}}' used as key.",
|
|
unquotedKeyFound: "Unquoted key '{{key}}' found.",
|
|
},
|
|
type: "layout",
|
|
},
|
|
create(context) {
|
|
const sourceCode = (0, compat_1.getSourceCode)(context);
|
|
if (!sourceCode.parserServices?.isTOML) {
|
|
return {};
|
|
}
|
|
const prefer = context.options[0]?.prefer ?? "as-needed";
|
|
const numbers = context.options[0]?.numbers !== false;
|
|
return {
|
|
TOMLBare(node) {
|
|
if (prefer === "always") {
|
|
context.report({
|
|
node,
|
|
messageId: "unquotedKeyFound",
|
|
data: { key: node.name },
|
|
fix(fixer) {
|
|
return fixer.replaceText(node, `"${node.name}"`);
|
|
},
|
|
});
|
|
return;
|
|
}
|
|
if (numbers && /^[\d-]+$/u.test(node.name)) {
|
|
context.report({
|
|
node,
|
|
messageId: "unquotedNumericKey",
|
|
data: { key: node.name },
|
|
fix(fixer) {
|
|
return fixer.replaceText(node, `"${node.name}"`);
|
|
},
|
|
});
|
|
}
|
|
},
|
|
TOMLQuoted(node) {
|
|
if (prefer === "always") {
|
|
return;
|
|
}
|
|
if (/^[\w-]+$/u.test(node.value)) {
|
|
if (numbers && /^[\d-]+$/u.test(node.value)) {
|
|
return;
|
|
}
|
|
context.report({
|
|
node,
|
|
messageId: "unnecessarilyQuotedKey",
|
|
data: { key: node.value },
|
|
fix(fixer) {
|
|
return fixer.replaceText(node, node.value);
|
|
},
|
|
});
|
|
}
|
|
},
|
|
};
|
|
},
|
|
});
|