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
next prev parent 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.