index.js 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  1. // @ts-nocheck
  2. 'use strict';
  3. const _ = require('lodash');
  4. const isAutoprefixable = require('../../utils/isAutoprefixable');
  5. const isStandardSyntaxRule = require('../../utils/isStandardSyntaxRule');
  6. const optionsMatches = require('../../utils/optionsMatches');
  7. const parseSelector = require('../../utils/parseSelector');
  8. const report = require('../../utils/report');
  9. const ruleMessages = require('../../utils/ruleMessages');
  10. const validateOptions = require('../../utils/validateOptions');
  11. const ruleName = 'selector-no-vendor-prefix';
  12. const messages = ruleMessages(ruleName, {
  13. rejected: (selector) => `Unexpected vendor-prefix "${selector}"`,
  14. });
  15. function rule(actual, options, context) {
  16. return (root, result) => {
  17. const validOptions = validateOptions(
  18. result,
  19. ruleName,
  20. { actual },
  21. {
  22. actual: options,
  23. possible: {
  24. ignoreSelectors: [_.isString],
  25. },
  26. optional: true,
  27. },
  28. );
  29. if (!validOptions) {
  30. return;
  31. }
  32. root.walkRules((rule) => {
  33. if (!isStandardSyntaxRule(rule)) {
  34. return;
  35. }
  36. const selector = rule.selector;
  37. parseSelector(selector, result, rule, (selectorTree) => {
  38. selectorTree.walkPseudos((pseudoNode) => {
  39. if (isAutoprefixable.selector(pseudoNode.value)) {
  40. if (optionsMatches(options, 'ignoreSelectors', pseudoNode.value)) {
  41. return;
  42. }
  43. if (context.fix) {
  44. rule.selector = isAutoprefixable.unprefix(rule.selector);
  45. return;
  46. }
  47. report({
  48. result,
  49. ruleName,
  50. message: messages.rejected(pseudoNode.value),
  51. node: rule,
  52. index: (rule.raws.before || '').length + pseudoNode.sourceIndex,
  53. });
  54. }
  55. });
  56. });
  57. });
  58. };
  59. }
  60. rule.ruleName = ruleName;
  61. rule.messages = messages;
  62. module.exports = rule;