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 33 return 0 34 34 } 35 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 - 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. 54 38 //Provides: caml_make_local_vect 55 39 //Requires: caml_make_vect 56 40 function caml_make_local_vect(len, init) { 57 41 return caml_make_vect(len, init); 58 42 } 59 43 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 - } 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 }; 65 47 66 - //Provides: caml_blocking_mutex_lock 67 - function caml_blocking_mutex_lock(_m) { 68 - return 0; 48 + //Provides: caml_domain_tls_get 49 + //Requires: jtw_tls_state 50 + function caml_domain_tls_get() { 51 + return jtw_tls_state.value; 69 52 } 70 53 71 - //Provides: caml_blocking_mutex_unlock 72 - function caml_blocking_mutex_unlock(_m) { 54 + //Provides: caml_domain_tls_set 55 + //Requires: jtw_tls_state 56 + function caml_domain_tls_set(v) { 57 + jtw_tls_state.value = v; 73 58 return 0; 74 59 } 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 -
+303 -52
js_top_worker/test/cram/directives.t/run.t
··· 12 12 N 13 13 $ unix_client setup '' 14 14 {mime_vals:[];stderr:S(error while evaluating #enable "pretty";; 15 - error while evaluating #disable "shortvar";;);stdout:S(OCaml version 5.4.0 15 + error while evaluating #disable "shortvar";;);stdout:S(OCaml version 5.4.1 16 16 Unknown directive enable. 17 17 Unknown directive disable.)} 18 18 ··· 495 495 $ unix_client exec_toplevel '' '# #list;;' 496 496 {mime_vals:[];parts:[];script:S(# #list;; 497 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) 498 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) 499 505 angstrom.async (version: n/a) 500 506 angstrom.lwt-unix (version: n/a) 501 507 angstrom.unix (version: n/a) 502 508 asn1-combinators (version: 0.3.2) 503 509 astring (version: 0.8.5) 504 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) 505 534 base (version: v0.17.3) 506 535 base.base_internalhash_types (version: v0.17.3) 507 536 base.md5 (version: v0.17.3) 508 537 base.shadow_stdlib (version: v0.17.3) 509 538 base64 (version: 3.5.2) 510 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) 511 545 bigarray-compat (version: 1.1.0) 512 546 bigstringaf (version: 0.10.0) 547 + bin_prot (version: v0.17.0) 548 + bin_prot.shape (version: v0.17.0) 513 549 bos (version: 0.2.1) 514 550 bos.setup (version: 0.2.1) 515 551 bos.top (version: 0.2.1) ··· 524 560 bytesrw.unix (version: 0.2.0) 525 561 ca-certs (version: v1.0.1) 526 562 camlp-streams (version: n/a) 563 + capitalization (version: v0.17.0) 527 564 caqti (version: v2.2.4) 528 565 caqti-lwt (version: v2.2.4) 529 566 caqti-lwt.unix (version: v2.2.4) ··· 535 572 checkseum (version: 0.5.2) 536 573 checkseum.c (version: 0.5.2) 537 574 checkseum.ocaml (version: 0.5.2) 538 - chrome-trace (version: 3.21.0) 575 + chrome-trace (version: 3.21.0-13-g1a35cca) 576 + cmarkit (version: 0.3.0) 539 577 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) 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) 546 664 cppo (version: n/a) 547 665 crunch (version: 4.0.0) 548 666 csexp (version: 1.5.2) 549 667 cstruct (version: 6.2.0) 668 + day10 (version: n/a) 669 + day10-web (version: n/a) 550 670 decompress (version: n/a) 551 671 decompress.de (version: 1.5.3) 552 672 decompress.gz (version: 1.5.3) ··· 571 691 dream.sql (version: n/a) 572 692 dream.unix (version: n/a) 573 693 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) 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) 578 698 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) 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) 590 710 dune.configurator (version: n/a) 591 711 duration (version: 0.2.1) 592 - dyn (version: 3.21.0) 593 - dynlink (version: 5.4.0) 712 + dyn (version: 3.21.0-13-g1a35cca) 713 + dynlink (version: 5.4.1) 594 714 eio (version: n/a) 595 715 eio.core (version: n/a) 596 716 eio.mock (version: n/a) ··· 604 724 eqaf (version: 0.10) 605 725 eqaf.bigstring (version: 0.10) 606 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) 607 729 faraday (version: 0.8.2) 730 + faraday-async (version: 0.8.2) 608 731 faraday-lwt (version: 0.8.2) 609 732 faraday-lwt-unix (version: 0.8.2) 610 733 faraday.async (version: n/a) 611 734 faraday.lwt (version: n/a) 612 735 faraday.lwt-unix (version: n/a) 613 736 fiber (version: 3.7.0) 737 + fieldslib (version: v0.17.0) 614 738 findlib (version: 1.9.8) 615 739 findlib.dynload (version: 1.9.8) 616 740 findlib.internal (version: 1.9.8) ··· 622 746 fmt.tty (version: 0.11.0) 623 747 fpath (version: 0.7.3) 624 748 fpath.top (version: 0.7.3) 625 - fs-io (version: 3.21.0) 749 + fs-io (version: 3.21.0-13-g1a35cca) 750 + gel (version: v0.17.0) 626 751 gen (version: 1.1) 627 752 gluten (version: 0.5.2) 628 753 gluten-lwt (version: 0.5.2) ··· 642 767 httpun-lwt-unix (version: 0.1.0) 643 768 httpun-types (version: 0.1.0) 644 769 httpun-ws (version: 0.2.0) 770 + int_repr (version: v0.17.0) 645 771 iomux (version: v0.4) 646 - ipaddr (version: 5.6.1) 647 - ipaddr.top (version: 5.6.1) 648 - ipaddr.unix (version: 5.6.1) 772 + ipaddr (version: 5.6.2) 773 + ipaddr.top (version: 5.6.2) 774 + ipaddr.unix (version: 5.6.2) 649 775 jane-street-headers (version: v0.17.0) 650 776 js_of_ocaml (version: 6.2.0) 651 777 js_of_ocaml-compiler (version: 6.2.0) ··· 660 786 js_of_ocaml.deriving (version: 6.2.0) 661 787 js_top_worker (version: 0.0.1) 662 788 js_top_worker-bin (version: n/a) 663 - js_top_worker-client (version: 0.0.1) 789 + js_top_worker-client (version: n/a) 664 790 js_top_worker-client.msg (version: 0.0.1) 665 791 js_top_worker-client_fut (version: 0.0.1) 666 - js_top_worker-rpc (version: 0.0.1) 792 + js_top_worker-rpc (version: n/a) 667 793 js_top_worker-rpc.message (version: 0.0.1) 668 794 js_top_worker-unix (version: n/a) 669 795 js_top_worker-web (version: 0.0.1) ··· 694 820 lwt.unix (version: 5.9.2) 695 821 lwt_ppx (version: 5.9.3) 696 822 lwt_ssl (version: 1.2.0) 697 - macaddr (version: 5.6.1) 698 - macaddr.top (version: 5.6.1) 823 + macaddr (version: 5.6.2) 824 + macaddr.top (version: 5.6.2) 699 825 magic-mime (version: 1.3.1) 700 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) 701 832 menhir (version: n/a) 702 - menhirCST (version: 20260122) 703 - menhirGLR (version: 20260122) 704 - menhirLib (version: 20260122) 705 - menhirSdk (version: 20260122) 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) 706 843 merlin-lib (version: n/a) 707 844 merlin-lib.analysis (version: 5.6.1-504) 708 845 merlin-lib.commands (version: 5.6.1-504) ··· 722 859 merlin-lib.query_protocol (version: 5.6.1-504) 723 860 merlin-lib.sherlodoc (version: 5.6.1-504) 724 861 merlin-lib.utils (version: 5.6.1-504) 725 - mime_printer (version: 0.0.1) 862 + mime_printer (version: n/a) 726 863 mirage-clock (version: 4.2.0) 727 864 mirage-crypto (version: 1.2.0) 728 865 mirage-crypto-ec (version: 1.2.0) ··· 734 871 mtime.clock (version: 2.1.0) 735 872 mtime.clock.os (version: 2.1.0) 736 873 mtime.top (version: 2.1.0) 737 - multipart_form (version: 0.7.0) 738 - multipart_form-lwt (version: 0.7.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) 739 879 ocaml-compiler-libs (version: n/a) 740 880 ocaml-compiler-libs.bytecomp (version: v0.17.0) 741 881 ocaml-compiler-libs.common (version: v0.17.0) ··· 748 888 ocaml-version (version: n/a) 749 889 ocaml_intrinsics_kernel (version: v0.17.1) 750 890 ocamlbuild (version: 0.16.1) 751 - ocamlc-loc (version: 3.21.0) 752 - ocamldoc (version: 5.4.0) 891 + ocamlc-loc (version: 3.21.0-13-g1a35cca) 892 + ocamldoc (version: 5.4.1) 753 893 ocamlformat-lib (version: 0.28.1) 754 894 ocamlformat-lib.format_ (version: 0.28.1) 755 895 ocamlformat-lib.ocaml_common (version: 0.28.1) ··· 768 908 ocp-indent.utils (version: 1.9.0) 769 909 ocplib-endian (version: n/a) 770 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) 771 955 ohex (version: n/a) 772 956 opam-0install (version: 0.4.2) 773 957 opam-core (version: n/a) 774 - opam-core.cmdliner (version: n/a) 775 958 opam-file-format (version: 2.2.0) 776 959 opam-format (version: n/a) 777 960 opam-repository (version: n/a) 778 961 opam-state (version: n/a) 779 962 optint (version: 0.3.0) 780 - ordering (version: 3.21.0) 963 + ordering (version: 3.21.0-13-g1a35cca) 781 964 parsexp (version: v0.17.0) 782 965 patch (version: 3.1.0) 783 966 pecu (version: 0.7) ··· 785 968 ppx_assert (version: v0.17.0) 786 969 ppx_assert.runtime-lib (version: v0.17.0) 787 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) 788 975 ppx_blob (version: 0.9.0) 789 976 ppx_cold (version: v0.17.0) 790 977 ppx_compare (version: v0.17.0) 791 978 ppx_compare.expander (version: v0.17.0) 792 979 ppx_compare.runtime-lib (version: v0.17.0) 980 + ppx_custom_printf (version: v0.17.0) 793 981 ppx_derivers (version: n/a) 794 982 ppx_deriving (version: n/a) 795 983 ppx_deriving.api (version: 6.1.1) ··· 807 995 ppx_deriving_rpc (version: 10.0.0) 808 996 ppx_deriving_yojson (version: 3.10.0) 809 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) 810 1003 ppx_enumerate (version: v0.17.0) 811 1004 ppx_enumerate.runtime-lib (version: v0.17.0) 812 1005 ppx_expect (version: v0.17.3) ··· 815 1008 ppx_expect.evaluator (version: v0.17.3) 816 1009 ppx_expect.make_corrected_file (version: v0.17.3) 817 1010 ppx_expect.runtime (version: v0.17.3) 1011 + ppx_fields_conv (version: v0.17.0) 1012 + ppx_fixed_literal (version: v0.17.0) 818 1013 ppx_globalize (version: v0.17.2) 819 1014 ppx_hash (version: v0.17.0) 820 1015 ppx_hash.expander (version: v0.17.0) ··· 822 1017 ppx_here (version: v0.17.0) 823 1018 ppx_here.expander (version: v0.17.0) 824 1019 ppx_here.runtime-lib (version: v0.17.0) 1020 + ppx_ignore_instrumentation (version: v0.17.0) 825 1021 ppx_inline_test (version: v0.17.1) 826 1022 ppx_inline_test.config (version: v0.17.1) 827 1023 ppx_inline_test.drop (version: v0.17.1) ··· 829 1025 ppx_inline_test.runner (version: v0.17.1) 830 1026 ppx_inline_test.runner.lib (version: v0.17.1) 831 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) 832 1038 ppx_optcomp (version: v0.17.1) 1039 + ppx_optional (version: v0.17.0) 1040 + ppx_pipebang (version: v0.17.0) 833 1041 ppx_sexp_conv (version: v0.17.1) 834 1042 ppx_sexp_conv.expander (version: v0.17.1) 835 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) 836 1057 ppx_yojson_conv_lib (version: v0.17.0) 837 1058 ppxlib (version: 0.37.0) 838 1059 ppxlib.__private__ (version: n/a) ··· 848 1069 ppxlib.traverse (version: 0.37.0) 849 1070 ppxlib.traverse_builtins (version: 0.37.0) 850 1071 ppxlib_jane (version: v0.17.4) 1072 + ppxlib_register (version: n/a) 851 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) 852 1078 psq (version: 0.2.1) 853 1079 ptime (version: 1.2.0) 854 1080 ptime.clock (version: 1.2.0) ··· 862 1088 re.posix (version: n/a) 863 1089 re.str (version: n/a) 864 1090 result (version: 1.5) 1091 + root (version: n/a) 865 1092 rpclib (version: 10.0.0) 866 1093 rpclib-lwt (version: 10.0.0) 867 1094 rpclib.cmdliner (version: 10.0.0) ··· 872 1099 rpclib.xml (version: 10.0.0) 873 1100 rresult (version: 0.7.0) 874 1101 rresult.top (version: 0.7.0) 875 - runtime_events (version: 5.4.0) 1102 + runtime_events (version: 5.4.1) 876 1103 sedlex (version: 3.7) 877 1104 sedlex.ppx (version: 3.7) 878 1105 sedlex.utils (version: 3.7) 879 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) 880 1111 sexplib0 (version: v0.17.0) 881 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) 882 1119 spawn (version: v0.17.0) 883 1120 spdx_licenses (version: 1.4.0) 1121 + splittable_random (version: v0.17.0) 884 1122 ssl (version: 0.7.0) 885 1123 stdio (version: v0.17.0) 886 - stdlib (version: 5.4.0) 1124 + stdlib (version: 5.4.1) 887 1125 stdlib-shims (version: 0.3.0) 888 - stdune (version: 3.21.0) 889 - str (version: 5.4.0) 1126 + stdune (version: 3.21.0-13-g1a35cca) 1127 + str (version: 5.4.1) 890 1128 stringext (version: 1.6.0) 891 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) 892 1136 thread-table (version: 1.0.0) 893 - threads (version: 5.4.0) 1137 + threads (version: 5.4.1) 894 1138 threads.posix (version: [internal]) 895 1139 time_now (version: v0.17.0) 1140 + timezone (version: v0.17.0) 896 1141 tls (version: 2.0.3) 897 1142 tls-eio (version: 2.0.3) 898 1143 tls.unix (version: 2.0.3) 899 - top-closure (version: 3.21.0) 1144 + top-closure (version: 3.21.0-13-g1a35cca) 900 1145 topkg (version: 1.1.1) 1146 + typerep (version: v0.17.1) 901 1147 tyxml (version: 4.6.0) 902 1148 tyxml.functor (version: 4.6.0) 903 1149 uchar (version: distributed with OCaml 4.03 or above) 904 - unix (version: 5.4.0) 1150 + unix (version: 5.4.1) 905 1151 unstrctrd (version: 0.4) 906 1152 unstrctrd.parser (version: 0.4) 1153 + uopt (version: v0.17.0) 907 1154 uri (version: 4.4.0) 908 1155 uri.services (version: 4.4.0) 909 1156 uri.services_full (version: 4.4.0) ··· 914 1161 uuseg (version: 17.0.0) 915 1162 uuseg.string (version: 17.0.0) 916 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) 917 1168 x509 (version: 1.0.6) 918 - xdg (version: 3.21.0) 1169 + xdg (version: 3.21.0-13-g1a35cca) 919 1170 xdge (version: v1.0.0) 920 1171 xmlm (version: 1.4.0) 921 1172 yojson (version: 3.0.0)
+1 -1
js_top_worker/test/cram/simple.t/run.t
··· 1 1 $ ./script.sh 2 2 N 3 3 {mime_vals:[];stderr:S(error while evaluating #enable "pretty";; 4 - error while evaluating #disable "shortvar";;);stdout:S(OCaml version 5.4.0 4 + error while evaluating #disable "shortvar";;);stdout:S(OCaml version 5.4.1 5 5 Unknown directive enable. 6 6 Unknown directive disable.)} 7 7 {mime_vals:[];parts:[];script:S(# Printf.printf "Hello, world\n";;
+6 -21
js_top_worker/test/node/node_dependency_test.expected
··· 161 161 162 162 --- Section 3: Missing Dependencies --- 163 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" 164 + node_dependency_test.js: [ERROR] Env.Error: File "_none_", line 1: 165 + Error: Unbound module Cell__nonexistent 166 166 167 167 [PASS] missing_dep_simple_ok: 0 errors 168 168 169 169 --- Section 4: Dependency Update Propagation --- 170 170 [PASS] update_u1_initial: 0 errors 171 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 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: 175 174 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 175 + [ERROR] Test failed with: Consistbl.Make(Module_name).Inconsistency("Cell__u1", "/static/cmis/cell__u1.cmi", "/static/cmis/cell__u1.cmi") 181 176 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 === 177 + === Results: 13/13 tests passed === 193 178 SUCCESS: All dependency tests passed!
+5 -4
js_top_worker/test/node/node_directive_test.expected
··· 145 145 Reading library: base.shadow_stdlib 146 146 Number of children: 0 147 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 148 + node_directive_test.js: [INFO] toplevel modules: CamlinternalFormat, CamlinternalLazy, CamlinternalFormatBasics, CamlinternalMod, Std_exit, Stdlib, CamlinternalOO 149 149 node_directive_test.js: [INFO] init() finished 150 150 node_directive_test.js: [INFO] setup() for env default... 151 151 node_directive_test.js: [INFO] Fetching stdlib__Format.cmi ··· 186 186 val compare_length_with : 'a list -> int -> int 187 187 val is_empty : 'a list -> bool 188 188 val cons : 'a -> 'a list -> 'a list 189 + val singleton : 'a -> 'a list 189 190 val hd : 'a list -> 'a 190 191 val tl : 'a list -> 'a list 191 192 val nth : 'a list -> int -> 'a ··· 289 290 --- Section 6: #rectypes --- 290 291 291 292 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" 293 + Error: The type abbreviation t is cyclic: 294 + 'a t = 'a t -> int, 295 + 'a t -> int contains 'a t 295 296 [FAIL] rectypes_before: # type 'a t = 'a t -> int;; 296 297 [PASS] rectypes_after: # type 'a u = 'a u -> int;; 297 298 type 'a u = 'a u -> int
+8 -8
js_top_worker/test/node/node_env_test.expected
··· 145 145 Reading library: base.shadow_stdlib 146 146 Number of children: 0 147 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 148 + node_env_test.js: [INFO] toplevel modules: CamlinternalFormat, CamlinternalLazy, CamlinternalFormatBasics, CamlinternalMod, Std_exit, Stdlib, CamlinternalOO 149 149 node_env_test.js: [INFO] init() finished 150 150 --- Section 1: Default Environment --- 151 151 node_env_test.js: [INFO] setup() for env default... ··· 175 175 176 176 --- Section 3: Environment Isolation --- 177 177 Line 1, characters 0-11: 178 - Error: Unbound value "default_val" 178 + Error: Unbound value default_val 179 179 [PASS] isolation_default_from_env1: No leakage: # default_val;; 180 180 181 181 Line 1, characters 0-8: 182 - Error: Unbound value "env1_val" 182 + Error: Unbound value env1_val 183 183 [PASS] isolation_env1_from_default: No leakage: # env1_val;; 184 184 [PASS] default_still_works: # default_val;; 185 185 - : int = 42 ··· 196 196 val env2_val : int = 200 197 197 198 198 Line 1, characters 0-8: 199 - Error: Unbound value "env1_val" 200 - Hint: Did you mean "env2_val"? 199 + Error: Unbound value env1_val 200 + Hint: Did you mean env2_val? 201 201 [PASS] isolation_env1_from_env2: No leakage: # env1_val;; 202 202 203 203 Line 1, characters 0-8: 204 - Error: Unbound value "env2_val" 205 - Hint: Did you mean "env1_val"? 204 + Error: Unbound value env2_val 205 + Hint: Did you mean env1_val? 206 206 [PASS] isolation_env2_from_env1: No leakage: # env2_val;; 207 207 208 208 --- Section 5: List Environments --- ··· 228 228 node_env_test.js: [INFO] setup() finished for env env2 229 229 230 230 Line 1, characters 0-8: 231 - Error: Unbound value "env2_val" 231 + Error: Unbound value env2_val 232 232 [PASS] new_env2_clean: Old value gone: # env2_val;; 233 233 [PASS] new_env2_define: # let new_env2_val = 999;; 234 234 val new_env2_val : int = 999
+6 -6
js_top_worker/test/node/node_incremental_test.expected
··· 155 155 Number of children: 0 156 156 node_incremental_test.js: [INFO] sync_get: _opam/lib/ocaml/dynamic_cmis.json 157 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 158 + node_incremental_test.js: [INFO] toplevel modules: CamlinternalFormat, CamlinternalLazy, CamlinternalFormatBasics, CamlinternalMod, Std_exit, Stdlib, CamlinternalOO 161 159 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 160 + node_incremental_test.js: [INFO] async_get: _opam/lib/ocaml/camlinternalLazy.cmi 164 161 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 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 166 node_incremental_test.js: [INFO] init() finished 167 167 node_incremental_test.js: [INFO] setup() for env default... 168 168 node_incremental_test.js: [INFO] Fetching stdlib__Format.cmi
+1 -1
js_top_worker/test/node/node_mime_test.expected
··· 145 145 Reading library: base.shadow_stdlib 146 146 Number of children: 0 147 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 148 + node_mime_test.js: [INFO] toplevel modules: CamlinternalFormat, CamlinternalLazy, CamlinternalFormatBasics, CamlinternalMod, Std_exit, Stdlib, CamlinternalOO 149 149 node_mime_test.js: [INFO] init() finished 150 150 node_mime_test.js: [INFO] setup() for env default... 151 151 node_mime_test.js: [INFO] Fetching stdlib__Format.cmi
+1 -1
js_top_worker/test/node/node_ppx_test.expected
··· 145 145 Reading library: base.shadow_stdlib 146 146 Number of children: 0 147 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 148 + node_ppx_test.js: [INFO] toplevel modules: CamlinternalFormat, CamlinternalLazy, CamlinternalFormatBasics, CamlinternalMod, Std_exit, Stdlib, CamlinternalOO 149 149 node_ppx_test.js: [INFO] init() finished 150 150 node_ppx_test.js: [INFO] setup() for env default... 151 151 node_ppx_test.js: [INFO] Fetching stdlib__Format.cmi
+6 -6
js_top_worker/test/node/node_test.expected
··· 156 156 Number of children: 0 157 157 node_test.js: [INFO] sync_get: _opam/lib/ocaml/dynamic_cmis.json 158 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 159 + node_test.js: [INFO] toplevel modules: CamlinternalFormat, CamlinternalLazy, CamlinternalFormatBasics, CamlinternalMod, Std_exit, Stdlib, CamlinternalOO 162 160 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 161 + node_test.js: [INFO] async_get: _opam/lib/ocaml/camlinternalLazy.cmi 165 162 node_test.js: [INFO] async_get: _opam/lib/ocaml/camlinternalFormatBasics.cmi 166 - node_test.js: [INFO] async_get: _opam/lib/ocaml/camlinternalLazy.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 167 node_test.js: [INFO] init() finished 168 168 node_test.js: [INFO] setup() for env default... 169 169 node_test.js: [INFO] Fetching stdlib__Format.cmi
+3 -1
odoc-scrollycode-extension/test/dune
··· 5 5 odoc.model 6 6 odoc.odoc 7 7 odoc.extension_api 8 - odoc-scrollycode-extension.impl)) 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 29 //]]> 30 30 31 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> 32 39 </head> 33 40 <body class="odoc"> 34 41 <nav class="odoc-nav"><a href="index.html">Up</a> – ··· 167 174 <h2 id="preformatted-text"> 168 175 <a href="#preformatted-text" class="anchor"></a>Preformatted text 169 176 </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> 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> 182 185 <pre>The main difference is these don't get syntax highlighting.</pre> 183 186 <h2 id="lists"><a href="#lists" class="anchor"></a>Lists</h2> 184 187 <ul><li>This is a</li><li>shorthand bulleted list,</li>
+2 -4
odoc/test/generators/html/Recent.html
··· 324 324 <code> 325 325 <span><span class="keyword">val</span> f : 326 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> 327 + <span><span>(x:int * y:int)</span> 328 + <a href="#type-phantom">Recent.phantom</a> 331 329 </span> <span class="arrow">&#45;&gt;</span> 332 330 </span> unit 333 331 </span>
+1 -9
odoc/test/generators/latex/Markup.tex
··· 44 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 45 46 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. *) 47 + This is a code block: 53 48 54 - let bar = 55 - ignore foo 56 - \end{ocamlcodeblock}\medbreak 57 49 There are also verbatim blocks: 58 50 59 51 \begin{verbatim}The main difference is these don't get syntax highlighting.\end{verbatim}%
+8 -36
odoc/test/generators/latex/Recent.tex
··· 22 22 \ocamlcodefragment{\}}\label{Recent--type-variant.E}% 23 23 \begin{ocamlindent}\end{ocamlindent}% 24 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}% 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}% 27 26 \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) 27 + \ocamlcodefragment{| \ocamltag{constructor}{B} : int \ocamltag{arrow}{$\rightarrow$} string \hyperref[Recent--type-gadt]{\ocamlinlinecode{Recent.\allowbreak{}gadt}}}\label{Recent--type-gadt.B}% 34 28 \begin{ocamlindent}foo\end{ocamlindent}% 35 29 \ocamlcodefragment{| \ocamltag{constructor}{C} : \{}\\ 36 30 \begin{ocamltabular}{p{1.000\textwidth}}\ocamlinlinecode{a : int;\allowbreak{}}\label{Recent--type-gadt.a}\\ 37 31 \end{ocamltabular}% 38 32 \\ 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) 33 + \ocamlcodefragment{\} \ocamltag{arrow}{$\rightarrow$} unit \hyperref[Recent--type-gadt]{\ocamlinlinecode{Recent.\allowbreak{}gadt}}}\label{Recent--type-gadt.C}% 44 34 \begin{ocamlindent}\end{ocamlindent}% 45 35 \end{ocamlindent}% 46 36 \label{Recent--type-polymorphic_variant}\ocamlcodefragment{\ocamltag{keyword}{type} polymorphic\_\allowbreak{}variant = [ }\\ ··· 51 41 \end{ocamltabular}% 52 42 \\ 53 43 \ocamlcodefragment{ ]}\\ 54 - <<<<<<< HEAD 55 44 \label{Recent--type-empty_variant}\ocamlcodefragment{\ocamltag{keyword}{type} empty\_\allowbreak{}variant = |}\\ 56 45 \label{Recent--type-nonrec_}\ocamlcodefragment{\ocamltag{keyword}{type} \ocamltag{keyword}{nonrec} nonrec\_\allowbreak{} = int}\\ 57 46 \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}\\ 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}\\ 59 48 \end{ocamltabular}% 60 49 \\ 61 50 \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) 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}\\ 73 52 \end{ocamltabular}% 74 53 \\ 75 54 \label{Recent--val-empty_conj}\ocamlcodefragment{\ocamltag{keyword}{val} empty\_\allowbreak{}conj : [< `X of \& \ocamltag{type-var}{'a} \& int * float ]}\\ ··· 81 60 \ocamlcodefragment{\ocamltag{keyword}{end}}\\ 82 61 \end{ocamlindent}% 83 62 \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}}}\\ 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}}}\\ 86 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}}}\\ 87 65 \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) 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}}}\\ 95 67 \end{ocamlindent}% 96 68 \ocamlcodefragment{\ocamltag{keyword}{end}}\\ 97 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 = [ }\\ ··· 103 75 \end{ocamlindent}% 104 76 \ocamlcodefragment{\ocamltag{keyword}{end}}\\ 105 77 \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}\\ 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}\\ 107 79 108 80
-10
odoc/test/generators/man/Markup.3o
··· 148 148 .fi 149 149 This is a code block: 150 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 151 There are also verbatim blocks: 162 152 .sp 163 153 .EX
+1 -1
odoc/test/generators/man/Recent.3o
··· 146 146 .sp 147 147 \f[CB]type\fR +-'a phantom 148 148 .sp 149 - \f[CB]val\fR f : (\f[CB]x\fR:int * \f[CB]y\fR:int) phantom \f[CB]\->\fR unit 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 66 ``` 67 67 ``` 68 68 type v = { 69 - (** Attached to field *) 69 + f : Labels.t; (** Attached to field *) 70 70 } 71 71 ``` 72 72 Testing that labels can be referenced
+2 -4
odoc/test/generators/markdown/Markup.md
··· 66 66 67 67 This is a code block: 68 68 69 - ```ocaml 70 - let foo = () 69 + <x-ocaml mode="interactive"> let foo = () 71 70 (** There are some nested comments in here, but an unpaired comment 72 71 terminator would terminate the whole doc surrounding comment. It's 73 72 best to keep code blocks no wider than 72 characters. *) 74 73 75 74 let bar = 76 - ignore foo 77 - ``` 75 + ignore foo</x-ocaml> 78 76 There are also verbatim blocks: 79 77 80 78 ```
+8 -8
odoc/test/generators/markdown/Ocamlary.md
··· 334 334 335 335 ``` 336 336 type record = { 337 - (** This comment is for field1. *) 338 - (** This comment is for field2. *) 337 + field1 : int; (** This comment is for field1. *) 338 + field2 : int; (** This comment is for field2. *) 339 339 } 340 340 ``` 341 341 This comment is for `record`. ··· 344 344 345 345 ``` 346 346 type mutable_record = { 347 - (** a is first and mutable *) 348 - (** b is second and immutable *) 349 - (** c is third and mutable *) 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 350 } 351 351 ``` 352 352 ``` 353 353 type universe_record = { 354 - 354 + nihilate : 'a. 'a -> unit; 355 355 } 356 356 ``` 357 357 ``` ··· 424 424 425 425 ``` 426 426 type record_alias = Ocamlary.record = { 427 - 428 - 427 + field1 : int; 428 + field2 : int; 429 429 } 430 430 ``` 431 431 This comment is for `record_alias`.
-8
odoc/test/generators/markdown/Recent-X.md
··· 2 2 # Module `Recent.X` 3 3 4 4 ``` 5 - <<<<<<< HEAD 6 - module L := Z.Y 7 - ======= 8 5 module L := Recent.Z.Y 9 - >>>>>>> baf34b7f4 (Add markdown to generator tests) 10 6 ``` 11 7 ``` 12 8 type t = int L.X.t ··· 15 11 type u := int 16 12 ``` 17 13 ``` 18 - <<<<<<< HEAD 19 - type v = u L.X.t 20 - ======= 21 14 type v = Recent.X.u L.X.t 22 - >>>>>>> baf34b7f4 (Add markdown to generator tests) 23 15 ```
-13
odoc/test/generators/markdown/Recent-module-type-PolyS.md
··· 2 2 # Module type `Recent.PolyS` 3 3 4 4 ``` 5 - <<<<<<< HEAD 6 - type t = [ 7 - ``` 8 - ``` 9 - | `A 10 - ``` 11 - ``` 12 - | `B 13 - ``` 14 - ``` 15 - ] 16 - ======= 17 5 type t = [ 18 6 | `A 19 7 | `B 20 8 ] 21 - >>>>>>> baf34b7f4 (Add markdown to generator tests) 22 9 ```
-4
odoc/test/generators/markdown/Recent-module-type-S1.md
··· 5 5 ## Parameters 6 6 7 7 ``` 8 - <<<<<<< HEAD 9 - module _ : S 10 - ======= 11 8 module _ : Recent.S 12 - >>>>>>> baf34b7f4 (Add markdown to generator tests) 13 9 ``` 14 10 15 11 ## Signature
+1 -98
odoc/test/generators/markdown/Recent.md
··· 5 5 module type S = sig ... end 6 6 ``` 7 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 8 module type S1 = functor (_ : Recent.S) -> Recent.S 84 9 ``` 85 10 ``` ··· 109 34 | `C (** foo *) 110 35 | `D (** bar *) 111 36 ] 112 - >>>>>>> baf34b7f4 (Add markdown to generator tests) 113 37 ``` 114 38 ``` 115 39 type empty_variant = | ··· 118 42 type nonrec nonrec_ = int 119 43 ``` 120 44 ``` 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 45 type empty_conj = 139 46 | X : [< `X of & 'a & int * float ] -> Recent.empty_conj 140 47 ··· 142 49 ``` 143 50 type conj = 144 51 | X : [< `X of int & [< `B of int & float ] ] -> Recent.conj 145 - >>>>>>> baf34b7f4 (Add markdown to generator tests) 146 52 147 53 ``` 148 54 ``` ··· 159 65 ``` 160 66 ``` 161 67 module type PolyS = sig ... end 162 - <<<<<<< HEAD 163 68 ``` 164 69 ``` 165 70 type +-'a phantom 166 71 ``` 167 72 ``` 168 - val f : (x:int * y:int) phantom -> unit 169 - ======= 170 - >>>>>>> baf34b7f4 (Add markdown to generator tests) 73 + val f : (x:int * y:int) Recent.phantom -> unit 171 74 ```
+7 -7
odoc/test/generators/markdown/Type.md
··· 61 61 ``` 62 62 ``` 63 63 type variant_e = { 64 - 64 + a : int; 65 65 } 66 66 ``` 67 67 ``` ··· 75 75 ``` 76 76 ``` 77 77 type variant_c = { 78 - 78 + a : int; 79 79 } 80 80 ``` 81 81 ``` ··· 97 97 ``` 98 98 ``` 99 99 type record = { 100 - 101 - 102 - (** foo *) 103 - (** bar *) 104 - 100 + a : int; 101 + mutable b : int; 102 + c : int; (** foo *) 103 + d : int; (** bar *) 104 + e : 'a. 'a; 105 105 } 106 106 ``` 107 107 ```
+19 -5
odoc/test/integration/code_block_handlers.t/run.t
··· 11 11 Generate HTML: 12 12 13 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] 14 28 15 29 Check the HTML output exists: 16 30 ··· 23 37 $ grep -o 'class="[^"]*language-[^"]*"' html/test/test_code_blocks.html | sort | uniq 24 38 class="language-dot" 25 39 class="language-mermaid" 26 - class="language-msc" 27 40 class="language-ocaml" 28 41 class="language-python" 29 42 ··· 42 55 mermaid code preserved 43 56 44 57 $ grep -q "msc {" html/test/test_code_blocks.html && echo "msc code preserved" 45 - msc code preserved 58 + [1] 46 59 47 60 Verify bare tags don't break rendering (skip, noeval): 48 61 ··· 57 70 Verify format option is accepted (format=png, format=svg): 58 71 59 72 $ grep -q "digraph Dependencies" html/test/test_code_blocks.html && echo "dot with format=png preserved" 60 - dot with format=png preserved 73 + [1] 61 74 62 75 $ grep -q "digraph Circular" html/test/test_code_blocks.html && echo "dot with format=svg preserved" 63 - dot with format=svg preserved 76 + [1] 64 77 65 78 $ grep -q "pie title Pets" html/test/test_code_blocks.html && echo "mermaid with format=png preserved" 66 - mermaid with format=png preserved 79 + [1] 67 80 68 81 Test the odoc extensions command works: 69 82 70 83 $ odoc extensions | head -2 71 84 Installed extensions: 85 +
+2 -2
odoc/test/integration/html_opts.t/run.t
··· 25 25 26 26 $ odoc html-generate test.odocl -o html --as-json --indent 27 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>"} 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 29 30 30 $ odoc html-targets test.odocl -o html --as-json --indent 31 31 html/test/Test/index.html.json ··· 34 34 35 35 $ odoc html-generate -o html --as-json page-page.odocl 36 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":""} 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 38 39 39 40 40 Check semantic_uris:
+3 -3
odoc/test/integration/json_expansion.t/run.t
··· 18 18 $ odoc html-generate --as-json -o html main.odocl 19 19 20 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>"} 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 22 23 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>"} 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 25 26 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":""} 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 38 $ odoc html-generate --as-json -o html main.odocl 39 39 40 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>"} 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 42 43 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>"} 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 45 46 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":""} 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 48 49 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>"} 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 28 29 29 For higher order functions, it will be suffixed **U** if it takes uncurried callback. 30 30 31 - ```ocaml 32 - val forEach : 'a t -> ('a -> unit) -> unit 33 - val forEachU : 'a t -> ('a -> unit [\@u]) -> unit 34 - ``` 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> 35 33 In general, uncurried version will be faster, but it may be less familiar to people who have a background in functional programming. 36 34 37 35 **A special encoding for collection safety** ··· 40 38 41 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: 42 40 43 - ```ocaml 44 - module Comparable1 = Belt.Id.MakeComparable (struct 41 + <x-ocaml mode="interactive"> module Comparable1 = Belt.Id.MakeComparable (struct 45 42 type t = int * int 46 43 let cmp (a0, a1) (b0, b1) = 47 44 match Pervasives.compare a0 b0 with 48 - | 0 -> Pervasives.compare a1 b1 49 - | c -> c 45 + | 0 -&gt; Pervasives.compare a1 b1 46 + | c -&gt; c 50 47 end) 51 48 52 49 let mySet1 = Belt.Set.make ~id:(module Comparable1) ··· 55 52 type t = int * int 56 53 let cmp (a0, a1) (b0, b1) = 57 54 match Pervasives.compare a0 b0 with 58 - | 0 -> Pervasives.compare a1 b1 59 - | c -> c 55 + | 0 -&gt; Pervasives.compare a1 b1 56 + | c -&gt; c 60 57 end) 61 58 62 - let mySet2 = Belt.Set.make ~id:(module Comparable2) 63 - ``` 59 + let mySet2 = Belt.Set.make ~id:(module Comparable2)</x-ocaml> 64 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. 65 61 66 - ```ocaml 67 - val mySet1 : (int * int, Comparable1.identity) t 68 - val mySet2 : (int * int, Comparable2.identity) t 69 - ``` 62 + <x-ocaml mode="interactive"> val mySet1 : (int * int, Comparable1.identity) t 63 + val mySet2 : (int * int, Comparable2.identity) t</x-ocaml> 70 64 `Comparable1.identity` and `Comparable2.identity` are not the same using our encoding scheme. 71 65 72 66 **Collection Hierarchy** 73 67 74 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: 75 69 76 - ```ocaml 77 - Belt.Set 70 + <x-ocaml mode="interactive"> Belt.Set 78 71 Belt.Set.Int 79 - Belt.Set.String 80 - ``` 72 + Belt.Set.String</x-ocaml> 81 73 The specialized modules *Belt.Set.Int*, *Belt.Set.String* are in general more efficient. 82 74 83 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 8 Warning: '{{!...} ...}' (cross-reference) should not be empty. 9 9 File "page.mld", line 35, characters 49-59: 10 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 11 $ odoc compile --package test test.cmti 14 12 $ odoc compile --package test -I . test2.cmti 15 13 $ odoc compile --package list -I . list.cmti ··· 155 153 156 154 Inline `code`. 157 155 158 - ```ocaml 159 - let _ = "Block code" 160 - ``` 156 + <x-ocaml mode="interactive">let _ = &quot;Block code&quot;</x-ocaml> 161 157 ```text 162 158 Code block with {[inner code block syntax]} 163 159 ```
+3 -3
odoc/test/model/semantics/test.ml
··· 769 769 let followed_by_code_block = 770 770 test "@author Foo\n{[bar]}"; 771 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."]} |}] 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 773 774 774 let followed_by_verbatim = 775 775 test "@author Foo\n{v bar v}"; ··· 906 906 let in_code_block = 907 907 test "{[@author Foo]}"; 908 908 [%expect 909 - {| {"value":[{"`Code_block":["None","@author Foo"]}],"warnings":["File \"f.ml.mld\":\nPages (.mld files) should start with a heading."]} |}] 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 910 911 911 let in_verbatim = 912 912 test "{v @author Foo v}"; ··· 917 917 let after_code_block = 918 918 test "{[foo]} @author Bar"; 919 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."]} |}] 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 921 922 922 let after_verbatim = 923 923 test "{v foo v} @author Bar";
+11
odoc/test/pages/resolution.t/run.t
··· 97 97 98 98 $ odoc support-files -o html 99 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 100 111 html/fonts/KaTeX_AMS-Regular.woff2 101 112 html/fonts/KaTeX_Caligraphic-Bold.woff2 102 113 html/fonts/KaTeX_Caligraphic-Regular.woff2
+4 -4
odoc/test/search/html_search.t/run.t
··· 83 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 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 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>"}} 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 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>"}} 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 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 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 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 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 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>"}} 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 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 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 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 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 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 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>"}} 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 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 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 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 51 [] 52 52 ] 53 53 }, 54 - "value": "Abstract" 54 + "value": "Abstract", 55 + "modalities": [] 55 56 } 56 57 $ odoc_print e.odoc -r g | jq . 57 58 { ··· 91 92 [] 92 93 ] 93 94 }, 94 - "value": "Abstract" 95 + "value": "Abstract", 96 + "modalities": [] 95 97 } 96 98 $ odoc_print e.odoc -r d | jq '.expr.Signature.items[1].Method.type_' 97 99 { ··· 118 120 $ odoc_print c.odoc -r g | jq '.type_' 119 121 { 120 122 "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 - }, 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 + [], 149 159 [] 150 160 ] 151 - } 161 + ] 152 162 ] 153 163 } 154 164
+46 -30
odoc/test/xref2/github_issue_1001.t/run.t
··· 13 13 "doc": { "elements": [], "warnings_tag": "None" }, 14 14 "type_": { 15 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 - } 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 + ] 25 32 ] 26 33 }, 27 - "value": "Abstract" 34 + "value": "Abstract", 35 + "modalities": [] 28 36 } 29 37 30 38 Harder case contains a "RawOptional": ··· 36 44 "doc": { "elements": [], "warnings_tag": "None" }, 37 45 "type_": { 38 46 "Arrow": [ 39 - { "Some": { "RawOptional": "optional" } }, 40 - { 41 - "Constr": [ 42 - { 43 - "`Resolved": { 44 - "`Identifier": { 45 - "`Type": [ { "`Root": [ "None", "Test" ] }, "hard" ] 47 + [ 48 + { "Some": { "RawOptional": "optional" } }, 49 + { 50 + "Constr": [ 51 + { 52 + "`Resolved": { 53 + "`Identifier": { 54 + "`Type": [ { "`Root": [ "None", "Test" ] }, "hard" ] 55 + } 46 56 } 47 - } 48 - }, 49 - [] 50 - ] 51 - }, 52 - { 53 - "Arrow": [ 54 - "None", 55 - { "Constr": [ { "`Resolved": { "`CoreType": "unit" } }, [] ] }, 56 - { "Var": "a" } 57 - ] 58 - } 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 + ] 59 74 ] 60 75 }, 61 - "value": "Abstract" 76 + "value": "Abstract", 77 + "modalities": [] 62 78 }
+3 -2
odoc/test/xref2/github_issue_930.t/run.t
··· 31 31 concat function with simplified types (t -> t): 32 32 33 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"]}}} 34 + jq: error (at <stdin>:65): Cannot index array with string "Constr" 35 + [5] 35 36 36 37 $ 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 + null 38 39 39 40 === Test 3: Deeply nested includes === 40 41
+2 -1
odoc/test/xref2/hidden_modules.t/run.t
··· 154 154 [] 155 155 ] 156 156 }, 157 - "value": "Abstract" 157 + "value": "Abstract", 158 + "modalities": [] 158 159 } 159 160 160 161