GNU bug report logs -
#41923
CC Mode 5.33.2 (AWK//l); Bad indentation of gawk switch cases
Previous Next
To add a comment to this bug, you must first unarchive it, by sending
a message to control AT debbugs.gnu.org, with unarchive 41923 in the body.
You can then email your comments to 41923 AT debbugs.gnu.org in the normal way.
Toggle the display of automated, internal messages from the tracker.
Report forwarded
to
bug-cc-mode <at> gnu.org
:
bug#41923
; Package
cc-mode
.
(Wed, 17 Jun 2020 17:17:02 GMT)
Full text and
rfc822 format available.
Acknowledgement sent
to
Peter Kozich <peter.kozich <at> upcmail.hu>
:
New bug report received and forwarded. Copy sent to
bug-cc-mode <at> gnu.org
.
(Wed, 17 Jun 2020 17:17:02 GMT)
Full text and
rfc822 format available.
Message #5 received at submit <at> debbugs.gnu.org (full text, mbox):
[Message part 1 (text/plain, inline)]
Package: cc-mode
Indentation of the case labels of the gawk switch is somehow strange:
the AWK mode does not seem to recognize the case keyword when indenting
(although it recognizes it as a keyword when coloring):
[case.awk (application/octet-stream, attachment)]
[Message part 3 (text/plain, inline)]
{
switch (msg)
{
case 1:
break;
case 2:
break;
case 3:
break;
default:
break;
}
}
In a C buffer, the indentatation of the same works as expected:
[case.c (application/octet-stream, attachment)]
[Message part 5 (text/plain, inline)]
int main()
{
switch (s)
{
case 1:
break;
case 2:
break;
default:
break;
}
}
Is this a bug, or am I missing something in my .emacs file?
br
pk
Emacs : GNU Emacs 26.3 (build 1, x86_64-redhat-linux-gnu, GTK+ Version 3.24.13)
of 2020-01-28
Package: CC Mode 5.33.2 (AWK//l)
Buffer Style: cello
c-emacs-features: (pps-extended-state col-0-paren posix-char-classes gen-string-delim gen-comment-delim syntax-properties 1-bit)
current state:
==============
(setq
c-basic-offset 2
c-comment-only-line-offset '(0 . 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 '(c-gnu-impose-minimum)
c-label-minimum-indentation 1
c-offsets-alist '((inexpr-class . +)
(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-cont-nonempty
c-lineup-gcc-asm-reg
c-lineup-arglist
)
(arglist-cont c-lineup-gcc-asm-reg 0)
(comment-intro
c-lineup-knr-region-comment
c-lineup-comment
)
(catch-clause . 0)
(else-clause . 0)
(do-while-closure . 0)
(access-label . -)
(substatement-label . 2)
(statement-case-intro . +)
(statement . 0)
(brace-entry-open . 0)
(brace-list-entry . c-lineup-under-anchor)
(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)
(inline-open . +)
(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)
(arglist-close . c-lineup-arglist)
(arglist-intro . c-lineup-arglist-intro-after-paren)
(statement-cont . +)
(label . 0)
(case-label . +)
(knr-argdecl-intro . 5)
(statement-block-intro . +)
(statement-case-open . +)
(substatement-open . 0)
(substatement . +)
)
c-buffer-is-cc-mode 'awk-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 '((other . "cello"))
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 "[ ]*\\(#+\\)[ ]*\\([ ]*\\([-–!|#%;>*·•‣⁃◦]+[ ]*\\)*\\)"
)
Information forwarded
to
bug-cc-mode <at> gnu.org
:
bug#41923
; Package
cc-mode
.
(Thu, 18 Jun 2020 18:57:01 GMT)
Full text and
rfc822 format available.
Message #8 received at 41923 <at> debbugs.gnu.org (full text, mbox):
Hello, Peter.
On Wed, Jun 17, 2020 at 18:54:55 +0200, Peter Kozich wrote:
> Package: cc-mode
> Indentation of the case labels of the gawk switch is somehow strange:
> the AWK mode does not seem to recognize the case keyword when indenting
> (although it recognizes it as a keyword when coloring):
> {
> switch (msg)
> {
> case 1:
> break;
> case 2:
> break;
> case 3:
> break;
> default:
> break;
> }
> }
> In a C buffer, the indentatation of the same works as expected:
[ .... ]
> Is this a bug, or am I missing something in my .emacs file?
This is indeed a bug. At the time AWK Mode was written, switch didn't
exist in AWK, so special steps were taken to exclude switch and case
from AWK's indentation engine. When it was introduced, CC Mode failed
to get updated to match.
The following patch puts switch/case/default into AWK Mode. Would you
please apply it to ...../emacs/lisp/progmodes/cc-langs.el and
byte-compile all of CC Mode (i.e. ...../emacs/lisp/progmodes/cc-*.el).
(If you would like any help with the patching or byte-compilation, feel
free to send me private email.) On reloading CC Mode (possibly, by
restarting Emacs), the indentation of case etc. should work.
Please then get back to me, confirming the patch works, or saying what
still needs fixing. Thanks!
diff -r fd31432873bd cc-langs.el
--- a/cc-langs.el Thu Jun 11 10:50:35 2020 +0000
+++ b/cc-langs.el Thu Jun 18 18:53:00 2020 +0000
@@ -2772,7 +2772,7 @@
java '("for" "if" "switch" "while" "catch" "synchronized")
idl nil
pike '("for" "if" "switch" "while" "foreach")
- awk '("for" "if" "while"))
+ awk '("for" "if" "switch" "while"))
(c-lang-defconst c-block-stmt-2-key
;; Regexp matching the start of any statement followed by a paren sexp
@@ -2851,8 +2851,7 @@
(c-lang-defconst c-case-kwds
"The keyword(s) which introduce a \"case\" like construct.
This construct is \"<keyword> <expression> :\"."
- t '("case")
- awk nil)
+ t '("case"))
(c-lang-defconst c-case-kwds-regexp
;; Adorned regexp matching any "case"-like keyword.
> br
> pk
> Emacs : GNU Emacs 26.3 (build 1, x86_64-redhat-linux-gnu, GTK+ Version 3.24.13)
> of 2020-01-28
> Package: CC Mode 5.33.2 (AWK//l)
> Buffer Style: cello
> c-emacs-features: (pps-extended-state col-0-paren posix-char-classes gen-string-delim gen-comment-delim syntax-properties 1-bit)
[ CC Mode state dump snipped, but appreciated. ]
--
Alan Mackenzie (Nuremberg, Germany).
Reply sent
to
Alan Mackenzie <acm <at> muc.de>
:
You have taken responsibility.
(Wed, 24 Jun 2020 19:59:01 GMT)
Full text and
rfc822 format available.
Notification sent
to
Peter Kozich <peter.kozich <at> upcmail.hu>
:
bug acknowledged by developer.
(Wed, 24 Jun 2020 19:59:01 GMT)
Full text and
rfc822 format available.
Message #13 received at 41923-done <at> debbugs.gnu.org (full text, mbox):
Hello, Peter.
On Fri, Jun 19, 2020 at 21:20:37 +0200, Peter Kozich (UM) wrote:
> Hello Alan,
> I recompiled them and now case indentation works correctly in the AWK
> buffer, too.
Thanks. I've committed the patch to the Emacs master branch, and it
will find its way into Emacs 28 when that is released (probably in about
a year and a half's time). I suggest you keep the patch handy and apply
it to Emacs-27 when that gets released ("any time now").
> There is a 200+ lines difference somewhere between your el file and
> mine.
Yes, sorry about that. CC Mode is still a separate package from Emacs,
if only just, and I was working on the upstream version. The line
number difference is harmless.
> Thank you for the help
Thanks again for the bug report. I'm closing the bug with this post.
> br
> pk
--
Alan Mackenzie (Nuremberg, Germany).
bug archived.
Request was from
Debbugs Internal Request <help-debbugs <at> gnu.org>
to
internal_control <at> debbugs.gnu.org
.
(Thu, 23 Jul 2020 11:24:05 GMT)
Full text and
rfc822 format available.
This bug report was last modified 3 years and 278 days ago.
Previous Next
GNU bug tracking system
Copyright (C) 1999 Darren O. Benham,
1997,2003 nCipher Corporation Ltd,
1994-97 Ian Jackson.