MCPcopy Index your code
hub / github.com/continuedev/continue / collapseChildren

Function collapseChildren

core/indexing/chunk/code.ts:26–99  ·  view source on GitHub ↗
(
  node: SyntaxNode,
  code: string,
  blockTypes: string[],
  collapseTypes: string[],
  collapseBlockTypes: string[],
  maxChunkSize: number,
)

Source from the content-addressed store, hash-verified

24}
25
26async function collapseChildren(
27 node: SyntaxNode,
28 code: string,
29 blockTypes: string[],
30 collapseTypes: string[],
31 collapseBlockTypes: string[],
32 maxChunkSize: number,
33): Promise<string> {
34 code = code.slice(0, node.endIndex);
35 const block = firstChild(node, blockTypes);
36 const collapsedChildren = [];
37
38 if (block) {
39 const childrenToCollapse = block.children.filter((child) =>
40 collapseTypes.includes(child.type),
41 );
42 for (const child of childrenToCollapse.reverse()) {
43 const grandChild = firstChild(child, collapseBlockTypes);
44 if (grandChild) {
45 const start = grandChild.startIndex;
46 const end = grandChild.endIndex;
47 const collapsedChild =
48 code.slice(child.startIndex, start) +
49 collapsedReplacement(grandChild);
50 code =
51 code.slice(0, start) +
52 collapsedReplacement(grandChild) +
53 code.slice(end);
54
55 collapsedChildren.unshift(collapsedChild);
56 }
57 }
58 }
59 code = code.slice(node.startIndex);
60 let removedChild = false;
61 while (
62 (await countTokensAsync(code.trim())) > maxChunkSize &&
63 collapsedChildren.length > 0
64 ) {
65 removedChild = true;
66 // Remove children starting at the end - TODO: Add multiple chunks so no children are missing
67 const childCode = collapsedChildren.pop()!;
68 const index = code.lastIndexOf(childCode);
69 if (index > 0) {
70 code = code.slice(0, index) + code.slice(index + childCode.length);
71 }
72 }
73
74 if (removedChild) {
75 // Remove the extra blank lines
76 let lines = code.split("\n");
77 let firstWhiteSpaceInGroup = -1;
78 for (let i = lines.length - 1; i >= 0; i--) {
79 if (lines[i].trim() === "") {
80 if (firstWhiteSpaceInGroup < 0) {
81 firstWhiteSpaceInGroup = i;
82 }
83 } else {

Callers 1

Calls 4

firstChildFunction · 0.85
collapsedReplacementFunction · 0.85
countTokensAsyncFunction · 0.85
popMethod · 0.45

Tested by

no test coverage detected