Skip to content

Conversation

@Gromototo
Copy link
Contributor

@Gromototo Gromototo commented Oct 9, 2025

Objective

Add a new dune describe tests subcommand to display information about test and cram stanzas defined in the current project.

This information includes metadata such as:

  • name: The test name
  • source_dir: Directory containing the test stanza
  • package: Associated package (if any)
  • enabled: Whether the test is enabled (respects enabled_if conditions)
  • location: Source location of the stanza definition
  • target: Actionable build target (.exe for unit tests, @dir/runtest alias for CRAM tests)

Implementation

Core Architecture

  • Dual stanza support: Handles both Tests.T (unit tests) and Cram_stanza.T (CRAM tests)
  • Refactored logic: Separates collection (collect_test_stanzas) from transformation (describe_stanza) for clarity and maintainability
  • Actionable targets:
    • Unit tests: _build/default/<dir>/<name>.exe
    • CRAM tests: @<source_dir>/runtest (alias target)
    • Inline tests: @<source_dir>/runtest-<lib_name> (alias target, e.g., for ppx_expect)
  • Crawl pattern: Uses existing Dune crawl infrastructure and Dyn serialization for consistency with other describe subcommands
  • Output formats: Supports both human-readable S-expression and canonical S-expression (--format=csexp)
  • Complete reporting: Includes all tests regardless of enabled status (the boolean value indicates whether the test would run)

Technical Details

  • Added logic to inspect the sub_systems field of Library.T for Inline_tests_info.Tests.name.
  • Exposed Cram_stanza via dune_rules module for type matching
  • Resolved namespace conflicts (Context_name.Map, Import.Main)
  • Scoped Memo.O usage to avoid operator conflicts with Cmdliner.Term

Testing

Added comprehensive blackbox test coverage in test/blackbox-tests/test-cases/describe/describe-tests.t:

Phase 1: Unit Tests (Tests.T)

  • Simple tests with basic metadata
  • Complex tests with full metadata (package, dependencies)
  • Multiple tests in a single stanza
  • Disabled tests (via enabled_if)
  • Tests with dependencies

Phase 2: CRAM Tests (Cram_stanza.T)

  • Simple CRAM tests
  • CRAM tests with package association
  • Disabled CRAM tests

Phase 3: Inline Tests (Library.T / ppx_expect)

  • Tests for libraries with (inline_tests).

Fixes

Closes #12030

@rgrinberg
Copy link
Member

Looks like a good start. I think you should start with a human readable format before moving on to machine readable formats though.

Following that, the most important extension to this work would be to support cram and ppx_expect tests. Those are at least as important as tests defined using the "test" stanza.

let to_dyn { names; source_dir; package; deps; enabled; action; locks } =
let open Dyn in
record
[ "names", list string names
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think the fact that multiple tests can be define in one stanza isn't something that the describe command should necessarily display. A separate test entry for each test in the same stanza seems easier for tools/users to make use of.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I went with your suggestion. I updated the implementation so that each test in a multi-test stanza is listed individually in the dune describe tests output.

@Gromototo
Copy link
Contributor Author

Looks like a good start. I think you should start with a human readable format before moving on to machine readable formats though.

Following that, the most important extension to this work would be to support cram and ppx_expect tests. Those are at least as important as tests defined using the "test" stanza.

Since implementing Cram stanzas is straightforward, I included Cram support in the new revision.

Supporting ppx_expect tests is less direct, as they are not defined in configuration files. Handling them would likely require parsing the test files themselves ?

@rgrinberg
Copy link
Member

rgrinberg commented Oct 19, 2025

Supporting ppx_expect tests is less direct, as they are not defined in configuration files. Handling them would likely require parsing the test files themselves ?

Right, it's a bit more difficult. I don't think you need to parse the tests themselves (although that would certainly be a good thing too). It's enough to just rely on the rules to discover the test files. That would already be enough granularity.

What do you think about dropping the wrap sexp around the output like $ dune describe workspace? I don't think it buys us much.

PS: CI is pointing out some minor issues

@Gromototo
Copy link
Contributor Author

Gromototo commented Nov 4, 2025

What do you think about dropping the wrap sexp around the output like $ dune describe workspace? I don't think it buys us much.

I understood that you suggested removing the outer parenthesis for the output (like dune describe workspace) so that we delete the empty space in front of each test entry when displaying it.

I tried implementing this by iterating over the descriptions list and print them individually, rather than letting the pretty-printer handle the whole list at once.

However, doing this caused the pretty-printer to format each test independently, which resulted in strange, inconsistent indentations for tests with long fields.

Since it was only a suggestion and the inconsistent formatting is worse, I went for updating the PR without it for now

open Import
open Dune_rules

module Test_description = struct
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

One more field I would add here is the test alias. For the tests stanza this will just be runtest-nameoftest, same for inline tests and for cram tests it should be cramtest for cramtest.t.

Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is what dune runtest is doing for cram tests for instance, it takes a source file and then finds the alias associated with it and runs that. There is work in progress for inline tests and tests stanzas.

@rgrinberg rgrinberg force-pushed the describe_tests branch 3 times, most recently from 422c656 to 2385bfb Compare November 10, 2025 23:21
Implement a new subcommand to list all test stanzas (unit tests, CRAM, and inline tests)
with metadata including name, location, target, package, and enabled status.

- Support for Tests.T, Cram_stanza.T, and Library stanzas (for inline tests).
- Generate actionable targets for IDE integration:
    - `.exe` for unit tests.
    - `@dir/runtest` for CRAM.
    - `@dir/runtest-<lib_name>` for inline tests.
- Handle multiple tests per stanza as separate entries.
- Add comprehensive test suite in describe-tests.t.

Fixes ocaml#12030

Signed-off-by: Rodrigue LEITAO--PEREIRA DIAS <[email protected]>
Signed-off-by: Rudi Grinberg <[email protected]>
@rgrinberg
Copy link
Member

One reason to prefer multiple test stanzas instead of a single massive stanza is because this matches better how the stanzas are defined. I think we should have probably went for this approach for dune describe workspace as well. It's not such an important detail though.

@rgrinberg rgrinberg merged commit 07b1b7d into ocaml:main Nov 10, 2025
9 of 11 checks passed
Sudha247 pushed a commit to Sudha247/dune that referenced this pull request Nov 14, 2025
…caml#12545)

Implement a new subcommand to list all test stanzas (unit tests, CRAM, and inline tests)
with metadata including name, location, target, package, and enabled status.

- Support for Tests.T, Cram_stanza.T, and Library stanzas (for inline tests).
- Generate actionable targets for IDE integration:
    - `.exe` for unit tests.
    - `@dir/runtest` for CRAM.
    - `@dir/runtest-<lib_name>` for inline tests.
- Handle multiple tests per stanza as separate entries.
- Add comprehensive test suite in describe-tests.t.

Fixes ocaml#12030

Signed-off-by: Rodrigue LEITAO--PEREIRA DIAS <[email protected]>
Signed-off-by: Rudi Grinberg <[email protected]>
Leonidas-from-XIV pushed a commit that referenced this pull request Dec 9, 2025
Before this change, it was producing the category subheadings at the
wrong level (level 2), instead of level 3.

An example of the corrected changelog produced:

```
3.21.0 (2025-12-08)
--------------------

### Fixed

- Fix `include_subdirs qualified` incorrectly picking the furthest module
  instead of the closest when resolving module name ambiguities. (#12587,
  @ElectreAAS and @Alizter)

- Fix: include the module alias in the transitive dependency closure with
  `(include_subdirs qualified)`. (#12299, @anmonteiro)

- Pass private modules with -H when this is available (#12666, @rgrinberg)

- Allow multiple modules in `(modules_flags ...)`, in `coq.theory` (#12733, @rlepigre)

- Improve error message for invalid version formats in both `(lang dune ...)` and
  `(using extension ...)` declarations. Changes "Atom of the form NNN.NNN expected"
  to "Invalid version. Version must be two numbers separated by a dot." (#12833, @benodiwal)

- Fix crash when running `dune build @check` on a library with virtual modules.
  (#12644, fixes #12636, @Alizter)

- Provide a more informative error message when `(pkg enabled)` is put in
  `dune-project` instead of `dune-workspace`. (#12802, fixes #12801,
  @benodiwal)

- Improve error message when invalid version strings are used in `dune-project`
  files. Non-ASCII characters and malformed versions now show a helpful hint
  with an example of the correct format. (#12794, fixes #12751, @benodiwal)

- Stop hiding the `root_module` from the include path (#12239, @rgrinberg)

- Allow `$ dune init` to work on absolute paths (#12601, fixes #7806,
  @rgrinberg)

- `(include_subdirs qualified)`: Add missing alias dependency to module group.
  (#12530, @anmonteiro)

- Add Melange compilation to the `@all` alias in libraries (#12628,
  @anmonteiro)

- melange support: don't emit empty JavaScript modules for generated module
  aliases. (#12464, @anmonteiro)

### Added

- (Experimental): Introduce the `library_parameter` stanza. It allows users to
  declare a parameter when using the OxCaml compiler.
  (#11963, implements #12084, @maiste) 


- Added the ability to scroll horizontally in TUI. (#12386, @Alizter)

- Feature: Include shell command that was executed when a cram test has
  occurred in the error message (#12307, @rgrinberg)

- Add support for `%{cmt:...}` and `%{cmti:...}` variables to reference
  compiled annotation files (.cmt and .cmti) containing typed abstract syntax
  trees with location and type information. (#12634, grants #12633, @Alizter)

- Add `$ dune describe tests` to describe the tests in the workspace
  (@Gromototo, #12545, fixes #12030)

- Allow `dune runtest` to properly run while a watch mode server is running.
  (#12473, grants #8114, @gridbugs and @ElectreAAS)

- Use copy-on-write (COW) when copying files on filesystems that support it
  (Btrfs, ZFS, XFS, etc), under Linux. (#12074, fixes #12071, @nojb)

- Add support for Tangled ATproto-based code repositories (#12197, @avsm)

- Add support for instantiating OxCaml parameterised libraries.
  (#12561, @art-w)
```

Note that the `Fixed` and `Added` headers are at level 3.

Compare with the previous, incorrect logic, produced initially in the
current release branch:
https://github.com/shonfeder/dune/blob/c5af78ff322225de3e839982600a1180caa951bf/CHANGES.md?plain=1

This incorrect formatting caused the documented release process to
produce release with no changelog (e.g.,
https://github.com/ocaml/dune/releases/tag/3.21.0_alpha0)

Signed-off-by: Shon Feder <[email protected]>
shonfeder added a commit to shonfeder/opam-repository that referenced this pull request Dec 15, 2025
CHANGES:

### Fixed

- Fix `include_subdirs qualified` incorrectly picking the furthest module
  instead of the closest when resolving module name ambiguities. (ocaml/dune#12587,
  @ElectreAAS and @Alizter)

- Fix: include the module alias in the transitive dependency closure with
  `(include_subdirs qualified)`. (ocaml/dune#12299, @anmonteiro)

- Improve error messages for invalid version formats containing non-ASCII
  characters. Previously, non-ASCII characters in version strings (e.g., `(lang
  dune è)` or `(using menhir π3.14)`) would fail with a generic "Invalid file"
  error. Now they display a clear message: "Invalid atom: contains non-ASCII
  character(s). Atoms must only contain ASCII characters." The fix is
  implemented at the lexer level, providing consistent error handling across all
  s-expression parsing. (ocaml/dune#12844, fixes ocaml/dune#12836, @benodiwal)

- Pass private modules with -H when this is available (ocaml/dune#12666, @rgrinberg)

- Allow multiple modules in `(modules_flags ...)`, in `coq.theory` (ocaml/dune#12733, @rlepigre)

- Improve error message for invalid version formats in both `(lang dune ...)` and
  `(using extension ...)` declarations. Changes "Atom of the form NNN.NNN expected"
  to "Invalid version. Version must be two numbers separated by a dot." (ocaml/dune#12833, @benodiwal)

- Fix crash when running `dune build @check` on a library with virtual modules.
  (ocaml/dune#12644, fixes ocaml/dune#12636, @Alizter)

- Provide a more informative error message when `(pkg enabled)` is put in
  `dune-project` instead of `dune-workspace`. (ocaml/dune#12802, fixes ocaml/dune#12801,
  @benodiwal)

- Improve error message when invalid version strings are used in `dune-project`
  files. Non-ASCII characters and malformed versions now show a helpful hint
  with an example of the correct format. (ocaml/dune#12794, fixes ocaml/dune#12751, @benodiwal)

- Stop hiding the `root_module` from the include path (ocaml/dune#12239, @rgrinberg)

- Allow `$ dune init` to work on absolute paths (ocaml/dune#12601, fixes ocaml/dune#7806,
  @rgrinberg)

- `(include_subdirs qualified)`: Add missing alias dependency to module group.
  (ocaml/dune#12530, @anmonteiro)

- Add Melange compilation to the `@all` alias in libraries (ocaml/dune#12628,
  @anmonteiro)

- Fix greedy version location in lang declarations. Previously, error locations for
  invalid lang versions would span multiple bytes for multi-byte UTF-8 characters,
  causing carets to appear misaligned and seemingly include the closing
  parenthesis. Now, error locations for ASCII strings show the full length (e.g.,
  "Ali" shows `^^^`), while non-ASCII strings show only the first byte (e.g., "è"
  shows `^`) to avoid multi-byte character display issues. (ocaml/dune#12869, fixes ocaml/dune#12806,
  @benodiwal)

- melange support: don't emit empty JavaScript modules for generated module
  aliases. (ocaml/dune#12464, @anmonteiro)

### Added

- (Experimental): Introduce the `library_parameter` stanza. It allows users to
  declare a parameter when using the OxCaml compiler.
  (ocaml/dune#11963, implements ocaml/dune#12084, @maiste)

- Added the ability to scroll horizontally in TUI. (ocaml/dune#12386, @Alizter)

- Feature: Include shell command that was executed when a cram test has
  occurred in the error message (ocaml/dune#12307, @rgrinberg)

-  support expanding variables in `(promote (into ..))` (ocaml/dune#12832, fixes ocaml/dune#12742,
   @anmonteiro)

- Add support for `%{cmt:...}` and `%{cmti:...}` variables to reference
  compiled annotation files (.cmt and .cmti) containing typed abstract syntax
  trees with location and type information. (ocaml/dune#12634, grants ocaml/dune#12633, @Alizter)

- Add `$ dune describe tests` to describe the tests in the workspace
  (@Gromototo, ocaml/dune#12545, fixes ocaml/dune#12030)

- Add `argv`, the process environment, and the dune version to the config event
  in the trace (ocaml/dune#12909, @rgrinberg)

- Allow `dune runtest` to properly run while a watch mode server is running.
  (ocaml/dune#12473, grants ocaml/dune#8114, @gridbugs and @ElectreAAS)

- Use copy-on-write (COW) when copying files on filesystems that support it
  (Btrfs, ZFS, XFS, etc), under Linux. (ocaml/dune#12074, fixes ocaml/dune#12071, @nojb)

- Add support for Tangled ATproto-based code repositories (ocaml/dune#12197, @avsm)

- Add support for instantiating OxCaml parameterised libraries.
  (ocaml/dune#12561, @art-w)

- Add a `(conflict_markers error|ignore)` option to the cram stanza. When
  `(conflict_markers error)` is set, the cram test will fail in the presence of
  conflict markers. Git, diff3 and jujutsu conflict markers are detected.
  (ocaml/dune#12538, ocaml/dune#12617, ocaml/dune#12655, fixes ocaml/dune#12512, @rgrinberg, @Alizter)

- Introduce a `%{ppx:lib1+..+libn}` stanza to make it possible to refer to ppx
  executables built by dune. This is useful for writing tests (ocaml/dune#12711,
  @rgrinberg)

- Introduce a `(dir ..)` field on packages defined in the `dune-project`. This
  field allows to associate a directory with a particular package. This makes
  dune automatically filter out all stanzas in this directory and its
  descendants with `--only-packages`. All users are recommended to switch to
  using this field. (ocaml/dune#12614, fixes ocaml/dune#3255, @rgrinberg)

- Add support for `DUNE_ROOT` environment variable, similar to the existing
  `--root` CLI parameter. (fixes ocaml/dune#12399 @sir4ur0n)

- Introduce an `unused-libs` alias to detect unused libraries.
  (ocaml/dune#12623, fixes ocaml/dune#650, @rgrinberg)

- Add `--files` flag to `dune describe opam-files` to print only the names of
  the opam files line by line. (ocaml/dune#9793, @reynir and @Alizter)

- `dune exec` now accepts absolute paths inside the workspace.
  (ocaml/dune#12094, @Alizter)

- Add `coqdoc_header` and `coqdoc_footer` fields to the `coq` field of the
  `env` stanza, and to the `coq.theory` stanza, allowing to configure a
  custom header or footer respectively in the HTML output of `coqdoc`.
  (ocaml/dune#11131, @rlepigre)

- Allow `dune fmt` to properly run while a watch mode server is running.
  Note that the `--preview` flag is not supported in this mode.
  (ocaml/dune#12064, @ElectreAAS)

- Support for generating `_CoqProject` files for `coq.theory` stanzas.
  (ocaml/dune#11752, @rlepigre)

- Added `(files)` stanza, similar to `(dirs)` to control which files are visible
  to Dune on a per-directory basis. (ocaml/dune#12879, @nojb)
- Add support for %{ocaml-config:ox} (ocaml/dune#12236, @jonludlam)

- Introduce `dune promotion show` command to display the contents of corrected
  files that are ready for promotion. This allows users to preview changes
  before running `dune promote`. The command accepts file arguments to show
  specific files, or displays all promotable files when called without
  arguments. (ocaml/dune#12669, fixes ocaml/dune#3883, @MixiMaxiMouse)
- New `(lang rocq)` build mode for Rocq 9.0 and later. This new mode
  is very similar to the existing `(lang coq)`, except that it doesn't
  need the `coq*` compatibility wrappers. As of today `(lang rocq)`
  doesn't support yet composed builds with Rocq itself, this will be
  added later.  `(lang coq)` is deprecated, development is frozen, and
  will be removed at some point in the future. (ocaml/dune#12035, @ejgallego,
  @Lysxia, fixes ocaml/dune#11572)

### Changed

- Don't run `ocamldep` to compute false dependencies on the `root_module`
  (ocaml/dune#12227, @rgrinberg)

- `dune format-dune-file` now uses the syntax version of the Dune project that
  contains the file being formatted (if any) instead of using the latest version
  available, which remains the default if there is no Dune project in scope.
  (ocaml/dune#11865, @nojb)

- Persistent DB and process events have been slightly modified. Persistent
  DB events have more concise names and job events always include full
  information. (ocaml/dune#12867, @rgrinberg)

- Removed the `--trace-extended` flag. Its functionality is always enabled when
  tracing is active (ocaml/dune#12908, @rgrinberg)

- The `test/dune` file generated by `dune init proj` now depends on the project library. (ocaml/dune#12791, @shonfeder)

- Starting with version 3.21 of the Dune language, Dune no longer changes the
  default set of compiler warnings. For users that would like to keep the old
  behaviour, the variable `%{dune-warnings}` can be used in an `(env)` stanza in
  a top-level Dune file: `(env (dev (flags :standard %{dune-warnings})))`.
  (ocaml/dune#12766, @nojb)
- Fix: stop generating `cmt` files for cinaps binaries (ocaml/dune#12530, @rgrinberg)
shonfeder added a commit to shonfeder/opam-repository that referenced this pull request Jan 5, 2026
CHANGES:

### Fixed

- Fix `include_subdirs qualified` incorrectly picking the furthest module
  instead of the closest when resolving module name ambiguities. (ocaml/dune#12587,
  @ElectreAAS and @Alizter)

- Fix: include the module alias in the transitive dependency closure with
  `(include_subdirs qualified)`. (ocaml/dune#12299, @anmonteiro)

- Improve error messages for invalid version formats containing non-ASCII
  characters. Previously, non-ASCII characters in version strings (e.g., `(lang
  dune è)` or `(using menhir π3.14)`) would fail with a generic "Invalid file"
  error. Now they display a clear message: "Invalid atom: contains non-ASCII
  character(s). Atoms must only contain ASCII characters." The fix is
  implemented at the lexer level, providing consistent error handling across all
  s-expression parsing. (ocaml/dune#12844, fixes ocaml/dune#12836, @benodiwal)

- Pass private modules with -H when this is available (ocaml/dune#12666, @rgrinberg)

- Allow multiple modules in `(modules_flags ...)`, in `coq.theory` (ocaml/dune#12733, @rlepigre)

- Improve error message for invalid version formats in both `(lang dune ...)` and
  `(using extension ...)` declarations. Changes "Atom of the form NNN.NNN expected"
  to "Invalid version. Version must be two numbers separated by a dot." (ocaml/dune#12833, @benodiwal)

- Fix crash when running `dune build @check` on a library with virtual modules.
  (ocaml/dune#12644, fixes ocaml/dune#12636, @Alizter)

- Provide a more informative error message when `(pkg enabled)` is put in
  `dune-project` instead of `dune-workspace`. (ocaml/dune#12802, fixes ocaml/dune#12801,
  @benodiwal)

- Improve error message when invalid version strings are used in `dune-project`
  files. Non-ASCII characters and malformed versions now show a helpful hint
  with an example of the correct format. (ocaml/dune#12794, fixes ocaml/dune#12751, @benodiwal)

- Stop hiding the `root_module` from the include path (ocaml/dune#12239, @rgrinberg)

- Allow `$ dune init` to work on absolute paths (ocaml/dune#12601, fixes ocaml/dune#7806,
  @rgrinberg)

- `(include_subdirs qualified)`: Add missing alias dependency to module group.
  (ocaml/dune#12530, @anmonteiro)

- Add Melange compilation to the `@all` alias in libraries (ocaml/dune#12628,
  @anmonteiro)

- Fix greedy version location in lang declarations. Previously, error locations for
  invalid lang versions would span multiple bytes for multi-byte UTF-8 characters,
  causing carets to appear misaligned and seemingly include the closing
  parenthesis. Now, error locations for ASCII strings show the full length (e.g.,
  "Ali" shows `^^^`), while non-ASCII strings show only the first byte (e.g., "è"
  shows `^`) to avoid multi-byte character display issues. (ocaml/dune#12869, fixes ocaml/dune#12806,
  @benodiwal)

- melange support: don't emit empty JavaScript modules for generated module
  aliases. (ocaml/dune#12464, @anmonteiro)

### Added

- (Experimental): Introduce the `library_parameter` stanza. It allows users to
  declare a parameter when using the OxCaml compiler.
  (ocaml/dune#11963, implements ocaml/dune#12084, @maiste)

- Added the ability to scroll horizontally in TUI. (ocaml/dune#12386, @Alizter)

- Feature: Include shell command that was executed when a cram test has
  occurred in the error message (ocaml/dune#12307, @rgrinberg)

-  support expanding variables in `(promote (into ..))` (ocaml/dune#12832, fixes ocaml/dune#12742,
   @anmonteiro)

- Add support for `%{cmt:...}` and `%{cmti:...}` variables to reference
  compiled annotation files (.cmt and .cmti) containing typed abstract syntax
  trees with location and type information. (ocaml/dune#12634, grants ocaml/dune#12633, @Alizter)

- Add `$ dune describe tests` to describe the tests in the workspace
  (@Gromototo, ocaml/dune#12545, fixes ocaml/dune#12030)

- Add `argv`, the process environment, and the dune version to the config event
  in the trace (ocaml/dune#12909, @rgrinberg)

- Allow `dune runtest` to properly run while a watch mode server is running.
  (ocaml/dune#12473, grants ocaml/dune#8114, @gridbugs and @ElectreAAS)

- Use copy-on-write (COW) when copying files on filesystems that support it
  (Btrfs, ZFS, XFS, etc), under Linux. (ocaml/dune#12074, fixes ocaml/dune#12071, @nojb)

- Add support for Tangled ATproto-based code repositories (ocaml/dune#12197, @avsm)

- Add support for instantiating OxCaml parameterised libraries.
  (ocaml/dune#12561, @art-w)

- Add a `(conflict_markers error|ignore)` option to the cram stanza. When
  `(conflict_markers error)` is set, the cram test will fail in the presence of
  conflict markers. Git, diff3 and jujutsu conflict markers are detected.
  (ocaml/dune#12538, ocaml/dune#12617, ocaml/dune#12655, fixes ocaml/dune#12512, @rgrinberg, @Alizter)

- Introduce a `%{ppx:lib1+..+libn}` stanza to make it possible to refer to ppx
  executables built by dune. This is useful for writing tests (ocaml/dune#12711,
  @rgrinberg)

- Introduce a `(dir ..)` field on packages defined in the `dune-project`. This
  field allows to associate a directory with a particular package. This makes
  dune automatically filter out all stanzas in this directory and its
  descendants with `--only-packages`. All users are recommended to switch to
  using this field. (ocaml/dune#12614, fixes ocaml/dune#3255, @rgrinberg)

- Add support for `DUNE_ROOT` environment variable, similar to the existing
  `--root` CLI parameter. (fixes ocaml/dune#12399 @sir4ur0n)

- Introduce an `unused-libs` alias to detect unused libraries.
  (ocaml/dune#12623, fixes ocaml/dune#650, @rgrinberg)

- Add `--files` flag to `dune describe opam-files` to print only the names of
  the opam files line by line. (ocaml/dune#9793, @reynir and @Alizter)

- `dune exec` now accepts absolute paths inside the workspace.
  (ocaml/dune#12094, @Alizter)

- Add `coqdoc_header` and `coqdoc_footer` fields to the `coq` field of the
  `env` stanza, and to the `coq.theory` stanza, allowing to configure a
  custom header or footer respectively in the HTML output of `coqdoc`.
  (ocaml/dune#11131, @rlepigre)

- Allow `dune fmt` to properly run while a watch mode server is running.
  Note that the `--preview` flag is not supported in this mode.
  (ocaml/dune#12064, @ElectreAAS)

- Support for generating `_CoqProject` files for `coq.theory` stanzas.
  (ocaml/dune#11752, @rlepigre)

- Added `(files)` stanza, similar to `(dirs)` to control which files are visible
  to Dune on a per-directory basis. (ocaml/dune#12879, @nojb)
- Add support for %{ocaml-config:ox} (ocaml/dune#12236, @jonludlam)

- Introduce `dune promotion show` command to display the contents of corrected
  files that are ready for promotion. This allows users to preview changes
  before running `dune promote`. The command accepts file arguments to show
  specific files, or displays all promotable files when called without
  arguments. (ocaml/dune#12669, fixes ocaml/dune#3883, @MixiMaxiMouse)
- New `(lang rocq)` build mode for Rocq 9.0 and later. This new mode
  is very similar to the existing `(lang coq)`, except that it doesn't
  need the `coq*` compatibility wrappers. As of today `(lang rocq)`
  doesn't support yet composed builds with Rocq itself, this will be
  added later.  `(lang coq)` is deprecated, development is frozen, and
  will be removed at some point in the future. (ocaml/dune#12035, @ejgallego,
  @Lysxia, fixes ocaml/dune#11572)

### Changed

- Don't run `ocamldep` to compute false dependencies on the `root_module`
  (ocaml/dune#12227, @rgrinberg)

- `dune format-dune-file` now uses the syntax version of the Dune project that
  contains the file being formatted (if any) instead of using the latest version
  available, which remains the default if there is no Dune project in scope.
  (ocaml/dune#11865, @nojb)

- Persistent DB and process events have been slightly modified. Persistent
  DB events have more concise names and job events always include full
  information. (ocaml/dune#12867, @rgrinberg)

- Removed the `--trace-extended` flag. Its functionality is always enabled when
  tracing is active (ocaml/dune#12908, @rgrinberg)

- The `test/dune` file generated by `dune init proj` now depends on the project library. (ocaml/dune#12791, @shonfeder)

- Starting with version 3.21 of the Dune language, Dune no longer changes the
  default set of compiler warnings. For users that would like to keep the old
  behaviour, the variable `%{dune-warnings}` can be used in an `(env)` stanza in
  a top-level Dune file: `(env (dev (flags :standard %{dune-warnings})))`.
  (ocaml/dune#12766, @nojb)
- Fix: stop generating `cmt` files for cinaps binaries (ocaml/dune#12530, @rgrinberg)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

dune describe doesn't show tests

3 participants