index.cjs 2.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  1. // NOTICE: This file is generated by Rollup. To modify it,
  2. // please instead edit the ESM counterpart and rebuild with Rollup (npm run build).
  3. 'use strict';
  4. const valueParser = require('postcss-value-parser');
  5. const validateTypes = require('../../utils/validateTypes.cjs');
  6. const nodeFieldIndices = require('../../utils/nodeFieldIndices.cjs');
  7. const isStandardSyntaxFunction = require('../../utils/isStandardSyntaxFunction.cjs');
  8. const matchesStringOrRegExp = require('../../utils/matchesStringOrRegExp.cjs');
  9. const report = require('../../utils/report.cjs');
  10. const ruleMessages = require('../../utils/ruleMessages.cjs');
  11. const validateOptions = require('../../utils/validateOptions.cjs');
  12. const vendor = require('../../utils/vendor.cjs');
  13. const ruleName = 'function-disallowed-list';
  14. const messages = ruleMessages(ruleName, {
  15. rejected: (name) => `Unexpected function "${name}"`,
  16. });
  17. const meta = {
  18. url: 'https://stylelint.io/user-guide/rules/function-disallowed-list',
  19. };
  20. /** @type {import('stylelint').CoreRules[ruleName]} */
  21. const rule = (primary) => {
  22. return (root, result) => {
  23. const validOptions = validateOptions(result, ruleName, {
  24. actual: primary,
  25. possible: [validateTypes.isString, validateTypes.isRegExp],
  26. });
  27. if (!validOptions) {
  28. return;
  29. }
  30. root.walkDecls((decl) => {
  31. valueParser(decl.value).walk((node) => {
  32. if (node.type !== 'function') {
  33. return;
  34. }
  35. if (!isStandardSyntaxFunction(node)) {
  36. return;
  37. }
  38. if (!matchesStringOrRegExp(vendor.unprefixed(node.value), primary)) {
  39. return;
  40. }
  41. const index = nodeFieldIndices.declarationValueIndex(decl) + node.sourceIndex;
  42. const endIndex = index + node.value.length;
  43. report({
  44. message: messages.rejected,
  45. messageArgs: [node.value],
  46. node: decl,
  47. index,
  48. endIndex,
  49. result,
  50. ruleName,
  51. });
  52. });
  53. });
  54. };
  55. };
  56. rule.primaryOptionArray = true;
  57. rule.ruleName = ruleName;
  58. rule.messages = messages;
  59. rule.meta = meta;
  60. module.exports = rule;