DEC
17
2012

Kate/KDevelop October Sprint: What's new in KDevelop

This is the second part of the report on the joint Kate/KDevelop development sprint that took place in Vienna from the 23rd to 29th of October this year. It provides an overview of the changes in KDevelop. For more background and details about what happened with Kate during the sprint, make sure to read the first part of this report.

Many thanks to the KDE e.V., its sponsors and donors and the Join The Game contributors for funding the development sprint. Special thanks go to Joseph Wenninger for organizing the sprint, and also for funding parts of it. And finally thanks to Vivid Planet for inviting all attending developers to a great dinner.

What's new in KDevelop

The KDevelop hackers were very busy and productive during the sprint. About 550 commits were made in just one week. They address performance issues, fix bugs, polish the user interface or integrate new features. In the following, noteworthy changes are described.


Unit Test Integration

Unit Test

It was disappointing that Miha Čančula could not attend the development sprint. However, he worked quite hard in the months before. One thing he accomplished was a framework for Unit Test integration for KDevelop. This allows you to quickly run and debug the unit tests of your projects directly from KDevelop. Make sure to read his report on the new testing framework.

During the sprint we sat together and did a final review of the work and merged the unit test support into our development branches. Afterwards, Niko and Aleix got busy polishing the newly merged code and greatly improved and stabilized it. As with the rest of the KDevelop codebase, this new framework is easily extensible through plugins. Currently we have support for CTest/QTestLib and PHPUnit, while support for Ruby's Test::Unit is in the works.


File Templates

File/Project Templates

Unit test support was something that Miha worked on in his spare time. This year he was also a Google Summer of Code (GSoC) student for KDevelop: He worked hard on improved project templates support and—more importantly—wrote a new Grantlee-based "file template" feature. This allows for the creation of snippets for new files which replaces and extends the existing "Create new Class" wizard that was in KDevelop until now. Make sure to read his final GSoC report.

As usual, new classes can be created, but there are now special templates for extended semantics and frameworks. For example, this allows for the creation of C++ classes following the PIMPL idiom or which implement the Qt shared value semantics. And there are also file templates for GObject classes, PHP classes, CMake modules, etc.

All this work was finally merged into master during the sprint in Vienna. Aleix and Milian polished the implementation, while Alexander and Miquel created proper Ruby file templates. The good thing is that KDevelop users can create their own templates and share them with colleagues or other KDevelop users. Good general purpose templates can be sent to us, and it will be included with other examples.


Python Language Support

Python Support

Sven worked on more than his pet project—Python language support, but he sure managed to improve it a lot. He concentrated on code optimizations, clean ups and most importantly bugfixes. This paved the way for the first beta release of kdev-python 1.4. Shortly after the sprint, he successfully released kdev-python 1.4 which works together with KDevelop 4.4 and supports python 2.7. For KDevelop 4.5, he is busily hacking away on kdev-python 1.5 which will finally support Python 3.


Ruby Language Support

Ruby Support

On the Ruby front, we saw lots of improvement thanks to the hard work of Miquel and Alexander. Building on Miquel's work during GSoC this year, they improved the Ruby plugin until it successfully parsed Alexander's large Ruby on Rails source project. While this work required many changes to the language plugin, the changes also worked on proper Ruby support for the new File Templates and Unit Testing features for KDevelop.

QML/JS Support

Aleix started a proof of concept language support plugin for both JavaScript and QML for KDevelop. He based it on the excellent related work done by the QtCreator team. All that is required now, and which was somewhat started already by Milian, is to integrate the parser into a proper KDevelop language plugin.


Basic JavaScript Language Support

If you are interested in helping out, contact us on our development mailing list. While writing language plugins is not easy, it is a rewarding task that will teach you a lot about programming in general and C++, JavaScript and QML in particular.

C++ Support

Besides working on shiny new language support plugins, our existing C++ language support was improved as well during the sprint. Sven fixed a few annoying bugs in C++ code completion, while Olivier worked on a new "lookahead matching" code completion feature. He got this into master shortly after the sprint and awaits feedback from our daring users: Is it useful? Is it fast enough? Can it be better? How to reduce noise?


C++ Look-ahead code completion

Olivier also improved the template support in our C++ language support. He introduced a new template resolver which chooses the correct specializations in most places. He also managed to remove many useless instantiations (up to 75% in some cases) so there are smaller DUChain caches and faster performance in general.

Web Development

While it is sad, it is still a reality: Quanta is dead since we do not have enough people. The bright side is that KDevelop is a very good—in many ways even superior—alternative to the Quanta you may know and love from KDE 3 times. Especially the excellent language support for PHP, Ruby and Python makes KDevelop users much more productive when writing code for the web. Still, we understand that people miss neat Quanta features.

There was a so-called Quanta 4 port which was basically just an IDE on top of KDevplatform (just like KDevelop) with some additional web development plugins. But there was never a proper release of these quite functional plugins. Thus Niko finally took some time during the sprint to create separate repositories for the plugins that used to live inside the Quanta repository. Afterwards he made sure that the plugins work properly with a recent KDevelop version and created a first release for the SQL plugin. He then created the XDebug PHP Debugger and the Upload plugin. There is also a quite nice CSS language support plugin. The other plugins are not in good shape and will need some work. These include XML/HTML language support, Crossfire debugger integration and a PHP source formatter plugin.

Users can expect to see new stable releases of many of those plugins in the future, together with the KDevelop 4.5 release.

Polishing


Beautified Configuration Dialog

Polished Launch Configuration Dialog

New features were not the only things that happened at the sprint. Face-to-face discussions and paired programming enabled us to improve and polish many parts of the user interface. This is always a huge advantage of such hack sprints and shows how important it is to meet regularly in person.
So what has changed? Sven and Aleix spent some time on beautifying our settings dialog which meant adding nice icons here and there as well as restructuring the form layouts a bit.

They also worked on improving the launch configuration dialog. They tried to simplify it as much as possible to make it easier for newcomers to create custom launch configurations. The simpler UI is more visually appealing thanks to the reduced cruft and clutter.


Improved Open With

Besides visual polish, the KDevelop source base saw lots of other smaller improvements over the week of the sprint. Milian further optimized the Quick Open feature for large projects with thousands of files. He made sure that the results of the "Show Uses" action are always shown in a toolview and never in a tooltip which could accidentally be closed. The "Open with" plugin also saw many improvements.

Aleix made further improvements to the CMake support in KDevelop. He also polished the Welcome Page which was added in KDevelop 4.4, improved our "Pick Session" dialog and created a new Plasmoid launcher. Together with Milian, he also created a new assistant which automatically renames a file if it contains a class which was renamed. For example, there is a class Foo in Foo.h and Foo.cpp, and the class Foo is renamed to class Bar. Now KDevelop offers you the ability to automatically rename the files Foo.h and Foo.cpp to Bar.h and Bar.cpp respectively.


Rename File Assistant

Niko polished and fixed bugs in the generic manager and the file system view. He added a drag'n'drop context menu to the project menu, similar to how this works in Dolphin and KMail. The file system now supports bookmarks thanks to Niko. He also improved Git integration and fixed some bugs in the GDB debugger support.

Finally (probably important for packagers), Olivier changed the location of our DUChain cache, from `~/.kdevduchain` to `$XDG_CACHE_HOME/kdevduchain`, which by default is `~/.cache/kdevduchain`, but which is often remapped to some other location if the home directory lives on a network share. A custom location can be set using the new `$KDEV_DUCHAIN_DIR` environment variable. (Note: The old cache directory is not removed automatically. When running KDevelop master, or KDevelop 4.5 in the future, make sure to remove `~/.kdevduchain`).


Drag'n'Drop Context Menu

Conclusion

This year's Kate/KDevelop sprint was a huge success. Many important new changes were completed and lots of bugs been fixed. In short: The KDevelop 4.5 release will be an exciting milestone.

In addition, from a social perspective, the sprint was an excellent experience. It was especially valuable that some new people attended and were warmly welcomed. We hope to see more new people in the future. And just like in previous years, a joint sprint between KDevelop and Kate developers was fun and productive. If you are interested in joining us in 2013, consider submitting your first patches to either KDevelop or Kate.

Many again thanks to all supporters and donors. Thanks to Joseph for organizing the sprint. And a big applause for all the attendees and their excellent work on improving both Kate and KDevelop.

Comments

I've been using Kate for since the beginning of its existence for all kinds of work and I still love it :)

While I try to use KDevelop for all my KDE work since about the beginning of the year, I still find myself launching Kate first and then remembering that I have a KDevelop session for the task as well.

I think what I am missing is a Plasma applet like the session launcher for Kate.


By Kevin Krammer at Tue, 2012/12/18 - 11:06am

There's already such a plasmoid, it's called "KDevelop Sessions".
Isn't that what you mean?


By Aleix Pol at Wed, 2012/12/19 - 12:38am

and I am looking forward to get my hands on it. What color theme has been used for the dark screenshots?


By Wolfgang at Tue, 2012/12/18 - 9:31pm

I don't remember what it's called, but I think that it's one of the default color schemes included.


By Zash at Wed, 2012/12/19 - 2:17am

Thank you. Then it might be Obsidian Coast (just a guess).


By Wolfgang at Wed, 2012/12/19 - 9:41am

The color theme is called Obsidian Coast.

Cheers


By Milian Wolff at Wed, 2012/12/19 - 11:57am

Must say, after working with kCachegrind a bit I was kind of looking forward to some internal valgrind/callgrind support. (Unless I'm missing that there is existing integrated support for these programs, which is very possible.)
But these additions look fascinating, and unit testing is a much-needed addition! I love using kDevelop, please keep up the good work, it's a great development tool!


By Trent Reed at Sun, 2013/01/20 - 8:25am

Waiting to try it out soon...


By Madura at Sat, 2013/04/27 - 7:44am