MCPcopy
hub / github.com/Effect-TS/effect / changesUponFlatteningSafe

Function changesUponFlatteningSafe

packages/printer/src/internal/doc.ts:611–678  ·  view source on GitHub ↗
(self: Doc.Doc<A>)

Source from the content-addressed store, hash-verified

609 Effect.runSync(changesUponFlatteningSafe(self))
610
611const changesUponFlatteningSafe = <A>(self: Doc.Doc<A>): Effect.Effect<Flatten.Flatten<Doc.Doc<A>>> =>
612 Effect.gen(function*() {
613 switch (self._tag) {
614 case "Fail":
615 case "Line": {
616 return InternalFlatten.neverFlat
617 }
618 case "Empty":
619 case "Char":
620 case "Text": {
621 return InternalFlatten.alreadyFlat
622 }
623 case "FlatAlt": {
624 const doc = yield* flattenSafe(self.right)
625 return InternalFlatten.flattened(doc)
626 }
627 case "Cat": {
628 const left = yield* changesUponFlatteningSafe(self.left)
629 const right = yield* changesUponFlatteningSafe(self.right)
630 if (InternalFlatten.isNeverFlat(left) || InternalFlatten.isNeverFlat(right)) {
631 return InternalFlatten.neverFlat
632 }
633 if (InternalFlatten.isFlattened(left) && InternalFlatten.isFlattened(right)) {
634 return InternalFlatten.flattened(cat(left.value, right.value))
635 }
636 if (InternalFlatten.isFlattened(left) && InternalFlatten.isAlreadyFlat(right)) {
637 return InternalFlatten.flattened(cat(left.value, self.right))
638 }
639 if (InternalFlatten.isAlreadyFlat(left) && InternalFlatten.isFlattened(right)) {
640 return InternalFlatten.flattened(cat(self.left, right.value))
641 }
642 if (InternalFlatten.isAlreadyFlat(left) && InternalFlatten.isAlreadyFlat(right)) {
643 return InternalFlatten.alreadyFlat
644 }
645 throw new Error(
646 "[BUG]: Doc.changesUponFlattening - unable to flatten a Cat document " +
647 "- please open an issue at https://github.com/IMax153/contentlayer/issues/new"
648 )
649 }
650 case "Nest": {
651 return yield* pipe(
652 changesUponFlatteningSafe(self.doc),
653 Effect.map(InternalFlatten.map((doc) => nest(doc, self.indent)))
654 )
655 }
656 case "Union": {
657 return InternalFlatten.flattened(self.left)
658 }
659 case "Column": {
660 const doc = column((position) => Effect.runSync(flattenSafe(self.react(position))))
661 return InternalFlatten.flattened(doc)
662 }
663 case "WithPageWidth": {
664 const doc = pageWidth((pageWidth) => Effect.runSync(flattenSafe(self.react(pageWidth))))
665 return InternalFlatten.flattened(doc)
666 }
667 case "Nesting": {
668 const doc = nesting((level) => Effect.runSync(flattenSafe(self.react(level))))

Callers 1

changesUponFlatteningFunction · 0.85

Calls 7

flattenSafeFunction · 0.85
columnFunction · 0.85
pageWidthFunction · 0.85
nestingFunction · 0.85
pipeFunction · 0.70
mapMethod · 0.65
annotateFunction · 0.50

Tested by

no test coverage detected