删除componentBody
This commit is contained in:
@@ -7,10 +7,18 @@ import com.intellij.codeInsight.lookup.LookupElementBuilder
|
||||
import com.intellij.codeInsight.lookup.LookupElementDecorator
|
||||
import com.intellij.icons.AllIcons
|
||||
import com.intellij.openapi.vfs.VfsUtil
|
||||
import com.intellij.psi.PsiDocumentManager
|
||||
import com.intellij.psi.PsiManager
|
||||
import com.intellij.psi.search.GlobalSearchScope.projectScope
|
||||
import com.intellij.psi.stubs.StubIndex
|
||||
import com.intellij.psi.util.childrenOfType
|
||||
import com.intellij.refactoring.extractMethod.newImpl.ExtractMethodHelper.addSiblingAfter
|
||||
import com.intellij.testFramework.utils.editor.commitToPsi
|
||||
import com.intellij.util.ProcessingContext
|
||||
import me.zhouxi.slint.lang.createImport
|
||||
import me.zhouxi.slint.lang.createImportSpecifier
|
||||
import me.zhouxi.slint.lang.psi.SlintComponent
|
||||
import me.zhouxi.slint.lang.psi.SlintImport
|
||||
import me.zhouxi.slint.lang.psi.stubs.index.StubIndexKeys
|
||||
|
||||
object ComponentProvider : CompletionProvider<CompletionParameters>() {
|
||||
@@ -35,13 +43,30 @@ object ComponentProvider : CompletionProvider<CompletionParameters>() {
|
||||
true
|
||||
}
|
||||
val lookups = components.map {
|
||||
val targetFile = it.containingFile.originalFile.virtualFile
|
||||
val currentFile = parameters.position.containingFile.originalFile.virtualFile
|
||||
val path = VfsUtil.findRelativePath(currentFile, targetFile, '/')
|
||||
val builder =
|
||||
LookupElementBuilder.create(it).withTypeText(path).withIcon(AllIcons.Nodes.Class)
|
||||
LookupElementDecorator.withInsertHandler(builder) { _, item ->
|
||||
println(item.psiElement)
|
||||
val targetFile = it.containingFile.originalFile
|
||||
val currentFile = parameters.position.containingFile.originalFile
|
||||
val path = VfsUtil.findRelativePath(currentFile.virtualFile, targetFile.virtualFile, '/')
|
||||
val builder = LookupElementBuilder.create(it).withTypeText(path).withIcon(AllIcons.Nodes.Class)
|
||||
LookupElementDecorator.withInsertHandler(builder) { context, item ->
|
||||
// val caretOffset: Int = context.editor.caretModel.offset
|
||||
// context.document.insertString(caretOffset, "{}")
|
||||
// context.editor.caretModel.moveToOffset(caretOffset + 1)
|
||||
val currentFile = PsiDocumentManager.getInstance(project).getPsiFile(context.document)!!
|
||||
val element = item.psiElement as SlintComponent
|
||||
val targetImport = currentFile.childrenOfType<SlintImport>().find { import ->
|
||||
val target = import.importElement?.moduleLocation?.reference?.resolve()
|
||||
PsiManager.getInstance(project).areElementsEquivalent(target, targetFile)
|
||||
}
|
||||
if (targetImport == null) {
|
||||
currentFile.addBefore(
|
||||
createImport(project, element.componentName!!.text, path!!),
|
||||
currentFile.firstChild
|
||||
)
|
||||
} else {
|
||||
val importElement = targetImport.importElement!!
|
||||
val specifier = createImportSpecifier(project, element.componentName!!.text)
|
||||
importElement.addAfter(specifier,importElement.importSpecifierList.last())
|
||||
}
|
||||
}
|
||||
}
|
||||
result.addAllElements(lookups)
|
||||
|
||||
@@ -3,8 +3,10 @@ package me.zhouxi.slint.lang
|
||||
import com.intellij.openapi.project.Project
|
||||
import com.intellij.psi.PsiElement
|
||||
import com.intellij.psi.PsiFileFactory
|
||||
import com.intellij.psi.util.PsiTreeUtil
|
||||
import me.zhouxi.slint.lang.psi.SlintComponent
|
||||
import me.zhouxi.slint.lang.psi.SlintFile
|
||||
import me.zhouxi.slint.lang.psi.SlintImportSpecifier
|
||||
|
||||
/**
|
||||
* @author zhouxi 2024/5/8
|
||||
@@ -16,3 +18,17 @@ fun createIdentifier(project: Project?, text: String): PsiElement {
|
||||
return file.findChildByClass(SlintComponent::class.java)!!.componentName!!.identifier
|
||||
}
|
||||
|
||||
fun createImport(project: Project?, text: String, location: String): PsiElement {
|
||||
val factory = PsiFileFactory.getInstance(project)
|
||||
val file = factory.createFileFromText(
|
||||
"dummy.slint",
|
||||
SlintLanguage.INSTANCE,
|
||||
"""import {$text} from "$location";"""
|
||||
) as SlintFile
|
||||
return file.firstChild
|
||||
}
|
||||
|
||||
fun createImportSpecifier(project: Project?, text: String): PsiElement {
|
||||
val element = createImport(project, text, "-")
|
||||
return PsiTreeUtil.findChildOfType(element, SlintImportSpecifier::class.java)!!
|
||||
}
|
||||
@@ -1,7 +1,6 @@
|
||||
package me.zhouxi.slint.lang.psi.stubs.index
|
||||
|
||||
import com.intellij.openapi.project.Project
|
||||
import com.intellij.psi.PsiElement
|
||||
import com.intellij.psi.PsiFile
|
||||
import com.intellij.psi.search.GlobalSearchScope
|
||||
import com.intellij.psi.stubs.StubIndex
|
||||
@@ -17,8 +16,3 @@ fun searchComponent(key: String, project: Project, psiFile: PsiFile? = null): Co
|
||||
SlintComponent::class.java
|
||||
)
|
||||
}
|
||||
fun searchProperty(key: String,project: Project,psiElement: PsiElement){
|
||||
// GlobalSearchScope;
|
||||
// StubIndex.getInstance().getAllKeys()
|
||||
|
||||
}
|
||||
@@ -1,6 +1,5 @@
|
||||
package me.zhouxi.slint.lang.psi.stubs.types
|
||||
|
||||
import com.intellij.lang.ASTNode
|
||||
import com.intellij.lang.LighterAST
|
||||
import com.intellij.lang.LighterASTNode
|
||||
import com.intellij.lang.LighterASTTokenNode
|
||||
@@ -10,9 +9,9 @@ import me.zhouxi.slint.lang.SlintLanguage
|
||||
import me.zhouxi.slint.lang.psi.SlintComponent
|
||||
import me.zhouxi.slint.lang.psi.SlintTypes.*
|
||||
import me.zhouxi.slint.lang.psi.impl.SlintComponentImpl
|
||||
import me.zhouxi.slint.lang.psi.stubs.stub.impl.SlintComponentStubImpl
|
||||
import me.zhouxi.slint.lang.psi.stubs.index.StubIndexKeys
|
||||
import me.zhouxi.slint.lang.psi.stubs.stub.SlintComponentStub
|
||||
import me.zhouxi.slint.lang.psi.stubs.stub.impl.SlintComponentStubImpl
|
||||
import java.io.IOException
|
||||
|
||||
/**
|
||||
@@ -24,10 +23,6 @@ object SlintComponentElementType :
|
||||
return SlintComponentImpl(stub, this)
|
||||
}
|
||||
|
||||
fun createPsi(node: ASTNode): SlintComponent {
|
||||
return SlintComponentImpl(node)
|
||||
}
|
||||
|
||||
override fun createStub(psi: SlintComponent, parentStub: StubElement<out PsiElement?>): SlintComponentStub {
|
||||
return SlintComponentStubImpl(
|
||||
parentStub,
|
||||
|
||||
Reference in New Issue
Block a user