UNPKG

eslint-plugin-sf-plugin

Version:
71 lines (70 loc) 3.95 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.extractMessageFlags = 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 utils_1 = require("@typescript-eslint/utils"); const flags_1 = require("../shared/flags"); const commands_1 = require("../shared/commands"); exports.extractMessageFlags = eslint_utils_1.RuleCreator.withoutDocs({ meta: { docs: { description: 'Use loaded messages and separate files for messages. Follow the message naming guidelines', recommended: 'stylistic', }, fixable: 'code', messages: { summaryFormat: 'The summary message should be named flags.{{name}}.summary. See https://github.com/salesforcecli/cli/wiki/Write-Useful-Messages#key-names', descriptionFormat: 'The description message should be named flags.{{name}}.description. See https://github.com/salesforcecli/cli/wiki/Write-Useful-Messages#key-names', message: 'Summary/Description property should use messages.getMessage instead of hardcoding the message. See https://github.com/forcedotcom/sfdx-core/blob/v3/MIGRATING_V2-V3.md#messages', }, type: 'problem', schema: [], }, defaultOptions: [], create(context) { return (0, commands_1.isInCommandDirectory)(context) ? { Property(node) { const ancestors = context.getAncestors(); if (node.key.type === utils_1.AST_NODE_TYPES.Identifier && (node.key.name === 'summary' || node.key.name === 'description') && ancestors.some((a) => (0, flags_1.isFlag)(a)) && (0, commands_1.ancestorsContainsSfCommand)(context)) { if (node.value.type === utils_1.AST_NODE_TYPES.Literal) { context.report({ node, messageId: 'message', }); } const flag = ancestors.filter(utils_1.ASTUtils.isNodeOfType(utils_1.AST_NODE_TYPES.Property)).find((a) => (0, flags_1.isFlag)(a)); const flagName = flag ? (0, flags_1.resolveFlagName)(flag) : undefined; if (flagName && node.value.type === utils_1.AST_NODE_TYPES.CallExpression && node.value.callee.type === utils_1.AST_NODE_TYPES.MemberExpression && node.value.callee.object.type === utils_1.AST_NODE_TYPES.Identifier && node.value.callee.object.name === 'messages' && node.value.arguments[0].type === utils_1.AST_NODE_TYPES.Literal && typeof node.value.arguments[0].value === 'string' && node.value.arguments[0].value !== `flags.${flagName}.${node.key.name}`) { const textToReplace = node.value.arguments[0]; const target = node.value.callee; const prop = node.key.name; context.report({ node: target, data: { name: flagName }, messageId: node.key.name === 'summary' ? 'summaryFormat' : 'descriptionFormat', fix: (fixer) => fixer.replaceText(textToReplace, `'flags.${flagName}.${prop}'`), }); } } }, } : {}; }, });