Skip to content

Commit 39ae872

Browse files
committed
feat: support comment folding builder
1 parent cc4a756 commit 39ae872

4 files changed

Lines changed: 40 additions & 5 deletions

File tree

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.language
2+
3+
import com.github.xepozz.php_opcodes_language.language.psi.PHPOpBlockComment
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 PHPOpCommentFoldingBuilder : 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, PHPOpBlockComment::class.java)
19+
.mapNotNull {
20+
FoldingDescriptor(
21+
it.node,
22+
it.textRange
23+
)
24+
}
25+
26+
override fun getPlaceholderText(node: ASTNode) = node.text.take(15)
27+
28+
override fun isCollapsedByDefault(node: ASTNode) = true
29+
}

src/main/kotlin/com/github/xepozz/php_opcodes_language/language/parser/PHPOp.bnf

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -39,9 +39,11 @@
3939

4040
phpOpFile ::= item_*
4141

42-
private item_ ::= block | COMMENT | EOL
42+
private item_ ::= block | block_comment | EOL
4343

44-
block ::= block_name COLON (statement | live_range | exception_table | COMMENT | EOL)+
44+
block_comment ::= COMMENT (EOL COMMENT)+
45+
46+
block ::= block_name COLON (statement | live_range | exception_table | block_comment | EOL)+
4547
{
4648
pin=2
4749
}
@@ -197,9 +199,7 @@ line_number ::= INTEGER
197199
exception_table ::= 'EXCEPTION TABLE:' exception_table_statements
198200
{
199201
pin=1
200-
// recoverWhile=exception_table_recover
201202
}
202-
//private exception_table_recover ::= !(EOL)
203203

204204
exception_table_statements ::= exception_table_statement+
205205

src/main/kotlin/com/github/xepozz/php_opcodes_language/language/psi/PHPOpTokenSets.kt

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,8 @@ import com.intellij.psi.tree.TokenSet
55
object PHPOpTokenSets {
66
val EMPTY_SET = TokenSet.EMPTY
77

8-
val COMMENTS = TokenSet.create(PHPOpTypes.COMMENT)
8+
val COMMENTS = TokenSet.EMPTY
9+
10+
// val COMMENTS = TokenSet.create(PHPOpTypes.COMMENT)
911
val WHITESPACES = TokenSet.WHITE_SPACE
1012
}

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

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,10 @@
4646
language="PHP Opcodes"
4747
implementationClass="com.github.xepozz.php_opcodes_language.language.PHPOpFoldingBuilder"/>
4848

49+
<lang.foldingBuilder
50+
language="PHP Opcodes"
51+
implementationClass="com.github.xepozz.php_opcodes_language.language.PHPOpCommentFoldingBuilder"/>
52+
4953
<psi.referenceContributor
5054
language="PHP Opcodes"
5155
implementation="com.github.xepozz.php_opcodes_language.reference.PHPOpReferenceContributor"/>

0 commit comments

Comments
 (0)