Simon Krajewski 5 месяцев назад
Родитель
Сommit
1b26ee4ca9

+ 2 - 0
src/context/common.ml

@@ -250,6 +250,7 @@ type context = {
 	main : Gctx.context_main;
 	mutable package_rules : (string,package_rule) PMap.t;
 	mutable report_mode : report_mode;
+	mutable was_auto_triggered : bool;
 	(* communication *)
 	mutable print : string -> unit;
 	mutable error : Gctx.error_function;
@@ -770,6 +771,7 @@ let create timer_ctx compilation_step cs version args display_mode =
 		hxb_reader_api = None;
 		hxb_reader_stats = HxbReader.create_hxb_reader_stats ();
 		hxb_writer_config = None;
+		was_auto_triggered = false;
 	} in
 	com
 

+ 2 - 2
src/context/display/display.ml

@@ -31,8 +31,8 @@ module ReferencePosition = struct
 end
 
 let preprocess_expr com e = match com.display.dms_kind with
-	| DMDefinition | DMTypeDefinition | DMUsage _ | DMImplementation | DMHover | DMDefault -> ExprPreprocessing.find_before_pos com.display.dms_kind e
-	| DMSignature -> ExprPreprocessing.find_display_call e
+	| DMDefinition | DMTypeDefinition | DMUsage _ | DMImplementation | DMHover | DMDefault -> ExprPreprocessing.find_before_pos com.was_auto_triggered com.display.dms_kind e
+	| DMSignature -> ExprPreprocessing.find_display_call com.was_auto_triggered e
 	| _ -> e
 
 let sort_fields l with_type tk =

+ 1 - 1
src/context/display/displayJson.ml

@@ -64,7 +64,7 @@ class display_handler (jsonrpc : jsonrpc_handler) com (cs : CompilationCache.t)
 		) None in
 
 		let pos = if requires_offset then jsonrpc#get_int_param "offset" else (-1) in
-		Parser.was_auto_triggered := was_auto_triggered;
+		com.was_auto_triggered <- was_auto_triggered;
 
 		if file <> file_input_marker then begin
 			let file_unique = com.file_keys#get file in

+ 4 - 4
src/context/display/exprPreprocessing.ml

@@ -3,7 +3,7 @@ open Ast
 open DisplayTypes.DisplayMode
 open DisplayPosition
 
-let find_before_pos dm e =
+let find_before_pos was_auto_triggered dm e =
 	let display_pos = ref (DisplayPosition.display_position#get) in
 	let was_annotated = ref false in
 	let is_annotated,is_completion = match dm with
@@ -160,7 +160,7 @@ let find_before_pos dm e =
 			raise Exit
 		| EMeta((Meta.Markup,_,_),(EConst(String _),p)) when is_annotated p ->
 			annotate_marked e
-		| EConst (String (_,q)) when ((q <> SSingleQuotes) || !Parser.was_auto_triggered) && is_annotated (pos e) && is_completion ->
+		| EConst (String (_,q)) when ((q <> SSingleQuotes) || was_auto_triggered) && is_annotated (pos e) && is_completion ->
 			(* TODO: check if this makes any sense *)
 			raise Exit
 		| EConst(Regexp _) when is_annotated (pos e) && is_completion ->
@@ -199,13 +199,13 @@ let find_before_pos dm e =
 	in
 	try map e with Exit -> e
 
-let find_display_call e =
+let find_display_call was_auto_triggered e =
 	let found = ref false in
 	let handle_el e el =
 		let call_arg_is_marked () =
 			el = [] || List.exists (fun (e,_) -> match e with EDisplay(_,DKMarked) -> true | _ -> false) el
 		in
-		if not !Parser.was_auto_triggered || call_arg_is_marked () then begin
+		if not was_auto_triggered || call_arg_is_marked () then begin
 		found := true;
 		Parser.mk_display_expr e DKCall
 		end else

+ 3 - 2
src/macro/eval/evalDebugSocket.ml

@@ -480,12 +480,13 @@ module ValueCompletion = struct
 				DisplayPosition.display_position#set old;
 			)
 		in
-		let config = Parser.create_config (ctx.curapi.get_com()).Common.defines true true DMDefault in
+		let com = (ctx.curapi.get_com()) in
+		let config = Parser.create_config com.Common.defines true true DMDefault com.was_auto_triggered in
 		let offset = column + (String.length "class X{static function main() ") - 1 (* this is retarded *) in
 		DisplayPosition.display_position#set {p with pmin = offset; pmax = offset};
 		begin try
 			let e = parse_expr ctx config text p in
-			let e = ExprPreprocessing.find_before_pos DMDefault e in
+			let e = ExprPreprocessing.find_before_pos com.was_auto_triggered DMDefault e in
 			save();
 			let rec loop e = match fst e with
 			| EDisplay(e1,DKDot) ->

+ 1 - 1
src/syntax/grammar.ml

@@ -1672,7 +1672,7 @@ and parse_switch_cases ctx eswitch cases s = match%parser s with
 		l , Some b
 	| [ (Kwd Case,p1); [%let el = psep Comma (expr_or_var ctx)]; [%let eg = popt (parse_guard ctx)] ] ->
 		let pdot = expect_unless_resume_p ctx DblDot s in
-		if !was_auto_triggered then check_resume ctx pdot (fun () -> ()) (fun () -> ());
+		if ctx.config.was_auto_triggered then check_resume ctx pdot (fun () -> ()) (fun () -> ());
 		(match el with
 		| [] -> syntax_error ctx (Custom "case without a pattern is not allowed") ~pos:(Some p1) s ([],None)
 		| _ ->

+ 4 - 5
src/syntax/parser.ml

@@ -75,6 +75,7 @@ type parser_config = {
 	in_display : bool;
 	in_display_file : bool;
 	display_mode : DisplayTypes.DisplayMode.t;
+	was_auto_triggered : bool;
 }
 
 type parser_ctx = {
@@ -125,11 +126,12 @@ let create_context lexer_ctx config = {
 	config;
 }
 
-let create_config defines in_display in_display_file display_mode = {
+let create_config defines in_display in_display_file display_mode was_auto_triggered = {
 	defines;
 	in_display;
 	in_display_file;
 	display_mode;
+	was_auto_triggered;
 }
 
 let s_decl_flag = function
@@ -178,15 +180,12 @@ let next_pos ctx s = pos (next_token ctx s)
 
 (* Global state *)
 
-let was_auto_triggered = ref false
-
 let in_macro = ref false
 let had_resume = ref false
 let code_ref = ref (Sedlexing.Utf8.from_string "")
 let delayed_syntax_completion : (syntax_completion * DisplayTypes.completion_subject) option ref = ref None
 
 let reset_state () =
-	was_auto_triggered := false;
 	display_position#reset;
 	in_macro := false;
 	had_resume := false;
@@ -450,7 +449,7 @@ let check_signature_mark ctx e p1 p2 =
 	if not (is_signature_display ctx) then e
 	else begin
 		let p = punion p1 p2 in
-		if true || not !was_auto_triggered then begin (* TODO: #6383 *)
+		if true || not ctx.config.was_auto_triggered then begin (* TODO: #6383 *)
 			if encloses_position_gt display_position#get p then (mk_display_expr e DKMarked)
 			else e
 		end else begin

+ 2 - 2
src/syntax/parserConfig.ml

@@ -3,10 +3,10 @@ open Common
 open DisplayPosition
 
 let default_config defines =
-	Parser.create_config defines false false DMNone
+	Parser.create_config defines false false DMNone false
 
 let file_parser_config com file =
 	let open DisplayPosition in
 	let in_display = display_position#get <> null_pos in
 	let in_display_file = in_display && display_position#is_in_file (Path.UniqueKey.create file) in
-	Parser.create_config com.defines in_display in_display_file com.display.dms_kind
+	Parser.create_config com.defines in_display in_display_file com.display.dms_kind com.was_auto_triggered