Skip to content

Commit 958060f

Browse files
committed
Improve flutter widget guide performance
1 parent 655e289 commit 958060f

File tree

2 files changed

+22
-30
lines changed

2 files changed

+22
-30
lines changed

lsp-dart-flutter-widget-guide.el

Lines changed: 22 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -95,23 +95,21 @@ Return nil if the widget guilde does not apply."
9595
(defun lsp-dart-flutter-widget-guide--guides->guides-by-line (guides)
9696
"Convert a widget guide GUIDES to a map by line."
9797
(let ((guides-by-line '()))
98-
(seq-doseq (guide guides)
99-
(-let (((&Range :start (&Position :line start-line)
100-
:end (&Position :line end-line)) guide))
101-
(while (<= start-line end-line)
102-
(if-let ((cur-guides (plist-get guides-by-line start-line)))
103-
(setq guides-by-line (plist-put guides-by-line start-line (append cur-guides (list guide))))
104-
(setq guides-by-line (plist-put guides-by-line start-line (list guide))))
105-
(setq start-line (1+ start-line)))))
98+
(-map (-lambda ((guide &as &Range :start (&Position :line start-line)
99+
:end (&Position :line end-line)))
100+
(while (<= start-line end-line)
101+
(if-let ((cur-guides (alist-get start-line guides-by-line)))
102+
(setcdr (assq start-line guides-by-line) (append cur-guides (list guide)))
103+
(add-to-list 'guides-by-line (cons start-line (list guide)) t))
104+
(setq start-line (1+ start-line)))) guides)
106105
guides-by-line))
107106

108107
(defun lsp-dart-flutter-widget-guide--build-chars (line guide-lines size last-line-char anchor)
109108
"Return the widget guides characters list by LINE from GUIDE-LINES.
110109
SIZE is the length of the characters list.
111110
LAST-LINE-CHAR is the last column position of LINE.
112111
ANCHOR is the anchor point of the widget guide at LINE."
113-
(let ((chars (make-list size lsp-dart-flutter-widget-guide-space))
114-
(max-lisp-eval-depth 1800))
112+
(let ((chars (make-list size lsp-dart-flutter-widget-guide-space)))
115113
(seq-doseq (guide guide-lines)
116114
(-let* (((&Range :start (&Position :character start-char)
117115
:end (&Position :line end-line :character end-char)) guide)
@@ -144,19 +142,20 @@ ANCHOR is the anchor point of the widget guide at LINE."
144142
(with-current-buffer buffer
145143
(remove-overlays (point-min) (point-max) 'category 'lsp-dart-flutter-widget-guide)
146144
(save-excursion
147-
(->> outline
148-
(lsp-dart-flutter-widget-guide--outline->guides)
149-
(lsp-dart-flutter-widget-guide--guides->guides-by-line)
150-
(lsp-dart-plist-each
151-
(lambda (line guide-lines)
152-
(let* ((first-guide-char (-min (--map (min (-> it lsp:range-start lsp:position-character)
153-
(-> it lsp:range-end lsp:position-character)) guide-lines)))
154-
(last-guide-char (-max (--map (max (-> it lsp:range-start lsp:position-character)
155-
(-> it lsp:range-end lsp:position-character)) guide-lines)))
156-
(last-line-char (lsp-dart-flutter-widget-guide--last-col-at line))
157-
(anchor (max 0 (if (< last-line-char first-guide-char) 0 first-guide-char)))
158-
(chars (lsp-dart-flutter-widget-guide--build-chars line guide-lines last-guide-char last-line-char anchor)))
159-
(--each-indexed chars (lsp-dart-flutter-widget-guide--add-overlay-to buffer line (+ it-index anchor) it))))))))))
145+
(let ((guides-by-lines (->> outline
146+
(lsp-dart-flutter-widget-guide--outline->guides)
147+
(lsp-dart-flutter-widget-guide--guides->guides-by-line))))
148+
(seq-doseq (guides-by-line guides-by-lines)
149+
(let* ((line (car guides-by-line))
150+
(guide-lines (alist-get line guides-by-lines)))
151+
(let* ((first-guide-char (-min (--map (min (-> it lsp:range-start lsp:position-character)
152+
(-> it lsp:range-end lsp:position-character)) guide-lines)))
153+
(last-guide-char (-max (--map (max (-> it lsp:range-start lsp:position-character)
154+
(-> it lsp:range-end lsp:position-character)) guide-lines)))
155+
(last-line-char (lsp-dart-flutter-widget-guide--last-col-at line))
156+
(anchor (max 0 (if (< last-line-char first-guide-char) 0 first-guide-char)))
157+
(chars (lsp-dart-flutter-widget-guide--build-chars line guide-lines last-guide-char last-line-char anchor)))
158+
(--each-indexed chars (lsp-dart-flutter-widget-guide--add-overlay-to buffer line (+ it-index anchor) it))))))))))
160159

161160
(define-minor-mode lsp-dart-flutter-widget-guides-mode
162161
"Mode for displaying flutter widget guide lines."

lsp-dart-utils.el

Lines changed: 0 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -64,13 +64,6 @@ FLUTTER_ROOT environment variable and the PATH environment variable."
6464
"Remove item with KEY from ALIST."
6565
(delq (assoc key alist) alist))
6666

67-
(defun lsp-dart-plist-each (fn plist)
68-
"Iterate FN (a two-argument fn) over PLIST.
69-
Error checking is for weenies."
70-
(when plist
71-
(funcall fn (car plist) (cadr plist))
72-
(lsp-dart-plist-each fn (cddr plist))))
73-
7467

7568
;; SDKs
7669

0 commit comments

Comments
 (0)