index.js 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  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-else-if-parentheses-space-before");
  10. exports.ruleName = ruleName;
  11. var messages = _stylelint.utils.ruleMessages(ruleName, {
  12. rejectedBefore: function rejectedBefore() {
  13. return "Unexpected whitespace before parentheses in else-if declaration";
  14. },
  15. expectedBefore: function expectedBefore() {
  16. return "Expected a single space before parentheses in else-if declaration";
  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. var match = /^if\s*\(/;
  34. var replacement = value === "always" ? "if (" : "if(";
  35. var checker = (0, _utils.whitespaceChecker)("space", value, messages).before;
  36. root.walkAtRules("else", function (decl) {
  37. // return early if the else-if statement is not surrounded by parentheses
  38. if (!match.test(decl.params)) {
  39. return;
  40. }
  41. if (context.fix) {
  42. decl.params = decl.params.replace(match, replacement);
  43. }
  44. checker({
  45. source: decl.params,
  46. index: decl.params.indexOf("("),
  47. err: function err(message) {
  48. return _stylelint.utils.report({
  49. message: message,
  50. node: decl,
  51. result: result,
  52. ruleName: ruleName
  53. });
  54. }
  55. });
  56. });
  57. };
  58. }
  59. rule.ruleName = ruleName;
  60. rule.messages = messages;
  61. rule.meta = meta;