index.js 1.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  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 _stylelint = require("stylelint");
  8. var _utils = require("../../utils");
  9. var ruleName = (0, _utils.namespace)("at-mixin-argumentless-call-parentheses");
  10. exports.ruleName = ruleName;
  11. var messages = _stylelint.utils.ruleMessages(ruleName, {
  12. expected: function expected(mixin) {
  13. return "Expected parentheses in mixin \"".concat(mixin, "\" call");
  14. },
  15. rejected: function rejected(mixin) {
  16. return "Unexpected parentheses in argumentless mixin \"".concat(mixin, "\" call");
  17. }
  18. });
  19. exports.messages = messages;
  20. var meta = {
  21. url: (0, _utils.ruleUrl)(ruleName)
  22. };
  23. exports.meta = meta;
  24. function rule(value, _, context) {
  25. return function (root, result) {
  26. var validOptions = _stylelint.utils.validateOptions(result, ruleName, {
  27. actual: value,
  28. possible: ["always", "never"]
  29. });
  30. if (!validOptions) {
  31. return;
  32. }
  33. root.walkAtRules("include", function (mixinCall) {
  34. // If it is "No parens in argumentless calls"
  35. if (value === "never" && mixinCall.params.search(/\(\s*\)\s*$/) === -1) {
  36. return;
  37. }
  38. // If it is "Always use parens"
  39. if (value === "always" && mixinCall.params.search(/\(/) !== -1) {
  40. return;
  41. }
  42. if (context.fix) {
  43. if (value === "always") {
  44. mixinCall.params = "".concat(mixinCall.params, " ()");
  45. } else {
  46. mixinCall.params = mixinCall.params.replace(/\s*\([\s\S]*?\)$/, "");
  47. }
  48. return;
  49. }
  50. var mixinName = /\s*(\S*?)\s*(?:\(|$)/.exec(mixinCall.params)[1];
  51. _stylelint.utils.report({
  52. message: messages[value === "never" ? "rejected" : "expected"](mixinName),
  53. node: mixinCall,
  54. result: result,
  55. ruleName: ruleName
  56. });
  57. });
  58. };
  59. }
  60. rule.ruleName = ruleName;
  61. rule.messages = messages;
  62. rule.meta = meta;