emacs-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

emacs-29 800e15e3be 09/10: Fix string-interpolation feature of python-ts


From: Yuan Fu
Subject: emacs-29 800e15e3be 09/10: Fix string-interpolation feature of python-ts-mode (bug#60599)
Date: Sat, 7 Jan 2023 21:44:44 -0500 (EST)

branch: emacs-29
commit 800e15e3be0569efdaa5e42c82937b1c87b7ec58
Author: Yuan Fu <casouri@gmail.com>
Commit: Yuan Fu <casouri@gmail.com>

    Fix string-interpolation feature of python-ts-mode (bug#60599)
    
    * lisp/progmodes/python.el:
    (python--treesit-fontify-string-interpolation): New function.
    (python--treesit-settings): Use the new function for
    string-interpolation.
---
 lisp/progmodes/python.el | 20 ++++++++++++++++++--
 1 file changed, 18 insertions(+), 2 deletions(-)

diff --git a/lisp/progmodes/python.el b/lisp/progmodes/python.el
index c399bbc64f..e6ded7a064 100644
--- a/lisp/progmodes/python.el
+++ b/lisp/progmodes/python.el
@@ -1072,6 +1072,20 @@ fontified."
     (treesit-fontify-with-override
      string-beg string-end face override start end)))
 
+(defun python--treesit-fontify-string-interpolation
+    (node _ start end &rest _)
+  "Fontify string interpolation.
+NODE is the string node.  Do not fontify the initial f for
+f-strings.  START and END mark the region to be
+fontified."
+  ;; This is kind of a hack, it basically removes the face applied by
+  ;; the string feature, so that following features can apply their
+  ;; face.
+  (let ((n-start (treesit-node-start node))
+        (n-end (treesit-node-end node)))
+    (remove-text-properties
+     (max start n-start) (min end n-end) '(face))))
+
 (defvar python--treesit-settings
   (treesit-font-lock-rules
    :feature 'comment
@@ -1082,10 +1096,12 @@ fontified."
    :language 'python
    '((string) @python--treesit-fontify-string)
 
+   ;; HACK: This feature must come after the string feature and before
+   ;; other features.  Maybe we should make string-interpolation an
+   ;; option rather than a feature.
    :feature 'string-interpolation
    :language 'python
-   :override t
-   '((interpolation (identifier) @font-lock-variable-name-face))
+   '((interpolation) @python--treesit-fontify-string-interpolation)
 
    :feature 'definition
    :language 'python



reply via email to

[Prev in Thread] Current Thread [Next in Thread]