UNPKG

@sourcegraph/eslint-plugin-sourcegraph

Version:
63 lines 2.68 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.useButtonComponent = exports.messages = void 0; const ts_morph_1 = require("ts-morph"); const codemod_transforms_1 = require("@sourcegraph/codemod-transforms"); const utils_1 = require("../../utils"); const getWrappedNode_1 = require("../../utils/getWrappedNode"); exports.messages = { bannedClassnameMessage: 'Use the Wildcard component `<Button />` instead of the `{{name}}` class.', bannedJsxElementMessage: 'Use the Wildcard component `<Button />` instead of the `{{name}}` element.', }; exports.useButtonComponent = (0, utils_1.createRule)({ name: 'use-button-component', meta: { docs: { description: 'Bans usage of the `button` element and button Bootstrap classes', recommended: 'error', }, messages: exports.messages, schema: [], type: 'problem', }, defaultOptions: [], create(context) { const getWrappedNode = (0, getWrappedNode_1.getNodeWrapper)(context); return { JSXOpeningElement: node => { const jsxOpeningElement = getWrappedNode(node, ts_morph_1.JsxOpeningElement); const validationResult = codemod_transforms_1.ButtonElementToComponent.validateCodemodTarget.JsxTagElement(jsxOpeningElement); if (validationResult) { context.report({ node, messageId: 'bannedJsxElementMessage', data: { name: validationResult.tagName, }, }); } }, 'JsxAttribute Literal': (node) => { if (typeof node.value !== 'string') { return; } const stringLiteralNode = getWrappedNode(node, ts_morph_1.StringLiteral); const validationResult = codemod_transforms_1.ButtonElementToComponent.validateCodemodTarget.StringLiteral(stringLiteralNode); if (validationResult) { context.report({ node, messageId: 'bannedClassnameMessage', data: { name: validationResult.classNameMappings .map(({ className }) => { return className; }) .join(', '), }, }); } }, }; }, }); //# sourceMappingURL=use-button-component.js.map