all messages for Emacs-related lists mirrored at yhetil.org
 help / color / mirror / code / Atom feed
From: Randy Taylor <dev@rjt.dev>
To: Yuan Fu <casouri@gmail.com>
Cc: 59268@debbugs.gnu.org
Subject: bug#59268: [PATCH] Utilize new font-lock faces for C/C++ and Python tree-sitter use
Date: Thu, 17 Nov 2022 13:50:27 +0000	[thread overview]
Message-ID: <a19NJUTOcWqpW47duF3kXhrqaRfVI_OzXUvBMPfLxUYpFSi8Lq2zYUr8kaKi8cv3sF5pouo5hkpLiYZ9YcuAlUNQ7so01FLucy7Y5sb1Myg=@rjt.dev> (raw)
In-Reply-To: <E01CB7E2-ED4A-465D-81CA-21ACAD9C1FB6@gmail.com>

[-- Attachment #1: Type: text/plain, Size: 1204 bytes --]

On Wednesday, November 16th, 2022 at 22:39, Yuan Fu <casouri@gmail.com> wrote:

> 
> Ah, for making you updating the patch for so many times! I just see this report. The only comment I have is that I see you removed the field rule from assignment feature:
> 

No worries!

>
> - (assignment_expression
> - left: (field_expression field: (_) @font-lock-property-face))
> 
> I envisioned the assignment feature to highlight “the thing being assigned to”, in which case it would highlight the field when it’s in LHS. It’s perfectly fine to have both the field rule and the assignment rule to highlight fields, I think. So if you don’t mind, I’d add it back to assignment group.
> 

I removed it because (field_identifier) @font-lock-property-face (in the property feature) highlights all fields, from what I can tell and have tested.
Can you show me an example where it won't match?

Below, when T is a struct:

  T thing;
  thing.b = thing.b;
  thing.b = 5;

b is highlighted as a field in all cases.

Also, I've attached an updated patch: it seems that the escape-sequence feature needs an override to work (probably because it's inside a string that's highlighted?).

[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: 0001-Utilize-new-font-lock-faces-for-C-C-and-Python-tree-.patch --]
[-- Type: text/x-patch; name=0001-Utilize-new-font-lock-faces-for-C-C-and-Python-tree-.patch, Size: 6956 bytes --]

From bb93e32e7e921becc2b76184acfd3a4a99fde4ff Mon Sep 17 00:00:00 2001
From: Randy Taylor <dev@rjt.dev>
Date: Sun, 13 Nov 2022 22:06:33 -0500
Subject: [PATCH] Utilize new font-lock faces for C/C++ and Python tree-sitter
 use

* lisp/progmodes/c-ts-mode.el (c-ts-mode--font-lock-settings): Use new
escape, number, property, operator, bracket, and delimiter font-lock
faces.
(c-ts-mode--base-mode): Add them to the feature list.
(c-ts-mode): Fix typo.
* lisp/progmodes/python.el (python--treesit-settings): Use new number,
property, operator, bracket, and delimiter font-lock faces.
(python-mode): Add them to the feature list.
---
 lisp/progmodes/c-ts-mode.el | 46 +++++++++++++++++++++++--------------
 lisp/progmodes/python.el    | 41 ++++++++++++++++++++++++++++-----
 2 files changed, 64 insertions(+), 23 deletions(-)

diff --git a/lisp/progmodes/c-ts-mode.el b/lisp/progmodes/c-ts-mode.el
index b951031d81..8816660f89 100644
--- a/lisp/progmodes/c-ts-mode.el
+++ b/lisp/progmodes/c-ts-mode.el
@@ -230,19 +230,17 @@ c-ts-mode--font-lock-settings
 
    :language mode
    :feature 'operator
-   :override t
    `([,@c-ts-mode--operators] @font-lock-operator-face
      "!" @font-lock-negation-char-face)
 
    :language mode
    :feature 'string
    `((string_literal) @font-lock-string-face
-     (system_lib_string) @font-lock-string-face
-     (escape_sequence) @font-lock-escape-face)
+     (system_lib_string) @font-lock-string-face)
 
    :language mode
    :feature 'literal
-   `((number_literal) @font-lock-constant-face
+   `((number_literal) @font-lock-number-face
      (char_literal) @font-lock-constant-face)
 
    :language mode
@@ -268,14 +266,11 @@ c-ts-mode--font-lock-settings
       declarator: (_) @c-ts-mode--fontify-struct-declarator)
 
      (function_definition
-      declarator: (_) @c-ts-mode--fontify-struct-declarator)
+      declarator: (_) @c-ts-mode--fontify-struct-declarator))
 
      ;; Should we highlight identifiers in the parameter list?
      ;; (parameter_declaration
-     ;;  declarator: (_) @c-ts-mode--fontify-struct-declarator)
-
-     (enumerator
-      name: (identifier) @font-lock-variable-name-face))
+     ;;  declarator: (_) @c-ts-mode--fontify-struct-declarator))
 
    :language mode
    :feature 'assignment
@@ -284,8 +279,6 @@ c-ts-mode--font-lock-settings
    ;; inspiration.
    '((assignment_expression
       left: (identifier) @font-lock-variable-name-face)
-     (assignment_expression
-      left: (field_expression field: (_) @font-lock-property-face))
      (assignment_expression
       left: (pointer_expression
              (identifier) @font-lock-variable-name-face))
@@ -298,8 +291,7 @@ c-ts-mode--font-lock-settings
    '((call_expression
       function: (identifier) @font-lock-function-name-face)
      (field_expression
-      argument: (identifier) @font-lock-variable-name-face
-      field: (field_identifier) @font-lock-property-face)
+      argument: (identifier) @font-lock-variable-name-face)
      (pointer_expression
       (identifier) @font-lock-variable-name-face))
 
@@ -313,6 +305,25 @@ c-ts-mode--font-lock-settings
    :feature 'error
    '((ERROR) @font-lock-warning-face)
 
+   :feature 'escape-sequence
+   :language mode
+   :override t
+   '((escape_sequence) @font-lock-escape-face)
+
+   :language mode
+   :feature 'property
+   '((field_identifier) @font-lock-property-face
+     (enumerator
+      name: (identifier) @font-lock-property-face))
+
+   :language mode
+   :feature 'bracket
+   '((["(" ")" "[" "]" "{" "}"]) @font-lock-bracket-face)
+
+   :language mode
+   :feature 'delimiter
+   '((["," ":" ";"]) @font-lock-delimiter-face)
+
    :language mode
    :feature 'emacs-devel
    '(((call_expression function: (identifier) @fn)
@@ -471,9 +482,10 @@ c-ts-mode--base-mode
   (setq-local which-func-functions nil)
 
   (setq-local treesit-font-lock-feature-list
-              '((comment preprocessor constant string literal keyword)
-                (type definition label assignment)
-                (expression error operator))))
+              '(( comment constant keyword literal preprocessor string)
+                ( assignment definition label property type)
+                ( bracket delimiter error escape-sequence expression
+                  operator))))
 
 ;;;###autoload
 (define-derived-mode c-ts-mode c-ts-mode--base-mode "C"
@@ -500,7 +512,7 @@ c-ts-mode
 
 ;;;###autoload
 (define-derived-mode c++-ts-mode c-ts-mode--base-mode "C++"
-  "Major mode for editing C, powered by tree-sitter."
+  "Major mode for editing C++, powered by tree-sitter."
   :group 'c++
 
   (unless (treesit-ready-p nil 'cpp)
diff --git a/lisp/progmodes/python.el b/lisp/progmodes/python.el
index ad4665eb19..22485a025e 100644
--- a/lisp/progmodes/python.el
+++ b/lisp/progmodes/python.el
@@ -975,11 +975,8 @@ python--treesit-constants
     "copyright" "credits" "exit" "license" "quit"))
 
 (defvar python--treesit-operators
-  ;; This is not used. And and, or, not, is, in are fontified as
-  ;; keywords.
   '("-" "-=" "!=" "*" "**" "**=" "*=" "/" "//" "//=" "/=" "&" "%" "%="
-    "^" "+" "+=" "<" "<<" "<=" "<>" "=" "==" ">" ">=" ">>" "|" "~"
-    "and" "in" "is" "not" "or"))
+    "^" "+" "+=" "<" "<<" "<=" "<>" "=" "==" ">" ">=" ">>" "|" "~"))
 
 (defvar python--treesit-special-attributes
   '("__annotations__" "__closure__" "__code__"
@@ -1117,7 +1114,38 @@ python--treesit-settings
    :feature 'escape-sequence
    :language 'python
    :override t
-   '((escape_sequence) @font-lock-escape-face))
+   '((escape_sequence) @font-lock-escape-face)
+
+   :feature 'number
+   :language 'python
+   :override t
+   '([(integer) (float)] @font-lock-number-face)
+
+   :feature 'property
+   :language 'python
+   :override t
+   '((attribute
+      attribute: (identifier) @font-lock-property-face)
+     (class_definition
+      body: (block
+             (expression_statement
+              (assignment left:
+                          (identifier) @font-lock-property-face)))))
+
+   :feature 'operator
+   :language 'python
+   :override t
+   `([,@python--treesit-operators] @font-lock-operator-face)
+
+   :feature 'bracket
+   :language 'python
+   :override t
+   '(["(" ")" "[" "]" "{" "}"] @font-lock-bracket-face)
+
+   :feature 'delimiter
+   :language 'python
+   :override t
+   '(["," "." ":" ";" (ellipsis)] @font-lock-delimiter-face))
   "Tree-sitter font-lock settings.")
 
 \f
@@ -6553,7 +6581,8 @@ python-mode
                 '(( comment string function-name class-name)
                   ( keyword builtin constant type)
                   ( assignment decorator escape-sequence
-                    string-interpolation)))
+                    string-interpolation number property
+                    operator bracket delimiter)))
     (setq-local treesit-font-lock-settings python--treesit-settings)
     (setq-local imenu-create-index-function
                 #'python-imenu-treesit-create-index)
-- 
2.38.1


  reply	other threads:[~2022-11-17 13:50 UTC|newest]

Thread overview: 10+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-11-14  3:27 bug#59268: [PATCH] Utilize new font-lock faces for C/C++ and Python tree-sitter use Randy Taylor
2022-11-15  1:26 ` Randy Taylor
2022-11-16  2:04   ` Randy Taylor
2022-11-17  3:26     ` Randy Taylor
2022-11-17  3:39       ` Yuan Fu
2022-11-17 13:50         ` Randy Taylor [this message]
2022-11-17 18:39           ` Yuan Fu
2022-11-17 20:02             ` Randy Taylor
2022-11-17 20:07               ` Yuan Fu
2022-11-17 20:19                 ` Randy Taylor

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to='a19NJUTOcWqpW47duF3kXhrqaRfVI_OzXUvBMPfLxUYpFSi8Lq2zYUr8kaKi8cv3sF5pouo5hkpLiYZ9YcuAlUNQ7so01FLucy7Y5sb1Myg=@rjt.dev' \
    --to=dev@rjt.dev \
    --cc=59268@debbugs.gnu.org \
    --cc=casouri@gmail.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
Code repositories for project(s) associated with this external index

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

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.