diff --git a/src/main/java/me/zhouxi/slint/lang/SlintElementType.java b/src/main/java/me/zhouxi/slint/lang/SlintElementType.java
index ab84f59..ea4474e 100644
--- a/src/main/java/me/zhouxi/slint/lang/SlintElementType.java
+++ b/src/main/java/me/zhouxi/slint/lang/SlintElementType.java
@@ -4,7 +4,7 @@ import com.intellij.psi.tree.IElementType;
import org.jetbrains.annotations.NonNls;
import org.jetbrains.annotations.NotNull;
-public final class SlintElementType extends IElementType {
+public class SlintElementType extends IElementType {
public SlintElementType(@NonNls @NotNull String rawKind) {
diff --git a/src/main/java/me/zhouxi/slint/lang/psi/SlintParserUtil.java b/src/main/java/me/zhouxi/slint/lang/psi/SlintParserUtil.java
new file mode 100644
index 0000000..9282756
--- /dev/null
+++ b/src/main/java/me/zhouxi/slint/lang/psi/SlintParserUtil.java
@@ -0,0 +1,12 @@
+package me.zhouxi.slint.lang.psi;
+
+import com.intellij.lang.PsiBuilder;
+import com.intellij.lang.parser.GeneratedParserUtilBase;
+import com.intellij.psi.tree.IElementType;
+
+/**
+ * @author zhouxi 2024/5/30
+ */
+public class SlintParserUtil extends GeneratedParserUtilBase {
+
+}
diff --git a/src/main/java/me/zhouxi/slint/lang/psi/SlintPsiKeyword.java b/src/main/java/me/zhouxi/slint/lang/psi/SlintPsiKeyword.java
new file mode 100644
index 0000000..6aeb7bd
--- /dev/null
+++ b/src/main/java/me/zhouxi/slint/lang/psi/SlintPsiKeyword.java
@@ -0,0 +1,37 @@
+package me.zhouxi.slint.lang.psi;
+
+import com.intellij.lang.ASTNode;
+import me.zhouxi.slint.lang.SlintElementType;
+import me.zhouxi.slint.lang.psi.impl.SlintPsiElementImpl;
+import org.jetbrains.annotations.NotNull;
+
+public interface SlintPsiKeyword extends SlintPsiElement {
+
+
+ abstract class Impl extends SlintPsiElementImpl implements SlintPsiKeyword {
+
+ public Impl(@NotNull ASTNode node) {
+ super(node);
+ }
+
+ @Override
+ public String toString() {
+ return "SlintKeyword:" + getText();
+ }
+
+ }
+
+ static ElementType type(String debugName) {
+ return ElementType.TYPE;
+ }
+
+
+ class ElementType extends SlintElementType {
+
+ public static final ElementType TYPE = new ElementType("SlintKeyword");
+
+ private ElementType(@NotNull String debugName) {
+ super(debugName);
+ }
+ }
+}
diff --git a/src/main/java/me/zhouxi/slint/lang/psi/keyword/SlintPsiKeywordIdentifier.java b/src/main/java/me/zhouxi/slint/lang/psi/keyword/SlintPsiKeywordIdentifier.java
deleted file mode 100644
index 113ff69..0000000
--- a/src/main/java/me/zhouxi/slint/lang/psi/keyword/SlintPsiKeywordIdentifier.java
+++ /dev/null
@@ -1,6 +0,0 @@
-package me.zhouxi.slint.lang.psi.keyword;
-
-import me.zhouxi.slint.lang.psi.SlintPsiElement;
-
-public interface SlintPsiKeywordIdentifier extends SlintPsiElement {
-}
diff --git a/src/main/java/me/zhouxi/slint/lang/psi/keyword/SlintPsiKeywordIdentifierImpl.java b/src/main/java/me/zhouxi/slint/lang/psi/keyword/SlintPsiKeywordIdentifierImpl.java
deleted file mode 100644
index ea47646..0000000
--- a/src/main/java/me/zhouxi/slint/lang/psi/keyword/SlintPsiKeywordIdentifierImpl.java
+++ /dev/null
@@ -1,17 +0,0 @@
-package me.zhouxi.slint.lang.psi.keyword;
-
-import com.intellij.lang.ASTNode;
-import me.zhouxi.slint.lang.psi.impl.SlintPsiElementImpl;
-import org.jetbrains.annotations.NotNull;
-
-public abstract class SlintPsiKeywordIdentifierImpl extends SlintPsiElementImpl implements SlintPsiKeywordIdentifier {
-
- public SlintPsiKeywordIdentifierImpl(@NotNull ASTNode node) {
- super(node);
- }
-
- @Override
- public String toString() {
- return "SlintKeyword:" + getText();
- }
-}
diff --git a/src/main/kotlin/me/zhouxi/slint/formatter/FormattingBlock.kt b/src/main/kotlin/me/zhouxi/slint/formatter/FormattingBlock.kt
index ea22d4e..8be189e 100644
--- a/src/main/kotlin/me/zhouxi/slint/formatter/FormattingBlock.kt
+++ b/src/main/kotlin/me/zhouxi/slint/formatter/FormattingBlock.kt
@@ -5,6 +5,7 @@ import com.intellij.lang.ASTNode
import com.intellij.psi.TokenType
import com.intellij.psi.formatter.common.AbstractBlock
import com.intellij.psi.tree.TokenSet
+import me.zhouxi.slint.lang.psi.SlintPsiKeyword
import me.zhouxi.slint.lang.psi.SlintTypes
import me.zhouxi.slint.lang.psi.SlintTypes.*
import me.zhouxi.slint.lang.psi.utils.braces
@@ -27,7 +28,7 @@ class FormattingBlock(
var current = childBlocks
var myIndent: Indent? = indent
for (child in node.getChildren(null)) {
- if (braces.contains(child.elementType) && (node.elementType == SubComponent || node.elementType == Component)) {
+ if (braces.contains(child.elementType) && syntheticParentTokens.contains(node.elementType)) {
current = syntheticBlocks
myIndent = Indent.getNormalIndent()
}
@@ -65,15 +66,20 @@ class FormattingBlock(
companion object {
val leafTokens =
- TokenSet.orSet(
- TokenSet.create(
- ReferenceIdentifier,
- ComponentName,
- InternalName,
- LocalVariable,
- PropertyName
- ),
- keywords
+ TokenSet.create(
+ ReferenceIdentifier,
+ ComponentName,
+ InternalName,
+ LocalVariable,
+ PropertyName,
+ PropertyModifier,
+ SlintPsiKeyword.ElementType.TYPE
)
}
+
+ private val syntheticParentTokens = TokenSet.create(
+ SubComponent,
+ Component,
+ GlobalSingleton
+ )
}
diff --git a/src/main/kotlin/me/zhouxi/slint/formatter/SlintFormatterModelBuilder.kt b/src/main/kotlin/me/zhouxi/slint/formatter/SlintFormatterModelBuilder.kt
index 93ac637..f0db79a 100644
--- a/src/main/kotlin/me/zhouxi/slint/formatter/SlintFormatterModelBuilder.kt
+++ b/src/main/kotlin/me/zhouxi/slint/formatter/SlintFormatterModelBuilder.kt
@@ -37,7 +37,6 @@ class SlintFormatterModelBuilder : FormattingModelBuilder {
}
companion object {
-
private fun createSpaceBuilder(settings: CodeStyleSettings): SpacingBuilder {
return SpacingBuilder(settings, SlintLanguage.INSTANCE)
.after(Comma)
@@ -56,6 +55,8 @@ class SlintFormatterModelBuilder : FormattingModelBuilder {
.spacing(1, 1, 0, true, 2)
.around(keywords)
.spaces(1)
+ .after(RAngle)
+ .spaces(1)
}
}
}
diff --git a/src/main/kotlin/me/zhouxi/slint/formatter/SyntheticBlock.kt b/src/main/kotlin/me/zhouxi/slint/formatter/SyntheticBlock.kt
index 3244017..716bbe5 100644
--- a/src/main/kotlin/me/zhouxi/slint/formatter/SyntheticBlock.kt
+++ b/src/main/kotlin/me/zhouxi/slint/formatter/SyntheticBlock.kt
@@ -33,9 +33,7 @@ class SyntheticBlock(
override fun getAlignment() = alignment
override fun getSpacing(child1: Block?, child2: Block): Spacing? {
- if (child2 is ASTBlock && child2.node!!.elementType == SlintTypes.Semicolon) {
- return Spacing.createSpacing(1, 1, 0, true, 2)
- }
+ //如果是连续的{}
if (child1 is ASTBlock && child2 is ASTBlock
&& child1.node!!.elementType == LBrace && child2.node!!.elementType == RBrace
) {
diff --git a/src/main/kotlin/me/zhouxi/slint/highlight/KeywordHighlightAnnotator.kt b/src/main/kotlin/me/zhouxi/slint/highlight/KeywordHighlightAnnotator.kt
index ddedb07..40627af 100644
--- a/src/main/kotlin/me/zhouxi/slint/highlight/KeywordHighlightAnnotator.kt
+++ b/src/main/kotlin/me/zhouxi/slint/highlight/KeywordHighlightAnnotator.kt
@@ -6,7 +6,7 @@ import com.intellij.lang.annotation.HighlightSeverity
import com.intellij.openapi.editor.DefaultLanguageHighlighterColors
import com.intellij.psi.PsiElement
import me.zhouxi.slint.lang.psi.*
-import me.zhouxi.slint.lang.psi.keyword.SlintPsiKeywordIdentifier
+import me.zhouxi.slint.lang.psi.SlintPsiKeyword
class KeywordHighlightAnnotator : Annotator {
override fun annotate(element: PsiElement, holder: AnnotationHolder) {
@@ -17,7 +17,7 @@ class KeywordHighlightAnnotator : Annotator {
.create()
return
}
- if (element is SlintPsiKeywordIdentifier) {
+ if (element is SlintPsiKeyword) {
holder.newSilentAnnotation(HighlightSeverity.INFORMATION)
.range(element)
.textAttributes(Definitions._KeyWord)
diff --git a/src/main/resources/META-INF/plugin.xml b/src/main/resources/META-INF/plugin.xml
index c0d34cd..1c5f97a 100644
--- a/src/main/resources/META-INF/plugin.xml
+++ b/src/main/resources/META-INF/plugin.xml
@@ -11,7 +11,8 @@
com.intellij.modules.platform
-