diff --git a/plugins/yaml/backend/testData/org/jetbrains/yaml/editing/data/regressionIjpl64483.after.yml b/plugins/yaml/backend/testData/org/jetbrains/yaml/editing/data/regressionIjpl64483.after.yml new file mode 100644 index 000000000000..ab3f581d5beb --- /dev/null +++ b/plugins/yaml/backend/testData/org/jetbrains/yaml/editing/data/regressionIjpl64483.after.yml @@ -0,0 +1,5 @@ +dependencies: + override: + - sudo apt-get install -y nodejs + - sudo + diff --git a/plugins/yaml/backend/testData/org/jetbrains/yaml/editing/data/regressionIjpl64483.before.yml b/plugins/yaml/backend/testData/org/jetbrains/yaml/editing/data/regressionIjpl64483.before.yml new file mode 100644 index 000000000000..9a2d53d62c81 --- /dev/null +++ b/plugins/yaml/backend/testData/org/jetbrains/yaml/editing/data/regressionIjpl64483.before.yml @@ -0,0 +1,4 @@ +dependencies: + override: + - sudo apt-get install -y nodejs + - sudo diff --git a/plugins/yaml/backend/testSrc/editing/YAMLTypingTest.java b/plugins/yaml/backend/testSrc/editing/YAMLTypingTest.java index c663a6c508df..0e26ca5443e2 100644 --- a/plugins/yaml/backend/testSrc/editing/YAMLTypingTest.java +++ b/plugins/yaml/backend/testSrc/editing/YAMLTypingTest.java @@ -76,6 +76,10 @@ public class YAMLTypingTest extends BasePlatformTestCase { doTestForSettings("\n", false, false); } + public void testRegressionIjpl64483() { + doTestForSettings("\n\n", false, true); + } + public void testPreserveDedent() { doTest("\n"); } diff --git a/plugins/yaml/src/smart/YAMLEnterAtIndentHandler.java b/plugins/yaml/src/smart/YAMLEnterAtIndentHandler.java index b62a13b1dd30..0c59f7d6631e 100644 --- a/plugins/yaml/src/smart/YAMLEnterAtIndentHandler.java +++ b/plugins/yaml/src/smart/YAMLEnterAtIndentHandler.java @@ -8,6 +8,7 @@ import com.intellij.openapi.actionSystem.DataContext; import com.intellij.openapi.editor.Editor; import com.intellij.openapi.editor.actionSystem.EditorActionHandler; import com.intellij.openapi.util.Ref; +import com.intellij.psi.PsiDocumentManager; import com.intellij.psi.PsiElement; import com.intellij.psi.PsiFile; import com.intellij.psi.TokenType; @@ -43,7 +44,9 @@ public class YAMLEnterAtIndentHandler implements EnterHandlerDelegate { return Result.Continue; } - if (caretOffset.get() > 0) { + if (looksLikeSequenceMarkerWithTrailingSpace(editor.getDocument().getCharsSequence(), caretOffset.get())) { + PsiDocumentManager.getInstance(file.getProject()).commitDocument(editor.getDocument()); + PsiElement element = file.findElementAt(caretOffset.get() - 1); if (PsiUtilCore.getElementType(element) == TokenType.WHITE_SPACE && element.getTextLength() == 1 && @@ -143,4 +146,12 @@ public class YAMLEnterAtIndentHandler implements EnterHandlerDelegate { private static boolean shouldInsertAutomaticHyphen(@NotNull PsiFile file) { return CodeStyle.getCustomSettings(file, YAMLCodeStyleSettings.class).AUTOINSERT_SEQUENCE_MARKER; } + + private static boolean looksLikeSequenceMarkerWithTrailingSpace(@NotNull CharSequence chars, int caretOffset) { + if (caretOffset < 2 || chars.charAt(caretOffset - 1) != ' ' || chars.charAt(caretOffset - 2) != '-') { + return false; + } + int markerPrefixOffset = caretOffset - 3; + return markerPrefixOffset < 0 || Character.isWhitespace(chars.charAt(markerPrefixOffset)); + } }