MCPcopy Create free account
hub / github.com/SplootCode/splootcode / combineFragments

Function combineFragments

packages/core/src/language/fragment_adapter.ts:137–165  ·  view source on GitHub ↗
(fragment1: SplootFragment, fragment2: SplootFragment)

Source from the content-addressed store, hash-verified

135
136// Note: fragment1 will always be added to fragment2, not the other way around.
137export function combineFragments(fragment1: SplootFragment, fragment2: SplootFragment): SplootFragment {
138 if (fragment1 === null) {
139 return fragment2
140 }
141 if (fragment1.nodeCategory === fragment2.nodeCategory) {
142 return new SplootFragment(fragment1.nodes.concat(fragment2.nodes), fragment2.nodeCategory)
143 }
144
145 const destCategory = fragment2.nodeCategory
146
147 const adapters = fragmentAdapterMapping.get(fragment1.nodeCategory)
148 if (adapters && adapters.has(destCategory)) {
149 const node = adapters.get(destCategory)(fragment1)
150 return new SplootFragment([node, ...fragment2.nodes], fragment2.nodeCategory)
151 }
152
153 const valid = fragment1.nodes.filter((node) => isAdaptableToPasteDesintation(node, destCategory))
154 if (fragment1.nodes.length == valid.length) {
155 const adaptedNodes = fragment1.nodes.map((node) => {
156 const adaptedNode = adaptNodeToPasteDestination(node, destCategory)
157 // Need to clean here so that empty expressions get removed from statement nodes.
158 adaptedNode.clean()
159 return adaptedNode
160 })
161 return new SplootFragment(adaptedNodes.concat(fragment2.nodes), fragment2.nodeCategory)
162 }
163
164 return fragment2
165}

Callers 2

visitedRangeRightMethod · 0.90
getFragmentMethod · 0.90

Calls 3

cleanMethod · 0.45

Tested by

no test coverage detected