postcss-bem-linter
Advanced tools
Comparing version 2.4.1 to 2.5.0
@@ -0,1 +1,5 @@ | ||
=== 2.5.0 (April 27, 2016) | ||
* Add support for nested selectors. | ||
=== 2.4.1 (March 28, 2016) | ||
@@ -2,0 +6,0 @@ |
@@ -5,3 +5,53 @@ var listSequences = require('./list-sequences'); | ||
var toInterpoloatedRegexp = require('./to-interpolated-regexp'); | ||
var resolveNestedSelector = require('postcss-resolve-nested-selector'); | ||
function isTopLevel(node) { | ||
return node.type === 'root'; | ||
} | ||
function isNestedRule(node) { | ||
return /(?:at)?rule/.test(node.parent.type) | ||
} | ||
function hasNoDeclarations(node) { | ||
return node.nodes.length && node.every(function(child) { | ||
return child.type !== 'decl'; | ||
}); | ||
} | ||
function getComponentRootRule(node) { | ||
while (!isTopLevel(node.parent)) { | ||
node = node.parent; | ||
} | ||
return node; | ||
} | ||
function unWrapSelectors(parent, rule) { | ||
var selectors = []; | ||
parent.walkRules(function(node) { | ||
// Only unwrap as far as the current rule being linted | ||
if (node.selector !== rule.selector) {return;} | ||
node.selectors.forEach(function(selector) { | ||
selectors = selectors.concat(resolveNestedSelector(selector, node)); | ||
}); | ||
}); | ||
return selectors; | ||
} | ||
function getSelectors(rule) { | ||
// Skip validation on rules with no declarations | ||
// as these don't exist after rules have been unwrapped | ||
if (hasNoDeclarations(rule)) { | ||
return []; | ||
} | ||
if (isNestedRule(rule)) { | ||
var componentRootRule = getComponentRootRule(rule); | ||
var nestedSelectors = unWrapSelectors(componentRootRule, rule); | ||
return nestedSelectors; | ||
} | ||
return rule.selectors; | ||
} | ||
/** | ||
@@ -19,2 +69,3 @@ * @param {Object} config | ||
if (shouldIgnoreRule(config.rule)) return; | ||
var rule = config.rule; | ||
@@ -27,3 +78,3 @@ var initialPattern = (config.selectorPattern.initial) | ||
: toInterpoloatedRegexp(initialPattern); | ||
var selectors = config.rule.selectors; | ||
var selectors = getSelectors(rule); | ||
@@ -46,3 +97,3 @@ selectors.forEach(function(selector) { | ||
{ | ||
node: config.rule, | ||
node: rule, | ||
word: selector, | ||
@@ -49,0 +100,0 @@ } |
{ | ||
"name": "postcss-bem-linter", | ||
"version": "2.4.1", | ||
"version": "2.5.0", | ||
"description": "A BEM linter for postcss", | ||
@@ -10,7 +10,9 @@ "files": [ | ||
"dependencies": { | ||
"postcss": "^5.0.0" | ||
"postcss": "^5.0.0", | ||
"postcss-resolve-nested-selector": "^0.1.1" | ||
}, | ||
"devDependencies": { | ||
"eslint": "1.7.3", | ||
"mocha": "2.3.3" | ||
"mocha": "2.3.3", | ||
"rewire": "^2.5.1" | ||
}, | ||
@@ -17,0 +19,0 @@ "scripts": { |
@@ -77,3 +77,3 @@ # postcss-bem-linter | ||
[in the SUIT docs](https://github.com/suitcss/suit/blob/master/doc/naming-conventions.md#namespace-optional) | ||
- `'bem'`, as defined [here](https://en.bem.info/tools/bem/bem-naming/). | ||
- `'bem'`, as defined [here](https://en.bem.info/methodology/naming-convention/). | ||
- `namespace`: a namespace to prefix valid classes, to be separated from the block name with a hyphen, | ||
@@ -80,0 +80,0 @@ e.g. with namespace `foo`, `.foo-dropdown__menu`. |
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
34011
436
2
3
+ Addedpostcss-resolve-nested-selector@0.1.6(transitive)