@@ -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.
110109SIZE is the length of the characters list.
111110LAST-LINE-CHAR is the last column position of LINE.
112111ANCHOR 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."
0 commit comments