index.js 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113
  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. exports.variableColonSpaceChecker = variableColonSpaceChecker;
  8. var _utils = require("../../utils");
  9. var _stylelint = require("stylelint");
  10. var ruleName = (0, _utils.namespace)("dollar-variable-colon-space-after");
  11. exports.ruleName = ruleName;
  12. var messages = _stylelint.utils.ruleMessages(ruleName, {
  13. expectedAfter: function expectedAfter() {
  14. return 'Expected single space after ":"';
  15. },
  16. rejectedAfter: function rejectedAfter() {
  17. return 'Unexpected whitespace after ":"';
  18. },
  19. expectedAfterSingleLine: function expectedAfterSingleLine() {
  20. return 'Expected single space after ":" with a single-line value';
  21. },
  22. expectedAfterAtLeast: function expectedAfterAtLeast() {
  23. return 'Expected at least one space after ":"';
  24. }
  25. });
  26. exports.messages = messages;
  27. var meta = {
  28. url: (0, _utils.ruleUrl)(ruleName)
  29. };
  30. exports.meta = meta;
  31. function rule(expectation, _, context) {
  32. var checker = (0, _utils.whitespaceChecker)("space", expectation, messages);
  33. return function (root, result) {
  34. var validOptions = _stylelint.utils.validateOptions(result, ruleName, {
  35. actual: expectation,
  36. possible: ["always", "never", "always-single-line", "at-least-one-space"]
  37. });
  38. if (!validOptions) {
  39. return;
  40. }
  41. variableColonSpaceChecker({
  42. root: root,
  43. result: result,
  44. locationChecker: checker.after,
  45. checkedRuleName: ruleName,
  46. position: "after",
  47. expectation: expectation,
  48. context: context
  49. });
  50. };
  51. }
  52. rule.ruleName = ruleName;
  53. rule.messages = messages;
  54. rule.meta = meta;
  55. function variableColonSpaceChecker(_ref) {
  56. var locationChecker = _ref.locationChecker,
  57. root = _ref.root,
  58. result = _ref.result,
  59. checkedRuleName = _ref.checkedRuleName,
  60. position = _ref.position,
  61. expectation = _ref.expectation,
  62. context = _ref.context;
  63. root.walkDecls(function (decl) {
  64. if (decl.prop === undefined || decl.prop[0] !== "$") {
  65. return;
  66. }
  67. if (context && context.fix) {
  68. if (expectation === "always-single-line" && !(0, _utils.isSingleLineString)(decl.value)) {
  69. return;
  70. }
  71. if (position === "before") {
  72. var replacement = expectation === "never" ? ":" : " :";
  73. decl.raws.between = decl.raws.between.replace(/\s*:/, replacement);
  74. } else if (position === "after") {
  75. var match = expectation === "at-least-one-space" ? /:(?! )/ : /:\s*/;
  76. var _replacement = expectation === "never" ? ":" : ": ";
  77. decl.raws.between = decl.raws.between.replace(match, _replacement);
  78. }
  79. return;
  80. }
  81. // Get the raw $var, and only that
  82. var endOfPropIndex = (0, _utils.declarationValueIndex)(decl) + decl.raw("between").length - 1;
  83. // `$var:`, `$var :`
  84. var propPlusColon = decl.toString().slice(0, endOfPropIndex);
  85. var _loop = function _loop(i) {
  86. if (propPlusColon[i] !== ":") {
  87. return "continue";
  88. }
  89. locationChecker({
  90. source: propPlusColon,
  91. index: i,
  92. lineCheckStr: decl.value,
  93. err: function err(m) {
  94. _stylelint.utils.report({
  95. message: m,
  96. node: decl,
  97. index: i,
  98. result: result,
  99. ruleName: checkedRuleName
  100. });
  101. }
  102. });
  103. return "break";
  104. };
  105. for (var i = 0; i < propPlusColon.length; i++) {
  106. var _ret = _loop(i);
  107. if (_ret === "continue") continue;
  108. if (_ret === "break") break;
  109. }
  110. });
  111. }