Skip to content

Commit 9baddd4

Browse files
committed
migrate flutter widget guides
1 parent b477a03 commit 9baddd4

File tree

2 files changed

+21
-19
lines changed

2 files changed

+21
-19
lines changed

lsp-dart-flutter-widget-guide.el

Lines changed: 18 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,6 @@
2020
;;; Code:
2121

2222
(require 'dash)
23-
(require 'ht)
2423
(require 'lsp-mode)
2524

2625
(require 'lsp-dart-protocol)
@@ -54,8 +53,8 @@
5453
(goto-char (point-min))
5554
(forward-line line)
5655
(back-to-indentation)
57-
(ht ("line" line)
58-
("character" (current-column)))))
56+
(lsp-make-position :line line
57+
:character (current-column))))
5958

6059
(defun lsp-dart-flutter-widget-guide--last-col-at (line)
6160
"Return the last col at LINE."
@@ -79,8 +78,8 @@ Return nil if the widget guilde does not apply."
7978
(when children-start
8079
(let ((start-pos (lsp-dart-flutter-widget-guide--first-non-whitespace-pos parent-line)))
8180
(->> children-start
82-
(--map (ht ("start" start-pos)
83-
("end" (lsp-dart-flutter-widget-guide--first-non-whitespace-pos it))))
81+
(--map (lsp-make-range :start start-pos
82+
:end (lsp-dart-flutter-widget-guide--first-non-whitespace-pos it)))
8483
(-flatten)))))))
8584

8685
(lsp-defun lsp-dart-flutter-widget-guide--outline->guides ((outline &as &FlutterOutline :children))
@@ -97,14 +96,14 @@ Return nil if the widget guilde does not apply."
9796

9897
(defun lsp-dart-flutter-widget-guide--guides->guides-by-line (guides)
9998
"Convert a widget guide GUIDES to a map by line."
100-
(let ((guides-by-line (ht-create)))
99+
(let ((guides-by-line '()))
101100
(seq-doseq (guide guides)
102101
(-let (((&Range :start (&Position :line start-line)
103102
:end (&Position :line end-line)) guide))
104103
(while (<= start-line end-line)
105-
(if-let ((cur-guides (ht-get guides-by-line start-line)))
106-
(ht-set! guides-by-line start-line (append cur-guides (list guide)))
107-
(ht-set! guides-by-line start-line (list guide)))
104+
(if-let ((cur-guides (plist-get guides-by-line start-line)))
105+
(add-to-list 'guides-by-line (cons start-line (append cur-guides (list guide))))
106+
(add-to-list 'guides-by-line (cons start-line (list guide))))
108107
(setq start-line (1+ start-line)))))
109108
guides-by-line))
110109

@@ -145,16 +144,16 @@ ANCHOR is the anchor point of the widget guide at LINE."
145144
(remove-overlays (point-min) (point-max) 'category 'lsp-dart-flutter-widget-guide)
146145
(let* ((guides (lsp-dart-flutter-widget-guide--outline->guides outline))
147146
(guides-by-line (lsp-dart-flutter-widget-guide--guides->guides-by-line guides)))
148-
(ht-each (lambda (line guide-lines)
149-
(let* ((first-guide-char (-min (--map (min (-> it lsp:range-start lsp:position-character)
150-
(-> it lsp:range-end lsp:position-character)) guide-lines)))
151-
(last-guide-char (-max (--map (max (-> it lsp:range-start lsp:position-character)
152-
(-> it lsp:range-end lsp:position-character)) guide-lines)))
153-
(last-line-char (lsp-dart-flutter-widget-guide--last-col-at line))
154-
(anchor (max 0 (if (< last-line-char first-guide-char) 0 first-guide-char)))
155-
(chars (lsp-dart-flutter-widget-guide--build-chars line guide-lines last-guide-char last-line-char anchor)))
156-
(--each-indexed chars (lsp-dart-flutter-widget-guide--add-overlay-to buffer line (+ it-index anchor) it))))
157-
guides-by-line)))))
147+
(seq-doseq (line (mapcar 'car guides-by-line))
148+
(let* ((guide-lines (alist-get line guides-by-line))
149+
(first-guide-char (-min (--map (min (-> it lsp:range-start lsp:position-character)
150+
(-> it lsp:range-end lsp:position-character)) guide-lines)))
151+
(last-guide-char (-max (--map (max (-> it lsp:range-start lsp:position-character)
152+
(-> it lsp:range-end lsp:position-character)) guide-lines)))
153+
(last-line-char (lsp-dart-flutter-widget-guide--last-col-at line))
154+
(anchor (max 0 (if (< last-line-char first-guide-char) 0 first-guide-char)))
155+
(chars (lsp-dart-flutter-widget-guide--build-chars line guide-lines last-guide-char last-line-char anchor)))
156+
(--each-indexed chars (lsp-dart-flutter-widget-guide--add-overlay-to buffer line (+ it-index anchor) it))))))))
158157

159158
(provide 'lsp-dart-flutter-widget-guide)
160159
;;; lsp-dart-flutter-widget-guide.el ends here

lsp-dart-protocol.el

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,9 @@
3838
(FlutterOutline (:range :codeRange :children :kind) (:dartElement :label :className :variableName :attributes))
3939
(FlutterOutlineAttribute (:name :label) nil))
4040

41+
(lsp-interface
42+
(FlutterWidgetGuide ()))
43+
4144
(lsp-interface
4245
(FlutterDaemonCommand (:id :method) (:params))
4346
(FlutterDaemonResponse (:id) (:result :event :params))

0 commit comments

Comments
 (0)