KDevelop 4/Proposals
From KDevelop
Contents |
New project creation
UI Proposals
Split Views
Please, finally implement multiple views per document (e.g. horizontal / vertical split view). I don't know any other decent editor/IDE which doesn't have this feature, this has really been overdue for KDevelop!
KDevelop by default uses an "Embedded Advanced Text Editor", which presumably means Kate. As Kate has split horizontal and split vertical options, why are these are missing from KDevelop's default editor?
Split view would allow viewing different files side by side (e.g. header and implementation file). It would also allow viewing different portions of the same file side by side, in this case edits in either window would have equal effect as the file is only opened once.
Another consideration is multi-head layout. Splitting views between header/source is one thing, but to split across files/tools would be another. The ability to choose would also be a bonus.
Window layout
Generally I think that you need to revise your window-layouting system. Hopefully QT4 will finally allow reasonably docked windows. If you just take a look at Eclipse or VS.net you will quickly notice how easy it is to lay out/dock multiple editor views and still keep full tab-functionality. Currently in KDevelop both MDI and IDEAL mode are incomplete in terms of document view flexibility.
New project type creation
It would be nice to be able to actually define custom project types so that it will be easier for KDevelop to support even more programming languages in the future. << the person that wrote this paragraph could also read the API documentation instead of writing nonsense here :). << Sorry for the confusion...I am aware that you can add custom project types through the API...I meant being able to somehow do it through the GUI, so your average user can quickly create a custom language. Maybe add a "Custom..." project-type or something that will essentially just ask you for the relevant filename-extensions, how to treat them and what compiler/interpreter/debugger to use.
File Summary
It would be nice to have a "File summary" view. What I mean with this is use the information from the "Class View" plugin and show information only relevant to the current file. When you get too many items the class view becomes useless. Being able to show everything defined in the current file sorted by name or type would be very helpful. For example: show lists of defines, consts, statics, structs, and classes for the current file. Selecting an item in the list would show the item in the text editor. An extension to this (which does not need to be implemented, or may be completely worthless) is to implement the ability for KDevelop to manage your file for you. In the file view you could select "Add <type>". A dialog would be displayed asking for the name, and initial value (if appropriate). KDevelop would then add your new item in the file grouped with the other items of the same type. This might require allowing the user to define a file layout (maybe from the file templates).
Source Proposals
It seems that the include files in the source do not reference other includes in the source by relative path. This seems that it would cause a huge burden for anyone creating a standalone plugin for KDevelop. It requires many of KDevelop's subproject include folders to be put in the program's base set of include folders. This is not only time consuming for the project developer to add to every subproject in the plugin, but it also pollutes the include folders with many potentially conflicting names. If there is a good reason for the includes to reference one another without relative paths then edit this out and please give a reason for it.
Running/Debugging Applications
- Same application can be run more than once and multiple applications may be run at the same time
- provide one app-output view for each app instance running
- don't automatically switch the output view to the most recently started application
- provide a common Ui to create both run and debug applications. This includes environment variables, application arguments, debugger settings, special application arguments for debuggging sessions
- Language plugins could provide special Ui's for the app-types that can be built from that language.
- Maybe use eclipse way of doing this as a starting point
Requested Features
Designer integration
- Have the KDE4 top-level widgets like KMainWindow, KAssistantDialog or KDialog available as templates in the new form widget
- Eventually try to get the widgets a project creates into the embedded designer, though this is possibly only via the private API of QtDesigner
Editing features
- Mark occurrences feature. When you select some variable or method all accuracies of this variable/method in the current file are highlighted. You can see an example here
http://help.eclipse.org/help32/topic/org.eclipse.jdt.doc.user/tips/images/mark-occurrences.png
- Outline feature like in Eclipse IDE. The idea is following when you press some combination of keys (Ctrl + O in Eclipse) you receive a sort of tooltip windows with all members and methods of class. You can navigate through this list and go to any method or member definition.
http://help.eclipse.org/help32/topic/org.eclipse.jdt.doc.user/tips/images/inplace_outline.png
- Surround with feature. The idea is following - you select some lines of code and press some combination of keys which gives you menu with proposals to surround select block of code with try/catch, if, for and other constructions
http://help.eclipse.org/help32/topic/org.eclipse.jdt.doc.user/tips/images/surroundwith.png
- Create Getter and Setters dialog. To create getter and setter methods for a field, select the field's declaration and invoke menu to generate getters and setters.
http://help.eclipse.org/help32/topic/org.eclipse.jdt.doc.user/tips/images/create-getter-setter.png
- Navigate to the element declaration. When you use some method or member in you code and want to open its declaration you can press Ctrl and click on the name of member or method in your code. This should redirect you to the element declaration.
- Set Debugging Execution Position by dragging/moving the highlighted execution position line up/down. (VS.NET 2005 IDE does this, and it's quite handy)
- Dump variable symbol data (using a popup) when hovering on it for (let's say) one second. (to be closed when mouse pointer leaves this popup - or one of it's child popups). Child popups are spawned when hovering a member variable symbol. (VS.NET 2005 IDE does this, and it's quite handy)
- Most object C++ are based on a certain base class (QObject, TObject, Object, and alike). When now a variable symbol data is to be dumped within a debuggin session, the IDE shall (by configuration) look wether this variable is an object based on one of the above (=configured) base classes *and* contains a toString() method (method name(s) shall be configurable here as well), then it prints out the evaluated method's return value in first place. (with a child popup / tree-view containing the actual data). -- (The idea is poorly based on VS.NET 2005's IDE behaviour, however, they do not have it configurable, in fact, they know that all objects are derived from 'object' which we can't assume here.) -- A thought on this... why not use the class store to generate and compile a set of overloaded toString() free functions (or something similar) for user-defined types. This source can be compiled into the project as a 'background file' - it's compiled into the project by default (doesn't even need to be #included). Even better, allow the user to customize the debug printing code and/or define variants on the information being printed for user-defined types. This can be done by writing simple wrapper types for user-defined types and creating "cast" functions that can be called from within the debug shell.
- Better completion: It would be nice to see word completion where KDevelop scans all included files, instead of having to import a custom directory. It becomes rather strange to hold directory caches for the whole of /usr/include if you're developing something that uses maybe 3 standard headers.
- Snippet support a la Textmate.
External library usage
- Easier addition of libraries into autoconf/automake: Libraries like SDL_image or SDLmm (for example), which need to be added such that autoconf and configure know to search for them could be done better. For example, when I want to add SDL_image to a target, I must be able to specify that configure search for that library in KDevelop, rather than mucking about with configure.in.
- In the project configuration dialog, let KDevelop scan for all available library files and let the user drag 'n' drop them into another window and thereby add the linker flags. This could be useful if you're not sure of the name of the library file.
Documentation and testing
- Better doxygen support. Thanks to Boudewijn Rempt for the suggestions! Requests include:
- Being able to mark something as deprecated (for instance by right-clicking on a function)
- Autocompletion of doxygen tags
- Right-click insertion of tags when in a doxygen comment block
- Mark doxygen errors as problems in the problem reporter
- Shortcut to add tags for all parameters in a method
- For example by automatically filling out a skeleton when you type in /** in the appropriate place (in the style of how Visual Studio inserts XML documentation comments when you press /// in places where this makes sense)
- Automatic unit test stub creation when adding members. Should also be configurable to use any unittest library.
- An option to generate a function call graph. It should be possible to go to the source code of every node in the graph. This feature can be useful for code browsing.
Runtime handling of special types in the debugger
- Could be done reading the types information from a description file at runtime
- Actually special types are hardcoded
- As an example msvc has autoexp.dat for this but is copyrighted so we have to invent a new (better) format
- An issue will be handling the same type in different versions. As an example QString field for the unicode string is different from version 3 to version 4 of QT
UML integration (Umbrello integration?)
- Programming directly with UML
- UML scheme and code are always sync-ed
- No need to export code or keeping code and project documentation up to date
- Modifying code modifies the UML, and vice versa
- Allow programmers to design and "see" the application at very high level (and exchange logical support about the application without needing to check and study the code), via UML, and goes later into the code detail with the same tool
- A big improvement for Open Source projects, which needs more often to be "handled quickly": one can see directly which logical component does the work and modify it directly -> ease of maintenance.
Requested Specific Code Changes
KDevProject interface
- Add explicit method to build a project, and a target in it.
- A target here could be an executable, a library, or a certain object file.
- Add explicit method to build a project if it's possible modified, with optional prompt. (say, when starting debugger we want to rebuild the project, but if simply no file was modified, there's no point in running the underlying build tool.