UNPKG

stylelint

Version:

A mighty, modern CSS linter.

51 lines (41 loc) 1.37 kB
/* @flow */ 'use strict'; /** * Check whether a type selector is standard * * @param {Node} postcss-selector-parser node (of type tag) * @return {boolean} If `true`, the type selector is standard */ const _ = require('lodash'); const keywordSets = require('../reference/keywordSets'); module.exports = function(node /*: Object*/) /*: boolean*/ { // postcss-selector-parser includes the arguments to nth-child() functions // as "tags", so we need to ignore them ourselves. // The fake-tag's "parent" is actually a selector node, whose parent // should be the :nth-child pseudo node. const _node$parent$parent = node.parent.parent; const parentType = _node$parent$parent.type; const parentValue = _node$parent$parent.value; if (parentValue) { const normalisedParentName = parentValue.toLowerCase().replace(/:+/, ''); if ( parentType === 'pseudo' && (keywordSets.aNPlusBNotationPseudoClasses.has(normalisedParentName) || keywordSets.linguisticPseudoClasses.has(normalisedParentName)) ) { return false; } } // &-bar is a nesting selector combined with a suffix if (node.prev() && node.prev().type === 'nesting') { return false; } if (node.value[0] === '%') { return false; } // Reference combinators like `/deep/` if (_.startsWith(node.value, '/') && _.endsWith(node.value, '/')) { return false; } return true; };