This blog post is regarding my GSoC project in detail.
Project name: Enhance coala-quickstart
What exactly is coala?
If I had to describe it in one line, I would describe coala as “a modular and language-agnostic tool for performing static code analysis”.
Okay, then what is coala-quickstart?
coala-quickstart is a tool with an aim to help users to quickly get started with coala by doing all the boilerplate work. It generates a .coafile (coala’s configuration file) that is tailored to the project. coala-quickstart automatically identifies bears for the project based on the languages used in the project and has a simple command-line interface for taking user’s input when required.
My project in brief
The primary objectives of my project will be:
- Develop a mechanism to extract information of interest to coala (like setting values) from some common kinds of project files.
- Make coala-quickstart include relevant bears to the project in the generated .coafile.
- Improving the user interface, increasing automation and adding some minor features.
How does the project help coala?
The aim of coala is to make static code analysis easier for the users. However, getting started with coala for a user requires prior knowledge about different bears coala has (users may get confused among lots of available options), how to create a correct coafile, what values to provide for settings, avoid duplicity among the bears, what bear-dependencies to install, etc.
The ultimate goal of the project is to overcome these barriers to some extent and generate a more tailored (project specific) coala configuration file with less user effort and time.
Keeping in mind coala has upcoming projects like “aspects” in this direction, the above changes will be modular and extensible so that they can be used in other parts of coala and can easily be integrated with future projects.
Phase wise breakdown
PHASE 1 (Collecting the information)
The first phase of the project involves setting up an information extraction and utilization mechanism for coala and the extract useful information from information rich meta-files like “Gruntfile.js”, “.editorcofig”, “Gemfile” and few others. My primary focus in community bonding phase would be to research about the structure of these files and what all information can be extracted from them.
PHASE 2 (Recommending and Filtering based on new information)
This phase involves recommending and filtering bears by utilizing the bears’ metadata, extracted information like linters used in the project, installed bear dependencies, languages detected, importance of bears, installed dependecies and bear capabilities.
After the bears are filtered, and relevant information have been extracted out of the projects, the users are notified, a more tailored version of coafile is written. The major challenge of this phase would be come up with an algorithm that optimally combines all the above features to recommend the best-suited Bears for the projects.
PHASE 3 (Improving usability)
This phase involves CLI improvements. Some of the major changes are the autocomplete feature, input validation, allowing users to enter flexible values (like allowing T, yo, yes, yeah, etc for True), Input Validation and Sanitization, improve formatting and fix redundant warnings.
That’s all about my GSoC project. My fun and awesome mentors are @adtac – Adhityaa Chandrasekar and @Adrianzatreanu – Zatreanu Adrian-Gabriel.
PS: Stay tuned for more updates related to my GSoC Bonding phase.