Day 9 of GSoC

With the help of my mentor, John the direction of my project is more concrete now.

Phase - 1

Spyder is a scientific IDE which I have used in some of my other projects. Although it does have a core-maintained plugin for pylint, the plethora of bears provided by coala would be a welcome addition. To achieve this, the following needs to be done:

First off, to introduce the difference between plugins in spyder from the ones in text editors like vim and sublime-text, plugins in the latter category are external packages that interface with the editor through a certain set of APIs. In Spyder, plugins are first-class modules that can do almost anything that the built-in ones (Editor, Console, Static Code Analysis, Profiler, etc) can, since the built-in ones are actually structured as plugins themselves. This also leads to a drawback - in spyder the plugins can’t be reloaded the same way without actually terminating the python instance. This isn’t good news for actually testing the plugin. To resolve this issue, plugins are structured as standalone GUI widgets which can be launched, modified and tested separately. . So, depending on what we want to test, we can usually just launch the plugin without the whole Spyder mainwindow (which can be done almost instantly). Only when we actually need to test the interaction with the Spyder GUI, do we need to actually launch spyder entirely. Also another resolution to this is by mocking in unit-tests.

The file-hierarchy of the coala-spyder plugin is structured as:

coala-spyder

where coalagui.py will contain the independent widget which can be tested as a stand-alone entity. confpage.py will contain configuration options and plugin.py interfaces our widget with the spyder ide.

The way that coala can interface with the plugin is directly through python as a module using coalib.coala, although for a more immediate response we can use the work of another two other contributors to coala, Boxuan Li and Ce Gao. The usefulness lies in invoking coala on a specific file instead of the entire project. This also means faster and useful results delivered to the user.

More on details of testing and continuous integration in future posts, but briefly, we can use pytest and circleci to deal with it.

Phase-2

Jupyter lab is something new to me, although I have used jupyter notebooks extensively in projects. It also paves the way for coala to be integrated in another scientific environment. In this case, the plugin itself will be written using typscript and python. The former of which I have not tried before but I am keen on using. I’ll leave this section short as there’s a lot I need to learn about before diving into specifics which I plan to do partially before and during phase-1.

Phase-3

I plan on leaving this phase for maintenance or things left out in the previous two phases (if nothing, maybe including more features) or other work that can be done on other text editors. More on this later too.