You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@royale.apache.org by co...@cristallium.com on 2022/10/05 07:01:16 UTC

Re: Introducing asformat

Hi all,

Congratulations, this is wonderful !

Le 2022-09-29 08:16, Harbs a écrit :

> Yes. Most of us have similar stories. As long as you're not afraid to 
> start learning something new you will be surprised how much you can 
> learn in small steps.
> 
> Harbs
> 
> On Sep 29, 2022, at 12:02 AM, Josh Tynjala <jo...@bowlerhat.dev> 
> wrote:
> 
> Around 2015 or so, I had never worked on a compiler, formatter, or 
> linter.
> 
> I started trying to use the Royale compiler (still called the FlexJS
> compiler at the time) to create the AS3/MXML extension for VSCode. 
> Soon, I
> found a bug in the compiler that prevented my VSCode extension from 
> working
> properly. I tried my best to understand a small section of the 
> compiler's
> code, and I was able to fix the bug and submit a pull request. 
> Eventually,
> I fixed some more bugs, and I was asked to join the project as a
> contributor. Since then, I've learned how larger and larger parts of 
> the
> compiler work. To be honest, it took probably 5-7 years before I really
> felt that I understood most of what the compiler was doing. It just 
> takes a
> lot of time and persistence.
> 
> Recently, I was able to recognize that I could reuse large parts of the
> compiler's code to create a formatter and a linter for ActionScript 
> (the
> ActionScript language name is where the "as" prefix of "asformat" and
> "aslint" comes from, of course). I had never created a formatter or a
> linter before, and it took some trial and error to figure out the best 
> way
> to do things. For the formatter, I tried to format one little thing 
> first,
> like `if (condition) {}` or something like that. Then, I slowly added 
> more
> and more (for, while, try/catch, class A extends B, etc.). It took 
> months
> of work, which was built on my previous years of work understanding and
> maintaining the compiler.
> 
> Honestly, like most of everything I've ever tried to learn, I started 
> with
> one small thing. Don't try to understand everything all at once. At 
> least
> not in detail. It's often fine to have a general idea of how something
> works at a high-level, even if you don't understand it completely. 
> Then,
> you can dive into the details later. Anyway, over the course of years
> working on the same thing, you can really learn a lot.
> 
> --
> Josh Tynjala
> Bowler Hat LLC <https://bowlerhat.dev>
> 
> On Wed, Sep 28, 2022 at 1:00 PM Maria Jose Esteve <mj...@iest.com> 
> wrote:
> 
> How can you know about so many things? asformat, aslint, linter... omg,
> you guys never cease to amaze me... I had to look up the meaning of 
> each of
> these words :(
> 
> I don't feel able to help you with any of this but, Yishay, if you 
> teach
> me I can be your backup for the releases.
> 
> Hiedra
> 
> -----Mensaje original-----
> De: Yishay Weiss <yi...@hotmail.com>
> Enviado el: miércoles, 28 de septiembre de 2022 20:16
> Para: dev@royale.apache.org
> Asunto: RE: Introducing asformat
> 
> It's great to see this progress. I expect to see as-linter replacing
> SonarQube in our current project. Do you think it would be hard to
> integrate it with GitHub actions?
> 
> The -watch option is already being used and is a big productivity 
> boost.
> 
> I expect I'll make use of asformat at some point as well. Thanks for 
> all
> this Josh.
> 
> I may get some time at the end of this month to work on a release, but 
> I
> would prefer to do it with another volunteer, to share knowledge and 
> add
> redundancy. Also, I want to use the new Azure VM I created (Apache 
> funded)
> instead of Alex's so we have redundancy in that respect as well.  The 
> VM
> isn't all set up yet so I will need to work on that.
> 
> From: Josh Tynjala<ma...@bowlerhat.dev>
> Sent: Wednesday, September 28, 2022 6:35 PM
> To: dev@royale.apache.org<ma...@royale.apache.org>
> Subject: Re: Introducing asformat
> 
> A new release sounds good to me! I just updated the compiler release
> notes, and there's a decent amount of stuff to be included. Not just 
> these
> formatter improvements, but also the new linter, headless JS RoyaleUnit
> tests with Playwright, and the --watch compiler option are all new 
> since
> the last release.
> 
> --
> Josh Tynjala
> Bowler Hat LLC <https://bowlerhat.dev>
> 
> On Wed, Sep 28, 2022 at 6:45 AM Harbs <ha...@gmail.com> wrote:
> 
> That's great!
> 
> This is a good reason to get another release out. :-)
> 
> Harbs
> 
> On Sep 28, 2022, at 12:24 AM, Josh Tynjala
> <jo...@bowlerhat.dev> wrote:
> 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 < 
> https://apache.github.io/royale-docs/formatter><https://apache.github.
> io/royale-docs/formatter%3e>
> --
> Josh Tynjala
> Bowler Hat LLC <https://bowlerhat.dev/>
> 
> On Wed, Sep 22, 2021 at 10:42 AM Josh Tynjala
> <joshtynjala@bowlerhat.dev <ma...@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/>