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 da1c4e56554cee487b9c57cfc6a1a831b6620839 Author: Josh Tynjala <[email protected]> AuthorDate: Mon Sep 20 11:43:42 2021 -0700 formatter: fix new lines at end of file not being preserved --- .../org/apache/royale/formatter/FORMATTER.java | 34 ++++++++++++++++++---- 1 file changed, 28 insertions(+), 6 deletions(-) diff --git a/formatter/src/main/java/org/apache/royale/formatter/FORMATTER.java b/formatter/src/main/java/org/apache/royale/formatter/FORMATTER.java index d010430..d3239dd 100644 --- a/formatter/src/main/java/org/apache/royale/formatter/FORMATTER.java +++ b/formatter/src/main/java/org/apache/royale/formatter/FORMATTER.java @@ -408,6 +408,18 @@ class FORMATTER { tokens.add(token); prevToken = token; } + if(prevToken != null) { + int start = prevToken.getAbsoluteEnd(); + int end = text.length(); + if (end > start) { + String tokenText = text.substring(start, end); + ASToken extraToken = new ASToken(TOKEN_TYPE_EXTRA, start, end, prevToken.getEndLine(), + prevToken.getEndColumn(), tokenText); + extraToken.setEndLine(prevToken.getLine()); + extraToken.setEndLine(prevToken.getColumn()); + tokens.add(extraToken); + } + } try { return parseTokens(filePath, tokens, node); } catch (Exception e) { @@ -471,6 +483,12 @@ class FORMATTER { for (int i = 0; i < tokens.size(); i++) { token = tokens.get(i); if (token.getType() == TOKEN_TYPE_EXTRA) { + if(i == (tokens.size() - 1)) { + //if the last token is whitespace, include new lines + numRequiredNewLines = Math.max(0, countNewLinesInExtra(token)); + appendNewLines(builder, numRequiredNewLines); + break; + } if (!blockOpenPending) { numRequiredNewLines = Math.max(numRequiredNewLines, countNewLinesInExtra(token)); if (!indentedStatement && numRequiredNewLines > 0 && prevTokenNotComment != null @@ -701,12 +719,7 @@ class FORMATTER { } if (prevToken != null) { if (numRequiredNewLines > 0) { - if (maxPreserveNewLines != 0) { - numRequiredNewLines = Math.min(maxPreserveNewLines, numRequiredNewLines); - } - for (int j = 0; j < numRequiredNewLines; j++) { - builder.append('\n'); - } + appendNewLines(builder, numRequiredNewLines); appendIndent(builder, indent); } else if (requiredSpace) { builder.append(' '); @@ -1283,6 +1296,15 @@ class FORMATTER { } } + private void appendNewLines(StringBuilder builder, int numRequiredNewLines) { + if (maxPreserveNewLines != 0) { + numRequiredNewLines = Math.min(maxPreserveNewLines, numRequiredNewLines); + } + for (int j = 0; j < numRequiredNewLines; j++) { + builder.append('\n'); + } + } + private static class BlockStackItem { public BlockStackItem(IASToken token) { this.token = token;
