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

Function renderTreeSafe

packages/printer/test/docTree.test.ts:148–188  ·  view source on GitHub ↗
(
        tree: DocTree.DocTree<SimpleHtml>
      )

Source from the content-addressed store, hash-verified

146 }
147
148 const renderTreeSafe = (
149 tree: DocTree.DocTree<SimpleHtml>
150 ): Effect.Effect<string> => {
151 switch (tree._tag) {
152 case "EmptyTree": {
153 return Effect.succeed("")
154 }
155 case "CharTree": {
156 return Effect.succeed(tree.char)
157 }
158 case "TextTree": {
159 return Effect.succeed(tree.text)
160 }
161 case "LineTree": {
162 return Effect.succeed("\n" + Doc.textSpaces(tree.indentation))
163 }
164 case "AnnotationTree": {
165 return Effect.map(
166 Effect.suspend(() => renderTreeSafe(tree.tree)),
167 (content) => encloseInTag(content, tree.annotation)
168 )
169 }
170 case "ConcatTree": {
171 if (tree.trees.length === 0) {
172 return Effect.succeed("")
173 }
174 const head = tree.trees[0]
175 const tail = tree.trees.slice(1)
176 return Array.reduce(
177 tail,
178 Effect.suspend(() => renderTreeSafe(head)),
179 (acc, tree) =>
180 Effect.zipWith(
181 acc,
182 Effect.suspend(() => renderTreeSafe(tree)),
183 (left, right) => left + right
184 )
185 )
186 }
187 }
188 }
189
190 const renderTree = (tree: DocTree.DocTree<SimpleHtml>): string => Effect.runSync(renderTreeSafe(tree))
191

Callers 1

renderTreeFunction · 0.85

Calls 2

encloseInTagFunction · 0.85
mapMethod · 0.65

Tested by

no test coverage detected