index.js 1.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  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-function-pattern");
  10. exports.ruleName = ruleName;
  11. var messages = _stylelint.utils.ruleMessages(ruleName, {
  12. expected: "Expected @function name to match specified pattern"
  13. });
  14. exports.messages = messages;
  15. var meta = {
  16. url: (0, _utils.ruleUrl)(ruleName)
  17. };
  18. exports.meta = meta;
  19. function rule(pattern) {
  20. return function (root, result) {
  21. var validOptions = _stylelint.utils.validateOptions(result, ruleName, {
  22. actual: pattern,
  23. possible: [_utils.isRegExp, _utils.isString]
  24. });
  25. if (!validOptions) {
  26. return;
  27. }
  28. var regexpPattern = (0, _utils.isString)(pattern) ? new RegExp(pattern) : pattern;
  29. root.walkAtRules(function (decl) {
  30. if (decl.name !== "function") {
  31. return;
  32. }
  33. // Stripping the function of its arguments
  34. var funcName = decl.params.replace(/(\s*)\([\s\S]*\)/g, "");
  35. if (regexpPattern.test(funcName)) {
  36. return;
  37. }
  38. var funcTopLine = Object.assign({}, decl.source.start);
  39. funcTopLine.line += 1;
  40. funcTopLine.column = 0;
  41. _stylelint.utils.report({
  42. message: messages.expected,
  43. node: decl,
  44. result: result,
  45. ruleName: ruleName,
  46. end: funcTopLine
  47. });
  48. });
  49. };
  50. }
  51. rule.ruleName = ruleName;
  52. rule.messages = messages;
  53. rule.meta = meta;