Skip to content

Build system CLI: behavior that disagrees with the help text #9242

Description

@cknitt

CLI behavior that disagrees with the help text or with common conventions. All reproduce with rescript 13.0.0-alpha.8 (found while reviewing #9238); paths are in rewatch-ocaml/.

  • --no-timing prints zero timings instead of none. In a terminal, rescript build -n prints Parsed 1 source files in 0.00s … Finished compilation in 0.00s. The times are zeroed (build.ml:305, build_report.ml:79, :108) instead of left out.
  • watch exits 0 when interrupted. rescript watch, then SIGINT or SIGTERM: prints Exiting..., exit 0. rescript watch --help says 129-143 when interrupted by a signal. rescript_ocaml.ml:84 maps Watcher.Stop to 0.
  • --after-build does not use a shell. rescript build --after-build 'echo hi; exit 3' prints hi; exit 3 and exits 0; quotes are passed literally ('echo "a b" c' prints "a b" c). after_build.ml:5 splits on whitespace. Either run the command through the shell or document that it is split on whitespace.
  • A missing dependency is a usage error and blocks clean. With "dependencies": ["missing-dep"] and nothing installed, both rescript build and rescript clean print Could not build package tree reading dependency 'missing-dep' at path '<project root>'. Error: Could not resolve dependency missing-dep and exit 2, the code for command-line usage errors. clean deletes nothing. The "at path" is the requesting project, not the dependency. (project_context.ml:169-173, rescript_ocaml.ml:73-76)
  • An unknown subcommand is reported as a lockfile problem. rescript bogus prints Could not start Rescript build: Could not write lockfile because the specified project folder does not exist: bogus, exit 1. A bare word is taken as the build folder (normalize_argv in cli.ml); the message should say that neither a command nor a folder of that name exists.
  • Invalid --features and --warn-error values are accepted silently. rescript build --features nope and rescript build --warn-error zzz exit 0 without a diagnostic; zzz is ignored (cli.ml:63-80 and the --warn-error option).
  • Some usage errors lack the Usage: line. rescript -v -q (rescript: --verbose cannot be used together with --quiet) and rescript format -c -s .res (rescript: --stdin conflicts with --check) exit 2 without it, unlike rescript build --unknown-option; they use Term.term_result without ~usage:true (cli.ml:42-47, :192-196). rescript compiler-args rescript.json prints compiler-args expects a .res or .resi source file without the rescript: prefix and exits 1 (compiler_args_command.ml:50).
  • -h and -V are undocumented. Both work, but rescript --help lists only --help[=FMT] and --version: cli.ml:286-336 rewrites them before Cmdliner sees them.

Activity

  1. added theissue type on Nov 5, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions