From ada52875ad705f99a4de1f2e5a6ee198c1fafea0 Mon Sep 17 00:00:00 2001 From: me Date: Fri, 31 May 2024 16:31:26 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E8=AF=AD=E6=B3=95=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../zhouxi/slint/lang/SlintElementType.java | 2 +- .../slint/lang/psi/SlintParserUtil.java | 12 ++++++ .../slint/lang/psi/SlintPsiKeyword.java | 37 +++++++++++++++++++ .../keyword/SlintPsiKeywordIdentifier.java | 6 --- .../SlintPsiKeywordIdentifierImpl.java | 17 --------- .../zhouxi/slint/formatter/FormattingBlock.kt | 26 ++++++++----- .../formatter/SlintFormatterModelBuilder.kt | 3 +- .../zhouxi/slint/formatter/SyntheticBlock.kt | 4 +- .../highlight/KeywordHighlightAnnotator.kt | 4 +- src/main/resources/META-INF/plugin.xml | 3 +- 10 files changed, 73 insertions(+), 41 deletions(-) create mode 100644 src/main/java/me/zhouxi/slint/lang/psi/SlintParserUtil.java create mode 100644 src/main/java/me/zhouxi/slint/lang/psi/SlintPsiKeyword.java delete mode 100644 src/main/java/me/zhouxi/slint/lang/psi/keyword/SlintPsiKeywordIdentifier.java delete mode 100644 src/main/java/me/zhouxi/slint/lang/psi/keyword/SlintPsiKeywordIdentifierImpl.java 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 -