Re: [CEDET-devel] tags & includes & semanticdb.
Brought to you by:
zappo
From: David P. <dav...@wa...> - 2003-04-04 11:45:59
|
Hi Eric, > I've been building some new semanticdb search algorithms. I've got > the following little list of uses for semanticdb as of semantic 1.4: > > eldoc - popup help > => Requires basic search using default path. (Header files ok) > tag jump - jump to a named tag > => Requires a brute search useing whole project. (Source files only) > completion - Completing symbol names in a smart way > => Basic search (headers ok) > type analysis - finding type definitions for variables & fcns > => Basic search (headers ok) > > If you know of others, let me know. I don't see others. > What this shows is that tag-jumping is the only application (written > so far) that requires the old brute-force search method. I'm going > to rebuild the search mechanism to search and find include paths > instead. This will quickly focus searches to the code actually used, > and will bring in system back ends in a clean way that can avoid the > duplication problem I've had in the past. I'll let tag-jumping exist > as it's own specialty algorithm. Do you mean tag-jumping in senator? Does that mean that it can't use new find algorithms? I am afraid, I am a little lost among all these search algorithms :-( > Anyway, all this boils down to a small addition to semantic-tag.el: > > (define-overload semantic-tag-include-filename (tag) [...] > (defun semantic-tag-include-filename-default (tag) [...] > > which allows a language mode to implement a mechanism for finding a > file associated with the include tag. Good idea! > Here is an Emacs Lisp example: > > (define-mode-overload-implementation semantic-tag-include-filename emacs-lisp-mode > (tag) > "Return the name of the tag with .el appended. > If there is a detail, prepend that directory." > (let ((name (semantic-tag-name tag)) > (detail (semantic-tag-get-attribute tag :directory))) > (concat > (if detail (file-name-as-directory detail) "") > (semantic-tag-name tag) ".el"))) IMO, it would be more portable to use a standard "files" function instead of `concat'. Here is my try ;-) (define-mode-overload-implementation semantic-tag-include-filename emacs-lisp-mode (tag) "Return an Elisp filename representation of TAG. That is the name of the TAG with .el appended. If TAG has a `:directory' attribute, prepend that directory." (let ((name (semantic-tag-name tag)) (detail (semantic-tag-get-attribute tag :directory))) (concat (if detail (expand-file-name name (file-name-as-directory detail)) name) ".el"))) Thanks! David |