فهرست منبع

add workspace-symbols mode

Simon Krajewski 9 سال پیش
والد
کامیت
942fe0ec68
3فایلهای تغییر یافته به همراه21 افزوده شده و 3 حذف شده
  1. 18 0
      src/main.ml
  2. 2 2
      src/typing/common.ml
  3. 1 1
      src/typing/typeload.ml

+ 18 - 0
src/main.ml

@@ -1316,6 +1316,9 @@ try
 						match smode with
 							| "resolve" ->
 								DMResolve arg
+                            | "workspace-symbols" ->
+                                Common.define com Define.NoCOpt;
+                                DMModuleSymbols (Some arg)
 							| _ ->
 								DMDefault
 				in
@@ -1648,6 +1651,21 @@ try
 				raise (Display.Statistics (Display.StatisticsPrinter.print_statistics stats))
 			| DMModuleSymbols filter ->
 				let symbols = com.shared.shared_display_information.document_symbols in
+				let symbols = match !global_cache with
+					| None -> symbols
+					| Some cache ->
+						let rec loop acc com =
+							let com_sign = get_signature com in
+							let acc = Hashtbl.fold (fun (file,sign) (_,data) acc ->
+								if (filter <> None || Display.is_display_file file) && com_sign = sign then
+									(file,Display.DocumentSymbols.collect_module_symbols data) :: acc
+								else
+									acc
+							) cache.c_files acc in
+							match com.get_macros() with None -> acc | Some com -> loop acc com
+						in
+						loop symbols com
+				in
 				raise (Display.ModuleSymbols(Display.DocumentSymbols.print_module_symbols com symbols filter))
 			| _ -> ()
 		end;

+ 2 - 2
src/typing/common.ml

@@ -168,8 +168,8 @@ module DisplayMode = struct
 				dms_exit_during_typing = false
 			}
 		| DMToplevel -> { settings with dms_full_typing = true; }
-		| DMModuleSymbols _ -> { settings with
-				dms_display_file_policy = DFPOnly;
+		| DMModuleSymbols filter -> { settings with
+				dms_display_file_policy = if filter = None then DFPOnly else DFPNo;
 				dms_exit_during_typing = false;
 				dms_force_macro_typing = true;
 			}

+ 1 - 1
src/typing/typeload.ml

@@ -238,7 +238,7 @@ let parse_file_from_lexbuf com file p lexbuf =
 	incr stats.s_files_parsed;
 	let data = (try Parser.parse com lexbuf with e -> t(); raise e) in
     begin match !display_default with
-        | DMModuleSymbols None when Display.is_display_file file ->
+        | DMModuleSymbols filter when filter <> None || Display.is_display_file file ->
             let ds = Display.DocumentSymbols.collect_module_symbols data in
 			com.shared.shared_display_information.document_symbols <- (file,ds) :: com.shared.shared_display_information.document_symbols;
         | _ ->