[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[nongnu] elpa/dart-mode cad31a5 040/192: Get basic ${} fontification wor
From: |
ELPA Syncer |
Subject: |
[nongnu] elpa/dart-mode cad31a5 040/192: Get basic ${} fontification working. |
Date: |
Sun, 29 Aug 2021 11:01:46 -0400 (EDT) |
branch: elpa/dart-mode
commit cad31a5c2c39480484c38754fcc3d8cc87aca1d5
Author: Nathan Weizenbaum <nweiz@google.com>
Commit: Nathan Weizenbaum <nweiz@google.com>
Get basic ${} fontification working.
---
dart-mode.el | 54 ++++++++++++++++++++++++++++++++++++++++++++++++++++--
1 file changed, 52 insertions(+), 2 deletions(-)
diff --git a/dart-mode.el b/dart-mode.el
index ad6c738..f2a4592 100644
--- a/dart-mode.el
+++ b/dart-mode.el
@@ -33,8 +33,9 @@
;; correctly, but only because they look like three strings in a row.
;; * In a map with identifier keys, the first key is fontified like a label.
;; * Return values for operator methods aren't fontified correctly.
-;; * String interpolation isn't fontified as Dart.
;; * Untyped parameters aren't fontified correctly.
+;; * Quotes immediately after string interpolation are marked as unclosed.
+;; * Sexp movement doesn't properly ignore quotes in interpolation.
;;; Code:
@@ -326,6 +327,52 @@ SYNTAX-GUESS is the output of `c-guess-basic-syntax'."
(setq base (point)))))))
+;;; Additional fontification support
+
+(defun dart-fontify-region (beg end)
+ "Use fontify the region between BEG and END as Dart.
+
+This will overwrite fontification due to strings and comments."
+ (save-excursion
+ (save-match-data
+ (save-restriction
+ (let ((font-lock-dont-widen t))
+ (narrow-to-region (- beg 1) end)
+ ;; font-lock-fontify-region apparently isn't inclusive,
+ ;; so we have to move the beginning back one char
+ (font-lock-fontify-region (point-min) (point-max)))))))
+
+(defun dart-limited-forward-sexp (limit &optional arg)
+ "Move forward using `forward-sexp' or to limit,
+whichever comes first."
+ (let (forward-sexp-function)
+ (condition-case err
+ (save-restriction
+ (narrow-to-region (point) limit)
+ (forward-sexp arg))
+ (scan-error
+ (unless (equal (nth 1 err) "Unbalanced parentheses")
+ (signal 'scan-error (cdr err)))
+ (goto-char limit)))))
+
+(defun dart-highlight-interpolation (limit)
+ "Highlight interpolation (${foo})."
+ (let ((start (point)))
+ (when (re-search-forward "\\(\\${\\)" limit t)
+ (if (elt (parse-partial-sexp start (point)) 3) ; in a string
+ (save-match-data
+ (forward-char -1)
+ (let ((beg (point)))
+ (dart-limited-forward-sexp limit)
+ (dart-fontify-region (+ 1 beg) (point)))
+
+ ;; Highlight the end of the interpolation.
+ (when (eq (char-before) ?})
+ (put-text-property (- (point) 1) (point) 'face
font-lock-variable-name-face))
+ t)
+ (looking-at "\\<\\>")))))
+
+
;;; Boilerplate font-lock piping
(defcustom dart-font-lock-extra-types nil
@@ -338,7 +385,10 @@ Each list item should be a regexp matching a single
identifier.")
(defconst dart-font-lock-keywords-2 (c-lang-const c-matchers-2 dart)
"Fast normal highlighting for Dart mode.")
-(defconst dart-font-lock-keywords-3 (c-lang-const c-matchers-3 dart)
+(defconst dart-font-lock-keywords-3
+ (cons
+ '(dart-highlight-interpolation 1 font-lock-variable-name-face prepend)
+ (c-lang-const c-matchers-3 dart))
"Accurate normal highlighting for Dart mode.")
(defvar dart-font-lock-keywords dart-font-lock-keywords-3
- [nongnu] elpa/dart-mode 64a573f 010/192: Require 'cl when compiling., (continued)
- [nongnu] elpa/dart-mode 64a573f 010/192: Require 'cl when compiling., ELPA Syncer, 2021/08/29
- [nongnu] elpa/dart-mode b42c2ca 014/192: Another known bug., ELPA Syncer, 2021/08/29
- [nongnu] elpa/dart-mode 4d67ba8 017/192: Fix the closing comment., ELPA Syncer, 2021/08/29
- [nongnu] elpa/dart-mode 1473515 019/192: Bump to version 0.3 for release., ELPA Syncer, 2021/08/29
- [nongnu] elpa/dart-mode 06c2786 024/192: Bump version to 0.4., ELPA Syncer, 2021/08/29
- [nongnu] elpa/dart-mode 2410a15 025/192: Fix =>-style method indentation., ELPA Syncer, 2021/08/29
- [nongnu] elpa/dart-mode 9ee0bf1 028/192: Bump version to 0.5., ELPA Syncer, 2021/08/29
- [nongnu] elpa/dart-mode 67550e5 030/192: Fix indentation for try as well., ELPA Syncer, 2021/08/29
- [nongnu] elpa/dart-mode 4310054 038/192: Bump version to 0.6., ELPA Syncer, 2021/08/29
- [nongnu] elpa/dart-mode 464e07b 039/192: Get rid of a now-inapplicable known bug., ELPA Syncer, 2021/08/29
- [nongnu] elpa/dart-mode cad31a5 040/192: Get basic ${} fontification working.,
ELPA Syncer <=
- [nongnu] elpa/dart-mode 8d83554 042/192: Properly indent lambdas., ELPA Syncer, 2021/08/29
- [nongnu] elpa/dart-mode 148f707 048/192: Add a couple known issues., ELPA Syncer, 2021/08/29
- [nongnu] elpa/dart-mode f5fb993 049/192: Fix the case indentation., ELPA Syncer, 2021/08/29
- [nongnu] elpa/dart-mode 5c09eae 051/192: Add support for illusori's flymake-warn-line-regexp., ELPA Syncer, 2021/08/29
- [nongnu] elpa/dart-mode b7dc54c 052/192: Bump version to 0.8., ELPA Syncer, 2021/08/29
- [nongnu] elpa/dart-mode eca6432 058/192: Bump version to 0.10., ELPA Syncer, 2021/08/29
- [nongnu] elpa/dart-mode a935c27 059/192: don't advise c-parse-state if c-parse-state-1 isn't defined., ELPA Syncer, 2021/08/29
- [nongnu] elpa/dart-mode 3b3992b 060/192: Merge pull request #8 from rginda/unadvise, ELPA Syncer, 2021/08/29
- [nongnu] elpa/dart-mode 079ecc2 062/192: Add support for Dart analysis server., ELPA Syncer, 2021/08/29
- [nongnu] elpa/dart-mode 88920ee 066/192: Bump version to 0.13., ELPA Syncer, 2021/08/29