Google Summer of Code '16 Summary

The Google Summer of Code program has come to an end and it’s been an amazing experience. I’ve learnt a lot in the last three months. Apart from gaining technical knowledge, I’ve learnt how to communicate well within a team, manage deadlines, and maintain code.

This blog post is the final report of my Google Summer of Code project.

Commits

The tables below list all the commits I’ve made to various coala repositories during the project.

coala-eclipse

SHA Description
d5053c7 export: Update installation binary
fbdede5 plugin.xml: Add ‘Run coala’ button to toolbar
ae8d98e plugin.xml: Enable coala in all context menus
3abe286 BearMenu: List bears in ascending order
555e68f ExternalUtils: Ask user for non-optional settings
2b90dcc travis.yml: Disable P2 mirrors
0238e7d travis.yml: Use pre-release coala
f4283ec BearMenu: Use coala-json to get list of bears
9cf253d ExternalUtils: Check coala binary before execution
01af287 travis.yml: Add DISPLAY property
69da10e tests: Add QuickFixerTest
cd862e3 coafile: Ignore diff_match_patch.java
866ee2a MarkerTest: Update test
794c21a Add MarkerResolution and QuickFix
7d83c96 RuncoafileHandler.java: Show error dialog instead of logging error
844b84e Rename marker ID to com.coala.core.problem
9774379 ExternalUtils.java: Process all sections
1da1c83 tests: Add coafile test
1d7809d coafileHandler: Handle coafile
6a1bdc9 Rename Plugin.java to coafileHandler
a622983 ExternalUtils.java: Rename function
4c3befe tests: Update tests
fa70d22 menu: Add bears to menu
5141977 Move external utilities to separate class
848e7ab core/plugin.xml: Move menu to PackageExplorer
1699842 coafile: Add .coafile
b74a29d tests: Refactor for Gitmate
b9119a4 core: Refactor for Gitmate
19994cb README.md: Fix export URL
0422a33 README.md: Add build instructions
5c17301 README.md: Add Travis badge
a021905 README.md: Remove alternate install instructions
d32eaf5 export: Add update-site
3448ff9 core: Remove old update-site
55fb691 Add update site
cb97a57 Plugin.java: Use commons-exec to run coala-json
60dc1b1 lib: Add commons-exec
42a0ca2 tests: Add RunCmdTest
12f5360 MarkerTest: Improve test
e5cf094 RemoveMarkers.java: Refactor line length
4486410 Plugin.java: Refactor methods
895a88a Fix travis-ci
9af350a Moved tests to separate package
a7a142c Add Travis-Ci
e376fc1 Add LICENSE
7e03099 Remove ignored files
8be28c5 Add .gitignore
68758db tests: Add MarkerTest
e4426d6 Rename com.coala.plugin to com.coala.core
513e6be Clean up

coala-bears

SHA Description
359afc5 bears: Use coala-utils for string processing
d024ce5 requirements.txt: Update coala
9e5b42f ClangComplexityBear: Make cursor_kinds private
0fef458 CheckstyleBear: Handle column field correctly

coala

SHA Description
f9e46c8 coala-json: Add show_bears and filter_by_language
460a8c1 ConfigurationGathering: Add get_filtered_bears

In total, this accounts for a change of +6292 / -1802 LOC.

Current state of the plug-in

After working hard for three months on the plug-in, I’m happy to say that the plug-in is very much usable by the end user. The plug-in will make the life of developers who use Eclipse easy by allowing them to analyze code directly within the IDE.

The plug-in provides two ways to run the analysis. By using the pre-configured coafile and by manually selecting a bear. The first approach is preferred since it allows running the analysis on the whole project directory, in contrast with the manual approach which runs the analysis on a specific file.

Once the analysis is initiated, the plug-in communicates with coala using the coala-json binary. After the analysis is complete the results (if any) are marked on the editor along with the issue messages.

Another important feature of the plug-in is that it allows the user to automatically fix the issues if the bear used gives the corrected results. Once the markers are visible in the Problems view the Quick Fix option can be selected and the diff to correct the issue will be automatically applied to the source file. This internally uses Google’s diff-match-patch library.

There’re a lot of other things that the plug-in does that I haven’t covered in this post like user interaction for the bears that require user input, dynamic menus, etc. I’ve extensively covered my progress in the bi-weekly posts. Do check them out if you wish to know more.

Remaining work

Most of the stuff that I had proposed in my proposal is completed successfully. But I couldn’t complete work on the coafile editor. This task turned out to be much more complicated than I expected it to be. Nevertheless I’ll resume work on it as soon as possible.

Another feature I proposed for the plug-in was the “Bear creation wizard”. This was an experimental feature that I would’ve discussed with my mentor if my project completed before the deadline (which obviously didn’t happen). Also a similar tool called coala_bears_create was implemented by mr-karan in his project.

Acknowledgements

Finally I would like to thank Google for this amazing opportunity to work with some of the most amazing people, learn so much, and get paid to have fun. Special thanks to my mentor Harsh Dattani for helping me with the project, and the folks at Python Software Foundation and coala for selecting me to be a part of this programme.