diff --git a/src/analysis/env_builder/env_api.ml b/src/analysis/env_builder/env_api.ml index 741aedfcd8a..94c2a045108 100644 --- a/src/analysis/env_builder/env_api.ml +++ b/src/analysis/env_builder/env_api.ml @@ -242,10 +242,7 @@ module type S = sig def_loc: ALoc.t; name: string; } - | BuiltinNameLookupFailed of { - reason_desc: Reason.reason_desc; - name: string; - } + | BuiltinNameLookupFailed of string val map_result : f:('a -> 'b) -> @@ -305,10 +302,7 @@ module Make def_loc: ALoc.t; name: string; } - | BuiltinNameLookupFailed of { - reason_desc: Reason.reason_desc; - name: string; - } + | BuiltinNameLookupFailed of string type literal_check = | SingletonNum of ALoc.t * bool * float * string diff --git a/src/services/code_action/code_action_service.ml b/src/services/code_action/code_action_service.ml index 113b94b97b2..f379b5c4fd6 100644 --- a/src/services/code_action/code_action_service.ml +++ b/src/services/code_action/code_action_service.ml @@ -766,8 +766,7 @@ let ast_transforms_of_error ~loc_of_aloc ?loc = function | _ -> [] else [] - | Error_message.EBuiltinNameLookupFailed { name; reason; _ } -> - let error_loc = Reason.loc_of_reason reason in + | Error_message.EBuiltinNameLookupFailed { loc = error_loc; name } -> if loc_opt_intersects ~error_loc ~loc then [ { @@ -844,9 +843,8 @@ let code_actions_of_errors in let (suggest_imports_actions, has_missing_import) = match error_message with - | Error_message.EBuiltinNameLookupFailed { reason; name } when Options.autoimports options - -> - let error_loc = Reason.loc_of_reason reason in + | Error_message.EBuiltinNameLookupFailed { loc = error_loc; name } + when Options.autoimports options -> let actions = if include_quick_fixes && Loc.intersects error_loc loc then let { ServerEnv.exports; _ } = env in @@ -1152,9 +1150,8 @@ let autofix_imports ~options ~env ~loc_of_aloc ~module_system_info ~cx ~ast ~uri match Flow_error.msg_of_error error |> Error_message.map_loc_of_error_message loc_of_aloc with - | Error_message.EBuiltinNameLookupFailed { reason; name } when Options.autoimports options - -> - let error_loc = Reason.loc_of_reason reason in + | Error_message.EBuiltinNameLookupFailed { loc = error_loc; name } + when Options.autoimports options -> (match preferred_import ~ast ~exports name error_loc with | Some (source, export_kind) -> let bindings = diff --git a/src/typing/debug_js.ml b/src/typing/debug_js.ml index ca268b034c4..1aaa2faa9db 100644 --- a/src/typing/debug_js.ml +++ b/src/typing/debug_js.ml @@ -1371,12 +1371,12 @@ let dump_error_message = name (Polarity.string expected_polarity) (Polarity.string actual_polarity) - | EBuiltinNameLookupFailed { reason; name } -> - spf "EBuiltinNameLookupFailed { reason = %s; name = %S }" (dump_reason cx reason) name - | EBuiltinModuleLookupFailed { reason; name; potential_generator } -> + | EBuiltinNameLookupFailed { loc; name } -> + spf "EBuiltinNameLookupFailed { loc = %s; name = %S }" (string_of_aloc loc) name + | EBuiltinModuleLookupFailed { loc; name; potential_generator } -> spf - "EBuiltinModuleLookupFailed { reason = %s; name = %S; potential_generator = %s }" - (dump_reason cx reason) + "EBuiltinModuleLookupFailed { loc = %s; name = %S; potential_generator = %s }" + (string_of_aloc loc) name (match potential_generator with | Some generator -> spf "Some(%s)" generator diff --git a/src/typing/errors/error_message.ml b/src/typing/errors/error_message.ml index 86b601527eb..612aab6938a 100644 --- a/src/typing/errors/error_message.ml +++ b/src/typing/errors/error_message.ml @@ -102,11 +102,11 @@ and 'loc t' = actual_polarity: Polarity.t; } | EBuiltinNameLookupFailed of { - reason: 'loc virtual_reason; + loc: 'loc; name: string; } | EBuiltinModuleLookupFailed of { - reason: 'loc virtual_reason; + loc: 'loc; name: string; potential_generator: string option; } @@ -832,10 +832,9 @@ let rec map_loc_of_error_message (f : 'a -> 'b) : 'a t' -> 'b t' = EPropNotWritable { reason_prop = map_reason reason_prop; prop_name; use_op = map_use_op use_op } | EPropPolarityMismatch ((r1, r2), p, ps, op) -> EPropPolarityMismatch ((map_reason r1, map_reason r2), p, ps, map_use_op op) - | EBuiltinNameLookupFailed { reason; name } -> - EBuiltinNameLookupFailed { reason = map_reason reason; name } - | EBuiltinModuleLookupFailed { reason; name; potential_generator } -> - EBuiltinModuleLookupFailed { reason = map_reason reason; name; potential_generator } + | EBuiltinNameLookupFailed { loc; name } -> EBuiltinNameLookupFailed { loc = f loc; name } + | EBuiltinModuleLookupFailed { loc; name; potential_generator } -> + EBuiltinModuleLookupFailed { loc = f loc; name; potential_generator } | EPrivateLookupFailed ((r1, r2), x, op) -> EPrivateLookupFailed ((map_reason r1, map_reason r2), x, map_use_op op) | EPlatformSpecificImplementationModuleLookupFailed { loc; name } -> @@ -1783,8 +1782,8 @@ let loc_of_msg : 'loc t' -> 'loc option = function | EEnumModification { loc; _ } -> Some loc | EEnumMemberDuplicateValue { loc; _ } -> Some loc | ESpeculationAmbiguous { reason; _ } -> Some (loc_of_reason reason) - | EBuiltinNameLookupFailed { reason; _ } -> Some (loc_of_reason reason) - | EBuiltinModuleLookupFailed { reason; _ } -> Some (loc_of_reason reason) + | EBuiltinNameLookupFailed { loc; _ } -> Some loc + | EBuiltinModuleLookupFailed { loc; _ } -> Some loc | ECannotCallReactComponent { reason } -> Some (loc_of_reason reason) | EPlatformSpecificImplementationModuleLookupFailed { loc; _ } -> Some loc | EDuplicateClassMember { loc; _ } -> Some loc @@ -2143,8 +2142,8 @@ let friendly_message_of_msg = function let reason_targ = mk_reason (RIdentifier (OrdinaryName name)) (def_loc_of_reason reason) in Normal (MessageCannotUseTypeDueToPolarityMismatch { reason_targ; expected_polarity; actual_polarity }) - | EBuiltinNameLookupFailed { reason = _; name } -> Normal (MessageCannotResolveBuiltinName name) - | EBuiltinModuleLookupFailed { reason = _; name; potential_generator } -> + | EBuiltinNameLookupFailed { loc = _; name } -> Normal (MessageCannotResolveBuiltinName name) + | EBuiltinModuleLookupFailed { loc = _; name; potential_generator } -> Normal (MessageCannotResolveBuiltinModule { name; potential_generator }) | EPrivateLookupFailed (reasons, x, use_op) -> PropMissing diff --git a/src/typing/flow_js_utils.ml b/src/typing/flow_js_utils.ml index 7311accf23e..97c2ad63478 100644 --- a/src/typing/flow_js_utils.ml +++ b/src/typing/flow_js_utils.ml @@ -742,8 +742,7 @@ let emit_cacheable_env_error cx loc err = match err with | Env_api.ReferencedBeforeDeclaration { name; def_loc } -> EBindingError (EReferencedBeforeDeclaration, loc, OrdinaryName name, def_loc) - | Env_api.BuiltinNameLookupFailed { reason_desc; name } -> - EBuiltinNameLookupFailed { reason = mk_reason reason_desc loc; name } + | Env_api.BuiltinNameLookupFailed name -> EBuiltinNameLookupFailed { loc; name } in add_output cx err @@ -755,14 +754,13 @@ let lookup_builtin_module_error cx module_name reason = in add_output cx - (Error_message.EBuiltinModuleLookupFailed { reason; potential_generator; name = module_name }); + (Error_message.EBuiltinModuleLookupFailed + { loc = loc_of_reason reason; potential_generator; name = module_name } + ); AnyT.error_of_kind UnresolvedName reason let lookup_builtin_name_error name reason = - Error - ( AnyT.error_of_kind UnresolvedName reason, - Nel.one (Env_api.BuiltinNameLookupFailed { reason_desc = desc_of_reason reason; name }) - ) + Error (AnyT.error_of_kind UnresolvedName reason, Nel.one (Env_api.BuiltinNameLookupFailed name)) let lookup_builtin_value_result cx x reason = let builtins = Context.builtins cx in diff --git a/src/typing/type_env.ml b/src/typing/type_env.ml index 0f8fc3bedb0..bacc7c5afb3 100644 --- a/src/typing/type_env.ml +++ b/src/typing/type_env.ml @@ -744,12 +744,7 @@ let subtype_against_providers cx ~use_op ?potential_global_name t loc = if is_provider cx loc then Base.Option.iter potential_global_name ~f:(fun name -> if Base.Option.is_none (Flow_js_utils.lookup_builtin_value_opt cx name) then - Flow_js_utils.add_output - cx - Error_message.( - EBuiltinNameLookupFailed - { reason = mk_reason (RIdentifier (OrdinaryName name)) loc; name } - ) + Flow_js_utils.add_output cx Error_message.(EBuiltinNameLookupFailed { loc; name }) ) | _ -> if not (is_provider cx loc) then