From 1b1c5f032d8325537a5b8abe14d8954e93013a57 Mon Sep 17 00:00:00 2001 From: Rudi Grinberg Date: Mon, 2 Apr 2018 23:15:07 +0800 Subject: [PATCH 1/2] Test to show broken lazy loading of rules --- test/blackbox-tests/test-cases/odoc/jbuild | 5 +++++ test/blackbox-tests/test-cases/odoc/run.t | 4 ++++ 2 files changed, 9 insertions(+) diff --git a/test/blackbox-tests/test-cases/odoc/jbuild b/test/blackbox-tests/test-cases/odoc/jbuild index 79f74895..6e206671 100644 --- a/test/blackbox-tests/test-cases/odoc/jbuild +++ b/test/blackbox-tests/test-cases/odoc/jbuild @@ -16,3 +16,8 @@ ((name runtest) (deps (_doc/_html/index.html)) (action (echo "${read:_doc/_html/index.html}")))) + +(alias + ((name foo-mld) + (deps (_doc/_mlds/foo/index.mld)) + (action (echo "${read:_doc/_mlds/foo/index.mld}")))) diff --git a/test/blackbox-tests/test-cases/odoc/run.t b/test/blackbox-tests/test-cases/odoc/run.t index c7077588..bc11aef2 100644 --- a/test/blackbox-tests/test-cases/odoc/run.t +++ b/test/blackbox-tests/test-cases/odoc/run.t @@ -31,3 +31,7 @@ + + $ $JBUILDER build @foo-mld -j1 --display short --root . + No rule found for _doc/_mlds/foo/index.mld + [1] From ff211b18a7fe2358380770c93613e075d53d0ef5 Mon Sep 17 00:00:00 2001 From: Rudi Grinberg Date: Mon, 2 Apr 2018 23:15:56 +0800 Subject: [PATCH 2/2] Fix lazy loading of rules We must load package rules when a file in the _mld dir is requested --- src/odoc.ml | 24 ++++++++++++----------- test/blackbox-tests/test-cases/odoc/run.t | 6 ++++-- 2 files changed, 17 insertions(+), 13 deletions(-) diff --git a/src/odoc.ml b/src/odoc.ml index 9096a338..08f95004 100644 --- a/src/odoc.ml +++ b/src/odoc.ml @@ -501,17 +501,19 @@ module Gen (S : sig val sctx : SC.t end) = struct in SC.packages sctx |> Package.Name.Map.iter ~f:(fun (pkg : Package.t) -> - SC.on_load_dir sctx - ~dir:(Paths.odocs (Pkg pkg.name)) - ~f:(fun () -> - setup_package_odoc_rules - ~pkg - ~mlds:( - docs_by_package pkg - |> List.concat_map ~f:(fun (dir, doc) -> mlds_of_dir doc ~dir) - ) - ~entry_modules_by_lib:modules_by_lib - ); + let rules = lazy ( + setup_package_odoc_rules + ~pkg + ~mlds:( + docs_by_package pkg + |> List.concat_map ~f:(fun (dir, doc) -> mlds_of_dir doc ~dir) + ) + ~entry_modules_by_lib:modules_by_lib + ) in + List.iter [ Paths.odocs (Pkg pkg.name) + ; Paths.gen_mld_dir pkg ] + ~f:(fun dir -> + SC.on_load_dir sctx ~dir ~f:(fun () -> Lazy.force rules)); (* setup @doc to build the correct html for the package *) setup_package_aliases pkg; ); diff --git a/test/blackbox-tests/test-cases/odoc/run.t b/test/blackbox-tests/test-cases/odoc/run.t index bc11aef2..ef7ee3f0 100644 --- a/test/blackbox-tests/test-cases/odoc/run.t +++ b/test/blackbox-tests/test-cases/odoc/run.t @@ -33,5 +33,7 @@ $ $JBUILDER build @foo-mld -j1 --display short --root . - No rule found for _doc/_mlds/foo/index.mld - [1] + {1 Library foo} + This library exposes the following toplevel modules: {!modules:Foo}. + {1 Library foo.byte} + This library exposes the following toplevel modules: {!modules:Foo_byte}.