删除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.codeInsight.lookup.LookupElementDecorator
|
||||||
import com.intellij.icons.AllIcons
|
import com.intellij.icons.AllIcons
|
||||||
import com.intellij.openapi.vfs.VfsUtil
|
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.search.GlobalSearchScope.projectScope
|
||||||
import com.intellij.psi.stubs.StubIndex
|
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 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.SlintComponent
|
||||||
|
import me.zhouxi.slint.lang.psi.SlintImport
|
||||||
import me.zhouxi.slint.lang.psi.stubs.index.StubIndexKeys
|
import me.zhouxi.slint.lang.psi.stubs.index.StubIndexKeys
|
||||||
|
|
||||||
object ComponentProvider : CompletionProvider<CompletionParameters>() {
|
object ComponentProvider : CompletionProvider<CompletionParameters>() {
|
||||||
@@ -35,13 +43,30 @@ object ComponentProvider : CompletionProvider<CompletionParameters>() {
|
|||||||
true
|
true
|
||||||
}
|
}
|
||||||
val lookups = components.map {
|
val lookups = components.map {
|
||||||
val targetFile = it.containingFile.originalFile.virtualFile
|
val targetFile = it.containingFile.originalFile
|
||||||
val currentFile = parameters.position.containingFile.originalFile.virtualFile
|
val currentFile = parameters.position.containingFile.originalFile
|
||||||
val path = VfsUtil.findRelativePath(currentFile, targetFile, '/')
|
val path = VfsUtil.findRelativePath(currentFile.virtualFile, targetFile.virtualFile, '/')
|
||||||
val builder =
|
val builder = LookupElementBuilder.create(it).withTypeText(path).withIcon(AllIcons.Nodes.Class)
|
||||||
LookupElementBuilder.create(it).withTypeText(path).withIcon(AllIcons.Nodes.Class)
|
LookupElementDecorator.withInsertHandler(builder) { context, item ->
|
||||||
LookupElementDecorator.withInsertHandler(builder) { _, item ->
|
// val caretOffset: Int = context.editor.caretModel.offset
|
||||||
println(item.psiElement)
|
// 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)
|
result.addAllElements(lookups)
|
||||||
|
|||||||
@@ -3,8 +3,10 @@ package me.zhouxi.slint.lang
|
|||||||
import com.intellij.openapi.project.Project
|
import com.intellij.openapi.project.Project
|
||||||
import com.intellij.psi.PsiElement
|
import com.intellij.psi.PsiElement
|
||||||
import com.intellij.psi.PsiFileFactory
|
import com.intellij.psi.PsiFileFactory
|
||||||
|
import com.intellij.psi.util.PsiTreeUtil
|
||||||
import me.zhouxi.slint.lang.psi.SlintComponent
|
import me.zhouxi.slint.lang.psi.SlintComponent
|
||||||
import me.zhouxi.slint.lang.psi.SlintFile
|
import me.zhouxi.slint.lang.psi.SlintFile
|
||||||
|
import me.zhouxi.slint.lang.psi.SlintImportSpecifier
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @author zhouxi 2024/5/8
|
* @author zhouxi 2024/5/8
|
||||||
@@ -16,3 +18,17 @@ fun createIdentifier(project: Project?, text: String): PsiElement {
|
|||||||
return file.findChildByClass(SlintComponent::class.java)!!.componentName!!.identifier
|
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
|
package me.zhouxi.slint.lang.psi.stubs.index
|
||||||
|
|
||||||
import com.intellij.openapi.project.Project
|
import com.intellij.openapi.project.Project
|
||||||
import com.intellij.psi.PsiElement
|
|
||||||
import com.intellij.psi.PsiFile
|
import com.intellij.psi.PsiFile
|
||||||
import com.intellij.psi.search.GlobalSearchScope
|
import com.intellij.psi.search.GlobalSearchScope
|
||||||
import com.intellij.psi.stubs.StubIndex
|
import com.intellij.psi.stubs.StubIndex
|
||||||
@@ -16,9 +15,4 @@ fun searchComponent(key: String, project: Project, psiFile: PsiFile? = null): Co
|
|||||||
project, scope,
|
project, scope,
|
||||||
SlintComponent::class.java
|
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
|
package me.zhouxi.slint.lang.psi.stubs.types
|
||||||
|
|
||||||
import com.intellij.lang.ASTNode
|
|
||||||
import com.intellij.lang.LighterAST
|
import com.intellij.lang.LighterAST
|
||||||
import com.intellij.lang.LighterASTNode
|
import com.intellij.lang.LighterASTNode
|
||||||
import com.intellij.lang.LighterASTTokenNode
|
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.SlintComponent
|
||||||
import me.zhouxi.slint.lang.psi.SlintTypes.*
|
import me.zhouxi.slint.lang.psi.SlintTypes.*
|
||||||
import me.zhouxi.slint.lang.psi.impl.SlintComponentImpl
|
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.index.StubIndexKeys
|
||||||
import me.zhouxi.slint.lang.psi.stubs.stub.SlintComponentStub
|
import me.zhouxi.slint.lang.psi.stubs.stub.SlintComponentStub
|
||||||
|
import me.zhouxi.slint.lang.psi.stubs.stub.impl.SlintComponentStubImpl
|
||||||
import java.io.IOException
|
import java.io.IOException
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -24,10 +23,6 @@ object SlintComponentElementType :
|
|||||||
return SlintComponentImpl(stub, this)
|
return SlintComponentImpl(stub, this)
|
||||||
}
|
}
|
||||||
|
|
||||||
fun createPsi(node: ASTNode): SlintComponent {
|
|
||||||
return SlintComponentImpl(node)
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun createStub(psi: SlintComponent, parentStub: StubElement<out PsiElement?>): SlintComponentStub {
|
override fun createStub(psi: SlintComponent, parentStub: StubElement<out PsiElement?>): SlintComponentStub {
|
||||||
return SlintComponentStubImpl(
|
return SlintComponentStubImpl(
|
||||||
parentStub,
|
parentStub,
|
||||||
|
|||||||
Reference in New Issue
Block a user