UNPKG

eslint-plugin-react-native-unistyles

Version:
66 lines (65 loc) 2.97 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.noUnusedStyles = void 0; const utils_1 = require("@typescript-eslint/utils"); const component_1 = require("../util/component"); const stylesheet_1 = require("../util/stylesheet"); const createRule = utils_1.ESLintUtils.RuleCreator((name) => `https://github.com/RodSarhan/eslint-plugin-react-native-unistyles/blob/main/docs/rules/${name}.md`); exports.noUnusedStyles = createRule({ name: 'no-unused-styles', meta: { docs: { description: 'Disallow unused styles' }, type: 'suggestion', messages: { unusedStyleDetected: '{{ message }}' }, schema: [], }, defaultOptions: [], create: component_1.componentsUtils.enhanceRuleWithComponentDetection((context, components) => { const styleSheets = new stylesheet_1.StyleSheets(); const styleReferences = new Set(); function reportUnusedStyles(unusedStyles) { Object.keys(unusedStyles).forEach((key) => { if ({}.hasOwnProperty.call(unusedStyles, key)) { const styles = unusedStyles[key]; styles?.forEach((node) => { const propertyName = stylesheet_1.stylesASTHelpers.getStylePropertyIdentifier(node); if (propertyName) { context.report({ node: node, messageId: 'unusedStyleDetected', data: { message: [`Unused style detected: ${key}.${propertyName}`] }, loc: node.key.loc, }); } }); } }); } return { MemberExpression: function (node) { const styleRef = stylesheet_1.stylesASTHelpers.getPotentialStyleReferenceFromMemberExpression(node); if (styleRef) { styleReferences.add(styleRef); } }, CallExpression: function (node) { if (stylesheet_1.stylesASTHelpers.isStyleSheetDeclaration(node)) { const styleSheetName = stylesheet_1.stylesASTHelpers.getStyleSheetName(node); const styles = stylesheet_1.stylesASTHelpers.getStyleDeclarations(node); if (styleSheetName) { styleSheets.add(styleSheetName, styles); } } }, 'Program:exit': function () { const list = components.all(); if (Object.keys(list).length > 0) { styleReferences.forEach((reference) => { styleSheets.markAsUsed(reference); }); reportUnusedStyles(styleSheets.getUnusedReferences()); } }, }; }), });