Ocaml_typing.Env
Sourcetype value_unbound_reason =
| Val_unbound_instance_variable
| Val_unbound_self
| Val_unbound_ancestor
| Val_unbound_ghost_recursive of Ocaml_parsing.Location.t
type summary =
| Env_empty
| Env_value of summary * Ident.t * Types.value_description
| Env_type of summary * Ident.t * Types.type_declaration
| Env_extension of summary * Ident.t * Types.extension_constructor
| Env_module of summary
* Ident.t
* Types.module_presence
* Types.module_declaration
| Env_modtype of summary * Ident.t * Types.modtype_declaration
| Env_class of summary * Ident.t * Types.class_declaration
| Env_cltype of summary * Ident.t * Types.class_type_declaration
| Env_open of summary * Path.t
The string set argument of Env_open
represents a list of module names to skip, i.e. that won't be imported in the toplevel namespace.
| Env_functor_arg of summary * Ident.t
| Env_constraints of summary * Types.type_declaration Path.Map.t
| Env_copy_types of summary
| Env_persistent of summary * Ident.t
| Env_value_unbound of summary * string * value_unbound_reason
| Env_module_unbound of summary * string * module_unbound_reason
type type_descr_kind =
(Types.label_description, Types.constructor_description) Types.type_kind
type lookup_error =
| Unbound_value of Ocaml_parsing.Longident.t * unbound_value_hint
| Unbound_type of Ocaml_parsing.Longident.t
| Unbound_constructor of Ocaml_parsing.Longident.t
| Unbound_label of Ocaml_parsing.Longident.t
| Unbound_module of Ocaml_parsing.Longident.t
| Unbound_class of Ocaml_parsing.Longident.t
| Unbound_modtype of Ocaml_parsing.Longident.t
| Unbound_cltype of Ocaml_parsing.Longident.t
| Unbound_instance_variable of string
| Not_an_instance_variable of string
| Masked_instance_variable of Ocaml_parsing.Longident.t
| Masked_self_variable of Ocaml_parsing.Longident.t
| Masked_ancestor_variable of Ocaml_parsing.Longident.t
| Structure_used_as_functor of Ocaml_parsing.Longident.t
| Abstract_used_as_functor of Ocaml_parsing.Longident.t
| Functor_used_as_structure of Ocaml_parsing.Longident.t
| Abstract_used_as_structure of Ocaml_parsing.Longident.t
| Generative_used_as_applicative of Ocaml_parsing.Longident.t
| Illegal_reference_to_recursive_module
| Cannot_scrape_alias of Ocaml_parsing.Longident.t * Path.t
val lookup_value :
?use:bool ->
loc:Ocaml_parsing.Location.t ->
Ocaml_parsing.Longident.t ->
t ->
Path.t * Types.value_description
val lookup_type :
?use:bool ->
loc:Ocaml_parsing.Location.t ->
Ocaml_parsing.Longident.t ->
t ->
Path.t * Types.type_declaration
val lookup_module :
?use:bool ->
loc:Ocaml_parsing.Location.t ->
Ocaml_parsing.Longident.t ->
t ->
Path.t * Types.module_declaration
val lookup_modtype :
?use:bool ->
loc:Ocaml_parsing.Location.t ->
Ocaml_parsing.Longident.t ->
t ->
Path.t * Types.modtype_declaration
val lookup_class :
?use:bool ->
loc:Ocaml_parsing.Location.t ->
Ocaml_parsing.Longident.t ->
t ->
Path.t * Types.class_declaration
val lookup_cltype :
?use:bool ->
loc:Ocaml_parsing.Location.t ->
Ocaml_parsing.Longident.t ->
t ->
Path.t * Types.class_type_declaration
val lookup_module_path :
?use:bool ->
loc:Ocaml_parsing.Location.t ->
load:bool ->
Ocaml_parsing.Longident.t ->
t ->
Path.t
val lookup_modtype_path :
?use:bool ->
loc:Ocaml_parsing.Location.t ->
Ocaml_parsing.Longident.t ->
t ->
Path.t
val lookup_constructor :
?use:bool ->
loc:Ocaml_parsing.Location.t ->
constructor_usage ->
Ocaml_parsing.Longident.t ->
t ->
Types.constructor_description
val lookup_all_constructors :
?use:bool ->
loc:Ocaml_parsing.Location.t ->
constructor_usage ->
Ocaml_parsing.Longident.t ->
t ->
((Types.constructor_description * (unit -> unit)) list,
Ocaml_parsing.Location.t * t * lookup_error)
result
val lookup_all_constructors_from_type :
?use:bool ->
loc:Ocaml_parsing.Location.t ->
constructor_usage ->
Path.t ->
t ->
(Types.constructor_description * (unit -> unit)) list
val lookup_label :
?use:bool ->
loc:Ocaml_parsing.Location.t ->
label_usage ->
Ocaml_parsing.Longident.t ->
t ->
Types.label_description
val lookup_all_labels :
?use:bool ->
loc:Ocaml_parsing.Location.t ->
label_usage ->
Ocaml_parsing.Longident.t ->
t ->
((Types.label_description * (unit -> unit)) list,
Ocaml_parsing.Location.t * t * lookup_error)
result
val lookup_all_labels_from_type :
?use:bool ->
loc:Ocaml_parsing.Location.t ->
label_usage ->
Path.t ->
t ->
(Types.label_description * (unit -> unit)) list
val lookup_instance_variable :
?use:bool ->
loc:Ocaml_parsing.Location.t ->
string ->
t ->
Path.t * Ocaml_parsing.Asttypes.mutable_flag * string * Types.type_expr
val find_modtype_by_name :
Ocaml_parsing.Longident.t ->
t ->
Path.t * Types.modtype_declaration
val find_cltype_by_name :
Ocaml_parsing.Longident.t ->
t ->
Path.t * Types.class_type_declaration
val find_constructor_by_name :
Ocaml_parsing.Longident.t ->
t ->
Types.constructor_description
The find_*_index
functions computes a "namespaced" De Bruijn index of an identifier in a given environment. In other words, it returns how many times an identifier has been shadowed by a more recent identifiers with the same name in a given environment. Those functions return None
when the identifier is not bound in the environment. This behavior is there to facilitate the detection of inconsistent printing environment, but should disappear in the long term.
val add_value :
?check:(string -> Ocaml_utils.Warnings.t) ->
Ident.t ->
Types.value_description ->
t ->
t
val add_extension :
check:bool ->
rebind:bool ->
Ident.t ->
Types.extension_constructor ->
t ->
t
val add_module :
?arg:bool ->
?shape:Shape.t ->
Ident.t ->
Types.module_presence ->
Types.module_type ->
t ->
t
val add_module_lazy :
update_summary:bool ->
Ident.t ->
Types.module_presence ->
Subst.Lazy.modtype ->
t ->
t
val add_module_declaration :
?arg:bool ->
?shape:Shape.t ->
check:bool ->
Ident.t ->
Types.module_presence ->
Types.module_declaration ->
t ->
t
val add_module_declaration_lazy :
update_summary:bool ->
Ident.t ->
Types.module_presence ->
Subst.Lazy.module_decl ->
t ->
t
val add_modtype_lazy :
update_summary:bool ->
Ident.t ->
Subst.Lazy.modtype_declaration ->
t ->
t
val persistent_structures_of_dir :
Ocaml_utils.Load_path.Dir.t ->
Merlin_utils.Misc.String.Set.t
val open_signature :
?used_slot:bool ref ->
?loc:Ocaml_parsing.Location.t ->
?toplevel:bool ->
Ocaml_parsing.Asttypes.override_flag ->
Path.t ->
t ->
(t, [ `Not_found | `Functor ]) result
val enter_value :
?check:(string -> Ocaml_utils.Warnings.t) ->
string ->
Types.value_description ->
t ->
Ident.t * t
val enter_extension :
scope:int ->
rebind:bool ->
string ->
Types.extension_constructor ->
t ->
Ident.t * t
val enter_module :
scope:int ->
?arg:bool ->
string ->
Types.module_presence ->
Types.module_type ->
t ->
Ident.t * t
val enter_module_declaration :
scope:int ->
?arg:bool ->
?shape:Shape.t ->
string ->
Types.module_presence ->
Types.module_declaration ->
t ->
Ident.t * t
val enter_signature :
?mod_shape:Shape.t ->
scope:int ->
Types.signature ->
t ->
Types.signature * t
val enter_signature_and_shape :
scope:int ->
parent_shape:Shape.Map.t ->
Shape.t ->
Types.signature ->
t ->
Types.signature * Shape.Map.t * t
val read_signature :
Merlin_utils.Misc.modname ->
Merlin_utils.Misc.filepath ->
Types.signature
val save_signature :
alerts:Merlin_utils.Misc.alerts ->
Types.signature ->
Merlin_utils.Misc.modname ->
Merlin_utils.Misc.filepath ->
Cmi_format.cmi_infos
val save_signature_with_imports :
alerts:Merlin_utils.Misc.alerts ->
Types.signature ->
Merlin_utils.Misc.modname ->
Merlin_utils.Misc.filepath ->
Merlin_utils.Misc.crcs ->
Cmi_format.cmi_infos
type error =
| Missing_module of Ocaml_parsing.Location.t * Path.t * Path.t
| Illegal_value_name of Ocaml_parsing.Location.t * string
| Lookup_error of Ocaml_parsing.Location.t * t * lookup_error
val report_lookup_error :
Ocaml_parsing.Location.t ->
t ->
Format.formatter ->
lookup_error ->
unit
val check_functor_application :
(errors:bool ->
loc:Ocaml_parsing.Location.t ->
lid_whole_app:Ocaml_parsing.Longident.t ->
f0_path:Path.t ->
args:(Path.t * Types.module_type) list ->
arg_path:Path.t ->
arg_mty:Types.module_type ->
param_mty:Types.module_type ->
t ->
unit)
ref
val check_well_formed_module :
(t -> Ocaml_parsing.Location.t -> string -> Types.module_type -> unit) ref
val strengthen :
(aliasable:bool ->
t ->
Subst.Lazy.modtype ->
Path.t ->
Subst.Lazy.modtype)
ref
Folds
Folding over all identifiers (for analysis purpose)
val fold_values :
(string -> Path.t -> Types.value_description -> 'a -> 'a) ->
Ocaml_parsing.Longident.t option ->
t ->
'a ->
'a
val fold_types :
(string -> Path.t -> Types.type_declaration -> 'a -> 'a) ->
Ocaml_parsing.Longident.t option ->
t ->
'a ->
'a
val fold_constructors :
(Types.constructor_description -> 'a -> 'a) ->
Ocaml_parsing.Longident.t option ->
t ->
'a ->
'a
val fold_labels :
(Types.label_description -> 'a -> 'a) ->
Ocaml_parsing.Longident.t option ->
t ->
'a ->
'a
val fold_modules :
(string -> Path.t -> Types.module_declaration -> 'a -> 'a) ->
Ocaml_parsing.Longident.t option ->
t ->
'a ->
'a
Persistent structures are only traversed if they are already loaded.
val fold_modtypes :
(string -> Path.t -> Types.modtype_declaration -> 'a -> 'a) ->
Ocaml_parsing.Longident.t option ->
t ->
'a ->
'a
val fold_classes :
(string -> Path.t -> Types.class_declaration -> 'a -> 'a) ->
Ocaml_parsing.Longident.t option ->
t ->
'a ->
'a
val fold_cltypes :
(string -> Path.t -> Types.class_type_declaration -> 'a -> 'a) ->
Ocaml_parsing.Longident.t option ->
t ->
'a ->
'a
Utilities
merlin: manage internal state