Skip to content

Commit 3e3e435

Browse files
authored
add html structure in gts (#292)
* add html folding in gts * add structure view for html in gts
1 parent 01dfb6f commit 3e3e435

File tree

2 files changed

+60
-0
lines changed

2 files changed

+60
-0
lines changed
Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,57 @@
1+
package com.emberjs.gts
2+
3+
import com.dmarcotte.handlebars.psi.HbPsiFile
4+
import com.intellij.ide.structureView.StructureViewBuilder
5+
import com.intellij.ide.structureView.StructureViewModel
6+
import com.intellij.ide.structureView.TreeBasedStructureViewBuilder
7+
import com.intellij.ide.structureView.impl.TemplateLanguageStructureViewBuilder
8+
import com.intellij.lang.Language
9+
import com.intellij.lang.PsiStructureViewFactory
10+
import com.intellij.lang.html.structureView.HtmlStructureViewBuilderProvider
11+
import com.intellij.lang.javascript.TypeScriptFileType
12+
import com.intellij.lang.typescript.structureView.TypeScriptStructureViewBuilderFactory
13+
import com.intellij.openapi.editor.Editor
14+
import com.intellij.psi.PsiFile
15+
import com.intellij.psi.xml.XmlFile
16+
17+
18+
class GtsStructureViewFactory : PsiStructureViewFactory {
19+
20+
fun getModel(psiFile: PsiFile, editor: Editor?): StructureViewModel? {
21+
if (psiFile is GtsFile) {
22+
return (TypeScriptStructureViewBuilderFactory().getStructureViewBuilder(psiFile) as TreeBasedStructureViewBuilder).createStructureViewModel(editor)
23+
}
24+
if (psiFile.fileType === TypeScriptFileType) {
25+
return (TypeScriptStructureViewBuilderFactory().getStructureViewBuilder(psiFile) as TreeBasedStructureViewBuilder).createStructureViewModel(editor)
26+
}
27+
if (psiFile is XmlFile) {
28+
return (HtmlStructureViewBuilderProvider().createStructureViewBuilder(psiFile) as TreeBasedStructureViewBuilder).createStructureViewModel(editor)
29+
}
30+
if (psiFile is HbPsiFile) {
31+
return (TypeScriptStructureViewBuilderFactory().getStructureViewBuilder(psiFile) as TreeBasedStructureViewBuilder).createStructureViewModel(editor)
32+
}
33+
return null
34+
}
35+
36+
override fun getStructureViewBuilder(psiFile: PsiFile): StructureViewBuilder? {
37+
return object : TemplateLanguageStructureViewBuilder(psiFile) {
38+
val modelFactory = this@GtsStructureViewFactory::getModel
39+
40+
override fun isAcceptableBaseLanguageFile(dataFile: PsiFile?): Boolean {
41+
return dataFile !is HbPsiFile
42+
}
43+
44+
override fun createMainBuilder(psi: PsiFile): TreeBasedStructureViewBuilder? {
45+
return object : TreeBasedStructureViewBuilder() {
46+
override fun isRootNodeShown(): Boolean {
47+
return false
48+
}
49+
50+
override fun createStructureViewModel(editor: Editor?): StructureViewModel {
51+
return modelFactory(psi, editor) as StructureViewModel
52+
}
53+
}
54+
}
55+
}
56+
}
57+
}

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

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -83,6 +83,9 @@
8383
<lang.formatter language="Gts" implementationClass="com.emberjs.gts.GtsFormattingModelBuilder" />
8484
<lang.formatter language="Gjs" implementationClass="com.emberjs.gts.GtsFormattingModelBuilder" />
8585
<lang.foldingBuilder language="Gts" implementationClass="com.emberjs.gts.GtsFoldingBuilder" />
86+
<lang.foldingBuilder language="Gjs" implementationClass="com.emberjs.gts.GtsFoldingBuilder" />
87+
<lang.psiStructureViewFactory language="Gts" implementationClass="com.emberjs.gts.GtsStructureViewFactory" />
88+
<lang.psiStructureViewFactory language="Gjs" implementationClass="com.emberjs.gts.GtsStructureViewFactory" />
8689
<editorNotificationProvider implementation="com.emberjs.glint.GlintEditorNotificationsProvider"/>
8790
<editorFactoryListener implementation="com.emberjs.hbs.HbMustacheNameSynchronizer$MyEditorFactoryListener"/>
8891
<typedHandler implementation="com.emberjs.gts.GtsTypeHandler" order="before xmlSlash"/>

0 commit comments

Comments
 (0)