Skip to content

Module type alias #703

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 11 commits into from
Jul 13, 2021
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 2 additions & 1 deletion src/document/comment.ml
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,8 @@ module Reference = struct
let open Reference.Resolved in
match r with
| `Identifier id -> Identifier.name id
| `SubstAlias (_, r) -> render_resolved (r :> t)
| `Alias (_, r) -> render_resolved (r :> t)
| `AliasModuleType (_, r) -> render_resolved (r :> t)
| `Module (r, s) -> render_resolved (r :> t) ^ "." ^ ModuleName.to_string s
| `Canonical (_, `Resolved r) -> render_resolved (r :> t)
| `Canonical (p, _) -> render_resolved (p :> t)
Expand Down
2 changes: 1 addition & 1 deletion src/document/generator.ml
Original file line number Diff line number Diff line change
Expand Up @@ -163,7 +163,7 @@ module Make (Syntax : SYNTAX) = struct
match fragment with
| `Root _ -> assert false
| `Subst (_, rr) -> render_resolved_fragment (rr :> t)
| `SubstAlias (_, rr) -> render_resolved_fragment (rr :> t)
| `Alias (_, rr) -> render_resolved_fragment (rr :> t)
| `Module (`Root _, s) -> ModuleName.to_string s
| `Module_type (`Root _, s) -> ModuleTypeName.to_string s
| `Type (`Root _, s) -> TypeName.to_string s
Expand Down
5 changes: 4 additions & 1 deletion src/document/url.ml
Original file line number Diff line number Diff line change
Expand Up @@ -19,12 +19,15 @@ let render_path : Odoc_model.Paths.Path.t -> string =
| `OpaqueModule p -> render_resolved (p :> t)
| `OpaqueModuleType p -> render_resolved (p :> t)
| `Subst (_, p) -> render_resolved (p :> t)
| `SubstAlias (_, p) -> render_resolved (p :> t)
| `SubstT (_, p) -> render_resolved (p :> t)
| `Alias (p1, p2) ->
if Odoc_model.Paths.Path.is_hidden (`Resolved (p2 :> t)) then
render_resolved (p1 :> t)
else render_resolved (p2 :> t)
| `AliasModuleType (p1, p2) ->
if Odoc_model.Paths.Path.is_hidden (`Resolved (p2 :> t)) then
render_resolved (p1 :> t)
else render_resolved (p2 :> t)
| `Hidden p -> render_resolved (p :> t)
| `Module (p, s) -> render_resolved (p :> t) ^ "." ^ ModuleName.to_string s
| `Canonical (_, `Resolved p) -> render_resolved (p :> t)
Expand Down
52 changes: 32 additions & 20 deletions src/model/paths.ml
Original file line number Diff line number Diff line change
Expand Up @@ -445,8 +445,6 @@ module Path = struct
| `Hidden _ -> true
| `Subst (p1, p2) ->
inner (p1 : module_type :> any) || inner (p2 : module_ :> any)
| `SubstAlias (p1, p2) ->
inner (p1 : module_ :> any) || inner (p2 : module_ :> any)
| `Module (p, _) -> inner (p : module_ :> any)
| `Apply (p, _) -> inner (p : module_ :> any)
| `ModuleType (_, m) when Names.ModuleTypeName.is_internal m -> true
Expand All @@ -457,6 +455,8 @@ module Path = struct
| `ClassType (p, _) -> inner (p : module_ :> any)
| `Alias (p1, p2) ->
inner (p1 : module_ :> any) && inner (p2 : module_ :> any)
| `AliasModuleType (p1, p2) ->
inner (p1 : module_type :> any) && inner (p2 : module_type :> any)
| `SubstT (p1, p2) -> inner (p1 :> any) || inner (p2 :> any)
| `CanonicalModuleType (_, `Resolved _) -> false
| `CanonicalModuleType (x, _) -> inner (x : module_type :> any)
Expand Down Expand Up @@ -492,13 +492,16 @@ module Path = struct
| `CanonicalModuleType (_, `Resolved p) -> parent_module_type_identifier p
| `CanonicalModuleType (p, _) -> parent_module_type_identifier p
| `OpaqueModuleType mt -> parent_module_type_identifier mt
| `AliasModuleType (sub, orig) ->
if is_path_hidden (`Resolved (sub :> t)) then
parent_module_type_identifier orig
else parent_module_type_identifier sub

and parent_module_identifier :
Paths_types.Resolved_path.module_ -> Identifier.Signature.t = function
| `Identifier id ->
(id : Identifier.Path.Module.t :> Identifier.Signature.t)
| `Subst (sub, _) -> parent_module_type_identifier sub
| `SubstAlias (sub, _) -> parent_module_identifier sub
| `Hidden p -> parent_module_identifier p
| `Module (m, n) -> `Module (parent_module_identifier m, n)
| `Canonical (_, `Resolved p) -> parent_module_identifier p
Expand All @@ -521,7 +524,6 @@ module Path = struct
let rec identifier : t -> Identifier.Path.Module.t = function
| `Identifier id -> id
| `Subst (_, p) -> identifier p
| `SubstAlias (_, p) -> identifier p
| `Hidden p -> identifier p
| `Module (m, n) -> `Module (parent_module_identifier m, n)
| `Canonical (_, `Resolved p) -> identifier p
Expand All @@ -536,7 +538,6 @@ module Path = struct
let rec canonical_ident : t -> Identifier.Path.Module.t option = function
| `Identifier _id -> None
| `Subst (_, _) -> None
| `SubstAlias (_, _) -> None
| `Hidden p -> canonical_ident p
| `Module (p, n) -> (
match canonical_ident p with
Expand Down Expand Up @@ -564,6 +565,10 @@ module Path = struct
| `CanonicalModuleType (_, `Resolved p) -> identifier p
| `CanonicalModuleType (p, _) -> identifier p
| `OpaqueModuleType mt -> identifier mt
| `AliasModuleType (sub, orig) ->
if is_path_hidden (`Resolved (sub :> Paths_types.Resolved_path.any))
then identifier orig
else identifier sub

let rec canonical_ident : t -> Identifier.ModuleType.t option = function
| `Identifier _id -> None
Expand All @@ -572,6 +577,7 @@ module Path = struct
| Some x -> Some (`ModuleType ((x :> Identifier.Signature.t), n))
| None -> None)
| `SubstT (_, _) -> None
| `AliasModuleType (_, _) -> None
| `CanonicalModuleType (_, `Resolved p) -> Some (identifier p)
| `CanonicalModuleType (_, _) -> None
| `OpaqueModuleType m -> canonical_ident (m :> t)
Expand Down Expand Up @@ -626,7 +632,6 @@ module Path = struct
let rec identifier : t -> Identifier.t = function
| `Identifier id -> id
| `Subst (_, p) -> identifier (p :> t)
| `SubstAlias (_, p) -> identifier (p :> t)
| `Hidden p -> identifier (p :> t)
| `Module (m, n) -> `Module (parent_module_identifier m, n)
| `Canonical (_, `Resolved p) -> identifier (p :> t)
Expand All @@ -639,6 +644,9 @@ module Path = struct
| `Alias (sub, orig) ->
if is_path_hidden (`Resolved (sub :> t)) then identifier (orig :> t)
else identifier (sub :> t)
| `AliasModuleType (sub, orig) ->
if is_path_hidden (`Resolved (sub :> t)) then identifier (orig :> t)
else identifier (sub :> t)
| `SubstT (p, _) -> identifier (p :> t)
| `CanonicalModuleType (_, `Resolved p) -> identifier (p :> t)
| `CanonicalModuleType (p, _) -> identifier (p :> t)
Expand Down Expand Up @@ -685,7 +693,7 @@ module Fragment = struct
= function
| `Root i -> Base i
| `Subst (_, p) -> split_parent (sig_of_mod p)
| `SubstAlias (_, p) -> split_parent (sig_of_mod p)
| `Alias (_, p) -> split_parent (sig_of_mod p)
| `OpaqueModule m -> split_parent (sig_of_mod m)
| `Module (p, name) -> (
match split_parent p with
Expand All @@ -698,7 +706,7 @@ module Fragment = struct
let rec split : t -> string * t option = function
| `Root _ -> ("", None)
| `Subst (_, p) -> split (sig_of_mod p)
| `SubstAlias (_, p) -> split (sig_of_mod p)
| `Alias (_, p) -> split (sig_of_mod p)
| `OpaqueModule m -> split (sig_of_mod m)
| `Module (m, name) -> (
match split_parent m with
Expand All @@ -713,7 +721,7 @@ module Fragment = struct
(Path.Resolved.Module.identifier i :> Identifier.Signature.t)
| `Subst (s, _) ->
(Path.Resolved.ModuleType.identifier s :> Identifier.Signature.t)
| `SubstAlias (i, _) ->
| `Alias (i, _) ->
(Path.Resolved.Module.identifier i :> Identifier.Signature.t)
| `Module (m, n) -> `Module (identifier m, n)
| `OpaqueModule m -> identifier (sig_of_mod m)
Expand All @@ -724,7 +732,7 @@ module Fragment = struct

let rec split : t -> string * t option = function
| `Subst (_, p) -> split p
| `SubstAlias (_, p) -> split p
| `Alias (_, p) -> split p
| `Module (m, name) -> (
match split_parent m with
| Base _ -> (ModuleName.to_string name, None)
Expand Down Expand Up @@ -771,8 +779,7 @@ module Fragment = struct
| `Root (`ModuleType _r) -> assert false
| `Root (`Module _r) -> assert false
| `Subst (s, _) -> Path.Resolved.identifier (s :> Path.Resolved.t)
| `SubstAlias (p, _) ->
(Path.Resolved.Module.identifier p :> Identifier.t)
| `Alias (p, _) -> (Path.Resolved.Module.identifier p :> Identifier.t)
| `Module (m, n) -> `Module (Signature.identifier m, n)
| `Module_type (m, n) -> `ModuleType (Signature.identifier m, n)
| `Type (m, n) -> `Type (Signature.identifier m, n)
Expand All @@ -784,7 +791,7 @@ module Fragment = struct
| `Root (`ModuleType r) -> Path.is_resolved_hidden (r :> Path.Resolved.t)
| `Root (`Module r) -> Path.is_resolved_hidden (r :> Path.Resolved.t)
| `Subst (s, _) -> Path.is_resolved_hidden (s :> Path.Resolved.t)
| `SubstAlias (s, _) -> Path.is_resolved_hidden (s :> Path.Resolved.t)
| `Alias (s, _) -> Path.is_resolved_hidden (s :> Path.Resolved.t)
| `Module (m, _)
| `Module_type (m, _)
| `Type (m, _)
Expand Down Expand Up @@ -886,10 +893,15 @@ module Reference = struct
function
| `Identifier id -> id
| `Hidden s -> parent_signature_identifier (s :> signature)
| `SubstAlias (sub, orig) ->
| `Alias (sub, orig) ->
if Path.Resolved.Module.is_hidden sub then
parent_signature_identifier (orig :> signature)
else (Path.Resolved.Module.identifier sub :> Identifier.Signature.t)
| `AliasModuleType (sub, orig) ->
if Path.Resolved.ModuleType.is_hidden sub then
parent_signature_identifier (orig :> signature)
else
(Path.Resolved.ModuleType.identifier sub :> Identifier.Signature.t)
| `Module (m, n) -> `Module (parent_signature_identifier m, n)
| `Canonical (_, `Resolved r) ->
parent_signature_identifier (r : module_ :> signature)
Expand All @@ -909,8 +921,8 @@ module Reference = struct

and parent_identifier : parent -> Identifier.Parent.t = function
| `Identifier id -> id
| (`Hidden _ | `SubstAlias _ | `Module _ | `Canonical _ | `ModuleType _)
as sg ->
| ( `Hidden _ | `Alias _ | `AliasModuleType _ | `Module _ | `Canonical _
| `ModuleType _ ) as sg ->
(parent_signature_identifier sg :> Identifier.Parent.t)
| `Type _ as t -> (parent_type_identifier t :> Identifier.Parent.t)
| (`Class _ | `ClassType _) as c ->
Expand All @@ -919,14 +931,14 @@ module Reference = struct
and label_parent_identifier : label_parent -> Identifier.LabelParent.t =
function
| `Identifier id -> id
| ( `Hidden _ | `SubstAlias _ | `Module _ | `Canonical _ | `ModuleType _
| `Type _ | `Class _ | `ClassType _ ) as r ->
| ( `Hidden _ | `Alias _ | `AliasModuleType _ | `Module _ | `Canonical _
| `ModuleType _ | `Type _ | `Class _ | `ClassType _ ) as r ->
(parent_identifier r :> Identifier.LabelParent.t)

and identifier : t -> Identifier.t = function
| `Identifier id -> id
| ( `SubstAlias _ | `Module _ | `Canonical _ | `Hidden _ | `Type _
| `Class _ | `ClassType _ | `ModuleType _ ) as r ->
| ( `Alias _ | `AliasModuleType _ | `Module _ | `Canonical _ | `Hidden _
| `Type _ | `Class _ | `ClassType _ | `ModuleType _ ) as r ->
(label_parent_identifier r :> Identifier.t)
| `Field (p, n) -> `Field (parent_identifier p, n)
| `Constructor (s, n) -> `Constructor (parent_type_identifier s, n)
Expand Down
31 changes: 18 additions & 13 deletions src/model/paths_types.ml
Original file line number Diff line number Diff line change
Expand Up @@ -201,7 +201,6 @@ and Resolved_path : sig
type module_ =
[ `Identifier of Identifier.path_module
| `Subst of module_type * module_
| `SubstAlias of module_ * module_
| `Hidden of module_
| `Module of module_ * ModuleName.t
| `Canonical of module_ * Path.module_
Expand All @@ -214,6 +213,7 @@ and Resolved_path : sig
[ `Identifier of Identifier.path_module_type
| `SubstT of module_type * module_type
| `CanonicalModuleType of module_type * Path.module_type
| `AliasModuleType of module_type * module_type
| `ModuleType of module_ * ModuleTypeName.t
| `OpaqueModuleType of module_type ]
(** @canonical Odoc_model.Paths.Path.Resolved.ModuleType.t *)
Expand All @@ -234,12 +234,12 @@ and Resolved_path : sig
type any =
[ `Identifier of Identifier.any
| `Subst of module_type * module_
| `SubstAlias of module_ * module_
| `Hidden of module_
| `Module of module_ * ModuleName.t
| `Canonical of module_ * Path.module_
| `Apply of module_ * module_
| `Alias of module_ * module_
| `AliasModuleType of module_type * module_type
| `OpaqueModule of module_
| `ModuleType of module_ * ModuleTypeName.t
| `CanonicalModuleType of module_type * Path.module_type
Expand Down Expand Up @@ -293,14 +293,14 @@ and Resolved_fragment : sig
type signature =
[ `Root of root
| `Subst of Resolved_path.module_type * module_
| `SubstAlias of Resolved_path.module_ * module_
| `Alias of Resolved_path.module_ * module_
| `Module of signature * ModuleName.t
| `OpaqueModule of module_ ]
(** @canonical Odoc_model.Paths.Fragment.Resolved.Signature.t *)

and module_ =
[ `Subst of Resolved_path.module_type * module_
| `SubstAlias of Resolved_path.module_ * module_
| `Alias of Resolved_path.module_ * module_
| `Module of signature * ModuleName.t
| `OpaqueModule of module_ ]
(** @canonical Odoc_model.Paths.Fragment.Resolved.Module.t *)
Expand All @@ -321,7 +321,7 @@ and Resolved_fragment : sig
type any =
[ `Root of root
| `Subst of Resolved_path.module_type * module_
| `SubstAlias of Resolved_path.module_ * module_
| `Alias of Resolved_path.module_ * module_
| `Module of signature * ModuleName.t
| `Module_type of signature * ModuleTypeName.t
| `Type of signature * TypeName.t
Expand Down Expand Up @@ -589,7 +589,7 @@ and Resolved_reference : sig
and module_ =
[ `Identifier of Identifier.path_module
| `Hidden of module_
| `SubstAlias of Resolved_path.module_ * module_
| `Alias of Resolved_path.module_ * module_
| `Module of signature * ModuleName.t
| `Canonical of module_ * Reference.module_ ]
(** @canonical Odoc_model.Paths.Reference.Resolved.Module.t *)
Expand All @@ -598,10 +598,11 @@ and Resolved_reference : sig
and signature =
[ `Identifier of Identifier.signature
| `Hidden of module_
| `SubstAlias of Resolved_path.module_ * module_
| `Alias of Resolved_path.module_ * module_
| `Module of signature * ModuleName.t
| `Canonical of module_ * Reference.module_
| `ModuleType of signature * ModuleTypeName.t ]
| `ModuleType of signature * ModuleTypeName.t
| `AliasModuleType of Resolved_path.module_type * module_type ]
(** @canonical Odoc_model.Paths.Reference.Resolved.Signature.t *)

and class_signature =
Expand All @@ -613,7 +614,8 @@ and Resolved_reference : sig
(* parent is [ signature | class_signature ] *)
and parent =
[ `Identifier of Identifier.parent
| `SubstAlias of Resolved_path.module_ * module_
| `Alias of Resolved_path.module_ * module_
| `AliasModuleType of Resolved_path.module_type * module_type
| `Module of signature * ModuleName.t
| `Hidden of module_
| `Canonical of module_ * Reference.module_
Expand All @@ -627,7 +629,8 @@ and Resolved_reference : sig
is that the Identifier allows more types *)
and label_parent =
[ `Identifier of Identifier.label_parent
| `SubstAlias of Resolved_path.module_ * module_
| `Alias of Resolved_path.module_ * module_
| `AliasModuleType of Resolved_path.module_type * module_type
| `Module of signature * ModuleName.t
| `Hidden of module_
| `Canonical of module_ * Reference.module_
Expand All @@ -637,9 +640,10 @@ and Resolved_reference : sig
| `Type of signature * TypeName.t ]
(** @canonical Odoc_model.Paths.Reference.Resolved.LabelParent.t *)

type module_type =
and module_type =
[ `Identifier of Identifier.reference_module_type
| `ModuleType of signature * ModuleTypeName.t ]
| `ModuleType of signature * ModuleTypeName.t
| `AliasModuleType of Resolved_path.module_type * module_type ]
(** @canonical Odoc_model.Paths.Reference.Resolved.ModuleType.t *)

type type_ =
Expand Down Expand Up @@ -708,7 +712,8 @@ and Resolved_reference : sig

type any =
[ `Identifier of Identifier.any
| `SubstAlias of Resolved_path.module_ * module_
| `Alias of Resolved_path.module_ * module_
| `AliasModuleType of Resolved_path.module_type * module_type
| `Module of signature * ModuleName.t
| `Hidden of module_
| `Canonical of module_ * Reference.module_
Expand Down
Loading