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();
