Skip to content

Commit 3e97c9b

Browse files
committed
Add detection for root specifiers
1 parent fc12a39 commit 3e97c9b

File tree

2 files changed

+23
-1
lines changed

2 files changed

+23
-1
lines changed

index.js

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ var extend = require('extend');
1212
var shallowCloneNode = require('./lib/shallow-clone-node');
1313
var resolveValue = require('./lib/resolve-value');
1414
var resolveDecl = require('./lib/resolve-decl');
15+
var isPieceRootSpecificSelector = require('./lib/is-piece-root-specific-selector')
1516

1617

1718
// A custom property is any property whose name starts with two dashes (U+002D HYPHEN-MINUS)
@@ -179,7 +180,8 @@ module.exports = postcss.plugin('postcss-css-variables', function(options) {
179180
variablesUsed: valueResults.variablesUsed,
180181
parent: splitOutRule,
181182
// variables inside root or at-rules (eg. @media, @support)
182-
isUnderAtRule: splitOutRule.parent.type === 'atrule'
183+
isUnderAtRule: splitOutRule.parent.type === 'atrule',
184+
isRootSpecific: isPieceRootSpecificSelector(decl.parent.selector)
183185
});
184186
});
185187

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
const cssSelect = require('postcss-selector-parser')
2+
const isPieceAlwaysAncestorSelector = require('./is-piece-always-ancestor-selector')
3+
4+
const isPieceRootSpecificSelector = (piece) =>
5+
cssSelect((selectors) => {
6+
let isRootOrHtml = false
7+
let isSpecific = false
8+
9+
selectors.walk((selector) => {
10+
if (isPieceAlwaysAncestorSelector(selector.value)) {
11+
isRootOrHtml = true
12+
} else if (isRootOrHtml) {
13+
isSpecific = true
14+
}
15+
})
16+
17+
return isSpecific
18+
}).transformSync(piece)
19+
20+
module.exports = isPieceRootSpecificSelector

0 commit comments

Comments
 (0)