You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@royale.apache.org by jo...@apache.org on 2023/09/27 17:42:03 UTC
[royale-compiler] 03/04: formatter: insert-new-line-else option
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 2744006b96738a2dcb0edc84ef8cf5e38ddea980
Author: Josh Tynjala <jo...@apache.org>
AuthorDate: Wed Sep 27 10:32:34 2023 -0700
formatter: insert-new-line-else option
---
.../apache/royale/formatter/ASTokenFormatter.java | 24 ++++--
.../apache/royale/formatter/FormatterSettings.java | 1 +
.../apache/royale/formatter/FormatterUtils.java | 1 +
.../royale/formatter/config/Configuration.java | 18 +++++
.../apache/royale/formatter/TestElseStatement.java | 88 ++++++++++++++++++++++
5 files changed, 127 insertions(+), 5 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 9676a5b6f..aeed7297e 100644
--- a/formatter/src/main/java/org/apache/royale/formatter/ASTokenFormatter.java
+++ b/formatter/src/main/java/org/apache/royale/formatter/ASTokenFormatter.java
@@ -66,6 +66,7 @@ public class ASTokenFormatter extends BaseTokenFormatter {
private boolean inInterfaceDeclaration;
private boolean inConfigGateForDefinition;
private boolean blockOpenPending;
+ private boolean elseNoNewLinePending;
private boolean indentedStatement;
private boolean caseOrDefaultBlockOpenPending;
private boolean skipFormatting;
@@ -201,6 +202,7 @@ public class ASTokenFormatter extends BaseTokenFormatter {
inInterfaceDeclaration = false;
inConfigGateForDefinition = false;
blockOpenPending = false;
+ elseNoNewLinePending = false;
indentedStatement = false;
caseOrDefaultBlockOpenPending = false;
skipFormatting = false;
@@ -246,7 +248,7 @@ public class ASTokenFormatter extends BaseTokenFormatter {
appendNewLines(builder, numRequiredNewLines);
break;
}
- if (!blockOpenPending) {
+ if (!blockOpenPending && !elseNoNewLinePending) {
int newLinesInExtra = countNewLinesInExtra(token);
if (prevToken != null && prevToken.getType() == ASTokenTypes.HIDDEN_TOKEN_SINGLE_LINE_COMMENT) {
newLinesInExtra++;
@@ -391,6 +393,14 @@ public class ASTokenFormatter extends BaseTokenFormatter {
requiredSpace = true;
break;
}
+ case ASTokenTypes.TOKEN_KEYWORD_ELSE: {
+ if (elseNoNewLinePending) {
+ numRequiredNewLines = 0;
+ elseNoNewLinePending = false;
+ requiredSpace = true;
+ }
+ break;
+ }
case ASTokenTypes.TOKEN_OPERATOR_EQUAL:
case ASTokenTypes.TOKEN_OPERATOR_NOT_EQUAL:
case ASTokenTypes.TOKEN_OPERATOR_STRICT_EQUAL:
@@ -622,13 +632,17 @@ public class ASTokenFormatter extends BaseTokenFormatter {
if (stackItem.blockDepth <= 0) {
blockStack.remove(blockStack.size() - 1);
}
- if (!(stackItem instanceof ObjectLiteralBlockStackItem)
- && (nextToken == null || (nextToken.getType() != ASTokenTypes.TOKEN_SEMICOLON
+ if (!(stackItem instanceof ObjectLiteralBlockStackItem)) {
+ if (nextTokenNotComment != null && nextTokenNotComment.getType() == ASTokenTypes.TOKEN_KEYWORD_ELSE && !settings.insertNewLineElse) {
+ elseNoNewLinePending = true;
+ }
+ else if (nextToken == null || (nextToken.getType() != ASTokenTypes.TOKEN_SEMICOLON
&& nextToken.getType() != ASTokenTypes.TOKEN_PAREN_CLOSE
&& nextToken.getType() != ASTokenTypes.TOKEN_COMMA
&& nextToken.getType() != ASTokenTypes.HIDDEN_TOKEN_SINGLE_LINE_COMMENT
- && nextToken.getType() != ASTokenTypes.HIDDEN_TOKEN_MULTI_LINE_COMMENT))) {
- numRequiredNewLines = Math.max(numRequiredNewLines, 1);
+ && nextToken.getType() != ASTokenTypes.HIDDEN_TOKEN_MULTI_LINE_COMMENT)) {
+ numRequiredNewLines = Math.max(numRequiredNewLines, 1);
+ }
}
}
break;
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 c083f01c3..908f824e3 100644
--- a/formatter/src/main/java/org/apache/royale/formatter/FormatterSettings.java
+++ b/formatter/src/main/java/org/apache/royale/formatter/FormatterSettings.java
@@ -25,6 +25,7 @@ public class FormatterSettings {
public int tabSize = 4;
public boolean insertSpaces = false;
public boolean insertFinalNewLine = false;
+ public boolean insertNewLineElse = true;
public boolean placeOpenBraceOnNewLine = true;
public boolean insertSpaceAfterSemicolonInForStatements = true;
public boolean insertSpaceAfterKeywordsInControlFlowStatements = 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 39e6b89bc..4221977d9 100644
--- a/formatter/src/main/java/org/apache/royale/formatter/FormatterUtils.java
+++ b/formatter/src/main/java/org/apache/royale/formatter/FormatterUtils.java
@@ -29,6 +29,7 @@ public class FormatterUtils {
settings.insertSpaces = configuration.getInsertSpaces();
settings.insertFinalNewLine = configuration.getInsertFinalNewLine();
settings.placeOpenBraceOnNewLine = configuration.getPlaceOpenBraceOnNewLine();
+ settings.insertNewLineElse = configuration.getPlaceElseOnNewLine();
settings.insertSpaceAfterSemicolonInForStatements = configuration.getInsertSpaceAfterSemicolonInForStatements();
settings.insertSpaceAfterKeywordsInControlFlowStatements = configuration.getInsertSpaceAfterKeywordsInControlFlowStatements();
settings.insertSpaceAfterFunctionKeywordForAnonymousFunctions = configuration.getInsertSpaceAfterFunctionKeywordForAnonymousFunctions();
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 2e1883904..5adc4b1a2 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
@@ -320,6 +320,24 @@ public class Configuration {
this.placeOpenBraceOnNewLine = b;
}
+ //
+ // 'insert-new-line-else' option
+ //
+
+ private boolean placeElseOnNewLine = true;
+
+ public boolean getPlaceElseOnNewLine()
+ {
+ return placeElseOnNewLine;
+ }
+
+ @Config
+ @Mapping("insert-new-line-else")
+ public void setPlaceElseOnNewLine(ConfigurationValue cv, boolean b)
+ {
+ this.placeElseOnNewLine = b;
+ }
+
//
// 'insert-space-for-loop-semicolon' option
//
diff --git a/formatter/src/test/java/org/apache/royale/formatter/TestElseStatement.java b/formatter/src/test/java/org/apache/royale/formatter/TestElseStatement.java
index 0e6f8445c..038e1eb3a 100644
--- a/formatter/src/test/java/org/apache/royale/formatter/TestElseStatement.java
+++ b/formatter/src/test/java/org/apache/royale/formatter/TestElseStatement.java
@@ -853,4 +853,92 @@ public class TestElseStatement extends BaseFormatterTests {
// @formatter:on
result);
}
+
+ @Test
+ public void testDisableInsertNewLineElseWithStatement1() {
+ FormatterSettings settings = new FormatterSettings();
+ settings.insertSpaceAfterKeywordsInControlFlowStatements = true;
+ settings.placeOpenBraceOnNewLine = false;
+ settings.insertSpaces = false;
+ settings.insertNewLineElse = false;
+ ASTokenFormatter formatter = new ASTokenFormatter(settings);
+ String result = formatter.format("file.as",
+ // @formatter:off
+ "if (condition)\n" +
+ "{\n" +
+ "\tstatement;\n" +
+ "}\n" +
+ "else\n" +
+ "{\n" +
+ "\tstatement;\n" +
+ "}",
+ // @formatter:on
+ problems
+ );
+ assertEquals(
+ // @formatter:off
+ "if (condition) {\n" +
+ "\tstatement;\n" +
+ "} else {\n" +
+ "\tstatement;\n" +
+ "}",
+ // @formatter:on
+ result);
+ }
+
+ @Test
+ public void testDisableInsertNewLineElseWithStatement2() {
+ FormatterSettings settings = new FormatterSettings();
+ settings.insertSpaceAfterKeywordsInControlFlowStatements = true;
+ settings.placeOpenBraceOnNewLine = false;
+ settings.insertSpaces = false;
+ settings.insertNewLineElse = false;
+ ASTokenFormatter formatter = new ASTokenFormatter(settings);
+ String result = formatter.format("file.as",
+ // @formatter:off
+ "if (condition) {\n" +
+ "\tstatement;\n" +
+ "} else {\n" +
+ "\tstatement;\n" +
+ "}",
+ // @formatter:on
+ problems
+ );
+ assertEquals(
+ // @formatter:off
+ "if (condition) {\n" +
+ "\tstatement;\n" +
+ "} else {\n" +
+ "\tstatement;\n" +
+ "}",
+ // @formatter:on
+ result);
+ }
+
+ @Test
+ public void testDisableInsertNewLineElseWithStatement3() {
+ FormatterSettings settings = new FormatterSettings();
+ settings.insertSpaceAfterKeywordsInControlFlowStatements = true;
+ settings.placeOpenBraceOnNewLine = false;
+ settings.insertSpaces = false;
+ settings.insertNewLineElse = false;
+ ASTokenFormatter formatter = new ASTokenFormatter(settings);
+ String result = formatter.format("file.as",
+ // @formatter:off
+ "if (condition)\n" +
+ "\tstatement;\n" +
+ "else\n" +
+ "\tstatement;\n",
+ // @formatter:on
+ problems
+ );
+ assertEquals(
+ // @formatter:off
+ "if (condition)\n" +
+ "\tstatement;\n" +
+ "else\n" +
+ "\tstatement;\n",
+ // @formatter:on
+ result);
+ }
}