UNPKG

eslint-plugin-styled-component-jsx-attributes

Version:

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

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