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 8ca8306b0a9778e780ec48e8a5a928d6cb0dfc78
Author: Josh Tynjala <[email protected]>
AuthorDate: Mon Sep 20 13:38:03 2021 -0700

    formatter: help and version args
---
 .../org/apache/royale/formatter/FORMATTER.java     | 112 ++++++++--
 .../royale/formatter/config/Configuration.java     | 234 +++++++++++++++++++++
 .../apache/royale/formatter/config/Semicolons.java |  30 +++
 3 files changed, 360 insertions(+), 16 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 d3239dd..ad1aa94 100644
--- a/formatter/src/main/java/org/apache/royale/formatter/FORMATTER.java
+++ b/formatter/src/main/java/org/apache/royale/formatter/FORMATTER.java
@@ -25,8 +25,10 @@ import java.io.StringReader;
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.Collection;
+import java.util.LinkedHashSet;
 import java.util.List;
 import java.util.Scanner;
+import java.util.Set;
 
 import org.apache.commons.io.FileUtils;
 import org.apache.royale.compiler.clients.problems.ProblemFormatter;
@@ -34,6 +36,7 @@ import 
org.apache.royale.compiler.clients.problems.ProblemPrinter;
 import org.apache.royale.compiler.clients.problems.ProblemQuery;
 import org.apache.royale.compiler.common.VersionInfo;
 import org.apache.royale.compiler.exceptions.ConfigurationException;
+import 
org.apache.royale.compiler.internal.config.localization.LocalizationManager;
 import org.apache.royale.compiler.internal.parsing.as.ASParser;
 import org.apache.royale.compiler.internal.parsing.as.ASToken;
 import org.apache.royale.compiler.internal.parsing.as.ASTokenTypes;
@@ -49,9 +52,12 @@ import org.apache.royale.compiler.parsing.IASToken;
 import org.apache.royale.compiler.problems.ConfigurationProblem;
 import org.apache.royale.compiler.problems.ICompilerProblem;
 import org.apache.royale.compiler.problems.UnexpectedExceptionProblem;
+import org.apache.royale.formatter.config.CommandLineConfigurator;
 import org.apache.royale.formatter.config.Configuration;
 import org.apache.royale.formatter.config.ConfigurationBuffer;
+import org.apache.royale.formatter.config.ConfigurationValue;
 import org.apache.royale.formatter.config.Configurator;
+import org.apache.royale.formatter.config.Semicolons;
 import org.apache.royale.utils.FilenameNormalization;
 
 /**
@@ -59,6 +65,10 @@ import org.apache.royale.utils.FilenameNormalization;
  */
 class FORMATTER {
        private static final int TOKEN_TYPE_EXTRA = 999999;
+    
+    private static final String NEWLINE = System.getProperty("line.separator");
+    private static final String DEFAULT_VAR = "files";
+    private static final String L10N_CONFIG_PREFIX = 
"org.apache.royale.compiler.internal.config.configuration";
 
        static enum ExitCode {
                SUCCESS(0), PRINT_HELP(1), FAILED_WITH_PROBLEMS(2), 
FAILED_WITH_EXCEPTIONS(3), FAILED_WITH_CONFIG_PROBLEMS(4);
@@ -70,16 +80,6 @@ class FORMATTER {
                final int code;
        }
 
-       public static enum Semicolons {
-               IGNORE("ignore"), INSERT("insert"), REMOVE("remove");
-
-               Semicolons(String value) {
-                       this.value = value;
-               }
-
-               final String value;
-       }
-
        /**
         * Java program entry point.
         * 
@@ -113,6 +113,8 @@ class FORMATTER {
        private List<File> inputFiles = new ArrayList<File>();
        private boolean writeBackToInputFiles = false;
        private boolean listChangedFiles = false;
+       private Configuration configuration;
+       private ConfigurationBuffer configBuffer;
 
        public int execute(String[] args) {
                ExitCode exitCode = ExitCode.SUCCESS;
@@ -207,6 +209,61 @@ class FORMATTER {
        public String formatText(String text) {
                return formatText(text, null);
        }
+    
+    /**
+     * Get the start up message that contains the program name 
+     * with the copyright notice.
+     * 
+     * @return The startup message.
+     */
+    protected String getStartMessage()
+    {
+        // This message should not be localized.
+        String message = "Apache Royale ActionScript Formatter (asformat)" + 
NEWLINE +
+            VersionInfo.buildMessage() + NEWLINE;
+        return message;
+    }
+
+    /**
+     * Get my program name.
+     * 
+     * @return always "mxmlc".
+     */
+    protected String getProgramName()
+    {
+        return "asformat";
+    }
+
+    /**
+     * Print detailed help information if -help is provided.
+     */
+    private void processHelp(final List<ConfigurationValue> helpVar)
+    {
+        final Set<String> keywords = new LinkedHashSet<String>();
+        for (final ConfigurationValue val : helpVar)
+        {
+            for (final Object element : val.getArgs())
+            {
+                String keyword = (String)element;
+                while (keyword.startsWith("-"))
+                    keyword = keyword.substring(1);
+                keywords.add(keyword);
+            }
+        }
+
+        if (keywords.size() == 0)
+            keywords.add("help");
+
+        final String usages = CommandLineConfigurator.usage(
+                    getProgramName(),
+                    DEFAULT_VAR,
+                    configBuffer,
+                    keywords,
+                    LocalizationManager.get(),
+                    L10N_CONFIG_PREFIX);
+        System.out.println(getStartMessage());
+        System.out.println(usages);
+    }
 
        private boolean configure(String[] args) {
                if (args.length == 0) {
@@ -218,20 +275,43 @@ class FORMATTER {
 
                        Configurator configurator = new Configurator();
                        configurator.setConfiguration(args, "files");
-                       Configuration config = configurator.getConfiguration();
-                       ConfigurationBuffer configBuffer = 
configurator.getConfigurationBuffer();
+                       configuration = configurator.getConfiguration();
+                       configBuffer = configurator.getConfigurationBuffer();
 
                        
problems.addAll(configurator.getConfigurationProblems());
 
-                       if (configBuffer.getVar("version") != null)
+                       if (configBuffer.getVar("version") != null) {
+                               System.out.println(VersionInfo.buildMessage());
                                return false;
+                       }
+            
+            // Print help if "-help" is present.
+            final List<ConfigurationValue> helpVar = 
configBuffer.getVar("help");
+            if (helpVar != null)
+            {
+                processHelp(helpVar);
+                return false;
+            }
 
                        if (problems.hasErrors())
                                return false;
 
-                       writeBackToInputFiles = config.getWriteFiles();
-                       listChangedFiles = config.getListFiles();
-                       for (String filePath : config.getFiles()) {
+                       collapseEmptyBlocks = 
configuration.getCollapseEmptyBlocks();
+                       ignoreProblems = 
configuration.getIgnoreParsingProblems();
+                       insertFinalNewLine = 
configuration.getInsertFinalNewLine();
+                       insertSpaceAfterCommaDelimiter = 
configuration.getInsertSpaceAfterCommaDelimiter();
+                       insertSpaceAfterFunctionKeywordForAnonymousFunctions = 
configuration.getInsertSpaceAfterFunctionKeywordForAnonymousFunctions();
+                       insertSpaceAfterKeywordsInControlFlowStatements = 
configuration.getInsertSpaceAfterKeywordsInControlFlowStatements();
+                       insertSpaceAfterSemicolonInForStatements = 
configuration.getInsertSpaceAfterSemicolonInForStatements();
+                       insertSpaceBeforeAndAfterBinaryOperators = 
configuration.getInsertSpaceBeforeAndAfterBinaryOperators();
+                       insertSpaces = configuration.getInsertSpaces();
+                       listChangedFiles = configuration.getListFiles();
+                       maxPreserveNewLines = 
configuration.getMaxPreserveNewLines();
+                       placeOpenBraceOnNewLine = 
configuration.getPlaceOpenBraceOnNewLine();
+                       semicolons = 
Semicolons.valueOf(configuration.getSemicolons().toUpperCase());
+                       tabSize = configuration.getTabSize();
+                       writeBackToInputFiles = configuration.getWriteFiles();
+                       for (String filePath : configuration.getFiles()) {
                                File inputFile = new File(filePath);
                                if (!inputFile.exists()) {
                                        throw new ConfigurationException("Input 
file does not exist: " + filePath, null, -1);
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 3f33aec..2a7938a 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
@@ -201,4 +201,238 @@ public class Configuration {
     {
         this.listFiles = b;
     }
+
+    //
+    // 'insert-spaces' option
+    //
+
+    private boolean insertSpaces = false;
+
+    public boolean getInsertSpaces()
+    {
+        return insertSpaces;
+    }
+
+    @Config
+    @Mapping("insert-spaces")
+    public void setInsertSpaces(ConfigurationValue cv, boolean b)
+    {
+        this.insertSpaces = b;
+    }
+
+    //
+    // 'insert-final-new-line' option
+    //
+
+    private boolean insertFinalNewLine = false;
+
+    public boolean getInsertFinalNewLine()
+    {
+        return insertFinalNewLine;
+    }
+
+    @Config
+    @Mapping("insert-final-new-line")
+    public void setInsertFinalNewLine(ConfigurationValue cv, boolean b)
+    {
+        this.insertFinalNewLine = b;
+    }
+
+    //
+    // 'open-brace-new-line' option
+    //
+
+    private boolean placeOpenBraceOnNewLine = false;
+
+    public boolean getPlaceOpenBraceOnNewLine()
+    {
+        return placeOpenBraceOnNewLine;
+    }
+
+    @Config
+    @Mapping("open-brace-new-line")
+    public void setPlaceOpenBraceOnNewLine(ConfigurationValue cv, boolean b)
+    {
+        this.placeOpenBraceOnNewLine = b;
+    }
+
+    //
+    // 'insert-space-for-loop-semicolon' option
+    //
+
+    private boolean insertSpaceAfterSemicolonInForStatements = false;
+
+    public boolean getInsertSpaceAfterSemicolonInForStatements()
+    {
+        return insertSpaceAfterSemicolonInForStatements;
+    }
+
+    @Config
+    @Mapping("insert-space-for-loop-semicolon")
+    public void setInsertSpaceAfterSemicolonInForStatements(ConfigurationValue 
cv, boolean b)
+    {
+        this.insertSpaceAfterSemicolonInForStatements = b;
+    }
+
+    //
+    // 'insert-space-control-flow-keywords' option
+    //
+
+    private boolean insertSpaceAfterKeywordsInControlFlowStatements = false;
+
+    public boolean getInsertSpaceAfterKeywordsInControlFlowStatements()
+    {
+        return insertSpaceAfterKeywordsInControlFlowStatements;
+    }
+
+    @Config
+    @Mapping("insert-space-control-flow-keywords")
+    public void 
setInsertSpaceAfterKeywordsInControlFlowStatements(ConfigurationValue cv, 
boolean b)
+    {
+        this.insertSpaceAfterKeywordsInControlFlowStatements = b;
+    }
+
+    //
+    // 'insert-space-anonymous-function-keyword' option
+    //
+
+    private boolean insertSpaceAfterFunctionKeywordForAnonymousFunctions = 
false;
+
+    public boolean getInsertSpaceAfterFunctionKeywordForAnonymousFunctions()
+    {
+        return insertSpaceAfterFunctionKeywordForAnonymousFunctions;
+    }
+
+    @Config
+    @Mapping("insert-space-control-flow-keywords")
+    public void 
setInsertSpaceAfterFunctionKeywordForAnonymousFunctions(ConfigurationValue cv, 
boolean b)
+    {
+        this.insertSpaceAfterFunctionKeywordForAnonymousFunctions = b;
+    }
+
+    //
+    // 'insert-space-binary-operators' option
+    //
+
+    private boolean insertSpaceBeforeAndAfterBinaryOperators = false;
+
+    public boolean getInsertSpaceBeforeAndAfterBinaryOperators()
+    {
+        return insertSpaceBeforeAndAfterBinaryOperators;
+    }
+
+    @Config
+    @Mapping("insert-space-binary-operators")
+    public void setInsertSpaceBeforeAndAfterBinaryOperators(ConfigurationValue 
cv, boolean b)
+    {
+        this.insertSpaceBeforeAndAfterBinaryOperators = b;
+    }
+
+    //
+    // 'insert-space-comma-delimiter' option
+    //
+
+    private boolean insertSpaceAfterCommaDelimiter = false;
+
+    public boolean getInsertSpaceAfterCommaDelimiter()
+    {
+        return insertSpaceAfterCommaDelimiter;
+    }
+
+    @Config
+    @Mapping("insert-space-comma-delimiter")
+    public void setInsertSpaceAfterCommaDelimiter(ConfigurationValue cv, 
boolean b)
+    {
+        this.insertSpaceAfterCommaDelimiter = b;
+    }
+
+    //
+    // 'collapse-empty-blocks' option
+    //
+
+    private boolean collapseEmptyBlocks = false;
+
+    public boolean getCollapseEmptyBlocks()
+    {
+        return collapseEmptyBlocks;
+    }
+
+    @Config
+    @Mapping("collapse-empty-blocks")
+    public void setCollapseEmptyBlocks(ConfigurationValue cv, boolean b)
+    {
+        this.collapseEmptyBlocks = b;
+    }
+
+    //
+    // 'tab-size' option
+    //
+
+    private int tabSize = 4;
+
+    public int getTabSize()
+    {
+        return tabSize;
+    }
+
+    @Config
+    @Mapping("tab-size")
+    public void setTabSize(ConfigurationValue cv, int b)
+    {
+        this.tabSize = b;
+    }
+
+    //
+    // 'max-preserve-new-lines' option
+    //
+
+    private int maxPreserveNewLines = 2;
+
+    public int getMaxPreserveNewLines()
+    {
+        return maxPreserveNewLines;
+    }
+
+    @Config
+    @Mapping("max-preserve-new-lines")
+    public void setMaxPreserveNewLines(ConfigurationValue cv, int b)
+    {
+        this.maxPreserveNewLines = b;
+    }
+
+    //
+    // 'semicolons' option
+    //
+
+    private Semicolons semicolons = Semicolons.INSERT;
+
+    public String getSemicolons()
+    {
+        return semicolons.value;
+    }
+
+    @Config
+    @Mapping("semicolons")
+    public void setSemicolons(ConfigurationValue cv, String b)
+    {
+        this.semicolons = Semicolons.valueOf(b.toUpperCase());
+    }
+
+    //
+    // 'ignore-parsing-problems' option
+    //
+
+    private boolean ignoreParsingProblems = false;
+
+    public boolean getIgnoreParsingProblems()
+    {
+        return ignoreParsingProblems;
+    }
+
+    @Config(advanced = true)
+    @Mapping("ignore-parsing-problems")
+    public void setIgnoreParsingProblems(ConfigurationValue cv, boolean b)
+    {
+        this.ignoreParsingProblems = b;
+    }
 }
diff --git 
a/formatter/src/main/java/org/apache/royale/formatter/config/Semicolons.java 
b/formatter/src/main/java/org/apache/royale/formatter/config/Semicolons.java
new file mode 100644
index 0000000..7abee7a
--- /dev/null
+++ b/formatter/src/main/java/org/apache/royale/formatter/config/Semicolons.java
@@ -0,0 +1,30 @@
+////////////////////////////////////////////////////////////////////////////////
+//
+//  Licensed to the Apache Software Foundation (ASF) under one or more
+//  contributor license agreements.  See the NOTICE file distributed with
+//  this work for additional information regarding copyright ownership.
+//  The ASF licenses this file to You under the Apache License, Version 2.0
+//  (the "License"); you may not use this file except in compliance with
+//  the License.  You may obtain a copy of the License at
+//
+//      http://www.apache.org/licenses/LICENSE-2.0
+//
+//  Unless required by applicable law or agreed to in writing, software
+//  distributed under the License is distributed on an "AS IS" BASIS,
+//  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+//  See the License for the specific language governing permissions and
+//  limitations under the License.
+//
+////////////////////////////////////////////////////////////////////////////////
+
+package org.apache.royale.formatter.config;
+
+public enum Semicolons {
+       IGNORE("ignore"), INSERT("insert"), REMOVE("remove");
+
+       Semicolons(String value) {
+               this.value = value;
+       }
+
+       final String value;
+}
\ No newline at end of file

Reply via email to