Subject: Re: bug#58940: [PATCH] feature/tree-sitter: Add more font lock faces

From: Randy Taylor <[email-masked]>
Date: Wed, 02 Nov 2022 02:04:12 +0000

On Monday, October 31st, 2022 at 22:14, Yuan Fu <[email-masked]> wrote:

> Looks good! I would add a bit more explanation/example for font-lock-property-face and font-lock-punctuation-face. Eg, it’s not immediately clear to me what does preperty represent (property of an object as in obj.prop?). And it would be nice to say that punctuation-face are for commas and parenthesises.

I added explanations (and an example for property) to the
documentation.

I'm wondering if we want to separate out the punctuation as follows:
- font-lock-punctuation-delimiter-face
- font-lock-punctuation-bracket-face
- font-lock-punctuation-special-face for any punctuation that doesn't
  fit in the aforementioned categories.

These would all inherit from font-lock-punctuation-face.

I think it would be more useful than just having
font-lock-punctuation-face, since I think most people would style a
particular type of punctuation, as opposed to all of it. And in the
definition of the highlight queries, they will usually be grouped like
above anyway.

From 8ab8545af0dc13d6e90d62063777f90c53bea911 Mon Sep 17 00:00:00 2001
From: Randy Taylor <[email-masked]>
Date: Fri, 28 Oct 2022 22:39:50 -0400
Subject: [PATCH] Add more font-lock faces

* lisp/font-lock.el (font-lock-escape-face, font-lock-number-face,
font-lock-operator-face, font-lock-property-face,
font-lock-punctuation-face): Define new faces.
* lisp/cus-theme.el (custom-theme--listed-faces): Add them to the list.
* doc/lispref/modes.texi (Faces for Font Lock): Document them.
* etc/NEWS: Mention them.
---
 doc/lispref/modes.texi | 40 +++++++++++++++++++++++++++++++++++++
 etc/NEWS               |  5 +++++
 lisp/cus-theme.el      |  7 +++++--
 lisp/font-lock.el      | 45 ++++++++++++++++++++++++++++++++++++++++++
 4 files changed, 95 insertions(+), 2 deletions(-)

diff --git a/doc/lispref/modes.texi b/doc/lispref/modes.texi
index d778636d6d..d996446189 100644
--- a/doc/lispref/modes.texi
+++ b/doc/lispref/modes.texi
@@ -3653,6 +3653,46 @@ Faces for Font Lock
 @item font-lock-negation-char-face
 @vindex font-lock-negation-char-face
 for easily-overlooked negation characters.
+
+@item font-lock-escape-face
+@vindex font-lock-escape-face
+for escape sequences in strings.
+
+@item font-lock-number-face
+@vindex font-lock-number-face
+for numbers.
+
+@item font-lock-operator-face
+@vindex font-lock-operator-face
+for operators.
+
+@item font-lock-property-face
+@vindex font-lock-property-face
+for properties of an object, such as the declaration and use of fields
+in a struct.
+This face inherits, by default, from @code{font-lock-variable-name-face}.
+
+For example,
+
+@smallexample
+typedef struct
+@{
+  int prop;
+//    ^ property
+@} obj;
+
+int main()
+@{
+  obj o;
+  o.prop = 3;
+//  ^ property
+@}
+@end smallexample
+
+@item font-lock-punctuation-face
+@vindex font-lock-punctuation-face
+for punctuation such as delimiters (e.g. @code{;}, @code{:}, @code{,})
+and brackets (e.g. @code{()}, @code{[]}, @code{@{@}}).
 @end table
 
 @node Syntactic Font Lock
diff --git a/etc/NEWS b/etc/NEWS
index c5a142b500..b1e342eff6 100644
--- a/etc/NEWS
+++ b/etc/NEWS
@@ -732,6 +732,11 @@ If the current buffer is visiting a file that is executable, the
 This determines how long to pause Emacs after a process
 filter/sentinel error has been handled.
 
++++
+** New faces for font-lock.
+'font-lock-escape-face', 'font-lock-number-face', 'font-lock-operator-face',
+'font-lock-property-face', 'font-lock-punctuation-face'.
+
 +++
 ** New face 'variable-pitch-text'.
 This face is like 'variable-pitch' (from which it inherits), but is
diff --git a/lisp/cus-theme.el b/lisp/cus-theme.el
index 90680ff68f..a977d6834c 100644
--- a/lisp/cus-theme.el
+++ b/lisp/cus-theme.el
@@ -68,9 +68,12 @@ custom-theme--listed-faces
   shadow secondary-selection trailing-whitespace
   font-lock-builtin-face font-lock-comment-delimiter-face
   font-lock-comment-face font-lock-constant-face
-  font-lock-doc-face font-lock-doc-markup-face font-lock-function-name-face
+  font-lock-doc-face font-lock-doc-markup-face
+  font-lock-escape-face font-lock-function-name-face
   font-lock-keyword-face font-lock-negation-char-face
-  font-lock-preprocessor-face font-lock-regexp-grouping-backslash
+  font-lock-number-face font-lock-operator-face
+  font-lock-preprocessor-face font-lock-property-face
+  font-lock-punctuation-face font-lock-regexp-grouping-backslash
   font-lock-regexp-grouping-construct font-lock-string-face
   font-lock-type-face font-lock-variable-name-face
   font-lock-warning-face button link link-visited fringe
diff --git a/lisp/font-lock.el b/lisp/font-lock.el
index e88dc1d3b7..3870a512bc 100644
--- a/lisp/font-lock.el
+++ b/lisp/font-lock.el
@@ -359,6 +359,21 @@ font-lock-negation-char-face
 (defvar font-lock-preprocessor-face	'font-lock-preprocessor-face
   "Face name to use for preprocessor directives.")
 
+(defvar font-lock-escape-face		'font-lock-escape-face
+  "Face name to use for escape sequences in strings.")
+
+(defvar font-lock-number-face		'font-lock-number-face
+  "Face name to use for numbers.")
+
+(defvar font-lock-operator-face	'font-lock-operator-face
+  "Face name to use for operators.")
+
+(defvar font-lock-property-face	'font-lock-property-face
+  "Face name to use for properties.")
+
+(defvar font-lock-punctuation-face	'font-lock-punctuation-face
+  "Face name to use for punctuation.")
+
 ;; Fontification variables:
 
 (defvar font-lock-keywords nil
@@ -2085,6 +2100,36 @@ font-lock-preprocessor-face
   "Font Lock mode face used to highlight preprocessor directives."
   :group 'font-lock-faces)
 
+(defface font-lock-escape-face
+  '((t nil))
+  "Font Lock mode face used to highlight escape sequences in strings."
+  :group 'font-lock-faces
+  :version "29.1")
+
+(defface font-lock-number-face
+  '((t nil))
+  "Font Lock mode face used to highlight numbers."
+  :group 'font-lock-faces
+  :version "29.1")
+
+(defface font-lock-operator-face
+  '((t nil))
+  "Font Lock mode face used to highlight operators."
+  :group 'font-lock-faces
+  :version "29.1")
+
+(defface font-lock-property-face
+  '((t :inherit font-lock-variable-name-face))
+  "Font Lock mode face used to highlight properties."
+  :group 'font-lock-faces
+  :version "29.1")
+
+(defface font-lock-punctuation-face
+  '((t nil))
+  "Font Lock mode face used to highlight punctuation."
+  :group 'font-lock-faces
+  :version "29.1")
+
 (defface font-lock-regexp-grouping-backslash
   '((t :inherit bold))
   "Font Lock mode face for backslashes in Lisp regexp grouping constructs."
-- 
2.38.1