Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat: refactor to split AST specification out as its own module #2911

Merged
merged 1 commit into from May 4, 2021

Commits on May 4, 2021

  1. feat: refactor to split AST specification out as its own module

    Fixes #2726
    Fixes #2912
    
    This PR is the basis for a big cleanup and reorganisation of the AST.
    This first step takes the file `types/src/ts-estree.ts` and splits it up in its entirety.
    This file was a monolith at 1700 lines - meaning it was a pain to organise and manage, and there was no way to isolate/restrict certain things (aside from adding comments).
    
    This PR should ultimately be a no-op - there should be no breaking changes here.
    I did fix up a number of types which I found when organising files into their folders.
    
    Whilst this PR ultimately creates more LOC, the isolation enables a few things:
    - By splitting the AST into its own module, it's isolated so easier to manage / govern
    - By splitting each AST node into its own folder we can cleanly document and link to individual node specs
    - By grouping nodes decls by folder, it's easier to inspect the types to validate unions are correct.
        - I found a number of invalid nodes in unions in this PR which have been fixed.
    - In a future PR we can:
        - Add lint rule(s) to validate unions are correct (eg ensure all `Expression` types are included in the `Expression` union).
        - Easily add documentation about the node without cluttering things up
        - Colocate fixtures/snapshots with the node specs to document the cases that we expect a node to show up
        - Colocate the conversion logic here so that it's easier to validate that the spec and the conversion logic are in sync
            - This will make it much easier to implement and maintain #1852
    bradzacher committed May 4, 2021
    Copy the full SHA
    a5f8933 View commit details
    Browse the repository at this point in the history