Subject: bug#53605: closed (Re: bug#53605: CC Mode 5.35.1 (C++//l); C++11 string literal operator mishighlighted)

From: [email-masked] (GNU bug Tracking System)
Date: Mon, 31 Jan 2022 17:51:01 +0000

Your bug report

#53605: CC Mode 5.35.1 (C++//l); C++11 string literal operator mishighlighted

which was filed against the cc-mode package, has been closed.

The explanation is attached below, along with your original report.
If you require more details, please reply to [email-masked].

-- 
53605: http://debbugs.gnu.org/cgi/bugreport.cgi?bug=53605
GNU Bug Tracking System
Contact [email-masked] with problems

Subject: Re: bug#53605: CC Mode 5.35.1 (C++//l); C++11 string literal operator mishighlighted
From: Alan Mackenzie <[email-masked]>
To: Richard Copley <[email-masked]>
Cc: [email-masked]
Date: Mon, 31 Jan 2022 17:50:44 +0000
List-Id: <debbugs-submit.debbugs.gnu.org>

Hello, Richard.

On Mon, Jan 31, 2022 at 14:37:12 +0000, Richard Copley wrote:
> Hi Alan,

> On Sun, 30 Jan 2022 at 15:42, Alan Mackenzie <[email-masked]> wrote:

> > Yes.  Please try out the following patch, and confirm that it has
> > fixed the problem (or let me know what is still not right).  It's
> > actually a small patch, just binding `case-fold-search' to nil in a
> > function, but reindenting the entire function.

> Works for me. Thank you!

Thanks for the quick response!  I've committed the fix to CC Mode and
the Emacs master branch at savannah, and I'm closing the bug with this
post.

-- 
Alan Mackenzie (Nuremberg, Germany).

Subject: CC Mode 5.35.1 (C++//l); C++11 string literal operator mishighlighted
From: Richard Copley <[email-masked]>
To: [email-masked]
Date: Fri, 28 Jan 2022 14:53:20 +0000
List-Id: <debbugs-submit.debbugs.gnu.org>

Package: cc-mode
Hi Alan,

The code below (which is valid since C++11) is mishighlighted,
with the open-paren after "_opcode" in font-lock-warning face
and the subsequent characters in font-lock-string-face. This is
unstable: inserting and deleting a character before the open-
paren fixes the highlighting, and [M-x normal-mode RET] breaks
it again.

<<END
#include <cstddef>
int operator""_opcode(const char *p, std::size_t size) {
  return 0;
}
END

Emacs  : GNU Emacs 29.0.50 (build 3, x86_64-w64-mingw32)
 of 2022-01-28 (on master)
Package: CC Mode 5.35.1 (C++//l)
Buffer Style: gnu
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++-mode . gtkdoc))
 c-cleanup-list '(scope-operator)
 c-hanging-braces-alist '((substatement-open before after)
(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 '(t c-gnu-impose-minimum)
 c-label-minimum-indentation 1
 c-offsets-alist '((inexpr-class . +)
           (inexpr-statement . +)
           (lambda-intro-cont . +)
           (inlambda . 0)
           (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 . -)
           (case-label . 0)
           (substatement . +)
           (statement-case-intro . +)
           (statement . 0)
           (brace-entry-open . 0)
           (brace-list-entry . 0)
           (brace-list-close . 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 . 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)
           (topmost-intro-cont first c-lineup-topmost-intro-cont
c-lineup-gnu-DEFUN-intro-cont)
           (brace-list-intro first c-lineup-2nd-brace-entry-in-arglist
c-lineup-class-decl-init-+ +)
           (brace-list-open . +)
           (inline-open . 0)
           (arglist-close . c-lineup-arglist)
           (arglist-intro . c-lineup-arglist-intro-after-paren)
           (statement-cont . +)
           (statement-case-open . +)
           (label . 0)
           (substatement-label . 0)
           (substatement-open . +)
           (knr-argdecl-intro . 5)
           (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 '((java-mode . "java") (awk-mode . "awk") (other . "gnu"))
 c-enable-xemacs-performance-kludge-p nil
 c-old-style-variable-behavior nil
 defun-prompt-regexp nil
 tab-width 8
 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 "[     ]*\\(//+\\|\\**\\)[     ]*\\([
]*\\([-–!|#%;>*·•‣⁃◦]+[     ]*\\)*\\)"
 )