From kdevelop-devel Fri Jul 15 14:53:55 2005 From: Kuba Ober Date: Fri, 15 Jul 2005 14:53:55 +0000 To: kdevelop-devel Subject: Re: New parser branch (Was: Dumping the source DOM?) Message-Id: <200507151053.55959.kuba () mareimbrium ! org> X-MARC-Message: https://marc.info/?l=kdevelop-devel&m=112143934923308 > By the way, for a java app, eclipse is pretty fast when it comes to > code completion and on-the-fly parsing, and has implemented a lot of > useful refactoring operations, so it might be a worthwhile source of > inspiration, especialy as it's open-source, unlike visual assist - > even tough it's java and not C++. Java is an entirely different beast to parse/code complete than C++, mainly because the interfaces are well-defined. A class is a class, sits in its own group of files, and so on. C++ enforces no such relationship, and what's worse -- unless you know what preprocessor definitions to set, the headers are generally useless and often invalid by themselves. That seems like a minor thing, but is a major pain in the behind. Of course you could assume that C++ class headers need no special defines, but AFAIK this immediately breaks parsing of boost, stlport and several other template libraries that work around compiler bugs/differences. Presumably, parsing of library headers could be done off-line (using even the same parser, but off-line) and then the parser would need to do full-blown preprocessing. And it would need to know what macros to ignore. Think Qt's QOBJECT and friends which you want to expand and process only optionally -- presumably only for people who debug bindings and stuff. Actually, one could think of a feature in which parts of the tree could be suppressed/enable during runtime, so that by default you wouldn't see all the stuff that QOBJECT expands to, but if you wanted to it could be reenabled and active immediately (in the class browser, for code completion, and so on). So, while the overall idea is pretty simple, the details can easily kill a couple tens of hours to get right... (heh, Roberto would probably say to bump up the estimate to hundreds of hours :) I'm actually thinking that using an external, off line parser, as long as it can emit the trees and catalogs that Roberto's code expects, would be quite useful for libraries. Then there could be several alternatives, e.g. existing r++ (is it called like that?), gccxml with whatever modifications one needs to emit Roberto-compatible data (tm). I could think of using tendra for the very same purpose, and so on. Myself, I find gcc code to be at the verge of unmaintainability, even though it's a darn decent compiler otherwise :( On-line parsing and code completion are very different beasts, that's for sure. Cheers, Kuba _______________________________________________ KDevelop-devel mailing list KDevelop-devel@barney.cs.uni-potsdam.de http://barney.cs.uni-potsdam.de/mailman/listinfo/kdevelop-devel