GNU bug report logs - #4192
23.1; special fontification for "//" in cc-mode

Previous Next

Packages: emacs, cc-mode;

Reported by: Tom Tromey <tromey <at> redhat.com>

Date: Thu, 20 Aug 2009 20:06:04 UTC

Severity: wishlist

Tags: patch

Done: Alan Mackenzie <acm <at> muc.de>

Bug is archived. No further changes may be made.

To add a comment to this bug, you must first unarchive it, by sending
a message to control AT debbugs.gnu.org, with unarchive 4192 in the body.
You can then email your comments to 4192 AT debbugs.gnu.org in the normal way.

Toggle the display of automated, internal messages from the tracker.

View this report as an mbox folder, status mbox, maintainer mbox


Report forwarded to bug-submit-list <at> lists.donarmstrong.com, Emacs Bugs <bug-gnu-emacs <at> gnu.org>:
bug#4192; Package emacs. (Thu, 20 Aug 2009 20:06:05 GMT) Full text and rfc822 format available.

Acknowledgement sent to Tom Tromey <tromey <at> redhat.com>:
New bug report received and forwarded. Copy sent to Emacs Bugs <bug-gnu-emacs <at> gnu.org>. (Thu, 20 Aug 2009 20:06:06 GMT) Full text and rfc822 format available.

Message #5 received at submit <at> emacsbugs.donarmstrong.com (full text, mbox):

From: Tom Tromey <tromey <at> redhat.com>
To: bug-gnu-emacs <at> gnu.org
Subject: 23.1; special fontification for "//" in cc-mode
Date: Tue, 18 Aug 2009 10:24:02 -0600
Please write in English if possible, because the Emacs maintainers
usually do not have translators to read other languages for them.

Your bug report will be posted to the bug-gnu-emacs <at> gnu.org mailing list,
and to the gnu.emacs.bug news group.

Please describe exactly what actions triggered the bug
and the precise symptoms of the bug:


This is a feature request for cc-mode.

I work on a number of projects that use C89, not C99.  In these
projects, it is invalid to use "//"-style comment.  It would be nice if
cc-mode would optionally flag such comments in a special face, so that I
can immediately see when I've written a comment incorrectly.


If Emacs crashed, and you have the Emacs process in the gdb debugger,
please include the output from the following gdb commands:
    `bt full' and `xbacktrace'.
If you would like to further debug the crash, please read the file
/usr/share/emacs/23.1/etc/DEBUG for instructions.


In GNU Emacs 23.1.1 (i386-redhat-linux-gnu, GTK+ Version 2.16.5)
 of 2009-08-03 on x86-5.fedora.phx.redhat.com
Windowing system distributor `The X.Org Foundation', version 11.0.10601901
configured using `configure  '--build=i386-redhat-linux-gnu' '--host=i386-redhat-linux-gnu' '--target=i586-redhat-linux-gnu' '--program-prefix=' '--prefix=/usr' '--exec-prefix=/usr' '--bindir=/usr/bin' '--sbindir=/usr/sbin' '--sysconfdir=/etc' '--datadir=/usr/share' '--includedir=/usr/include' '--libdir=/usr/lib' '--libexecdir=/usr/libexec' '--localstatedir=/var' '--sharedstatedir=/var/lib' '--mandir=/usr/share/man' '--infodir=/usr/share/info' '--with-dbus' '--with-gif' '--with-jpeg' '--with-png' '--with-rsvg' '--with-tiff' '--with-xft' '--with-xpm' '--with-x-toolkit=gtk' 'build_alias=i386-redhat-linux-gnu' 'host_alias=i386-redhat-linux-gnu' 'target_alias=i586-redhat-linux-gnu' 'CFLAGS=-DMAIL_USE_LOCKF -O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector --param=ssp-buffer-size=4 -m32 -march=i586 -mtune=generic -fasynchronous-unwind-tables''

Important settings:
  value of $LC_ALL: nil
  value of $LC_COLLATE: nil
  value of $LC_CTYPE: nil
  value of $LC_MESSAGES: nil
  value of $LC_MONETARY: nil
  value of $LC_NUMERIC: nil
  value of $LC_TIME: nil
  value of $LANG: en_US.UTF-8
  value of $XMODIFIERS: nil
  locale-coding-system: utf-8-unix
  default-enable-multibyte-characters: t

Major mode: Fundamental

Minor modes in effect:
  erc-list-mode: t
  erc-menu-mode: t
  erc-autojoin-mode: t
  erc-ring-mode: t
  erc-pcomplete-mode: t
  erc-track-mode: t
  erc-track-minor-mode: t
  erc-match-mode: t
  erc-button-mode: t
  erc-fill-mode: t
  erc-stamp-mode: t
  erc-netsplit-mode: t
  erc-spelling-mode: t
  erc-truncate-mode: t
  diff-auto-refine-mode: t
  shell-dirtrack-mode: t
  highlight-changes-visible-mode: t
  erc-status-mode: t
  erc-services-mode: t
  erc-networks-mode: t
  erc-irccontrols-mode: t
  erc-noncommands-mode: t
  erc-move-to-prompt-mode: t
  erc-readonly-mode: t
  tooltip-mode: t
  mouse-wheel-mode: t
  file-name-shadow-mode: t
  global-font-lock-mode: t
  font-lock-mode: t
  global-auto-composition-mode: t
  auto-composition-mode: t
  auto-encryption-mode: t
  auto-compression-mode: t
  line-number-mode: t
  transient-mark-mode: t

Recent input:
e a t u r e s , SPC b u t SPC i t SPC d i d SPC b r 
e a k SPC w 3 m - e l SPC f o r SPC m e SPC : ( <return> 
n o SPC m o r e SPC h t m l SPC m a i l SPC f o r SPC 
a SPC w h i l e <return> <switch-frame> <switch-frame> 
m a y b e SPC t h a t SPC i s SPC a SPC p l u s SPC 
<return> <f10> <f10> <f10> M-v M-> <f10> C-z o C-x 
b P <return> C-x k <return> C-x b L <tab> <return> 
C-v C-v M-v M-v M-v C-z o <f10> <f10> <f10> <f10> C-h 
i d m c c <tab> SPC m <tab> <return> C-v C-l m o d 
<tab> <return> l C-v C-s c o m m e n t C-a m <return> 
C-v C-s C-s C-v M-> C-s C-s C-s C-s C-s C-s C-s C-a 
C-v M-> C-s C-s C-s C-s C-a n n n n C-s C-s C-a SPC 
n u n n p 1 u SPC SPC SPC SPC SPC SPC p SPC n SPC n 
n u n SPC SPC SPC SPC SPC SPC SPC SPC SPC SPC SPC SPC 
<backspace> n SPC SPC SPC SPC SPC SPC SPC SPC SPC SPC 
SPC n SPC SPC SPC SPC SPC SPC n n n n n n C-s / / C-a 
C-v n C-s C-s C-a n n t C-s / / C-s C-s C-s C-s C-s 
C-s C-s C-s C-s C-s C-s C-s C-s C-s C-s C-s C-s C-a 
q C-z o M-x r e p r o t - e C-u C-b C-b C-f C-t C-e 
m <tab> <return>

Recent messages:
call-interactively: End of buffer
Mark set
Mark saved where search started
Mark set
Mark saved where search started
Info-extract-pointer: Node has no Next [2 times]
Searching subfile ccmode-2...
uncompressing ccmode-2.gz...done
uncompressing ccmode-1.gz...done
Mark saved where search started

Tom




Severity set to 'wishlist' from 'normal' Request was from Glenn Morris <rgm <at> gnu.org> to control <at> emacsbugs.donarmstrong.com. (Fri, 21 Aug 2009 01:15:05 GMT) Full text and rfc822 format available.

bug reassigned from package 'emacs' to 'emacs,cc-mode'. Request was from Glenn Morris <rgm <at> gnu.org> to control <at> emacsbugs.donarmstrong.com. (Fri, 21 Aug 2009 01:15:05 GMT) Full text and rfc822 format available.

Information forwarded to bug-submit-list <at> lists.donarmstrong.com, Emacs Bugs <bug-gnu-emacs <at> gnu.org>, owner <at> emacsbugs.donarmstrong.com:
bug#4192; Package emacs,cc-mode. (Fri, 21 Aug 2009 21:35:04 GMT) Full text and rfc822 format available.

Acknowledgement sent to bug-cc-mode <at> gnu.org:
Extra info received and forwarded to list. Copy sent to Emacs Bugs <bug-gnu-emacs <at> gnu.org>, owner <at> emacsbugs.donarmstrong.com. (Fri, 21 Aug 2009 21:35:05 GMT) Full text and rfc822 format available.

Message #14 received at submit <at> emacsbugs.donarmstrong.com (full text, mbox):

From: Alan Mackenzie <acm <at> muc.de>
To: Tom Tromey <tromey <at> redhat.com>, 4192 <at> debbugs.gnu.org
Cc: bug-gnu-emacs <at> gnu.org, bug-cc-mode <at> gnu.org
Subject: Re: bug#4192: 23.1; special fontification for "//" in cc-mode
Date: Fri, 21 Aug 2009 21:33:23 +0000
Hi, Tom!

On Tue, Aug 18, 2009 at 10:24:02AM -0600, Tom Tromey wrote:

> This is a feature request for cc-mode.

> I work on a number of projects that use C89, not C99.  In these
> projects, it is invalid to use "//"-style comment.  It would be nice if
> cc-mode would optionally flag such comments in a special face, so that
> I can immediately see when I've written a comment incorrectly.

I'm not sure this is important enough to warrant a fully
implemented/documented/QA'd feature, but then again, I'm not sure it's
not.

Here's a quick hack called c-disable-line-comments.el.  Load it into your
Emacs before CC Mode (in particular, before desktop gets loaded).

Toggling c-disable-line-comments doesn't work smoothly with the font
locking, but I'm assuming here you'll not really be wanting to toggle
this.

Criticism is, of course, welcome.  I've set the followup to
bug-cc-mode <at> gnu.org.

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; c-disable-line-comments.el.
;; 
;; A function which disables line comments in C mode and fontifies the
;; delimiter "//" with font-lock-warning-face.
;;
;; It should be loaded before CC Mode.  It will only work in GNU Emacs, and
;; has only been "properly" tested in Emacs 23.1.
;;
;; Written 2009-08-21 by Alan Mackenzie at the request of Tom Tromey.
;;
;; This file isn't part of Emacs.  It's licence is GPL version 2, or (at your
;; option) any later version.  The copyright has been assigned to the FSF.

(defun c-warning-face-on-// ()
  (font-lock-add-keywords 'c-mode
			  '(("//" . font-lock-warning-face))))
(add-hook 'c-initialization-hook 'c-warning-face-on-//)

(defvar c-disable-line-comments t
  "Is t when line comments in C Mode are disabled, nil otherwise.
Note that this variable is NOT buffer local.")

(defun c-disable-line-comments (arg)
  "Toggle the disablement of line comments in every C Mode buffer.
With a non-nil argument \(which must be numeric), disable
comments when it's positive, reenable them when negative.

\(Incidentally, the delimiter \"//\" gets fontified with
font-lock-warning-face when \"//\" is disabled, but this defun
doesn't do this."
  (interactive "P")
  (setq c-disable-line-comments
	(cond
	 ((null arg) (not c-disable-line-comments))
	 ((> (prefix-numeric-value arg) 0) t)
	 (t nil)))

  (if c-disable-line-comments
      (progn
	(modify-syntax-entry ?/  ". 14" c-mode-syntax-table)
	(modify-syntax-entry ?\n "  "  c-mode-syntax-table)
	(modify-syntax-entry ?\r "  "  c-mode-syntax-table))
    (modify-syntax-entry ?/  ". 124b" c-mode-syntax-table)
    (modify-syntax-entry ?\n "> b"  c-mode-syntax-table)
    (modify-syntax-entry ?\r "> b"  c-mode-syntax-table)))

(c-disable-line-comments 1)
;; End of c-disable-line-comments.el
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

> Tom

-- 
Alan Mackenzie (Nuremberg, Germany).




Information forwarded to bug-submit-list <at> lists.donarmstrong.com, Emacs Bugs <bug-gnu-emacs <at> gnu.org>, owner <at> emacsbugs.donarmstrong.com:
bug#4192; Package emacs,cc-mode. (Fri, 21 Aug 2009 21:35:06 GMT) Full text and rfc822 format available.

Acknowledgement sent to bug-cc-mode <at> gnu.org:
Extra info received and forwarded to list. Copy sent to Emacs Bugs <bug-gnu-emacs <at> gnu.org>, owner <at> emacsbugs.donarmstrong.com. (Fri, 21 Aug 2009 21:35:07 GMT) Full text and rfc822 format available.

Added tag(s) patch. Request was from Glenn Morris <rgm <at> gnu.org> to control <at> debbugs.gnu.org. (Wed, 27 Jan 2010 01:53:02 GMT) Full text and rfc822 format available.

Information forwarded to bug-gnu-emacs <at> gnu.org, bug-cc-mode <at> gnu.org:
bug#4192; Package emacs,cc-mode. (Mon, 29 Feb 2016 03:37:01 GMT) Full text and rfc822 format available.

Message #24 received at 4192 <at> debbugs.gnu.org (full text, mbox):

From: Lars Ingebrigtsen <larsi <at> gnus.org>
To: Alan Mackenzie <acm <at> muc.de>
Cc: Tom Tromey <tromey <at> redhat.com>, bug-cc-mode <at> gnu.org, 4192 <at> debbugs.gnu.org
Subject: Re: bug#4192: 23.1; special fontification for "//" in cc-mode
Date: Mon, 29 Feb 2016 14:36:15 +1100
Alan Mackenzie <acm <at> muc.de> writes:

>> This is a feature request for cc-mode.
>
>> I work on a number of projects that use C89, not C99.  In these
>> projects, it is invalid to use "//"-style comment.  It would be nice if
>> cc-mode would optionally flag such comments in a special face, so that
>> I can immediately see when I've written a comment incorrectly.
>
> I'm not sure this is important enough to warrant a fully
> implemented/documented/QA'd feature, but then again, I'm not sure it's
> not.
>
> Here's a quick hack called c-disable-line-comments.el.  Load it into your
> Emacs before CC Mode (in particular, before desktop gets loaded).
>
> Toggling c-disable-line-comments doesn't work smoothly with the font
> locking, but I'm assuming here you'll not really be wanting to toggle
> this.

I think this sounds useful.  For instance, in the Emacs source code, //
is also frowned upon, so having those be marked by CC mode would be
handy.  This doesn't seem to have made its way into the code base, I
think.

-- 
(domestic pets only, the antidote for overdose, milk.)
   bloggy blog: http://lars.ingebrigtsen.no




Information forwarded to bug-gnu-emacs <at> gnu.org, bug-cc-mode <at> gnu.org:
bug#4192; Package emacs,cc-mode. (Fri, 01 Nov 2019 16:09:02 GMT) Full text and rfc822 format available.

Message #27 received at 4192 <at> debbugs.gnu.org (full text, mbox):

From: Lars Ingebrigtsen <larsi <at> gnus.org>
To: Alan Mackenzie <acm <at> muc.de>
Cc: Tom Tromey <tromey <at> redhat.com>, bug-cc-mode <at> gnu.org, 4192 <at> debbugs.gnu.org
Subject: Re: bug#4192: 23.1; special fontification for "//" in cc-mode
Date: Fri, 01 Nov 2019 17:08:48 +0100
Lars Ingebrigtsen <larsi <at> gnus.org> writes:

> Alan Mackenzie <acm <at> muc.de> writes:
>
>>> This is a feature request for cc-mode.
>>
>>> I work on a number of projects that use C89, not C99.  In these
>>> projects, it is invalid to use "//"-style comment.  It would be nice if
>>> cc-mode would optionally flag such comments in a special face, so that
>>> I can immediately see when I've written a comment incorrectly.
>>
>> I'm not sure this is important enough to warrant a fully
>> implemented/documented/QA'd feature, but then again, I'm not sure it's
>> not.
>>
>> Here's a quick hack called c-disable-line-comments.el.  Load it into your
>> Emacs before CC Mode (in particular, before desktop gets loaded).
>>
>> Toggling c-disable-line-comments doesn't work smoothly with the font
>> locking, but I'm assuming here you'll not really be wanting to toggle
>> this.
>
> I think this sounds useful.  For instance, in the Emacs source code, //
> is also frowned upon, so having those be marked by CC mode would be
> handy.  This doesn't seem to have made its way into the code base, I
> think.

Alan, have you thought any further about this?  It does seem like a nice
feature.

-- 
(domestic pets only, the antidote for overdose, milk.)
   bloggy blog: http://lars.ingebrigtsen.no




Information forwarded to bug-gnu-emacs <at> gnu.org, bug-cc-mode <at> gnu.org:
bug#4192; Package emacs,cc-mode. (Sat, 02 Nov 2019 16:36:02 GMT) Full text and rfc822 format available.

Message #30 received at 4192 <at> debbugs.gnu.org (full text, mbox):

From: Alan Mackenzie <acm <at> muc.de>
To: Lars Ingebrigtsen <larsi <at> gnus.org>
Cc: Tom Tromey <tromey <at> redhat.com>, bug-cc-mode <at> gnu.org, 4192 <at> debbugs.gnu.org
Subject: Re: bug#4192: 23.1; special fontification for "//" in cc-mode
Date: Sat, 2 Nov 2019 16:35:13 +0000
Hello, Lars.

On Fri, Nov 01, 2019 at 17:08:48 +0100, Lars Ingebrigtsen wrote:
> Lars Ingebrigtsen <larsi <at> gnus.org> writes:

> > Alan Mackenzie <acm <at> muc.de> writes:

> >>> This is a feature request for cc-mode.

> >>> I work on a number of projects that use C89, not C99.  In these
> >>> projects, it is invalid to use "//"-style comment.  It would be
> >>> nice if cc-mode would optionally flag such comments in a special
> >>> face, so that I can immediately see when I've written a comment
> >>> incorrectly.

> >> I'm not sure this is important enough to warrant a fully
> >> implemented/documented/QA'd feature, but then again, I'm not sure
> >> it's not.

> >> Here's a quick hack called c-disable-line-comments.el.  Load it into
> >> your Emacs before CC Mode (in particular, before desktop gets
> >> loaded).

> >> Toggling c-disable-line-comments doesn't work smoothly with the font
> >> locking, but I'm assuming here you'll not really be wanting to
> >> toggle this.

> > I think this sounds useful.  For instance, in the Emacs source code,
> > // is also frowned upon, so having those be marked by CC mode would
> > be handy.  This doesn't seem to have made its way into the code base,
> > I think.

> Alan, have you thought any further about this?  It does seem like a
> nice feature.

I'm still not sure either way whether or not this is a feature worth
implementing.  It may be nice, but it will add bulk to CC Mode and Emacs.

But, given that there are people (yourself and Tom Tromey, the OP) who
think it worthwhile, I'm willing to implement it.  It will not be that
difficult, except for deciding what to call the new configuration
variable(s).  ;-)  A couple of hours, perhaps.

So, yes, sometime in the very near future, I will implement this.

> -- 
> (domestic pets only, the antidote for overdose, milk.)
>    bloggy blog: http://lars.ingebrigtsen.no

-- 
Alan Mackenzie (Nuremberg, Germany).




Information forwarded to bug-gnu-emacs <at> gnu.org, bug-cc-mode <at> gnu.org:
bug#4192; Package emacs,cc-mode. (Sun, 03 Nov 2019 15:56:02 GMT) Full text and rfc822 format available.

Message #33 received at 4192 <at> debbugs.gnu.org (full text, mbox):

From: Lars Ingebrigtsen <larsi <at> gnus.org>
To: Alan Mackenzie <acm <at> muc.de>
Cc: Tom Tromey <tromey <at> redhat.com>, bug-cc-mode <at> gnu.org, 4192 <at> debbugs.gnu.org
Subject: Re: bug#4192: 23.1; special fontification for "//" in cc-mode
Date: Sun, 03 Nov 2019 16:55:42 +0100
Alan Mackenzie <acm <at> muc.de> writes:

> So, yes, sometime in the very near future, I will implement this.

Great!

-- 
(domestic pets only, the antidote for overdose, milk.)
   bloggy blog: http://lars.ingebrigtsen.no




Information forwarded to bug-gnu-emacs <at> gnu.org, bug-cc-mode <at> gnu.org:
bug#4192; Package emacs,cc-mode. (Sun, 03 Nov 2019 17:47:01 GMT) Full text and rfc822 format available.

Message #36 received at 4192 <at> debbugs.gnu.org (full text, mbox):

From: Alan Mackenzie <acm <at> muc.de>
To: Lars Ingebrigtsen <larsi <at> gnus.org>
Cc: bug-cc-mode <at> gnu.org, Tom Tromey <tom <at> tromey.com>, 4192 <at> debbugs.gnu.org
Subject: Re: bug#4192: 23.1; special fontification for "//" in cc-mode
Date: Sun, 3 Nov 2019 17:46:18 +0000
Hello, Lars.

On Sun, Nov 03, 2019 at 16:55:42 +0100, Lars Ingebrigtsen wrote:
> Alan Mackenzie <acm <at> muc.de> writes:

> > So, yes, sometime in the very near future, I will implement this.

> Great!

Would you (and anybody else) please review the following patch.  Short
instructions on how to enable the feature are in the NEWS alteration;
longer ones are in the cc-mode.texi bit:



diff --git a/doc/misc/cc-mode.texi b/doc/misc/cc-mode.texi
index 217261090b..5ee5540284 100644
--- a/doc/misc/cc-mode.texi
+++ b/doc/misc/cc-mode.texi
@@ -1149,7 +1149,9 @@ Minor Modes
 @table @asis
 @item comment style
 This specifies whether comment commands (such as @kbd{M-;}) insert
-block comments or line comments.
+block comments or line comments.@footnote{You can emphasize
+non-default style comments in your code by giving their delimiters
+@code{font-lock-warning-face}.  @xref{Wrong Comment Style}.}
 @item electric mode
 When this is enabled, certain visible characters cause reformatting as
 they are typed.  This is normally helpful, but can be a nuisance when
@@ -1866,6 +1868,7 @@ Font Locking
 * Font Locking Preliminaries::
 * Faces::
 * Doc Comments::
+* Wrong Comment Style::
 * Misc Font Locking::
 * AWK Mode Font Locking::
 @end menu
@@ -2069,7 +2072,7 @@ Faces
 
 
 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
-@node    Doc Comments, Misc Font Locking, Faces, Font Locking
+@node    Doc Comments, Wrong Comment Style, Faces, Font Locking
 @comment node-name, next, previous, up
 @section Documentation Comments
 @cindex documentation comments
@@ -2149,7 +2152,29 @@ Doc Comments
 contributing it: send a note to @email{bug-cc-mode@@gnu.org}.
 
 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
-@node    Misc Font Locking, AWK Mode Font Locking, Doc Comments, Font Locking
+@node    Wrong Comment Style, Misc Font Locking, Doc Comments, Font Locking
+@comment  node-name,  next,  previous,  up
+@section Marking ''Wrong'' style comments
+@comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+
+Most languages supported by @ccmode{} have two styles of comments,
+namely block comments and line comments.  Your project may have such a
+strong preference for one of them, that you wish ''wrong'' style
+comments to be clearly marked.
+
+You can get @ccmode{} to do this by setting the default comment style,
+if necessary, (@pxref{Minor Modes}) and setting the customizable
+option @code{c-mark-wrong-style-of-comment} to non-@code{nil}.
+
+@defvar c-mark-wrong-style-of-comment
+@vindex mark-wrong-style-of-comment (c-)
+When this customizable option is non-@code{nil}, comment delimiters
+which aren't of the default style will be fontified with
+@code{font-lock-warning-face}.
+@end defvar
+
+@comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+@node    Misc Font Locking, AWK Mode Font Locking, Wrong Comment Style, Font Locking
 @comment  node-name,  next,  previous,  up
 @section Miscellaneous Font Locking
 @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
diff --git a/etc/NEWS b/etc/NEWS
index 033cb48978..56faf13281 100644
--- a/etc/NEWS
+++ b/etc/NEWS
@@ -2215,6 +2215,14 @@ file-local variable, you may need to update the value.
 *** Declare 'define-overload' and 'define-child-mode' as obsolete
 *** Rename several internal functions to use a ''mode-local-' prefix
 
+** CC Mode
+
++++
+*** You can now flag the "wrong style" of comments with
+font-lock-warning-face.  To do this, use c-toggle-comment-style, if
+needed, to set the desired default comment style (block or line); then
+set the option c-mark-wrong-style-of-comment to non-nil.
+
 
 * New Modes and Packages in Emacs 27.1
 
diff --git a/lisp/progmodes/cc-fonts.el b/lisp/progmodes/cc-fonts.el
index c27b70603e..0daea8c84c 100644
--- a/lisp/progmodes/cc-fonts.el
+++ b/lisp/progmodes/cc-fonts.el
@@ -95,6 +95,7 @@
 ;; during compilation.
 (cc-bytecomp-defvar c-preprocessor-face-name)
 (cc-bytecomp-defvar c-reference-face-name)
+(cc-bytecomp-defvar c-block-comment-flag)
 (cc-bytecomp-defun c-fontify-recorded-types-and-refs)
 (cc-bytecomp-defun c-font-lock-declarators)
 (cc-bytecomp-defun c-font-lock-objc-method)
@@ -532,7 +533,12 @@ c-fontify-recorded-types-and-refs
 		 (sws-depth (c-lang-const c-syntactic-ws-depth))
 		 (nsws-depth (c-lang-const c-nonempty-syntactic-ws-depth)))
 
-	    `(;; The stuff after #error and #warning is a message, so
+	    `(;; Fontify "invalid" comment delimiters
+	      ,@(when (and (c-lang-const c-block-comment-starter)
+			   (c-lang-const c-line-comment-starter))
+		  `(c-maybe-font-lock-wrong-style-comments))
+
+	      ;; The stuff after #error and #warning is a message, so
 	      ;; fontify it as a string.
 	      ,@(when (c-lang-const c-cpp-message-directives)
 		  (let* ((re (c-make-keywords-re 'appendable ; nil
@@ -715,6 +721,59 @@ c-font-lock-invalid-single-quotes
       (parse-partial-sexp end limit nil nil state 'syntax-table)))
     nil)
 
+(defun c-maybe-font-lock-wrong-style-comments (limit)
+  ;; This function will be called from font-lock-for a region bounded by POINT
+  ;; and LIMIT, as though it were to identify a keyword for
+  ;; font-lock-keyword-face.  It always returns NIL to inhibit this and
+  ;; prevent a repeat invocation.  See elisp/lispref page "Search-based
+  ;; Fontification".
+  ;;
+  ;; This function fontifies "invalid" comment delimiters with
+  ;; `font-lock-warning-face'.  A delimiter is "invalid" when
+  ;; `c-mark-wrong-style-of-comment' is non-nil, and the delimiter style is
+  ;; not the default specified by `c-block-comment-flag'.
+  (when c-mark-wrong-style-of-comment
+    (let* ((lit (c-semi-pp-to-literal (point)))
+	   (s (car lit))		; parse-partial-sexp state.
+	   )
+      ;; First, deal with and move out of any literal we start in.
+      (cond
+       ((null (cadr lit)))		; Not in a literal
+       ((eq (cadr lit) 'string)
+	(setq s (parse-partial-sexp (point) limit nil nil s 'syntax-table)))
+       ((and (not c-block-comment-flag) ; In an "invalid" block comment
+	     (eq (cadr lit) 'c))
+	(setq s (parse-partial-sexp (point) limit nil nil s 'syntax-table))
+	;; Font lock the block comment ender with warning face.
+	(when (not (nth 4 s))
+	  (c-put-font-lock-face (- (point) (length c-block-comment-ender))
+				(point) font-lock-warning-face)))
+       (t ; In a line comment, or a "valid" block comment
+	(setq s (parse-partial-sexp (point) limit nil nil s 'syntax-table))))
+
+      (while (< (point) limit)
+	(setq s (parse-partial-sexp (point) limit nil nil s 'syntax-table))
+	(cond
+	 ((or (nth 3 s)			; In a string
+	      (and (nth 4 s)		; In a comment
+		   (eq (nth 7 s)	; Comment style
+		       (if c-block-comment-flag
+			   nil		; Block comment
+			 1))))	; Line comment
+	    ;; Move over a "valid" literal.
+	  (setq s (parse-partial-sexp (point) limit nil nil s 'syntax-table)))
+	 ((nth 4 s)			; In an invalid comment
+	 ;; Fontify the invalid comment opener.
+	  (c-put-font-lock-face (nth 8 s) (point) font-lock-warning-face)
+	  ;; Move to end of comment or LIMIT.
+	  (setq s (parse-partial-sexp (point) limit nil nil s 'syntax-table))
+	  ;; Fontify an invalid block comment ender, if that's what we have.
+	  (when (and (not c-block-comment-flag)
+		     (not (nth 4 s)))	; We're outside the comment
+	    (c-put-font-lock-face (- (point) (length c-block-comment-ender))
+				  (point) font-lock-warning-face)))))))
+  nil)
+
 (c-lang-defconst c-basic-matchers-before
   "Font lock matchers for basic keywords, labels, references and various
 other easily recognizable things that should be fontified before generic
diff --git a/lisp/progmodes/cc-vars.el b/lisp/progmodes/cc-vars.el
index 60ad42f24f..273174e041 100644
--- a/lisp/progmodes/cc-vars.el
+++ b/lisp/progmodes/cc-vars.el
@@ -1751,6 +1751,14 @@ c-make-macro-with-semi-re
 c-macro-names-with-semicolon: %s"
 		    c-macro-names-with-semicolon))))))
 
+(defcustom c-mark-wrong-style-of-comment nil
+  "Fontify \"invalid\" comment delims with `font-lock-warning-face' if non-nil.
+\"Invalid\" means a line comment when the default comment style (set by
+`c-toggle-comment-style') is block, or a block comment otherwise."
+  :type 'boolean
+  :group 'c
+  :version 27.1)
+
 (defvar c-file-style nil
   "Variable interface for setting style via File Local Variables.
 In a file's Local Variable section, you can set this variable to a



> -- 
> (domestic pets only, the antidote for overdose, milk.)
>    bloggy blog: http://lars.ingebrigtsen.no

-- 
Alan Mackenzie (Nuremberg, Germany).




Information forwarded to bug-gnu-emacs <at> gnu.org, bug-cc-mode <at> gnu.org:
bug#4192; Package emacs,cc-mode. (Sun, 03 Nov 2019 18:00:02 GMT) Full text and rfc822 format available.

Message #39 received at 4192 <at> debbugs.gnu.org (full text, mbox):

From: Eli Zaretskii <eliz <at> gnu.org>
To: Alan Mackenzie <acm <at> muc.de>
Cc: larsi <at> gnus.org, tom <at> tromey.com, 4192 <at> debbugs.gnu.org
Subject: Re: bug#4192: 23.1; special fontification for "//" in cc-mode
Date: Sun, 03 Nov 2019 19:59:24 +0200
> Date: Sun, 3 Nov 2019 17:46:18 +0000
> From: Alan Mackenzie <acm <at> muc.de>
> Cc: tom <at> tromey.com, 4192 <at> debbugs.gnu.org
> 
> -block comments or line comments.
> +block comments or line comments.@footnote{You can emphasize

@footnote should begin before the period.

> +@section Marking ''Wrong'' style comments

Why are you quoting ''like this'' in Texinfo?

> +*** You can now flag the "wrong style" of comments with
> +font-lock-warning-face.  To do this, use c-toggle-comment-style, if
> +needed, to set the desired default comment style (block or line); then
> +set the option c-mark-wrong-style-of-comment to non-nil.

Please make the first line a complete sentence, so that Outline mode
displays this sensibly.

Thanks.




Information forwarded to bug-gnu-emacs <at> gnu.org, bug-cc-mode <at> gnu.org:
bug#4192; Package emacs,cc-mode. (Sun, 03 Nov 2019 19:21:01 GMT) Full text and rfc822 format available.

Message #42 received at 4192 <at> debbugs.gnu.org (full text, mbox):

From: Alan Mackenzie <acm <at> muc.de>
To: Eli Zaretskii <eliz <at> gnu.org>
Cc: larsi <at> gnus.org, tom <at> tromey.com, 4192 <at> debbugs.gnu.org
Subject: Re: bug#4192: 23.1; special fontification for "//" in cc-mode
Date: Sun, 3 Nov 2019 19:20:37 +0000
Hello, Eli.

Thanks for doing these routine checks.

On Sun, Nov 03, 2019 at 19:59:24 +0200, Eli Zaretskii wrote:
> > Date: Sun, 3 Nov 2019 17:46:18 +0000
> > From: Alan Mackenzie <acm <at> muc.de>
> > Cc: tom <at> tromey.com, 4192 <at> debbugs.gnu.org

> > -block comments or line comments.
> > +block comments or line comments.@footnote{You can emphasize

> @footnote should begin before the period.

OK.

> > +@section Marking ''Wrong'' style comments

> Why are you quoting ''like this'' in Texinfo?

I was under the mistaken impression this was correct.  There are several
such occurrences in cc-mode.texi.  I will correct them.

> > +*** You can now flag the "wrong style" of comments with
> > +font-lock-warning-face.  To do this, use c-toggle-comment-style, if
> > +needed, to set the desired default comment style (block or line); then
> > +set the option c-mark-wrong-style-of-comment to non-nil.

> Please make the first line a complete sentence, so that Outline mode
> displays this sensibly.

OK.

> Thanks.

I'll fix all these things before committing the change.  Thanks.

-- 
Alan Mackenzie (Nuremberg, Germany).




Information forwarded to bug-gnu-emacs <at> gnu.org, bug-cc-mode <at> gnu.org:
bug#4192; Package emacs,cc-mode. (Thu, 07 Nov 2019 20:12:02 GMT) Full text and rfc822 format available.

Message #45 received at 4192 <at> debbugs.gnu.org (full text, mbox):

From: Lars Ingebrigtsen <larsi <at> gnus.org>
To: Alan Mackenzie <acm <at> muc.de>
Cc: tom <at> tromey.com, 4192 <at> debbugs.gnu.org
Subject: Re: bug#4192: 23.1; special fontification for "//" in cc-mode
Date: Thu, 07 Nov 2019 21:11:14 +0100
Alan Mackenzie <acm <at> muc.de> writes:

> Would you (and anybody else) please review the following patch.  Short
> instructions on how to enable the feature are in the NEWS alteration;
> longer ones are in the cc-mode.texi bit:

Looks nice.  The only confusing thing is that the `C-c C-k' doesn't
immediately flush the fontifying, so there's no feedback until you start
typing.  It'd be nice if `C-c C-k' immediately fontified the "wrong"
comment style.

-- 
(domestic pets only, the antidote for overdose, milk.)
   bloggy blog: http://lars.ingebrigtsen.no




Reply sent to Alan Mackenzie <acm <at> muc.de>:
You have taken responsibility. (Sat, 09 Nov 2019 12:21:02 GMT) Full text and rfc822 format available.

Notification sent to Tom Tromey <tromey <at> redhat.com>:
bug acknowledged by developer. (Sat, 09 Nov 2019 12:21:02 GMT) Full text and rfc822 format available.

Message #50 received at 4192-done <at> debbugs.gnu.org (full text, mbox):

From: Alan Mackenzie <acm <at> muc.de>
To: Lars Ingebrigtsen <larsi <at> gnus.org>
Cc: 4192-done <at> debbugs.gnu.org, tom <at> tromey.com
Subject: Re: bug#4192: 23.1; special fontification for "//" in cc-mode
Date: Sat, 9 Nov 2019 12:20:11 +0000
Hello, Lars.

On Thu, Nov 07, 2019 at 21:11:14 +0100, Lars Ingebrigtsen wrote:
> Alan Mackenzie <acm <at> muc.de> writes:

> > Would you (and anybody else) please review the following patch.  Short
> > instructions on how to enable the feature are in the NEWS alteration;
> > longer ones are in the cc-mode.texi bit:

> Looks nice.

Thanks for the review.

> The only confusing thing is that the `C-c C-k' doesn't immediately
> flush the fontifying, so there's no feedback until you start typing.
> It'd be nice if `C-c C-k' immediately fontified the "wrong" comment
> style.

Yes.  You're right.  I've amended the code so that this toggling of the
fontification of the "wrong" comments is now done instantly.

I've committed the change (including the amendments to the NEWS and
cc-mode.texi hunks requested by Eli), and I'm closing the bug with this
post.

> -- 
> (domestic pets only, the antidote for overdose, milk.)
>    bloggy blog: http://lars.ingebrigtsen.no

-- 
Alan Mackenzie (Nuremberg, Germany).




bug archived. Request was from Debbugs Internal Request <help-debbugs <at> gnu.org> to internal_control <at> debbugs.gnu.org. (Sat, 07 Dec 2019 12:24:06 GMT) Full text and rfc822 format available.

This bug report was last modified 4 years and 141 days ago.

Previous Next


GNU bug tracking system
Copyright (C) 1999 Darren O. Benham, 1997,2003 nCipher Corporation Ltd, 1994-97 Ian Jackson.