diff --git a/app/src/main/java/com/itsaky/androidide/utils/ClassBuilder.kt b/app/src/main/java/com/itsaky/androidide/utils/ClassBuilder.kt index 571d0b928..6e8496561 100644 --- a/app/src/main/java/com/itsaky/androidide/utils/ClassBuilder.kt +++ b/app/src/main/java/com/itsaky/androidide/utils/ClassBuilder.kt @@ -20,6 +20,7 @@ package com.itsaky.androidide.utils import android.os.Bundle import androidx.appcompat.app.AppCompatActivity import com.itsaky.androidide.preferences.internal.tabSize +import com.itsaky.androidide.preferences.utils.indentationString import com.squareup.javapoet.JavaFile import com.squareup.javapoet.MethodSpec import com.squareup.javapoet.TypeSpec @@ -38,7 +39,7 @@ object ClassBuilder { block: JavaFile.Builder.() -> Unit = {} ): JavaFile { return JavaFile.builder(packageName, type) - .indent(" ".repeat(tabSize)) + .indent(indentationString) .apply { block(this) } .build() } 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 c2b8d440a..b29836cec 100755 --- a/app/src/main/java/com/itsaky/androidide/utils/Symbols.kt +++ b/app/src/main/java/com/itsaky/androidide/utils/Symbols.kt @@ -19,6 +19,7 @@ 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 @@ -133,11 +134,7 @@ object Symbols { } private fun createTabChars(): String { - if (!useSoftTab) { - return "\t" - } - - return " ".repeat(tabSize) + return indentationString } } } diff --git a/lsp/java/src/main/java/com/itsaky/androidide/lsp/java/actions/generators/GenerateConstructorAction.kt b/lsp/java/src/main/java/com/itsaky/androidide/lsp/java/actions/generators/GenerateConstructorAction.kt index 0b07ad8dd..523f542e4 100644 --- a/lsp/java/src/main/java/com/itsaky/androidide/lsp/java/actions/generators/GenerateConstructorAction.kt +++ b/lsp/java/src/main/java/com/itsaky/androidide/lsp/java/actions/generators/GenerateConstructorAction.kt @@ -30,6 +30,7 @@ import com.itsaky.androidide.lsp.java.actions.FieldBasedAction import com.itsaky.androidide.lsp.java.compiler.CompileTask import com.itsaky.androidide.lsp.java.utils.EditHelper import com.itsaky.androidide.lsp.java.utils.ShortTypePrinter.NO_PACKAGE +import com.itsaky.androidide.preferences.utils.indentationString import com.itsaky.androidide.projects.ProjectManager import com.itsaky.androidide.resources.R.string import com.itsaky.androidide.utils.ILogger @@ -123,7 +124,7 @@ class GenerateConstructorAction : FieldBasedAction() { val insertAt = EditHelper.insertAfter(task.task, task.root(), paths.last().leaf) val indent = EditHelper.indent(task.task, task.root(), paths.last().leaf) var text = constructor.toString() - text = text.replace("\n", "\n${EditHelper.repeatSpaces(indent)}") + text = text.replace("\n", "\n${indentationString(indent)}") text += "\n" ThreadUtils.runOnUiThread { diff --git a/lsp/java/src/main/java/com/itsaky/androidide/lsp/java/actions/generators/GenerateSettersAndGettersAction.kt b/lsp/java/src/main/java/com/itsaky/androidide/lsp/java/actions/generators/GenerateSettersAndGettersAction.kt index 19f467410..938b273dc 100644 --- a/lsp/java/src/main/java/com/itsaky/androidide/lsp/java/actions/generators/GenerateSettersAndGettersAction.kt +++ b/lsp/java/src/main/java/com/itsaky/androidide/lsp/java/actions/generators/GenerateSettersAndGettersAction.kt @@ -35,17 +35,18 @@ import com.itsaky.androidide.lsp.java.utils.EditHelper import com.itsaky.androidide.lsp.java.utils.JavaParserUtils import com.itsaky.androidide.lsp.java.utils.TypeUtils.toType import com.itsaky.androidide.preferences.internal.tabSize +import com.itsaky.androidide.preferences.utils.indentationString import com.itsaky.androidide.projects.ProjectManager import com.itsaky.androidide.resources.R import com.itsaky.androidide.utils.ILogger import com.itsaky.androidide.utils.flashError +import io.github.rosemoe.sora.widget.CodeEditor +import jdkx.lang.model.element.Modifier.FINAL +import jdkx.lang.model.element.VariableElement import openjdk.source.tree.ClassTree import openjdk.source.util.TreePath import openjdk.source.util.Trees -import io.github.rosemoe.sora.widget.CodeEditor import java.util.concurrent.CompletableFuture -import jdkx.lang.model.element.Modifier.FINAL -import jdkx.lang.model.element.VariableElement /** * Allows the user to select fields from the current class, then generates setters and getters for @@ -138,7 +139,7 @@ class GenerateSettersAndGettersAction : FieldBasedAction() { body.addStatement(createReturnStmt(name)) } var text = "\n" + JavaParserUtils.prettyPrint(method) { false } - text = text.replace("\n", "\n${EditHelper.repeatSpaces(indent)}") + text = text.replace("\n", "\n${indentationString(indent)}") return text } @@ -154,7 +155,7 @@ class GenerateSettersAndGettersAction : FieldBasedAction() { } var text = "\n" + JavaParserUtils.prettyPrint(method) { false } - text = text.replace("\n", "\n${EditHelper.repeatSpaces(indent)}") + text = text.replace("\n", "\n${indentationString(indent)}") return text } diff --git a/lsp/java/src/main/java/com/itsaky/androidide/lsp/java/actions/generators/GenerateToStringMethodAction.kt b/lsp/java/src/main/java/com/itsaky/androidide/lsp/java/actions/generators/GenerateToStringMethodAction.kt index bd29573ce..5009e6b1f 100644 --- a/lsp/java/src/main/java/com/itsaky/androidide/lsp/java/actions/generators/GenerateToStringMethodAction.kt +++ b/lsp/java/src/main/java/com/itsaky/androidide/lsp/java/actions/generators/GenerateToStringMethodAction.kt @@ -30,11 +30,15 @@ import com.itsaky.androidide.lsp.java.actions.FieldBasedAction import com.itsaky.androidide.lsp.java.compiler.CompileTask import com.itsaky.androidide.lsp.java.utils.EditHelper import com.itsaky.androidide.preferences.internal.tabSize +import com.itsaky.androidide.preferences.utils.indentationString import com.itsaky.androidide.projects.ProjectManager import com.itsaky.androidide.resources.R import com.itsaky.androidide.resources.R.string import com.itsaky.androidide.utils.ILogger import com.itsaky.androidide.utils.flashError +import io.github.rosemoe.sora.widget.CodeEditor +import java.util.concurrent.CompletableFuture +import jdkx.lang.model.element.VariableElement import openjdk.source.tree.ClassTree import openjdk.source.tree.VariableTree import openjdk.source.util.TreePath @@ -44,9 +48,6 @@ import openjdk.tools.javac.code.Symbol.MethodSymbol import openjdk.tools.javac.tree.JCTree import openjdk.tools.javac.tree.TreeInfo import openjdk.tools.javac.util.Names -import io.github.rosemoe.sora.widget.CodeEditor -import java.util.concurrent.CompletableFuture -import jdkx.lang.model.element.VariableElement /** * Generates the `toString()` method for the current class. @@ -149,7 +150,7 @@ class GenerateToStringMethodAction : FieldBasedAction() { body.addStatement(createReturnStatement(string.toString())) var text = "\n" + method.toString() - text = text.replace("\n", "\n${EditHelper.repeatSpaces(indent)}") + text = text.replace("\n", "\n${indentationString(indent)}") text += "\n" ThreadUtils.runOnUiThread { diff --git a/lsp/java/src/main/java/com/itsaky/androidide/lsp/java/actions/generators/OverrideSuperclassMethodsAction.kt b/lsp/java/src/main/java/com/itsaky/androidide/lsp/java/actions/generators/OverrideSuperclassMethodsAction.kt index 1094c854e..00819fb69 100644 --- a/lsp/java/src/main/java/com/itsaky/androidide/lsp/java/actions/generators/OverrideSuperclassMethodsAction.kt +++ b/lsp/java/src/main/java/com/itsaky/androidide/lsp/java/actions/generators/OverrideSuperclassMethodsAction.kt @@ -36,14 +36,12 @@ import com.itsaky.androidide.lsp.java.utils.JavaParserUtils import com.itsaky.androidide.lsp.java.utils.MethodPtr import com.itsaky.androidide.lsp.java.visitors.FindTypeDeclarationAt import com.itsaky.androidide.preferences.internal.tabSize +import com.itsaky.androidide.preferences.utils.indentationString import com.itsaky.androidide.projects.ProjectManager import com.itsaky.androidide.resources.R import com.itsaky.androidide.utils.ILogger import com.itsaky.androidide.utils.flashError import io.github.rosemoe.sora.widget.CodeEditor -import java.util.Arrays -import java.util.Optional -import java.util.concurrent.CompletableFuture import jdkx.lang.model.element.ElementKind import jdkx.lang.model.element.ExecutableElement import jdkx.lang.model.element.Modifier @@ -53,6 +51,9 @@ import jdkx.lang.model.type.ExecutableType import jdkx.tools.JavaFileObject import openjdk.source.tree.MethodTree import openjdk.source.util.Trees +import java.util.Arrays +import java.util.Optional +import java.util.concurrent.CompletableFuture /** * Allows the user to override multiple methods from superclass at once. @@ -231,7 +232,7 @@ class OverrideSuperclassMethodsAction : BaseJavaCodeAction() { val newImports = JavaParserUtils.collectImports(executableType) sb.append("\n") sb.append(method.toString()) - sb.replace(Regex(Regex.escape("\n")), "\n${EditHelper.repeatSpaces(indent)}") + sb.replace(Regex(Regex.escape("\n")), "\n${indentationString(indent)}") sb.append("\n") newImports.removeIf { diff --git a/lsp/java/src/main/java/com/itsaky/androidide/lsp/java/providers/completion/ScopeCompletionProvider.kt b/lsp/java/src/main/java/com/itsaky/androidide/lsp/java/providers/completion/ScopeCompletionProvider.kt index d28698d78..16e0be6c3 100644 --- a/lsp/java/src/main/java/com/itsaky/androidide/lsp/java/providers/completion/ScopeCompletionProvider.kt +++ b/lsp/java/src/main/java/com/itsaky/androidide/lsp/java/providers/completion/ScopeCompletionProvider.kt @@ -23,8 +23,6 @@ import com.itsaky.androidide.lsp.java.compiler.CompileTask import com.itsaky.androidide.lsp.java.compiler.JavaCompilerService import com.itsaky.androidide.lsp.java.edits.MultipleClassImportEditHandler import com.itsaky.androidide.lsp.java.models.JavaCompletionItem -import com.itsaky.androidide.lsp.java.utils.EditHelper -import com.itsaky.androidide.lsp.java.utils.EditHelper.repeatSpaces import com.itsaky.androidide.lsp.java.utils.JavaPoetUtils.Companion.buildMethod import com.itsaky.androidide.lsp.java.utils.JavaPoetUtils.Companion.print import com.itsaky.androidide.lsp.java.utils.ScopeHelper @@ -34,10 +32,7 @@ import com.itsaky.androidide.lsp.models.InsertTextFormat.SNIPPET import com.itsaky.androidide.lsp.models.MatchLevel import com.itsaky.androidide.lsp.models.MatchLevel.NO_MATCH import com.itsaky.androidide.progress.ProgressManager.Companion.abortIfCancelled -import com.itsaky.androidide.projects.FileManager import com.squareup.javapoet.MethodSpec.Builder -import java.nio.file.Path -import java.util.function.Predicate import jdkx.lang.model.element.ElementKind.METHOD import jdkx.lang.model.element.ExecutableElement import jdkx.lang.model.element.Modifier.FINAL @@ -48,6 +43,8 @@ import openjdk.source.tree.ClassTree import openjdk.source.tree.Tree.Kind.CLASS import openjdk.source.util.TreePath import openjdk.source.util.Trees +import java.nio.file.Path +import java.util.function.Predicate /** * Provides completions using [openjdk.source.tree.Scope]. @@ -156,7 +153,6 @@ class ScopeCompletionProvider( // Print the method details and the annotations // Print the method details and the annotations - val indent = EditHelper.indent(FileManager.getDocumentContents(file), cursor.toInt()) val builder: Builder try { builder = buildMethod(method, types, type) diff --git a/lsp/java/src/main/java/com/itsaky/androidide/lsp/java/rewrite/AddSuppressWarningAnnotation.java b/lsp/java/src/main/java/com/itsaky/androidide/lsp/java/rewrite/AddSuppressWarningAnnotation.java index 4a10be898..55811e4e8 100644 --- a/lsp/java/src/main/java/com/itsaky/androidide/lsp/java/rewrite/AddSuppressWarningAnnotation.java +++ b/lsp/java/src/main/java/com/itsaky/androidide/lsp/java/rewrite/AddSuppressWarningAnnotation.java @@ -26,6 +26,7 @@ import com.itsaky.androidide.lsp.java.utils.FindHelper; import com.itsaky.androidide.models.Position; import com.itsaky.androidide.models.Range; import com.itsaky.androidide.lsp.models.TextEdit; +import com.itsaky.androidide.preferences.utils.EditorUtilKt; import openjdk.source.tree.LineMap; import openjdk.source.tree.MethodTree; import openjdk.source.util.SourcePositions; @@ -67,7 +68,7 @@ public class AddSuppressWarningAnnotation extends Rewrite { int line = (int) lines.getLineNumber(startMethod); int column = (int) lines.getColumnNumber(startMethod); int startLine = (int) lines.getStartPosition(line); - String indent = EditHelper.repeatSpaces(startMethod - startLine); + String indent = EditorUtilKt.indentationString(startMethod - startLine); String insertText = "@SuppressWarnings(\"unchecked\")\n" + indent; Position insertPoint = new Position(line - 1, column - 1); TextEdit insert = new TextEdit(new Range(insertPoint, insertPoint), insertText); diff --git a/lsp/java/src/main/java/com/itsaky/androidide/lsp/java/rewrite/CreateMissingMethod.java b/lsp/java/src/main/java/com/itsaky/androidide/lsp/java/rewrite/CreateMissingMethod.java index 405c97a44..5ab5de2a9 100644 --- a/lsp/java/src/main/java/com/itsaky/androidide/lsp/java/rewrite/CreateMissingMethod.java +++ b/lsp/java/src/main/java/com/itsaky/androidide/lsp/java/rewrite/CreateMissingMethod.java @@ -20,7 +20,6 @@ package com.itsaky.androidide.lsp.java.rewrite; import static com.itsaky.androidide.lsp.java.utils.EditHelper.indent; import static com.itsaky.androidide.lsp.java.utils.EditHelper.insertAfter; import static com.itsaky.androidide.lsp.java.utils.EditHelper.insertAtEndOfClass; -import static com.itsaky.androidide.lsp.java.utils.EditHelper.repeatSpaces; import androidx.annotation.NonNull; import com.itsaky.androidide.lsp.java.compiler.CompileTask; @@ -32,6 +31,7 @@ import com.itsaky.androidide.lsp.models.TextEdit; import com.itsaky.androidide.models.Position; import com.itsaky.androidide.models.Range; import com.itsaky.androidide.preferences.internal.EditorPreferencesKt; +import com.itsaky.androidide.preferences.utils.EditorUtilKt; import com.itsaky.androidide.utils.ILogger; import java.nio.file.Path; import java.nio.file.Paths; @@ -84,8 +84,7 @@ public class CreateMissingMethod extends Rewrite { MethodTree currentMethod = surroundingMethod(path); final var insertTextBuilder = new StringBuilder("\n"); - final var tabWidth = EditorPreferencesKt.getTabSize(); - final var tab = repeatSpaces(tabWidth); + final var indent = EditorUtilKt.getIndentationString(); final var isStatic = currentMethod.getModifiers().getFlags().contains(Modifier.STATIC) || methodFinder.isStaticAccess(); @@ -93,10 +92,10 @@ public class CreateMissingMethod extends Rewrite { insertTextBuilder.append( printMethodHeader(task, call, returnType, methodFinder.isMemberSelect(), isStatic)) .append(" {\n") - .append(tab) + .append(indent) .append(TODO_COMMENT) .append("\n") - .append(tab) + .append(indent) .append(createReturnStatement(returnType)) .append("\n") .append("}"); @@ -119,11 +118,13 @@ public class CreateMissingMethod extends Rewrite { insertPoint = insertAfter(task.task, compilationUnit, surroundingMethod(path)); } - final int indent = indent(task.task, compilationUnit, enclosingClass) + tabWidth; - insertText = insertText.replaceAll("\n", "\n" + repeatSpaces(indent)); + final int indentSpaces = + indent(task.task, compilationUnit, enclosingClass) + EditorPreferencesKt.getTabSize(); + insertText = insertText.replaceAll("\n", "\n" + EditorUtilKt.indentationString(indentSpaces)); insertText += "\n"; - final var edits = new TextEdit[]{new TextEdit(new Range(insertPoint, insertPoint), insertText)}; + final var edits = new TextEdit[]{ + new TextEdit(new Range(insertPoint, insertPoint), insertText)}; return Collections.singletonMap(sourceFile, edits); }); } diff --git a/lsp/java/src/main/java/com/itsaky/androidide/lsp/java/rewrite/GenerateRecordConstructor.java b/lsp/java/src/main/java/com/itsaky/androidide/lsp/java/rewrite/GenerateRecordConstructor.java index b0e6ba36b..690c6e436 100644 --- a/lsp/java/src/main/java/com/itsaky/androidide/lsp/java/rewrite/GenerateRecordConstructor.java +++ b/lsp/java/src/main/java/com/itsaky/androidide/lsp/java/rewrite/GenerateRecordConstructor.java @@ -20,6 +20,7 @@ package com.itsaky.androidide.lsp.java.rewrite; import androidx.annotation.NonNull; import com.itsaky.androidide.preferences.internal.EditorPreferencesKt; +import com.itsaky.androidide.preferences.utils.EditorUtilKt; import com.itsaky.androidide.utils.ILogger; import com.itsaky.androidide.lsp.java.compiler.CompileTask; import com.itsaky.androidide.lsp.java.compiler.CompilerProvider; @@ -89,7 +90,7 @@ public class GenerateRecordConstructor extends Rewrite { .append("\n}"); String string = buf.toString(); int indent = EditHelper.indent(task.task, task.root(), typeTree) + EditorPreferencesKt.getTabSize(); - string = string.replaceAll("\n", "\n" + EditHelper.repeatSpaces(indent)); + string = string.replaceAll("\n", "\n" + EditorUtilKt.indentationString(indent)); string = string + "\n\n"; Position insert = insertPoint(task, typeTree); TextEdit[] edits = {new TextEdit(new Range(insert, insert), string)}; diff --git a/lsp/java/src/main/java/com/itsaky/androidide/lsp/java/rewrite/ImplementAbstractMethods.java b/lsp/java/src/main/java/com/itsaky/androidide/lsp/java/rewrite/ImplementAbstractMethods.java index bb1310055..69afb80bf 100644 --- a/lsp/java/src/main/java/com/itsaky/androidide/lsp/java/rewrite/ImplementAbstractMethods.java +++ b/lsp/java/src/main/java/com/itsaky/androidide/lsp/java/rewrite/ImplementAbstractMethods.java @@ -20,6 +20,7 @@ import androidx.annotation.NonNull; import androidx.annotation.Nullable; import com.itsaky.androidide.preferences.internal.EditorPreferencesKt; +import com.itsaky.androidide.preferences.utils.EditorUtilKt; import com.itsaky.androidide.utils.ILogger; import com.itsaky.androidide.lsp.java.compiler.CompileTask; import com.itsaky.androidide.lsp.java.compiler.CompilerProvider; @@ -112,7 +113,7 @@ public class ImplementAbstractMethods extends Rewrite { ExecutableElement method = (ExecutableElement) member; final MethodSpec methodSpec = MethodSpec.overriding(method).build(); String text = "\n" + JavaPoetUtils.print(methodSpec, imports, false); - text = text.replaceAll("\n", "\n" + EditHelper.repeatSpaces(indent)); + text = text.replaceAll("\n", "\n" + EditorUtilKt.indentationString(indent)); insertText.add(text); } } diff --git a/lsp/java/src/main/java/com/itsaky/androidide/lsp/java/utils/EditHelper.java b/lsp/java/src/main/java/com/itsaky/androidide/lsp/java/utils/EditHelper.java index 5ae729cf1..fdb2de32b 100644 --- a/lsp/java/src/main/java/com/itsaky/androidide/lsp/java/utils/EditHelper.java +++ b/lsp/java/src/main/java/com/itsaky/androidide/lsp/java/utils/EditHelper.java @@ -23,7 +23,6 @@ import com.itsaky.androidide.lsp.java.rewrite.AddImport; import com.itsaky.androidide.lsp.models.TextEdit; import com.itsaky.androidide.models.Position; import com.itsaky.androidide.models.Range; -import com.itsaky.androidide.preferences.internal.EditorPreferencesKt; import com.itsaky.androidide.projects.util.StringSearch; import java.nio.file.Path; import java.util.Arrays; @@ -143,19 +142,6 @@ public class EditHelper { return (int) (startClass - startLine); } - public static int indent(final CharSequence contents, final int cursor) { - int indent = 0; - for (int i = 0; i <= cursor && i < contents.length(); i++) { - char c = contents.charAt(i); - if (c == '{') { - indent++; - } else if (c == '}') { - indent--; - } - } - return indent * EditorPreferencesKt.getTabSize(); - } - public static Position insertBefore(final JavacTask task, final CompilationUnitTree root, final Tree member ) { @@ -176,8 +162,7 @@ public class EditHelper { return new Position(line, 0); } - public static Position insertAtEndOfClass(JavacTask task, CompilationUnitTree root, - ClassTree leaf + public static Position insertAtEndOfClass(JavacTask task, CompilationUnitTree root, ClassTree leaf ) { SourcePositions pos = Trees.instance(task).getSourcePositions(); LineMap lines = root.getLineMap(); @@ -187,14 +172,6 @@ public class EditHelper { return new Position(line - 1, column - 2); } - public static String repeatSpaces(int count) { - StringBuilder result = new StringBuilder(); - for (int i = 0; i < count; i++) { - result.append(" "); - } - return result.toString(); - } - private static String printParameters(final ExecutableType method, final MethodTree source) { StringJoiner join = new StringJoiner(", "); for (int i = 0; i < method.getParameterTypes().size(); i++) { diff --git a/lsp/java/src/main/java/com/itsaky/androidide/lsp/java/utils/JavaPoetUtils.kt b/lsp/java/src/main/java/com/itsaky/androidide/lsp/java/utils/JavaPoetUtils.kt index bd32b90e6..2ab7aacd9 100644 --- a/lsp/java/src/main/java/com/itsaky/androidide/lsp/java/utils/JavaPoetUtils.kt +++ b/lsp/java/src/main/java/com/itsaky/androidide/lsp/java/utils/JavaPoetUtils.kt @@ -18,6 +18,7 @@ package com.itsaky.androidide.lsp.java.utils import com.itsaky.androidide.preferences.internal.tabSize +import com.itsaky.androidide.preferences.utils.indentationString import com.squareup.javapoet.AnnotationSpec import com.squareup.javapoet.ImportCollectingCodeWriter import com.squareup.javapoet.MethodSpec @@ -39,7 +40,7 @@ class JavaPoetUtils { qualifiedNames: Boolean = true, ): String { val sb = StringBuilder() - val writer = ImportCollectingCodeWriter(sb, " ".repeat(tabSize), emptySet(), emptySet()) + val writer = ImportCollectingCodeWriter(sb, indentationString, emptySet(), emptySet()) writer.isPrintQualifiedNames = qualifiedNames writer.emit(method) diff --git a/preferences/src/main/java/com/itsaky/androidide/preferences/utils/editorUtil.kt b/preferences/src/main/java/com/itsaky/androidide/preferences/utils/editorUtil.kt new file mode 100644 index 000000000..50a458159 --- /dev/null +++ b/preferences/src/main/java/com/itsaky/androidide/preferences/utils/editorUtil.kt @@ -0,0 +1,47 @@ +/* + * This file is part of AndroidIDE. + * + * AndroidIDE is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * AndroidIDE is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with AndroidIDE. If not, see . + */ + +package com.itsaky.androidide.preferences.utils + +import com.itsaky.androidide.preferences.internal.tabSize +import com.itsaky.androidide.preferences.internal.useSoftTab + +/** @author Akash Yadav */ + +/** + * The indentation character to use. If [useSoftTab] is enabled, the character is a space, otherwise + * '\t'. + */ +val indentationChar: Char + get() = if (useSoftTab) ' ' else '\t' + +/** Get the string which should be used as indentation while generating code. */ +val indentationString: String + get() = if (useSoftTab) " ".repeat(tabSize) else "\t" + +/** + * Creates the indentation string for the given number of spaces. The result is simply + * [indentationChar] repeated [spaceCount] times if [useSoftTab] is enabled, otherwise `spaceCount / + * tabSize` times. + * + * @param spaceCount The number of spaces to indent. + * @return The indentation string. + */ +fun indentationString(spaceCount: Int): String { + val count = if (useSoftTab) spaceCount else spaceCount / tabSize + return indentationChar.toString().repeat(count) +}