Contribute via Working with Code
The existing Codimension codebase is split between tree repositories:
- Brief Python parser cdm-pythonparser written mostly in C. The code is compiled into a Python extension module.
- Control flow Python parser cdm-flowparser written mostly in C++. The code is compiled into a Python extension module.
- Codimension IDE written mostly in Python 2
C/C++ were used to achieve the best possible performance of the parsers and their speed enabled implemention of smooth updates of the flowcharts and some other IDE views via catching pauses in typing. The parsers tend not to be changed very often so it is not a big deal to re-compile them after every change.
The IDE is written in Python 2. Python simplifies development and provides a very short cycle change-and-try. Thus it stimulates experiments in trying to achieve the best results.
If you dicided to be involved and it is not a new feature then you most probably will work with one of the mentioned repositories. Nevertheless what you can help with is not limited by these repositories. Some other opportunities are highlighted below.
If your choice is make some kind of changes (code or graphics) then probably the most convenient start for you would be to make Codimension running from the git clone. How to do that is described here. This will allow you a quick way to make the changes and check them righ away.
You can develop a new feature or fix a bug. Most probably it would require Python coding skills. When you do this part of development it is preferably to use a similar coding style that is used for the existing code. There is no formal coding style document so please just have a look a few files in the project tree.
If you do not know what to start with you can pick one of the existing bugs or feature requests from the bug tracking system on github.
You can implement the new functionality you want completely independent of the core IDE codebase using the plugins interface. How to create a plugin is decribed in the plugins tutorial. The tutorial covers not only a plugin interface description but also discusses a completed simple plugin which collects garbage in the IDE.
Other Language Parser
If you want to have your language supported on the graphics pane then you might want to develop a parser for that language. The parser should be a Python 2 extension module which basically provides a function call with a textual buffer as an argument and returns back a hierarchical data structure with what is inside the buffer. The data structure should mimic the one created for Python.
Most probably such an extension module needs to be written in a compilable language like C/C++. Your module needs to work fast to enable a smooth user experience of updating the flowchart diagrams while you are typing the code.
If there are no packages for your operating system or for your Linux distribution or you think you can do packaging better and you are willing to share your results, then we would be more than happy to provide the packages through this web site.
Making Codimension Available in Mainstream
One more thing which needs to be covered is to make the project available on the main stream Linux distributions. If you can cover this for your favorite distribution that would be great!
If you have any questions about contributing in the project please direct them to Sergey Satskiy.