index.js 3.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798
  1. "use strict";
  2. Object.defineProperty(exports, "__esModule", {
  3. value: true
  4. });
  5. exports["default"] = rule;
  6. exports.ruleName = exports.meta = exports.messages = void 0;
  7. var _postcssValueParser = _interopRequireDefault(require("postcss-value-parser"));
  8. var _stylelint = require("stylelint");
  9. var _utils = require("../../utils");
  10. function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
  11. var ruleName = (0, _utils.namespace)("at-function-named-arguments");
  12. exports.ruleName = ruleName;
  13. var messages = _stylelint.utils.ruleMessages(ruleName, {
  14. expected: "Expected a named parameter to be used in function call",
  15. rejected: "Unexpected a named parameter in function call"
  16. });
  17. exports.messages = messages;
  18. var meta = {
  19. url: (0, _utils.ruleUrl)(ruleName)
  20. };
  21. exports.meta = meta;
  22. var isScssVarRegExp = /^\$\S*/;
  23. function rule(expectation, options) {
  24. return function (root, result) {
  25. var validOptions = _stylelint.utils.validateOptions(result, ruleName, {
  26. actual: expectation,
  27. possible: ["always", "never"]
  28. }, {
  29. actual: options,
  30. possible: {
  31. ignore: ["single-argument"],
  32. ignoreFunctions: [_utils.isString]
  33. },
  34. optional: true
  35. });
  36. if (!validOptions) {
  37. return;
  38. }
  39. var shouldIgnoreSingleArgument = (0, _utils.optionsHaveIgnored)(options, "single-argument");
  40. root.walkDecls(function (decl) {
  41. (0, _postcssValueParser["default"])(decl.value).walk(function (node) {
  42. if (node.type !== "function" || (0, _utils.isNativeCssFunction)(node.value) || node.value === "") {
  43. return;
  44. }
  45. var hasFuncIgnored = options && options.ignoreFunctions && options.ignoreFunctions.some(function (f) {
  46. var isRegex = /^\/.*\//.test(f);
  47. if (!isRegex) {
  48. return f === node.value;
  49. }
  50. var parts = f.split("/");
  51. return new RegExp(parts[1], parts[2] || "").test(node.value);
  52. });
  53. if (hasFuncIgnored) {
  54. return;
  55. }
  56. var args = (0, _utils.parseFunctionArguments)(_postcssValueParser["default"].stringify(node));
  57. var isSingleArgument = args.length === 1;
  58. if (isSingleArgument && shouldIgnoreSingleArgument) {
  59. return;
  60. }
  61. args.forEach(function (arg) {
  62. switch (expectation) {
  63. case "never":
  64. {
  65. if (!arg.key) {
  66. return;
  67. }
  68. _stylelint.utils.report({
  69. message: messages.rejected,
  70. node: decl,
  71. result: result,
  72. ruleName: ruleName
  73. });
  74. break;
  75. }
  76. case "always":
  77. {
  78. if (arg.key && isScssVarRegExp.test(arg.key)) {
  79. return;
  80. }
  81. _stylelint.utils.report({
  82. message: messages.expected,
  83. node: decl,
  84. result: result,
  85. ruleName: ruleName
  86. });
  87. break;
  88. }
  89. }
  90. });
  91. });
  92. });
  93. };
  94. }
  95. rule.ruleName = ruleName;
  96. rule.messages = messages;
  97. rule.meta = meta;