Skip to content

Commit 2a1afb7

Browse files
sabinejonludlam
authored andcommitted
refactor Page to remove kind and title, as these are both in url
1 parent 8d9e81d commit 2a1afb7

File tree

10 files changed

+80
-94
lines changed

10 files changed

+80
-94
lines changed

src/document/doctree.ml

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -296,20 +296,19 @@ end = struct
296296
in
297297
match kind with
298298
| `Module -> prefix "Module"
299-
| `Argument -> prefix "Parameter"
299+
| `Parameter -> prefix "Parameter"
300300
| `ModuleType -> prefix "Module type"
301301
| `ClassType -> prefix "Class type"
302302
| `Class -> prefix "Class"
303-
| `Page -> []
303+
| `Page | `LeafPage | `File -> []
304304

305-
let make_name_from_path { Url.Path.name; parent; _ } =
305+
let make_name_from_path { Url.Path.path_fragment; parent; _ } =
306306
match parent with
307-
| None | Some { kind = `Page; _ } -> name
308-
| Some p -> Printf.sprintf "%s.%s" p.name name
307+
| None | Some { kind = `Page; _ } -> path_fragment
308+
| Some p -> Printf.sprintf "%s.%s" p.path_fragment path_fragment
309309

310310
let render_title (p : Page.t) =
311-
format_title p.kind
312-
(make_name_from_path p.url)
311+
format_title p.url.kind (make_name_from_path p.url)
313312
end
314313

315314
module Math : sig

src/document/generator.ml

Lines changed: 13 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -72,10 +72,10 @@ let prepare_preamble comment items =
7272
in
7373
(Comment.standalone preamble, Comment.standalone first_comment @ items)
7474

75-
let make_expansion_page title kind url comments items =
75+
let make_expansion_page url comments items =
7676
let comment = List.concat comments in
7777
let preamble, items = prepare_preamble comment items in
78-
{ Page.title; kind; preamble; items; url }
78+
{ Page.preamble; items; url }
7979

8080
include Generator_signatures
8181

@@ -1009,9 +1009,7 @@ module Make (Syntax : SYNTAX) = struct
10091009
| Some csig ->
10101010
let expansion_doc, items = class_signature csig in
10111011
let url = Url.Path.from_identifier t.id in
1012-
let page =
1013-
make_expansion_page name `Class url [ t.doc; expansion_doc ] items
1014-
in
1012+
let page = make_expansion_page url [ t.doc; expansion_doc ] items in
10151013
( O.documentedSrc @@ path url [ inline @@ Text name ],
10161014
Some page,
10171015
Some expansion_doc )
@@ -1046,10 +1044,7 @@ module Make (Syntax : SYNTAX) = struct
10461044
| Some csig ->
10471045
let url = Url.Path.from_identifier t.id in
10481046
let expansion_doc, items = class_signature csig in
1049-
let page =
1050-
make_expansion_page name `ClassType url [ t.doc; expansion_doc ]
1051-
items
1052-
in
1047+
let page = make_expansion_page url [ t.doc; expansion_doc ] items in
10531048
( O.documentedSrc @@ path url [ inline @@ Text name ],
10541049
Some page,
10551050
Some expansion_doc )
@@ -1173,9 +1168,7 @@ module Make (Syntax : SYNTAX) = struct
11731168
let url = Url.Path.from_identifier arg.id in
11741169
let modname = path url [ inline @@ Text name ] in
11751170
let type_with_expansion =
1176-
let content =
1177-
make_expansion_page name `Argument url [ expansion_doc ] items
1178-
in
1171+
let content = make_expansion_page url [ expansion_doc ] items in
11791172
let summary = O.render modtyp in
11801173
let status = `Default in
11811174
let expansion =
@@ -1323,10 +1316,7 @@ module Make (Syntax : SYNTAX) = struct
13231316
in
13241317
let url = Url.Path.from_identifier t.id in
13251318
let link = path url [ inline @@ Text modname ] in
1326-
let page =
1327-
make_expansion_page modname `Module url [ t.doc; expansion_doc ]
1328-
items
1329-
in
1319+
let page = make_expansion_page url [ t.doc; expansion_doc ] items in
13301320
(link, status, Some page, Some expansion_doc)
13311321
in
13321322
let intro = O.keyword "module" ++ O.txt " " ++ modname in
@@ -1382,10 +1372,7 @@ module Make (Syntax : SYNTAX) = struct
13821372
| Some (expansion_doc, items) ->
13831373
let url = Url.Path.from_identifier id in
13841374
let link = path url [ inline @@ Text modname ] in
1385-
let page =
1386-
make_expansion_page modname `ModuleType url [ doc; expansion_doc ]
1387-
items
1388-
in
1375+
let page = make_expansion_page url [ doc; expansion_doc ] items in
13891376
(link, Some page, Some expansion_doc)
13901377
in
13911378
let summary =
@@ -1659,24 +1646,22 @@ module Make (Syntax : SYNTAX) = struct
16591646
List.map f t
16601647

16611648
let compilation_unit (t : Odoc_model.Lang.Compilation_unit.t) : Page.t =
1662-
let title = Paths.Identifier.name t.id in
16631649
let url = Url.Path.from_identifier t.id in
16641650
let unit_doc, items =
16651651
match t.content with
16661652
| Module sign -> signature sign
16671653
| Pack packed -> ([], pack packed)
16681654
in
1669-
make_expansion_page title `Module url [ unit_doc ] items
1655+
make_expansion_page url [ unit_doc ] items
16701656

16711657
let page (t : Odoc_model.Lang.Page.t) : Page.t =
1672-
let name =
1673-
match t.name.iv with `Page (_, name) | `LeafPage (_, name) -> name
1674-
in
1675-
let title = Odoc_model.Names.PageName.to_string name in
1658+
(*let name =
1659+
match t.name.iv with `Page (_, name) | `LeafPage (_, name) -> name
1660+
in*)
1661+
(*let title = Odoc_model.Names.PageName.to_string name in*)
16761662
let url = Url.Path.from_identifier t.name in
16771663
let preamble, items = Sectioning.docs t.content in
1678-
let kind = `Page in
1679-
{ Page.title; kind; preamble; items; url }
1664+
{ Page.preamble; items; url }
16801665
end
16811666

16821667
include Page

src/document/types.ml

Lines changed: 1 addition & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -157,21 +157,7 @@ end =
157157
Item
158158

159159
and Page : sig
160-
type kind =
161-
[ `Module
162-
| `Argument
163-
| `ModuleType
164-
| `ClassType
165-
| `Class
166-
| `Page ]
167-
168-
type t = {
169-
title : string;
170-
kind : kind;
171-
preamble : Item.t list;
172-
items : Item.t list;
173-
url : Url.Path.t;
174-
}
160+
type t = { preamble : Item.t list; items : Item.t list; url : Url.Path.t }
175161
end =
176162
Page
177163

src/document/url.ml

Lines changed: 30 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -98,7 +98,7 @@ module Path = struct
9898
| `Page
9999
| `LeafPage
100100
| `ModuleType
101-
| `Argument
101+
| `Parameter
102102
| `Class
103103
| `ClassType
104104
| `File ]
@@ -108,16 +108,16 @@ module Path = struct
108108
| `Module -> "module"
109109
| `LeafPage -> "leaf-page"
110110
| `ModuleType -> "module-type"
111-
| `Argument -> "argument"
111+
| `Parameter -> "argument"
112112
| `Class -> "class"
113113
| `ClassType -> "class-type"
114114
| `File -> "file"
115115

116116
let pp_kind fmt kind = Format.fprintf fmt "%s" (string_of_kind kind)
117117

118-
type t = { kind : kind; parent : t option; name : string }
118+
type t = { kind : kind; parent : t option; path_fragment : string }
119119

120-
let mk ?parent kind name = { kind; parent; name }
120+
let mk ?parent kind path_fragment = { kind; parent; path_fragment }
121121

122122
let rec from_identifier : source -> t =
123123
fun x ->
@@ -129,72 +129,73 @@ module Path = struct
129129
| None -> None
130130
in
131131
let kind = `Module in
132-
let page = ModuleName.to_string unit_name in
133-
mk ?parent kind page
132+
let path_fragment = ModuleName.to_string unit_name in
133+
mk ?parent kind path_fragment
134134
| { iv = `Page (parent, page_name); _ } ->
135135
let parent =
136136
match parent with
137137
| Some p -> Some (from_identifier (p :> source))
138138
| None -> None
139139
in
140140
let kind = `Page in
141-
let page = PageName.to_string page_name in
142-
mk ?parent kind page
141+
let path_fragment = PageName.to_string page_name in
142+
mk ?parent kind path_fragment
143143
| { iv = `LeafPage (parent, page_name); _ } ->
144144
let parent =
145145
match parent with
146146
| Some p -> Some (from_identifier (p :> source))
147147
| None -> None
148148
in
149149
let kind = `LeafPage in
150-
let page = PageName.to_string page_name in
151-
mk ?parent kind page
150+
let path_fragment = PageName.to_string page_name in
151+
mk ?parent kind path_fragment
152152
| { iv = `Module (parent, mod_name); _ } ->
153153
let parent = from_identifier (parent :> source) in
154154
let kind = `Module in
155-
let page = ModuleName.to_string mod_name in
156-
mk ~parent kind page
155+
let path_fragment = ModuleName.to_string mod_name in
156+
mk ~parent kind path_fragment
157157
| { iv = `Parameter (functor_id, arg_name); _ } as p ->
158158
let parent = from_identifier (functor_id :> source) in
159-
let kind = `Argument in
159+
let kind = `Parameter in
160160
let arg_num = functor_arg_pos p in
161-
let page =
161+
let path_fragment =
162162
Printf.sprintf "%d-%s" arg_num (ModuleName.to_string arg_name)
163163
in
164-
mk ~parent kind page
164+
mk ~parent kind path_fragment
165165
| { iv = `ModuleType (parent, modt_name); _ } ->
166166
let parent = from_identifier (parent :> source) in
167167
let kind = `ModuleType in
168-
let page = ModuleTypeName.to_string modt_name in
169-
mk ~parent kind page
168+
let path_fragment = ModuleTypeName.to_string modt_name in
169+
mk ~parent kind path_fragment
170170
| { iv = `Class (parent, name); _ } ->
171171
let parent = from_identifier (parent :> source) in
172172
let kind = `Class in
173-
let page = ClassName.to_string name in
174-
mk ~parent kind page
173+
let path_fragment = ClassName.to_string name in
174+
mk ~parent kind path_fragment
175175
| { iv = `ClassType (parent, name); _ } ->
176176
let parent = from_identifier (parent :> source) in
177177
let kind = `ClassType in
178-
let page = ClassTypeName.to_string name in
179-
mk ~parent kind page
178+
let path_fragment = ClassTypeName.to_string name in
179+
mk ~parent kind path_fragment
180180
| { iv = `Result p; _ } -> from_identifier (p :> source)
181181

182182
let from_identifier p =
183183
from_identifier
184184
(p : [< source_pv ] Odoc_model.Paths.Identifier.id :> source)
185185

186186
let to_list url =
187-
let rec loop acc { parent; name; kind } =
187+
let rec loop acc { parent; path_fragment; kind } =
188188
match parent with
189-
| None -> (kind, name) :: acc
190-
| Some p -> loop ((kind, name) :: acc) p
189+
| None -> (kind, path_fragment) :: acc
190+
| Some p -> loop ((kind, path_fragment) :: acc) p
191191
in
192192
loop [] url
193193

194194
let of_list l =
195195
let rec inner parent = function
196196
| [] -> parent
197-
| (kind, name) :: xs -> inner (Some { parent; name; kind }) xs
197+
| (kind, path_fragment) :: xs ->
198+
inner (Some { parent; path_fragment; kind }) xs
198199
in
199200
inner None l
200201

@@ -242,11 +243,13 @@ module Anchor = struct
242243

243244
type t = { page : Path.t; anchor : string; kind : kind }
244245

245-
let anchorify_path { Path.parent; name; kind } =
246+
let anchorify_path { Path.parent; path_fragment; kind } =
246247
match parent with
247248
| None -> assert false (* We got a root, should never happen *)
248249
| Some page ->
249-
let anchor = Printf.sprintf "%s-%s" (Path.string_of_kind kind) name in
250+
let anchor =
251+
Printf.sprintf "%s-%s" (Path.string_of_kind kind) path_fragment
252+
in
250253
{ page; anchor; kind = (kind :> kind) }
251254

252255
let add_suffix ~kind { page; anchor; _ } suffix =

src/document/url.mli

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ module Path : sig
1717
| `Page
1818
| `LeafPage
1919
| `ModuleType
20-
| `Argument
20+
| `Parameter
2121
| `Class
2222
| `ClassType
2323
| `File ]
@@ -26,7 +26,7 @@ module Path : sig
2626

2727
val string_of_kind : kind -> string
2828

29-
type t = { kind : kind; parent : t option; name : string }
29+
type t = { kind : kind; parent : t option; path_fragment : string }
3030

3131
type source_pv =
3232
[ Identifier.Page.t_pv

src/html/generator.ml

Lines changed: 15 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -389,8 +389,7 @@ module Page = struct
389389
Utils.list_concat_map ~f:(include_ ~config) subpages
390390

391391
and page ~config p : Odoc_document.Renderer.page list =
392-
let { Page.title; kind = _; preamble; items = i; url } =
393-
Doctree.Labels.disambiguate_page p
392+
let { Page.preamble; items = i; url } = Doctree.Labels.disambiguate_page p
394393
and subpages =
395394
(* Don't use the output of [disambiguate_page] to avoid unecessarily
396395
mangled labels. *)
@@ -404,7 +403,20 @@ module Page = struct
404403
items ~config ~resolve (Doctree.PageTitle.render_title p @ preamble)
405404
in
406405
let content = (items ~config ~resolve i :> any Html.elt list) in
407-
Tree.make ~config ~header ~toc ~url ~uses_katex title content subpages
406+
let name =
407+
match url.kind with
408+
| `Parameter ->
409+
let i =
410+
try String.index url.path_fragment '-'
411+
with Not_found ->
412+
print_endline url.path_fragment;
413+
0
414+
in
415+
String.sub url.path_fragment (i + 1)
416+
(String.length url.path_fragment - i - 1)
417+
| _ -> url.path_fragment
418+
in
419+
Tree.make ~config ~header ~toc ~url ~uses_katex name content subpages
408420
end
409421

410422
let render ~config page = Page.page ~config page

src/html/tree.ml

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,8 @@ let page_creator ~config ~url ~uses_katex name header toc content =
4343
| Types.Absolute uri -> uri ^ "/" ^ file
4444
| Relative uri ->
4545
let page =
46-
Odoc_document.Url.Path.{ kind = `File; parent = uri; name = file }
46+
Odoc_document.Url.Path.
47+
{ kind = `File; parent = uri; path_fragment = file }
4748
in
4849
Link.href ~config ~resolve:(Current url)
4950
(Odoc_document.Url.from_path page)
@@ -127,12 +128,12 @@ let page_creator ~config ~url ~uses_katex name header toc content =
127128
match parents with
128129
| [] -> [] (* Can't happen - Url.Path.to_list returns a non-empty list *)
129130
| [ _ ] -> [] (* No parents *)
130-
| [ x; { name = "index"; _ } ] ->
131+
| [ x; { path_fragment = "index"; _ } ] ->
131132
(* Special case leaf pages called 'index' with one parent. This is for files called
132133
index.mld that would otherwise clash with their parent. In particular,
133134
dune and odig both cause this situation right now. *)
134135
let up_url = "../index.html" in
135-
let parent_name = x.name in
136+
let parent_name = x.path_fragment in
136137
make_navigation ~up_url [ Html.txt parent_name ]
137138
| _ ->
138139
let up_url = href ~config (List.hd (List.tl (List.rev parents))) in
@@ -145,11 +146,11 @@ let page_creator ~config ~url ~uses_katex name header toc content =
145146
~f:(fun url' ->
146147
[
147148
[
148-
(if url = url' then Html.txt url.name
149+
(if url = url' then Html.txt url.path_fragment
149150
else
150151
Html.a
151152
~a:[ Html.a_href (href ~config url') ]
152-
[ Html.txt url'.name ]);
153+
[ Html.txt url'.path_fragment ]);
153154
];
154155
])
155156
|> List.flatten

0 commit comments

Comments
 (0)