Skip to content

Commit 7a05dc0

Browse files
committed
feat: add folding builder
1 parent f187f5a commit 7a05dc0

File tree

1 file changed

+15
-1
lines changed

1 file changed

+15
-1
lines changed

src/main/kotlin/com/github/xepozz/php_opcodes_language/language/PHPOpFoldingBuilder.kt

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,28 @@
11
package com.github.xepozz.php_opcodes_language.language
22

3+
import com.github.xepozz.php_opcodes_language.language.psi.PHPOpBlock
34
import com.intellij.lang.ASTNode
45
import com.intellij.lang.folding.FoldingBuilderEx
56
import com.intellij.lang.folding.FoldingDescriptor
67
import com.intellij.openapi.editor.Document
78
import com.intellij.openapi.project.DumbAware
9+
import com.intellij.openapi.util.TextRange
810
import com.intellij.psi.PsiElement
11+
import com.intellij.psi.util.PsiTreeUtil
912

1013
class PHPOpFoldingBuilder : FoldingBuilderEx(), DumbAware {
11-
override fun buildFoldRegions(root: PsiElement, document: Document, quick: Boolean) = emptyArray<FoldingDescriptor>()
14+
override fun buildFoldRegions(root: PsiElement, document: Document, quick: Boolean) =
15+
collectFoldingBlocks(root).toTypedArray()
16+
17+
private fun collectFoldingBlocks(element: PsiElement) =
18+
PsiTreeUtil
19+
.findChildrenOfType(element, PHPOpBlock::class.java)
20+
.map {
21+
FoldingDescriptor(
22+
it.node,
23+
TextRange(it.blockName.textRange.endOffset + 1, it.textRange.endOffset)
24+
)
25+
}
1226

1327
override fun getPlaceholderText(node: ASTNode) = "{ ... }"
1428

0 commit comments

Comments
 (0)