UNPKG

eslint-plugin-styled-component-jsx-attributes

Version:

A simple plugin for enforcing the use of the id attribute on styled components.

55 lines (45 loc) 2 kB
"use strict"; var mergeStyledAttrsWithNodeAttrs = require('../mergeStyledAttrsWithNodeAttrs'); var getAsProp = require('../getAsProp'); var _require = require('util'), inspect = _require.inspect; module.exports = function (context, styledComponents, rule, name) { return { JSXElement: function JSXElement(node) { var func = function func(inspectee) { return name.includes('scope') && context.report(node, inspect(inspectee || node)); }; try { var elementName = node.openingElement.name.name; if (!elementName && node.openingElement.name.type === 'JSXMemberExpression') { elementName = "".concat(node.openingElement.name.object.name, ".").concat(node.openingElement.name.property.name); } var styledComponent = styledComponents[elementName]; if (styledComponent) { var tag = styledComponent.tag, attrs = styledComponent.attrs; var originalNodeAttr = node.openingElement.attributes; var originalNodeName = node.openingElement.name; try { var allAttrs = mergeStyledAttrsWithNodeAttrs(attrs, originalNodeAttr); var asProp = getAsProp(allAttrs); node.openingElement.attributes = allAttrs; // Convert JSXMemberExpression to JSXIdentifier, so it'll be properly handled by eslint-plugin-jsx-id-attribute-enforcement plugin node.openingElement.name = { type: 'JSXIdentifier', name: asProp || tag, start: originalNodeName.start, end: originalNodeName.end, loc: originalNodeName.loc, range: originalNodeName.range, parent: originalNodeName.parent }; rule.create(context).JSXElement(node); } finally { node.openingElement.name = originalNodeName; node.openingElement.attributes = originalNodeAttr; } } } catch (_unused) {} } }; };