bug-gnu-emacs
[Top][All Lists]
Advanced

[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/



reply via email to

[Prev in Thread] Current Thread [Next in Thread]