I just wanted to follow up by mentioning that I recently added the ability
for the formatter load configuration files, in addition to the existing
command line options. It will automatically detect an asformat-config.xml
file in the current working directory, allowing you to easily specify
configuration options for a specific project. You can also use a new
-load-config option to load a configuration file from any path, not just
the current working directory. You can use -skip-local-config-file to
ignore the asformat-config.xml file.

Once we release the next Royale update, I plan to make
vscode-as3mxml automatically detect the asformat-config.xml file too, so
you will be able to configure formatting options for both the command line
and VSCode at the same time.

I also updated the Royale documentation to add a section for the formatter:

https://apache.github.io/royale-docs/formatter

--
Josh Tynjala
Bowler Hat LLC <https://bowlerhat.dev>


On Wed, Sep 22, 2021 at 10:42 AM Josh Tynjala <joshtynj...@bowlerhat.dev>
wrote:

> Hey everyone,
>
> I recently created asformat, which is a formatter for ActionScript code.
> It is based on the Royale compiler's lexer that creates a stream of tokens.
> One nice thing about working with the token stream versus a full AST
> (Abstract Syntax Tree) is that it's easier to keep track of existing
> whitespace to preserve it where appropriate.
>
> In addition to command line usage, this formatter is intended to
> eventually be used by IDEs/editors, such as VSCode and Moonshine.
>
> You can find asformat in nightly builds for now. I'm still testing it with
> existing codebases, but I wanted to share my progress so that others could
> check it out, if interested.
>
> Usage:
>
> Format a file, and write it back to the file system:
>
> asformat --write-files src/com/example/MyClass.as
>
> Alternatively, format all .as files in a directory:
>
> asformat --write-files src
>
> Options:
>
> --write-files: Writes the formatting changes back to the original files.
> If a file has no formatting changes, it will not be modified. Alias: -w.
> Default: false.
>
> --list-files: Lists the files that have been changed by formatting. If a
> file has no formatting changes, it won't be listed. Alias: -l. Default:
> false.
>
> --insert-spaces: Indents with spaces instead of tabs. (Default: false)
>
> --tab-width: The width of tabs when insert-spaces is specified. (Default:
> 4)
>
> --insert-final-new-line: Adds a final empty line at the end of the file,
> if one doesn't exist already. (Default: false)
>
> --open-brace-new-line: Controls whether an opening curly brace is placed
> on a new line, or is "cuddled" on the current line. (Default: true)
>
> --insert-space-for-loop-semicolon: Controls whether a space is inserted
> after the semicolons in a for() loop. (Default: true)
>
> --insert-space-control-flow-keywords: Controls whether a space is inserted
> between control flow keywords (like if, for, while) and the following (
> open parenthesis. (Default: true)
>
> --insert-space-anonymous-function-keyword: Controls whether a space is
> inserted between the function keyword and the following ( open parenthesis,
> if the function is anonymous (if it doesn't have a name). (Default: false)
>
> --insert-space-binary-operators: Controls whether a space is inserted
> before and after binary operators (like +, -, *, /, &&, ||, etc.) (Default:
> true)
>
> --insert-space-comma-delimiter: Controls whether a space is inserted after
> comma delimiters in Object and Array literals. (Default: true)
>
> --collapse-empty-blocks: Controls whether empty blocks are collapsed so
> that the opening and closing curly brace are both on the same line or not.
>  (Default: false)
>
> --max-preserve-new-lines: Specify the maximum number of new line
> characters that are allowed to appear consecutively. (Default: 2)
>
> --semicolons: Controls how semicolons are handled. Valid values are
> insert, remove, and ignore. Insert means that missing semicolons are
> inserted. Remove means that all semicolons are removed, and ignore means
> that there is no change to semicolons in the file. (Default: insert)
>
> Additional notes:
>
> If neither --write-files nor --list-files is specified, the formatted
> source code is written to standard output instead.
>
> If no files are specified, asformat waits for standard input instead.
>
> --
> Josh Tynjala
> Bowler Hat LLC <https://bowlerhat.dev>
>

Reply via email to