UNPKG

stylelint

Version:

A mighty, modern CSS linter.

50 lines (41 loc) 1.41 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; };