diff --git a/src/rules/selector-no-union-class-name/index.js b/src/rules/selector-no-union-class-name/index.js index 981dc7a0..08ce1b47 100644 --- a/src/rules/selector-no-union-class-name/index.js +++ b/src/rules/selector-no-union-class-name/index.js @@ -35,8 +35,9 @@ export default function(actual) { root.walkRules(/&/, rule => { const parentNodes = []; - if (rule.parent && rule.parent.selector) { - parseSelector(rule.parent.selector, result, rule, fullSelector => { + const selector = getSelectorFromRule(rule.parent); + if (selector) { + parseSelector(selector, result, rule, fullSelector => { fullSelector.walk(node => parentNodes.push(node)); }); } @@ -67,3 +68,20 @@ export default function(actual) { }); }; } + +/** + * Searches for the closest rule which + * has a selector and returns the selector + * @returns {string|undefined} + */ +function getSelectorFromRule(rule) { + // All non at-rules have their own selector + if (rule.selector !== undefined) { + return rule.selector; + } + // At-rules like @mixin don't have a selector themself + // but their parents might have one + if (rule.parent) { + return getSelectorFromRule(rule.parent); + } +}