From e3fbc373c9185dcb9c5f9a5d2491538064ed45f7 Mon Sep 17 00:00:00 2001 From: Sam Zhou Date: Mon, 3 Mar 2025 14:32:56 -0800 Subject: [PATCH] [flow][refactor][EZ] Only return one copy of builtins from `Merge_js.merge_lib_files` Summary: In the case of `EmptyMasterContext`, the builtins will be empty any ways, in the case of `NonEmptyMasterContext`, the first returned builtins from `Merge_js.merge_lib_files` will be the same builtins in `NonEmptyMasterContext`. Therefore, we can alwaus ignore the builtin from the first returned builtins from `Merge_js.merge_lib_files`. Let's just remove that return instead. Changelog: [internal] Reviewed By: panagosg7 Differential Revision: D70495943 fbshipit-source-id: 2d189e13c95da3e9bf1dddc7be0ab2714f230d8f --- src/flow_dot_js.ml | 2 +- src/services/inference/init_js.ml | 51 ++++++++++++-------------- src/typing/__tests__/type_hint_test.ml | 2 +- src/typing/merge_js.ml | 5 +-- src/typing/merge_js.mli | 4 +- 5 files changed, 29 insertions(+), 35 deletions(-) diff --git a/src/flow_dot_js.ml b/src/flow_dot_js.ml index 11618d1e67e..3b18a93b4e5 100644 --- a/src/flow_dot_js.ml +++ b/src/flow_dot_js.ml @@ -83,7 +83,7 @@ let load_lib_files files = locs_to_dirtify = []; } in - let (_, _, master_cx) = Merge_js.merge_lib_files ~sig_opts asts in + 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 2498d40d527..7af525e7ae4 100644 --- a/src/services/inference/init_js.ml +++ b/src/services/inference/init_js.ml @@ -43,34 +43,31 @@ let load_lib_files ~ccx ~options ~reader files = (true, ErrorSet.empty, []) in let (builtin_exports, master_cx, cx_opt) = - if ok then + if ok then ( let sig_opts = Type_sig_options.builtin_options options 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 - | Context.NonEmptyMasterContext { builtin_leader_file_key; _ } -> - let metadata = - Context.( - let metadata = metadata_of_options options in - { metadata with checked = false } - ) - in - let mk_builtins = Merge_js.mk_builtins metadata master_cx in - let cx = - Context.make - ccx - metadata - builtin_leader_file_key - (lazy (ALoc.empty_table builtin_leader_file_key)) - (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) - else + let (builtin_errors, master_cx) = Merge_js.merge_lib_files ~sig_opts ordered_asts in + match master_cx with + | Context.EmptyMasterContext -> (Exports.empty, Context.EmptyMasterContext, None) + | Context.NonEmptyMasterContext { builtin_leader_file_key; builtins; _ } -> + let metadata = + Context.( + let metadata = metadata_of_options options in + { metadata with checked = false } + ) + in + let mk_builtins = Merge_js.mk_builtins metadata master_cx in + let cx = + Context.make + ccx + metadata + builtin_leader_file_key + (lazy (ALoc.empty_table builtin_leader_file_key)) + (fun mref -> Context.MissingModule mref) + mk_builtins + in + Context.reset_errors cx builtin_errors; + (Exports.of_builtins builtins, master_cx, Some cx) + ) else (Exports.empty, Context.EmptyMasterContext, None) in Lwt.return (ok, master_cx, cx_opt, errors, builtin_exports) diff --git a/src/typing/__tests__/type_hint_test.ml b/src/typing/__tests__/type_hint_test.ml index c00b6f329b1..e35b3b65de0 100644 --- a/src/typing/__tests__/type_hint_test.ml +++ b/src/typing/__tests__/type_hint_test.ml @@ -181,7 +181,7 @@ end = struct locs_to_dirtify = []; } in - let (_, _, master_cx) = Merge_js.merge_lib_files ~sig_opts asts in + 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 c53305507a8..b3a581975f6 100644 --- a/src/typing/merge_js.ml +++ b/src/typing/merge_js.ml @@ -901,11 +901,10 @@ let merge_lib_files ~sig_opts ordered_asts = |> Flow_error.ErrorSet.of_list in match ordered_asts with - | [] -> (builtins, builtin_errors, Context.EmptyMasterContext) + | [] -> (builtin_errors, Context.EmptyMasterContext) | fst_ast :: _ -> let builtin_leader_file_key = Base.Option.value_exn (fst_ast |> fst |> Loc.source) in - ( builtins, - builtin_errors, + ( builtin_errors, Context.NonEmptyMasterContext { builtin_leader_file_key; builtin_locs; builtins } ) diff --git a/src/typing/merge_js.mli b/src/typing/merge_js.mli index 3fd3de29fa0..a3dbfca5c6e 100644 --- a/src/typing/merge_js.mli +++ b/src/typing/merge_js.mli @@ -28,8 +28,6 @@ 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 - * Flow_error.ErrorSet.t - * Context.master_context + Flow_error.ErrorSet.t * Context.master_context val mk_builtins : Context.metadata -> Context.master_context -> Context.t -> Builtins.t