My current wishlist.
Steven T. Hatton
hattons at globalsymmetry.com
Tue Jul 26 17:20:10 UTC 2005
One thing I am sure of. There are typos in this document. It is probably
much easier to read in HTML, which you can find here:
http://baldur.globalsymmetry.com/open-source/org/kde/kdevelop/kdevelop-wishlist.html
KDevelop C++ Part Wishlist
Table of Contents
1. KDevelop C++ Part Wishlist
Chapter 1. KDevelop C++ Part Wishlist
Both this item and the next could be supported by providing the user the
ability to arbitrarily specify the location of source files and header files
within a subproject, as well as the location of the subproject itself.
Separate include and source directory trees. It should be possible to create
a project with all header files stored in one directory tree, and all sources
stored in a different tree. Both trees should reflect the subproject
sturcture.
project/src/main.cpp
project/src/Project.cpp
project/src/sub1/Sub1.cpp
project/src/sub2/Sub2.cpp
project/include/Project.hpp
project/include/sub1/Sub1.hpp
project/include/sub2/Sub2.hpp
Separate include and source directories within subprojects. It should be
possible to place all source files in one subdirectory within a subproject
directory, and the header files in a different subdirectory.
project/src/main.cpp
project/src/ProjectClass.cpp
project/include/ProjectClass.hpp
project/sub1/src/Sub1Class.cpp
project/sub1/include/Sub1Class.hpp
project/sub2/src/Sub2Class.cpp
project/sub2/include/Sub2Class.hpp
Ability to automatically map namespaces to subproject structure . A project
should be configurable to automatically create and use a namespace reflecting
the name of each subproject.
project/src/main.cpp
project/src/ProjectClass.cpp
project/src/ProjectClass.hpp
project/src/sub1/Sub1Class.cpp
project/src/sub1/Sub1Class.hpp
project/src/sub1/sub1sub1/SubSub1Class.cpp
project/src/sub1/sub1sub1/SubSub1Class.hpp
project/src/sub2/Sub2Class.cpp
project/src/sub2/Sub2Class.hpp
//project/src/main.cpp
#include <whatever.hpp>
int main() {
}
//project/src/ProjectClass.hpp
//optional whether there is a project level namespace
namespace project {
class ProjectClass {
ProjectClass();
};
}
//project/src/ProjectClass.cpp
namespace project {
ProjectClass::ProjectClass() {
}
}
//project/src/sub1/Sub1Class.hpp
namespace project {
namespace sub1 {
class Sub1Class{};
}
}
//project/src/sub1/sub1sub1/SubSub1Class.hpp
namespace project {
namespace sub1 {
namespace sub1sub1 {
SubSub1Class{};
}
}
}
Code reformatting configuration should be stored per project. It is
reasonable to assume different projects will have different requierments for
source code formatting. It therefore makes sense to save these settings per
project, with a default global configuration which is also user customizable.
This global configuration should be used as a template for the project local
configurations.
Class browser should display members in declaration order. The declaration
order is an important part of class structure, and should be communicated by
the tools used to represent the class graphically. For example it is
important that the oder of member declaration be known when populating meber
initialization lists because members are initialized in declaration order.
Since declarations are typically in the header file, while member
initialization lists are typically in the source file, the programmer must
switch between these files to determine what the ordering is if he should
forget.
The IDE should warn about improperly ordered member initializations . As
stated above, member initialization order can be significant to how a program
behaves. It is almost certainly bad style to initialize out of order, and
likely it is an error. The IDE should detect this condition and warn the
user. Perhaps this could be done by changing the font, or font background
color when members appear in improper order.
Option to add new member attribute to the member initialization list . When
creating a new member attribute of a class there should be an option to have
that member added to the meber initialization list of the class. This. of
course, should place the members in declaration order within the list.
Optional accessor creation with new attribute creation. When new new
attributed are added to a class, it often makes sense to also add accessor
methods for that attribute. The dialog should provide an option to do this.
Ability to create classes with only header files. Some classes do not need
source files. For example, pure abstract interface classes do not have method
definitions, and do not need a source file to hold them. Templates, and
classes with all inline methods are other casses.
Specify filename extensions per project. It should be possible to specify
both the set of filename extensions recognized by the IDE as project source
files, and the extensions to be added to filenames by the file creation
dialogs used within a project. It is freaquently the case that different
projects used different file extension conventions in C++. It should be
possilbe to easily adjust the project settings so the IDE behavior agrees
with these conventions.
Class filename case preservaton should be project local. Like filename
extensions, the filenameing conventions for a project often deffer between
projects. The settings that control whether files created by the new class
dialog should be local to each project, with the ability to set global
defaults inherited by each project.
Extensionless header filename support. Some projects such as OSG use header
files with no extension on the filename. Currently KDevelop does not support
these header files. I know of the following problems related to using
extensionless header filenames:
When these files are opened in the editor, they are treated as plain text.
The syntax highlighting can be made to work, but the type of the file cannot
be set to C++. This means that the other support features such as code
completion, reformatting, class and member creation, etc., do not work.
There is no way to create header files without filename extensions using
either the prject manager or the new class dialog.
If such a file is added to the project using the project manager, it is still
treated as plain text.
Viewing inherited class members. Currently there is no way to view the
complete collection of members of a derived class, includeing the baseclass
members. It would be useful to have that ability. Ideally, this would go in
the class browser.
Open .kdevelop as XML. This is a minor issue. It would be nice if
the .kdevelop file for a project were automatically treated as XML by
KDevelop when opened.
Modifying declaration and definiont as a unit. Though we can create member
functions and have the declaration added to the header, and the definition to
the source file, there is currently no way to modify the function declaration
and definion as a unit. One approach would be to extract both the definion
and declaration from the current header and source where they are defined,
and display the composite in a small exitor window. If possible, this should
also bring any doxygen comments into sync with the modifications to the
funciton.
Show all signatures of a member function in a code completion. Code
completion is not currently working, so I'm not sure about this, but I
believe I cannot view such things as throw specification and constness in the
code completion listing. It's important to know what signatures are already
declared, so we can be sure we are overriding one, rather than declaring a
new one. It migh even be worthwhile to show some kind of indication if a
member function uses a name with a different signature.
Parameter initialization should only be added to the declaration. If a member
function is created using the Add Method dialog, and a parameter of the
function is given a default value, the default is written to both the
declaration and the definiton. It should only be written to the defition.
Open Makefile.am from the project manager. There shoud be an option in the
project manager to open and edit the Makefile.am associated with the current
subproject.
Emacs-style indentation. If you know what it is, and have used it, you know
what I mean, and why I want it.
Better view of current environment. It should be possible to view a list of
all variables from the environment in which KDevelop is running, and to
select an individual variable to display its value. This would help the
programer determine what is in the various variables used by the compiler,
preprocessor, etc.
Header filename completion. This works for header files within the project,
but does not work for the entire include path. It would probably be best to
have a means of registering certain directories as sources of headers to
include in the current project, rather than the entire include path. For
example, if the current project is using an SDK such as OpenSceneGraph, the
OpenSceneGraph include directory would be added to a list of places to look
for header filenames. The, of course, should add any relative directory names
as well, e.g., #include <osgGA/GUIEventHandler>
GCC output de-mangler. The output form GCC is hard to read, in part because
it repeats the error: and warning: tags are repeted in multiline messages. If
the error messages could be reformatted to remove those, it would make them
easier to read.
Build environment decoupled from the KDevelope runtime. This is absolutely
essential. If there is a requierment to build against libraries other than
the version that KDevelop was built with, or if the current environment
conflicts with the target environment the user needes to be able to have
complete controle over the build environment in terms of all variable such as
$QTDIR, $KDEDIR, $LD_LIBRARY_PATH
Virtualize destructors when menbers are made virtual. When a class member
function is made virtual the destructor of the class should likewise be made
virtual. It would be a good idea to automatically make a destructor virtual
when using the method creation dialog. Providing some kind of warning
indication in the editor and problem reporter would also be useful for the
cases when the functions are created by hand.
A #define hunter. It is often the case that some value relevant to the
current scope is set by a #define in a header file far removed from the
currently opened file. I would be valuable to be able to locate such
#definition. Perhaps there could even be a tool for specifically viewing
#defines and providing access to the file where they are located.
Include guard synchronizer. If a file name is changed, the #include guards
are likely to get out of synch with the file name. I propose all #include
guards should reflect the file location relative to the project src
directory. When a file is moved or renamed, the #include guard should reflect
that change automatically.
--
Regards,
Steven
More information about the KDevelop-devel
mailing list