aboutsummaryrefslogtreecommitdiffstats
path: root/language-web/src/main/js/language/folding.ts
diff options
context:
space:
mode:
Diffstat (limited to 'language-web/src/main/js/language/folding.ts')
-rw-r--r--language-web/src/main/js/language/folding.ts30
1 files changed, 24 insertions, 6 deletions
diff --git a/language-web/src/main/js/language/folding.ts b/language-web/src/main/js/language/folding.ts
index 54c7294d..5d51f796 100644
--- a/language-web/src/main/js/language/folding.ts
+++ b/language-web/src/main/js/language/folding.ts
@@ -75,18 +75,22 @@ export function foldDeclaration(node: SyntaxNode, state: EditorState): FoldRange
75 * @param node the node to fold 75 * @param node the node to fold
76 * @returns the folding range or `null` is there is nothing to fold 76 * @returns the folding range or `null` is there is nothing to fold
77 */ 77 */
78export function foldConjunction(node: SyntaxNode): FoldRange | null { 78function foldWithSibling(node: SyntaxNode): FoldRange | null {
79 const { parent } = node; 79 const { parent } = node;
80 if (parent === null) { 80 if (parent === null) {
81 return null; 81 return null;
82 } 82 }
83 const { cursor } = parent; 83 const { firstChild } = parent;
84 let nConjunctions = 0; 84 if (firstChild === null) {
85 while (cursor.next()) { 85 return null;
86 }
87 const { cursor } = firstChild;
88 let nSiblings = 0;
89 while (cursor.nextSibling()) {
86 if (cursor.type === node.type) { 90 if (cursor.type === node.type) {
87 nConjunctions += 1; 91 nSiblings += 1;
88 } 92 }
89 if (nConjunctions >= 2) { 93 if (nSiblings >= 2) {
90 return { 94 return {
91 from: node.from, 95 from: node.from,
92 to: node.to, 96 to: node.to,
@@ -95,3 +99,17 @@ export function foldConjunction(node: SyntaxNode): FoldRange | null {
95 } 99 }
96 return null; 100 return null;
97} 101}
102
103export function foldWholeNode(node: SyntaxNode): FoldRange {
104 return {
105 from: node.from,
106 to: node.to,
107 };
108}
109
110export function foldConjunction(node: SyntaxNode): FoldRange | null {
111 if (node.parent?.type?.name === 'PredicateBody') {
112 return foldWithSibling(node);
113 }
114 return foldWholeNode(node);
115}