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 <joshtynj...@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 <mjest...@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 <yishayj...@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<mailto:joshtynj...@bowlerhat.dev>
Sent: Wednesday, September 28, 2022 6:35 PM
To: dev@royale.apache.org<mailto:dev@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 <harbs.li...@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
<joshtynj...@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
<joshtynj...@bowlerhat.dev <mailto: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