unofficial mirror of bug-gnu-emacs@gnu.org 
 help / color / mirror / code / Atom feed
* bug#4192: 23.1; special fontification for "//" in cc-mode
@ 2009-08-18 16:24 Tom Tromey
  2009-08-21 21:33 ` Alan Mackenzie
  0 siblings, 1 reply; 11+ messages in thread
From: Tom Tromey @ 2009-08-18 16:24 UTC (permalink / raw)
  To: bug-gnu-emacs


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@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-bu
 ffer-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






^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: bug#4192: 23.1; special fontification for "//" in cc-mode
  2009-08-18 16:24 bug#4192: 23.1; special fontification for "//" in cc-mode Tom Tromey
@ 2009-08-21 21:33 ` Alan Mackenzie
  2016-02-29  3:36   ` Lars Ingebrigtsen
  0 siblings, 1 reply; 11+ messages in thread
From: Alan Mackenzie @ 2009-08-21 21:33 UTC (permalink / raw)
  To: Tom Tromey, 4192; +Cc: bug-cc-mode, bug-gnu-emacs

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@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).

------------------------------------------------------------------------------
Let Crystal Reports handle the reporting - Free Crystal Reports 2008 30-Day 
trial. Simplify your report design, integration and deployment - and focus on 
what you do best, core application coding. Discover what's new with 
Crystal Reports now.  http://p.sf.net/sfu/bobj-july


^ permalink raw reply	[flat|nested] 11+ messages in thread

* bug#4192: 23.1; special fontification for "//" in cc-mode
  2009-08-21 21:33 ` Alan Mackenzie
@ 2016-02-29  3:36   ` Lars Ingebrigtsen
  2019-11-01 16:08     ` Lars Ingebrigtsen
  0 siblings, 1 reply; 11+ messages in thread
From: Lars Ingebrigtsen @ 2016-02-29  3:36 UTC (permalink / raw)
  To: Alan Mackenzie; +Cc: tromey, 4192

Alan Mackenzie <acm@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





^ permalink raw reply	[flat|nested] 11+ messages in thread

* bug#4192: 23.1; special fontification for "//" in cc-mode
  2016-02-29  3:36   ` Lars Ingebrigtsen
@ 2019-11-01 16:08     ` Lars Ingebrigtsen
  2019-11-02 16:35       ` Alan Mackenzie
       [not found]       ` <20191102163513.GC6710@ACM>
  0 siblings, 2 replies; 11+ messages in thread
From: Lars Ingebrigtsen @ 2019-11-01 16:08 UTC (permalink / raw)
  To: Alan Mackenzie; +Cc: tromey, 4192

Lars Ingebrigtsen <larsi@gnus.org> writes:

> Alan Mackenzie <acm@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





^ permalink raw reply	[flat|nested] 11+ messages in thread

* bug#4192: 23.1; special fontification for "//" in cc-mode
  2019-11-01 16:08     ` Lars Ingebrigtsen
@ 2019-11-02 16:35       ` Alan Mackenzie
       [not found]       ` <20191102163513.GC6710@ACM>
  1 sibling, 0 replies; 11+ messages in thread
From: Alan Mackenzie @ 2019-11-02 16:35 UTC (permalink / raw)
  To: Lars Ingebrigtsen; +Cc: tromey, 4192

Hello, Lars.

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

> > Alan Mackenzie <acm@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).





^ permalink raw reply	[flat|nested] 11+ messages in thread

* bug#4192: 23.1; special fontification for "//" in cc-mode
       [not found]       ` <20191102163513.GC6710@ACM>
@ 2019-11-03 15:55         ` Lars Ingebrigtsen
  2019-11-03 17:46           ` Alan Mackenzie
       [not found]           ` <20191103174618.GA11619@ACM>
  0 siblings, 2 replies; 11+ messages in thread
From: Lars Ingebrigtsen @ 2019-11-03 15:55 UTC (permalink / raw)
  To: Alan Mackenzie; +Cc: tromey, 4192

Alan Mackenzie <acm@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





^ permalink raw reply	[flat|nested] 11+ messages in thread

* bug#4192: 23.1; special fontification for "//" in cc-mode
  2019-11-03 15:55         ` Lars Ingebrigtsen
@ 2019-11-03 17:46           ` Alan Mackenzie
       [not found]           ` <20191103174618.GA11619@ACM>
  1 sibling, 0 replies; 11+ messages in thread
From: Alan Mackenzie @ 2019-11-03 17:46 UTC (permalink / raw)
  To: Lars Ingebrigtsen; +Cc: tom, 4192

Hello, Lars.

On Sun, Nov 03, 2019 at 16:55:42 +0100, Lars Ingebrigtsen wrote:
> Alan Mackenzie <acm@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.
+
 \f
 * 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).





^ permalink raw reply related	[flat|nested] 11+ messages in thread

* bug#4192: 23.1; special fontification for "//" in cc-mode
       [not found]           ` <20191103174618.GA11619@ACM>
@ 2019-11-03 17:59             ` Eli Zaretskii
  2019-11-03 19:20               ` Alan Mackenzie
  2019-11-07 20:11             ` Lars Ingebrigtsen
  1 sibling, 1 reply; 11+ messages in thread
From: Eli Zaretskii @ 2019-11-03 17:59 UTC (permalink / raw)
  To: Alan Mackenzie; +Cc: larsi, tom, 4192

> Date: Sun, 3 Nov 2019 17:46:18 +0000
> From: Alan Mackenzie <acm@muc.de>
> Cc: tom@tromey.com, 4192@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.





^ permalink raw reply	[flat|nested] 11+ messages in thread

* bug#4192: 23.1; special fontification for "//" in cc-mode
  2019-11-03 17:59             ` Eli Zaretskii
@ 2019-11-03 19:20               ` Alan Mackenzie
  0 siblings, 0 replies; 11+ messages in thread
From: Alan Mackenzie @ 2019-11-03 19:20 UTC (permalink / raw)
  To: Eli Zaretskii; +Cc: larsi, tom, 4192

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@muc.de>
> > Cc: tom@tromey.com, 4192@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).





^ permalink raw reply	[flat|nested] 11+ messages in thread

* bug#4192: 23.1; special fontification for "//" in cc-mode
       [not found]           ` <20191103174618.GA11619@ACM>
  2019-11-03 17:59             ` Eli Zaretskii
@ 2019-11-07 20:11             ` Lars Ingebrigtsen
  2019-11-09 12:20               ` Alan Mackenzie
  1 sibling, 1 reply; 11+ messages in thread
From: Lars Ingebrigtsen @ 2019-11-07 20:11 UTC (permalink / raw)
  To: Alan Mackenzie; +Cc: tom, 4192

Alan Mackenzie <acm@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





^ permalink raw reply	[flat|nested] 11+ messages in thread

* bug#4192: 23.1; special fontification for "//" in cc-mode
  2019-11-07 20:11             ` Lars Ingebrigtsen
@ 2019-11-09 12:20               ` Alan Mackenzie
  0 siblings, 0 replies; 11+ messages in thread
From: Alan Mackenzie @ 2019-11-09 12:20 UTC (permalink / raw)
  To: Lars Ingebrigtsen; +Cc: 4192-done, tom

Hello, Lars.

On Thu, Nov 07, 2019 at 21:11:14 +0100, Lars Ingebrigtsen wrote:
> Alan Mackenzie <acm@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).





^ permalink raw reply	[flat|nested] 11+ messages in thread

end of thread, other threads:[~2019-11-09 12:20 UTC | newest]

Thread overview: 11+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2009-08-18 16:24 bug#4192: 23.1; special fontification for "//" in cc-mode Tom Tromey
2009-08-21 21:33 ` Alan Mackenzie
2016-02-29  3:36   ` Lars Ingebrigtsen
2019-11-01 16:08     ` Lars Ingebrigtsen
2019-11-02 16:35       ` Alan Mackenzie
     [not found]       ` <20191102163513.GC6710@ACM>
2019-11-03 15:55         ` Lars Ingebrigtsen
2019-11-03 17:46           ` Alan Mackenzie
     [not found]           ` <20191103174618.GA11619@ACM>
2019-11-03 17:59             ` Eli Zaretskii
2019-11-03 19:20               ` Alan Mackenzie
2019-11-07 20:11             ` Lars Ingebrigtsen
2019-11-09 12:20               ` Alan Mackenzie

Code repositories for project(s) associated with this public inbox

	https://git.savannah.gnu.org/cgit/emacs.git

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).