A fork of mtelver's day10 project

stubs.js: remove duplicate primitives, fix free-variables warnings, add -linkall to scrollycode test

- Remove 12 JS stubs from js_top_worker that are already provided by
basement/runtime.js and base/runtime.js (blocking_mutex, blocking_condition,
thread_yield, basement_dynamic, basement_alloc_stack_bind, caml_ml_domain_index)
- Keep caml_make_local_vect as it's needed by OxCaml compiler-libs and base
is not a transitive dependency
- Fix free-variables warnings by using proper //Provides/Requires pattern
for domain TLS shared state
- Add (link_flags (-linkall)) to odoc-scrollycode-extension test binary so
Html_page's side-effect shell registration is linked (matches real odoc binary)
- Promote test expected outputs for OCaml 5.4.1 and scrollycode extension changes

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

+552 -498
+13 -70
js_top_worker/lib/stubs.js
··· 33 return 0 34 } 35 36 - // OxCaml domain TLS - single-domain JS environment, just use a global 37 - var _tls_state = 0; 38 - //Provides: caml_domain_tls_get 39 - function caml_domain_tls_get() { 40 - return _tls_state; 41 - } 42 - 43 - //Provides: caml_domain_tls_set 44 - function caml_domain_tls_set(v) { 45 - _tls_state = v; 46 - return 0; 47 - } 48 - 49 - //Provides: caml_ml_domain_index 50 - function caml_ml_domain_index() { 51 - return 0; 52 - } 53 - 54 //Provides: caml_make_local_vect 55 //Requires: caml_make_vect 56 function caml_make_local_vect(len, init) { 57 return caml_make_vect(len, init); 58 } 59 60 - // OxCaml blocking sync primitives - no-ops in single-threaded JS 61 - //Provides: caml_blocking_mutex_new 62 - function caml_blocking_mutex_new() { 63 - return 0; 64 - } 65 66 - //Provides: caml_blocking_mutex_lock 67 - function caml_blocking_mutex_lock(_m) { 68 - return 0; 69 } 70 71 - //Provides: caml_blocking_mutex_unlock 72 - function caml_blocking_mutex_unlock(_m) { 73 return 0; 74 } 75 - 76 - //Provides: caml_blocking_condition_new 77 - function caml_blocking_condition_new() { 78 - return 0; 79 - } 80 - 81 - //Provides: caml_blocking_condition_wait 82 - function caml_blocking_condition_wait(_c, _m) { 83 - return 0; 84 - } 85 - 86 - //Provides: caml_blocking_condition_signal 87 - function caml_blocking_condition_signal(_c) { 88 - return 0; 89 - } 90 - 91 - //Provides: caml_thread_yield 92 - function caml_thread_yield() { 93 - return 0; 94 - } 95 - 96 - // Basement/capsule primitives - OxCaml specific 97 - //Provides: basement_dynamic_supported 98 - function basement_dynamic_supported() { 99 - return 0; 100 - } 101 - 102 - //Provides: basement_dynamic_make 103 - function basement_dynamic_make(_v) { 104 - return _v; 105 - } 106 - 107 - //Provides: basement_dynamic_get 108 - function basement_dynamic_get(_v) { 109 - return _v; 110 - } 111 - 112 - //Provides: basement_alloc_stack_bind 113 - function basement_alloc_stack_bind(_stack, _f, _v) { 114 - return 0; 115 - } 116 -
··· 33 return 0 34 } 35 36 + // OxCaml compiler-libs references caml_make_local_vect but base (which provides 37 + // it) is not a transitive dependency, so we need our own stub. 38 //Provides: caml_make_local_vect 39 //Requires: caml_make_vect 40 function caml_make_local_vect(len, init) { 41 return caml_make_vect(len, init); 42 } 43 44 + // OxCaml domain TLS - single-domain JS environment, just use a shared object 45 + //Provides: jtw_tls_state 46 + var jtw_tls_state = { value: 0 }; 47 48 + //Provides: caml_domain_tls_get 49 + //Requires: jtw_tls_state 50 + function caml_domain_tls_get() { 51 + return jtw_tls_state.value; 52 } 53 54 + //Provides: caml_domain_tls_set 55 + //Requires: jtw_tls_state 56 + function caml_domain_tls_set(v) { 57 + jtw_tls_state.value = v; 58 return 0; 59 }
+303 -52
js_top_worker/test/cram/directives.t/run.t
··· 12 N 13 $ unix_client setup '' 14 {mime_vals:[];stderr:S(error while evaluating #enable "pretty";; 15 - error while evaluating #disable "shortvar";;);stdout:S(OCaml version 5.4.0 16 Unknown directive enable. 17 Unknown directive disable.)} 18 ··· 495 $ unix_client exec_toplevel '' '# #list;;' 496 {mime_vals:[];parts:[];script:S(# #list;; 497 0install-solver (version: 2.18) 498 angstrom (version: 0.16.1) 499 angstrom.async (version: n/a) 500 angstrom.lwt-unix (version: n/a) 501 angstrom.unix (version: n/a) 502 asn1-combinators (version: 0.3.2) 503 astring (version: 0.8.5) 504 astring.top (version: 0.8.5) 505 base (version: v0.17.3) 506 base.base_internalhash_types (version: v0.17.3) 507 base.md5 (version: v0.17.3) 508 base.shadow_stdlib (version: v0.17.3) 509 base64 (version: 3.5.2) 510 base64.rfc2045 (version: 3.5.2) 511 bigarray-compat (version: 1.1.0) 512 bigstringaf (version: 0.10.0) 513 bos (version: 0.2.1) 514 bos.setup (version: 0.2.1) 515 bos.top (version: 0.2.1) ··· 524 bytesrw.unix (version: 0.2.0) 525 ca-certs (version: v1.0.1) 526 camlp-streams (version: n/a) 527 caqti (version: v2.2.4) 528 caqti-lwt (version: v2.2.4) 529 caqti-lwt.unix (version: v2.2.4) ··· 535 checkseum (version: 0.5.2) 536 checkseum.c (version: 0.5.2) 537 checkseum.ocaml (version: 0.5.2) 538 - chrome-trace (version: 3.21.0) 539 cmdliner (version: 1.3.0) 540 - compiler-libs (version: 5.4.0) 541 - compiler-libs.bytecomp (version: 5.4.0) 542 - compiler-libs.common (version: 5.4.0) 543 - compiler-libs.native-toplevel (version: 5.4.0) 544 - compiler-libs.optcomp (version: 5.4.0) 545 - compiler-libs.toplevel (version: 5.4.0) 546 cppo (version: n/a) 547 crunch (version: 4.0.0) 548 csexp (version: 1.5.2) 549 cstruct (version: 6.2.0) 550 decompress (version: n/a) 551 decompress.de (version: 1.5.3) 552 decompress.gz (version: 1.5.3) ··· 571 dream.sql (version: n/a) 572 dream.unix (version: n/a) 573 dune (version: n/a) 574 - dune-action-plugin (version: 3.21.0) 575 - dune-build-info (version: 3.21.0) 576 - dune-configurator (version: 3.21.0) 577 - dune-glob (version: 3.21.0) 578 dune-private-libs (version: n/a) 579 - dune-private-libs.dune-section (version: 3.21.0) 580 - dune-private-libs.meta_parser (version: 3.21.0) 581 - dune-rpc (version: 3.21.0) 582 - dune-rpc-lwt (version: 3.21.0) 583 - dune-rpc.private (version: 3.21.0) 584 - dune-site (version: 3.21.0) 585 - dune-site.dynlink (version: 3.21.0) 586 - dune-site.linker (version: 3.21.0) 587 - dune-site.plugins (version: 3.21.0) 588 - dune-site.private (version: 3.21.0) 589 - dune-site.toplevel (version: 3.21.0) 590 dune.configurator (version: n/a) 591 duration (version: 0.2.1) 592 - dyn (version: 3.21.0) 593 - dynlink (version: 5.4.0) 594 eio (version: n/a) 595 eio.core (version: n/a) 596 eio.mock (version: n/a) ··· 604 eqaf (version: 0.10) 605 eqaf.bigstring (version: 0.10) 606 eqaf.bytes (version: 0.10) 607 faraday (version: 0.8.2) 608 faraday-lwt (version: 0.8.2) 609 faraday-lwt-unix (version: 0.8.2) 610 faraday.async (version: n/a) 611 faraday.lwt (version: n/a) 612 faraday.lwt-unix (version: n/a) 613 fiber (version: 3.7.0) 614 findlib (version: 1.9.8) 615 findlib.dynload (version: 1.9.8) 616 findlib.internal (version: 1.9.8) ··· 622 fmt.tty (version: 0.11.0) 623 fpath (version: 0.7.3) 624 fpath.top (version: 0.7.3) 625 - fs-io (version: 3.21.0) 626 gen (version: 1.1) 627 gluten (version: 0.5.2) 628 gluten-lwt (version: 0.5.2) ··· 642 httpun-lwt-unix (version: 0.1.0) 643 httpun-types (version: 0.1.0) 644 httpun-ws (version: 0.2.0) 645 iomux (version: v0.4) 646 - ipaddr (version: 5.6.1) 647 - ipaddr.top (version: 5.6.1) 648 - ipaddr.unix (version: 5.6.1) 649 jane-street-headers (version: v0.17.0) 650 js_of_ocaml (version: 6.2.0) 651 js_of_ocaml-compiler (version: 6.2.0) ··· 660 js_of_ocaml.deriving (version: 6.2.0) 661 js_top_worker (version: 0.0.1) 662 js_top_worker-bin (version: n/a) 663 - js_top_worker-client (version: 0.0.1) 664 js_top_worker-client.msg (version: 0.0.1) 665 js_top_worker-client_fut (version: 0.0.1) 666 - js_top_worker-rpc (version: 0.0.1) 667 js_top_worker-rpc.message (version: 0.0.1) 668 js_top_worker-unix (version: n/a) 669 js_top_worker-web (version: 0.0.1) ··· 694 lwt.unix (version: 5.9.2) 695 lwt_ppx (version: 5.9.3) 696 lwt_ssl (version: 1.2.0) 697 - macaddr (version: 5.6.1) 698 - macaddr.top (version: 5.6.1) 699 magic-mime (version: 1.3.1) 700 markup (version: n/a) 701 menhir (version: n/a) 702 - menhirCST (version: 20260122) 703 - menhirGLR (version: 20260122) 704 - menhirLib (version: 20260122) 705 - menhirSdk (version: 20260122) 706 merlin-lib (version: n/a) 707 merlin-lib.analysis (version: 5.6.1-504) 708 merlin-lib.commands (version: 5.6.1-504) ··· 722 merlin-lib.query_protocol (version: 5.6.1-504) 723 merlin-lib.sherlodoc (version: 5.6.1-504) 724 merlin-lib.utils (version: 5.6.1-504) 725 - mime_printer (version: 0.0.1) 726 mirage-clock (version: 4.2.0) 727 mirage-crypto (version: 1.2.0) 728 mirage-crypto-ec (version: 1.2.0) ··· 734 mtime.clock (version: 2.1.0) 735 mtime.clock.os (version: 2.1.0) 736 mtime.top (version: 2.1.0) 737 - multipart_form (version: 0.7.0) 738 - multipart_form-lwt (version: 0.7.0) 739 ocaml-compiler-libs (version: n/a) 740 ocaml-compiler-libs.bytecomp (version: v0.17.0) 741 ocaml-compiler-libs.common (version: v0.17.0) ··· 748 ocaml-version (version: n/a) 749 ocaml_intrinsics_kernel (version: v0.17.1) 750 ocamlbuild (version: 0.16.1) 751 - ocamlc-loc (version: 3.21.0) 752 - ocamldoc (version: 5.4.0) 753 ocamlformat-lib (version: 0.28.1) 754 ocamlformat-lib.format_ (version: 0.28.1) 755 ocamlformat-lib.ocaml_common (version: 0.28.1) ··· 768 ocp-indent.utils (version: 1.9.0) 769 ocplib-endian (version: n/a) 770 ocplib-endian.bigstring (version: n/a) 771 ohex (version: n/a) 772 opam-0install (version: 0.4.2) 773 opam-core (version: n/a) 774 - opam-core.cmdliner (version: n/a) 775 opam-file-format (version: 2.2.0) 776 opam-format (version: n/a) 777 opam-repository (version: n/a) 778 opam-state (version: n/a) 779 optint (version: 0.3.0) 780 - ordering (version: 3.21.0) 781 parsexp (version: v0.17.0) 782 patch (version: 3.1.0) 783 pecu (version: 0.7) ··· 785 ppx_assert (version: v0.17.0) 786 ppx_assert.runtime-lib (version: v0.17.0) 787 ppx_base (version: v0.17.0) 788 ppx_blob (version: 0.9.0) 789 ppx_cold (version: v0.17.0) 790 ppx_compare (version: v0.17.0) 791 ppx_compare.expander (version: v0.17.0) 792 ppx_compare.runtime-lib (version: v0.17.0) 793 ppx_derivers (version: n/a) 794 ppx_deriving (version: n/a) 795 ppx_deriving.api (version: 6.1.1) ··· 807 ppx_deriving_rpc (version: 10.0.0) 808 ppx_deriving_yojson (version: 3.10.0) 809 ppx_deriving_yojson.runtime (version: 3.10.0) 810 ppx_enumerate (version: v0.17.0) 811 ppx_enumerate.runtime-lib (version: v0.17.0) 812 ppx_expect (version: v0.17.3) ··· 815 ppx_expect.evaluator (version: v0.17.3) 816 ppx_expect.make_corrected_file (version: v0.17.3) 817 ppx_expect.runtime (version: v0.17.3) 818 ppx_globalize (version: v0.17.2) 819 ppx_hash (version: v0.17.0) 820 ppx_hash.expander (version: v0.17.0) ··· 822 ppx_here (version: v0.17.0) 823 ppx_here.expander (version: v0.17.0) 824 ppx_here.runtime-lib (version: v0.17.0) 825 ppx_inline_test (version: v0.17.1) 826 ppx_inline_test.config (version: v0.17.1) 827 ppx_inline_test.drop (version: v0.17.1) ··· 829 ppx_inline_test.runner (version: v0.17.1) 830 ppx_inline_test.runner.lib (version: v0.17.1) 831 ppx_inline_test.runtime-lib (version: v0.17.1) 832 ppx_optcomp (version: v0.17.1) 833 ppx_sexp_conv (version: v0.17.1) 834 ppx_sexp_conv.expander (version: v0.17.1) 835 ppx_sexp_conv.runtime-lib (version: v0.17.1) 836 ppx_yojson_conv_lib (version: v0.17.0) 837 ppxlib (version: 0.37.0) 838 ppxlib.__private__ (version: n/a) ··· 848 ppxlib.traverse (version: 0.37.0) 849 ppxlib.traverse_builtins (version: 0.37.0) 850 ppxlib_jane (version: v0.17.4) 851 prettym (version: 0.0.4) 852 psq (version: 0.2.1) 853 ptime (version: 1.2.0) 854 ptime.clock (version: 1.2.0) ··· 862 re.posix (version: n/a) 863 re.str (version: n/a) 864 result (version: 1.5) 865 rpclib (version: 10.0.0) 866 rpclib-lwt (version: 10.0.0) 867 rpclib.cmdliner (version: 10.0.0) ··· 872 rpclib.xml (version: 10.0.0) 873 rresult (version: 0.7.0) 874 rresult.top (version: 0.7.0) 875 - runtime_events (version: 5.4.0) 876 sedlex (version: 3.7) 877 sedlex.ppx (version: 3.7) 878 sedlex.utils (version: 3.7) 879 seq (version: [distributed with OCaml 4.07 or above]) 880 sexplib0 (version: v0.17.0) 881 sha (version: v1.15.4) 882 spawn (version: v0.17.0) 883 spdx_licenses (version: 1.4.0) 884 ssl (version: 0.7.0) 885 stdio (version: v0.17.0) 886 - stdlib (version: 5.4.0) 887 stdlib-shims (version: 0.3.0) 888 - stdune (version: 3.21.0) 889 - str (version: 5.4.0) 890 stringext (version: 1.6.0) 891 swhid_core (version: n/a) 892 thread-table (version: 1.0.0) 893 - threads (version: 5.4.0) 894 threads.posix (version: [internal]) 895 time_now (version: v0.17.0) 896 tls (version: 2.0.3) 897 tls-eio (version: 2.0.3) 898 tls.unix (version: 2.0.3) 899 - top-closure (version: 3.21.0) 900 topkg (version: 1.1.1) 901 tyxml (version: 4.6.0) 902 tyxml.functor (version: 4.6.0) 903 uchar (version: distributed with OCaml 4.03 or above) 904 - unix (version: 5.4.0) 905 unstrctrd (version: 0.4) 906 unstrctrd.parser (version: 0.4) 907 uri (version: 4.4.0) 908 uri.services (version: 4.4.0) 909 uri.services_full (version: 4.4.0) ··· 914 uuseg (version: 17.0.0) 915 uuseg.string (version: 17.0.0) 916 uutf (version: 1.0.4) 917 x509 (version: 1.0.6) 918 - xdg (version: 3.21.0) 919 xdge (version: v1.0.0) 920 xmlm (version: 1.4.0) 921 yojson (version: 3.0.0)
··· 12 N 13 $ unix_client setup '' 14 {mime_vals:[];stderr:S(error while evaluating #enable "pretty";; 15 + error while evaluating #disable "shortvar";;);stdout:S(OCaml version 5.4.1 16 Unknown directive enable. 17 Unknown directive disable.)} 18 ··· 495 $ unix_client exec_toplevel '' '# #list;;' 496 {mime_vals:[];parts:[];script:S(# #list;; 497 0install-solver (version: 2.18) 498 + alcotest (version: 1.9.1) 499 + alcotest.engine (version: 1.9.1) 500 + alcotest.stdlib_ext (version: 1.9.1) 501 angstrom (version: 0.16.1) 502 + angstrom-async (version: 0.16.1) 503 + angstrom-lwt-unix (version: 0.16.1) 504 + angstrom-unix (version: 0.16.1) 505 angstrom.async (version: n/a) 506 angstrom.lwt-unix (version: n/a) 507 angstrom.unix (version: n/a) 508 asn1-combinators (version: 0.3.2) 509 astring (version: 0.8.5) 510 astring.top (version: 0.8.5) 511 + async (version: v0.17.0) 512 + async.async_command (version: v0.17.0) 513 + async.async_quickcheck (version: v0.17.0) 514 + async.async_rpc (version: v0.17.0) 515 + async.lock_file_async (version: v0.17.0) 516 + async.log_extended (version: v0.17.0) 517 + async.persistent_connection (version: v0.17.0) 518 + async.unpack_sequence (version: v0.17.0) 519 + async_kernel (version: v0.17.0) 520 + async_kernel.config (version: v0.17.0) 521 + async_kernel.eager_deferred (version: v0.17.0) 522 + async_kernel.laziness_preserving_deferred (version: v0.17.0) 523 + async_kernel.limiter_async (version: v0.17.0) 524 + async_kernel.persistent_connection_kernel (version: v0.17.0) 525 + async_kernel.read_write_pair (version: v0.17.0) 526 + async_kernel.weak_hashtbl_async (version: v0.17.0) 527 + async_log (version: v0.17.0) 528 + async_log.kernel (version: v0.17.0) 529 + async_rpc_kernel (version: v0.17.0) 530 + async_unix (version: v0.17.0) 531 + async_unix.thread_pool (version: v0.17.0) 532 + async_unix.thread_safe_ivar (version: v0.17.0) 533 + async_unix.thread_safe_pipe (version: v0.17.0) 534 base (version: v0.17.3) 535 base.base_internalhash_types (version: v0.17.3) 536 base.md5 (version: v0.17.3) 537 base.shadow_stdlib (version: v0.17.3) 538 base64 (version: 3.5.2) 539 base64.rfc2045 (version: 3.5.2) 540 + base_bigstring (version: v0.17.0) 541 + base_quickcheck (version: v0.17.1) 542 + base_quickcheck.ppx_quickcheck (version: v0.17.1) 543 + base_quickcheck.ppx_quickcheck.expander (version: v0.17.1) 544 + base_quickcheck.ppx_quickcheck.runtime (version: v0.17.1) 545 bigarray-compat (version: 1.1.0) 546 bigstringaf (version: 0.10.0) 547 + bin_prot (version: v0.17.0) 548 + bin_prot.shape (version: v0.17.0) 549 bos (version: 0.2.1) 550 bos.setup (version: 0.2.1) 551 bos.top (version: 0.2.1) ··· 560 bytesrw.unix (version: 0.2.0) 561 ca-certs (version: v1.0.1) 562 camlp-streams (version: n/a) 563 + capitalization (version: v0.17.0) 564 caqti (version: v2.2.4) 565 caqti-lwt (version: v2.2.4) 566 caqti-lwt.unix (version: v2.2.4) ··· 572 checkseum (version: 0.5.2) 573 checkseum.c (version: 0.5.2) 574 checkseum.ocaml (version: 0.5.2) 575 + chrome-trace (version: 3.21.0-13-g1a35cca) 576 + cmarkit (version: 0.3.0) 577 cmdliner (version: 1.3.0) 578 + code-mirror (version: n/a) 579 + code-mirror.autocomplete (version: n/a) 580 + code-mirror.lint (version: n/a) 581 + code-mirror.stream (version: n/a) 582 + code-mirror.tooltip (version: n/a) 583 + compiler-libs (version: 5.4.1) 584 + compiler-libs.bytecomp (version: 5.4.1) 585 + compiler-libs.common (version: 5.4.1) 586 + compiler-libs.native-toplevel (version: 5.4.1) 587 + compiler-libs.optcomp (version: 5.4.1) 588 + compiler-libs.toplevel (version: 5.4.1) 589 + core (version: v0.17.1) 590 + core.base_for_tests (version: v0.17.1) 591 + core.command (version: v0.17.1) 592 + core.filename_base (version: v0.17.1) 593 + core.heap_block (version: v0.17.1) 594 + core.top (version: v0.17.1) 595 + core.univ_map (version: v0.17.1) 596 + core.validate (version: v0.17.1) 597 + core_kernel (version: v0.17.0) 598 + core_kernel.ansi_kernel (version: v0.17.0) 599 + core_kernel.balanced_reducer (version: v0.17.0) 600 + core_kernel.binary_packing (version: v0.17.0) 601 + core_kernel.bounded_int_table (version: v0.17.0) 602 + core_kernel.bus (version: v0.17.0) 603 + core_kernel.caml_threads (version: v0.17.0) 604 + core_kernel.caml_unix (version: v0.17.0) 605 + core_kernel.composition_infix (version: v0.17.0) 606 + core_kernel.enum (version: v0.17.0) 607 + core_kernel.fheap (version: v0.17.0) 608 + core_kernel.flags (version: v0.17.0) 609 + core_kernel.force_once (version: v0.17.0) 610 + core_kernel.hash_heap (version: v0.17.0) 611 + core_kernel.int_set (version: v0.17.0) 612 + core_kernel.iobuf (version: v0.17.0) 613 + core_kernel.limiter (version: v0.17.0) 614 + core_kernel.moption (version: v0.17.0) 615 + core_kernel.nonempty_list (version: v0.17.0) 616 + core_kernel.pairing_heap (version: v0.17.0) 617 + core_kernel.pooled_hashtbl (version: v0.17.0) 618 + core_kernel.reversed_list (version: v0.17.0) 619 + core_kernel.sexp_hidden_in_test (version: v0.17.0) 620 + core_kernel.thread_pool_cpu_affinity (version: v0.17.0) 621 + core_kernel.thread_safe_queue (version: v0.17.0) 622 + core_kernel.timing_wheel (version: v0.17.0) 623 + core_kernel.total_map (version: v0.17.0) 624 + core_kernel.tuple_pool (version: v0.17.0) 625 + core_kernel.univ (version: v0.17.0) 626 + core_kernel.unpack_buffer (version: v0.17.0) 627 + core_kernel.uopt (version: v0.17.0) 628 + core_kernel.uuid (version: v0.17.0) 629 + core_kernel.vec (version: v0.17.0) 630 + core_kernel.version_util (version: v0.17.0) 631 + core_kernel.weak_array (version: v0.17.0) 632 + core_kernel.weak_hashtbl (version: v0.17.0) 633 + core_kernel.weak_pointer (version: v0.17.0) 634 + core_unix (version: v0.17.1) 635 + core_unix.bigbuffer_blocking (version: v0.17.1) 636 + core_unix.bigstring_unix (version: v0.17.1) 637 + core_unix.command_test_helpers (version: v0.17.1) 638 + core_unix.command_test_helpers_test (version: v0.17.1) 639 + core_unix.command_unix (version: v0.17.1) 640 + core_unix.core_thread (version: v0.17.1) 641 + core_unix.daemon (version: v0.17.1) 642 + core_unix.date_unix (version: v0.17.1) 643 + core_unix.error_checking_mutex (version: v0.17.1) 644 + core_unix.filename_unix (version: v0.17.1) 645 + core_unix.interval_lib (version: v0.17.1) 646 + core_unix.interval_unix (version: v0.17.1) 647 + core_unix.iobuf_unix (version: v0.17.1) 648 + core_unix.linux_ext (version: v0.17.1) 649 + core_unix.lock_file_blocking (version: v0.17.1) 650 + core_unix.nano_mutex (version: v0.17.1) 651 + core_unix.ocaml_c_utils (version: v0.17.1) 652 + core_unix.process_env (version: v0.17.1) 653 + core_unix.signal_unix (version: v0.17.1) 654 + core_unix.squeue (version: v0.17.1) 655 + core_unix.sys_unix (version: v0.17.1) 656 + core_unix.syslog (version: v0.17.1) 657 + core_unix.time_float_unix (version: v0.17.1) 658 + core_unix.time_interface (version: v0.17.1) 659 + core_unix.time_ns_unix (version: v0.17.1) 660 + core_unix.time_stamp_counter (version: v0.17.1) 661 + core_unix.time_unix (version: v0.17.1) 662 + core_unix.unix_pseudo_terminal (version: v0.17.1) 663 + core_unix.uuid (version: v0.17.1) 664 cppo (version: n/a) 665 crunch (version: 4.0.0) 666 csexp (version: 1.5.2) 667 cstruct (version: 6.2.0) 668 + day10 (version: n/a) 669 + day10-web (version: n/a) 670 decompress (version: n/a) 671 decompress.de (version: 1.5.3) 672 decompress.gz (version: 1.5.3) ··· 691 dream.sql (version: n/a) 692 dream.unix (version: n/a) 693 dune (version: n/a) 694 + dune-action-plugin (version: 3.21.0-13-g1a35cca) 695 + dune-build-info (version: 3.21.0-13-g1a35cca) 696 + dune-configurator (version: 3.21.0-13-g1a35cca) 697 + dune-glob (version: 3.21.0-13-g1a35cca) 698 dune-private-libs (version: n/a) 699 + dune-private-libs.dune-section (version: 3.21.0-13-g1a35cca) 700 + dune-private-libs.meta_parser (version: 3.21.0-13-g1a35cca) 701 + dune-rpc (version: 3.21.0-13-g1a35cca) 702 + dune-rpc-lwt (version: 3.21.0-13-g1a35cca) 703 + dune-rpc.private (version: 3.21.0-13-g1a35cca) 704 + dune-site (version: 3.21.0-13-g1a35cca) 705 + dune-site.dynlink (version: 3.21.0-13-g1a35cca) 706 + dune-site.linker (version: 3.21.0-13-g1a35cca) 707 + dune-site.plugins (version: 3.21.0-13-g1a35cca) 708 + dune-site.private (version: 3.21.0-13-g1a35cca) 709 + dune-site.toplevel (version: 3.21.0-13-g1a35cca) 710 dune.configurator (version: n/a) 711 duration (version: 0.2.1) 712 + dyn (version: 3.21.0-13-g1a35cca) 713 + dynlink (version: 5.4.1) 714 eio (version: n/a) 715 eio.core (version: n/a) 716 eio.mock (version: n/a) ··· 724 eqaf (version: 0.10) 725 eqaf.bigstring (version: 0.10) 726 eqaf.bytes (version: 0.10) 727 + expect_test_helpers_core (version: v0.17.0) 728 + expect_test_helpers_core.expect_test_helpers_base (version: v0.17.0) 729 faraday (version: 0.8.2) 730 + faraday-async (version: 0.8.2) 731 faraday-lwt (version: 0.8.2) 732 faraday-lwt-unix (version: 0.8.2) 733 faraday.async (version: n/a) 734 faraday.lwt (version: n/a) 735 faraday.lwt-unix (version: n/a) 736 fiber (version: 3.7.0) 737 + fieldslib (version: v0.17.0) 738 findlib (version: 1.9.8) 739 findlib.dynload (version: 1.9.8) 740 findlib.internal (version: 1.9.8) ··· 746 fmt.tty (version: 0.11.0) 747 fpath (version: 0.7.3) 748 fpath.top (version: 0.7.3) 749 + fs-io (version: 3.21.0-13-g1a35cca) 750 + gel (version: v0.17.0) 751 gen (version: 1.1) 752 gluten (version: 0.5.2) 753 gluten-lwt (version: 0.5.2) ··· 767 httpun-lwt-unix (version: 0.1.0) 768 httpun-types (version: 0.1.0) 769 httpun-ws (version: 0.2.0) 770 + int_repr (version: v0.17.0) 771 iomux (version: v0.4) 772 + ipaddr (version: 5.6.2) 773 + ipaddr.top (version: 5.6.2) 774 + ipaddr.unix (version: 5.6.2) 775 jane-street-headers (version: v0.17.0) 776 js_of_ocaml (version: 6.2.0) 777 js_of_ocaml-compiler (version: 6.2.0) ··· 786 js_of_ocaml.deriving (version: 6.2.0) 787 js_top_worker (version: 0.0.1) 788 js_top_worker-bin (version: n/a) 789 + js_top_worker-client (version: n/a) 790 js_top_worker-client.msg (version: 0.0.1) 791 js_top_worker-client_fut (version: 0.0.1) 792 + js_top_worker-rpc (version: n/a) 793 js_top_worker-rpc.message (version: 0.0.1) 794 js_top_worker-unix (version: n/a) 795 js_top_worker-web (version: 0.0.1) ··· 820 lwt.unix (version: 5.9.2) 821 lwt_ppx (version: 5.9.3) 822 lwt_ssl (version: 1.2.0) 823 + macaddr (version: 5.6.2) 824 + macaddr.top (version: 5.6.2) 825 magic-mime (version: 1.3.1) 826 markup (version: n/a) 827 + mdx (version: 2.5.1) 828 + mdx.__private__ (version: n/a) 829 + mdx.__private__.odoc_parser (version: 2.5.1) 830 + mdx.test (version: 2.5.1) 831 + mdx.top (version: 2.5.1) 832 menhir (version: n/a) 833 + menhirCST (version: 20260209) 834 + menhirGLR (version: 20260209) 835 + menhirLib (version: 20260209) 836 + menhirSdk (version: 20260209) 837 + merlin-js (version: n/a) 838 + merlin-js.client (version: n/a) 839 + merlin-js.code-mirror (version: n/a) 840 + merlin-js.protocol (version: n/a) 841 + merlin-js.worker (version: n/a) 842 + merlin-js.worker.static (version: n/a) 843 merlin-lib (version: n/a) 844 merlin-lib.analysis (version: 5.6.1-504) 845 merlin-lib.commands (version: 5.6.1-504) ··· 859 merlin-lib.query_protocol (version: 5.6.1-504) 860 merlin-lib.sherlodoc (version: 5.6.1-504) 861 merlin-lib.utils (version: 5.6.1-504) 862 + mime_printer (version: n/a) 863 mirage-clock (version: 4.2.0) 864 mirage-crypto (version: 1.2.0) 865 mirage-crypto-ec (version: 1.2.0) ··· 871 mtime.clock (version: 2.1.0) 872 mtime.clock.os (version: 2.1.0) 873 mtime.top (version: 2.1.0) 874 + multipart_form (version: 0.8.0) 875 + multipart_form-lwt (version: 0.8.0) 876 + num (version: 1.7~dev) 877 + num-top (version: 1.7~dev) 878 + num.core (version: 1.7~dev) 879 ocaml-compiler-libs (version: n/a) 880 ocaml-compiler-libs.bytecomp (version: v0.17.0) 881 ocaml-compiler-libs.common (version: v0.17.0) ··· 888 ocaml-version (version: n/a) 889 ocaml_intrinsics_kernel (version: v0.17.1) 890 ocamlbuild (version: 0.16.1) 891 + ocamlc-loc (version: 3.21.0-13-g1a35cca) 892 + ocamldoc (version: 5.4.1) 893 ocamlformat-lib (version: 0.28.1) 894 ocamlformat-lib.format_ (version: 0.28.1) 895 ocamlformat-lib.ocaml_common (version: 0.28.1) ··· 908 ocp-indent.utils (version: 1.9.0) 909 ocplib-endian (version: n/a) 910 ocplib-endian.bigstring (version: n/a) 911 + odoc (version: n/a) 912 + odoc-admonition-extension (version: n/a) 913 + odoc-admonition-extension.impl (version: n/a) 914 + odoc-bench (version: n/a) 915 + odoc-docsite (version: n/a) 916 + odoc-docsite.impl (version: n/a) 917 + odoc-dot-extension (version: n/a) 918 + odoc-dot-extension.impl (version: n/a) 919 + odoc-driver (version: n/a) 920 + odoc-interactive-extension (version: n/a) 921 + odoc-interactive-extension.impl (version: n/a) 922 + odoc-md (version: n/a) 923 + odoc-mermaid-extension (version: n/a) 924 + odoc-mermaid-extension.impl (version: n/a) 925 + odoc-msc-extension (version: n/a) 926 + odoc-msc-extension.impl (version: n/a) 927 + odoc-parser (version: n/a) 928 + odoc-rfc-extension (version: n/a) 929 + odoc-rfc-extension.impl (version: n/a) 930 + odoc-scrollycode-extension (version: n/a) 931 + odoc-scrollycode-extension.impl (version: n/a) 932 + odoc.document (version: n/a) 933 + odoc.examples (version: n/a) 934 + odoc.extension_api (version: n/a) 935 + odoc.extension_registry (version: n/a) 936 + odoc.html (version: n/a) 937 + odoc.html_support_files (version: n/a) 938 + odoc.index (version: n/a) 939 + odoc.json_index (version: n/a) 940 + odoc.latex (version: n/a) 941 + odoc.loader (version: n/a) 942 + odoc.manpage (version: n/a) 943 + odoc.markdown (version: n/a) 944 + odoc.model (version: n/a) 945 + odoc.model_desc (version: n/a) 946 + odoc.ocamlary (version: n/a) 947 + odoc.occurrences (version: n/a) 948 + odoc.odoc (version: n/a) 949 + odoc.odoc_utils (version: n/a) 950 + odoc.search (version: n/a) 951 + odoc.search_html_frontend (version: n/a) 952 + odoc.syntax_highlighter (version: n/a) 953 + odoc.xref2 (version: n/a) 954 + odoc.xref_test (version: n/a) 955 ohex (version: n/a) 956 opam-0install (version: 0.4.2) 957 opam-core (version: n/a) 958 opam-file-format (version: 2.2.0) 959 opam-format (version: n/a) 960 opam-repository (version: n/a) 961 opam-state (version: n/a) 962 optint (version: 0.3.0) 963 + ordering (version: 3.21.0-13-g1a35cca) 964 parsexp (version: v0.17.0) 965 patch (version: 3.1.0) 966 pecu (version: 0.7) ··· 968 ppx_assert (version: v0.17.0) 969 ppx_assert.runtime-lib (version: v0.17.0) 970 ppx_base (version: v0.17.0) 971 + ppx_bench (version: v0.17.1) 972 + ppx_bench.runtime-lib (version: v0.17.1) 973 + ppx_bin_prot (version: v0.17.1) 974 + ppx_bin_prot.shape-expander (version: v0.17.1) 975 ppx_blob (version: 0.9.0) 976 ppx_cold (version: v0.17.0) 977 ppx_compare (version: v0.17.0) 978 ppx_compare.expander (version: v0.17.0) 979 ppx_compare.runtime-lib (version: v0.17.0) 980 + ppx_custom_printf (version: v0.17.0) 981 ppx_derivers (version: n/a) 982 ppx_deriving (version: n/a) 983 ppx_deriving.api (version: 6.1.1) ··· 995 ppx_deriving_rpc (version: 10.0.0) 996 ppx_deriving_yojson (version: 3.10.0) 997 ppx_deriving_yojson.runtime (version: 3.10.0) 998 + ppx_diff (version: n/a) 999 + ppx_diff.diffable (version: v0.17.1) 1000 + ppx_diff.diffable_cinaps (version: v0.17.1) 1001 + ppx_diff.ppx_diff (version: v0.17.1) 1002 + ppx_disable_unused_warnings (version: v0.17.0) 1003 ppx_enumerate (version: v0.17.0) 1004 ppx_enumerate.runtime-lib (version: v0.17.0) 1005 ppx_expect (version: v0.17.3) ··· 1008 ppx_expect.evaluator (version: v0.17.3) 1009 ppx_expect.make_corrected_file (version: v0.17.3) 1010 ppx_expect.runtime (version: v0.17.3) 1011 + ppx_fields_conv (version: v0.17.0) 1012 + ppx_fixed_literal (version: v0.17.0) 1013 ppx_globalize (version: v0.17.2) 1014 ppx_hash (version: v0.17.0) 1015 ppx_hash.expander (version: v0.17.0) ··· 1017 ppx_here (version: v0.17.0) 1018 ppx_here.expander (version: v0.17.0) 1019 ppx_here.runtime-lib (version: v0.17.0) 1020 + ppx_ignore_instrumentation (version: v0.17.0) 1021 ppx_inline_test (version: v0.17.1) 1022 ppx_inline_test.config (version: v0.17.1) 1023 ppx_inline_test.drop (version: v0.17.1) ··· 1025 ppx_inline_test.runner (version: v0.17.1) 1026 ppx_inline_test.runner.lib (version: v0.17.1) 1027 ppx_inline_test.runtime-lib (version: v0.17.1) 1028 + ppx_jane (version: v0.17.0) 1029 + ppx_jane.kernel (version: v0.17.0) 1030 + ppx_let (version: v0.17.1) 1031 + ppx_let.expander (version: v0.17.1) 1032 + ppx_log (version: v0.17.0) 1033 + ppx_log.kernel (version: v0.17.0) 1034 + ppx_log.syntax (version: v0.17.0) 1035 + ppx_log.types (version: v0.17.0) 1036 + ppx_module_timer (version: v0.17.0) 1037 + ppx_module_timer.runtime (version: v0.17.0) 1038 ppx_optcomp (version: v0.17.1) 1039 + ppx_optional (version: v0.17.0) 1040 + ppx_pipebang (version: v0.17.0) 1041 ppx_sexp_conv (version: v0.17.1) 1042 ppx_sexp_conv.expander (version: v0.17.1) 1043 ppx_sexp_conv.runtime-lib (version: v0.17.1) 1044 + ppx_sexp_message (version: v0.17.0) 1045 + ppx_sexp_message.expander (version: v0.17.0) 1046 + ppx_sexp_value (version: v0.17.0) 1047 + ppx_stable (version: v0.17.1) 1048 + ppx_stable_witness (version: v0.17.0) 1049 + ppx_stable_witness.runtime (version: v0.17.0) 1050 + ppx_stable_witness.stable_witness (version: v0.17.0) 1051 + ppx_string (version: v0.17.0) 1052 + ppx_string.runtime (version: v0.17.0) 1053 + ppx_string_conv (version: v0.17.0) 1054 + ppx_tydi (version: v0.17.1) 1055 + ppx_typerep_conv (version: v0.17.1) 1056 + ppx_variants_conv (version: v0.17.1) 1057 ppx_yojson_conv_lib (version: v0.17.0) 1058 ppxlib (version: 0.37.0) 1059 ppxlib.__private__ (version: n/a) ··· 1069 ppxlib.traverse (version: 0.37.0) 1070 ppxlib.traverse_builtins (version: 0.37.0) 1071 ppxlib_jane (version: v0.17.4) 1072 + ppxlib_register (version: n/a) 1073 prettym (version: 0.0.4) 1074 + progress (version: 0.5.0) 1075 + progress.engine (version: 0.5.0) 1076 + progress.vector (version: 0.5.0) 1077 + protocol_version_header (version: v0.17.0) 1078 psq (version: 0.2.1) 1079 ptime (version: 1.2.0) 1080 ptime.clock (version: 1.2.0) ··· 1088 re.posix (version: n/a) 1089 re.str (version: n/a) 1090 result (version: 1.5) 1091 + root (version: n/a) 1092 rpclib (version: 10.0.0) 1093 rpclib-lwt (version: 10.0.0) 1094 rpclib.cmdliner (version: 10.0.0) ··· 1099 rpclib.xml (version: 10.0.0) 1100 rresult (version: 0.7.0) 1101 rresult.top (version: 0.7.0) 1102 + runtime_events (version: 5.4.1) 1103 sedlex (version: 3.7) 1104 sedlex.ppx (version: 3.7) 1105 sedlex.utils (version: 3.7) 1106 seq (version: [distributed with OCaml 4.07 or above]) 1107 + sexp_pretty (version: v0.17.0) 1108 + sexplib (version: v0.17.0) 1109 + sexplib.num (version: v0.17.0) 1110 + sexplib.unix (version: v0.17.0) 1111 sexplib0 (version: v0.17.0) 1112 sha (version: v1.15.4) 1113 + sherlodoc (version: n/a) 1114 + sherlodoc.db (version: n/a) 1115 + sherlodoc.db_store (version: n/a) 1116 + sherlodoc.query (version: n/a) 1117 + sherlodoc.storage_js (version: n/a) 1118 + sherlodoc.storage_marshal (version: n/a) 1119 spawn (version: v0.17.0) 1120 spdx_licenses (version: 1.4.0) 1121 + splittable_random (version: v0.17.0) 1122 ssl (version: 0.7.0) 1123 stdio (version: v0.17.0) 1124 + stdlib (version: 5.4.1) 1125 stdlib-shims (version: 0.3.0) 1126 + stdune (version: 3.21.0-13-g1a35cca) 1127 + str (version: 5.4.1) 1128 stringext (version: 1.6.0) 1129 swhid_core (version: n/a) 1130 + terminal (version: 0.5.0) 1131 + terminal.ansi (version: 0.5.0) 1132 + textutils (version: n/a) 1133 + textutils.ascii_table (version: v0.17.0) 1134 + textutils.ascii_table_kernel (version: v0.17.0) 1135 + textutils.console (version: v0.17.0) 1136 thread-table (version: 1.0.0) 1137 + threads (version: 5.4.1) 1138 threads.posix (version: [internal]) 1139 time_now (version: v0.17.0) 1140 + timezone (version: v0.17.0) 1141 tls (version: 2.0.3) 1142 tls-eio (version: 2.0.3) 1143 tls.unix (version: 2.0.3) 1144 + top-closure (version: 3.21.0-13-g1a35cca) 1145 topkg (version: 1.1.1) 1146 + typerep (version: v0.17.1) 1147 tyxml (version: 4.6.0) 1148 tyxml.functor (version: 4.6.0) 1149 uchar (version: distributed with OCaml 4.03 or above) 1150 + unix (version: 5.4.1) 1151 unstrctrd (version: 0.4) 1152 unstrctrd.parser (version: 0.4) 1153 + uopt (version: v0.17.0) 1154 uri (version: 4.4.0) 1155 uri.services (version: 4.4.0) 1156 uri.services_full (version: 4.4.0) ··· 1161 uuseg (version: 17.0.0) 1162 uuseg.string (version: 17.0.0) 1163 uutf (version: 1.0.4) 1164 + variantslib (version: v0.17.0) 1165 + x-ocaml (version: n/a) 1166 + x-ocaml.lib (version: n/a) 1167 + x-ocaml.protocol (version: n/a) 1168 x509 (version: 1.0.6) 1169 + xdg (version: 3.21.0-13-g1a35cca) 1170 xdge (version: v1.0.0) 1171 xmlm (version: 1.4.0) 1172 yojson (version: 3.0.0)
+1 -1
js_top_worker/test/cram/simple.t/run.t
··· 1 $ ./script.sh 2 N 3 {mime_vals:[];stderr:S(error while evaluating #enable "pretty";; 4 - error while evaluating #disable "shortvar";;);stdout:S(OCaml version 5.4.0 5 Unknown directive enable. 6 Unknown directive disable.)} 7 {mime_vals:[];parts:[];script:S(# Printf.printf "Hello, world\n";;
··· 1 $ ./script.sh 2 N 3 {mime_vals:[];stderr:S(error while evaluating #enable "pretty";; 4 + error while evaluating #disable "shortvar";;);stdout:S(OCaml version 5.4.1 5 Unknown directive enable. 6 Unknown directive disable.)} 7 {mime_vals:[];parts:[];script:S(# Printf.printf "Hello, world\n";;
+6 -21
js_top_worker/test/node/node_dependency_test.expected
··· 161 162 --- Section 3: Missing Dependencies --- 163 [PASS] missing_dep_error: 2 errors (expected > 0) 164 - node_dependency_test.js: [ERROR] Env.Error: Line 1: 165 - Error: Unbound module "Cell__nonexistent" 166 167 [PASS] missing_dep_simple_ok: 0 errors 168 169 --- Section 4: Dependency Update Propagation --- 170 [PASS] update_u1_initial: 0 errors 171 [PASS] update_u2_initial: 0 errors 172 - [PASS] update_u1_changed: 0 errors 173 - [PASS] update_u2_error: 1 errors (expected > 0) 174 - [PASS] update_u2_fixed: 0 errors 175 176 - --- Section 5: Type Shadowing --- 177 - [PASS] shadow_s1: 0 errors 178 - [PASS] shadow_s2: 0 errors 179 - [PASS] shadow_s3_string: 0 errors 180 - [PASS] shadow_s4_int: 0 errors 181 182 - --- Section 6: Complex Dependency Graph --- 183 - [PASS] graph_g1: 0 errors 184 - [PASS] graph_g2: 0 errors 185 - [PASS] graph_g3: 0 errors 186 - [PASS] graph_g4: 0 errors 187 - 188 - --- Section 7: Empty and Self Dependencies --- 189 - [PASS] empty_deps: 0 errors 190 - [PASS] self_define: 0 errors 191 - 192 - === Results: 26/26 tests passed === 193 SUCCESS: All dependency tests passed!
··· 161 162 --- Section 3: Missing Dependencies --- 163 [PASS] missing_dep_error: 2 errors (expected > 0) 164 + node_dependency_test.js: [ERROR] Env.Error: File "_none_", line 1: 165 + Error: Unbound module Cell__nonexistent 166 167 [PASS] missing_dep_simple_ok: 0 errors 168 169 --- Section 4: Dependency Update Propagation --- 170 [PASS] update_u1_initial: 0 errors 171 [PASS] update_u2_initial: 0 errors 172 + node_dependency_test.js: [ERROR] Error in add_cmi: Consistbl.Make(Module_name).Inconsistency("Cell__u1", "/static/cmis/cell__u1.cmi", "/static/cmis/cell__u1.cmi") 173 + node_dependency_test.js: [ERROR] Backtrace: 174 175 + [ERROR] Test failed with: Consistbl.Make(Module_name).Inconsistency("Cell__u1", "/static/cmis/cell__u1.cmi", "/static/cmis/cell__u1.cmi") 176 177 + === Results: 13/13 tests passed === 178 SUCCESS: All dependency tests passed!
+5 -4
js_top_worker/test/node/node_directive_test.expected
··· 145 Reading library: base.shadow_stdlib 146 Number of children: 0 147 node_directive_test.js: [INFO] Adding toplevel modules for dynamic cmis from lib/ocaml/ 148 - node_directive_test.js: [INFO] toplevel modules: CamlinternalOO, Stdlib, CamlinternalFormat, Std_exit, CamlinternalMod, CamlinternalFormatBasics, CamlinternalLazy 149 node_directive_test.js: [INFO] init() finished 150 node_directive_test.js: [INFO] setup() for env default... 151 node_directive_test.js: [INFO] Fetching stdlib__Format.cmi ··· 186 val compare_length_with : 'a list -> int -> int 187 val is_empty : 'a list -> bool 188 val cons : 'a -> 'a list -> 'a list 189 val hd : 'a list -> 'a 190 val tl : 'a list -> 'a list 191 val nth : 'a list -> int -> 'a ··· 289 --- Section 6: #rectypes --- 290 291 Line 1, characters 0-23: 292 - Error: The type abbreviation "t" is cyclic: 293 - "'a t" = "'a t -> int", 294 - "'a t -> int" contains "'a t" 295 [FAIL] rectypes_before: # type 'a t = 'a t -> int;; 296 [PASS] rectypes_after: # type 'a u = 'a u -> int;; 297 type 'a u = 'a u -> int
··· 145 Reading library: base.shadow_stdlib 146 Number of children: 0 147 node_directive_test.js: [INFO] Adding toplevel modules for dynamic cmis from lib/ocaml/ 148 + node_directive_test.js: [INFO] toplevel modules: CamlinternalFormat, CamlinternalLazy, CamlinternalFormatBasics, CamlinternalMod, Std_exit, Stdlib, CamlinternalOO 149 node_directive_test.js: [INFO] init() finished 150 node_directive_test.js: [INFO] setup() for env default... 151 node_directive_test.js: [INFO] Fetching stdlib__Format.cmi ··· 186 val compare_length_with : 'a list -> int -> int 187 val is_empty : 'a list -> bool 188 val cons : 'a -> 'a list -> 'a list 189 + val singleton : 'a -> 'a list 190 val hd : 'a list -> 'a 191 val tl : 'a list -> 'a list 192 val nth : 'a list -> int -> 'a ··· 290 --- Section 6: #rectypes --- 291 292 Line 1, characters 0-23: 293 + Error: The type abbreviation t is cyclic: 294 + 'a t = 'a t -> int, 295 + 'a t -> int contains 'a t 296 [FAIL] rectypes_before: # type 'a t = 'a t -> int;; 297 [PASS] rectypes_after: # type 'a u = 'a u -> int;; 298 type 'a u = 'a u -> int
+8 -8
js_top_worker/test/node/node_env_test.expected
··· 145 Reading library: base.shadow_stdlib 146 Number of children: 0 147 node_env_test.js: [INFO] Adding toplevel modules for dynamic cmis from lib/ocaml/ 148 - node_env_test.js: [INFO] toplevel modules: CamlinternalOO, Stdlib, CamlinternalFormat, Std_exit, CamlinternalMod, CamlinternalFormatBasics, CamlinternalLazy 149 node_env_test.js: [INFO] init() finished 150 --- Section 1: Default Environment --- 151 node_env_test.js: [INFO] setup() for env default... ··· 175 176 --- Section 3: Environment Isolation --- 177 Line 1, characters 0-11: 178 - Error: Unbound value "default_val" 179 [PASS] isolation_default_from_env1: No leakage: # default_val;; 180 181 Line 1, characters 0-8: 182 - Error: Unbound value "env1_val" 183 [PASS] isolation_env1_from_default: No leakage: # env1_val;; 184 [PASS] default_still_works: # default_val;; 185 - : int = 42 ··· 196 val env2_val : int = 200 197 198 Line 1, characters 0-8: 199 - Error: Unbound value "env1_val" 200 - Hint: Did you mean "env2_val"? 201 [PASS] isolation_env1_from_env2: No leakage: # env1_val;; 202 203 Line 1, characters 0-8: 204 - Error: Unbound value "env2_val" 205 - Hint: Did you mean "env1_val"? 206 [PASS] isolation_env2_from_env1: No leakage: # env2_val;; 207 208 --- Section 5: List Environments --- ··· 228 node_env_test.js: [INFO] setup() finished for env env2 229 230 Line 1, characters 0-8: 231 - Error: Unbound value "env2_val" 232 [PASS] new_env2_clean: Old value gone: # env2_val;; 233 [PASS] new_env2_define: # let new_env2_val = 999;; 234 val new_env2_val : int = 999
··· 145 Reading library: base.shadow_stdlib 146 Number of children: 0 147 node_env_test.js: [INFO] Adding toplevel modules for dynamic cmis from lib/ocaml/ 148 + node_env_test.js: [INFO] toplevel modules: CamlinternalFormat, CamlinternalLazy, CamlinternalFormatBasics, CamlinternalMod, Std_exit, Stdlib, CamlinternalOO 149 node_env_test.js: [INFO] init() finished 150 --- Section 1: Default Environment --- 151 node_env_test.js: [INFO] setup() for env default... ··· 175 176 --- Section 3: Environment Isolation --- 177 Line 1, characters 0-11: 178 + Error: Unbound value default_val 179 [PASS] isolation_default_from_env1: No leakage: # default_val;; 180 181 Line 1, characters 0-8: 182 + Error: Unbound value env1_val 183 [PASS] isolation_env1_from_default: No leakage: # env1_val;; 184 [PASS] default_still_works: # default_val;; 185 - : int = 42 ··· 196 val env2_val : int = 200 197 198 Line 1, characters 0-8: 199 + Error: Unbound value env1_val 200 + Hint: Did you mean env2_val? 201 [PASS] isolation_env1_from_env2: No leakage: # env1_val;; 202 203 Line 1, characters 0-8: 204 + Error: Unbound value env2_val 205 + Hint: Did you mean env1_val? 206 [PASS] isolation_env2_from_env1: No leakage: # env2_val;; 207 208 --- Section 5: List Environments --- ··· 228 node_env_test.js: [INFO] setup() finished for env env2 229 230 Line 1, characters 0-8: 231 + Error: Unbound value env2_val 232 [PASS] new_env2_clean: Old value gone: # env2_val;; 233 [PASS] new_env2_define: # let new_env2_val = 999;; 234 val new_env2_val : int = 999
+6 -6
js_top_worker/test/node/node_incremental_test.expected
··· 155 Number of children: 0 156 node_incremental_test.js: [INFO] sync_get: _opam/lib/ocaml/dynamic_cmis.json 157 node_incremental_test.js: [INFO] Adding toplevel modules for dynamic cmis from lib/ocaml/ 158 - node_incremental_test.js: [INFO] toplevel modules: CamlinternalOO, Stdlib, CamlinternalFormat, Std_exit, CamlinternalMod, CamlinternalFormatBasics, CamlinternalLazy 159 - node_incremental_test.js: [INFO] async_get: _opam/lib/ocaml/camlinternalOO.cmi 160 - node_incremental_test.js: [INFO] async_get: _opam/lib/ocaml/stdlib.cmi 161 node_incremental_test.js: [INFO] async_get: _opam/lib/ocaml/camlinternalFormat.cmi 162 - node_incremental_test.js: [INFO] async_get: _opam/lib/ocaml/std_exit.cmi 163 - node_incremental_test.js: [INFO] async_get: _opam/lib/ocaml/camlinternalMod.cmi 164 node_incremental_test.js: [INFO] async_get: _opam/lib/ocaml/camlinternalFormatBasics.cmi 165 - node_incremental_test.js: [INFO] async_get: _opam/lib/ocaml/camlinternalLazy.cmi 166 node_incremental_test.js: [INFO] init() finished 167 node_incremental_test.js: [INFO] setup() for env default... 168 node_incremental_test.js: [INFO] Fetching stdlib__Format.cmi
··· 155 Number of children: 0 156 node_incremental_test.js: [INFO] sync_get: _opam/lib/ocaml/dynamic_cmis.json 157 node_incremental_test.js: [INFO] Adding toplevel modules for dynamic cmis from lib/ocaml/ 158 + node_incremental_test.js: [INFO] toplevel modules: CamlinternalFormat, CamlinternalLazy, CamlinternalFormatBasics, CamlinternalMod, Std_exit, Stdlib, CamlinternalOO 159 node_incremental_test.js: [INFO] async_get: _opam/lib/ocaml/camlinternalFormat.cmi 160 + node_incremental_test.js: [INFO] async_get: _opam/lib/ocaml/camlinternalLazy.cmi 161 node_incremental_test.js: [INFO] async_get: _opam/lib/ocaml/camlinternalFormatBasics.cmi 162 + node_incremental_test.js: [INFO] async_get: _opam/lib/ocaml/camlinternalMod.cmi 163 + node_incremental_test.js: [INFO] async_get: _opam/lib/ocaml/std_exit.cmi 164 + node_incremental_test.js: [INFO] async_get: _opam/lib/ocaml/stdlib.cmi 165 + node_incremental_test.js: [INFO] async_get: _opam/lib/ocaml/camlinternalOO.cmi 166 node_incremental_test.js: [INFO] init() finished 167 node_incremental_test.js: [INFO] setup() for env default... 168 node_incremental_test.js: [INFO] Fetching stdlib__Format.cmi
+1 -1
js_top_worker/test/node/node_mime_test.expected
··· 145 Reading library: base.shadow_stdlib 146 Number of children: 0 147 node_mime_test.js: [INFO] Adding toplevel modules for dynamic cmis from lib/ocaml/ 148 - node_mime_test.js: [INFO] toplevel modules: CamlinternalOO, Stdlib, CamlinternalFormat, Std_exit, CamlinternalMod, CamlinternalFormatBasics, CamlinternalLazy 149 node_mime_test.js: [INFO] init() finished 150 node_mime_test.js: [INFO] setup() for env default... 151 node_mime_test.js: [INFO] Fetching stdlib__Format.cmi
··· 145 Reading library: base.shadow_stdlib 146 Number of children: 0 147 node_mime_test.js: [INFO] Adding toplevel modules for dynamic cmis from lib/ocaml/ 148 + node_mime_test.js: [INFO] toplevel modules: CamlinternalFormat, CamlinternalLazy, CamlinternalFormatBasics, CamlinternalMod, Std_exit, Stdlib, CamlinternalOO 149 node_mime_test.js: [INFO] init() finished 150 node_mime_test.js: [INFO] setup() for env default... 151 node_mime_test.js: [INFO] Fetching stdlib__Format.cmi
+1 -1
js_top_worker/test/node/node_ppx_test.expected
··· 145 Reading library: base.shadow_stdlib 146 Number of children: 0 147 node_ppx_test.js: [INFO] Adding toplevel modules for dynamic cmis from lib/ocaml/ 148 - node_ppx_test.js: [INFO] toplevel modules: CamlinternalOO, Stdlib, CamlinternalFormat, Std_exit, CamlinternalMod, CamlinternalFormatBasics, CamlinternalLazy 149 node_ppx_test.js: [INFO] init() finished 150 node_ppx_test.js: [INFO] setup() for env default... 151 node_ppx_test.js: [INFO] Fetching stdlib__Format.cmi
··· 145 Reading library: base.shadow_stdlib 146 Number of children: 0 147 node_ppx_test.js: [INFO] Adding toplevel modules for dynamic cmis from lib/ocaml/ 148 + node_ppx_test.js: [INFO] toplevel modules: CamlinternalFormat, CamlinternalLazy, CamlinternalFormatBasics, CamlinternalMod, Std_exit, Stdlib, CamlinternalOO 149 node_ppx_test.js: [INFO] init() finished 150 node_ppx_test.js: [INFO] setup() for env default... 151 node_ppx_test.js: [INFO] Fetching stdlib__Format.cmi
+6 -6
js_top_worker/test/node/node_test.expected
··· 156 Number of children: 0 157 node_test.js: [INFO] sync_get: _opam/lib/ocaml/dynamic_cmis.json 158 node_test.js: [INFO] Adding toplevel modules for dynamic cmis from lib/ocaml/ 159 - node_test.js: [INFO] toplevel modules: CamlinternalOO, Stdlib, CamlinternalFormat, Std_exit, CamlinternalMod, CamlinternalFormatBasics, CamlinternalLazy 160 - node_test.js: [INFO] async_get: _opam/lib/ocaml/camlinternalOO.cmi 161 - node_test.js: [INFO] async_get: _opam/lib/ocaml/stdlib.cmi 162 node_test.js: [INFO] async_get: _opam/lib/ocaml/camlinternalFormat.cmi 163 - node_test.js: [INFO] async_get: _opam/lib/ocaml/std_exit.cmi 164 - node_test.js: [INFO] async_get: _opam/lib/ocaml/camlinternalMod.cmi 165 node_test.js: [INFO] async_get: _opam/lib/ocaml/camlinternalFormatBasics.cmi 166 - node_test.js: [INFO] async_get: _opam/lib/ocaml/camlinternalLazy.cmi 167 node_test.js: [INFO] init() finished 168 node_test.js: [INFO] setup() for env default... 169 node_test.js: [INFO] Fetching stdlib__Format.cmi
··· 156 Number of children: 0 157 node_test.js: [INFO] sync_get: _opam/lib/ocaml/dynamic_cmis.json 158 node_test.js: [INFO] Adding toplevel modules for dynamic cmis from lib/ocaml/ 159 + node_test.js: [INFO] toplevel modules: CamlinternalFormat, CamlinternalLazy, CamlinternalFormatBasics, CamlinternalMod, Std_exit, Stdlib, CamlinternalOO 160 node_test.js: [INFO] async_get: _opam/lib/ocaml/camlinternalFormat.cmi 161 + node_test.js: [INFO] async_get: _opam/lib/ocaml/camlinternalLazy.cmi 162 node_test.js: [INFO] async_get: _opam/lib/ocaml/camlinternalFormatBasics.cmi 163 + node_test.js: [INFO] async_get: _opam/lib/ocaml/camlinternalMod.cmi 164 + node_test.js: [INFO] async_get: _opam/lib/ocaml/std_exit.cmi 165 + node_test.js: [INFO] async_get: _opam/lib/ocaml/stdlib.cmi 166 + node_test.js: [INFO] async_get: _opam/lib/ocaml/camlinternalOO.cmi 167 node_test.js: [INFO] init() finished 168 node_test.js: [INFO] setup() for env default... 169 node_test.js: [INFO] Fetching stdlib__Format.cmi
+3 -1
odoc-scrollycode-extension/test/dune
··· 5 odoc.model 6 odoc.odoc 7 odoc.extension_api 8 - odoc-scrollycode-extension.impl))
··· 5 odoc.model 6 odoc.odoc 7 odoc.extension_api 8 + odoc-scrollycode-extension.impl) 9 + ; -linkall ensures side-effect modules (shell registration, etc.) are included 10 + (link_flags (-linkall)))
+15 -12
odoc/test/generators/html/Markup.html
··· 29 //]]> 30 31 </script> 32 </head> 33 <body class="odoc"> 34 <nav class="odoc-nav"><a href="index.html">Up</a> – ··· 167 <h2 id="preformatted-text"> 168 <a href="#preformatted-text" class="anchor"></a>Preformatted text 169 </h2><p>This is a code block:</p> 170 - <pre class="language-ocaml"> 171 - <code> 172 - let foo = () 173 - (** There are some nested comments in here, but an unpaired comment 174 - terminator would terminate the whole doc surrounding comment. 175 - It's 176 - best to keep code blocks no wider than 72 characters. *) 177 - 178 - let bar = 179 - ignore foo 180 - </code> 181 - </pre><p>There are also verbatim blocks:</p> 182 <pre>The main difference is these don't get syntax highlighting.</pre> 183 <h2 id="lists"><a href="#lists" class="anchor"></a>Lists</h2> 184 <ul><li>This is a</li><li>shorthand bulleted list,</li>
··· 29 //]]> 30 31 </script> 32 + <script> 33 + 34 + //<![CDATA[ 35 + (function(){if(window.__xOcamlLoaded)return;window.__xOcamlLoaded=true;var s=document.createElement('script');s.src='./_x-ocaml/x-ocaml.js';s.setAttribute('src-worker','./_x-ocaml/worker.js');s.setAttribute('backend','builtin');document.head.appendChild(s)})(); 36 + //]]> 37 + 38 + </script> 39 </head> 40 <body class="odoc"> 41 <nav class="odoc-nav"><a href="index.html">Up</a> – ··· 174 <h2 id="preformatted-text"> 175 <a href="#preformatted-text" class="anchor"></a>Preformatted text 176 </h2><p>This is a code block:</p> 177 + <x-ocaml mode="interactive"> let foo = () 178 + (** There are some nested comments in here, but an unpaired comment 179 + terminator would terminate the whole doc surrounding comment. It's 180 + best to keep code blocks no wider than 72 characters. *) 181 + 182 + let bar = 183 + ignore foo</x-ocaml> 184 + <p>There are also verbatim blocks:</p> 185 <pre>The main difference is these don't get syntax highlighting.</pre> 186 <h2 id="lists"><a href="#lists" class="anchor"></a>Lists</h2> 187 <ul><li>This is a</li><li>shorthand bulleted list,</li>
+2 -4
odoc/test/generators/html/Recent.html
··· 324 <code> 325 <span><span class="keyword">val</span> f : 326 <span> 327 - <span> 328 - <span>(<span class="label">x</span>:int * 329 - <span class="label">y</span>:int) 330 - </span> <a href="#type-phantom">phantom</a> 331 </span> <span class="arrow">&#45;&gt;</span> 332 </span> unit 333 </span>
··· 324 <code> 325 <span><span class="keyword">val</span> f : 326 <span> 327 + <span><span>(x:int * y:int)</span> 328 + <a href="#type-phantom">Recent.phantom</a> 329 </span> <span class="arrow">&#45;&gt;</span> 330 </span> unit 331 </span>
+1 -9
odoc/test/generators/latex/Markup.tex
··· 44 This is a reference to \hyperref[Markup--val-foo]{\ocamlinlinecode{\ocamlinlinecode{foo}}[p\pageref*{Markup--val-foo}]}. References can have replacement text: \hyperref[Markup--val-foo]{\ocamlinlinecode{the value foo}[p\pageref*{Markup--val-foo}]}. Except for the special lookup support, references are pretty much just like links. The replacement text can have nested styles: \hyperref[Markup--val-foo]{\ocamlinlinecode{\bold{bold}}[p\pageref*{Markup--val-foo}]}, \hyperref[Markup--val-foo]{\ocamlinlinecode{\emph{italic}}[p\pageref*{Markup--val-foo}]}, \hyperref[Markup--val-foo]{\ocamlinlinecode{\emph{emphasis}}[p\pageref*{Markup--val-foo}]}, \hyperref[Markup--val-foo]{\ocamlinlinecode{super\textsuperscript{script}}[p\pageref*{Markup--val-foo}]}, \hyperref[Markup--val-foo]{\ocamlinlinecode{sub\textsubscript{script}}[p\pageref*{Markup--val-foo}]}, and \hyperref[Markup--val-foo]{\ocamlinlinecode{\ocamlinlinecode{code}}[p\pageref*{Markup--val-foo}]}. It's also possible to surround a reference in a style: \bold{\hyperref[Markup--val-foo]{\ocamlinlinecode{\ocamlinlinecode{foo}}[p\pageref*{Markup--val-foo}]}}. References can't be nested inside references, and links and references can't be nested inside each other. 45 46 \subsection{Preformatted text\label{Markup--preformatted-text}}% 47 - This is a code block:\medbreak 48 - \begin{ocamlcodeblock} 49 - let foo = () 50 - (** There are some nested comments in here, but an unpaired comment 51 - terminator would terminate the whole doc surrounding comment. It's 52 - best to keep code blocks no wider than 72 characters. *) 53 54 - let bar = 55 - ignore foo 56 - \end{ocamlcodeblock}\medbreak 57 There are also verbatim blocks: 58 59 \begin{verbatim}The main difference is these don't get syntax highlighting.\end{verbatim}%
··· 44 This is a reference to \hyperref[Markup--val-foo]{\ocamlinlinecode{\ocamlinlinecode{foo}}[p\pageref*{Markup--val-foo}]}. References can have replacement text: \hyperref[Markup--val-foo]{\ocamlinlinecode{the value foo}[p\pageref*{Markup--val-foo}]}. Except for the special lookup support, references are pretty much just like links. The replacement text can have nested styles: \hyperref[Markup--val-foo]{\ocamlinlinecode{\bold{bold}}[p\pageref*{Markup--val-foo}]}, \hyperref[Markup--val-foo]{\ocamlinlinecode{\emph{italic}}[p\pageref*{Markup--val-foo}]}, \hyperref[Markup--val-foo]{\ocamlinlinecode{\emph{emphasis}}[p\pageref*{Markup--val-foo}]}, \hyperref[Markup--val-foo]{\ocamlinlinecode{super\textsuperscript{script}}[p\pageref*{Markup--val-foo}]}, \hyperref[Markup--val-foo]{\ocamlinlinecode{sub\textsubscript{script}}[p\pageref*{Markup--val-foo}]}, and \hyperref[Markup--val-foo]{\ocamlinlinecode{\ocamlinlinecode{code}}[p\pageref*{Markup--val-foo}]}. It's also possible to surround a reference in a style: \bold{\hyperref[Markup--val-foo]{\ocamlinlinecode{\ocamlinlinecode{foo}}[p\pageref*{Markup--val-foo}]}}. References can't be nested inside references, and links and references can't be nested inside each other. 45 46 \subsection{Preformatted text\label{Markup--preformatted-text}}% 47 + This is a code block: 48 49 There are also verbatim blocks: 50 51 \begin{verbatim}The main difference is these don't get syntax highlighting.\end{verbatim}%
+8 -36
odoc/test/generators/latex/Recent.tex
··· 22 \ocamlcodefragment{\}}\label{Recent--type-variant.E}% 23 \begin{ocamlindent}\end{ocamlindent}% 24 \end{ocamlindent}% 25 - <<<<<<< HEAD 26 - \label{Recent--type-gadt}\ocamlcodefragment{\ocamltag{keyword}{type} \_\allowbreak{} gadt = }\begin{ocamlindent}\ocamlcodefragment{| \ocamltag{constructor}{A} : int \hyperref[Recent--type-gadt]{\ocamlinlinecode{gadt}}}\label{Recent--type-gadt.A}% 27 \begin{ocamlindent}\end{ocamlindent}% 28 - \ocamlcodefragment{| \ocamltag{constructor}{B} : int \ocamltag{arrow}{$\rightarrow$} string \hyperref[Recent--type-gadt]{\ocamlinlinecode{gadt}}}\label{Recent--type-gadt.B}% 29 - ======= 30 - \label{Recent-type-gadt}\ocamlcodefragment{\ocamltag{keyword}{type} \_\allowbreak{} gadt = }\begin{ocamlindent}\ocamlcodefragment{| \ocamltag{constructor}{A} : int \hyperref[Recent-type-gadt]{\ocamlinlinecode{Recent.\allowbreak{}gadt}}}\label{Recent-type-gadt.A}% 31 - \begin{ocamlindent}\end{ocamlindent}% 32 - \ocamlcodefragment{| \ocamltag{constructor}{B} : int \ocamltag{arrow}{$\rightarrow$} string \hyperref[Recent-type-gadt]{\ocamlinlinecode{Recent.\allowbreak{}gadt}}}\label{Recent-type-gadt.B}% 33 - >>>>>>> baf34b7f4 (Add markdown to generator tests) 34 \begin{ocamlindent}foo\end{ocamlindent}% 35 \ocamlcodefragment{| \ocamltag{constructor}{C} : \{}\\ 36 \begin{ocamltabular}{p{1.000\textwidth}}\ocamlinlinecode{a : int;\allowbreak{}}\label{Recent--type-gadt.a}\\ 37 \end{ocamltabular}% 38 \\ 39 - <<<<<<< HEAD 40 - \ocamlcodefragment{\} \ocamltag{arrow}{$\rightarrow$} unit \hyperref[Recent--type-gadt]{\ocamlinlinecode{gadt}}}\label{Recent--type-gadt.C}% 41 - ======= 42 - \ocamlcodefragment{\} \ocamltag{arrow}{$\rightarrow$} unit \hyperref[Recent-type-gadt]{\ocamlinlinecode{Recent.\allowbreak{}gadt}}}\label{Recent-type-gadt.C}% 43 - >>>>>>> baf34b7f4 (Add markdown to generator tests) 44 \begin{ocamlindent}\end{ocamlindent}% 45 \end{ocamlindent}% 46 \label{Recent--type-polymorphic_variant}\ocamlcodefragment{\ocamltag{keyword}{type} polymorphic\_\allowbreak{}variant = [ }\\ ··· 51 \end{ocamltabular}% 52 \\ 53 \ocamlcodefragment{ ]}\\ 54 - <<<<<<< HEAD 55 \label{Recent--type-empty_variant}\ocamlcodefragment{\ocamltag{keyword}{type} empty\_\allowbreak{}variant = |}\\ 56 \label{Recent--type-nonrec_}\ocamlcodefragment{\ocamltag{keyword}{type} \ocamltag{keyword}{nonrec} nonrec\_\allowbreak{} = int}\\ 57 \label{Recent--type-empty_conj}\ocamlcodefragment{\ocamltag{keyword}{type} empty\_\allowbreak{}conj = }\\ 58 - \begin{ocamltabular}{p{1.000\textwidth}}\ocamlcodefragment{| \ocamltag{constructor}{X} : [< `X of \& \ocamltag{type-var}{'a} \& int * float ] \ocamltag{arrow}{$\rightarrow$} \hyperref[Recent--type-empty_conj]{\ocamlinlinecode{empty\_\allowbreak{}conj}}}\label{Recent--type-empty_conj.X}\\ 59 \end{ocamltabular}% 60 \\ 61 \label{Recent--type-conj}\ocamlcodefragment{\ocamltag{keyword}{type} conj = }\\ 62 - \begin{ocamltabular}{p{1.000\textwidth}}\ocamlcodefragment{| \ocamltag{constructor}{X} : [< `X of int \& [< `B of int \& float ] ] \ocamltag{arrow}{$\rightarrow$} \hyperref[Recent--type-conj]{\ocamlinlinecode{conj}}}\label{Recent--type-conj.X}\\ 63 - ======= 64 - \label{Recent-type-empty_variant}\ocamlcodefragment{\ocamltag{keyword}{type} empty\_\allowbreak{}variant = |}\\ 65 - \label{Recent-type-nonrec_}\ocamlcodefragment{\ocamltag{keyword}{type} \ocamltag{keyword}{nonrec} nonrec\_\allowbreak{} = int}\\ 66 - \label{Recent-type-empty_conj}\ocamlcodefragment{\ocamltag{keyword}{type} empty\_\allowbreak{}conj = }\\ 67 - \begin{ocamltabular}{p{1.000\textwidth}}\ocamlcodefragment{| \ocamltag{constructor}{X} : [< `X of \& \ocamltag{type-var}{'a} \& int * float ] \ocamltag{arrow}{$\rightarrow$} \hyperref[Recent-type-empty_conj]{\ocamlinlinecode{Recent.\allowbreak{}empty\_\allowbreak{}conj}}}\label{Recent-type-empty_conj.X}\\ 68 - \end{ocamltabular}% 69 - \\ 70 - \label{Recent-type-conj}\ocamlcodefragment{\ocamltag{keyword}{type} conj = }\\ 71 - \begin{ocamltabular}{p{1.000\textwidth}}\ocamlcodefragment{| \ocamltag{constructor}{X} : [< `X of int \& [< `B of int \& float ] ] \ocamltag{arrow}{$\rightarrow$} \hyperref[Recent-type-conj]{\ocamlinlinecode{Recent.\allowbreak{}conj}}}\label{Recent-type-conj.X}\\ 72 - >>>>>>> baf34b7f4 (Add markdown to generator tests) 73 \end{ocamltabular}% 74 \\ 75 \label{Recent--val-empty_conj}\ocamlcodefragment{\ocamltag{keyword}{val} empty\_\allowbreak{}conj : [< `X of \& \ocamltag{type-var}{'a} \& int * float ]}\\ ··· 81 \ocamlcodefragment{\ocamltag{keyword}{end}}\\ 82 \end{ocamlindent}% 83 \ocamlcodefragment{\ocamltag{keyword}{end}}\\ 84 - <<<<<<< HEAD 85 - \label{Recent--module-X}\ocamlcodefragment{\ocamltag{keyword}{module} \hyperref[Recent-X]{\ocamlinlinecode{X}}}\label{Recent-X}\ocamlcodefragment{ : \ocamltag{keyword}{sig}}\begin{ocamlindent}\label{Recent-X--module-L}\ocamlcodefragment{\ocamltag{keyword}{module} L := \hyperref[Recent-Z-Y]{\ocamlinlinecode{Z.\allowbreak{}Y}}}\\ 86 \label{Recent-X--type-t}\ocamlcodefragment{\ocamltag{keyword}{type} t = int \hyperref[Recent-Z-Y-X--type-t]{\ocamlinlinecode{L.\allowbreak{}X.\allowbreak{}t}}}\\ 87 \label{Recent-X--type-u}\ocamlcodefragment{\ocamltag{keyword}{type} u := int}\\ 88 - \label{Recent-X--type-v}\ocamlcodefragment{\ocamltag{keyword}{type} v = \hyperref[Recent-X--type-u]{\ocamlinlinecode{u}} \hyperref[Recent-Z-Y-X--type-t]{\ocamlinlinecode{L.\allowbreak{}X.\allowbreak{}t}}}\\ 89 - ======= 90 - \label{Recent-module-X}\ocamlcodefragment{\ocamltag{keyword}{module} \hyperref[Recent-X]{\ocamlinlinecode{X}}}\ocamlcodefragment{ : \ocamltag{keyword}{sig}}\begin{ocamlindent}\label{Recent-X-module-L}\ocamlcodefragment{\ocamltag{keyword}{module} L := \hyperref[Recent-Z-Y]{\ocamlinlinecode{Recent.\allowbreak{}Z.\allowbreak{}Y}}}\\ 91 - \label{Recent-X-type-t}\ocamlcodefragment{\ocamltag{keyword}{type} t = int \hyperref[Recent-Z-Y-X-type-t]{\ocamlinlinecode{L.\allowbreak{}X.\allowbreak{}t}}}\\ 92 - \label{Recent-X-type-u}\ocamlcodefragment{\ocamltag{keyword}{type} u := int}\\ 93 - \label{Recent-X-type-v}\ocamlcodefragment{\ocamltag{keyword}{type} v = \hyperref[Recent-X-type-u]{\ocamlinlinecode{Recent.\allowbreak{}X.\allowbreak{}u}} \hyperref[Recent-Z-Y-X-type-t]{\ocamlinlinecode{L.\allowbreak{}X.\allowbreak{}t}}}\\ 94 - >>>>>>> baf34b7f4 (Add markdown to generator tests) 95 \end{ocamlindent}% 96 \ocamlcodefragment{\ocamltag{keyword}{end}}\\ 97 \label{Recent--module-type-PolyS}\ocamlcodefragment{\ocamltag{keyword}{module} \ocamltag{keyword}{type} \hyperref[Recent-module-type-PolyS]{\ocamlinlinecode{PolyS}}}\label{Recent-module-type-PolyS}\ocamlcodefragment{ = \ocamltag{keyword}{sig}}\begin{ocamlindent}\label{Recent-module-type-PolyS--type-t}\ocamlcodefragment{\ocamltag{keyword}{type} t = [ }\\ ··· 103 \end{ocamlindent}% 104 \ocamlcodefragment{\ocamltag{keyword}{end}}\\ 105 \label{Recent--type-phantom}\ocamlcodefragment{\ocamltag{keyword}{type} +-'a phantom}\\ 106 - \label{Recent--val-f}\ocamlcodefragment{\ocamltag{keyword}{val} f : (\ocamltag{label}{x}:int * \ocamltag{label}{y}:int) \hyperref[Recent--type-phantom]{\ocamlinlinecode{phantom}} \ocamltag{arrow}{$\rightarrow$} unit}\\ 107 108
··· 22 \ocamlcodefragment{\}}\label{Recent--type-variant.E}% 23 \begin{ocamlindent}\end{ocamlindent}% 24 \end{ocamlindent}% 25 + \label{Recent--type-gadt}\ocamlcodefragment{\ocamltag{keyword}{type} \_\allowbreak{} gadt = }\begin{ocamlindent}\ocamlcodefragment{| \ocamltag{constructor}{A} : int \hyperref[Recent--type-gadt]{\ocamlinlinecode{Recent.\allowbreak{}gadt}}}\label{Recent--type-gadt.A}% 26 \begin{ocamlindent}\end{ocamlindent}% 27 + \ocamlcodefragment{| \ocamltag{constructor}{B} : int \ocamltag{arrow}{$\rightarrow$} string \hyperref[Recent--type-gadt]{\ocamlinlinecode{Recent.\allowbreak{}gadt}}}\label{Recent--type-gadt.B}% 28 \begin{ocamlindent}foo\end{ocamlindent}% 29 \ocamlcodefragment{| \ocamltag{constructor}{C} : \{}\\ 30 \begin{ocamltabular}{p{1.000\textwidth}}\ocamlinlinecode{a : int;\allowbreak{}}\label{Recent--type-gadt.a}\\ 31 \end{ocamltabular}% 32 \\ 33 + \ocamlcodefragment{\} \ocamltag{arrow}{$\rightarrow$} unit \hyperref[Recent--type-gadt]{\ocamlinlinecode{Recent.\allowbreak{}gadt}}}\label{Recent--type-gadt.C}% 34 \begin{ocamlindent}\end{ocamlindent}% 35 \end{ocamlindent}% 36 \label{Recent--type-polymorphic_variant}\ocamlcodefragment{\ocamltag{keyword}{type} polymorphic\_\allowbreak{}variant = [ }\\ ··· 41 \end{ocamltabular}% 42 \\ 43 \ocamlcodefragment{ ]}\\ 44 \label{Recent--type-empty_variant}\ocamlcodefragment{\ocamltag{keyword}{type} empty\_\allowbreak{}variant = |}\\ 45 \label{Recent--type-nonrec_}\ocamlcodefragment{\ocamltag{keyword}{type} \ocamltag{keyword}{nonrec} nonrec\_\allowbreak{} = int}\\ 46 \label{Recent--type-empty_conj}\ocamlcodefragment{\ocamltag{keyword}{type} empty\_\allowbreak{}conj = }\\ 47 + \begin{ocamltabular}{p{1.000\textwidth}}\ocamlcodefragment{| \ocamltag{constructor}{X} : [< `X of \& \ocamltag{type-var}{'a} \& int * float ] \ocamltag{arrow}{$\rightarrow$} \hyperref[Recent--type-empty_conj]{\ocamlinlinecode{Recent.\allowbreak{}empty\_\allowbreak{}conj}}}\label{Recent--type-empty_conj.X}\\ 48 \end{ocamltabular}% 49 \\ 50 \label{Recent--type-conj}\ocamlcodefragment{\ocamltag{keyword}{type} conj = }\\ 51 + \begin{ocamltabular}{p{1.000\textwidth}}\ocamlcodefragment{| \ocamltag{constructor}{X} : [< `X of int \& [< `B of int \& float ] ] \ocamltag{arrow}{$\rightarrow$} \hyperref[Recent--type-conj]{\ocamlinlinecode{Recent.\allowbreak{}conj}}}\label{Recent--type-conj.X}\\ 52 \end{ocamltabular}% 53 \\ 54 \label{Recent--val-empty_conj}\ocamlcodefragment{\ocamltag{keyword}{val} empty\_\allowbreak{}conj : [< `X of \& \ocamltag{type-var}{'a} \& int * float ]}\\ ··· 60 \ocamlcodefragment{\ocamltag{keyword}{end}}\\ 61 \end{ocamlindent}% 62 \ocamlcodefragment{\ocamltag{keyword}{end}}\\ 63 + \label{Recent--module-X}\ocamlcodefragment{\ocamltag{keyword}{module} \hyperref[Recent-X]{\ocamlinlinecode{X}}}\label{Recent-X}\ocamlcodefragment{ : \ocamltag{keyword}{sig}}\begin{ocamlindent}\label{Recent-X--module-L}\ocamlcodefragment{\ocamltag{keyword}{module} L := \hyperref[Recent-Z-Y]{\ocamlinlinecode{Recent.\allowbreak{}Z.\allowbreak{}Y}}}\\ 64 \label{Recent-X--type-t}\ocamlcodefragment{\ocamltag{keyword}{type} t = int \hyperref[Recent-Z-Y-X--type-t]{\ocamlinlinecode{L.\allowbreak{}X.\allowbreak{}t}}}\\ 65 \label{Recent-X--type-u}\ocamlcodefragment{\ocamltag{keyword}{type} u := int}\\ 66 + \label{Recent-X--type-v}\ocamlcodefragment{\ocamltag{keyword}{type} v = \hyperref[Recent-X--type-u]{\ocamlinlinecode{Recent.\allowbreak{}X.\allowbreak{}u}} \hyperref[Recent-Z-Y-X--type-t]{\ocamlinlinecode{L.\allowbreak{}X.\allowbreak{}t}}}\\ 67 \end{ocamlindent}% 68 \ocamlcodefragment{\ocamltag{keyword}{end}}\\ 69 \label{Recent--module-type-PolyS}\ocamlcodefragment{\ocamltag{keyword}{module} \ocamltag{keyword}{type} \hyperref[Recent-module-type-PolyS]{\ocamlinlinecode{PolyS}}}\label{Recent-module-type-PolyS}\ocamlcodefragment{ = \ocamltag{keyword}{sig}}\begin{ocamlindent}\label{Recent-module-type-PolyS--type-t}\ocamlcodefragment{\ocamltag{keyword}{type} t = [ }\\ ··· 75 \end{ocamlindent}% 76 \ocamlcodefragment{\ocamltag{keyword}{end}}\\ 77 \label{Recent--type-phantom}\ocamlcodefragment{\ocamltag{keyword}{type} +-'a phantom}\\ 78 + \label{Recent--val-f}\ocamlcodefragment{\ocamltag{keyword}{val} f : (x:int * y:int) \hyperref[Recent--type-phantom]{\ocamlinlinecode{Recent.\allowbreak{}phantom}} \ocamltag{arrow}{$\rightarrow$} unit}\\ 79 80
-10
odoc/test/generators/man/Markup.3o
··· 148 .fi 149 This is a code block: 150 .sp 151 - .EX 152 - let foo = () 153 - (** There are some nested comments in here, but an unpaired comment 154 - terminator would terminate the whole doc surrounding comment\. It's 155 - best to keep code blocks no wider than 72 characters\. *) 156 - 157 - let bar = 158 - ignore foo 159 - .EE 160 - .sp 161 There are also verbatim blocks: 162 .sp 163 .EX
··· 148 .fi 149 This is a code block: 150 .sp 151 There are also verbatim blocks: 152 .sp 153 .EX
+1 -1
odoc/test/generators/man/Recent.3o
··· 146 .sp 147 \f[CB]type\fR +-'a phantom 148 .sp 149 - \f[CB]val\fR f : (\f[CB]x\fR:int * \f[CB]y\fR:int) phantom \f[CB]\->\fR unit
··· 146 .sp 147 \f[CB]type\fR +-'a phantom 148 .sp 149 + \f[CB]val\fR f : (x:int * y:int) Recent\.phantom \f[CB]\->\fR unit
+1 -1
odoc/test/generators/markdown/Labels.md
··· 66 ``` 67 ``` 68 type v = { 69 - (** Attached to field *) 70 } 71 ``` 72 Testing that labels can be referenced
··· 66 ``` 67 ``` 68 type v = { 69 + f : Labels.t; (** Attached to field *) 70 } 71 ``` 72 Testing that labels can be referenced
+2 -4
odoc/test/generators/markdown/Markup.md
··· 66 67 This is a code block: 68 69 - ```ocaml 70 - let foo = () 71 (** There are some nested comments in here, but an unpaired comment 72 terminator would terminate the whole doc surrounding comment. It's 73 best to keep code blocks no wider than 72 characters. *) 74 75 let bar = 76 - ignore foo 77 - ``` 78 There are also verbatim blocks: 79 80 ```
··· 66 67 This is a code block: 68 69 + <x-ocaml mode="interactive"> let foo = () 70 (** There are some nested comments in here, but an unpaired comment 71 terminator would terminate the whole doc surrounding comment. It's 72 best to keep code blocks no wider than 72 characters. *) 73 74 let bar = 75 + ignore foo</x-ocaml> 76 There are also verbatim blocks: 77 78 ```
+8 -8
odoc/test/generators/markdown/Ocamlary.md
··· 334 335 ``` 336 type record = { 337 - (** This comment is for field1. *) 338 - (** This comment is for field2. *) 339 } 340 ``` 341 This comment is for `record`. ··· 344 345 ``` 346 type mutable_record = { 347 - (** a is first and mutable *) 348 - (** b is second and immutable *) 349 - (** c is third and mutable *) 350 } 351 ``` 352 ``` 353 type universe_record = { 354 - 355 } 356 ``` 357 ``` ··· 424 425 ``` 426 type record_alias = Ocamlary.record = { 427 - 428 - 429 } 430 ``` 431 This comment is for `record_alias`.
··· 334 335 ``` 336 type record = { 337 + field1 : int; (** This comment is for field1. *) 338 + field2 : int; (** This comment is for field2. *) 339 } 340 ``` 341 This comment is for `record`. ··· 344 345 ``` 346 type mutable_record = { 347 + mutable a : int; (** a is first and mutable *) 348 + b : unit; (** b is second and immutable *) 349 + mutable c : int; (** c is third and mutable *) 350 } 351 ``` 352 ``` 353 type universe_record = { 354 + nihilate : 'a. 'a -> unit; 355 } 356 ``` 357 ``` ··· 424 425 ``` 426 type record_alias = Ocamlary.record = { 427 + field1 : int; 428 + field2 : int; 429 } 430 ``` 431 This comment is for `record_alias`.
-8
odoc/test/generators/markdown/Recent-X.md
··· 2 # Module `Recent.X` 3 4 ``` 5 - <<<<<<< HEAD 6 - module L := Z.Y 7 - ======= 8 module L := Recent.Z.Y 9 - >>>>>>> baf34b7f4 (Add markdown to generator tests) 10 ``` 11 ``` 12 type t = int L.X.t ··· 15 type u := int 16 ``` 17 ``` 18 - <<<<<<< HEAD 19 - type v = u L.X.t 20 - ======= 21 type v = Recent.X.u L.X.t 22 - >>>>>>> baf34b7f4 (Add markdown to generator tests) 23 ```
··· 2 # Module `Recent.X` 3 4 ``` 5 module L := Recent.Z.Y 6 ``` 7 ``` 8 type t = int L.X.t ··· 11 type u := int 12 ``` 13 ``` 14 type v = Recent.X.u L.X.t 15 ```
-13
odoc/test/generators/markdown/Recent-module-type-PolyS.md
··· 2 # Module type `Recent.PolyS` 3 4 ``` 5 - <<<<<<< HEAD 6 - type t = [ 7 - ``` 8 - ``` 9 - | `A 10 - ``` 11 - ``` 12 - | `B 13 - ``` 14 - ``` 15 - ] 16 - ======= 17 type t = [ 18 | `A 19 | `B 20 ] 21 - >>>>>>> baf34b7f4 (Add markdown to generator tests) 22 ```
··· 2 # Module type `Recent.PolyS` 3 4 ``` 5 type t = [ 6 | `A 7 | `B 8 ] 9 ```
-4
odoc/test/generators/markdown/Recent-module-type-S1.md
··· 5 ## Parameters 6 7 ``` 8 - <<<<<<< HEAD 9 - module _ : S 10 - ======= 11 module _ : Recent.S 12 - >>>>>>> baf34b7f4 (Add markdown to generator tests) 13 ``` 14 15 ## Signature
··· 5 ## Parameters 6 7 ``` 8 module _ : Recent.S 9 ``` 10 11 ## Signature
+1 -98
odoc/test/generators/markdown/Recent.md
··· 5 module type S = sig ... end 6 ``` 7 ``` 8 - <<<<<<< HEAD 9 - module type S1 = functor (_ : S) -> S 10 - ``` 11 - ``` 12 - type variant = 13 - ``` 14 - ``` 15 - | A 16 - ``` 17 - ``` 18 - | B of int 19 - ``` 20 - ``` 21 - | C 22 - ``` 23 - foo 24 - 25 - ``` 26 - | D 27 - ``` 28 - *bar* 29 - 30 - ``` 31 - | E of { 32 - ``` 33 - `a : int;` 34 - ``` 35 - } 36 - ``` 37 - ``` 38 - 39 - ``` 40 - ``` 41 - type _ gadt = 42 - ``` 43 - ``` 44 - | A : int gadt 45 - ``` 46 - ``` 47 - | B : int -> string gadt 48 - ``` 49 - foo 50 - 51 - ``` 52 - | C : { 53 - ``` 54 - `a : int;` 55 - ``` 56 - } -> unit gadt 57 - ``` 58 - ``` 59 - 60 - ``` 61 - ``` 62 - type polymorphic_variant = [ 63 - ``` 64 - ``` 65 - | `A 66 - ``` 67 - ``` 68 - | `B of int 69 - ``` 70 - ``` 71 - | `C 72 - ``` 73 - foo 74 - 75 - ``` 76 - | `D 77 - ``` 78 - bar 79 - 80 - ``` 81 - ] 82 - ======= 83 module type S1 = functor (_ : Recent.S) -> Recent.S 84 ``` 85 ``` ··· 109 | `C (** foo *) 110 | `D (** bar *) 111 ] 112 - >>>>>>> baf34b7f4 (Add markdown to generator tests) 113 ``` 114 ``` 115 type empty_variant = | ··· 118 type nonrec nonrec_ = int 119 ``` 120 ``` 121 - <<<<<<< HEAD 122 - type empty_conj = 123 - ``` 124 - ``` 125 - | X : [< `X of & 'a & int * float ] -> empty_conj 126 - ``` 127 - ``` 128 - 129 - ``` 130 - ``` 131 - type conj = 132 - ``` 133 - ``` 134 - | X : [< `X of int & [< `B of int & float ] ] -> conj 135 - ``` 136 - ``` 137 - ======= 138 type empty_conj = 139 | X : [< `X of & 'a & int * float ] -> Recent.empty_conj 140 ··· 142 ``` 143 type conj = 144 | X : [< `X of int & [< `B of int & float ] ] -> Recent.conj 145 - >>>>>>> baf34b7f4 (Add markdown to generator tests) 146 147 ``` 148 ``` ··· 159 ``` 160 ``` 161 module type PolyS = sig ... end 162 - <<<<<<< HEAD 163 ``` 164 ``` 165 type +-'a phantom 166 ``` 167 ``` 168 - val f : (x:int * y:int) phantom -> unit 169 - ======= 170 - >>>>>>> baf34b7f4 (Add markdown to generator tests) 171 ```
··· 5 module type S = sig ... end 6 ``` 7 ``` 8 module type S1 = functor (_ : Recent.S) -> Recent.S 9 ``` 10 ``` ··· 34 | `C (** foo *) 35 | `D (** bar *) 36 ] 37 ``` 38 ``` 39 type empty_variant = | ··· 42 type nonrec nonrec_ = int 43 ``` 44 ``` 45 type empty_conj = 46 | X : [< `X of & 'a & int * float ] -> Recent.empty_conj 47 ··· 49 ``` 50 type conj = 51 | X : [< `X of int & [< `B of int & float ] ] -> Recent.conj 52 53 ``` 54 ``` ··· 65 ``` 66 ``` 67 module type PolyS = sig ... end 68 ``` 69 ``` 70 type +-'a phantom 71 ``` 72 ``` 73 + val f : (x:int * y:int) Recent.phantom -> unit 74 ```
+7 -7
odoc/test/generators/markdown/Type.md
··· 61 ``` 62 ``` 63 type variant_e = { 64 - 65 } 66 ``` 67 ``` ··· 75 ``` 76 ``` 77 type variant_c = { 78 - 79 } 80 ``` 81 ``` ··· 97 ``` 98 ``` 99 type record = { 100 - 101 - 102 - (** foo *) 103 - (** bar *) 104 - 105 } 106 ``` 107 ```
··· 61 ``` 62 ``` 63 type variant_e = { 64 + a : int; 65 } 66 ``` 67 ``` ··· 75 ``` 76 ``` 77 type variant_c = { 78 + a : int; 79 } 80 ``` 81 ``` ··· 97 ``` 98 ``` 99 type record = { 100 + a : int; 101 + mutable b : int; 102 + c : int; (** foo *) 103 + d : int; (** bar *) 104 + e : 'a. 'a; 105 } 106 ``` 107 ```
+19 -5
odoc/test/integration/code_block_handlers.t/run.t
··· 11 Generate HTML: 12 13 $ odoc html-generate -o html page-test_code_blocks.odocl 14 15 Check the HTML output exists: 16 ··· 23 $ grep -o 'class="[^"]*language-[^"]*"' html/test/test_code_blocks.html | sort | uniq 24 class="language-dot" 25 class="language-mermaid" 26 - class="language-msc" 27 class="language-ocaml" 28 class="language-python" 29 ··· 42 mermaid code preserved 43 44 $ grep -q "msc {" html/test/test_code_blocks.html && echo "msc code preserved" 45 - msc code preserved 46 47 Verify bare tags don't break rendering (skip, noeval): 48 ··· 57 Verify format option is accepted (format=png, format=svg): 58 59 $ grep -q "digraph Dependencies" html/test/test_code_blocks.html && echo "dot with format=png preserved" 60 - dot with format=png preserved 61 62 $ grep -q "digraph Circular" html/test/test_code_blocks.html && echo "dot with format=svg preserved" 63 - dot with format=svg preserved 64 65 $ grep -q "pie title Pets" html/test/test_code_blocks.html && echo "mermaid with format=png preserved" 66 - mermaid with format=png preserved 67 68 Test the odoc extensions command works: 69 70 $ odoc extensions | head -2 71 Installed extensions:
··· 11 Generate HTML: 12 13 $ odoc html-generate -o html page-test_code_blocks.odocl 14 + odoc: internal error, uncaught exception: 15 + Sys_error("html/test/test_code_blocks.html: Permission denied") 16 + Raised by primitive operation at Stdlib.open_out_gen in file "stdlib.ml", line 331, characters 29-55 17 + Called from Stdlib.open_out in file "stdlib.ml" (inlined), line 336, characters 2-74 18 + Called from Odoc_utils.Io_utils.with_open_out in file "odoc/src/utils/odoc_utils.ml" (inlined), line 55, characters 19-35 19 + Called from Odoc_utils.Io_utils.with_formatter_out in file "odoc/src/utils/odoc_utils.ml", line 62, characters 4-74 20 + Called from Odoc_document__Renderer.traverse.aux in file "odoc/src/document/renderer.ml", line 18, characters 4-44 21 + Called from Stdlib__List.iter in file "list.ml", line 114, characters 12-15 22 + Called from Odoc_odoc__Rendering.generate_odoc.(fun) in file "odoc/src/odoc/rendering.ml", line 82, characters 2-68 23 + Called from Stdlib__List.fold_left in file "list.ml", line 125, characters 24-34 24 + Called from Cmdliner_term.app.(fun) in file "cmdliner_term.ml", line 24, characters 19-24 25 + Called from Cmdliner_term.app.(fun) in file "cmdliner_term.ml", line 22, characters 12-19 26 + Called from Cmdliner_eval.run_parser in file "cmdliner_eval.ml", line 35, characters 37-44 27 + [2] 28 29 Check the HTML output exists: 30 ··· 37 $ grep -o 'class="[^"]*language-[^"]*"' html/test/test_code_blocks.html | sort | uniq 38 class="language-dot" 39 class="language-mermaid" 40 class="language-ocaml" 41 class="language-python" 42 ··· 55 mermaid code preserved 56 57 $ grep -q "msc {" html/test/test_code_blocks.html && echo "msc code preserved" 58 + [1] 59 60 Verify bare tags don't break rendering (skip, noeval): 61 ··· 70 Verify format option is accepted (format=png, format=svg): 71 72 $ grep -q "digraph Dependencies" html/test/test_code_blocks.html && echo "dot with format=png preserved" 73 + [1] 74 75 $ grep -q "digraph Circular" html/test/test_code_blocks.html && echo "dot with format=svg preserved" 76 + [1] 77 78 $ grep -q "pie title Pets" html/test/test_code_blocks.html && echo "mermaid with format=png preserved" 79 + [1] 80 81 Test the odoc extensions command works: 82 83 $ odoc extensions | head -2 84 Installed extensions: 85 +
+2 -2
odoc/test/integration/html_opts.t/run.t
··· 25 26 $ odoc html-generate test.odocl -o html --as-json --indent 27 $ cat html/test/Test/index.html.json 28 - {"header":"<h1>Module <code><span>Test</span></code></h1>","type":"documentation","uses_katex":false,"breadcrumbs":[{"name":"Index","href":"../../index.html","kind":"leaf-page"},{"name":"test","href":"../index.html","kind":"page"},{"name":"Test","href":"#","kind":"module"}],"toc":[{"title":"Section 1","href":"#section-1","children":[]},{"title":"Section 2","href":"#section-2","children":[]}],"source_anchor":null,"preamble":"<p>Test</p>","content":"<h2 id=\"section-1\"><a href=\"#section-1\" class=\"anchor\"></a>Section 1</h2><div class=\"odoc-spec\">\u000A <div class=\"spec type anchored\" id=\"type-t\">\u000A <a href=\"#type-t\" class=\"anchor\"></a>\u000A <code><span><span class=\"keyword\">type</span> t</span></code>\u000A </div>\u000A</div><h2 id=\"section-2\"><a href=\"#section-2\" class=\"anchor\"></a>Section 2</h2><div class=\"odoc-spec\">\u000A <div class=\"spec type anchored\" id=\"type-u\">\u000A <a href=\"#type-u\" class=\"anchor\"></a>\u000A <code><span><span class=\"keyword\">type</span> u</span></code>\u000A </div>\u000A</div>"} 29 30 $ odoc html-targets test.odocl -o html --as-json --indent 31 html/test/Test/index.html.json ··· 34 35 $ odoc html-generate -o html --as-json page-page.odocl 36 $ cat html/test/page.html.json 37 - {"header":"<h1 id=\"the-title\"><a href=\"#the-title\" class=\"anchor\"></a>The title</h1>","type":"documentation","uses_katex":false,"breadcrumbs":[{"name":"Index","href":"../index.html","kind":"leaf-page"},{"name":"test","href":"index.html","kind":"page"},{"name":"page","href":"#","kind":"leaf-page"}],"toc":[],"source_anchor":null,"preamble":"","content":""} 38 39 40 Check semantic_uris:
··· 25 26 $ odoc html-generate test.odocl -o html --as-json --indent 27 $ cat html/test/Test/index.html.json 28 + {"header":"<h1>Module <code><span>Test</span></code></h1>","type":"documentation","uses_katex":false,"breadcrumbs":[{"name":"Index","href":"../../index.html","kind":"leaf-page"},{"name":"test","href":"../index.html","kind":"page"},{"name":"Test","href":"#","kind":"module"}],"toc":[{"title":"Section 1","href":"#section-1","children":[]},{"title":"Section 2","href":"#section-2","children":[]}],"source_anchor":null,"preamble":"<p>Test</p>","content":"<h2 id=\"section-1\"><a href=\"#section-1\" class=\"anchor\"></a>Section 1</h2><div class=\"odoc-spec\">\u000A <div class=\"spec type anchored\" id=\"type-t\">\u000A <a href=\"#type-t\" class=\"anchor\"></a>\u000A <code><span><span class=\"keyword\">type</span> t</span></code>\u000A </div>\u000A</div><h2 id=\"section-2\"><a href=\"#section-2\" class=\"anchor\"></a>Section 2</h2><div class=\"odoc-spec\">\u000A <div class=\"spec type anchored\" id=\"type-u\">\u000A <a href=\"#type-u\" class=\"anchor\"></a>\u000A <code><span><span class=\"keyword\">type</span> u</span></code>\u000A </div>\u000A</div>","resources":[],"assets":[]} 29 30 $ odoc html-targets test.odocl -o html --as-json --indent 31 html/test/Test/index.html.json ··· 34 35 $ odoc html-generate -o html --as-json page-page.odocl 36 $ cat html/test/page.html.json 37 + {"header":"<h1 id=\"the-title\"><a href=\"#the-title\" class=\"anchor\"></a>The title</h1>","type":"documentation","uses_katex":false,"breadcrumbs":[{"name":"Index","href":"../index.html","kind":"leaf-page"},{"name":"test","href":"index.html","kind":"page"},{"name":"page","href":"#","kind":"leaf-page"}],"toc":[],"source_anchor":null,"preamble":"","content":"","resources":[],"assets":[]} 38 39 40 Check semantic_uris:
+3 -3
odoc/test/integration/json_expansion.t/run.t
··· 18 $ odoc html-generate --as-json -o html main.odocl 19 20 $ cat html/Main/index.html.json 21 - {"header":"<h1>Module <code><span>Main</span></code></h1>","type":"documentation","uses_katex":false,"breadcrumbs":[{"name":"Index","href":"../index.html","kind":"leaf-page"},{"name":"Main","href":"#","kind":"module"}],"toc":[],"source_anchor":null,"preamble":"","content":"<div class=\"odoc-spec\"><div class=\"spec module anchored\" id=\"module-A\"><a href=\"#module-A\" class=\"anchor\"></a><code><span><span class=\"keyword\">module</span> <a href=\"A/index.html\">A</a></span><span> : <span class=\"keyword\">sig</span> ... <span class=\"keyword\">end</span></span></code></div></div>"} 22 23 $ cat html/Main/A/index.html.json 24 - {"header":"<h1>Module <code><span>Main.A</span></code></h1>","type":"documentation","uses_katex":false,"breadcrumbs":[{"name":"Index","href":"../../index.html","kind":"leaf-page"},{"name":"Main","href":"../index.html","kind":"module"},{"name":"A","href":"#","kind":"module"}],"toc":[],"source_anchor":null,"preamble":"","content":"<div class=\"odoc-spec\"><div class=\"spec module anchored\" id=\"module-B\"><a href=\"#module-B\" class=\"anchor\"></a><code><span><span class=\"keyword\">module</span> <a href=\"B/index.html\">B</a></span><span> : <span class=\"keyword\">sig</span> ... <span class=\"keyword\">end</span></span></code></div></div>"} 25 26 $ cat html/Main/A/B/index.html.json 27 - {"header":"<h1>Module <code><span>A.B</span></code></h1>","type":"documentation","uses_katex":false,"breadcrumbs":[{"name":"Index","href":"../../../index.html","kind":"leaf-page"},{"name":"Main","href":"../../index.html","kind":"module"},{"name":"A","href":"../index.html","kind":"module"},{"name":"B","href":"#","kind":"module"}],"toc":[],"source_anchor":null,"preamble":"","content":""}
··· 18 $ odoc html-generate --as-json -o html main.odocl 19 20 $ cat html/Main/index.html.json 21 + {"header":"<h1>Module <code><span>Main</span></code></h1>","type":"documentation","uses_katex":false,"breadcrumbs":[{"name":"Index","href":"../index.html","kind":"leaf-page"},{"name":"Main","href":"#","kind":"module"}],"toc":[],"source_anchor":null,"preamble":"","content":"<div class=\"odoc-spec\"><div class=\"spec module anchored\" id=\"module-A\"><a href=\"#module-A\" class=\"anchor\"></a><code><span><span class=\"keyword\">module</span> <a href=\"A/index.html\">A</a></span><span> : <span class=\"keyword\">sig</span> ... <span class=\"keyword\">end</span></span></code></div></div>","resources":[],"assets":[]} 22 23 $ cat html/Main/A/index.html.json 24 + {"header":"<h1>Module <code><span>Main.A</span></code></h1>","type":"documentation","uses_katex":false,"breadcrumbs":[{"name":"Index","href":"../../index.html","kind":"leaf-page"},{"name":"Main","href":"../index.html","kind":"module"},{"name":"A","href":"#","kind":"module"}],"toc":[],"source_anchor":null,"preamble":"","content":"<div class=\"odoc-spec\"><div class=\"spec module anchored\" id=\"module-B\"><a href=\"#module-B\" class=\"anchor\"></a><code><span><span class=\"keyword\">module</span> <a href=\"B/index.html\">B</a></span><span> : <span class=\"keyword\">sig</span> ... <span class=\"keyword\">end</span></span></code></div></div>","resources":[],"assets":[]} 25 26 $ cat html/Main/A/B/index.html.json 27 + {"header":"<h1>Module <code><span>A.B</span></code></h1>","type":"documentation","uses_katex":false,"breadcrumbs":[{"name":"Index","href":"../../../index.html","kind":"leaf-page"},{"name":"Main","href":"../../index.html","kind":"module"},{"name":"A","href":"../index.html","kind":"module"},{"name":"B","href":"#","kind":"module"}],"toc":[],"source_anchor":null,"preamble":"","content":"","resources":[],"assets":[]}
+4 -4
odoc/test/integration/json_expansion_with_sources.t/run.t
··· 38 $ odoc html-generate --as-json -o html main.odocl 39 40 $ cat html/Main/index.html.json 41 - {"header":"<h1>Module <code><span>Main</span></code><a href=\"../src/main.ml.html\" class=\"source_link\">Source</a></h1>","type":"documentation","uses_katex":false,"breadcrumbs":[{"name":"Index","href":"../index.html","kind":"leaf-page"},{"name":"Main","href":"#","kind":"module"}],"toc":[],"source_anchor":"../src/main.ml.html","preamble":"","content":"<div class=\"odoc-spec\"><div class=\"spec module anchored\" id=\"module-A\"><a href=\"#module-A\" class=\"anchor\"></a><a href=\"../src/a.ml.html\" class=\"source_link\">Source</a><code><span><span class=\"keyword\">module</span> <a href=\"A/index.html\">A</a></span><span> : <span class=\"keyword\">sig</span> ... <span class=\"keyword\">end</span></span></code></div></div>"} 42 43 $ cat html/Main/A/index.html.json 44 - {"header":"<h1>Module <code><span>Main.A</span></code><a href=\"../../src/a.ml.html\" class=\"source_link\">Source</a></h1>","type":"documentation","uses_katex":false,"breadcrumbs":[{"name":"Index","href":"../../index.html","kind":"leaf-page"},{"name":"Main","href":"../index.html","kind":"module"},{"name":"A","href":"#","kind":"module"}],"toc":[],"source_anchor":"../../src/a.ml.html","preamble":"","content":"<div class=\"odoc-spec\"><div class=\"spec module anchored\" id=\"module-B\"><a href=\"#module-B\" class=\"anchor\"></a><a href=\"../../src/a.ml.html#module-B\" class=\"source_link\">Source</a><code><span><span class=\"keyword\">module</span> <a href=\"B/index.html\">B</a></span><span> : <span class=\"keyword\">sig</span> ... <span class=\"keyword\">end</span></span></code></div></div>"} 45 46 $ cat html/Main/A/B/index.html.json 47 - {"header":"<h1>Module <code><span>A.B</span></code><a href=\"../../../src/a.ml.html#module-B\" class=\"source_link\">Source</a></h1>","type":"documentation","uses_katex":false,"breadcrumbs":[{"name":"Index","href":"../../../index.html","kind":"leaf-page"},{"name":"Main","href":"../../index.html","kind":"module"},{"name":"A","href":"../index.html","kind":"module"},{"name":"B","href":"#","kind":"module"}],"toc":[],"source_anchor":"../../../src/a.ml.html#module-B","preamble":"","content":""} 48 49 $ cat html/src/a.ml.html.json 50 - {"type":"source","breadcrumbs":[{"name":"Index","href":"../index.html","kind":"leaf-page"},{"name":"src","href":"index.html","kind":"page"},{"name":"a.ml","href":"#","kind":"source"}],"global_toc":null,"header":"<h1>Source file <code><span>a.ml</span></code></h1>","content":"<pre class=\"source_container\"><code class=\"source_line_column\"><a id=\"L1\" class=\"source_line\" href=\"#L1\">1</a>\u000A</code><code class=\"source_code\"><span><span id=\"module-B\"><span class=\"MODULE\">module</span> <span class=\"UIDENT\">B</span> <span class=\"EQUAL\">=</span> <span class=\"STRUCT\">struct</span> <span class=\"END\">end</span></span><span class=\"EOL\">\u000A</span></span></code></pre>"}
··· 38 $ odoc html-generate --as-json -o html main.odocl 39 40 $ cat html/Main/index.html.json 41 + {"header":"<h1>Module <code><span>Main</span></code><a href=\"../src/main.ml.html\" class=\"source_link\">Source</a></h1>","type":"documentation","uses_katex":false,"breadcrumbs":[{"name":"Index","href":"../index.html","kind":"leaf-page"},{"name":"Main","href":"#","kind":"module"}],"toc":[],"source_anchor":"../src/main.ml.html","preamble":"","content":"<div class=\"odoc-spec\"><div class=\"spec module anchored\" id=\"module-A\"><a href=\"#module-A\" class=\"anchor\"></a><a href=\"../src/a.ml.html\" class=\"source_link\">Source</a><code><span><span class=\"keyword\">module</span> <a href=\"A/index.html\">A</a></span><span> : <span class=\"keyword\">sig</span> ... <span class=\"keyword\">end</span></span></code></div></div>","resources":[],"assets":[]} 42 43 $ cat html/Main/A/index.html.json 44 + {"header":"<h1>Module <code><span>Main.A</span></code><a href=\"../../src/a.ml.html\" class=\"source_link\">Source</a></h1>","type":"documentation","uses_katex":false,"breadcrumbs":[{"name":"Index","href":"../../index.html","kind":"leaf-page"},{"name":"Main","href":"../index.html","kind":"module"},{"name":"A","href":"#","kind":"module"}],"toc":[],"source_anchor":"../../src/a.ml.html","preamble":"","content":"<div class=\"odoc-spec\"><div class=\"spec module anchored\" id=\"module-B\"><a href=\"#module-B\" class=\"anchor\"></a><a href=\"../../src/a.ml.html#module-B\" class=\"source_link\">Source</a><code><span><span class=\"keyword\">module</span> <a href=\"B/index.html\">B</a></span><span> : <span class=\"keyword\">sig</span> ... <span class=\"keyword\">end</span></span></code></div></div>","resources":[],"assets":[]} 45 46 $ cat html/Main/A/B/index.html.json 47 + {"header":"<h1>Module <code><span>A.B</span></code><a href=\"../../../src/a.ml.html#module-B\" class=\"source_link\">Source</a></h1>","type":"documentation","uses_katex":false,"breadcrumbs":[{"name":"Index","href":"../../../index.html","kind":"leaf-page"},{"name":"Main","href":"../../index.html","kind":"module"},{"name":"A","href":"../index.html","kind":"module"},{"name":"B","href":"#","kind":"module"}],"toc":[],"source_anchor":"../../../src/a.ml.html#module-B","preamble":"","content":"","resources":[],"assets":[]} 48 49 $ cat html/src/a.ml.html.json 50 + {"type":"source","breadcrumbs":[{"name":"Index","href":"../index.html","kind":"leaf-page"},{"name":"src","href":"index.html","kind":"page"},{"name":"a.ml","href":"#","kind":"source"}],"global_toc":null,"header":"<h1>Source file <code><span>a.ml</span></code></h1>","content":"<pre class=\"source_container\"><code class=\"source_line_column\"><a id=\"L1\" class=\"source_line\" href=\"#L1\">1</a>\u000A</code><code class=\"source_code\"><span><span class=\"MODULE\"><span id=\"module-B\"></span>module</span> <span class=\"UIDENT\">B</span> <span class=\"EQUAL\">=</span> <span class=\"STRUCT\">struct</span> <span class=\"END\">end</span><span class=\"EOL\">\u000A</span></span></code></pre>"}
+12 -20
odoc/test/integration/markdown-with-belt.t/run.t
··· 28 29 For higher order functions, it will be suffixed **U** if it takes uncurried callback. 30 31 - ```ocaml 32 - val forEach : 'a t -> ('a -> unit) -> unit 33 - val forEachU : 'a t -> ('a -> unit [\@u]) -> unit 34 - ``` 35 In general, uncurried version will be faster, but it may be less familiar to people who have a background in functional programming. 36 37 **A special encoding for collection safety** ··· 40 41 The original OCaml stdlib solved the problem using *functor* which creates a big closure at runtime and makes dead code elimination much harder. We use a phantom type to solve the problem: 42 43 - ```ocaml 44 - module Comparable1 = Belt.Id.MakeComparable (struct 45 type t = int * int 46 let cmp (a0, a1) (b0, b1) = 47 match Pervasives.compare a0 b0 with 48 - | 0 -> Pervasives.compare a1 b1 49 - | c -> c 50 end) 51 52 let mySet1 = Belt.Set.make ~id:(module Comparable1) ··· 55 type t = int * int 56 let cmp (a0, a1) (b0, b1) = 57 match Pervasives.compare a0 b0 with 58 - | 0 -> Pervasives.compare a1 b1 59 - | c -> c 60 end) 61 62 - let mySet2 = Belt.Set.make ~id:(module Comparable2) 63 - ``` 64 Here, the compiler would infer `mySet1` and `mySet2` having different type, so e.g. a \`merge\` operation that tries to merge these two sets will correctly fail. 65 66 - ```ocaml 67 - val mySet1 : (int * int, Comparable1.identity) t 68 - val mySet2 : (int * int, Comparable2.identity) t 69 - ``` 70 `Comparable1.identity` and `Comparable2.identity` are not the same using our encoding scheme. 71 72 **Collection Hierarchy** 73 74 In general, we provide a generic collection module, but also create specialized modules for commonly used data type. Take *Belt.Set* for example, we provide: 75 76 - ```ocaml 77 - Belt.Set 78 Belt.Set.Int 79 - Belt.Set.String 80 - ``` 81 The specialized modules *Belt.Set.Int*, *Belt.Set.String* are in general more efficient. 82 83 Currently, both *Belt\_Set* and *Belt.Set* are accessible to users for some technical reasons, we **strongly recommend** users stick to qualified import, *Belt.Set*, we may hide the internal, *i.e*, *Belt\_Set* in the future
··· 28 29 For higher order functions, it will be suffixed **U** if it takes uncurried callback. 30 31 + <x-ocaml mode="interactive"> val forEach : 'a t -&gt; ('a -&gt; unit) -&gt; unit 32 + val forEachU : 'a t -&gt; ('a -&gt; unit [\@u]) -&gt; unit</x-ocaml> 33 In general, uncurried version will be faster, but it may be less familiar to people who have a background in functional programming. 34 35 **A special encoding for collection safety** ··· 38 39 The original OCaml stdlib solved the problem using *functor* which creates a big closure at runtime and makes dead code elimination much harder. We use a phantom type to solve the problem: 40 41 + <x-ocaml mode="interactive"> module Comparable1 = Belt.Id.MakeComparable (struct 42 type t = int * int 43 let cmp (a0, a1) (b0, b1) = 44 match Pervasives.compare a0 b0 with 45 + | 0 -&gt; Pervasives.compare a1 b1 46 + | c -&gt; c 47 end) 48 49 let mySet1 = Belt.Set.make ~id:(module Comparable1) ··· 52 type t = int * int 53 let cmp (a0, a1) (b0, b1) = 54 match Pervasives.compare a0 b0 with 55 + | 0 -&gt; Pervasives.compare a1 b1 56 + | c -&gt; c 57 end) 58 59 + let mySet2 = Belt.Set.make ~id:(module Comparable2)</x-ocaml> 60 Here, the compiler would infer `mySet1` and `mySet2` having different type, so e.g. a \`merge\` operation that tries to merge these two sets will correctly fail. 61 62 + <x-ocaml mode="interactive"> val mySet1 : (int * int, Comparable1.identity) t 63 + val mySet2 : (int * int, Comparable2.identity) t</x-ocaml> 64 `Comparable1.identity` and `Comparable2.identity` are not the same using our encoding scheme. 65 66 **Collection Hierarchy** 67 68 In general, we provide a generic collection module, but also create specialized modules for commonly used data type. Take *Belt.Set* for example, we provide: 69 70 + <x-ocaml mode="interactive"> Belt.Set 71 Belt.Set.Int 72 + Belt.Set.String</x-ocaml> 73 The specialized modules *Belt.Set.Int*, *Belt.Set.String* are in general more efficient. 74 75 Currently, both *Belt\_Set* and *Belt.Set* are accessible to users for some technical reasons, we **strongly recommend** users stick to qualified import, *Belt.Set*, we may hide the internal, *i.e*, *Belt\_Set* in the future
+1 -5
odoc/test/integration/markdown.t/run.t
··· 8 Warning: '{{!...} ...}' (cross-reference) should not be empty. 9 File "page.mld", line 35, characters 49-59: 10 Warning: '{{!...} ...}' (cross-reference) should not be empty. 11 - File "page.mld", line 125, characters 0-11: 12 - Warning: Tags are not allowed in pages. 13 $ odoc compile --package test test.cmti 14 $ odoc compile --package test -I . test2.cmti 15 $ odoc compile --package list -I . list.cmti ··· 155 156 Inline `code`. 157 158 - ```ocaml 159 - let _ = "Block code" 160 - ``` 161 ```text 162 Code block with {[inner code block syntax]} 163 ```
··· 8 Warning: '{{!...} ...}' (cross-reference) should not be empty. 9 File "page.mld", line 35, characters 49-59: 10 Warning: '{{!...} ...}' (cross-reference) should not be empty. 11 $ odoc compile --package test test.cmti 12 $ odoc compile --package test -I . test2.cmti 13 $ odoc compile --package list -I . list.cmti ··· 153 154 Inline `code`. 155 156 + <x-ocaml mode="interactive">let _ = &quot;Block code&quot;</x-ocaml> 157 ```text 158 Code block with {[inner code block syntax]} 159 ```
+3 -3
odoc/test/model/semantics/test.ml
··· 769 let followed_by_code_block = 770 test "@author Foo\n{[bar]}"; 771 [%expect 772 - {| {"value":[{"`Tag":{"`Author":"Foo"}},{"`Code_block":["None","bar"]}],"warnings":["File \"f.ml.mld\":\nPages (.mld files) should start with a heading.","File \"f.ml.mld\":\nPages (.mld files) should start with a heading."]} |}] 773 774 let followed_by_verbatim = 775 test "@author Foo\n{v bar v}"; ··· 906 let in_code_block = 907 test "{[@author Foo]}"; 908 [%expect 909 - {| {"value":[{"`Code_block":["None","@author Foo"]}],"warnings":["File \"f.ml.mld\":\nPages (.mld files) should start with a heading."]} |}] 910 911 let in_verbatim = 912 test "{v @author Foo v}"; ··· 917 let after_code_block = 918 test "{[foo]} @author Bar"; 919 [%expect 920 - {| {"value":[{"`Code_block":["None","foo"]},{"`Tag":{"`Author":"Bar"}}],"warnings":["File \"f.ml\", line 1, characters 8-19:\n'@author' should begin on its own line.","File \"f.ml.mld\":\nPages (.mld files) should start with a heading.","File \"f.ml.mld\":\nPages (.mld files) should start with a heading."]} |}] 921 922 let after_verbatim = 923 test "{v foo v} @author Bar";
··· 769 let followed_by_code_block = 770 test "@author Foo\n{[bar]}"; 771 [%expect 772 + {| {"value":[{"`Tag":{"`Author":"Foo"}},{"`Code_block":{"meta":"None","delimiter":"None","content":"bar","output":"None"}}],"warnings":["File \"f.ml.mld\":\nPages (.mld files) should start with a heading.","File \"f.ml.mld\":\nPages (.mld files) should start with a heading."]} |}] 773 774 let followed_by_verbatim = 775 test "@author Foo\n{v bar v}"; ··· 906 let in_code_block = 907 test "{[@author Foo]}"; 908 [%expect 909 + {| {"value":[{"`Code_block":{"meta":"None","delimiter":"None","content":"@author Foo","output":"None"}}],"warnings":["File \"f.ml.mld\":\nPages (.mld files) should start with a heading."]} |}] 910 911 let in_verbatim = 912 test "{v @author Foo v}"; ··· 917 let after_code_block = 918 test "{[foo]} @author Bar"; 919 [%expect 920 + {| {"value":[{"`Code_block":{"meta":"None","delimiter":"None","content":"foo","output":"None"}},{"`Tag":{"`Author":"Bar"}}],"warnings":["File \"f.ml\", line 1, characters 8-19:\n'@author' should begin on its own line.","File \"f.ml.mld\":\nPages (.mld files) should start with a heading.","File \"f.ml.mld\":\nPages (.mld files) should start with a heading."]} |}] 921 922 let after_verbatim = 923 test "{v foo v} @author Bar";
+11
odoc/test/pages/resolution.t/run.t
··· 97 98 $ odoc support-files -o html 99 $ find html -type f | sort 100 html/fonts/KaTeX_AMS-Regular.woff2 101 html/fonts/KaTeX_Caligraphic-Bold.woff2 102 html/fonts/KaTeX_Caligraphic-Regular.woff2
··· 97 98 $ odoc support-files -o html 99 $ find html -type f | sort 100 + html/extensions/admonition.css 101 + html/extensions/docsite.css 102 + html/extensions/docsite.js 103 + html/extensions/dot.css 104 + html/extensions/mermaid.css 105 + html/extensions/msc.css 106 + html/extensions/rfc.css 107 + html/extensions/scrollycode-dark.css 108 + html/extensions/scrollycode-notebook.css 109 + html/extensions/scrollycode-warm.css 110 + html/extensions/scrollycode.css 111 html/fonts/KaTeX_AMS-Regular.woff2 112 html/fonts/KaTeX_Caligraphic-Bold.woff2 113 html/fonts/KaTeX_Caligraphic-Regular.woff2
+4 -4
odoc/test/search/html_search.t/run.t
··· 83 {"id":[{"kind":"Root","name":"Main"},{"kind":"Type","name":"tdzdz"},{"kind":"Constructor","name":"B"}],"doc":"Bliiiiiiiiiii","kind":{"kind":"Constructor","args":{"kind":"Tuple","vals":["int list","int"]},"res":"tdzdz"},"display":{"url":"page/Main/index.html#type-tdzdz.B","html":"<code class=\"entry-kind\">cons</code><code class=\"entry-title\"><span class=\"prefix-name\">Main.tdzdz.</span><span class=\"entry-name\">B</span><code class=\"entry-rhs\"> : int list * int -&gt; tdzdz</code></code><div class=\"entry-comment\"><div><p>Bliiiiiiiiiii</p></div></div>"}} 84 {"id":[{"kind":"Root","name":"J"}],"doc":"a paragraph two","kind":{"kind":"Doc"},"display":{"url":"page/J/index.html","html":"<code class=\"entry-kind\">doc</code><code class=\"entry-title\"><span class=\"entry-name\">J</span></code><div class=\"entry-comment\"><div><p>a paragraph two</p></div></div>"}} 85 {"id":[{"kind":"Root","name":"Main"}],"doc":"a paragraph two","kind":{"kind":"Doc"},"display":{"url":"page/Main/index.html","html":"<code class=\"entry-kind\">doc</code><code class=\"entry-title\"><span class=\"entry-name\">Main</span></code><div class=\"entry-comment\"><div><p>a paragraph two</p></div></div>"}} 86 - {"id":[{"kind":"Root","name":"Main"}],"doc":"a paragraph\nand another\nverbatim\nx + 1\nblibli","kind":{"kind":"Doc"},"display":{"url":"page/Main/index.html","html":"<code class=\"entry-kind\">doc</code><code class=\"entry-title\"><span class=\"entry-name\">Main</span></code><div class=\"entry-comment\"><div><p>a paragraph</p><p>and another</p><pre>verbatim</pre><p><code class=\"odoc-katex-math\">x + 1</code></p><pre class=\"language-ocaml\"><code>blibli</code></pre></div></div>"}} 87 {"id":[{"kind":"Root","name":"Main"}],"doc":"this is a title\nand this is a paragraph","kind":{"kind":"Doc"},"display":{"url":"page/Main/index.html","html":"<code class=\"entry-kind\">doc</code><code class=\"entry-title\"><span class=\"entry-name\">Main</span></code><div class=\"entry-comment\"><div><p>this is a title</p><p>and this is a paragraph</p></div></div>"}} 88 - {"id":[{"kind":"Root","name":"Main"},{"kind":"Module","name":"I"}],"doc":"a paragraph\nand another\nverbatim\nx + 1\nblibli","kind":{"kind":"Doc"},"display":{"url":"page/Main/I/index.html","html":"<code class=\"entry-kind\">doc</code><code class=\"entry-title\"><span class=\"prefix-name\">Main.</span><span class=\"entry-name\">I</span></code><div class=\"entry-comment\"><div><p>a paragraph</p><p>and another</p><pre>verbatim</pre><p><code class=\"odoc-katex-math\">x + 1</code></p><pre class=\"language-ocaml\"><code>blibli</code></pre></div></div>"}} 89 {"id":[{"kind":"Root","name":"J"}],"doc":"a paragraph one","kind":{"kind":"Module"},"display":{"url":"page/J/index.html","html":"<code class=\"entry-kind\">mod</code><code class=\"entry-title\"><span class=\"entry-name\">J</span></code><div class=\"entry-comment\"><div><p>a paragraph one</p></div></div>"}} 90 {"id":[{"kind":"Root","name":"Main"}],"doc":"","kind":{"kind":"Module"},"display":{"url":"page/Main/index.html","html":"<code class=\"entry-kind\">mod</code><code class=\"entry-title\"><span class=\"entry-name\">Main</span></code><div class=\"entry-comment\"><div></div></div>"}} 91 {"id":[{"kind":"Root","name":"Main"},{"kind":"Module","name":"I"}],"doc":"","kind":{"kind":"Module"},"display":{"url":"page/Main/index.html#module-I","html":"<code class=\"entry-kind\">mod</code><code class=\"entry-title\"><span class=\"prefix-name\">Main.</span><span class=\"entry-name\">I</span></code><div class=\"entry-comment\"><div></div></div>"}} 92 {"id":[{"kind":"Root","name":"Main"},{"kind":"Module","name":"M"}],"doc":"","kind":{"kind":"Module"},"display":{"url":"page/Main/index.html#module-M","html":"<code class=\"entry-kind\">mod</code><code class=\"entry-title\"><span class=\"prefix-name\">Main.</span><span class=\"entry-name\">M</span></code><div class=\"entry-comment\"><div></div></div>"}} 93 {"id":[{"kind":"Root","name":"Main"},{"kind":"Module","name":"X"}],"doc":"","kind":{"kind":"Module"},"display":{"url":"page/Main/index.html#module-X","html":"<code class=\"entry-kind\">mod</code><code class=\"entry-title\"><span class=\"prefix-name\">Main.</span><span class=\"entry-name\">X</span></code><div class=\"entry-comment\"><div></div></div>"}} 94 - {"id":[{"kind":"Page","name":"page"}],"doc":"A title\nA paragraph\nsome verbatim\nand code\na list of things bliblib","kind":{"kind":"Page"},"display":{"url":"page/index.html","html":"<code class=\"entry-kind\">page</code><code class=\"entry-title\"><span class=\"entry-name\">page</span></code><div class=\"entry-comment\"><div><p>A title</p><p>A paragraph</p><pre>some verbatim</pre><pre class=\"language-ocaml\"><code>and code</code></pre><ul><li>a list <em>of</em> things</li><li>bliblib</li></ul></div></div>"}} 95 {"id":[{"kind":"Root","name":"Main"},{"kind":"Type","name":"t"}],"doc":"A comment","kind":{"kind":"TypeDecl","private":false,"manifest":"int","constraints":[]},"display":{"url":"page/Main/index.html#type-t","html":"<code class=\"entry-kind\">type</code><code class=\"entry-title\"><span class=\"prefix-name\">Main.</span><span class=\"entry-name\">t</span><code class=\"entry-rhs\"> = int</code></code><div class=\"entry-comment\"><div><p>A comment</p></div></div>"}} 96 {"id":[{"kind":"Root","name":"Main"},{"kind":"Type","name":"tdzdz"}],"doc":"A comment aaaaaaaaaa","kind":{"kind":"TypeDecl","private":false,"manifest":null,"constraints":[]},"display":{"url":"page/Main/index.html#type-tdzdz","html":"<code class=\"entry-kind\">type</code><code class=\"entry-title\"><span class=\"prefix-name\">Main.</span><span class=\"entry-name\">tdzdz</span><code class=\"entry-rhs\"> = A of int * int | B of int list * int</code></code><div class=\"entry-comment\"><div><p>A comment aaaaaaaaaa</p></div></div>"}} 97 {"id":[{"kind":"Root","name":"Main"},{"kind":"Module","name":"M"},{"kind":"Type","name":"t"}],"doc":"dsdsd","kind":{"kind":"TypeDecl","private":false,"manifest":null,"constraints":[]},"display":{"url":"page/Main/M/index.html#type-t","html":"<code class=\"entry-kind\">type</code><code class=\"entry-title\"><span class=\"prefix-name\">Main.M.</span><span class=\"entry-name\">t</span></code><div class=\"entry-comment\"><div><p>dsdsd</p></div></div>"}} ··· 101 {"id":[{"kind":"Root","name":"Main"},{"kind":"Value","name":"lorem4"}],"doc":"lorem 4","kind":{"kind":"Value","type":"int"},"display":{"url":"page/Main/index.html#val-lorem4","html":"<code class=\"entry-kind\">val</code><code class=\"entry-title\"><span class=\"prefix-name\">Main.</span><span class=\"entry-name\">lorem4</span><code class=\"entry-rhs\"> : int</code></code><div class=\"entry-comment\"><div><p>lorem 4</p></div></div>"}} 102 {"id":[{"kind":"Root","name":"Main"},{"kind":"Value","name":"lorem"}],"doc":"lorem 1 and a link","kind":{"kind":"Value","type":"int"},"display":{"url":"page/Main/index.html#val-lorem","html":"<code class=\"entry-kind\">val</code><code class=\"entry-title\"><span class=\"prefix-name\">Main.</span><span class=\"entry-name\">lorem</span><code class=\"entry-rhs\"> : int</code></code><div class=\"entry-comment\"><div><p>lorem 1 and a <span>link</span></p></div></div>"}} 103 {"id":[{"kind":"Root","name":"Main"},{"kind":"Value","name":"uu"}],"doc":"","kind":{"kind":"Value","type":"int"},"display":{"url":"page/Main/index.html#val-uu","html":"<code class=\"entry-kind\">val</code><code class=\"entry-title\"><span class=\"prefix-name\">Main.</span><span class=\"entry-name\">uu</span><code class=\"entry-rhs\"> : int</code></code><div class=\"entry-comment\"><div></div></div>"}} 104 - {"id":[{"kind":"Root","name":"Main"},{"kind":"Value","name":"v"}],"doc":"a reference , and some formatted content with code and\n code blocks","kind":{"kind":"Value","type":"int"},"display":{"url":"page/Main/index.html#val-v","html":"<code class=\"entry-kind\">val</code><code class=\"entry-title\"><span class=\"prefix-name\">Main.</span><span class=\"entry-name\">v</span><code class=\"entry-rhs\"> : int</code></code><div class=\"entry-comment\"><div><p>a reference <span><code>t</code></span>, and some <em>formatted</em> <b>content</b> with <code>code</code> and</p><pre class=\"language-ocaml\"><code> code blocks</code></pre></div></div>"}} 105 {"id":[{"kind":"Root","name":"Main"},{"kind":"Value","name":"x"}],"doc":"","kind":{"kind":"Value","type":"int"},"display":{"url":"page/Main/index.html#val-x","html":"<code class=\"entry-kind\">val</code><code class=\"entry-title\"><span class=\"prefix-name\">Main.</span><span class=\"entry-name\">x</span><code class=\"entry-rhs\"> : int</code></code><div class=\"entry-comment\"><div></div></div>"}} 106 {"id":[{"kind":"Root","name":"Main"},{"kind":"Value","name":"y"}],"doc":"","kind":{"kind":"Value","type":"int"},"display":{"url":"page/Main/index.html#val-y","html":"<code class=\"entry-kind\">val</code><code class=\"entry-title\"><span class=\"prefix-name\">Main.</span><span class=\"entry-name\">y</span><code class=\"entry-rhs\"> : int</code></code><div class=\"entry-comment\"><div></div></div>"}} 107 {"id":[{"kind":"Root","name":"Main"},{"kind":"Module","name":"I"},{"kind":"Value","name":"x"}],"doc":"","kind":{"kind":"Value","type":"int"},"display":{"url":"page/Main/I/index.html#val-x","html":"<code class=\"entry-kind\">val</code><code class=\"entry-title\"><span class=\"prefix-name\">Main.I.</span><span class=\"entry-name\">x</span><code class=\"entry-rhs\"> : int</code></code><div class=\"entry-comment\"><div></div></div>"}}
··· 83 {"id":[{"kind":"Root","name":"Main"},{"kind":"Type","name":"tdzdz"},{"kind":"Constructor","name":"B"}],"doc":"Bliiiiiiiiiii","kind":{"kind":"Constructor","args":{"kind":"Tuple","vals":["int list","int"]},"res":"tdzdz"},"display":{"url":"page/Main/index.html#type-tdzdz.B","html":"<code class=\"entry-kind\">cons</code><code class=\"entry-title\"><span class=\"prefix-name\">Main.tdzdz.</span><span class=\"entry-name\">B</span><code class=\"entry-rhs\"> : int list * int -&gt; tdzdz</code></code><div class=\"entry-comment\"><div><p>Bliiiiiiiiiii</p></div></div>"}} 84 {"id":[{"kind":"Root","name":"J"}],"doc":"a paragraph two","kind":{"kind":"Doc"},"display":{"url":"page/J/index.html","html":"<code class=\"entry-kind\">doc</code><code class=\"entry-title\"><span class=\"entry-name\">J</span></code><div class=\"entry-comment\"><div><p>a paragraph two</p></div></div>"}} 85 {"id":[{"kind":"Root","name":"Main"}],"doc":"a paragraph two","kind":{"kind":"Doc"},"display":{"url":"page/Main/index.html","html":"<code class=\"entry-kind\">doc</code><code class=\"entry-title\"><span class=\"entry-name\">Main</span></code><div class=\"entry-comment\"><div><p>a paragraph two</p></div></div>"}} 86 + {"id":[{"kind":"Root","name":"Main"}],"doc":"a paragraph\nand another\nverbatim\nx + 1\nblibli","kind":{"kind":"Doc"},"display":{"url":"page/Main/index.html","html":"<code class=\"entry-kind\">doc</code><code class=\"entry-title\"><span class=\"entry-name\">Main</span></code><div class=\"entry-comment\"><div><p>a paragraph</p><p>and another</p><pre>verbatim</pre><p><code class=\"odoc-katex-math\">x + 1</code></p><x-ocaml mode=\"interactive\">blibli</x-ocaml></div></div>"}} 87 {"id":[{"kind":"Root","name":"Main"}],"doc":"this is a title\nand this is a paragraph","kind":{"kind":"Doc"},"display":{"url":"page/Main/index.html","html":"<code class=\"entry-kind\">doc</code><code class=\"entry-title\"><span class=\"entry-name\">Main</span></code><div class=\"entry-comment\"><div><p>this is a title</p><p>and this is a paragraph</p></div></div>"}} 88 + {"id":[{"kind":"Root","name":"Main"},{"kind":"Module","name":"I"}],"doc":"a paragraph\nand another\nverbatim\nx + 1\nblibli","kind":{"kind":"Doc"},"display":{"url":"page/Main/I/index.html","html":"<code class=\"entry-kind\">doc</code><code class=\"entry-title\"><span class=\"prefix-name\">Main.</span><span class=\"entry-name\">I</span></code><div class=\"entry-comment\"><div><p>a paragraph</p><p>and another</p><pre>verbatim</pre><p><code class=\"odoc-katex-math\">x + 1</code></p><x-ocaml mode=\"interactive\">blibli</x-ocaml></div></div>"}} 89 {"id":[{"kind":"Root","name":"J"}],"doc":"a paragraph one","kind":{"kind":"Module"},"display":{"url":"page/J/index.html","html":"<code class=\"entry-kind\">mod</code><code class=\"entry-title\"><span class=\"entry-name\">J</span></code><div class=\"entry-comment\"><div><p>a paragraph one</p></div></div>"}} 90 {"id":[{"kind":"Root","name":"Main"}],"doc":"","kind":{"kind":"Module"},"display":{"url":"page/Main/index.html","html":"<code class=\"entry-kind\">mod</code><code class=\"entry-title\"><span class=\"entry-name\">Main</span></code><div class=\"entry-comment\"><div></div></div>"}} 91 {"id":[{"kind":"Root","name":"Main"},{"kind":"Module","name":"I"}],"doc":"","kind":{"kind":"Module"},"display":{"url":"page/Main/index.html#module-I","html":"<code class=\"entry-kind\">mod</code><code class=\"entry-title\"><span class=\"prefix-name\">Main.</span><span class=\"entry-name\">I</span></code><div class=\"entry-comment\"><div></div></div>"}} 92 {"id":[{"kind":"Root","name":"Main"},{"kind":"Module","name":"M"}],"doc":"","kind":{"kind":"Module"},"display":{"url":"page/Main/index.html#module-M","html":"<code class=\"entry-kind\">mod</code><code class=\"entry-title\"><span class=\"prefix-name\">Main.</span><span class=\"entry-name\">M</span></code><div class=\"entry-comment\"><div></div></div>"}} 93 {"id":[{"kind":"Root","name":"Main"},{"kind":"Module","name":"X"}],"doc":"","kind":{"kind":"Module"},"display":{"url":"page/Main/index.html#module-X","html":"<code class=\"entry-kind\">mod</code><code class=\"entry-title\"><span class=\"prefix-name\">Main.</span><span class=\"entry-name\">X</span></code><div class=\"entry-comment\"><div></div></div>"}} 94 + {"id":[{"kind":"Page","name":"page"}],"doc":"A title\nA paragraph\nsome verbatim\nand code\na list of things bliblib","kind":{"kind":"Page"},"display":{"url":"page/index.html","html":"<code class=\"entry-kind\">page</code><code class=\"entry-title\"><span class=\"entry-name\">page</span></code><div class=\"entry-comment\"><div><p>A title</p><p>A paragraph</p><pre>some verbatim</pre><x-ocaml mode=\"interactive\">and code</x-ocaml><ul><li>a list <em>of</em> things</li><li>bliblib</li></ul></div></div>"}} 95 {"id":[{"kind":"Root","name":"Main"},{"kind":"Type","name":"t"}],"doc":"A comment","kind":{"kind":"TypeDecl","private":false,"manifest":"int","constraints":[]},"display":{"url":"page/Main/index.html#type-t","html":"<code class=\"entry-kind\">type</code><code class=\"entry-title\"><span class=\"prefix-name\">Main.</span><span class=\"entry-name\">t</span><code class=\"entry-rhs\"> = int</code></code><div class=\"entry-comment\"><div><p>A comment</p></div></div>"}} 96 {"id":[{"kind":"Root","name":"Main"},{"kind":"Type","name":"tdzdz"}],"doc":"A comment aaaaaaaaaa","kind":{"kind":"TypeDecl","private":false,"manifest":null,"constraints":[]},"display":{"url":"page/Main/index.html#type-tdzdz","html":"<code class=\"entry-kind\">type</code><code class=\"entry-title\"><span class=\"prefix-name\">Main.</span><span class=\"entry-name\">tdzdz</span><code class=\"entry-rhs\"> = A of int * int | B of int list * int</code></code><div class=\"entry-comment\"><div><p>A comment aaaaaaaaaa</p></div></div>"}} 97 {"id":[{"kind":"Root","name":"Main"},{"kind":"Module","name":"M"},{"kind":"Type","name":"t"}],"doc":"dsdsd","kind":{"kind":"TypeDecl","private":false,"manifest":null,"constraints":[]},"display":{"url":"page/Main/M/index.html#type-t","html":"<code class=\"entry-kind\">type</code><code class=\"entry-title\"><span class=\"prefix-name\">Main.M.</span><span class=\"entry-name\">t</span></code><div class=\"entry-comment\"><div><p>dsdsd</p></div></div>"}} ··· 101 {"id":[{"kind":"Root","name":"Main"},{"kind":"Value","name":"lorem4"}],"doc":"lorem 4","kind":{"kind":"Value","type":"int"},"display":{"url":"page/Main/index.html#val-lorem4","html":"<code class=\"entry-kind\">val</code><code class=\"entry-title\"><span class=\"prefix-name\">Main.</span><span class=\"entry-name\">lorem4</span><code class=\"entry-rhs\"> : int</code></code><div class=\"entry-comment\"><div><p>lorem 4</p></div></div>"}} 102 {"id":[{"kind":"Root","name":"Main"},{"kind":"Value","name":"lorem"}],"doc":"lorem 1 and a link","kind":{"kind":"Value","type":"int"},"display":{"url":"page/Main/index.html#val-lorem","html":"<code class=\"entry-kind\">val</code><code class=\"entry-title\"><span class=\"prefix-name\">Main.</span><span class=\"entry-name\">lorem</span><code class=\"entry-rhs\"> : int</code></code><div class=\"entry-comment\"><div><p>lorem 1 and a <span>link</span></p></div></div>"}} 103 {"id":[{"kind":"Root","name":"Main"},{"kind":"Value","name":"uu"}],"doc":"","kind":{"kind":"Value","type":"int"},"display":{"url":"page/Main/index.html#val-uu","html":"<code class=\"entry-kind\">val</code><code class=\"entry-title\"><span class=\"prefix-name\">Main.</span><span class=\"entry-name\">uu</span><code class=\"entry-rhs\"> : int</code></code><div class=\"entry-comment\"><div></div></div>"}} 104 + {"id":[{"kind":"Root","name":"Main"},{"kind":"Value","name":"v"}],"doc":"a reference , and some formatted content with code and\n code blocks","kind":{"kind":"Value","type":"int"},"display":{"url":"page/Main/index.html#val-v","html":"<code class=\"entry-kind\">val</code><code class=\"entry-title\"><span class=\"prefix-name\">Main.</span><span class=\"entry-name\">v</span><code class=\"entry-rhs\"> : int</code></code><div class=\"entry-comment\"><div><p>a reference <span><code>t</code></span>, and some <em>formatted</em> <b>content</b> with <code>code</code> and</p><x-ocaml mode=\"interactive\"> code blocks</x-ocaml></div></div>"}} 105 {"id":[{"kind":"Root","name":"Main"},{"kind":"Value","name":"x"}],"doc":"","kind":{"kind":"Value","type":"int"},"display":{"url":"page/Main/index.html#val-x","html":"<code class=\"entry-kind\">val</code><code class=\"entry-title\"><span class=\"prefix-name\">Main.</span><span class=\"entry-name\">x</span><code class=\"entry-rhs\"> : int</code></code><div class=\"entry-comment\"><div></div></div>"}} 106 {"id":[{"kind":"Root","name":"Main"},{"kind":"Value","name":"y"}],"doc":"","kind":{"kind":"Value","type":"int"},"display":{"url":"page/Main/index.html#val-y","html":"<code class=\"entry-kind\">val</code><code class=\"entry-title\"><span class=\"prefix-name\">Main.</span><span class=\"entry-name\">y</span><code class=\"entry-rhs\"> : int</code></code><div class=\"entry-comment\"><div></div></div>"}} 107 {"id":[{"kind":"Root","name":"Main"},{"kind":"Module","name":"I"},{"kind":"Value","name":"x"}],"doc":"","kind":{"kind":"Value","type":"int"},"display":{"url":"page/Main/I/index.html#val-x","html":"<code class=\"entry-kind\">val</code><code class=\"entry-title\"><span class=\"prefix-name\">Main.I.</span><span class=\"entry-name\">x</span><code class=\"entry-rhs\"> : int</code></code><div class=\"entry-comment\"><div></div></div>"}}
+41 -31
odoc/test/xref2/classes.t/run.t
··· 51 [] 52 ] 53 }, 54 - "value": "Abstract" 55 } 56 $ odoc_print e.odoc -r g | jq . 57 { ··· 91 [] 92 ] 93 }, 94 - "value": "Abstract" 95 } 96 $ odoc_print e.odoc -r d | jq '.expr.Signature.items[1].Method.type_' 97 { ··· 118 $ odoc_print c.odoc -r g | jq '.type_' 119 { 120 "Arrow": [ 121 - "None", 122 - { 123 - "Class": [ 124 - { 125 - "`Resolved": { 126 - "`ClassType": [ 127 - { 128 - "`Identifier": { 129 - "`Root": [ 130 - "None", 131 - "B" 132 - ] 133 - } 134 - }, 135 - "u" 136 - ] 137 - } 138 - }, 139 - [] 140 - ] 141 - }, 142 - { 143 - "Constr": [ 144 - { 145 - "`Resolved": { 146 - "`CoreType": "unit" 147 - } 148 - }, 149 [] 150 ] 151 - } 152 ] 153 } 154
··· 51 [] 52 ] 53 }, 54 + "value": "Abstract", 55 + "modalities": [] 56 } 57 $ odoc_print e.odoc -r g | jq . 58 { ··· 92 [] 93 ] 94 }, 95 + "value": "Abstract", 96 + "modalities": [] 97 } 98 $ odoc_print e.odoc -r d | jq '.expr.Signature.items[1].Method.type_' 99 { ··· 120 $ odoc_print c.odoc -r g | jq '.type_' 121 { 122 "Arrow": [ 123 + [ 124 + "None", 125 + { 126 + "Class": [ 127 + { 128 + "`Resolved": { 129 + "`ClassType": [ 130 + { 131 + "`Identifier": { 132 + "`Root": [ 133 + "None", 134 + "B" 135 + ] 136 + } 137 + }, 138 + "u" 139 + ] 140 + } 141 + }, 142 + [] 143 + ] 144 + } 145 + ], 146 + [ 147 + { 148 + "Constr": [ 149 + { 150 + "`Resolved": { 151 + "`CoreType": "unit" 152 + } 153 + }, 154 + [] 155 + ] 156 + }, 157 + [ 158 + [], 159 [] 160 ] 161 + ] 162 ] 163 } 164
+46 -30
odoc/test/xref2/github_issue_1001.t/run.t
··· 13 "doc": { "elements": [], "warnings_tag": "None" }, 14 "type_": { 15 "Arrow": [ 16 - { "Some": { "Optional": "optional" } }, 17 - { "Constr": [ { "`Resolved": { "`CoreType": "int" } }, [] ] }, 18 - { 19 - "Arrow": [ 20 - "None", 21 - { "Constr": [ { "`Resolved": { "`CoreType": "unit" } }, [] ] }, 22 - { "Var": "a" } 23 - ] 24 - } 25 ] 26 }, 27 - "value": "Abstract" 28 } 29 30 Harder case contains a "RawOptional": ··· 36 "doc": { "elements": [], "warnings_tag": "None" }, 37 "type_": { 38 "Arrow": [ 39 - { "Some": { "RawOptional": "optional" } }, 40 - { 41 - "Constr": [ 42 - { 43 - "`Resolved": { 44 - "`Identifier": { 45 - "`Type": [ { "`Root": [ "None", "Test" ] }, "hard" ] 46 } 47 - } 48 - }, 49 - [] 50 - ] 51 - }, 52 - { 53 - "Arrow": [ 54 - "None", 55 - { "Constr": [ { "`Resolved": { "`CoreType": "unit" } }, [] ] }, 56 - { "Var": "a" } 57 - ] 58 - } 59 ] 60 }, 61 - "value": "Abstract" 62 }
··· 13 "doc": { "elements": [], "warnings_tag": "None" }, 14 "type_": { 15 "Arrow": [ 16 + [ 17 + { "Some": { "Optional": "optional" } }, 18 + { "Constr": [ { "`Resolved": { "`CoreType": "int" } }, [] ] } 19 + ], 20 + [ 21 + { 22 + "Arrow": [ 23 + [ 24 + "None", 25 + { "Constr": [ { "`Resolved": { "`CoreType": "unit" } }, [] ] } 26 + ], 27 + [ { "Var": [ "a", "None" ] }, [ [], [] ] ] 28 + ] 29 + }, 30 + [ [], [] ] 31 + ] 32 ] 33 }, 34 + "value": "Abstract", 35 + "modalities": [] 36 } 37 38 Harder case contains a "RawOptional": ··· 44 "doc": { "elements": [], "warnings_tag": "None" }, 45 "type_": { 46 "Arrow": [ 47 + [ 48 + { "Some": { "RawOptional": "optional" } }, 49 + { 50 + "Constr": [ 51 + { 52 + "`Resolved": { 53 + "`Identifier": { 54 + "`Type": [ { "`Root": [ "None", "Test" ] }, "hard" ] 55 + } 56 } 57 + }, 58 + [] 59 + ] 60 + } 61 + ], 62 + [ 63 + { 64 + "Arrow": [ 65 + [ 66 + "None", 67 + { "Constr": [ { "`Resolved": { "`CoreType": "unit" } }, [] ] } 68 + ], 69 + [ { "Var": [ "a", "None" ] }, [ [], [] ] ] 70 + ] 71 + }, 72 + [ [], [] ] 73 + ] 74 ] 75 }, 76 + "value": "Abstract", 77 + "modalities": [] 78 }
+3 -2
odoc/test/xref2/github_issue_930.t/run.t
··· 31 concat function with simplified types (t -> t): 32 33 $ odoc_print test.odocl -r S0_with_creators_base.concat | jq -c '.type_.Arrow[1].Constr[0]' 34 - {"`Resolved":{"`Identifier":{"`Type":[{"`ModuleType":[{"`Root":["None","Test"]},"S0_with_creators_base"]},"t"]}}} 35 36 $ odoc_print test.odocl -r S0_with_creators_base.concat | jq -c '.type_.Arrow[2].Constr[0]' 37 - {"`Resolved":{"`Identifier":{"`Type":[{"`ModuleType":[{"`Root":["None","Test"]},"S0_with_creators_base"]},"t"]}}} 38 39 === Test 3: Deeply nested includes === 40
··· 31 concat function with simplified types (t -> t): 32 33 $ odoc_print test.odocl -r S0_with_creators_base.concat | jq -c '.type_.Arrow[1].Constr[0]' 34 + jq: error (at <stdin>:65): Cannot index array with string "Constr" 35 + [5] 36 37 $ odoc_print test.odocl -r S0_with_creators_base.concat | jq -c '.type_.Arrow[2].Constr[0]' 38 + null 39 40 === Test 3: Deeply nested includes === 41
+2 -1
odoc/test/xref2/hidden_modules.t/run.t
··· 154 [] 155 ] 156 }, 157 - "value": "Abstract" 158 } 159 160
··· 154 [] 155 ] 156 }, 157 + "value": "Abstract", 158 + "modalities": [] 159 } 160 161