添加stubIndex
This commit is contained in:
@@ -137,6 +137,7 @@ Component ::= ComponentKeyword ComponentName InheritDeclaration? ComponentBody {
|
|||||||
"me.zhouxi.slint.lang.psi.SlintPsiNamedElement"
|
"me.zhouxi.slint.lang.psi.SlintPsiNamedElement"
|
||||||
"com.intellij.psi.StubBasedPsiElement<me.zhouxi.slint.stubs.stub.SlintComponentStub>"
|
"com.intellij.psi.StubBasedPsiElement<me.zhouxi.slint.stubs.stub.SlintComponentStub>"
|
||||||
]
|
]
|
||||||
|
elementTypeClass="me.zhouxi.slint.stubs.types.SlintComponentStubType"
|
||||||
stubClass="me.zhouxi.slint.stubs.stub.SlintComponentStub"
|
stubClass="me.zhouxi.slint.stubs.stub.SlintComponentStub"
|
||||||
mixin="me.zhouxi.slint.lang.psi.impl.SlintStubBasedPsiNamedElementImpl<me.zhouxi.slint.stubs.stub.SlintComponentStub>"
|
mixin="me.zhouxi.slint.lang.psi.impl.SlintStubBasedPsiNamedElementImpl<me.zhouxi.slint.stubs.stub.SlintComponentStub>"
|
||||||
}
|
}
|
||||||
@@ -187,7 +188,7 @@ PropertyChanged ::= ChangedKeyword LocalVariable '=>' CodeBlock{
|
|||||||
// 回调定义 pure callback abc()->int; callback abc; callback(..);callback()->type;
|
// 回调定义 pure callback abc()->int; callback abc; callback(..);callback()->type;
|
||||||
CallbackDeclaration ::= PureKeyword? CallbackKeyword FunctionName CallbackBinding? ';'{
|
CallbackDeclaration ::= PureKeyword? CallbackKeyword FunctionName CallbackBinding? ';'{
|
||||||
pin=2
|
pin=2
|
||||||
implements=["me.zhouxi.slint.lang.psi.SlintPsiNamedElement""me.zhouxi.slint.stubs.SlintPsiStubElement<>"]
|
implements=["me.zhouxi.slint.lang.psi.SlintPsiNamedElement"]
|
||||||
mixin="me.zhouxi.slint.lang.psi.impl.SlintPsiNamedElementMixinImpl"
|
mixin="me.zhouxi.slint.lang.psi.impl.SlintPsiNamedElementMixinImpl"
|
||||||
}
|
}
|
||||||
//回调参数定义
|
//回调参数定义
|
||||||
|
|||||||
@@ -10,14 +10,14 @@ import com.intellij.psi.FileViewProvider;
|
|||||||
import com.intellij.psi.PsiElement;
|
import com.intellij.psi.PsiElement;
|
||||||
import com.intellij.psi.PsiFile;
|
import com.intellij.psi.PsiFile;
|
||||||
import com.intellij.psi.tree.IFileElementType;
|
import com.intellij.psi.tree.IFileElementType;
|
||||||
import com.intellij.psi.tree.ILightStubFileElementType;
|
import com.intellij.psi.tree.IStubFileElementType;
|
||||||
import com.intellij.psi.tree.TokenSet;
|
import com.intellij.psi.tree.TokenSet;
|
||||||
import me.zhouxi.slint.lang.lexer.SlintLexer;
|
import me.zhouxi.slint.lang.lexer.SlintLexer;
|
||||||
import me.zhouxi.slint.lang.parser.SlintParser;
|
import me.zhouxi.slint.lang.parser.SlintParser;
|
||||||
import me.zhouxi.slint.lang.psi.SlintFile;
|
import me.zhouxi.slint.lang.psi.SlintFile;
|
||||||
import me.zhouxi.slint.lang.psi.SlintTypes;
|
import me.zhouxi.slint.lang.psi.SlintTypes;
|
||||||
import me.zhouxi.slint.stubs.impl.SlintFileStub;
|
import me.zhouxi.slint.stubs.types.SlintComponentStubType;
|
||||||
import org.jetbrains.annotations.NonNls;
|
import me.zhouxi.slint.stubs.types.SlintFileElementType;
|
||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
|
|
||||||
import static me.zhouxi.slint.lang.psi.SlintTypes.*;
|
import static me.zhouxi.slint.lang.psi.SlintTypes.*;
|
||||||
@@ -38,15 +38,9 @@ public class SlintParserDefinition implements ParserDefinition {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public @NotNull IFileElementType getFileNodeType() {
|
public @NotNull IFileElementType getFileNodeType() {
|
||||||
return FileType;
|
return SlintFileElementType.INSTANCE;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static final ILightStubFileElementType<SlintFileStub> FileType = new ILightStubFileElementType<>("SlintFile", SlintLanguage.INSTANCE) {
|
|
||||||
@Override
|
|
||||||
public @NonNls @NotNull String getExternalId() {
|
|
||||||
return "slint.FILE";
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public @NotNull TokenSet getCommentTokens() {
|
public @NotNull TokenSet getCommentTokens() {
|
||||||
@@ -60,6 +54,9 @@ public class SlintParserDefinition implements ParserDefinition {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public @NotNull PsiElement createElement(ASTNode node) {
|
public @NotNull PsiElement createElement(ASTNode node) {
|
||||||
|
if (node.getElementType() instanceof SlintComponentStubType) {
|
||||||
|
return ((SlintComponentStubType) node.getElementType()).createPsi(node);
|
||||||
|
}
|
||||||
return SlintTypes.Factory.createElement(node);
|
return SlintTypes.Factory.createElement(node);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1,23 +1,29 @@
|
|||||||
package me.zhouxi.slint.lang.psi;
|
package me.zhouxi.slint.lang.psi;
|
||||||
|
|
||||||
import com.intellij.extapi.psi.PsiFileBase;
|
|
||||||
import com.intellij.openapi.fileTypes.FileType;
|
import com.intellij.openapi.fileTypes.FileType;
|
||||||
import com.intellij.psi.FileViewProvider;
|
import com.intellij.psi.FileViewProvider;
|
||||||
|
import com.intellij.psi.PsiElementVisitor;
|
||||||
import com.intellij.psi.PsiFile;
|
import com.intellij.psi.PsiFile;
|
||||||
import me.zhouxi.slint.lang.SlintLanguage;
|
import com.intellij.psi.impl.source.PsiFileImpl;
|
||||||
|
import me.zhouxi.slint.stubs.types.SlintFileElementType;
|
||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @author zhouxi 2024/4/30
|
* @author zhouxi 2024/4/30
|
||||||
*/
|
*/
|
||||||
public class SlintFile extends PsiFileBase implements PsiFile {
|
public class SlintFile extends PsiFileImpl implements PsiFile {
|
||||||
|
|
||||||
public SlintFile(@NotNull FileViewProvider viewProvider) {
|
public SlintFile(@NotNull FileViewProvider viewProvider) {
|
||||||
super(viewProvider, SlintLanguage.INSTANCE);
|
super(SlintFileElementType.INSTANCE, SlintFileElementType.INSTANCE, viewProvider);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public @NotNull FileType getFileType() {
|
public @NotNull FileType getFileType() {
|
||||||
return SlintFileType.INSTANCE;
|
return SlintFileType.INSTANCE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void accept(@NotNull PsiElementVisitor visitor) {
|
||||||
|
visitor.visitFile(this);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -2,6 +2,7 @@ package me.zhouxi.slint.lang.psi.impl;
|
|||||||
|
|
||||||
import com.intellij.extapi.psi.ASTWrapperPsiElement;
|
import com.intellij.extapi.psi.ASTWrapperPsiElement;
|
||||||
import com.intellij.lang.ASTNode;
|
import com.intellij.lang.ASTNode;
|
||||||
|
import com.intellij.openapi.util.text.StringUtil;
|
||||||
import me.zhouxi.slint.lang.psi.SlintPsiElement;
|
import me.zhouxi.slint.lang.psi.SlintPsiElement;
|
||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
|
|
||||||
@@ -10,4 +11,11 @@ public abstract class SlintPsiElementImpl extends ASTWrapperPsiElement implement
|
|||||||
public SlintPsiElementImpl(@NotNull ASTNode node) {
|
public SlintPsiElementImpl(@NotNull ASTNode node) {
|
||||||
super(node);
|
super(node);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String toString() {
|
||||||
|
final String className = getClass().getSimpleName();
|
||||||
|
return StringUtil.trimEnd(className, "Impl") + "(" + getNode().getElementType() + ")";
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -3,16 +3,15 @@ package me.zhouxi.slint.lang.psi.impl
|
|||||||
import com.intellij.extapi.psi.StubBasedPsiElementBase
|
import com.intellij.extapi.psi.StubBasedPsiElementBase
|
||||||
import com.intellij.lang.ASTNode
|
import com.intellij.lang.ASTNode
|
||||||
import com.intellij.openapi.util.NlsSafe
|
import com.intellij.openapi.util.NlsSafe
|
||||||
|
import com.intellij.openapi.util.text.StringUtil
|
||||||
import com.intellij.psi.PsiElement
|
import com.intellij.psi.PsiElement
|
||||||
import com.intellij.psi.stubs.IStubElementType
|
import com.intellij.psi.stubs.IStubElementType
|
||||||
import com.intellij.psi.stubs.StubElement
|
import com.intellij.psi.stubs.StubElement
|
||||||
import com.intellij.psi.tree.IElementType
|
|
||||||
import com.intellij.util.IncorrectOperationException
|
import com.intellij.util.IncorrectOperationException
|
||||||
import me.zhouxi.slint.lang.createIdentifier
|
import me.zhouxi.slint.lang.createIdentifier
|
||||||
import me.zhouxi.slint.lang.psi.SlintNamed
|
import me.zhouxi.slint.lang.psi.SlintNamed
|
||||||
import me.zhouxi.slint.lang.psi.SlintPsiElement
|
import me.zhouxi.slint.lang.psi.SlintPsiElement
|
||||||
import me.zhouxi.slint.lang.psi.SlintPsiNamedElement
|
import me.zhouxi.slint.lang.psi.SlintPsiNamedElement
|
||||||
import me.zhouxi.slint.stubs.SlintPsiStub
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @author zhouxi 2024/5/23
|
* @author zhouxi 2024/5/23
|
||||||
@@ -46,4 +45,8 @@ abstract class SlintStubBasedPsiNamedElementImpl<T : StubElement<out PsiElement>
|
|||||||
element.replace(createIdentifier(project, name))
|
element.replace(createIdentifier(project, name))
|
||||||
return this
|
return this
|
||||||
}
|
}
|
||||||
|
|
||||||
|
override fun toString(): String {
|
||||||
|
return StringUtil.trimEnd(this::class.java.simpleName, "Impl") + "(" + elementType + ")"
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -15,13 +15,14 @@ import me.zhouxi.slint.lang.psi.SlintPsiUtils.InternalTypes
|
|||||||
import me.zhouxi.slint.lang.psi.SlintTypes
|
import me.zhouxi.slint.lang.psi.SlintTypes
|
||||||
import me.zhouxi.slint.lang.psi.utils.exportedElements
|
import me.zhouxi.slint.lang.psi.utils.exportedElements
|
||||||
import me.zhouxi.slint.lang.psi.utils.inheritDeclaredElements
|
import me.zhouxi.slint.lang.psi.utils.inheritDeclaredElements
|
||||||
|
import me.zhouxi.slint.stubs.types.SlintFileElementType
|
||||||
|
|
||||||
class SlintCompletionContributor : CompletionContributor() {
|
class SlintCompletionContributor : CompletionContributor() {
|
||||||
init {
|
init {
|
||||||
//文件级别
|
//文件级别
|
||||||
extend(
|
extend(
|
||||||
CompletionType.BASIC,
|
CompletionType.BASIC,
|
||||||
PlatformPatterns.psiElement().withAncestor(4, PlatformPatterns.psiElement(SlintParserDefinition.FileType)),
|
PlatformPatterns.psiElement().withAncestor(4, PlatformPatterns.psiElement(SlintFileElementType)),
|
||||||
object : CompletionProvider<CompletionParameters>() {
|
object : CompletionProvider<CompletionParameters>() {
|
||||||
override fun addCompletions(
|
override fun addCompletions(
|
||||||
parameters: CompletionParameters,
|
parameters: CompletionParameters,
|
||||||
|
|||||||
@@ -1,10 +1,15 @@
|
|||||||
package me.zhouxi.slint.stubs
|
package me.zhouxi.slint.stubs
|
||||||
|
|
||||||
|
import com.intellij.psi.stubs.IStubElementType
|
||||||
|
import me.zhouxi.slint.lang.psi.SlintComponent
|
||||||
|
import me.zhouxi.slint.stubs.stub.SlintComponentStub
|
||||||
import me.zhouxi.slint.stubs.types.SlintComponentStubType
|
import me.zhouxi.slint.stubs.types.SlintComponentStubType
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @author zhouxi 2024/5/23
|
* @author zhouxi 2024/5/23
|
||||||
*/
|
*/
|
||||||
object SlintStubTypes {
|
interface SlintStubTypes {
|
||||||
val ComponentType = SlintComponentStubType()
|
companion object {
|
||||||
|
// val Component: IStubElementType<SlintComponentStub, SlintComponent> = SlintComponentStubType()
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,14 +1,12 @@
|
|||||||
package me.zhouxi.slint.stubs;
|
package me.zhouxi.slint.stubs
|
||||||
|
|
||||||
import com.intellij.psi.stubs.StubIndexKey;
|
import com.intellij.psi.stubs.StubIndexKey
|
||||||
import me.zhouxi.slint.lang.psi.SlintComponentName;
|
import me.zhouxi.slint.lang.psi.SlintComponent
|
||||||
|
import me.zhouxi.slint.lang.psi.SlintComponentName
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @author zhouxi 2024/5/23
|
* @author zhouxi 2024/5/23
|
||||||
*/
|
*/
|
||||||
public class StubKeys {
|
object StubKeys {
|
||||||
|
val Component: StubIndexKey<String, SlintComponent> = StubIndexKey.createIndexKey("slint.component")
|
||||||
public static final StubIndexKey<String, SlintComponentName> COMPONENT = StubIndexKey.createIndexKey("slint.component");
|
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,9 +0,0 @@
|
|||||||
package me.zhouxi.slint.stubs.impl
|
|
||||||
|
|
||||||
import com.intellij.psi.stubs.PsiFileStubImpl
|
|
||||||
import me.zhouxi.slint.lang.psi.SlintFile
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @author zhouxi 2024/5/23
|
|
||||||
*/
|
|
||||||
class SlintFileStub(file: SlintFile) : PsiFileStubImpl<SlintFile>(file)
|
|
||||||
@@ -0,0 +1,17 @@
|
|||||||
|
package me.zhouxi.slint.stubs.impl
|
||||||
|
|
||||||
|
import com.intellij.psi.stubs.PsiFileStubImpl
|
||||||
|
import com.intellij.psi.tree.IStubFileElementType
|
||||||
|
import me.zhouxi.slint.lang.psi.SlintFile
|
||||||
|
import me.zhouxi.slint.stubs.stub.SlintFileStub
|
||||||
|
import me.zhouxi.slint.stubs.types.SlintFileElementType
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author zhouxi 2024/5/23
|
||||||
|
*/
|
||||||
|
class SlintFileStubImpl(file: SlintFile) : PsiFileStubImpl<SlintFile>(file), SlintFileStub {
|
||||||
|
|
||||||
|
override fun getType(): IStubFileElementType<*> {
|
||||||
|
return SlintFileElementType
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,12 @@
|
|||||||
|
package me.zhouxi.slint.stubs.index
|
||||||
|
|
||||||
|
import com.intellij.psi.stubs.StringStubIndexExtension
|
||||||
|
import com.intellij.psi.stubs.StubIndexKey
|
||||||
|
import me.zhouxi.slint.lang.psi.SlintComponent
|
||||||
|
import me.zhouxi.slint.stubs.StubKeys
|
||||||
|
|
||||||
|
class ComponentNameIndex : StringStubIndexExtension<SlintComponent>() {
|
||||||
|
override fun getKey(): StubIndexKey<String, SlintComponent> {
|
||||||
|
return StubKeys.Component
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,7 @@
|
|||||||
|
package me.zhouxi.slint.stubs.stub;
|
||||||
|
|
||||||
|
import com.intellij.psi.stubs.PsiFileStub;
|
||||||
|
import me.zhouxi.slint.lang.psi.SlintFile;
|
||||||
|
|
||||||
|
public interface SlintFileStub extends PsiFileStub<SlintFile> {
|
||||||
|
}
|
||||||
@@ -1,26 +1,38 @@
|
|||||||
package me.zhouxi.slint.stubs.types
|
package me.zhouxi.slint.stubs.types
|
||||||
|
|
||||||
|
import com.intellij.lang.ASTNode
|
||||||
|
import com.intellij.lang.LighterAST
|
||||||
|
import com.intellij.lang.LighterASTNode
|
||||||
|
import com.intellij.lang.LighterASTTokenNode
|
||||||
|
import com.intellij.lang.TreeBackedLighterAST
|
||||||
import com.intellij.psi.PsiElement
|
import com.intellij.psi.PsiElement
|
||||||
import com.intellij.psi.stubs.*
|
import com.intellij.psi.stubs.*
|
||||||
import com.intellij.psi.util.parentOfType
|
import com.intellij.psi.util.parentOfType
|
||||||
import me.zhouxi.slint.lang.SlintLanguage
|
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.SlintExport
|
import me.zhouxi.slint.lang.psi.SlintExport
|
||||||
|
import me.zhouxi.slint.lang.psi.SlintTypes.ComponentName
|
||||||
|
import me.zhouxi.slint.lang.psi.SlintTypes.Export
|
||||||
import me.zhouxi.slint.lang.psi.impl.SlintComponentImpl
|
import me.zhouxi.slint.lang.psi.impl.SlintComponentImpl
|
||||||
import me.zhouxi.slint.stubs.StubKeys
|
import me.zhouxi.slint.stubs.StubKeys
|
||||||
import me.zhouxi.slint.stubs.impl.SlintComponentStubImpl
|
import me.zhouxi.slint.stubs.impl.SlintComponentStubImpl
|
||||||
import me.zhouxi.slint.stubs.stub.SlintComponentStub
|
import me.zhouxi.slint.stubs.stub.SlintComponentStub
|
||||||
|
import org.mozilla.javascript.ast.AstNode
|
||||||
import java.io.IOException
|
import java.io.IOException
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @author zhouxi 2024/5/23
|
* @author zhouxi 2024/5/23
|
||||||
*/
|
*/
|
||||||
class SlintComponentStubType :
|
class SlintComponentStubType(debugName: String) :
|
||||||
IStubElementType<SlintComponentStub, SlintComponent>("SlintComponentStub", SlintLanguage.INSTANCE) {
|
ILightStubElementType<SlintComponentStub, SlintComponent>(debugName, SlintLanguage.INSTANCE) {
|
||||||
override fun createPsi(stub: SlintComponentStub): SlintComponent {
|
override fun createPsi(stub: SlintComponentStub): SlintComponent {
|
||||||
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,
|
||||||
@@ -47,7 +59,23 @@ class SlintComponentStubType :
|
|||||||
return SlintComponentStubImpl(parentStub, this, exported, identifier!!)
|
return SlintComponentStubImpl(parentStub, this, exported, identifier!!)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
override fun createStub(tree: LighterAST, node: LighterASTNode, parentStub: StubElement<*>): SlintComponentStub {
|
||||||
|
var exported = false
|
||||||
|
var parent = tree.getParent(node)
|
||||||
|
while (parent != null) {
|
||||||
|
if (parent.tokenType == Export) {
|
||||||
|
exported = true
|
||||||
|
break
|
||||||
|
}
|
||||||
|
parent = tree.getParent(parent)
|
||||||
|
}
|
||||||
|
val identifier = tree.getChildren(node).first { it.tokenType == ComponentName }
|
||||||
|
val token = tree.getChildren(identifier)[0] as LighterASTTokenNode
|
||||||
|
|
||||||
|
return SlintComponentStubImpl(parentStub, this, exported, tree.charTable.intern(token.text).toString())
|
||||||
|
}
|
||||||
|
|
||||||
override fun indexStub(stub: SlintComponentStub, sink: IndexSink) {
|
override fun indexStub(stub: SlintComponentStub, sink: IndexSink) {
|
||||||
sink.occurrence(StubKeys.COMPONENT, stub.identifier)
|
sink.occurrence(StubKeys.Component, stub.identifier)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,13 @@
|
|||||||
|
package me.zhouxi.slint.stubs.types
|
||||||
|
|
||||||
|
import com.intellij.psi.tree.ILightStubFileElementType
|
||||||
|
import me.zhouxi.slint.lang.SlintLanguage
|
||||||
|
import me.zhouxi.slint.stubs.impl.SlintFileStubImpl
|
||||||
|
|
||||||
|
object SlintFileElementType : ILightStubFileElementType<SlintFileStubImpl?>("SlintFile", SlintLanguage.INSTANCE) {
|
||||||
|
|
||||||
|
override fun getStubVersion(): Int {
|
||||||
|
return 1
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -49,6 +49,8 @@
|
|||||||
|
|
||||||
<stubElementTypeHolder class="me.zhouxi.slint.stubs.SlintStubTypes" externalIdPrefix="slint."/>
|
<stubElementTypeHolder class="me.zhouxi.slint.stubs.SlintStubTypes" externalIdPrefix="slint."/>
|
||||||
|
|
||||||
|
<stubIndex implementation="me.zhouxi.slint.stubs.index.ComponentNameIndex"/>
|
||||||
|
|
||||||
</extensions>
|
</extensions>
|
||||||
<actions>
|
<actions>
|
||||||
<action id="slint.preview" class="me.zhouxi.slint.preview.PreviewAction"
|
<action id="slint.preview" class="me.zhouxi.slint.preview.PreviewAction"
|
||||||
|
|||||||
Reference in New Issue
Block a user