index.js 3.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697
  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)("dollar-variable-colon-newline-after");
  10. exports.ruleName = ruleName;
  11. var messages = _stylelint.utils.ruleMessages(ruleName, {
  12. expectedAfter: function expectedAfter() {
  13. return 'Expected newline after ":"';
  14. },
  15. expectedAfterMultiLine: function expectedAfterMultiLine() {
  16. return 'Expected newline after ":" with a multi-line value';
  17. }
  18. });
  19. exports.messages = messages;
  20. var meta = {
  21. url: (0, _utils.ruleUrl)(ruleName)
  22. };
  23. exports.meta = meta;
  24. function rule(expectation, options, context) {
  25. var checker = (0, _utils.whitespaceChecker)("newline", expectation, messages);
  26. return function (root, result) {
  27. var validOptions = _stylelint.utils.validateOptions(result, ruleName, {
  28. actual: expectation,
  29. possible: ["always", "always-multi-line"]
  30. }, {
  31. actual: options,
  32. possible: {
  33. disableFix: _utils.isBoolean
  34. },
  35. optional: true
  36. });
  37. if (!validOptions) {
  38. return;
  39. }
  40. var shouldFix = context.fix && (!options || options.disableFix !== true);
  41. root.walkDecls(function (decl) {
  42. if (!decl.prop || decl.prop[0] !== "$") {
  43. return;
  44. }
  45. var value = decl.value.trim();
  46. var startsWithParen = value[0] === "(";
  47. var endsWithParen = value[value.length - 1] === ")";
  48. var endsWithDefault = /\)\s*!default$/.test(value);
  49. var isMultilineVarWithParens = startsWithParen && (endsWithParen || endsWithDefault) && !(0, _utils.isSingleLineString)(value);
  50. if (isMultilineVarWithParens) {
  51. return;
  52. }
  53. // Get the raw $var, and only that
  54. var endOfPropIndex = (0, _utils.declarationValueIndex)(decl) + decl.raw("between").length - 1;
  55. // `$var:`, `$var :`
  56. var propPlusColon = decl.toString().slice(0, endOfPropIndex);
  57. var _loop = function _loop() {
  58. if (propPlusColon[i] !== ":") {
  59. return "continue";
  60. }
  61. var indexToCheck = propPlusColon.substr(propPlusColon[i], 3) === "/*" ? propPlusColon.indexOf("*/", i) + 1 : i;
  62. checker.afterOneOnly({
  63. source: propPlusColon,
  64. index: indexToCheck,
  65. lineCheckStr: decl.value,
  66. err: function err(m) {
  67. if (shouldFix) {
  68. var nextLinePrefix = expectation === "always" ? decl.raws.before.replace(context.newline, "") : decl.value.split(context.newline)[1].replace(/^(\s+).*$/, function (_, whitespace) {
  69. return whitespace;
  70. });
  71. decl.raws.between = decl.raws.between.replace(/:(.*)$/, ":".concat(context.newline).concat(nextLinePrefix));
  72. return;
  73. }
  74. _stylelint.utils.report({
  75. message: m,
  76. node: decl,
  77. index: indexToCheck,
  78. result: result,
  79. ruleName: ruleName
  80. });
  81. }
  82. });
  83. return "break";
  84. };
  85. for (var i = 0, l = propPlusColon.length; i < l; i++) {
  86. var _ret = _loop();
  87. if (_ret === "continue") continue;
  88. if (_ret === "break") break;
  89. }
  90. });
  91. };
  92. }
  93. rule.ruleName = ruleName;
  94. rule.messages = messages;
  95. rule.meta = meta;