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

Continuous Integration Support #91

Closed
ratsclub opened this issue Oct 25, 2023 · 6 comments
Closed

Continuous Integration Support #91

ratsclub opened this issue Oct 25, 2023 · 6 comments

Comments

@ratsclub
Copy link
Contributor

Hello,

I would like to run smlfmt on CI to check if the files are formatted correctly. I tried to run all the command-line flags and couldn't find one that would return an error code in case of a file not being formatted. Is there some way to setup something like this?

Thanks for the awesome tool!

@shwestrick
Copy link
Owner

Yes, that should be easy to set up! Although, smlfmt should already exit with a nonzero return code when it fails.

Could you show me the command you tried and what return code you got?

@shwestrick
Copy link
Owner

Oh wait, or maybe you're looking for a mode to check if a file has previously already been formatted by smlfmt?

@ratsclub
Copy link
Contributor Author

Could you show me the command you tried and what return code you got?

  • smlfmt --preview-only src/railroad.sml: doesn't exit with a nonzero return code.
  • smlfmt src/railroad.sml: asks for [y/N], I don't think I can use it on CI

@shwestrick
Copy link
Owner

shwestrick commented Oct 25, 2023

Hmm sorry, I'm still confused about what you're asking for.

It looks like you're trying to reformat src/railroad.sml and check whether or not it succeeds (e.g., check if there is an SML syntax error). If smlfmt --preview-only src/railroad.sml doesn't exit with nonzero return, then it succeeded.

Maybe you're trying to do something else? Are you trying to check if src/railroad.sml has already been formatted in the past? One way of doing this would be to run smlfmt on it again, and see if the result is different:

$ cat src/railroad.sml | smlfmt --stdio | diff src/railroad.sml -

This command has returncode 0 if src/railroad.sml has already previously been formatted, and returncode 1 otherwise.

@ratsclub
Copy link
Contributor Author

Oh, yes! This is exactly what I wanted, I'm sorry if I was not clear enough. The idea would be to feed smlfmt my *.mlb file and have it return an error code if the code is not formatted. Do you know if I can do something like this?

@shwestrick
Copy link
Owner

shwestrick commented Oct 29, 2023

Ah I see! I don't think it would be too difficult to implement, but realistically I probably won't have time to get to it right away.

Any chance you're interested in giving it a shot? I'd be happy to review a PR.

Here's some thoughts:

  • We would need to add a new command-line flag to smlfmt. Not sure what a good name would be; open to suggestions.
  • I think we would only need to modify formatOneSML.
    • When you pass a .mlb, it ultimately calls this function on every .sml file.
  • Idea would be: if the flag is turned on, run the formatter as normal, and then check if there is a difference between the new formatted code and the original contents of the file.
    • If there is a difference, then exit early with an error.
    • If no difference, then silently continue (i.e., don't do anything else for this .sml file)
    • This would find the first "offending" file. Alternatively, it wouldn't be too difficult to accumulate a list of offending files and print them all out.

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

No branches or pull requests

2 participants