UNPKG

eslint-plugin-sf-plugin

Version:
75 lines (74 loc) 3.39 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.noThisUx = 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 commands_1 = require("../../shared/commands"); const expressions_1 = require("../../shared/expressions"); const spinnerMigration = new Map([ ['startSpinner', 'this.spinner.start'], ['stopSpinner', 'this.spinner.stop'], ]); exports.noThisUx = eslint_utils_1.RuleCreator.withoutDocs({ meta: { docs: { description: 'SfCommand does not have a ux property', recommended: 'recommended', }, messages: { message: 'SfCommand does not have a ux property. Use methods from this like this.log() or this.table()', spinner: 'SfCommand does not have a ux.spinner. Use this.spinner.start() or this.spinner.stop()', }, type: 'problem', schema: [], fixable: 'code', }, defaultOptions: [], create(context) { return (0, commands_1.isInCommandDirectory)(context) ? { MemberExpression(node) { if ((0, expressions_1.MemberExpressionContainsMemberExpressionThisDotFoo)(node, 'ux') && (0, commands_1.ancestorsContainsSfCommand)(context)) { // spinner cases if (node.property.type === utils_1.AST_NODE_TYPES.Identifier && spinnerMigration.has(node.property.name)) { const spinnerReplacement = spinnerMigration.get(node.property.name); const toRemove = node; if (spinnerReplacement) { context.report({ node, messageId: 'spinner', fix: (fixer) => fixer.replaceText(toRemove, spinnerReplacement), }); } } else if (node.property.type === utils_1.AST_NODE_TYPES.Identifier && node.property.name === 'logJson') { // this.ux.logJson => this.styledJson const toRemove = node; context.report({ node, messageId: 'message', fix: (fixer) => fixer.replaceText(toRemove, 'this.styledJSON'), }); } else { // all other this.ux cases const toRemove = node; context.report({ node, messageId: 'message', fix: (fixer) => fixer.replaceText(toRemove, `this.${context.sourceCode.getText(node.property)}`), }); } } }, } : {}; }, });