UNPKG

eslint-plugin-sf-plugin

Version:
51 lines (50 loc) 1.91 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.flagCasing = void 0; /* * Copyright (c) 2020, salesforce.com, inc. * All rights reserved. * Licensed under the BSD 3-Clause license. * For full license text, see LICENSE.txt file in the repo root or https://opensource.org/licenses/BSD-3-Clause */ const eslint_utils_1 = require("@typescript-eslint/utils/eslint-utils"); const commands_1 = require("../shared/commands"); const flags_1 = require("../shared/flags"); const toLowerKebabCase = (str) => str .replace(/([a-z])([A-Z])/g, '$1-$2') .replace(/[\s_]+/g, '-') .toLowerCase(); exports.flagCasing = eslint_utils_1.RuleCreator.withoutDocs({ meta: { docs: { description: 'Enforce lowercase kebab-case flag names', recommended: 'strict', }, messages: { message: 'Flag {{flagName}} should be lowercase and use kebab-case to separate words', }, type: 'problem', schema: [], fixable: 'code', }, defaultOptions: [], create(context) { return (0, commands_1.isInCommandDirectory)(context) ? { Property(node) { if ((0, flags_1.isFlag)(node) && (0, commands_1.ancestorsContainsSfCommand)(context)) { const flagName = (0, flags_1.resolveFlagName)(node); if (flagName && toLowerKebabCase(flagName) !== flagName) { context.report({ node, messageId: 'message', data: { flagName }, fix: (fixer) => fixer.replaceText(node.key, `'${toLowerKebabCase(flagName)}'`), }); } } }, } : {}; }, });