[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
CC Mode 5.25 (C++); Problem with imenu recognition of C++ classes
From: |
Ole Laursen |
Subject: |
CC Mode 5.25 (C++); Problem with imenu recognition of C++ classes |
Date: |
27 Oct 2000 17:35:33 +0200 |
Dear Barry and Martin,
I'm using GNU Emacs 20.7.1 (i386-redhat-linux-gnu, X toolkit),
i.e. the one bundled with Red Hat 7.0, and there appears to be a
problem with the recognition of classes in the speedbar
(M-x speedbar). It will happily show classes like this
class derived: public base
{
// blah, blah
};
but not like this
class base
{
// blah, blah
};
I have investigated it, and the problem seems to be on line 120 in
cc-menus.el with the construction
;; Class definitions
("Class"
(, (concat
"^" ; beginning of line is required
"\\(template[ \t]*<[^>]+>[ \t]*\\)?" ; there may be a `template <...>'
"class[ \t]+"
"\\(" ; the string we want to get
"[a-zA-Z0-9_]+" ; class name
"\\(<[^>]+>\\)?" ; possibly explicitely specialized
"\\)"
"[ \t]*[:{]"
)) 2)
As I far as I can tell the second last line
"[ \t]*[:{]"
assumes that there is a ':' or a '{' on the same line as the 'class
name'. Unfortunately this is wrong with the default smart indentation;
when I type the curly brace in
class hello {
I automagically get
class hello
{
I guess it would be better if the regexp checked if a '{' was
encountered before the terminating ';'. Maybe something along the
lines of (I am really not an expert when it comes to regexps):
"\s *[:{].*;"
I haven't studied the file more than this but I think there is a
similar problem with struct's (at least they don't show up in the
speedbar).
Emacs : GNU Emacs 20.7.1 (i386-redhat-linux-gnu, X toolkit)
of Thu Aug 24 2000 on porky.devel.redhat.com
Package: CC Mode 5.25 (C++)
Buffer Style: gnu
c-emacs-features: (1-bit)
current state:
==============
(setq
c-basic-offset 2
c-offsets-alist '((string . c-lineup-dont-change)
(c . c-lineup-C-comments)
(defun-open . 0)
(defun-close . 0)
(defun-block-intro . +)
(class-open . 0)
(class-close . 0)
(inline-open . 0)
(inline-close . 0)
(func-decl-cont . +)
(knr-argdecl-intro . 5)
(knr-argdecl . 0)
(topmost-intro . 0)
(topmost-intro-cont . 0)
(member-init-intro . +)
(member-init-cont . 0)
(inher-intro . +)
(inher-cont . c-lineup-multi-inher)
(block-open . 0)
(block-close . 0)
(brace-list-open . 0)
(brace-list-close . 0)
(brace-list-intro . +)
(brace-list-entry . 0)
(brace-entry-open . 0)
(statement . 0)
(statement-cont . +)
(statement-block-intro . +)
(statement-case-intro . +)
(statement-case-open . +)
(substatement . +)
(substatement-open . +)
(case-label . 0)
(access-label . -)
(label . 0)
(do-while-closure . 0)
(else-clause . 0)
(catch-clause . 0)
(comment-intro . c-lineup-comment)
(arglist-intro . c-lineup-arglist-intro-after-paren)
(arglist-cont . 0)
(arglist-cont-nonempty . c-lineup-arglist)
(arglist-close . c-lineup-arglist)
(stream-op . c-lineup-streamop)
(inclass . +)
(cpp-macro . -1000)
(cpp-macro-cont . c-lineup-dont-change)
(friend . 0)
(objc-method-intro . -1000)
(objc-method-args-cont . c-lineup-ObjC-method-args)
(objc-method-call-cont . c-lineup-ObjC-method-call)
(extern-lang-open . 0)
(extern-lang-close . 0)
(inextern-lang . +)
(namespace-open . 0)
(namespace-close . 0)
(innamespace . +)
(template-args-cont . +)
(inlambda . c-lineup-inexpr-block)
(lambda-intro-cont . +)
(inexpr-statement . 0)
(inexpr-class . +)
)
c-cleanup-list '(scope-operator)
c-comment-only-line-offset '(0 . 0)
c-backslash-column 48
c-delete-function 'delete-char
c-electric-pound-behavior nil
c-hanging-braces-alist '((brace-list-open) (brace-entry-open)
(substatement-open after)
(block-close . c-snug-do-while) (extern-lang-open
after) (inexpr-class-open after)
(inexpr-class-close before))
c-hanging-colons-alist nil
c-hanging-comment-starter-p t
c-hanging-comment-ender-p t
c-indent-comments-syntactically-p nil
c-tab-always-indent t
c-comment-continuation-stars ""
c-label-minimum-indentation 1
defun-prompt-regexp nil
tab-width 8
comment-column 32
)
--
Ole Laursen
http://sunsite.auc.dk/olau/
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- CC Mode 5.25 (C++); Problem with imenu recognition of C++ classes,
Ole Laursen <=