A couple weeks ago, a PR of mine was merged into the F# compiler repo, fixing an issue that bothered me with unused
open statement detection. Even just a few years ago, this would have seemed like a daunting task to me, so this felt like a real achievement.
A great motivator for me was to watch this relaxed, slow-moving presentation from Don Syme (the man himself), fixing a bug in the compiler live. It is filled with useful nuggets of information about the structure of the codebase and coding conventions, and that definitely helped me get around and understand what I was looking at.
I then read the available documentation, which is high quality: the README, the DEVGUIDE, and the Compiler Guide. I really appreciate that all this documentation is right there in the repo, it makes it easy to access, consume and update.
Having worked with Github daily for about a year, I had become familiar with the PR process. Nonetheless, one mistake I made was to clone the actual
dotnet/fsharp repo instead of forking it and then cloning my fork; once I had the fix commited, I was unable to push it as, of course, I don't have the rights on
dotnet/fsharp. If that happens to you, it's easy to retarget your local repo to your fork with
git remote set-url origin https://github.com/yourusername/yourfork.git
Now you'll be able to
git push your changes as they'll go to your fork.
I made the mistake of trying to debug the F# tools on the currently released Visual Studio. Currently, this requires Visual Studio Preview, which can be installed side-by-side.
I also got a mysterious error trying to run the tests but you can always run the tests directly on the compiled dll with
dotnet test <your test dll>. I also added
--verbosity detailed to get the result of each test printed to the console.
Overall, I'm surprised the process was so straightforward for what is a large codebase with a long history. The F# tools definitely need some love, so I hope this helps someone out there trying to improve them.