From 70b05f23ca072142fc3fb193baadb2e8f3c41600 Mon Sep 17 00:00:00 2001 From: Akash Yadav Date: Fri, 31 Mar 2023 17:47:51 +0530 Subject: [PATCH] fix(editor): tab in symbol input does not shift snippet to next tab stop --- .../androidide/adapters/SymbolInputAdapter.java | 13 +++++++++++++ .../java/com/itsaky/androidide/utils/Symbols.kt | 12 ++---------- .../completion/SnippetCompletionProvider.kt | 3 ++- 3 files changed, 17 insertions(+), 11 deletions(-) diff --git a/app/src/main/java/com/itsaky/androidide/adapters/SymbolInputAdapter.java b/app/src/main/java/com/itsaky/androidide/adapters/SymbolInputAdapter.java index 0587c8e12..e51739268 100755 --- a/app/src/main/java/com/itsaky/androidide/adapters/SymbolInputAdapter.java +++ b/app/src/main/java/com/itsaky/androidide/adapters/SymbolInputAdapter.java @@ -17,6 +17,7 @@ */ package com.itsaky.androidide.adapters; +import static com.itsaky.androidide.preferences.utils.EditorUtilKt.getIndentationString; import static com.itsaky.androidide.utils.ResourceUtilsKt.resolveAttr; import android.annotation.SuppressLint; @@ -95,6 +96,18 @@ public class SymbolInputAdapter extends RecyclerView.Adapter text.length()) { return; } + + final var controller = editor.getSnippetController(); + if ("\t".equals(text) && controller.isInSnippet()) { + controller.shiftToNextTabStop(); + return; + } + + if ("\t".equals(text)) { + text = getIndentationString(); + selectionOffset = text.length(); + } + var cur = editor.getText().getCursor(); if (cur.isSelected()) { editor diff --git a/app/src/main/java/com/itsaky/androidide/utils/Symbols.kt b/app/src/main/java/com/itsaky/androidide/utils/Symbols.kt index b29836cec..485a2ba84 100755 --- a/app/src/main/java/com/itsaky/androidide/utils/Symbols.kt +++ b/app/src/main/java/com/itsaky/androidide/utils/Symbols.kt @@ -17,9 +17,6 @@ */ package com.itsaky.androidide.utils -import com.itsaky.androidide.preferences.internal.tabSize -import com.itsaky.androidide.preferences.internal.useSoftTab -import com.itsaky.androidide.preferences.utils.indentationString import com.itsaky.androidide.ui.SymbolInputView.Symbol import java.io.File @@ -124,17 +121,12 @@ object Symbols { } private class TabSymbol : Symbol("↹") { - override fun getCommit(): String { - return createTabChars() + return "\t" } override fun getOffset(): Int { - return createTabChars().length - } - - private fun createTabChars(): String { - return indentationString + return 1 } } } diff --git a/lsp/java/src/main/java/com/itsaky/androidide/lsp/java/providers/completion/SnippetCompletionProvider.kt b/lsp/java/src/main/java/com/itsaky/androidide/lsp/java/providers/completion/SnippetCompletionProvider.kt index 33b63bf1b..9e4a263db 100644 --- a/lsp/java/src/main/java/com/itsaky/androidide/lsp/java/providers/completion/SnippetCompletionProvider.kt +++ b/lsp/java/src/main/java/com/itsaky/androidide/lsp/java/providers/completion/SnippetCompletionProvider.kt @@ -27,6 +27,7 @@ import com.itsaky.androidide.lsp.java.utils.EditHelper import com.itsaky.androidide.lsp.models.CompletionItem import com.itsaky.androidide.lsp.models.CompletionResult import com.itsaky.androidide.lsp.models.MatchLevel +import com.itsaky.androidide.preferences.internal.tabSize import java.nio.file.Path import openjdk.source.tree.ClassTree import openjdk.source.tree.CompilationUnitTree @@ -88,7 +89,7 @@ class SnippetCompletionProvider( JavaSnippetRepository.snippets[JavaSnippetScope.GLOBAL]?.let { addAll(it) } } - val indent = EditHelper.indent(task.task, task.root(), path.leaf) + val indent = EditHelper.indent(task.task, task.root(), path.leaf) - tabSize for (snippet in snippets) { val matchLevel = matchLevel(snippet.prefix, partial) if (matchLevel == MatchLevel.NO_MATCH) {