You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
69 lines
1.6 KiB
69 lines
1.6 KiB
'use strict'; |
|
|
|
const _ = require('lodash'); |
|
const isCustomPropertySet = require('../utils/isCustomPropertySet'); |
|
const isStandardSyntaxSelector = require('../utils/isStandardSyntaxSelector'); |
|
|
|
/** |
|
* Check whether a Node is a standard rule |
|
* |
|
* @param {import('postcss').Rule | import('postcss-less').Rule} rule |
|
* @returns {boolean} |
|
*/ |
|
module.exports = function (rule) { |
|
if (rule.type !== 'rule') { |
|
return false; |
|
} |
|
|
|
// Get full selector |
|
const selector = _.get(rule, 'raws.selector.raw', rule.selector); |
|
|
|
if (!isStandardSyntaxSelector(rule.selector)) { |
|
return false; |
|
} |
|
|
|
// Custom property set (e.g. --custom-property-set: {}) |
|
if (isCustomPropertySet(rule)) { |
|
return false; |
|
} |
|
|
|
// Called Less mixin (e.g. a { .mixin() }) |
|
// @ts-ignore TODO TYPES support LESS and SASS types somehow |
|
if (rule.mixin) { |
|
return false; |
|
} |
|
|
|
// Less detached rulesets |
|
if (selector.startsWith('@') && selector.endsWith(':')) { |
|
return false; |
|
} |
|
|
|
// Ignore Less &:extend rule |
|
if ('extend' in rule && rule.extend) { |
|
return false; |
|
} |
|
|
|
// Ignore mixin or &:extend rule |
|
// https://github.com/shellscape/postcss-less/blob/master/lib/less-parser.js#L52 |
|
// @ts-ignore TODO TYPES support LESS and SASS types somehow |
|
if (rule.params && rule.params[0]) { |
|
return false; |
|
} |
|
|
|
// Non-outputting Less mixin definition (e.g. .mixin() {}) |
|
if (selector.endsWith(')') && !selector.includes(':')) { |
|
return false; |
|
} |
|
|
|
// Less guards |
|
if (/when\s+(not\s+)*\(/.test(selector)) { |
|
return false; |
|
} |
|
|
|
// Ignore Scss nested properties |
|
if (selector.endsWith(':')) { |
|
return false; |
|
} |
|
|
|
return true; |
|
};
|
|
|