Skip to content

Commit 32f99d2

Browse files
committed
feat: add live range / exception table foldings
1 parent c4d60a2 commit 32f99d2

5 files changed

Lines changed: 70 additions & 4 deletions

File tree

src/main/kotlin/com/github/xepozz/php_opcodes_language/language/PHPOpCommentFoldingBuilder.kt renamed to src/main/kotlin/com/github/xepozz/php_opcodes_language/folding/PHPOpCommentFoldingBuilder.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package com.github.xepozz.php_opcodes_language.language
1+
package com.github.xepozz.php_opcodes_language.folding
22

33
import com.github.xepozz.php_opcodes_language.language.psi.PHPOpBlockComment
44
import com.intellij.lang.ASTNode
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
package com.github.xepozz.php_opcodes_language.folding
2+
3+
import com.github.xepozz.php_opcodes_language.language.psi.PHPOpExceptionTable
4+
import com.intellij.lang.ASTNode
5+
import com.intellij.lang.folding.FoldingBuilderEx
6+
import com.intellij.lang.folding.FoldingDescriptor
7+
import com.intellij.openapi.editor.Document
8+
import com.intellij.openapi.project.DumbAware
9+
import com.intellij.psi.PsiElement
10+
import com.intellij.psi.util.PsiTreeUtil
11+
12+
class PHPOpExceptionTableFoldingBuilder : FoldingBuilderEx(), DumbAware {
13+
override fun buildFoldRegions(root: PsiElement, document: Document, quick: Boolean) =
14+
collectFoldingBlocks(root).toTypedArray()
15+
16+
private fun collectFoldingBlocks(element: PsiElement) =
17+
PsiTreeUtil
18+
.findChildrenOfType(element, PHPOpExceptionTable::class.java)
19+
.mapNotNull {
20+
FoldingDescriptor(
21+
it.node,
22+
it.textRange
23+
)
24+
}
25+
26+
override fun getPlaceholderText(node: ASTNode) = "Exception Table"
27+
28+
override fun isCollapsedByDefault(node: ASTNode) = true
29+
}

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package com.github.xepozz.php_opcodes_language.language
1+
package com.github.xepozz.php_opcodes_language.folding
22

33
import com.github.xepozz.php_opcodes_language.language.psi.PHPOpBlock
44
import com.intellij.lang.ASTNode
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
package com.github.xepozz.php_opcodes_language.folding
2+
3+
import com.github.xepozz.php_opcodes_language.language.psi.PHPOpLiveRange
4+
import com.intellij.lang.ASTNode
5+
import com.intellij.lang.folding.FoldingBuilderEx
6+
import com.intellij.lang.folding.FoldingDescriptor
7+
import com.intellij.openapi.editor.Document
8+
import com.intellij.openapi.project.DumbAware
9+
import com.intellij.psi.PsiElement
10+
import com.intellij.psi.util.PsiTreeUtil
11+
12+
class PHPOpLiveRangeFoldingBuilder : FoldingBuilderEx(), DumbAware {
13+
override fun buildFoldRegions(root: PsiElement, document: Document, quick: Boolean) =
14+
collectFoldingBlocks(root).toTypedArray()
15+
16+
private fun collectFoldingBlocks(element: PsiElement) =
17+
PsiTreeUtil
18+
.findChildrenOfType(element, PHPOpLiveRange::class.java)
19+
.mapNotNull {
20+
FoldingDescriptor(
21+
it.node,
22+
it.textRange
23+
)
24+
}
25+
26+
override fun getPlaceholderText(node: ASTNode) = "Live Range"
27+
28+
override fun isCollapsedByDefault(node: ASTNode) = true
29+
}

src/main/resources/META-INF/plugin.xml

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -44,11 +44,19 @@
4444

4545
<lang.foldingBuilder
4646
language="PHP Opcodes"
47-
implementationClass="com.github.xepozz.php_opcodes_language.language.PHPOpFoldingBuilder"/>
47+
implementationClass="com.github.xepozz.php_opcodes_language.folding.PHPOpFoldingBuilder"/>
4848

4949
<lang.foldingBuilder
5050
language="PHP Opcodes"
51-
implementationClass="com.github.xepozz.php_opcodes_language.language.PHPOpCommentFoldingBuilder"/>
51+
implementationClass="com.github.xepozz.php_opcodes_language.folding.PHPOpCommentFoldingBuilder"/>
52+
53+
<lang.foldingBuilder
54+
language="PHP Opcodes"
55+
implementationClass="com.github.xepozz.php_opcodes_language.folding.PHPOpLiveRangeFoldingBuilder"/>
56+
57+
<lang.foldingBuilder
58+
language="PHP Opcodes"
59+
implementationClass="com.github.xepozz.php_opcodes_language.folding.PHPOpExceptionTableFoldingBuilder"/>
5260

5361
<psi.referenceContributor
5462
language="PHP Opcodes"

0 commit comments

Comments
 (0)