diff --git a/src/flow_dot_js.ml b/src/flow_dot_js.ml index 842739b26d0..11618d1e67e 100644 --- a/src/flow_dot_js.ml +++ b/src/flow_dot_js.ml @@ -83,7 +83,8 @@ let load_lib_files files = locs_to_dirtify = []; } in - Merge_js.merge_lib_files ~sig_opts asts |> snd + let (_, _, master_cx) = Merge_js.merge_lib_files ~sig_opts asts in + master_cx let stub_metadata ~root ~checked = { diff --git a/src/services/inference/init_js.ml b/src/services/inference/init_js.ml index 45e66e00c92..2498d40d527 100644 --- a/src/services/inference/init_js.ml +++ b/src/services/inference/init_js.ml @@ -45,7 +45,7 @@ let load_lib_files ~ccx ~options ~reader files = let (builtin_exports, master_cx, cx_opt) = if ok then let sig_opts = Type_sig_options.builtin_options options in - let (builtins, master_cx) = Merge_js.merge_lib_files ~sig_opts ordered_asts in + let (builtins, builtin_errors, master_cx) = Merge_js.merge_lib_files ~sig_opts ordered_asts in let cx_opt = match master_cx with | Context.EmptyMasterContext -> None @@ -66,6 +66,7 @@ let load_lib_files ~ccx ~options ~reader files = (fun mref -> Context.MissingModule mref) mk_builtins in + Context.reset_errors cx builtin_errors; Some cx in (Exports.of_builtins builtins, master_cx, cx_opt) diff --git a/src/typing/__tests__/type_hint_test.ml b/src/typing/__tests__/type_hint_test.ml index 5ea3d37cf0e..c00b6f329b1 100644 --- a/src/typing/__tests__/type_hint_test.ml +++ b/src/typing/__tests__/type_hint_test.ml @@ -181,7 +181,8 @@ end = struct locs_to_dirtify = []; } in - Merge_js.merge_lib_files ~sig_opts asts |> snd + let (_, _, master_cx) = Merge_js.merge_lib_files ~sig_opts asts in + master_cx let master_cx_ref = ref None diff --git a/src/typing/merge_js.ml b/src/typing/merge_js.ml index 64db0c270ce..d36938eb76d 100644 --- a/src/typing/merge_js.ml +++ b/src/typing/merge_js.ml @@ -866,14 +866,36 @@ let module_type_copied dst_cx src_cx ({ Type.module_export_types; module_global_ { m with Type.module_global_types_tmap } let merge_lib_files ~sig_opts ordered_asts = - let (_builtin_errors, builtin_locs, builtins) = + let (builtin_errors, builtin_locs, builtins) = Type_sig_utils.parse_and_pack_builtins sig_opts ordered_asts in + let builtin_errors = + builtin_errors + |> Base.List.filter_map ~f:(function + | Type_sig.SigError e -> + let e = + Signature_error.map + (fun l -> l |> Type_sig_collections.Locs.get builtin_locs |> ALoc.of_loc) + e + in + let msg = Error_message.ESignatureVerification e in + let source_file = + Base.Option.value_exn + (msg |> Error_message.loc_of_msg |> Base.Option.bind ~f:ALoc.source) + in + Some (Flow_error.error_of_msg ~source_file msg) + | Type_sig.CheckError -> None + ) + |> Flow_error.ErrorSet.of_list + in match ordered_asts with - | [] -> (builtins, Context.EmptyMasterContext) + | [] -> (builtins, builtin_errors, Context.EmptyMasterContext) | fst_ast :: _ -> let builtin_leader_file_key = Base.Option.value_exn (fst_ast |> fst |> Loc.source) in - (builtins, Context.NonEmptyMasterContext { builtin_leader_file_key; builtin_locs; builtins }) + ( builtins, + builtin_errors, + Context.NonEmptyMasterContext { builtin_leader_file_key; builtin_locs; builtins } + ) let mk_builtins metadata master_cx = match master_cx with diff --git a/src/typing/merge_js.mli b/src/typing/merge_js.mli index 9f8aa6b6e1d..3fd3de29fa0 100644 --- a/src/typing/merge_js.mli +++ b/src/typing/merge_js.mli @@ -28,6 +28,8 @@ val copy_into : val merge_lib_files : sig_opts:Type_sig_options.t -> (Loc.t, Loc.t) Flow_ast.Program.t list -> - Type_sig_collections.Locs.index Packed_type_sig.Builtins.t * Context.master_context + Type_sig_collections.Locs.index Packed_type_sig.Builtins.t + * Flow_error.ErrorSet.t + * Context.master_context val mk_builtins : Context.metadata -> Context.master_context -> Context.t -> Builtins.t