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;

Reply via email to