[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
emacs-29 0c125fcc67: Make highlighting more regular across TS modes (bug
From: |
Dmitry Gutov |
Subject: |
emacs-29 0c125fcc67: Make highlighting more regular across TS modes (bug#61205) |
Date: |
Sun, 5 Feb 2023 08:51:19 -0500 (EST) |
branch: emacs-29
commit 0c125fcc67a47b933716124223404a45e73357c7
Author: Dmitry Gutov <dgutov@yandex.ru>
Commit: Dmitry Gutov <dgutov@yandex.ru>
Make highlighting more regular across TS modes (bug#61205)
* doc/emacs/display.texi (Parser-based Font Lock):
Update description of treesit-font-lock-level, moving 'property' to
level 4.
* lisp/treesit.el (treesit-font-lock-level): Likewise, in docstring.
* lisp/progmodes/c-ts-mode.el (c-ts-base-mode): Do that here.
* lisp/progmodes/cmake-ts-mode.el (cmake-ts-mode): Add a comment.
* lisp/progmodes/go-ts-mode.el (go-ts-mode): Add 'definition' to
level 1. Move 'function', 'property' and 'variable' to level 4.
(go-ts-mode--font-lock-settings): Move a bunch of existing rules
to 'definition'. Add highlighting of function parameters.
* lisp/progmodes/rust-ts-mode.el (rust-ts-mode)
(rust-ts-mode--font-lock-settings): Same. And also change "scoped
identifiers" highlights to only match capitalized names.
---
doc/emacs/display.texi | 4 ++--
lisp/progmodes/c-ts-mode.el | 4 ++--
lisp/progmodes/cmake-ts-mode.el | 3 +++
lisp/progmodes/go-ts-mode.el | 26 +++++++++++++++++---------
lisp/progmodes/rust-ts-mode.el | 35 +++++++++++++++++++++--------------
lisp/treesit.el | 5 +++--
6 files changed, 48 insertions(+), 29 deletions(-)
diff --git a/doc/emacs/display.texi b/doc/emacs/display.texi
index 97732b65e3..a86c12a0db 100644
--- a/doc/emacs/display.texi
+++ b/doc/emacs/display.texi
@@ -1159,11 +1159,11 @@ function definitions.
This level adds fontification of keywords, strings, and data types.
@item Level 3
This is the default level; it adds fontification of assignments,
-numbers, properties, etc.
+numbers, etc.
@item Level 4
This level adds everything else that can be fontified: operators,
delimiters, brackets, other punctuation, function names in function
-calls, variables, etc.
+calls, property look ups, variables, etc.
@end table
@vindex treesit-font-lock-feature-list
diff --git a/lisp/progmodes/c-ts-mode.el b/lisp/progmodes/c-ts-mode.el
index 1a8ef79dac..5093c3980b 100644
--- a/lisp/progmodes/c-ts-mode.el
+++ b/lisp/progmodes/c-ts-mode.el
@@ -779,8 +779,8 @@ the semicolon. This function skips the semicolon."
(setq-local treesit-font-lock-feature-list
'(( comment definition)
( keyword preprocessor string type)
- ( assignment constant escape-sequence label literal property )
- ( bracket delimiter error function operator variable))))
+ ( assignment constant escape-sequence label literal)
+ ( bracket delimiter error function operator property
variable))))
;;;###autoload
(define-derived-mode c-ts-mode c-ts-base-mode "C"
diff --git a/lisp/progmodes/cmake-ts-mode.el b/lisp/progmodes/cmake-ts-mode.el
index c241a2868e..04f5d6bdac 100644
--- a/lisp/progmodes/cmake-ts-mode.el
+++ b/lisp/progmodes/cmake-ts-mode.el
@@ -220,6 +220,9 @@ the subtrees."
(setq-local treesit-font-lock-feature-list
'((comment)
(keyword string)
+ ;; 'function' and 'variable' here play slightly
+ ;; different roles than in other ts modes, so we
+ ;; kept them at level 3.
(builtin constant escape-sequence function number variable)
(bracket error misc-punctuation)))
diff --git a/lisp/progmodes/go-ts-mode.el b/lisp/progmodes/go-ts-mode.el
index 95dcf653fc..4b14e55281 100644
--- a/lisp/progmodes/go-ts-mode.el
+++ b/lisp/progmodes/go-ts-mode.el
@@ -123,17 +123,26 @@
:feature 'delimiter
'((["," "." ";" ":"]) @font-lock-delimiter-face)
+ :language 'go
+ :feature 'definition
+ '((function_declaration
+ name: (identifier) @font-lock-function-name-face)
+ (method_declaration
+ name: (field_identifier) @font-lock-function-name-face)
+ (method_spec
+ name: (field_identifier) @font-lock-function-name-face)
+ (field_declaration
+ name: (field_identifier) @font-lock-property-face)
+ (parameter_declaration
+ name: (identifier) @font-lock-variable-name-face))
+
:language 'go
:feature 'function
'((call_expression
function: (identifier) @font-lock-function-name-face)
(call_expression
function: (selector_expression
- field: (field_identifier) @font-lock-function-name-face))
- (function_declaration
- name: (identifier) @font-lock-function-name-face)
- (method_declaration
- name: (field_identifier) @font-lock-function-name-face))
+ field: (field_identifier) @font-lock-function-name-face)))
:language 'go
:feature 'keyword
@@ -221,11 +230,10 @@
;; Font-lock.
(setq-local treesit-font-lock-settings go-ts-mode--font-lock-settings)
(setq-local treesit-font-lock-feature-list
- '(( comment)
+ '(( comment definition)
( keyword string type)
- ( constant escape-sequence function label number
- property variable)
- ( bracket delimiter error operator)))
+ ( constant escape-sequence label number)
+ ( bracket delimiter error function operator property
variable)))
(treesit-major-mode-setup)))
diff --git a/lisp/progmodes/rust-ts-mode.el b/lisp/progmodes/rust-ts-mode.el
index e317793d21..5722d037bb 100644
--- a/lisp/progmodes/rust-ts-mode.el
+++ b/lisp/progmodes/rust-ts-mode.el
@@ -155,6 +155,16 @@
:feature 'delimiter
'((["," "." ";" ":" "::"]) @font-lock-delimiter-face)
+ :language 'rust
+ :feature 'definition
+ '((function_item name: (identifier) @font-lock-function-name-face)
+ (macro_definition "macro_rules!" @font-lock-constant-face)
+ (macro_definition (identifier) @font-lock-preprocessor-face)
+ (field_declaration name: (field_identifier) @font-lock-property-face)
+ (parameter pattern: (identifier) @font-lock-variable-name-face)
+ (parameter
+ pattern: (reference_pattern (identifier) @font-lock-variable-name-face)))
+
:language 'rust
:feature 'function
'((call_expression
@@ -164,15 +174,12 @@
field: (field_identifier) @font-lock-function-name-face)
(scoped_identifier
name: (identifier) @font-lock-function-name-face)])
- (function_item (identifier) @font-lock-function-name-face)
(generic_function
function: [(identifier) @font-lock-function-name-face
(field_expression
field: (field_identifier) @font-lock-function-name-face)
(scoped_identifier
name: (identifier) @font-lock-function-name-face)])
- (macro_definition "macro_rules!" @font-lock-constant-face)
- (macro_definition (identifier) @font-lock-preprocessor-face)
(macro_invocation macro: (identifier) @font-lock-preprocessor-face))
:language 'rust
@@ -208,20 +215,20 @@
(mod_item name: (identifier) @font-lock-constant-face)
(primitive_type) @font-lock-type-face
(type_identifier) @font-lock-type-face
- (scoped_identifier name: (identifier) @font-lock-type-face)
- (scoped_identifier path: (identifier) @font-lock-constant-face)
- (scoped_identifier
- (scoped_identifier
- path: (identifier) @font-lock-constant-face))
+ ((scoped_identifier name: (identifier) @font-lock-type-face)
+ (:match "^[A-Z]" @font-lock-type-face))
+ ((scoped_identifier path: (identifier) @font-lock-type-face)
+ (:match "^[A-Z]" @font-lock-type-face))
+ ((scoped_identifier
+ (scoped_identifier
+ path: (identifier) @font-lock-type-face))
+ (:match "^[A-Z]" @font-lock-type-face))
((scoped_identifier
path: [(identifier) @font-lock-type-face
(scoped_identifier
name: (identifier) @font-lock-type-face)])
(:match "^[A-Z]" @font-lock-type-face))
(scoped_type_identifier path: (identifier) @font-lock-constant-face)
- (scoped_use_list
- path: [(identifier) @font-lock-constant-face
- (scoped_identifier (identifier) @font-lock-constant-face)])
(type_identifier) @font-lock-type-face
(use_as_clause alias: (identifier) @font-lock-type-face)
(use_list (identifier) @font-lock-type-face))
@@ -317,11 +324,11 @@ delimiters < and >'s."
;; Font-lock.
(setq-local treesit-font-lock-settings rust-ts-mode--font-lock-settings)
(setq-local treesit-font-lock-feature-list
- '(( comment)
+ '(( comment definition)
( keyword string)
( attribute builtin constant escape-sequence
- function number property type variable)
- ( bracket delimiter error operator)))
+ number type)
+ ( bracket delimiter error function operator property
variable)))
;; Imenu.
(setq-local treesit-simple-imenu-settings
diff --git a/lisp/treesit.el b/lisp/treesit.el
index 7e31da95ef..7bd68c9a6d 100644
--- a/lisp/treesit.el
+++ b/lisp/treesit.el
@@ -612,9 +612,10 @@ fontifications.
Level 1 usually contains only comments and definitions.
Level 2 usually adds keywords, strings, data types, etc.
Level 3 usually represents full-blown fontifications, including
-assignments, constants, numbers and literals, properties, etc.
+assignments, constants, numbers and literals, etc.
Level 4 adds everything else that can be fontified: delimiters,
-operators, brackets, punctuation, all functions and variables, etc.
+operators, brackets, punctuation, all functions, properties,
+variables, etc.
In addition to the decoration level, individual features can be
turned on/off by calling `treesit-font-lock-recompute-features'.
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- emacs-29 0c125fcc67: Make highlighting more regular across TS modes (bug#61205),
Dmitry Gutov <=