[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
master 50b55656b9c: Merge from origin/emacs-29
From: |
Stefan Kangas |
Subject: |
master 50b55656b9c: Merge from origin/emacs-29 |
Date: |
Sat, 25 Feb 2023 00:45:18 -0500 (EST) |
branch: master
commit 50b55656b9c5ce0d7940bec245f2d9725378d0a0
Merge: a129f257720 5cf50d60041
Author: Stefan Kangas <stefankangas@gmail.com>
Commit: Stefan Kangas <stefankangas@gmail.com>
Merge from origin/emacs-29
5cf50d60041 Check the anchor along with the offset in treesit-indent-...
497018dd5c3 ; Fix typos in docstrings in c-ts-common.el
03072bbdd38 ; Set indent-tabs-mode to nil in c-ts-mode indent preproc...
4a25fa4586c Align to prev sibling for c-ts-mode indentation
d25f24fe57b Fix c-ts-common-statement-offset and c-ts-common--node-is
c92360c7a3b typescript-ts-mode: Highlight non-shorthand destructuring...
a795c51f605 Add more/finer faces for tree-sitter
146bce49321 Avoid crashes in batch mode due to lack of frame face cache
244a73cd729 Add Tramp version integrated in Emacs 28.3
# Conflicts:
# etc/NEWS
---
doc/lispref/modes.texi | 25 +++++++--
etc/NEWS.29 | 5 +-
lisp/cus-theme.el | 7 ++-
lisp/font-lock.el | 23 +++++++-
lisp/net/trampver.el | 2 +-
lisp/progmodes/c-ts-common.el | 16 +++++-
lisp/progmodes/c-ts-mode.el | 64 +++++++++++++++-------
lisp/progmodes/cmake-ts-mode.el | 4 +-
lisp/progmodes/csharp-mode.el | 28 +++++-----
lisp/progmodes/go-ts-mode.el | 12 ++--
lisp/progmodes/java-ts-mode.el | 10 ++--
lisp/progmodes/js.el | 35 ++++++------
lisp/progmodes/json-ts-mode.el | 2 +-
lisp/progmodes/python.el | 31 ++++++-----
lisp/progmodes/ruby-ts-mode.el | 6 +-
lisp/progmodes/rust-ts-mode.el | 56 +++++++++----------
lisp/progmodes/typescript-ts-mode.el | 29 +++++-----
lisp/textmodes/css-mode.el | 5 +-
lisp/textmodes/toml-ts-mode.el | 4 +-
lisp/textmodes/yaml-ts-mode.el | 12 ++--
lisp/treesit.el | 2 +-
src/xfaces.c | 4 +-
.../c-ts-mode-resources/indent-preproc.erts | 1 +
23 files changed, 230 insertions(+), 153 deletions(-)
diff --git a/doc/lispref/modes.texi b/doc/lispref/modes.texi
index 052a10e3797..4c40f414ca0 100644
--- a/doc/lispref/modes.texi
+++ b/doc/lispref/modes.texi
@@ -3679,10 +3679,20 @@ in C.
@vindex font-lock-function-name-face
for the name of a function being defined or declared.
+@item font-lock-function-call-face
+@vindex font-lock-function-call-face
+for the name of a function being called. This face inherits, by
+default, from @code{font-lock-function-name-face}.
+
@item font-lock-variable-name-face
@vindex font-lock-variable-name-face
for the name of a variable being defined or declared.
+@item font-lock-variable-ref-face
+@vindex font-lock-variable-ref-face
+for the name of a variable being referenced. This face inherits, by
+default, from @code{font-lock-variable-name-face}.
+
@item font-lock-keyword-face
@vindex font-lock-keyword-face
for a keyword with special syntactic significance, like @samp{for} and
@@ -3756,11 +3766,16 @@ for numbers.
@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}.
+@item font-lock-property-name-face
+@vindex font-lock-property-name-face
+for properties of an object, such as the declaration of fields in a
+struct. This face inherits, by default, from
+@code{font-lock-variable-name-face}.
+
+@item font-lock-property-ref-face
+@vindex font-lock-property-ref-face
+for properties of an object, such as use of fields in a struct. This
+face inherits, by default, from @code{font-lock-property-name-face}.
For example,
diff --git a/etc/NEWS.29 b/etc/NEWS.29
index 7f84d548149..b6c6f2c6362 100644
--- a/etc/NEWS.29
+++ b/etc/NEWS.29
@@ -828,11 +828,12 @@ filter/sentinel error has been handled.
+++
** New faces for font-lock.
These faces are primarily meant for use with tree-sitter. They are:
+'font-lock-function-call-face', 'font-lock-variable-ref-face',
'font-lock-bracket-face', 'font-lock-delimiter-face',
'font-lock-escape-face', 'font-lock-misc-punctuation-face',
'font-lock-number-face', 'font-lock-operator-face',
-'font-lock-property-face', and 'font-lock-punctuation-face',
-'font-lock-regexp-face'.
+'font-lock-property-name-face', 'font-lock-property-ref-face',
+'font-lock-punctuation-face', and 'font-lock-regexp-face'.
+++
** New face 'variable-pitch-text'.
diff --git a/lisp/cus-theme.el b/lisp/cus-theme.el
index dea5dbe9410..46e41dd046c 100644
--- a/lisp/cus-theme.el
+++ b/lisp/cus-theme.el
@@ -68,13 +68,16 @@ Do not call this mode function yourself. It is meant for
internal use."
font-lock-comment-delimiter-face font-lock-comment-face
font-lock-constant-face font-lock-delimiter-face
font-lock-doc-face font-lock-doc-markup-face
- font-lock-escape-face font-lock-function-name-face
+ font-lock-escape-face font-lock-function-call-face
+ font-lock-function-name-face
font-lock-keyword-face font-lock-negation-char-face
font-lock-number-face font-lock-misc-punctuation-face
font-lock-operator-face font-lock-preprocessor-face
- font-lock-property-face font-lock-punctuation-face
+ font-lock-property-name-face font-lock-property-ref-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-variable-ref-face
font-lock-warning-face button link link-visited fringe
header-line tooltip mode-line mode-line-buffer-id
mode-line-emphasis mode-line-highlight mode-line-inactive
diff --git a/lisp/font-lock.el b/lisp/font-lock.el
index 9e944fe188a..b82b7648797 100644
--- a/lisp/font-lock.el
+++ b/lisp/font-lock.el
@@ -2026,6 +2026,12 @@ as the constructs of Haddock, Javadoc and similar
systems."
"Font Lock mode face used to highlight function names."
:group 'font-lock-faces)
+(defface font-lock-function-call-face
+ '((t :inherit font-lock-function-name-face))
+ "Font Lock mode face used to highlight function calls."
+ :group 'font-lock-faces
+ :version "29.1")
+
(defface font-lock-variable-name-face
'((((class grayscale) (background light))
:foreground "Gray90" :weight bold :slant italic)
@@ -2040,6 +2046,12 @@ as the constructs of Haddock, Javadoc and similar
systems."
"Font Lock mode face used to highlight variable names."
:group 'font-lock-faces)
+(defface font-lock-variable-ref-face
+ '((t :inherit font-lock-variable-name-face))
+ "Font Lock mode face used to highlight variable references."
+ :group 'font-lock-faces
+ :version "29.1")
+
(defface font-lock-type-face
'((((class grayscale) (background light)) :foreground "Gray90" :weight bold)
(((class grayscale) (background dark)) :foreground "DimGray" :weight bold)
@@ -2115,10 +2127,17 @@ as the constructs of Haddock, Javadoc and similar
systems."
:group 'font-lock-faces
:version "29.1")
-(defface font-lock-property-face
+(defface font-lock-property-name-face
'((t :inherit font-lock-variable-name-face))
"Font Lock mode face used to highlight properties of an object.
-For example, the declaration and use of fields in a struct."
+For example, the declaration of fields in a struct."
+ :group 'font-lock-faces
+ :version "29.1")
+
+(defface font-lock-property-ref-face
+ '((t :inherit font-lock-property-name-face))
+ "Font Lock mode face used to highlight property references.
+For example, property lookup of fields in a struct."
:group 'font-lock-faces
:version "29.1")
diff --git a/lisp/net/trampver.el b/lisp/net/trampver.el
index 9b271a7cfbd..ad7bf94cdcd 100644
--- a/lisp/net/trampver.el
+++ b/lisp/net/trampver.el
@@ -102,7 +102,7 @@
("2.3.3" . "26.1") ("2.3.3.26.1" . "26.1") ("2.3.5.26.2" . "26.2")
("2.3.5.26.3" . "26.3")
("2.4.3.27.1" . "27.1") ("2.4.5.27.2" . "27.2")
- ("2.5.2.28.1" . "28.1") ("2.5.3.28.2" . "28.2")
+ ("2.5.2.28.1" . "28.1") ("2.5.3.28.2" . "28.2") ("2.5.4" . "28.3")
("2.6.0.29.1" . "29.1")))
(add-hook 'tramp-unload-hook
diff --git a/lisp/progmodes/c-ts-common.el b/lisp/progmodes/c-ts-common.el
index 72df65a2287..85db39aaeae 100644
--- a/lisp/progmodes/c-ts-common.el
+++ b/lisp/progmodes/c-ts-common.el
@@ -305,6 +305,7 @@ If NODE is nil, return nil."
(and parent
(string-match-p (car regexp)
(treesit-node-type parent))
+ (treesit-node-field-name node)
(string-match-p (cdr regexp)
(treesit-node-field-name
node)))
@@ -313,7 +314,9 @@ If NODE is nil, return nil."
nil))
(defun c-ts-common-statement-offset (node parent &rest _)
- "This anchor is used for children of a statement inside a block.
+ "Return an indent offset for a statement inside a block.
+
+Assumes the anchor is (point-min), i.e., the 0th column.
This function basically counts the number of block nodes (i.e.,
brackets) (defined by `c-ts-common-indent-block-type-regexp')
@@ -324,6 +327,9 @@ To support GNU style, on each block level, this function
also
checks whether the opening bracket { is on its own line, if so,
it adds an extra level, except for the top-level.
+It also has special handling for bracketless statements and
+else-if statements, which see.
+
PARENT is NODE's parent, BOL is the beginning of non-whitespace
characters on the current line."
(let ((level 0))
@@ -363,7 +369,13 @@ characters on the current line."
(cl-incf level))
;; Flatten "else if" statements.
(when (and (c-ts-common--node-is node 'else)
- (c-ts-common--node-is node 'if))
+ (c-ts-common--node-is node 'if)
+ ;; But if the "if" is on it's own line, still
+ ;; indent a level.
+ (not (save-excursion
+ (goto-char (treesit-node-start node))
+ (looking-back (rx bol (* whitespace))
+ (line-beginning-position)))))
(cl-decf level)))
;; Go up the tree.
(setq node (treesit-node-parent node)))
diff --git a/lisp/progmodes/c-ts-mode.el b/lisp/progmodes/c-ts-mode.el
index b7a487687a8..035df909eb2 100644
--- a/lisp/progmodes/c-ts-mode.el
+++ b/lisp/progmodes/c-ts-mode.el
@@ -252,6 +252,33 @@ is actually the parent of point at the moment of
indentation."
0
c-ts-mode-indent-offset)))
+(defun c-ts-mode--anchor-prev-sibling (node &rest _)
+ "Return the start of the previous named sibling of NODE.
+
+This anchor handles the special case where the previous sibling
+is a labeled_statement, in that case, return the child of the
+labeled statement instead. (Actually, recursively go down until
+the node isn't a labeled_statement.) Eg,
+
+label:
+ int x = 1;
+ int y = 2;
+
+The anchor of \"int y = 2;\" should be \"int x = 1;\" rather than
+the labeled_statement.
+
+Return nil if a) there is no prev-sibling, or 2) prev-sibling
+doesn't have a child."
+ (when-let ((prev-sibling (treesit-node-prev-sibling node t)))
+ (while (and prev-sibling
+ (equal "labeled_statement"
+ (treesit-node-type prev-sibling)))
+ ;; The 0th child is the label, the 1th the colon.
+ (setq prev-sibling (treesit-node-child prev-sibling 2)))
+ ;; This could be nil if a) there is no prev-sibling or b)
+ ;; prev-sibling doesn't have a child.
+ (treesit-node-start prev-sibling)))
+
(defun c-ts-mode--indent-styles (mode)
"Indent rules supported by `c-ts-mode'.
MODE is either `c' or `cpp'."
@@ -277,13 +304,6 @@ MODE is either `c' or `cpp'."
((parent-is "labeled_statement")
point-min c-ts-common-statement-offset)
- ;; Bracketless statement matchers.
- ((match nil "while_statement" "condition") parent-bol
c-ts-mode-indent-offset)
- ((match nil "if_statement" "consequence") parent-bol
c-ts-mode-indent-offset)
- ((match nil "if_statement" "alternative") parent-bol
c-ts-mode-indent-offset)
- ((match nil "do_statement" "body") parent-bol
c-ts-mode-indent-offset)
- ((match nil "for_statement" "body") parent-bol
c-ts-mode-indent-offset)
-
((node-is "preproc") point-min 0)
((node-is "#endif") point-min 0)
((match "preproc_call" "compound_statement") point-min 0)
@@ -318,14 +338,18 @@ MODE is either `c' or `cpp'."
;; int[5] a = { 0, 0, 0, 0 };
- ((parent-is "initializer_list") parent-bol c-ts-mode-indent-offset)
+ ((match nil "initializer_list" nil 1 1) parent-bol
c-ts-mode-indent-offset)
+ ((match nil "initializer_list" nil 2)
c-ts-mode--anchor-prev-sibling 0)
;; Statement in enum.
- ((parent-is "enumerator_list") point-min
c-ts-common-statement-offset)
+ ((match nil "enumerator_list" nil 1 1) point-min
c-ts-common-statement-offset)
+ ((match nil "enumerator_list" nil 2) c-ts-mode--anchor-prev-sibling
0)
;; Statement in struct and union.
- ((parent-is "field_declaration_list") point-min
c-ts-common-statement-offset)
+ ((match nil "field_declaration_list" nil 1 1) point-min
c-ts-common-statement-offset)
+ ((match nil "field_declaration_list" nil 2)
c-ts-mode--anchor-prev-sibling 0)
;; Statement in {} blocks.
- ((parent-is "compound_statement") point-min
c-ts-common-statement-offset)
+ ((match nil "compound_statement" nil 1 1) point-min
c-ts-common-statement-offset)
+ ((match nil "compound_statement" nil 2)
c-ts-mode--anchor-prev-sibling 0)
;; Opening bracket.
((node-is "compound_statement") point-min
c-ts-common-statement-offset)
;; Bug#61291.
@@ -506,7 +530,10 @@ MODE is either `c' or `cpp'."
declarator: (_) @c-ts-mode--fontify-declarator)
(parameter_declaration
- declarator: (_) @c-ts-mode--fontify-declarator))
+ declarator: (_) @c-ts-mode--fontify-declarator)
+
+ (enumerator
+ name: (identifier) @font-lock-property-name-face))
:language mode
:feature 'assignment
@@ -516,7 +543,7 @@ MODE is either `c' or `cpp'."
'((assignment_expression
left: (identifier) @font-lock-variable-name-face)
(assignment_expression
- left: (field_expression field: (_) @font-lock-property-face))
+ left: (field_expression field: (_) @font-lock-property-ref-face))
(assignment_expression
left: (pointer_expression
(identifier) @font-lock-variable-name-face))
@@ -529,8 +556,8 @@ MODE is either `c' or `cpp'."
:feature 'function
'((call_expression
function:
- [(identifier) @font-lock-function-name-face
- (field_expression field: (field_identifier)
@font-lock-function-name-face)]))
+ [(identifier) @font-lock-function-call-face
+ (field_expression field: (field_identifier)
@font-lock-function-call-face)]))
:language mode
:feature 'variable
@@ -552,9 +579,7 @@ MODE is either `c' or `cpp'."
:language mode
:feature 'property
- '((field_identifier) @font-lock-property-face
- (enumerator
- name: (identifier) @font-lock-property-face))
+ '((field_identifier) @font-lock-property-ref-face)
:language mode
:feature 'bracket
@@ -614,6 +639,7 @@ For NODE, OVERRIDE, START, END, and ARGS, see
(face (pcase (treesit-node-type (treesit-node-parent
(or qualified-root
identifier)))
+ ("field_declaration" 'font-lock-property-name-face)
("function_declarator" 'font-lock-function-name-face)
(_ 'font-lock-variable-name-face))))
(when identifier
@@ -630,7 +656,7 @@ OVERRIDE, START, END, and ARGS, see
`treesit-font-lock-rules'."
"call_expression"))
(treesit-fontify-with-override
(treesit-node-start node) (treesit-node-end node)
- 'font-lock-variable-name-face override start end)))
+ 'font-lock-variable-ref-face override start end)))
(defun c-ts-mode--fontify-defun (node override start end &rest _)
"Correctly fontify the DEFUN macro.
diff --git a/lisp/progmodes/cmake-ts-mode.el b/lisp/progmodes/cmake-ts-mode.el
index 04f5d6bdac8..a3f9279ec1c 100644
--- a/lisp/progmodes/cmake-ts-mode.el
+++ b/lisp/progmodes/cmake-ts-mode.el
@@ -125,7 +125,7 @@
:language 'cmake
:feature 'function
- '((normal_command (identifier) @font-lock-function-name-face))
+ '((normal_command (identifier) @font-lock-function-call-face))
:language 'cmake
:feature 'keyword
@@ -154,7 +154,7 @@
:language 'cmake
:feature 'variable
:override t
- '((variable) @font-lock-variable-name-face)
+ '((variable) @font-lock-variable-ref-face)
:language 'cmake
:feature 'error
diff --git a/lisp/progmodes/csharp-mode.el b/lisp/progmodes/csharp-mode.el
index 239c85ce25f..4ed8b0368b5 100644
--- a/lisp/progmodes/csharp-mode.el
+++ b/lisp/progmodes/csharp-mode.el
@@ -708,9 +708,9 @@ compilation and evaluation time conflicts."
(treesit-font-lock-rules
:language 'c-sharp
:feature 'expression
- '((conditional_expression (identifier) @font-lock-variable-name-face)
- (postfix_unary_expression (identifier)* @font-lock-variable-name-face)
- (initializer_expression (assignment_expression left: (identifier)
@font-lock-variable-name-face)))
+ '((conditional_expression (identifier) @font-lock-variable-ref-face)
+ (postfix_unary_expression (identifier)* @font-lock-variable-ref-face)
+ (initializer_expression (assignment_expression left: (identifier)
@font-lock-variable-ref-face)))
:language 'c-sharp
:feature 'bracket
@@ -739,8 +739,8 @@ compilation and evaluation time conflicts."
:language 'c-sharp
:override t
:feature 'property
- `((attribute (identifier) @font-lock-property-face
(attribute_argument_list))
- (attribute (identifier) @font-lock-property-face))
+ `((attribute (identifier) @font-lock-property-ref-face
(attribute_argument_list))
+ (attribute (identifier) @font-lock-property-ref-face))
:language 'c-sharp
:override t
@@ -859,14 +859,14 @@ compilation and evaluation time conflicts."
:feature 'function
'((invocation_expression
function: (member_access_expression
- name: (identifier) @font-lock-function-name-face))
+ name: (identifier) @font-lock-function-call-face))
(invocation_expression
- function: (identifier) @font-lock-function-name-face)
+ function: (identifier) @font-lock-function-call-face)
(invocation_expression
function: (member_access_expression
- name: (generic_name (identifier)
@font-lock-function-name-face)))
+ name: (generic_name (identifier)
@font-lock-function-call-face)))
(invocation_expression
- function: (generic_name (identifier) @font-lock-function-name-face)))
+ function: (generic_name (identifier) @font-lock-function-call-face)))
:language 'c-sharp
:feature 'escape-sequence
@@ -878,23 +878,23 @@ compilation and evaluation time conflicts."
:override t
'((if_directive
"if" @font-lock-preprocessor-face
- (identifier) @font-lock-variable-name-face)
+ (identifier) @font-lock-variable-ref-face)
(elif_directive
"elif" @font-lock-preprocessor-face
- (identifier) @font-lock-variable-name-face)
+ (identifier) @font-lock-variable-ref-face)
(else_directive) @font-lock-preprocessor-face
(endif_directive) @font-lock-preprocessor-face
(define_directive
"define" @font-lock-preprocessor-face
- (identifier) @font-lock-variable-name-face)
+ (identifier) @font-lock-variable-ref-face)
(nullable_directive) @font-lock-preprocessor-face
(pragma_directive) @font-lock-preprocessor-face
(region_directive) @font-lock-preprocessor-face
(endregion_directive) @font-lock-preprocessor-face
(region_directive
- (preproc_message) @font-lock-variable-name-face)
+ (preproc_message) @font-lock-variable-ref-face)
(endregion_directive
- (preproc_message) @font-lock-variable-name-face))))
+ (preproc_message) @font-lock-variable-ref-face))))
;;;###autoload
(add-to-list 'auto-mode-alist '("\\.cs\\'" . csharp-mode))
diff --git a/lisp/progmodes/go-ts-mode.el b/lisp/progmodes/go-ts-mode.el
index 2a2783f45f6..0e019f5bad9 100644
--- a/lisp/progmodes/go-ts-mode.el
+++ b/lisp/progmodes/go-ts-mode.el
@@ -134,7 +134,7 @@
(method_spec
name: (field_identifier) @font-lock-function-name-face)
(field_declaration
- name: (field_identifier) @font-lock-property-face)
+ name: (field_identifier) @font-lock-property-name-face)
(parameter_declaration
name: (identifier) @font-lock-variable-name-face)
(short_var_declaration
@@ -147,10 +147,10 @@
:language 'go
:feature 'function
'((call_expression
- function: (identifier) @font-lock-function-name-face)
+ function: (identifier) @font-lock-function-call-face)
(call_expression
function: (selector_expression
- field: (field_identifier) @font-lock-function-name-face)))
+ field: (field_identifier) @font-lock-function-call-face)))
:language 'go
:feature 'keyword
@@ -178,12 +178,12 @@
:language 'go
:feature 'property
- '((field_identifier) @font-lock-property-face
- (keyed_element (_ (identifier) @font-lock-property-face)))
+ '((selector_expression field: (field_identifier)
@font-lock-property-ref-face)
+ (keyed_element (_ (identifier) @font-lock-property-ref-face)))
:language 'go
:feature 'variable
- '((identifier) @font-lock-variable-name-face)
+ '((identifier) @font-lock-variable-ref-face)
:language 'go
:feature 'escape-sequence
diff --git a/lisp/progmodes/java-ts-mode.el b/lisp/progmodes/java-ts-mode.el
index 0560cc33244..54ed8b4277d 100644
--- a/lisp/progmodes/java-ts-mode.el
+++ b/lisp/progmodes/java-ts-mode.el
@@ -220,7 +220,7 @@
(method_reference (identifier) @font-lock-type-face)
- (scoped_identifier (identifier) @font-lock-variable-name-face)
+ (scoped_identifier (identifier) @font-lock-constant-face)
((scoped_identifier name: (identifier) @font-lock-type-face)
(:match "^[A-Z]" @font-lock-type-face))
@@ -244,7 +244,7 @@
name: (identifier) @font-lock-variable-name-face)
(element_value_pair
- key: (identifier) @font-lock-property-face)
+ key: (identifier) @font-lock-property-ref-face)
(formal_parameter
name: (identifier) @font-lock-variable-name-face)
@@ -255,14 +255,14 @@
:override t
:feature 'expression
'((method_invocation
- object: (identifier) @font-lock-variable-name-face)
+ object: (identifier) @font-lock-variable-ref-face)
(method_invocation
- name: (identifier) @font-lock-function-name-face)
+ name: (identifier) @font-lock-function-call-face)
(argument_list (identifier) @font-lock-variable-name-face)
- (expression_statement (identifier) @font-lock-variable-name-face))
+ (expression_statement (identifier) @font-lock-variable-ref-face))
:language 'java
:feature 'bracket
diff --git a/lisp/progmodes/js.el b/lisp/progmodes/js.el
index dc49d7e818c..93298f4fb6e 100644
--- a/lisp/progmodes/js.el
+++ b/lisp/progmodes/js.el
@@ -3544,11 +3544,10 @@ This function is intended for use in
`after-change-functions'."
value: [(function) (arrow_function)])
(variable_declarator
- name: (array_pattern
- (identifier)
- (identifier)
- @font-lock-function-name-face)
- value: (array (number) (function)))
+ name: [(array_pattern (identifier) @font-lock-variable-name-face)
+ (object_pattern
+ (shorthand_property_identifier_pattern)
@font-lock-variable-name-face)])
+
;; full module imports
(import_clause (identifier) @font-lock-variable-name-face)
;; named imports with aliasing
@@ -3564,15 +3563,13 @@ This function is intended for use in
`after-change-functions'."
:language 'javascript
:feature 'property
- '(((property_identifier) @font-lock-property-face
+ '(((property_identifier) @font-lock-property-ref-face
(:pred js--treesit-property-not-function-p
- @font-lock-property-face))
-
- (pair value: (identifier) @font-lock-variable-name-face)
+ @font-lock-property-ref-face))
- ((shorthand_property_identifier) @font-lock-property-face)
+ (pair value: (identifier) @font-lock-variable-ref-face)
- ((shorthand_property_identifier_pattern) @font-lock-property-face))
+ ((shorthand_property_identifier) @font-lock-property-ref-face))
:language 'javascript
:feature 'assignment
@@ -3582,14 +3579,14 @@ This function is intended for use in
`after-change-functions'."
:language 'javascript
:feature 'function
'((call_expression
- function: [(identifier) @font-lock-function-name-face
+ function: [(identifier) @font-lock-function-call-face
(member_expression
property:
- (property_identifier) @font-lock-function-name-face)])
+ (property_identifier) @font-lock-function-call-face)])
(method_definition
name: (property_identifier) @font-lock-function-name-face)
(function_declaration
- name: (identifier) @font-lock-function-name-face)
+ name: (identifier) @font-lock-function-call-face)
(function
name: (identifier) @font-lock-function-name-face))
@@ -3597,15 +3594,15 @@ This function is intended for use in
`after-change-functions'."
:feature 'jsx
'((jsx_opening_element
[(nested_identifier (identifier)) (identifier)]
- @font-lock-function-name-face)
+ @font-lock-function-call-face)
(jsx_closing_element
[(nested_identifier (identifier)) (identifier)]
- @font-lock-function-name-face)
+ @font-lock-function-call-face)
(jsx_self_closing_element
[(nested_identifier (identifier)) (identifier)]
- @font-lock-function-name-face)
+ @font-lock-function-call-face)
(jsx_attribute
(property_identifier)
@@ -3684,8 +3681,8 @@ For OVERRIDE, START, END, see `treesit-font-lock-rules'."
(treesit-fontify-with-override
(treesit-node-start node) (treesit-node-end node)
(pcase (treesit-node-type node)
- ("identifier" 'font-lock-variable-name-face)
- ("property_identifier" 'font-lock-property-face))
+ ("identifier" 'font-lock-variable-ref-face)
+ ("property_identifier" 'font-lock-property-ref-face))
override start end)))
(defun js--treesit-defun-name (node)
diff --git a/lisp/progmodes/json-ts-mode.el b/lisp/progmodes/json-ts-mode.el
index 6bd9d30328e..c5979b9a14c 100644
--- a/lisp/progmodes/json-ts-mode.el
+++ b/lisp/progmodes/json-ts-mode.el
@@ -101,7 +101,7 @@
:language 'json
:feature 'pair
:override t ; Needed for overriding string face on keys.
- '((pair key: (_) @font-lock-variable-name-face))
+ '((pair key: (_) @font-lock-property-ref-face))
:language 'json
:feature 'error
:override t
diff --git a/lisp/progmodes/python.el b/lisp/progmodes/python.el
index eab5e70af33..8220e3086fd 100644
--- a/lisp/progmodes/python.el
+++ b/lisp/progmodes/python.el
@@ -1106,24 +1106,25 @@ fontified."
:language 'python
'((interpolation) @python--treesit-fontify-string-interpolation)
+ :feature 'keyword
+ :language 'python
+ `([,@python--treesit-keywords] @font-lock-keyword-face
+ ((identifier) @font-lock-keyword-face
+ (:match "^self$" @font-lock-keyword-face)))
+
:feature 'definition
:language 'python
'((function_definition
name: (identifier) @font-lock-function-name-face)
(class_definition
- name: (identifier) @font-lock-type-face))
+ name: (identifier) @font-lock-type-face)
+ (parameters (identifier) @font-lock-variable-name-face))
:feature 'function
:language 'python
- '((call function: (identifier) @font-lock-function-name-face)
+ '((call function: (identifier) @font-lock-function-call-face)
(call function: (attribute
- attribute: (identifier) @font-lock-function-name-face)))
-
- :feature 'keyword
- :language 'python
- `([,@python--treesit-keywords] @font-lock-keyword-face
- ((identifier) @font-lock-keyword-face
- (:match "^self$" @font-lock-keyword-face)))
+ attribute: (identifier) @font-lock-function-call-face)))
:feature 'builtin
:language 'python
@@ -1146,7 +1147,7 @@ fontified."
@font-lock-variable-name-face)
(assignment left: (attribute
attribute: (identifier)
- @font-lock-property-face))
+ @font-lock-property-ref-face))
(pattern_list (identifier)
@font-lock-variable-name-face)
(tuple_pattern (identifier)
@@ -1183,12 +1184,12 @@ fontified."
:feature 'property
:language 'python
'((attribute
- attribute: (identifier) @font-lock-property-face)
+ attribute: (identifier) @font-lock-property-ref-face)
(class_definition
body: (block
(expression_statement
(assignment left:
- (identifier) @font-lock-property-face)))))
+ (identifier) @font-lock-property-ref-face)))))
:feature 'operator
:language 'python
@@ -1211,10 +1212,10 @@ fontified."
"Check whether NODE is a variable.
NODE's type should be \"identifier\"."
;; An identifier can be a function/class name, a property, or a
- ;; variables. This function filters out function/class names and
- ;; properties.
+ ;; variables. This function filters out function/class names,
+ ;; properties and method parameters.
(pcase (treesit-node-type (treesit-node-parent node))
- ((or "function_definition" "class_definition") nil)
+ ((or "function_definition" "class_definition" "parameters") nil)
("attribute"
(pcase (treesit-node-field-name node)
("object" t)
diff --git a/lisp/progmodes/ruby-ts-mode.el b/lisp/progmodes/ruby-ts-mode.el
index f15387c91bc..f70c0279d3d 100644
--- a/lisp/progmodes/ruby-ts-mode.el
+++ b/lisp/progmodes/ruby-ts-mode.el
@@ -292,11 +292,11 @@ values of OVERRIDE"
:language language
:feature 'global
- '((global_variable) @font-lock-variable-name-face)
+ '((global_variable) @font-lock-variable-ref-face)
:language language
:feature 'instance
- '((instance_variable) @font-lock-variable-name-face)
+ '((instance_variable) @font-lock-variable-ref-face)
:language language
:feature 'method-definition
@@ -350,7 +350,7 @@ values of OVERRIDE"
:language language
:feature 'function
'((call
- method: (identifier) @font-lock-function-name-face))
+ method: (identifier) @font-lock-function-call-face))
:language language
:feature 'assignment
diff --git a/lisp/progmodes/rust-ts-mode.el b/lisp/progmodes/rust-ts-mode.el
index ee73ebf7a9f..a46d442a0e5 100644
--- a/lisp/progmodes/rust-ts-mode.el
+++ b/lisp/progmodes/rust-ts-mode.el
@@ -157,7 +157,7 @@
'((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)
+ (field_declaration name: (field_identifier) @font-lock-property-name-face)
(parameter pattern: (_) @rust-ts-mode--fontify-pattern)
(closure_parameters (_) @rust-ts-mode--fontify-pattern)
(let_declaration pattern: (_) @rust-ts-mode--fontify-pattern)
@@ -174,17 +174,17 @@
:feature 'function
'((call_expression
function:
- [(identifier) @font-lock-function-name-face
+ [(identifier) @font-lock-function-call-face
(field_expression
- field: (field_identifier) @font-lock-function-name-face)
+ field: (field_identifier) @font-lock-function-call-face)
(scoped_identifier
- name: (identifier) @font-lock-function-name-face)])
+ name: (identifier) @font-lock-function-call-face)])
(generic_function
- function: [(identifier) @font-lock-function-name-face
+ function: [(identifier) @font-lock-function-call-face
(field_expression
- field: (field_identifier) @font-lock-function-name-face)
+ field: (field_identifier) @font-lock-function-call-face)
(scoped_identifier
- name: (identifier) @font-lock-function-name-face)])
+ name: (identifier) @font-lock-function-call-face)])
(macro_invocation macro: (identifier) @font-lock-preprocessor-face))
:language 'rust
@@ -239,8 +239,8 @@
:language 'rust
:feature 'property
- '((field_identifier) @font-lock-property-face
- (shorthand_field_initializer (identifier) @font-lock-property-face))
+ '((field_identifier) @font-lock-property-ref-face
+ (shorthand_field_initializer (identifier) @font-lock-property-ref-face))
;; Must be under type, otherwise some imports can be highlighted as
constants.
:language 'rust
@@ -251,25 +251,25 @@
:language 'rust
:feature 'variable
- '((arguments (identifier) @font-lock-variable-name-face)
- (array_expression (identifier) @font-lock-variable-name-face)
- (assignment_expression right: (identifier) @font-lock-variable-name-face)
- (binary_expression left: (identifier) @font-lock-variable-name-face)
- (binary_expression right: (identifier) @font-lock-variable-name-face)
- (block (identifier) @font-lock-variable-name-face)
- (compound_assignment_expr right: (identifier)
@font-lock-variable-name-face)
- (field_expression value: (identifier) @font-lock-variable-name-face)
- (field_initializer value: (identifier) @font-lock-variable-name-face)
- (if_expression condition: (identifier) @font-lock-variable-name-face)
- (let_condition value: (identifier) @font-lock-variable-name-face)
- (let_declaration value: (identifier) @font-lock-variable-name-face)
- (match_arm value: (identifier) @font-lock-variable-name-face)
- (match_expression value: (identifier) @font-lock-variable-name-face)
- (reference_expression value: (identifier) @font-lock-variable-name-face)
- (return_expression (identifier) @font-lock-variable-name-face)
- (tuple_expression (identifier) @font-lock-variable-name-face)
- (unary_expression (identifier) @font-lock-variable-name-face)
- (while_expression condition: (identifier) @font-lock-variable-name-face))
+ '((arguments (identifier) @font-lock-variable-ref-face)
+ (array_expression (identifier) @font-lock-variable-ref-face)
+ (assignment_expression right: (identifier) @font-lock-variable-ref-face)
+ (binary_expression left: (identifier) @font-lock-variable-ref-face)
+ (binary_expression right: (identifier) @font-lock-variable-ref-face)
+ (block (identifier) @font-lock-variable-ref-face)
+ (compound_assignment_expr right: (identifier)
@font-lock-variable-ref-face)
+ (field_expression value: (identifier) @font-lock-variable-ref-face)
+ (field_initializer value: (identifier) @font-lock-variable-ref-face)
+ (if_expression condition: (identifier) @font-lock-variable-ref-face)
+ (let_condition value: (identifier) @font-lock-variable-ref-face)
+ (let_declaration value: (identifier) @font-lock-variable-ref-face)
+ (match_arm value: (identifier) @font-lock-variable-ref-face)
+ (match_expression value: (identifier) @font-lock-variable-ref-face)
+ (reference_expression value: (identifier) @font-lock-variable-ref-face)
+ (return_expression (identifier) @font-lock-variable-ref-face)
+ (tuple_expression (identifier) @font-lock-variable-ref-face)
+ (unary_expression (identifier) @font-lock-variable-ref-face)
+ (while_expression condition: (identifier) @font-lock-variable-ref-face))
:language 'rust
:feature 'escape-sequence
diff --git a/lisp/progmodes/typescript-ts-mode.el
b/lisp/progmodes/typescript-ts-mode.el
index 1646776ce95..d907608d0db 100644
--- a/lisp/progmodes/typescript-ts-mode.el
+++ b/lisp/progmodes/typescript-ts-mode.el
@@ -245,16 +245,13 @@ Argument LANGUAGE is either `typescript' or `tsx'."
:language language
:feature 'property
`((property_signature
- name: (property_identifier) @font-lock-property-face)
+ name: (property_identifier) @font-lock-property-name-face)
(public_field_definition
- name: (property_identifier) @font-lock-property-face)
+ name: (property_identifier) @font-lock-property-name-face)
- (pair key: (property_identifier) @font-lock-variable-name-face)
+ (pair key: (property_identifier) @font-lock-property-ref-face)
- ((shorthand_property_identifier) @font-lock-property-face)
-
- ((shorthand_property_identifier_pattern)
- @font-lock-property-face))
+ ((shorthand_property_identifier) @font-lock-property-ref-face))
:language language
:feature 'expression
@@ -268,30 +265,34 @@ Argument LANGUAGE is either `typescript' or `tsx'."
:feature 'function
'((call_expression
function:
- [(identifier) @font-lock-function-name-face
+ [(identifier) @font-lock-function-call-face
(member_expression
- property: (property_identifier) @font-lock-function-name-face)]))
+ property: (property_identifier) @font-lock-function-call-face)]))
:language language
:feature 'pattern
`((pair_pattern
- key: (property_identifier) @font-lock-property-face)
+ key: (property_identifier) @font-lock-property-ref-face
+ value: [(identifier) @font-lock-variable-name-face
+ (assignment_pattern left: (identifier)
@font-lock-variable-name-face)])
+
+ (array_pattern (identifier) @font-lock-variable-name-face)
- (array_pattern (identifier) @font-lock-variable-name-face))
+ ((shorthand_property_identifier_pattern) @font-lock-variable-name-face))
:language language
:feature 'jsx
`((jsx_opening_element
[(nested_identifier (identifier)) (identifier)]
- @font-lock-function-name-face)
+ @font-lock-function-call-face)
(jsx_closing_element
[(nested_identifier (identifier)) (identifier)]
- @font-lock-function-name-face)
+ @font-lock-function-call-face)
(jsx_self_closing_element
[(nested_identifier (identifier)) (identifier)]
- @font-lock-function-name-face)
+ @font-lock-function-call-face)
(jsx_attribute (property_identifier) @font-lock-constant-face))
diff --git a/lisp/textmodes/css-mode.el b/lisp/textmodes/css-mode.el
index a1d7d4bbbec..39e38179359 100644
--- a/lisp/textmodes/css-mode.el
+++ b/lisp/textmodes/css-mode.el
@@ -1399,9 +1399,8 @@ for determining whether point is within a selector."
:feature 'query
:language 'css
- '((keyword_query) @font-lock-property-face
- (feature_name) @font-lock-property-face)
-
+ '((keyword_query) @font-lock-property-ref-face
+ (feature_name) @font-lock-property-ref-face)
:feature 'bracket
:language 'css
diff --git a/lisp/textmodes/toml-ts-mode.el b/lisp/textmodes/toml-ts-mode.el
index 416542084f1..2ff9d07d13b 100644
--- a/lisp/textmodes/toml-ts-mode.el
+++ b/lisp/textmodes/toml-ts-mode.el
@@ -92,8 +92,8 @@
:language 'toml
:feature 'pair
:override t ; Needed for overriding string face on keys.
- '((bare_key) @font-lock-property-face
- (quoted_key) @font-lock-property-face
+ '((bare_key) @font-lock-property-ref-face
+ (quoted_key) @font-lock-property-ref-face
(table ("[" @font-lock-bracket-face
(_) @font-lock-type-face
"]" @font-lock-bracket-face))
diff --git a/lisp/textmodes/yaml-ts-mode.el b/lisp/textmodes/yaml-ts-mode.el
index a25230e6e61..dc0fa00df27 100644
--- a/lisp/textmodes/yaml-ts-mode.el
+++ b/lisp/textmodes/yaml-ts-mode.el
@@ -94,22 +94,22 @@
:feature 'property
:override t
'((block_mapping_pair
- key: (flow_node (plain_scalar (string_scalar) @font-lock-property-face)))
+ key: (flow_node (plain_scalar (string_scalar)
@font-lock-property-ref-face)))
(block_mapping_pair
key: (flow_node
- [(double_quote_scalar) (single_quote_scalar)]
@font-lock-property-face))
+ [(double_quote_scalar) (single_quote_scalar)]
@font-lock-property-ref-face))
(flow_mapping
- (_ key: (flow_node (plain_scalar (string_scalar)
@font-lock-property-face))))
+ (_ key: (flow_node (plain_scalar (string_scalar)
@font-lock-property-ref-face))))
(flow_mapping
(_ key:
(flow_node
- [(double_quote_scalar) (single_quote_scalar)]
@font-lock-property-face)))
+ [(double_quote_scalar) (single_quote_scalar)]
@font-lock-property-ref-face)))
(flow_sequence
- (_ key: (flow_node (plain_scalar (string_scalar)
@font-lock-property-face))))
+ (_ key: (flow_node (plain_scalar (string_scalar)
@font-lock-property-ref-face))))
(flow_sequence
(_ key:
(flow_node
- [(double_quote_scalar) (single_quote_scalar)]
@font-lock-property-face))))
+ [(double_quote_scalar) (single_quote_scalar)]
@font-lock-property-ref-face))))
:language 'yaml
:feature 'error
diff --git a/lisp/treesit.el b/lisp/treesit.el
index 644a8018ad2..a413311e824 100644
--- a/lisp/treesit.el
+++ b/lisp/treesit.el
@@ -1533,7 +1533,7 @@ Similar to `treesit-indent', but indent a region instead."
(dotimes (jdx idx)
(let ((anchor (aref meta-vec (* jdx meta-len)))
(offset (aref meta-vec (+ 1 (* jdx meta-len)))))
- (when offset
+ (when (and anchor offset)
(let ((col (save-excursion
(goto-char anchor)
(+ offset (current-column)))))
diff --git a/src/xfaces.c b/src/xfaces.c
index 62d7823f308..37b703984be 100644
--- a/src/xfaces.c
+++ b/src/xfaces.c
@@ -4186,7 +4186,9 @@ Default face attributes override any local face
attributes. */)
if (EQ (face, Qdefault))
{
struct face_cache *c = FRAME_FACE_CACHE (f);
- struct face *newface, *oldface = FACE_FROM_ID_OR_NULL (f,
DEFAULT_FACE_ID);
+ struct face *newface;
+ struct face *oldface =
+ c ? FACE_FROM_ID_OR_NULL (f, DEFAULT_FACE_ID) : NULL;
Lisp_Object attrs[LFACE_VECTOR_SIZE];
/* This can be NULL (e.g., in batch mode). */
diff --git a/test/lisp/progmodes/c-ts-mode-resources/indent-preproc.erts
b/test/lisp/progmodes/c-ts-mode-resources/indent-preproc.erts
index 5a4996f642e..57610b5483e 100644
--- a/test/lisp/progmodes/c-ts-mode-resources/indent-preproc.erts
+++ b/test/lisp/progmodes/c-ts-mode-resources/indent-preproc.erts
@@ -1,6 +1,7 @@
Code:
(lambda ()
(c-ts-mode)
+ (setq-local indent-tabs-mode nil)
(newline)
(indent-for-tab-command))