Skip to content

Commit

Permalink
[flow][refactor][EZ] Record only loc instead of reason for builtin na…
Browse files Browse the repository at this point in the history
…me/module lookup error

Summary:
We simply don't care about the reason description at all. Only record loc so that we don't have to construct the reason.

Changelog: [internal]

Reviewed By: gkz

Differential Revision: D56799562

fbshipit-source-id: 5ef65460c9cab7e9502fe7d34791641c81e3de1f
  • Loading branch information
SamChou19815 authored and facebook-github-bot committed May 1, 2024
1 parent fcb60a0 commit 8948694
Show file tree
Hide file tree
Showing 6 changed files with 27 additions and 44 deletions.
10 changes: 2 additions & 8 deletions src/analysis/env_builder/env_api.ml
Expand Up @@ -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) ->
Expand Down Expand Up @@ -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
Expand Down
13 changes: 5 additions & 8 deletions src/services/code_action/code_action_service.ml
Expand Up @@ -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
[
{
Expand Down Expand Up @@ -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
Expand Down Expand Up @@ -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 =
Expand Down
10 changes: 5 additions & 5 deletions src/typing/debug_js.ml
Expand Up @@ -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
Expand Down
19 changes: 9 additions & 10 deletions src/typing/errors/error_message.ml
Expand Up @@ -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;
}
Expand Down Expand Up @@ -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 } ->
Expand Down Expand Up @@ -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
Expand Down Expand Up @@ -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
Expand Down
12 changes: 5 additions & 7 deletions src/typing/flow_js_utils.ml
Expand Up @@ -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

Expand All @@ -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
Expand Down
7 changes: 1 addition & 6 deletions src/typing/type_env.ml
Expand Up @@ -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
Expand Down

0 comments on commit 8948694

Please sign in to comment.