This is an automated email from the ASF dual-hosted git repository.

joshtynjala pushed a commit to branch develop
in repository https://gitbox.apache.org/repos/asf/royale-compiler.git

commit c3fad5d6b7031dbfb55b5a6affe104052b2cf481
Author: Josh Tynjala <[email protected]>
AuthorDate: Wed Jan 8 09:50:29 2025 -0800

    formatter: new option indent-package-contents
    
    A similar option existed in Flash Builder, so it makes sense to add it to 
asformat too
---
 .../apache/royale/formatter/ASTokenFormatter.java  |  15 ++-
 .../apache/royale/formatter/FormatterSettings.java |   1 +
 .../apache/royale/formatter/FormatterUtils.java    |   1 +
 .../royale/formatter/config/Configuration.java     |  18 ++++
 .../royale/formatter/TestPackageDeclaration.java   | 116 ++++++++++++++++++++-
 5 files changed, 143 insertions(+), 8 deletions(-)

diff --git 
a/formatter/src/main/java/org/apache/royale/formatter/ASTokenFormatter.java 
b/formatter/src/main/java/org/apache/royale/formatter/ASTokenFormatter.java
index 4f0e0f772..c3966e01c 100644
--- a/formatter/src/main/java/org/apache/royale/formatter/ASTokenFormatter.java
+++ b/formatter/src/main/java/org/apache/royale/formatter/ASTokenFormatter.java
@@ -362,7 +362,9 @@ public class ASTokenFormatter extends BaseTokenFormatter {
                                                                boolean 
oneLineBlock = prevToken != null
                                                                                
&& prevToken.getType() == ASTokenTypes.TOKEN_BLOCK_OPEN
                                                                                
&& !(stackItem instanceof ObjectLiteralBlockStackItem);
-                                                               if 
(!settings.collapseEmptyBlocks || !oneLineBlock) {
+                                                               boolean 
packageBlock = stackItem != null && stackItem.token.getType() == 
ASTokenTypes.TOKEN_KEYWORD_PACKAGE;
+                                                               boolean 
skipPackageIndent = packageBlock && !settings.indentPackageContents;
+                                                               if 
(!skipPackageIndent && (!settings.collapseEmptyBlocks || !oneLineBlock)) {
                                                                        indent 
= decreaseIndent(indent);
                                                                }
                                                                if 
(stackItem.token.getType() == ASTokenTypes.TOKEN_KEYWORD_CASE
@@ -568,7 +570,9 @@ public class ASTokenFormatter extends BaseTokenFormatter {
                                        if (blockOpenPending) {
                                                boolean oneLineBlock = 
nextToken != null
                                                                && 
nextToken.getType() == ASTokenTypes.TOKEN_BLOCK_CLOSE;
-                                               if 
(settings.placeOpenBraceOnNewLine && (!settings.collapseEmptyBlocks || 
!oneLineBlock)) {
+                                               boolean packageBlock = 
!blockStack.isEmpty() && blockStack.get(blockStack.size() - 1).token.getType() 
== ASTokenTypes.TOKEN_KEYWORD_PACKAGE;
+                                               boolean skipPackageIndent = 
packageBlock && !settings.indentPackageContents;
+                                               if 
(settings.placeOpenBraceOnNewLine && (!settings.collapseEmptyBlocks || 
!oneLineBlock) && !skipPackageIndent) {
                                                        indent = 
increaseIndent(indent);
                                                }
                                        }
@@ -650,13 +654,16 @@ public class ASTokenFormatter extends BaseTokenFormatter {
                                                }
                                                if (blockOpenPending) {
                                                        blockOpenPending = 
false;
+                                                       BlockStackItem 
stackItem = null;
                                                        if 
(!blockStack.isEmpty()) {
-                                                               BlockStackItem 
stackItem = blockStack.get(blockStack.size() - 1);
+                                                               stackItem = 
blockStack.get(blockStack.size() - 1);
                                                                
stackItem.blockDepth++;
                                                        }
                                                        boolean oneLineBlock = 
nextToken != null
                                                                        && 
nextToken.getType() == ASTokenTypes.TOKEN_BLOCK_CLOSE;
-                                                       if 
(!settings.collapseEmptyBlocks || !oneLineBlock) {
+                                                       boolean packageBlock = 
stackItem != null && stackItem.token.getType() == 
ASTokenTypes.TOKEN_KEYWORD_PACKAGE;
+                                                       boolean 
skipPackageIndent = packageBlock && !settings.indentPackageContents;
+                                                       if (!skipPackageIndent 
&& (!settings.collapseEmptyBlocks || !oneLineBlock)) {
                                                                if 
(!settings.placeOpenBraceOnNewLine) {
                                                                        indent 
= increaseIndent(indent);
                                                                }
diff --git 
a/formatter/src/main/java/org/apache/royale/formatter/FormatterSettings.java 
b/formatter/src/main/java/org/apache/royale/formatter/FormatterSettings.java
index 1dacbe3e2..de14d18cc 100644
--- a/formatter/src/main/java/org/apache/royale/formatter/FormatterSettings.java
+++ b/formatter/src/main/java/org/apache/royale/formatter/FormatterSettings.java
@@ -38,6 +38,7 @@ public class FormatterSettings {
        public Semicolons semicolons = Semicolons.INSERT;
        public boolean ignoreProblems = false;
        public boolean collapseEmptyBlocks = false;
+       public boolean indentPackageContents = true;
        public boolean mxmlAlignAttributes = false;
        public boolean mxmlInsertNewLineBetweenAttributes = false;
        public boolean mxmlIndentCData = true;
diff --git 
a/formatter/src/main/java/org/apache/royale/formatter/FormatterUtils.java 
b/formatter/src/main/java/org/apache/royale/formatter/FormatterUtils.java
index 8dc03d8d6..2aec32da5 100644
--- a/formatter/src/main/java/org/apache/royale/formatter/FormatterUtils.java
+++ b/formatter/src/main/java/org/apache/royale/formatter/FormatterUtils.java
@@ -41,6 +41,7 @@ public class FormatterUtils {
                settings.semicolons = 
Semicolons.valueOf(configuration.getSemicolons().toUpperCase());
                settings.ignoreProblems = 
configuration.getIgnoreParsingProblems();
                settings.collapseEmptyBlocks = 
configuration.getCollapseEmptyBlocks();
+               settings.indentPackageContents = 
configuration.getIndentPackageContents();
                settings.mxmlAlignAttributes = 
configuration.getMxmlAlignAttributes();
                settings.mxmlInsertNewLineBetweenAttributes = 
configuration.getMxmlInsertNewLineBetweenAttributes();
                settings.mxmlIndentCData = configuration.getMxmlIndentCData();
diff --git 
a/formatter/src/main/java/org/apache/royale/formatter/config/Configuration.java 
b/formatter/src/main/java/org/apache/royale/formatter/config/Configuration.java
index e548aed70..56f546672 100644
--- 
a/formatter/src/main/java/org/apache/royale/formatter/config/Configuration.java
+++ 
b/formatter/src/main/java/org/apache/royale/formatter/config/Configuration.java
@@ -482,6 +482,24 @@ public class Configuration {
         this.collapseEmptyBlocks = b;
     }
 
+    //
+    // 'indent-package-contents' option
+    //
+
+    private boolean indentPackageContents = true;
+
+    public boolean getIndentPackageContents()
+    {
+        return indentPackageContents;
+    }
+
+    @Config
+    @Mapping("indent-package-contents")
+    public void setIndentPackageContents(ConfigurationValue cv, boolean b)
+    {
+        this.indentPackageContents = b;
+    }
+
     //
     // 'tab-size' option
     //
diff --git 
a/formatter/src/test/java/org/apache/royale/formatter/TestPackageDeclaration.java
 
b/formatter/src/test/java/org/apache/royale/formatter/TestPackageDeclaration.java
index 70ba172b0..db7b8c664 100644
--- 
a/formatter/src/test/java/org/apache/royale/formatter/TestPackageDeclaration.java
+++ 
b/formatter/src/test/java/org/apache/royale/formatter/TestPackageDeclaration.java
@@ -117,11 +117,12 @@ public class TestPackageDeclaration extends 
BaseFormatterTests {
        }
 
        @Test
-       public void testPlaceOpenBraceOnNewLineWithStatement1() {
+       public void 
testPlaceOpenBraceOnNewLineWithStatement1IndentPackageContentsEnabled() {
                FormatterSettings settings = new FormatterSettings();
                settings.insertSpaceAfterKeywordsInControlFlowStatements = true;
                settings.placeOpenBraceOnNewLine = true;
                settings.insertSpaces = false;
+               settings.indentPackageContents = true;
                ASTokenFormatter formatter = new ASTokenFormatter(settings);
                String result = formatter.format("file.as",
                // @formatter:off
@@ -142,11 +143,38 @@ public class TestPackageDeclaration extends 
BaseFormatterTests {
        }
 
        @Test
-       public void testPlaceOpenBraceOnNewLineWithStatement2() {
+       public void 
testPlaceOpenBraceOnNewLineWithStatement1IndentPackageContentsDisabled() {
                FormatterSettings settings = new FormatterSettings();
                settings.insertSpaceAfterKeywordsInControlFlowStatements = true;
                settings.placeOpenBraceOnNewLine = true;
                settings.insertSpaces = false;
+               settings.indentPackageContents = false;
+               ASTokenFormatter formatter = new ASTokenFormatter(settings);
+               String result = formatter.format("file.as",
+               // @formatter:off
+                       "package {\n" +
+                       "\tstatement;\n" +
+                       "}",
+                       // @formatter:on
+                       problems
+               );
+               assertEquals(
+               // @formatter:off
+                               "package\n" +
+                               "{\n" +
+                               "statement;\n" +
+                               "}",
+                               // @formatter:on
+                               result);
+       }
+
+       @Test
+       public void 
testPlaceOpenBraceOnNewLineWithStatement2IndentPackageContentsEnabled() {
+               FormatterSettings settings = new FormatterSettings();
+               settings.insertSpaceAfterKeywordsInControlFlowStatements = true;
+               settings.placeOpenBraceOnNewLine = true;
+               settings.insertSpaces = false;
+               settings.indentPackageContents = true;
                ASTokenFormatter formatter = new ASTokenFormatter(settings);
                String result = formatter.format("file.as",
                // @formatter:off
@@ -168,11 +196,39 @@ public class TestPackageDeclaration extends 
BaseFormatterTests {
        }
 
        @Test
-       public void testDisablePlaceOpenBraceOnNewLineWithStatement1() {
+       public void 
testPlaceOpenBraceOnNewLineWithStatement2IndentPackageContentsDisabled() {
+               FormatterSettings settings = new FormatterSettings();
+               settings.insertSpaceAfterKeywordsInControlFlowStatements = true;
+               settings.placeOpenBraceOnNewLine = true;
+               settings.insertSpaces = false;
+               settings.indentPackageContents = false;
+               ASTokenFormatter formatter = new ASTokenFormatter(settings);
+               String result = formatter.format("file.as",
+               // @formatter:off
+                       "package\n" +
+                       "{\n" +
+                       "\tstatement;\n" +
+                       "}",
+                       // @formatter:on
+                       problems
+               );
+               assertEquals(
+               // @formatter:off
+                               "package\n" +
+                               "{\n" +
+                               "statement;\n" +
+                               "}",
+                               // @formatter:on
+                               result);
+       }
+
+       @Test
+       public void 
testDisablePlaceOpenBraceOnNewLineWithStatement1IndentPackageContentsEnabled() {
                FormatterSettings settings = new FormatterSettings();
                settings.insertSpaceAfterKeywordsInControlFlowStatements = true;
                settings.placeOpenBraceOnNewLine = false;
                settings.insertSpaces = false;
+               settings.indentPackageContents = true;
                ASTokenFormatter formatter = new ASTokenFormatter(settings);
                String result = formatter.format("file.as",
                // @formatter:off
@@ -193,11 +249,38 @@ public class TestPackageDeclaration extends 
BaseFormatterTests {
        }
 
        @Test
-       public void testDisablePlaceOpenBraceOnNewLineWithStatement2() {
+       public void 
testDisablePlaceOpenBraceOnNewLineWithStatement1IndentPackageContentsDisabled() 
{
+               FormatterSettings settings = new FormatterSettings();
+               settings.insertSpaceAfterKeywordsInControlFlowStatements = true;
+               settings.placeOpenBraceOnNewLine = false;
+               settings.insertSpaces = false;
+               settings.indentPackageContents = false;
+               ASTokenFormatter formatter = new ASTokenFormatter(settings);
+               String result = formatter.format("file.as",
+               // @formatter:off
+                       "package\n" +
+                       "{\n" +
+                       "\tstatement;\n" +
+                       "}",
+                       // @formatter:on
+                       problems
+               );
+               assertEquals(
+               // @formatter:off
+                               "package {\n" +
+                               "statement;\n" +
+                               "}",
+                               // @formatter:on
+                               result);
+       }
+
+       @Test
+       public void 
testDisablePlaceOpenBraceOnNewLineWithStatement2IndentPackageContentsEnabled() {
                FormatterSettings settings = new FormatterSettings();
                settings.insertSpaceAfterKeywordsInControlFlowStatements = true;
                settings.placeOpenBraceOnNewLine = false;
                settings.insertSpaces = false;
+               settings.indentPackageContents = true;
                ASTokenFormatter formatter = new ASTokenFormatter(settings);
                String result = formatter.format("file.as",
                // @formatter:off
@@ -216,6 +299,31 @@ public class TestPackageDeclaration extends 
BaseFormatterTests {
                                result);
        }
 
+       @Test
+       public void 
testDisablePlaceOpenBraceOnNewLineWithStatement2IndentPackageContentsDisabled() 
{
+               FormatterSettings settings = new FormatterSettings();
+               settings.insertSpaceAfterKeywordsInControlFlowStatements = true;
+               settings.placeOpenBraceOnNewLine = false;
+               settings.insertSpaces = false;
+               settings.indentPackageContents = false;
+               ASTokenFormatter formatter = new ASTokenFormatter(settings);
+               String result = formatter.format("file.as",
+               // @formatter:off
+                       "package {\n" +
+                       "\tstatement;\n" +
+                       "}",
+                       // @formatter:on
+                       problems
+               );
+               assertEquals(
+               // @formatter:off
+                               "package {\n" +
+                               "statement;\n" +
+                               "}",
+                               // @formatter:on
+                               result);
+       }
+
        @Test
        public void testWithName() {
                FormatterSettings settings = new FormatterSettings();

Reply via email to