Outreachy Mid-Point Progress
Tags: outreachy, opensource, ocaml
Published: 2023-07-27 22:33:31

As an Outreachy intern working on the OCaml project, I have reached the mid-point of my internship, and it's been a challenging and rewarding experience so far. For those who may not be familiar, Outreachy is a program that provides internships for underrepresented groups in technology, including women, people of color, and members of the LGBTQ+ community.

When I first applied for the program, I had no experience with open-source development and was nervous about my ability to contribute to such a high-profile project. However, with the support of my mentor PAUL-ELLIOT, the OCaml community, the Outreachy Community Administrators (Omotola, Sage, and Anna), and my co-interns, I have been able to make meaningful contributions to the project, improve my technical skills, and Interpersonal skills.

My main project for the internship is to ***Improve error reporting in existing ppxlib-based PPXs***, This was to be done by first enabling many errors to be reported by the editor, this is to be done by making the rewriting process to not stop once an exception is raised, but to catch that exception, recover from and move on to the next rewriter, by so doing, rewriters that were not supposed to raise an error are run and more information is displayed to the user. Then after that, to work on PPXs in the ecosystem to embed errors in the Parsetree(and reporting all these errors at the end of the compilation) instead of raising them.

Below are the contributions made so far in this internship period:
- When a transformation raises, the last valid AST is used 
as input to the upcoming transformations. All errors are collected. At the end, the errors are appended, as extension nodes, at its beginning 
([#447](https://github.com/ocaml-ppx/ppxlib/pull/447), @burnleydev1)

- Embed errors in the AST instead of raising ([#13](https://github.com/janestreet/ppx_fields_conv/pull/13/), @burnleydev1) 

NB: PPXLIB has a notion of transformations, that modifies(Rewrites) the AST, and are run one after the other in a particular order.

Previously, when in the rewriting process(rewriting the AST), when a rewriter raises, the rewriting process stops in the middle of this process, canceling every other rewriter that has not yet been executed, converting this exception into an error and embedding it in the last valid AST.
With these changes, instead of stopping the entire rewriting process when an exception is encountered, the raising rewriter is ignored, the exception is converted into an error, and added to a list of errors, the previous successful AST is used to continue the rewriting process. The rewriting process continues, at the end of the AST rewriting, the errors collected are appended at the beginning of the resulting AST.
One of the biggest challenges I've faced so far is understanding the Syntax and workflow of the OCaml language. As someone who is new to open-source development, it can be overwhelming to navigate a large and complex codebase. However, by asking questions and seeking help from my mentor and the community, I have been able to gain a better understanding of the project and make progress on my tasks.

Another challenge I've faced is dealing with the uncertainty and ambiguity that comes with working on an open-source project. In a traditional work setting, there are often clear expectations and deadlines, but in open-source development, things can be more fluid. This can be frustrating at times, but it has also taught me the importance of communication, flexibility, and patience.

Despite these challenges, I have also had many positive experiences during my internship. One of the most rewarding aspects has been seeing my contributions merged and added as changes to the recent release, and to think that these will be used by others is really exciting to me and encourages me to work more.

As I move into the second half of my internship, I am looking forward to continuing my work on PPXLIB and exploring other PPXs. I am also excited to continue learning and growing as a developer and open-source contributor. I would like to thank my mentor(Paul-Elliot), Sonja Heinze , my co-interns(Piziedust and Aryan Godara), the OCaml community, and the Outreachy program for giving me this opportunity and supporting me along the way.

In conclusion, My mid-point experience has been a challenging but rewarding one. I have faced many obstacles, but with the support of my mentor, and the OCaml community, I have been able to make meaningful contributions to the project and improve my technical skills. I am excited to see what the next half of my internship holds and I am looking forward to continuing my work on PPXLIB and exploring other areas of the project.