block-value.js 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738
  1. "use strict";
  2. exports.__esModule = true;
  3. var block_value_1 = require("../factories/block-value");
  4. var get_point_text_1 = require("../utils/get-point-text");
  5. var content_1 = require("./content");
  6. var Chomping;
  7. (function (Chomping) {
  8. Chomping["CLIP"] = "clip";
  9. Chomping["STRIP"] = "strip";
  10. Chomping["KEEP"] = "keep";
  11. })(Chomping || (Chomping = {}));
  12. function transformAstBlockValue(blockValue, context) {
  13. var cstNode = blockValue.cstNode;
  14. var indicatorLength = 1;
  15. var chompingLength = cstNode.chomping === "CLIP" ? 0 : 1;
  16. var headerLength = cstNode.header.origEnd - cstNode.header.origStart;
  17. var hasExplicitBlockIndent = headerLength - indicatorLength - chompingLength !== 0;
  18. var position = context.transformRange({
  19. origStart: cstNode.header.origStart,
  20. origEnd: cstNode.valueRange.origEnd
  21. });
  22. var indicatorComment = null;
  23. var content = content_1.transformContent(blockValue, context, function (comment) {
  24. var isIndicatorComment = position.start.offset < comment.position.start.offset &&
  25. comment.position.end.offset < position.end.offset;
  26. if (!isIndicatorComment) {
  27. return false;
  28. }
  29. // istanbul ignore next
  30. if (indicatorComment) {
  31. throw new Error("Unexpected multiple indicator comments at " + get_point_text_1.getPointText(comment.position.start));
  32. }
  33. indicatorComment = comment;
  34. return true;
  35. });
  36. return block_value_1.createBlockValue(position, content, Chomping[cstNode.chomping], hasExplicitBlockIndent ? cstNode.blockIndent : null, cstNode.strValue, indicatorComment);
  37. }
  38. exports.transformAstBlockValue = transformAstBlockValue;