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