mirror of
git://git.sv.gnu.org/emacs.git
synced 2026-02-08 00:33:13 -08:00
Apply syntax highlighting for all python f-strings
* lisp/progmodes/python.el (python--f-string-p) (python--font-lock-f-strings): Edit functions to use a regular expression matching all f-strings (bug#56757).
This commit is contained in:
parent
91423627b4
commit
969983ea1f
2 changed files with 22 additions and 7 deletions
|
|
@ -546,11 +546,22 @@ The type returned can be `comment', `string' or `paren'."
|
|||
font-lock-string-face)
|
||||
font-lock-comment-face))
|
||||
|
||||
(defconst python--f-string-start-regexp
|
||||
(rx bow
|
||||
(or "f" "F" "fr" "Fr" "fR" "FR" "rf" "rF" "Rf" "RF")
|
||||
(or "\"" "\"\"\"" "'" "'''"))
|
||||
"A regular expression matching the beginning of an f-string.
|
||||
|
||||
See URL `https://docs.python.org/3/reference/lexical_analysis.html#string-and-bytes-literals'.")
|
||||
|
||||
(defun python--f-string-p (ppss)
|
||||
"Return non-nil if the pos where PPSS was found is inside an f-string."
|
||||
(and (nth 3 ppss)
|
||||
(let ((spos (1- (nth 8 ppss))))
|
||||
(and (memq (char-after spos) '(?f ?F))
|
||||
(let* ((spos (1- (nth 8 ppss)))
|
||||
(before-quote
|
||||
(buffer-substring-no-properties (max (- spos 4) (point-min))
|
||||
(min (+ spos 2) (point-max)))))
|
||||
(and (string-match-p python--f-string-start-regexp before-quote)
|
||||
(or (< (point-min) spos)
|
||||
(not (memq (char-syntax (char-before spos)) '(?w ?_))))))))
|
||||
|
||||
|
|
@ -569,7 +580,7 @@ the {...} holes that appear within f-strings."
|
|||
(while
|
||||
(progn
|
||||
(while (and (not (python--f-string-p ppss))
|
||||
(re-search-forward "\\<f['\"]" limit 'move))
|
||||
(re-search-forward python--f-string-start-regexp limit 'move))
|
||||
(setq ppss (syntax-ppss)))
|
||||
(< (point) limit))
|
||||
(cl-assert (python--f-string-p ppss))
|
||||
|
|
|
|||
|
|
@ -574,10 +574,14 @@ u\"\\n\""
|
|||
(195 . font-lock-string-face)
|
||||
(196 . font-lock-constant-face)
|
||||
(215 . font-lock-string-face) (218)
|
||||
(221 . font-lock-string-face) (274)
|
||||
(277 . font-lock-string-face) (330)
|
||||
(333 . font-lock-string-face) (386)
|
||||
(389 . font-lock-string-face) (442)
|
||||
(221 . font-lock-string-face) (254)
|
||||
(271 . font-lock-string-face) (274)
|
||||
(277 . font-lock-string-face) (310)
|
||||
(327 . font-lock-string-face) (330)
|
||||
(333 . font-lock-string-face) (366)
|
||||
(383 . font-lock-string-face) (386)
|
||||
(389 . font-lock-string-face) (422)
|
||||
(439 . font-lock-string-face) (442)
|
||||
(444 . font-lock-string-face) (497)
|
||||
(499 . font-lock-string-face) (552)
|
||||
(555 . font-lock-string-face) (608)
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue