2323
2424(require  'lsp-dart-protocol )
2525(require  'lsp-dart-utils )
26- (require  'lsp-dart-code-lens )
2726
2827(defcustom  lsp-dart-outline  t 
2928  " Enable the analysis server outline custom method.
@@ -60,6 +59,12 @@ Defaults to side following treemacs default."
6059
6160; ;; Internal
6261
62+ (defvar-local  lsp-dart-current-outline nil )
63+ (defvar-local  lsp-dart-current-flutter-outline nil )
64+ 
65+ (defconst  lsp-dart--outline-buffer-name  " *Dart Outline*"  )
66+ (defconst  lsp-dart--flutter-outline-buffer-name  " *Flutter Outline*"  )
67+ 
6368(defun  lsp-dart-outline--set-metadata  (workspace  params  key-prefix )
6469  " Save in WORKSPACE the PARAMS metadata with KEY-PREFIX.
6570The key is composed of the KEY-PREFIX with PARAMS uri path."  
@@ -176,7 +181,7 @@ OUTLINES are the outline items."
176181     (lsp-dart-outline--outlines->tree uri outlines)
177182     " Outline" 
178183     t 
179-      " *Dart Outline* "  )))
184+      lsp-dart--outline-buffer-name )))
180185
181186(defun  lsp-dart-outline--render-flutter-outline-tree  (uri  outlines )
182187  " Render an Flutter outline view with the source URI and OUTLINES data." 
@@ -185,65 +190,84 @@ OUTLINES are the outline items."
185190     (lsp-dart-outline--flutter-outline->tree uri outlines)
186191     " Flutter Outline" 
187192     t 
188-      " *Flutter Outline* "  )))
193+      lsp-dart--flutter-outline-buffer-name )))
189194
190- (defun  lsp-dart-outline--show-outline  (buffer   ignore-focus? )
195+ (defun  lsp-dart-outline--show-outline  (ignore-focus? )
191196  " Show an outline tree for BUFFER.
192197Focus on it if IGNORE-FOCUS? is nil."  
193-   (-when -let ((&OutlineNotification?  :uri  :outline  (&Outline :children )) ( lsp-dart-outline--get-metadata buffer  " current-outline" ) )
198+   (-if -let ((&OutlineNotification?  :uri  :outline  (&Outline :children )) lsp-dart-current-outline)
194199    (-let* ((tree-buffer (lsp-dart-outline--render-outline-tree uri children))
195200            (window (display-buffer-in-side-window  tree-buffer lsp-dart-outline-position-params)))
196201      (unless  ignore-focus? 
197202        (select-window  window)
198-         (set-window-dedicated-p  window t )))))
203+         (set-window-dedicated-p  window t )))
204+     (lsp-dart-log " No Dart outline data found"  )))
199205
200- (defun  lsp-dart-outline--show-flutter-outline  (buffer   ignore-focus? )
206+ (defun  lsp-dart-outline--show-flutter-outline  (ignore-focus? )
201207  " Show a Flutter outline tree for BUFFER.
202208Focus on it if IGNORE-FOCUS? is nil."  
203-   (-when -let ((&FlutterOutlineNotification?  :uri  :outline  (&FlutterOutline :children )) ( lsp-dart-outline--get-metadata buffer  " current-flutter-outline" ) )
209+   (-if -let ((&FlutterOutlineNotification?  :uri  :outline  (&FlutterOutline :children )) lsp-dart-current-flutter-outline)
204210    (-let* ((tree-buffer (lsp-dart-outline--render-flutter-outline-tree uri children))
205211            (window (display-buffer-in-side-window  tree-buffer lsp-dart-flutter-outline-position-params)))
206212      (unless  ignore-focus? 
207213        (select-window  window)
208-         (set-window-dedicated-p  window t )))))
214+         (set-window-dedicated-p  window t )))
215+     (lsp-dart-log " No Flutter outline data found"  )))
209216
210- (lsp-defun lsp-dart-outline-handle- outline (workspace  (notification &as &OutlineNotification :uri   :outline ))
217+ (lsp-defun lsp-dart-- outline-check ( (notification &as &OutlineNotification :uri ))
211218  " Outline notification handling from WORKSPACE.
212219NOTIFICATION is outline notification data received from server. 
213220It updates the outline view if it already exists."  
214-   (lsp-dart-outline--set-metadata workspace notification " current-outline"  )
215-   (when  lsp-dart-main-code-lens
216-     (lsp-dart-code-lens-check-main uri outline))
217-   (when  lsp-dart-test-code-lens
218-     (lsp-dart-code-lens-check-test uri outline))
219-   (when  (get-buffer-window  " *Dart Outline*"  )
220-     (lsp-dart-outline--show-outline (find-buffer-visiting  (lsp--uri-to-path uri)) t )))
221- 
222- (lsp-defun lsp-dart-outline-handle-flutter-outline (workspace (notification &as &FlutterOutlineNotification :uri ))
221+    (when-let  (buffer (find-buffer-visiting  (lsp--uri-to-path uri)))
222+      (with-current-buffer  buffer
223+       (setq  lsp-dart-current-outline notification)
224+        (when  (get-buffer-window  lsp-dart--outline-buffer-name)
225+          (lsp-dart-outline--show-outline t )))))
226+ 
227+ (lsp-defun lsp-dart--flutter-outline-check ((notification &as &FlutterOutlineNotification :uri ))
223228  " Flutter outline notification handling from WORKSPACE.
224229NOTIFICATION is Flutter outline notification data received from server. 
225230It updates the Flutter outline view if it already exists."  
226-   (lsp-dart-outline--set-metadata workspace notification " current-flutter-outline"  )
227-   (run-hook-with-args  'lsp-dart-outline-arrived-hook  notification)
228-   (when  (get-buffer-window  " *Flutter Outline*"  )
229-     (lsp-dart-outline--show-flutter-outline (find-buffer-visiting  (lsp--uri-to-path uri)) t )))
231+   (when-let  (buffer (find-buffer-visiting  (lsp--uri-to-path uri)))
232+     (with-current-buffer  buffer
233+       (setq  lsp-dart-current-flutter-outline notification)
234+       (when  (get-buffer-window  lsp-dart--flutter-outline-buffer-name)
235+         (lsp-dart-outline--show-flutter-outline t )))))
230236
231237
232238; ;; Public interface
233239
240+ (define-minor-mode  lsp-dart-outline-mode
241+   " Mode for updating outline." 
242+   nil  nil  nil 
243+   (cond 
244+    (lsp-dart-outline-mode
245+     (add-hook  'lsp-dart-outline-arrived-hook  #'lsp-dart--outline-check   nil  t ))
246+    (t 
247+     (remove-hook  'lsp-dart-outline-arrived-hook  #'lsp-dart--outline-check   t ))))
248+ 
249+ (define-minor-mode  lsp-dart-flutter-outline-mode
250+   " Mode for updating flutter outline." 
251+   nil  nil  nil 
252+   (cond 
253+    (lsp-dart-flutter-outline-mode
254+     (add-hook  'lsp-dart-flutter-outline-arrived-hook  #'lsp-dart--flutter-outline-check   nil  t ))
255+    (t 
256+     (remove-hook  'lsp-dart-flutter-outline-arrived-hook  #'lsp-dart--flutter-outline-check   t ))))
257+ 
234258;;;### autoload 
235259(defun  lsp-dart-show-outline  (ignore-focus? )
236260  " Show an outline tree and focus on it if IGNORE-FOCUS? is nil." 
237261  (interactive  " P"  )
238262  (lsp-dart-assert-sdk-min-version " 2.8.0"  )
239-   (lsp-dart-outline--show-outline ( current-buffer )  ignore-focus?) )
263+   (lsp-dart-outline--show-outline ignore-focus?) )
240264
241265;;;### autoload 
242266(defun  lsp-dart-show-flutter-outline  (ignore-focus? )
243267  " Show a Flutter outline tree and focus on it if IGNORE-FOCUS? is nil." 
244268  (interactive  " P"  )
245269  (lsp-dart-assert-sdk-min-version " 2.8.0"  )
246-   (lsp-dart-outline--show-flutter-outline ( current-buffer )  ignore-focus?) )
270+   (lsp-dart-outline--show-flutter-outline ignore-focus?) )
247271
248272(provide  'lsp-dart-outline )
249273; ;; lsp-dart-outline.el ends here
0 commit comments