From deb61e3519d652fab7eda077722f2236038c591e Mon Sep 17 00:00:00 2001 From: xonix Date: Mon, 1 Jul 2024 15:42:14 +0300 Subject: [PATCH] Incorrect auto-insertion of `}` on Enter #216 --- .../AwkEnterAfterUnmatchedBraceHandler.java | 21 +++++++++++++++++++ src/main/resources/META-INF/plugin.xml | 3 +++ .../AwkBracesAndQuoteAutoCloseTests.java | 3 +++ 3 files changed, 27 insertions(+) create mode 100644 src/main/java/intellij_awk/AwkEnterAfterUnmatchedBraceHandler.java diff --git a/src/main/java/intellij_awk/AwkEnterAfterUnmatchedBraceHandler.java b/src/main/java/intellij_awk/AwkEnterAfterUnmatchedBraceHandler.java new file mode 100644 index 0000000..1f82ce8 --- /dev/null +++ b/src/main/java/intellij_awk/AwkEnterAfterUnmatchedBraceHandler.java @@ -0,0 +1,21 @@ +package intellij_awk; + +import com.intellij.codeInsight.editorActions.enter.EnterAfterUnmatchedBraceHandler; +import com.intellij.openapi.util.Pair; +import com.intellij.psi.*; +import com.intellij.util.text.CharArrayUtil; +import intellij_awk.psi.AwkFile; +import org.jetbrains.annotations.NotNull; + +public class AwkEnterAfterUnmatchedBraceHandler extends EnterAfterUnmatchedBraceHandler { + @Override + public boolean isApplicable(@NotNull PsiFile file, int caretOffset) { + return file instanceof AwkFile; + } + + @Override + protected Pair calculateOffsetToInsertClosingBrace( + @NotNull PsiFile file, @NotNull CharSequence text, int offset) { + return Pair.create(null, CharArrayUtil.shiftForwardUntil(text, offset, "\n")); + } +} diff --git a/src/main/resources/META-INF/plugin.xml b/src/main/resources/META-INF/plugin.xml index 89699c3..617ef53 100644 --- a/src/main/resources/META-INF/plugin.xml +++ b/src/main/resources/META-INF/plugin.xml @@ -108,6 +108,9 @@ + + + diff --git a/src/test/java/intellij_awk/AwkBracesAndQuoteAutoCloseTests.java b/src/test/java/intellij_awk/AwkBracesAndQuoteAutoCloseTests.java index 1caaf4d..3408d60 100644 --- a/src/test/java/intellij_awk/AwkBracesAndQuoteAutoCloseTests.java +++ b/src/test/java/intellij_awk/AwkBracesAndQuoteAutoCloseTests.java @@ -109,6 +109,9 @@ public void testEnterCurlyBrace6() { public void testEnterCurlyBrace7() { doTest('\n', "NF {print 123", "NF {\n print 123\n}"); } + public void testEnterCurlyBrace8() { + doTest('\n', "function f()\n{print 123", "function f()\n{\n print 123\n}"); + } private void doTest(char brace, String code, String expectedCode) { myFixture.configureByText("a.awk", code);