Discussion:
bug#25608: CC Mode 5.33 (C/l); Incorrect syntactic information and indentation after multi-line comment with parenthesis or keywords
Glenn Morris
2017-02-02 18:34:36 UTC
Permalink
I've reassigned this report to the right package in debbugs.gnu.org,
and am sending this reply so it appears on the right mailing list.

(It is of course impossible to comply with the meaningless legal
disclaimer at the end of the mssage.)
Hello,
/*-----------------------------------------------------------------------------
(c) Copyright notice containing open parentheses
-----------------------------------------------------------------------------*/
/*---------------------------------------------------------------------------*/
the last line is indented incorrectly, as the identified syntactic
information is ((topmost-intro-cont 1) (comment-intro)). I think it
should be ((topmost-intro 1) (comment-intro)), which the following code
/*-----------------------------------------------------------------------------
Non parenthesis language
-----------------------------------------------------------------------------*/
/*---------------------------------------------------------------------------*/
Similarly, if there is a keyword in the comment, the next comment is
/*-----------------------------------------------------------------------------
(c) Copyright notice containing open parentheses
Line containing keyword for
-----------------------------------------------------------------------------*/
/*---------------------------------------------------------------------------*/
/*-----------------------------------------------------------------------------
(c) Copyright notice containing open parentheses
Line containing keyword for
-----------------------------------------------------------------------------*/
/*---------------------------------------------------------------------------*/
indents correctly.
Best regards,
Chris
Emacs : GNU Emacs 25.1.1 (x86_64-w64-mingw32)
of 2016-09-17
Package: CC Mode 5.33 (C/l)
Buffer Style: bsd
c-emacs-features: (pps-extended-state col-0-paren posix-char-classes
gen-string-delim gen-comment-delim syntax-properties 1-bit)
==============
(setq
c-basic-offset 4
c-comment-only-line-offset 0
c-indent-comment-alist '((anchored-comment column . 0) (end-block space .
1) (cpp-end-block space . 2))
c-indent-comments-syntactically-p nil
c-block-comment-prefix "* "
c-comment-prefix-regexp '((pike-mode . "//+!?\\|\\**") (awk-mode . "#+")
(other . "//+\\|\\**"))
c-doc-comment-style '((java-mode . javadoc) (pike-mode . autodoc) (c-mode
. gtkdoc))
c-cleanup-list '(scope-operator)
c-hanging-braces-alist '((brace-list-open) (brace-entry-open)
(statement-cont) (substatement-open after)
(block-close . c-snug-do-while)
(extern-lang-open after) (namespace-open after)
(module-open after) (composition-open after)
(inexpr-class-open after)
(inexpr-class-close before)
(arglist-cont-nonempty))
c-hanging-colons-alist nil
c-hanging-semi&comma-criteria '(c-semi&comma-inside-parenlist)
c-backslash-column 48
c-backslash-max-column 72
c-special-indent-hook nil
c-label-minimum-indentation 1
c-offsets-alist '((inexpr-statement . +)
(lambda-intro-cont . +)
(inlambda . c-lineup-inexpr-block)
(template-args-cont c-lineup-template-args +)
(incomposition . +)
(inmodule . +)
(innamespace . +)
(inextern-lang . +)
(composition-close . 0)
(module-close . 0)
(namespace-close . 0)
(extern-lang-close . 0)
(composition-open . 0)
(module-open . 0)
(namespace-open . 0)
(extern-lang-open . 0)
(objc-method-call-cont c-lineup-ObjC-method-call-colons
c-lineup-ObjC-method-call +)
(objc-method-args-cont . c-lineup-ObjC-method-args)
(objc-method-intro . [0])
(friend . 0)
(cpp-define-intro c-lineup-cpp-define +)
(cpp-macro-cont . +)
(cpp-macro . [0])
(inclass . +)
(stream-op . c-lineup-streamop)
(arglist-close . +)
(arglist-cont-nonempty c-lineup-gcc-asm-reg
c-lineup-arglist)
(arglist-cont c-lineup-gcc-asm-reg 0)
(arglist-intro . +)
(comment-intro c-lineup-knr-region-comment
c-lineup-comment)
(catch-clause . 0)
(else-clause . 0)
(do-while-closure . 0)
(access-label . -)
(case-label . 0)
(substatement . +)
(statement-case-open . 0)
(statement-case-intro . +)
(statement . 0)
(brace-entry-open . 0)
(brace-list-entry . 0)
(brace-list-intro . +)
(brace-list-close . 0)
(brace-list-open . 0)
(block-close . 0)
(block-open . 0)
(inher-cont . c-lineup-multi-inher)
(inher-intro . +)
(member-init-cont . c-lineup-multi-inher)
(member-init-intro . +)
(annotation-var-cont . +)
(annotation-top-cont . 0)
(topmost-intro-cont . c-lineup-topmost-intro-cont)
(topmost-intro . 0)
(knr-argdecl . 0)
(func-decl-cont . +)
(inline-close . 0)
(class-close . 0)
(class-open . 0)
(defun-block-intro . +)
(defun-close . 0)
(defun-open . 0)
(c . c-lineup-C-comments)
(string . c-lineup-dont-change)
(inexpr-class . 0)
(inline-open . 0)
(statement-cont . +)
(label . 0)
(substatement-label . 0)
(substatement-open . 0)
(knr-argdecl-intro . +)
(statement-block-intro . +)
)
c-buffer-is-cc-mode 'c-mode
c-tab-always-indent t
c-syntactic-indentation t
c-syntactic-indentation-in-macros t
c-ignore-auto-fill '(string cpp code)
c-auto-align-backslashes t
c-backspace-function 'backward-delete-char-untabify
c-delete-function 'delete-char
c-electric-pound-behavior nil
c-default-style "bsd"
c-enable-xemacs-performance-kludge-p nil
c-old-style-variable-behavior nil
defun-prompt-regexp nil
tab-width 4
comment-column 32
parse-sexp-ignore-comments t
parse-sexp-lookup-properties t
auto-fill-function nil
comment-multi-line t
comment-start-skip "\\(//+\\|/\\*+\\)\\s *"
fill-prefix nil
fill-column 70
paragraph-start "[ ]*\\(//+\\|\\**\\)[ ]*$\\|^\f"
adaptive-fill-mode t
adaptive-fill-regexp "[ ]*\\(//+\\|\\**\\)[ ]*\\([
]*\\([-?!|#%;>*ยท????]+[ ]*\\)*\\)"
)
Dr Chris Wagner
Senior Consultant, Medical Technology
Cambridge Consultants
Science Park, Milton Road
Cambridge, CB4 0DW, England
Switchboard: +44 (0)1223 420024
Direct dial: +44 (0)1223 392497
Fax: +44 (0)1223 423373
www.CambridgeConsultants.com
This email is from Cambridge Consultants Limited, Science Park, Milton
Road, Cambridge CB4 0DW with registered number 1036298 England. It may
contain confidential information. It is intended for the addressee only
and may not be copied or disclosed to any third party without our
permission. If you are not the intended recipient please contact the
sender as soon as possible and delete the material from any computer. If
this email has been sent as a personal message to the addressee, the
sender is not acting in his/her capacity as an employee or officer of
Cambridge Consultants Limited and no liability is accepted for the content
of any such email. Outgoing email may be monitored for the purpose of
ensuring compliance with our email policy and relevant laws.
Alan Mackenzie
2017-02-02 22:03:19 UTC
Permalink
Hello, Chris.
Hello,
/*-----------------------------------------------------------------------------
(c) Copyright notice containing open parentheses
-----------------------------------------------------------------------------*/
/*---------------------------------------------------------------------------*/
the last line is indented incorrectly, as the identified syntactic
information is ((topmost-intro-cont 1) (comment-intro)). I think it
should be ((topmost-intro 1) (comment-intro)), which the following code
/*-----------------------------------------------------------------------------
Non parenthesis language
-----------------------------------------------------------------------------*/
/*---------------------------------------------------------------------------*/
Similarly, if there is a keyword in the comment, the next comment is
/*-----------------------------------------------------------------------------
(c) Copyright notice containing open parentheses
Line containing keyword for
-----------------------------------------------------------------------------*/
/*---------------------------------------------------------------------------*/
/*-----------------------------------------------------------------------------
(c) Copyright notice containing open parentheses
Line containing keyword for
-----------------------------------------------------------------------------*/
/*---------------------------------------------------------------------------*/
indents correctly.
Best regards,
Chris
The problem in all these cases which fail is the open parenthesis at
column zero inside the comment. This (currently) causes mis-analysis of
the code around it, as detailed in the Emacs manual on page "Left Margin
Paren".

However, I would be the first to agree with you that this is a fault in
Emacs rather than anything wrong with your source code, which is
perfectly normal C. There is a fix for this problem, and I have some
hope that this fix will be incorporated into Emacs 26.

[ CC Mode configuration dump snipped, but appreciated. ]
Dr Chris Wagner
Senior Consultant, Medical Technology
Cambridge Consultants
Science Park, Milton Road
Cambridge, CB4 0DW, England
Switchboard: +44 (0)1223 420024
Direct dial: +44 (0)1223 392497
Fax: +44 (0)1223 423373
www.CambridgeConsultants.com
--
Alan Mackenzie (Nuremberg, Germany).
Loading...