This is my final submission for GSoC and contains description of my work. I've provided links to the PRs which are well documented, contain reference to all the issues fixed by them, and have descriptions of what the code is doing.
Chronologically --
- I started out by following Babel's official resources on getting started, sending some PRs to fix documentation along the way after trying and testing things out in the beloved ASTExplorer.
- After I got a hold on ASTs, how babel internals and transforms were working, how to use babel-types, I started work on rewrite12 of the parameter inlining logic to use as a vehicle to implement what I'd learnt and to smooth out any problems.
- Then I went after the Object Rest/Spread, my first big PR with 21 commits. This acted as my first exposure to looking up the spec when you have no definite answer about what the correct behavior is, and in dealing with reviews, code style, subtle bugs, and all the things that come after coding.
- After that, I started on the decorators transform. This was a task with challenges of its own, with having to completely demistify the Syntax Productions in Babylon to know what's valid and what's not, to understanding the internals of Babylon, for which I started making a guide. I also had to look at all the existing work by people who'd already taken a stab at this 12 to salvage the useful parts of their code, and to understand where they stood on certain matters. The end result123 ended up being a great lesson in making compromises and forming a consensus in the people and all parties - the users, spec designers, contributors
- Following that, I started working on implementing the transform part of the decorators proposal, which is still a WIP - with pending tests for class heritage and pending reviews.
All in all, this was a great experience takeaways of which are numerous, but I got what I came for - Contributing to a project I used frequently but never thought much about how it was sustaining itself, a lot of compiler concepts, interacting with the JavaScript devloper community (partly in thanks to where Babel stands - a tool at the epicenter of the dev community) and getting to know JavaScript AST (now I can make my own coffeescript if I ever get bored)
- Use first binding for multiple var declarations
- Non string computed keys in object-rest-spread
- Switch continue
- Make outerPath and innerPath explicit in stop/skip examples
- path.container is an array of all sibling nodes
- Fix the code example for inserting into ClassMethod
- Add a section on troubleshooting [skip ci]
- Add the gsoc blog post
- Add feature to pass array of deps to a helper
a. Current Commit: #adbb62f1cf3241
b. Left To Do: Needs work on things pointed out in the review by nicolo-ribaudo - Decorators 2 Transform [WIP]
a. Current Commit: #44465f2fcbc38bca
b. Left To Do: Add tests for decorators manipulating heritage of the decorated class. And to make minor changes for any reviews I'll recieve in future before this can be merged. - A guide to Babylon
a. Current Revision: rev 1
b. Left To Do: Make it presentable so it could serve as an official guide to Babylon