@sourcegraph/eslint-plugin-sourcegraph
Version:
Eslint plugin Sourcegraph
63 lines • 2.68 kB
JavaScript
;
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