C++ editor enhancements/Proposal
This proposal aims to augment the features of the C++ editor to enhance coding ergonomy, effectiveness and navigation features by automating repeatable C++ tasks and reusing features present in the Java editor (including Quick Fixes, Annotations). The goal is to let C++ coding in CDT be closer to the ergonomy of JDT and Java: less distracting and repetitive, more supported by smart code generation, and thus faster and more effective.
The Eclipse CDT is used by programmers in many areas, including business, mobile, embedded and game development. C++ despite its old age still manages to be the primary language choice in numerous environments. The language is still evolving, and so should the toolsets.
The aim of the Google Summer of Code project proposed here is to enhance the functionality of, in the author's oppinion, most outdated and very important part of the CDT - the C++ code editor, in order to improve the code generation, edition and navigation features, to enhance the ergonomy end effectiveness of the editor.
There are numerous features in existing Eclipse components, like the quick fixes, annotations, selection expansion. They successfully aid the developers using Eclipse JDT, but haven't been introduced to CDT.
The goal is to assist all CDT users by providing faster automated ways to perform common C++ programming tasks by using the mentioned features. This would relieve the programmers of many repetitive tasks and let them stay focused on the actual problems being solved.
To carry out this project, I'm going to become acquainted with relevant parts of the codebase of CDT and JDT. Feedback from C++ developers will also be very valuable to focus the planned work on most important and most wanted features of the editor. Therefore, CDT and JDT code exploration and discussions with developers are two activities which can be done in parallel during the warm-up period.
The expected result of this project is a new version of the C++ Editor component of Eclipse CDT, with new functionality introduced. The exact added features should reflect the needs of C++ developers and provide a modern way of performing repetitive tasks. Feasible possibilities include:
- Quick Fixes features for common editing scenarios, i.e. for simultaneous .cpp/.h edition
- Selection expansion
- Quick documentation view in Context Assist or on hover
After the completion, programming in CDT should become closer to programming in Java and JDT - automated and convenient. A CDT user should find the code edition faster, less repetitive, less distracting and more fluent.
1) Introduction to CDT and JDT codebase, est. deadline 16.V.
I plan to devote the first weeks of Google Summer of Code to accomodate myself with the relevant parts of codebase of CDT and JDT (as I plan to reuse some features of the latter). I will find and familiarise with the components likely to help in achieving the goal of this project (i.e. the Quick Fixes framework and the C++ AST).
2) Problem analysis and scheduling, est. deadline 6. VI.
The second objective is to list the specific areas for possible improvement, including the most cumbersome and/or repetitive tasks of C++ code creation, editing, review and navigation. Discussions with C++ programmers (both CDT users and other IDEs users) would be a valuable source.
Every problem reported this way will be analysed and discussed with the mentor and the reporter about its magnitude and best way to solve using the tools examined during milestone 1.
A selection of most important problems and solutions will be scheduled to be implemented during the rest of Google Summer of Code.
3) Implementation and testing, onwards
A detailed schedule of this part, consisting of implementation of solutions of a number of common problems, shall be devised in milestone 2. Every solution created will be tested for correctness and acceptance.
During early stages of the project, I'll likely use the help of my mentor to diagnose the possible areas of improvement of the CDT editor and to find the best solutions for them. Later, during the implementation, I may ask for hints on how to reuse parts of the JDT in a good way to make the resultant code not only working, but maintainable and well-engineered. I might also need help with details of Eclipse plug-in development process, if my current knowledge
Therefore, from my mentor I expect:
- an open attitude for discussions,
- some background in C++,
- knowledge of Eclipse plug-in development.
While not critical, familiarity of codebase of CDT and/or JDT may also be helpful in case of me having some problems in understanding a component.