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

Add Source Code Typing Tool #15211

Draft
wants to merge 8 commits into
base: master
Choose a base branch
from
Draft

Conversation

Vici37
Copy link

@Vici37 Vici37 commented Nov 21, 2024

This PR introduces a new crystal tool apply-types subcommand as described in this crystal forum post and initially implemented in this other repo as a stand alone tool. A tool that fully types a crystal file is obviously very tightly coupled with the language and compiler semantic, and so having this tool be part of the compiler itself feels like the correct direction.

That being said, I'm not 100% it's ready yet, but I do think it's ready enough at least to solicit feedback from anyone who is willing to provide it :)

OUTPUT
end

# it "parses, runs semantic, and types everything" do
Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Commenting out this spec for now - it runs prelude as well as try to type everything the test specific file (but that test file isn't part of this PR yet).

# logic is in `crystal/tools/formatter.cr`.

class Crystal::Command
private def typer
Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Entrypoint for the apply-types tool

@@ -0,0 +1,526 @@
module Crystal
class SourceTyper
Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

In the source-typer repo, a lot of these classes / structs are broken into their own files. Precedence in the compiler seems to be to put a lot of these smaller bits into a single file if they can all be more or less self contained.

@crysbot
Copy link

crysbot commented Nov 21, 2024

This pull request has been mentioned on Crystal Forum. There might be relevant details there:

https://forum.crystal-lang.org/t/exploring-the-compiler/7343/21

@nobodywasishere
Copy link
Contributor

This is awesome!

Implement typer writing (inefficiently)

Implement formatter, support multiple filename inputs

Partial support for types, still need modules

Update to latest source typer changes

Add code comments

Comment out broken spec for now

Uncomment and fix final spec, add semantic / progress_tracker flags

Remove focus: true (oops)

Good ol' print debugging for windows CI failure

Reimplement def visitor def locator matching for windows

Back to print debugging

Fix and support windows drive letters for root folders
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging this pull request may close these issues.

4 participants