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

Code modding #71

Draft
wants to merge 16 commits into
base: primary
Choose a base branch
from
Draft

Code modding #71

wants to merge 16 commits into from

Conversation

JohnnyMorganz
Copy link
Collaborator

Luau has CST nodes 🤔

create an identity codemod that should in theory return the same as the input (showing
roundtrippability of parsing + printing)

enough to get "b.luau" parsing and printing (currently without whitespace trivia)
Introduces the necessary steps to extract and store trivia on tokens

The serialization step now also stores the underlying source
and a cursor through the source. When we serialize a token,
we take everything in between the cursor position and the token
start position and extract that as trivia.

To speed up offset computation, we compute the line offsets
for the file beforehand.

We convert AstExprConstantString into a style of token.

Right now, this serializes trivia into one big chunk. And also,
it does not split trivia into leading and trailing trivia.
We will probably want to split trivia into whitespace + comments.

We should follow roslyn syntax rules where everything up to
and including a newline character is treated as trailing trivia
for the previous token, and everything after that is leading trivia
for the next token. This makes code modding nicer, as we can
treat nodes as discrete chunks.
We need to be careful with the order of serialization, as
otherwise it can mess up the cursor and trivia tracking.
This commit reorganises some of the serialization so it is in line

TODO: The serialization of commas is wrong, since we do it
too late. This is going to cause an assertion failure once we
hit an example that is comma separated
This better handles serialization of separators and related trivia
We can also reuse a visitor to print a node, by just printing all tokens
Enough to get the json.luau file working
Enough to parse the writeFile test case
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

1 participant