Skip to content

Commit 3ae58cc

Browse files
committed
feat: add more languages
1 parent 8b3b8a0 commit 3ae58cc

File tree

13 files changed

+99
-105
lines changed

13 files changed

+99
-105
lines changed
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
package com.github.xepozz.call.base.api
2+
3+
import com.intellij.psi.PsiComment
4+
import com.intellij.psi.PsiFile
5+
import com.intellij.psi.util.PsiTreeUtil
6+
import com.intellij.util.text.findTextRange
7+
8+
abstract class BaseLanguageTextExtractor : LanguageTextExtractor {
9+
override fun extract(file: PsiFile): List<ExtractedBlock> = PsiTreeUtil
10+
.findChildrenOfAnyType(file, PsiComment::class.java)
11+
.mapNotNull { element ->
12+
val text = element.text
13+
val textRange = element.text.findTextRange(text)?.shiftRight(element.textOffset)
14+
15+
if (textRange == null) {
16+
null
17+
} else {
18+
ExtractedBlock(
19+
element = element,
20+
originalRange = textRange,
21+
text = text,
22+
mapping = OffsetMapping.Identity
23+
)
24+
}
25+
}
26+
}

src/main/kotlin/com/github/xepozz/call/base/api/LanguageTextExtractor.kt

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,6 @@ package com.github.xepozz.call.base.api
33
import com.intellij.openapi.extensions.ProjectExtensionPointName
44
import com.intellij.psi.PsiFile
55

6-
/**
7-
* Extractor of text blocks from a file or element (language-specific).
8-
*/
96
interface LanguageTextExtractor {
107
fun isApplicable(file: PsiFile): Boolean
118
fun extract(file: PsiFile): List<ExtractedBlock>
Lines changed: 2 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -1,32 +1,8 @@
11
package com.github.xepozz.call.base.extractors
22

3-
import com.github.xepozz.call.base.api.ExtractedBlock
4-
import com.github.xepozz.call.base.api.LanguageTextExtractor
5-
import com.github.xepozz.call.base.api.OffsetMapping
6-
import com.intellij.openapi.util.TextRange
7-
import com.intellij.psi.PsiComment
3+
import com.github.xepozz.call.base.api.BaseLanguageTextExtractor
84
import com.intellij.psi.PsiFile
9-
import com.intellij.psi.PsiRecursiveElementVisitor
105

11-
class AdapterLanguageExtractor : LanguageTextExtractor {
6+
class AdapterLanguageExtractor : BaseLanguageTextExtractor() {
127
override fun isApplicable(file: PsiFile): Boolean = true
13-
14-
override fun extract(file: PsiFile): List<ExtractedBlock> {
15-
val result = mutableListOf<ExtractedBlock>()
16-
file.accept(object : PsiRecursiveElementVisitor() {
17-
override fun visitComment(element: PsiComment) {
18-
val text = element.text
19-
result.add(
20-
ExtractedBlock(
21-
element = element,
22-
originalRange = element.textRange ?: TextRange(0, text.length),
23-
text = text,
24-
mapping = OffsetMapping.Identity
25-
)
26-
)
27-
super.visitElement(element)
28-
}
29-
})
30-
return result
31-
}
328
}

src/main/kotlin/com/github/xepozz/call/base/inlay/ExecutionInlayProvider.kt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -81,6 +81,7 @@ class ExecutionInlayProvider : InlayHintsProvider<NoSettings> {
8181
println("file: $file, extractors: ${extractors.map { it.javaClass }}")
8282

8383
val blocks = extractors.flatMap { it.extract(file) }.ifEmpty { return emptyMap() }
84+
println("blocks: ${blocks.map { it }}")
8485

8586
val featureGenerators = FeatureGenerator.getApplicable(project).ifEmpty { return emptyMap() }
8687

Lines changed: 2 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -1,41 +1,9 @@
11
package com.github.xepozz.call.language.kotlin
22

3-
import com.github.xepozz.call.base.api.ExtractedBlock
4-
import com.github.xepozz.call.base.api.LanguageTextExtractor
5-
import com.github.xepozz.call.base.api.OffsetMapping
6-
import com.intellij.openapi.util.TextRange
7-
import com.intellij.psi.PsiComment
8-
import com.intellij.psi.PsiElement
3+
import com.github.xepozz.call.base.api.BaseLanguageTextExtractor
94
import com.intellij.psi.PsiFile
10-
import com.intellij.psi.PsiRecursiveElementVisitor
11-
12-
/**
13-
* Default extractor that reads plain PsiComment elements and returns them as blocks.
14-
* This serves as a language-agnostic fallback when no language-specific extractors exist.
15-
*/
16-
class KotlinLanguageExtractor : LanguageTextExtractor {
175

6+
class KotlinLanguageExtractor : BaseLanguageTextExtractor() {
187
// override fun isApplicable(file: PsiFile): Boolean = file is KtFile
198
override fun isApplicable(file: PsiFile): Boolean = false
20-
21-
override fun extract(file: PsiFile): List<ExtractedBlock> {
22-
val result = mutableListOf<ExtractedBlock>()
23-
file.accept(object : PsiRecursiveElementVisitor() {
24-
override fun visitElement(element: PsiElement) {
25-
if (element is PsiComment) {
26-
val text = element.text
27-
result.add(
28-
ExtractedBlock(
29-
element = element,
30-
originalRange = element.textRange ?: TextRange(0, text.length),
31-
text = text,
32-
mapping = OffsetMapping.Identity
33-
)
34-
)
35-
}
36-
super.visitElement(element)
37-
}
38-
})
39-
return result
40-
}
419
}
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
package com.github.xepozz.call.language.php
2+
3+
import com.github.xepozz.call.base.api.BaseLanguageTextExtractor
4+
import com.intellij.psi.PsiFile
5+
import com.jetbrains.php.lang.psi.PhpFile
6+
7+
class PHPLanguageExtractor : BaseLanguageTextExtractor() {
8+
override fun isApplicable(file: PsiFile): Boolean = file is PhpFile
9+
}
Lines changed: 2 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -1,44 +1,9 @@
11
package com.github.xepozz.call.language.xml
22

3-
import com.github.xepozz.call.base.api.ExtractedBlock
4-
import com.github.xepozz.call.base.api.LanguageTextExtractor
5-
import com.github.xepozz.call.base.api.OffsetMapping
6-
import com.intellij.psi.PsiComment
3+
import com.github.xepozz.call.base.api.BaseLanguageTextExtractor
74
import com.intellij.psi.PsiFile
8-
import com.intellij.psi.PsiRecursiveElementVisitor
9-
import com.intellij.psi.xml.XmlComment
105
import com.intellij.psi.xml.XmlFile
11-
import com.intellij.util.text.findTextRange
12-
13-
/**
14-
* Default extractor that reads plain PsiComment elements and returns them as blocks.
15-
* This serves as a language-agnostic fallback when no language-specific extractors exist.
16-
*/
17-
class XmlLanguageExtractor : LanguageTextExtractor {
186

7+
class XmlLanguageExtractor : BaseLanguageTextExtractor() {
198
override fun isApplicable(file: PsiFile): Boolean = file is XmlFile
20-
21-
override fun extract(file: PsiFile): List<ExtractedBlock> {
22-
val result = mutableListOf<ExtractedBlock>()
23-
file.accept(object : PsiRecursiveElementVisitor() {
24-
override fun visitComment(element: PsiComment) {
25-
if (element is XmlComment) {
26-
val text = element.commentText
27-
val textRange = element.text.findTextRange(text)?.shiftRight(element.textOffset)
28-
if (textRange != null) {
29-
result.add(
30-
ExtractedBlock(
31-
element = element,
32-
originalRange = textRange,
33-
text = text,
34-
mapping = OffsetMapping.Identity
35-
)
36-
)
37-
}
38-
}
39-
super.visitElement(element)
40-
}
41-
})
42-
return result
43-
}
449
}
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
package com.github.xepozz.call.language.yaml
2+
3+
import com.github.xepozz.call.base.api.BaseLanguageTextExtractor
4+
import com.intellij.psi.PsiFile
5+
import org.jetbrains.yaml.psi.YAMLFile
6+
7+
class YamlLanguageExtractor : BaseLanguageTextExtractor() {
8+
override fun isApplicable(file: PsiFile): Boolean = file is YAMLFile
9+
}

src/main/resources/META-INF/language-kotlin.xml

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,10 @@
11
<idea-plugin>
2+
<extensions defaultExtensionNs="com.intellij">
3+
<codeInsight.inlayProvider
4+
language="Kotlin"
5+
implementationClass="com.github.xepozz.call.base.inlay.ExecutionInlayProvider"/>
6+
</extensions>
7+
28
<extensions defaultExtensionNs="com.github.xepozz.call">
39
<languageTextExtractor
410
order="last"
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
<idea-plugin>
2+
<extensions defaultExtensionNs="com.intellij">
3+
<codeInsight.inlayProvider
4+
language="PHP"
5+
implementationClass="com.github.xepozz.call.base.inlay.ExecutionInlayProvider"/>
6+
</extensions>
7+
8+
<extensions defaultExtensionNs="com.github.xepozz.call">
9+
<languageTextExtractor
10+
order="last"
11+
implementation="com.github.xepozz.call.language.php.PHPLanguageExtractor"/>
12+
</extensions>
13+
</idea-plugin>

0 commit comments

Comments
 (0)