Skip to content

Conversation

@joshlf
Copy link
Member

@joshlf joshlf commented Feb 7, 2026


Latest Update: v31 — Compare vs v30

📚 Full Patch History

Links show the diff between the row version and the column version.

Version v30 v29 v28 v27 v26 v25 v24 v23 v22 v21 v20 v19 v18 v17 v16 v15 v14 v13 v12 v11 v10 v9 v8 v7 v6 v5 v4 v3 v2 v1 Base
v31 v30 v29 v28 v27 v26 v25 v24 v23 v22 v21 v20 v19 v18 v17 v16 v15 v14 v13 v12 v11 v10 v9 v8 v7 v6 v5 v4 v3 v2 v1 Base
v30 v29 v28 v27 v26 v25 v24 v23 v22 v21 v20 v19 v18 v17 v16 v15 v14 v13 v12 v11 v10 v9 v8 v7 v6 v5 v4 v3 v2 v1 Base
v29 v28 v27 v26 v25 v24 v23 v22 v21 v20 v19 v18 v17 v16 v15 v14 v13 v12 v11 v10 v9 v8 v7 v6 v5 v4 v3 v2 v1 Base
v28 v27 v26 v25 v24 v23 v22 v21 v20 v19 v18 v17 v16 v15 v14 v13 v12 v11 v10 v9 v8 v7 v6 v5 v4 v3 v2 v1 Base
v27 v26 v25 v24 v23 v22 v21 v20 v19 v18 v17 v16 v15 v14 v13 v12 v11 v10 v9 v8 v7 v6 v5 v4 v3 v2 v1 Base
v26 v25 v24 v23 v22 v21 v20 v19 v18 v17 v16 v15 v14 v13 v12 v11 v10 v9 v8 v7 v6 v5 v4 v3 v2 v1 Base
v25 v24 v23 v22 v21 v20 v19 v18 v17 v16 v15 v14 v13 v12 v11 v10 v9 v8 v7 v6 v5 v4 v3 v2 v1 Base
v24 v23 v22 v21 v20 v19 v18 v17 v16 v15 v14 v13 v12 v11 v10 v9 v8 v7 v6 v5 v4 v3 v2 v1 Base
v23 v22 v21 v20 v19 v18 v17 v16 v15 v14 v13 v12 v11 v10 v9 v8 v7 v6 v5 v4 v3 v2 v1 Base
v22 v21 v20 v19 v18 v17 v16 v15 v14 v13 v12 v11 v10 v9 v8 v7 v6 v5 v4 v3 v2 v1 Base
v21 v20 v19 v18 v17 v16 v15 v14 v13 v12 v11 v10 v9 v8 v7 v6 v5 v4 v3 v2 v1 Base
v20 v19 v18 v17 v16 v15 v14 v13 v12 v11 v10 v9 v8 v7 v6 v5 v4 v3 v2 v1 Base
v19 v18 v17 v16 v15 v14 v13 v12 v11 v10 v9 v8 v7 v6 v5 v4 v3 v2 v1 Base
v18 v17 v16 v15 v14 v13 v12 v11 v10 v9 v8 v7 v6 v5 v4 v3 v2 v1 Base
v17 v16 v15 v14 v13 v12 v11 v10 v9 v8 v7 v6 v5 v4 v3 v2 v1 Base
v16 v15 v14 v13 v12 v11 v10 v9 v8 v7 v6 v5 v4 v3 v2 v1 Base
v15 v14 v13 v12 v11 v10 v9 v8 v7 v6 v5 v4 v3 v2 v1 Base
v14 v13 v12 v11 v10 v9 v8 v7 v6 v5 v4 v3 v2 v1 Base
v13 v12 v11 v10 v9 v8 v7 v6 v5 v4 v3 v2 v1 Base
v12 v11 v10 v9 v8 v7 v6 v5 v4 v3 v2 v1 Base
v11 v10 v9 v8 v7 v6 v5 v4 v3 v2 v1 Base
v10 v9 v8 v7 v6 v5 v4 v3 v2 v1 Base
v9 v8 v7 v6 v5 v4 v3 v2 v1 Base
v8 v7 v6 v5 v4 v3 v2 v1 Base
v7 v6 v5 v4 v3 v2 v1 Base
v6 v5 v4 v3 v2 v1 Base
v5 v4 v3 v2 v1 Base
v4 v3 v2 v1 Base
v3 v2 v1 Base
v2 v1 Base
v1 Base
⬇️ Download this PR

Branch

git fetch origin refs/heads/G3220747e90b678c598c506be49219a8f75118988 && git checkout -b pr-G3220747e90b678c598c506be49219a8f75118988 FETCH_HEAD

Checkout

git fetch origin refs/heads/G3220747e90b678c598c506be49219a8f75118988 && git checkout FETCH_HEAD

Cherry Pick

git fetch origin refs/heads/G3220747e90b678c598c506be49219a8f75118988 && git cherry-pick FETCH_HEAD

Pull

git pull origin refs/heads/G3220747e90b678c598c506be49219a8f75118988

Stacked PRs enabled by GHerrit.

@gemini-code-assist
Copy link
Contributor

Summary of Changes

Hello @joshlf, I'm Gemini Code Assist1! I'm currently reviewing this pull request and will post my feedback shortly. In the meantime, here's a summary to help you and other reviewers quickly get up to speed!

This pull request significantly enhances the testing capabilities of the hermes tool by integrating a robust fixture testing framework. The changes involve restructuring the CLI to support subcommands, which allows for more organized and extensible command handling. The core impact is the establishment of a comprehensive suite of integration tests that validate hermes's behavior across a multitude of realistic and edge-case scenarios, ensuring greater reliability and maintainability of the tool.

Highlights

  • Fixture Testing Framework: Introduced a new fixture testing framework for the hermes tool, enabling comprehensive data-driven tests.
  • CLI Refactoring: Refactored the hermes command-line interface to utilize subcommands, starting with a new verify subcommand.
  • New Dependencies: Added several new Rust crates, including assert_cmd, tempfile, predicates, and datatest-stable, to support the new testing infrastructure.
  • Extensive Test Fixtures: Incorporated a wide array of test fixtures covering diverse scenarios such as broken doc blocks, CRLF endings, custom path modifications, external dependencies, and syntax errors.

🧠 New Feature in Public Preview: You can now enable Memory to help Gemini Code Assist learn from your team's feedback. This makes future code reviews more consistent and personalized to your project's style. Click here to enable Memory in your admin console.

Changelog
  • tools/Cargo.lock
    • Added new testing-related dependencies: assert_cmd, autocfg, bit-set, bit-vec, datatest-stable, difflib, escape8259, fancy-regex, fastrand, float-cmp, getrandom, libtest-mimic, normalize-line-endings, num-traits, predicates, predicates-core, predicates-tree, r-efi, tempfile, termtree, wait-timeout, wasip2, wit-bindgen.
  • tools/hermes/Cargo.toml
    • Added assert_cmd, tempfile, predicates, and datatest-stable as development dependencies.
    • Configured a new integration test target with harness = false.
  • tools/hermes/src/main.rs
    • Refactored Cli struct to use clap::Subcommand for command parsing.
    • Introduced Commands enum with a Verify subcommand, encapsulating previous root-level logic.
  • tools/hermes/tests/fixtures/broken_doc_block/expected_status.txt
    • Added new fixture file to define expected failure status.
  • tools/hermes/tests/fixtures/broken_doc_block/expected_stderr.txt
    • Added new fixture file to define expected stderr output.
  • tools/hermes/tests/fixtures/broken_doc_block/source/Cargo.toml
    • Added new fixture file for a broken_doc crate.
  • tools/hermes/tests/fixtures/broken_doc_block/source/src/lib.rs
    • Added new fixture file with an unclosed Lean doc block.
  • tools/hermes/tests/fixtures/crlf_endings/expected/src/lib.rs
    • Added new fixture file with normalized CRLF endings.
  • tools/hermes/tests/fixtures/crlf_endings/source/Cargo.toml
    • Added new fixture file for a crlf crate.
  • tools/hermes/tests/fixtures/crlf_endings/source/src/lib.rs
    • Added new fixture file with Windows-style line endings.
  • tools/hermes/tests/fixtures/custom_path_mod/expected/src/sys/unix.rs
    • Added new fixture file for expected custom path module.
  • tools/hermes/tests/fixtures/custom_path_mod/source/Cargo.toml
    • Added new fixture file for a custom crate.
  • tools/hermes/tests/fixtures/custom_path_mod/source/src/lib.rs
    • Added new fixture file demonstrating #[path] attribute for modules.
  • tools/hermes/tests/fixtures/custom_path_mod/source/src/sys/unix.rs
    • Added new fixture file for a custom Unix syscall module.
  • tools/hermes/tests/fixtures/deep_invocation/cwd.txt
    • Added new fixture file specifying a custom current working directory.
  • tools/hermes/tests/fixtures/deep_invocation/expected/src/nested/mod.rs
    • Added new fixture file for expected deep invocation module.
  • tools/hermes/tests/fixtures/deep_invocation/source/Cargo.toml
    • Added new fixture file for a deep crate.
  • tools/hermes/tests/fixtures/deep_invocation/source/src/lib.rs
    • Added new fixture file with a nested module declaration.
  • tools/hermes/tests/fixtures/deep_invocation/source/src/nested/mod.rs
    • Added new fixture file for a deeply nested function.
  • tools/hermes/tests/fixtures/dir_mod/expected/src/bar/mod.rs
    • Added new fixture file for expected directory module.
  • tools/hermes/tests/fixtures/dir_mod/source/Cargo.toml
    • Added new fixture file for a dir_mod crate.
  • tools/hermes/tests/fixtures/dir_mod/source/src/bar/mod.rs
    • Added new fixture file for a module defined in a directory.
  • tools/hermes/tests/fixtures/dir_mod/source/src/lib.rs
    • Added new fixture file declaring a directory-based module.
  • tools/hermes/tests/fixtures/dirty_target_dir/expected/src/lib.rs
    • Added new fixture file for expected clean output.
  • tools/hermes/tests/fixtures/dirty_target_dir/source/Cargo.toml
    • Added new fixture file for a cleaner crate.
  • tools/hermes/tests/fixtures/dirty_target_dir/source/src/lib.rs
    • Added new fixture file for a clean code example.
  • tools/hermes/tests/fixtures/external_dep_failure/cwd.txt
    • Added new fixture file specifying a custom current working directory for external dependency test.
  • tools/hermes/tests/fixtures/external_dep_failure/expected_status.txt
    • Added new fixture file to define expected failure status for external dependency.
  • tools/hermes/tests/fixtures/external_dep_failure/expected_stderr.txt
    • Added new fixture file to define expected stderr output for external dependency failure.
  • tools/hermes/tests/fixtures/external_dep_failure/source/app/Cargo.toml
    • Added new fixture file for an app crate with an external path dependency.
  • tools/hermes/tests/fixtures/external_dep_failure/source/app/src/lib.rs
    • Added new fixture file for the app crate's library.
  • tools/hermes/tests/fixtures/external_dep_failure/source/utils/Cargo.toml
    • Added new fixture file for a utils crate.
  • tools/hermes/tests/fixtures/external_dep_failure/source/utils/src/lib.rs
    • Added new fixture file for the utils crate's library.
  • tools/hermes/tests/fixtures/file_mod/expected/src/foo.rs
    • Added new fixture file for expected file module.
  • tools/hermes/tests/fixtures/file_mod/expected/src/lib.rs
    • Added new fixture file for expected library with file module.
  • tools/hermes/tests/fixtures/file_mod/source/Cargo.toml
    • Added new fixture file for a file_mod crate.
  • tools/hermes/tests/fixtures/file_mod/source/src/foo.rs
    • Added new fixture file for a module defined in a separate file.
  • tools/hermes/tests/fixtures/file_mod/source/src/lib.rs
    • Added new fixture file declaring a file-based module.
  • tools/hermes/tests/fixtures/ignored_files/expected/src/lib.rs
    • Added new fixture file for expected content after ignoring files.
  • tools/hermes/tests/fixtures/ignored_files/source/.gitignore
    • Added new fixture file to specify ignored files.
  • tools/hermes/tests/fixtures/ignored_files/source/Cargo.toml
    • Added new fixture file for an ignored crate.
  • tools/hermes/tests/fixtures/ignored_files/source/src/lib.rs
    • Added new fixture file with content to be kept.
  • tools/hermes/tests/fixtures/inline_mod/expected/src/lib.rs
    • Added new fixture file for expected inline module.
  • tools/hermes/tests/fixtures/inline_mod/source/Cargo.toml
    • Added new fixture file for an inline crate.
  • tools/hermes/tests/fixtures/inline_mod/source/src/lib.rs
    • Added new fixture file with an inline module declaration.
  • tools/hermes/tests/fixtures/large_assets/expected/assets/image.png
    • Added new fixture file for expected large asset content.
  • tools/hermes/tests/fixtures/large_assets/source/Cargo.toml
    • Added new fixture file for an assets crate.
  • tools/hermes/tests/fixtures/large_assets/source/assets/image.png
    • Added new fixture file for a fake binary image asset.
  • tools/hermes/tests/fixtures/large_assets/source/src/lib.rs
    • Added new fixture file for code alongside large assets.
  • tools/hermes/tests/fixtures/missing_cfg_mod/expected/src/lib.rs
    • Added new fixture file for expected conditional module.
  • tools/hermes/tests/fixtures/missing_cfg_mod/source/Cargo.toml
    • Added new fixture file for a missing crate.
  • tools/hermes/tests/fixtures/missing_cfg_mod/source/src/lib.rs
    • Added new fixture file with a conditional module that might be missing.
  • tools/hermes/tests/fixtures/multi_artifact/expected/src/lib.rs
    • Added new fixture file for expected shared library code.
  • tools/hermes/tests/fixtures/multi_artifact/source/Cargo.toml
    • Added new fixture file for a multi crate with multiple artifact types.
  • tools/hermes/tests/fixtures/multi_artifact/source/src/lib.rs
    • Added new fixture file for shared library logic.
  • tools/hermes/tests/fixtures/multiple_errors/expected_status.txt
    • Added new fixture file to define expected failure status for multiple errors.
  • tools/hermes/tests/fixtures/multiple_errors/expected_stderr.txt
    • Added new fixture file to define expected stderr output for multiple errors.
  • tools/hermes/tests/fixtures/multiple_errors/source/Cargo.toml
    • Added new fixture file for a multi_err crate.
  • tools/hermes/tests/fixtures/multiple_errors/source/src/a.rs
    • Added new fixture file with a syntax error.
  • tools/hermes/tests/fixtures/multiple_errors/source/src/b.rs
    • Added new fixture file with an unclosed doc block.
  • tools/hermes/tests/fixtures/multiple_errors/source/src/lib.rs
    • Added new fixture file declaring multiple erroneous modules.
  • tools/hermes/tests/fixtures/non_standard_layout/expected/code/custom.rs
    • Added new fixture file for expected non-standard layout.
  • tools/hermes/tests/fixtures/non_standard_layout/source/Cargo.toml
    • Added new fixture file for a custom_layout crate with a non-standard library path.
  • tools/hermes/tests/fixtures/non_standard_layout/source/code/custom.rs
    • Added new fixture file for a custom library path.
  • tools/hermes/tests/fixtures/syntax_error/expected_status.txt
    • Added new fixture file to define expected failure status for syntax error.
  • tools/hermes/tests/fixtures/syntax_error/expected_stderr.txt
    • Added new fixture file to define expected stderr output for syntax error.
  • tools/hermes/tests/fixtures/syntax_error/source/Cargo.toml
    • Added new fixture file for a broken crate.
  • tools/hermes/tests/fixtures/syntax_error/source/src/lib.rs
    • Added new fixture file with a syntax error.
  • tools/hermes/tests/fixtures/target_selection/args.txt
    • Added new fixture file specifying arguments for target selection.
  • tools/hermes/tests/fixtures/target_selection/expected/src/main.rs
    • Added new fixture file for expected main function after target selection.
  • tools/hermes/tests/fixtures/target_selection/source/Cargo.toml
    • Added new fixture file for a selector crate.
  • tools/hermes/tests/fixtures/target_selection/source/src/lib.rs
    • Added new fixture file for library logic that should be excluded by target selection.
  • tools/hermes/tests/fixtures/target_selection/source/src/main.rs
    • Added new fixture file for the main binary.
  • tools/hermes/tests/fixtures/unsafe_redaction/expected/src/lib.rs
    • Added new fixture file for expected unsafe code redaction.
  • tools/hermes/tests/fixtures/unsafe_redaction/source/Cargo.toml
    • Added new fixture file for an unsafe_test crate.
  • tools/hermes/tests/fixtures/unsafe_redaction/source/src/lib.rs
    • Added new fixture file with unsafe code.
  • tools/hermes/tests/fixtures/virtual_workspace/expected/crates/a/Cargo.toml
    • Added new fixture file for expected virtual workspace crate A.
  • tools/hermes/tests/fixtures/virtual_workspace/expected/crates/a/src/lib.rs
    • Added new fixture file for expected virtual workspace crate A library.
  • tools/hermes/tests/fixtures/virtual_workspace/source/Cargo.toml
    • Added new fixture file for a virtual workspace root.
  • tools/hermes/tests/fixtures/virtual_workspace/source/crates/a/Cargo.toml
    • Added new fixture file for crate A within a virtual workspace.
  • tools/hermes/tests/fixtures/virtual_workspace/source/crates/a/src/lib.rs
    • Added new fixture file for crate A's library within a virtual workspace.
  • tools/hermes/tests/integration.rs
    • Added a new integration test file integration.rs to implement fixture testing.
    • Utilizes datatest_stable::harness! macro to define and run tests based on hermes.toml patterns.
    • Includes logic for setting up sandboxed test environments, executing hermes commands, and asserting on exit status, stderr, and generated shadow crate content.
  • tools/vendor/assert_cmd/.cargo-checksum.json
    • Added vendored file for assert_cmd crate checksums.
  • tools/vendor/assert_cmd/.cargo_vcs_info.json
    • Added vendored file for assert_cmd crate VCS info.
  • tools/vendor/assert_cmd/Cargo.lock
    • Added vendored file for assert_cmd crate dependency lock.
  • tools/vendor/assert_cmd/Cargo.toml
    • Added vendored file for assert_cmd crate manifest.
  • tools/vendor/assert_cmd/Cargo.toml.orig
    • Added vendored file for original assert_cmd crate manifest.
  • tools/vendor/assert_cmd/LICENSE-APACHE
    • Added vendored file for assert_cmd Apache license.
  • tools/vendor/assert_cmd/LICENSE-MIT
    • Added vendored file for assert_cmd MIT license.
  • tools/vendor/assert_cmd/README.md
    • Added vendored file for assert_cmd README.
  • tools/vendor/assert_cmd/build.rs
    • Added vendored file for assert_cmd build script.
  • tools/vendor/assert_cmd/examples/example_fixture.rs
    • Added vendored file for assert_cmd example fixture.
  • tools/vendor/assert_cmd/examples/failure.rs
    • Added vendored file for assert_cmd failure example.
  • tools/vendor/assert_cmd/src/assert.rs
    • Added vendored file for assert_cmd assertion logic.
  • tools/vendor/assert_cmd/src/bin/bin_fixture.rs
    • Added vendored file for assert_cmd binary fixture.
  • tools/vendor/assert_cmd/src/cargo.rs
    • Added vendored file for assert_cmd cargo integration logic.
  • tools/vendor/assert_cmd/src/cmd.rs
    • Added vendored file for assert_cmd command wrapper logic.
  • tools/vendor/assert_cmd/src/color.rs
    • Added vendored file for assert_cmd color output logic.
  • tools/vendor/assert_cmd/src/lib.rs
    • Added vendored file for assert_cmd library entry point.
  • tools/vendor/assert_cmd/src/macros.rs
    • Added vendored file for assert_cmd macros.
  • tools/vendor/assert_cmd/src/output.rs
    • Added vendored file for assert_cmd output handling logic.
  • tools/vendor/autocfg/.cargo-checksum.json
    • Added vendored file for autocfg crate checksums.
  • tools/vendor/autocfg/.cargo_vcs_info.json
    • Added vendored file for autocfg crate VCS info.
  • tools/vendor/autocfg/Cargo.lock
    • Added vendored file for autocfg crate dependency lock.
  • tools/vendor/autocfg/Cargo.toml
    • Added vendored file for autocfg crate manifest.
  • tools/vendor/autocfg/Cargo.toml.orig
    • Added vendored file for original autocfg crate manifest.
  • tools/vendor/autocfg/LICENSE-APACHE
    • Added vendored file for autocfg Apache license.
  • tools/vendor/autocfg/LICENSE-MIT
    • Added vendored file for autocfg MIT license.
  • tools/vendor/autocfg/README.md
    • Added vendored file for autocfg README.
  • tools/vendor/autocfg/examples/integers.rs
    • Added vendored file for autocfg integers example.
  • tools/vendor/autocfg/examples/nightly.rs
    • Added vendored file for autocfg nightly example.
  • tools/vendor/autocfg/examples/paths.rs
    • Added vendored file for autocfg paths example.
  • tools/vendor/autocfg/examples/traits.rs
    • Added vendored file for autocfg traits example.
  • tools/vendor/autocfg/examples/versions.rs
    • Added vendored file for autocfg versions example.
  • tools/vendor/autocfg/src/error.rs
    • Added vendored file for autocfg error handling.
  • tools/vendor/autocfg/src/lib.rs
    • Added vendored file for autocfg library entry point.
  • tools/vendor/autocfg/src/rustc.rs
    • Added vendored file for autocfg rustc interaction logic.
  • tools/vendor/autocfg/src/tests.rs
    • Added vendored file for autocfg internal tests.
  • tools/vendor/autocfg/src/version.rs
    • Added vendored file for autocfg version parsing.
  • tools/vendor/autocfg/tests/no_std.rs
    • Added vendored file for autocfg no_std tests.
  • tools/vendor/autocfg/tests/rustflags.rs
    • Added vendored file for autocfg rustflags tests.
  • tools/vendor/autocfg/tests/support/mod.rs
    • Added vendored file for autocfg test support utilities.
  • tools/vendor/autocfg/tests/tests.rs
    • Added vendored file for autocfg integration tests.
  • tools/vendor/autocfg/tests/wrap_ignored
    • Added vendored file for autocfg wrapper ignore test.
  • tools/vendor/autocfg/tests/wrappers.rs
    • Added vendored file for autocfg wrapper tests.
  • tools/vendor/bit-set/.cargo-checksum.json
    • Added vendored file for bit-set crate checksums.
  • tools/vendor/bit-set/.cargo-rdme.toml
    • Added vendored file for bit-set cargo-rdme config.
  • tools/vendor/bit-set/.cargo_vcs_info.json
    • Added vendored file for bit-set crate VCS info.
  • tools/vendor/bit-set/.github/workflows/rust.yml
    • Added vendored file for bit-set CI workflow.
  • tools/vendor/bit-set/Cargo.toml
    • Added vendored file for bit-set crate manifest.
  • tools/vendor/bit-set/Cargo.toml.orig
    • Added vendored file for original bit-set crate manifest.
  • tools/vendor/bit-set/LICENSE-APACHE
    • Added vendored file for bit-set Apache license.
  • tools/vendor/bit-set/LICENSE-MIT
    • Added vendored file for bit-set MIT license.
  • tools/vendor/bit-set/README.md
    • Added vendored file for bit-set README.
  • tools/vendor/bit-set/RELEASES.md
    • Added vendored file for bit-set releases.
  • tools/vendor/bit-set/benches/bench.rs
    • Added vendored file for bit-set benchmarks.
  • tools/vendor/bit-set/src/lib.rs
    • Added vendored file for bit-set library entry point.
  • tools/vendor/bit-vec/.cargo-checksum.json
    • Added vendored file for bit-vec crate checksums.
  • tools/vendor/bit-vec/.cargo-rdme.toml
    • Added vendored file for bit-vec cargo-rdme config.
  • tools/vendor/bit-vec/.cargo_vcs_info.json
    • Added vendored file for bit-vec crate VCS info.
  • tools/vendor/bit-vec/.github/workflows/rust.yml
    • Added vendored file for bit-vec CI workflow.
  • tools/vendor/bit-vec/.vscode/settings.json
    • Added vendored file for bit-vec VSCode settings.
  • tools/vendor/bit-vec/Cargo.toml
    • Added vendored file for bit-vec crate manifest.
  • tools/vendor/bit-vec/Cargo.toml.orig
    • Added vendored file for original bit-vec crate manifest.
  • tools/vendor/bit-vec/LICENSE-APACHE
    • Added vendored file for bit-vec Apache license.
  • tools/vendor/bit-vec/LICENSE-MIT
    • Added vendored file for bit-vec MIT license.
  • tools/vendor/bit-vec/README.md
    • Added vendored file for bit-vec README.
  • tools/vendor/bit-vec/RELEASES.md
    • Added vendored file for bit-vec releases.
  • tools/vendor/bit-vec/benches/bench.rs
    • Added vendored file for bit-vec benchmarks.
  • tools/vendor/bit-vec/crusader.sh
    • Added vendored file for bit-vec crusader script.
  • tools/vendor/bit-vec/src/lib.rs
    • Added vendored file for bit-vec library entry point.
  • tools/vendor/datatest-stable/.cargo-checksum.json
    • Added vendored file for datatest-stable crate checksums.
  • tools/vendor/datatest-stable/.cargo/config.toml
    • Added vendored file for datatest-stable cargo config.
  • tools/vendor/datatest-stable/.cargo_vcs_info.json
    • Added vendored file for datatest-stable crate VCS info.
  • tools/vendor/datatest-stable/.github/codecov.yml
    • Added vendored file for datatest-stable codecov config.
  • tools/vendor/datatest-stable/.github/renovate.json
    • Added vendored file for datatest-stable renovate config.
  • tools/vendor/datatest-stable/.github/workflows/ci.yml
    • Added vendored file for datatest-stable CI workflow.
  • tools/vendor/datatest-stable/.github/workflows/coverage.yml
    • Added vendored file for datatest-stable coverage workflow.
  • tools/vendor/datatest-stable/.github/workflows/docs.yml
    • Added vendored file for datatest-stable docs workflow.
  • tools/vendor/datatest-stable/.github/workflows/release.yml
    • Added vendored file for datatest-stable release workflow.
  • tools/vendor/datatest-stable/CHANGELOG.md
    • Added vendored file for datatest-stable changelog.
  • tools/vendor/datatest-stable/CONTRIBUTING.md
    • Added vendored file for datatest-stable contributing guidelines.
  • tools/vendor/datatest-stable/Cargo.lock
    • Added vendored file for datatest-stable crate dependency lock.
  • tools/vendor/datatest-stable/Cargo.toml
    • Added vendored file for datatest-stable crate manifest.
  • tools/vendor/datatest-stable/Cargo.toml.orig
    • Added vendored file for original datatest-stable crate manifest.
  • tools/vendor/datatest-stable/Justfile
    • Added vendored file for datatest-stable Justfile.
  • tools/vendor/datatest-stable/LICENSE-APACHE
    • Added vendored file for datatest-stable Apache license.
  • tools/vendor/datatest-stable/LICENSE-MIT
    • Added vendored file for datatest-stable MIT license.
  • tools/vendor/datatest-stable/README.md
    • Added vendored file for datatest-stable README.
  • tools/vendor/datatest-stable/release.toml
    • Added vendored file for datatest-stable release config.
  • tools/vendor/datatest-stable/scripts/cargo-release-publish.sh
    • Added vendored file for datatest-stable cargo release publish script.
  • tools/vendor/datatest-stable/scripts/fix-readmes.awk
    • Added vendored file for datatest-stable fix readmes script.
  • tools/vendor/datatest-stable/src/data_source.rs
    • Added vendored file for datatest-stable data source logic.
  • tools/vendor/datatest-stable/src/lib.rs
    • Added vendored file for datatest-stable library entry point.
  • tools/vendor/datatest-stable/src/macros.rs
    • Added vendored file for datatest-stable macros.
  • tools/vendor/datatest-stable/src/runner.rs
    • Added vendored file for datatest-stable test runner logic.
  • tools/vendor/datatest-stable/tests/compile-fail/empty-arg-list.rs
    • Added vendored file for datatest-stable compile-fail test.
  • tools/vendor/datatest-stable/tests/compile-fail/empty-arg-list.stderr
    • Added vendored file for datatest-stable compile-fail stderr output.
  • tools/vendor/datatest-stable/tests/compile-fail/extra-args.rs
    • Added vendored file for datatest-stable compile-fail test.
  • tools/vendor/datatest-stable/tests/compile-fail/extra-args.stderr
    • Added vendored file for datatest-stable compile-fail stderr output.
  • tools/vendor/datatest-stable/tests/compile-fail/incorrect-arg-in-pattern.rs
    • Added vendored file for datatest-stable compile-fail test.
  • tools/vendor/datatest-stable/tests/compile-fail/incorrect-arg-in-pattern.stderr
    • Added vendored file for datatest-stable compile-fail stderr output.
  • tools/vendor/datatest-stable/tests/compile-fail/missing-root-comma.rs
    • Added vendored file for datatest-stable compile-fail test.
  • tools/vendor/datatest-stable/tests/compile-fail/missing-root-comma.stderr
    • Added vendored file for datatest-stable compile-fail stderr output.
  • tools/vendor/datatest-stable/tests/compile-fail/missing-root-no-args.rs
    • Added vendored file for datatest-stable compile-fail test.
  • tools/vendor/datatest-stable/tests/compile-fail/missing-root-no-args.stderr
    • Added vendored file for datatest-stable compile-fail stderr output.
  • tools/vendor/datatest-stable/tests/compile-fail/missing-root-no-comma.rs
    • Added vendored file for datatest-stable compile-fail test.
  • tools/vendor/datatest-stable/tests/compile-fail/missing-root-no-comma.stderr
    • Added vendored file for datatest-stable compile-fail stderr output.
  • tools/vendor/datatest-stable/tests/compile-fail/missing-test-comma.rs
    • Added vendored file for datatest-stable compile-fail test.
  • tools/vendor/datatest-stable/tests/compile-fail/missing-test-comma.stderr
    • Added vendored file for datatest-stable compile-fail stderr output.
  • tools/vendor/datatest-stable/tests/compile-fail/missing-test-no-comma.rs
    • Added vendored file for datatest-stable compile-fail test.
  • tools/vendor/datatest-stable/tests/compile-fail/missing-test-no-comma.stderr
    • Added vendored file for datatest-stable compile-fail stderr output.
  • tools/vendor/datatest-stable/tests/compile-fail/old-format.rs
    • Added vendored file for datatest-stable compile-fail test.
  • tools/vendor/datatest-stable/tests/compile-fail/old-format.stderr
    • Added vendored file for datatest-stable compile-fail stderr output.
  • tools/vendor/datatest-stable/tests/compile-fail/pattern-not-ident.rs
    • Added vendored file for datatest-stable compile-fail test.
  • tools/vendor/datatest-stable/tests/compile-fail/pattern-not-ident.stderr
    • Added vendored file for datatest-stable compile-fail stderr output.
  • tools/vendor/datatest-stable/tests/compile-fail/root-not-ident.rs
    • Added vendored file for datatest-stable compile-fail test.
  • tools/vendor/datatest-stable/tests/compile-fail/root-not-ident.stderr
    • Added vendored file for datatest-stable compile-fail stderr output.
  • tools/vendor/datatest-stable/tests/compile-fail/root-out-of-order.rs
    • Added vendored file for datatest-stable compile-fail test.
  • tools/vendor/datatest-stable/tests/compile-fail/root-out-of-order.stderr
    • Added vendored file for datatest-stable compile-fail stderr output.
  • tools/vendor/datatest-stable/tests/compile-fail/test-not-ident.rs
    • Added vendored file for datatest-stable compile-fail test.
  • tools/vendor/datatest-stable/tests/compile-fail/test-not-ident.stderr
    • Added vendored file for datatest-stable compile-fail stderr output.
  • tools/vendor/datatest-stable/tests/compile-fail/test-out-of-order.rs
    • Added vendored file for datatest-stable compile-fail test.
  • tools/vendor/datatest-stable/tests/compile-fail/test-out-of-order.stderr
    • Added vendored file for datatest-stable compile-fail stderr output.
  • tools/vendor/datatest-stable/tests/example.rs
    • Added vendored file for datatest-stable example test.
  • tools/vendor/datatest-stable/tests/files/b.txt
    • Added vendored file for datatest-stable test fixture.
  • tools/vendor/datatest-stable/tests/files/c.skip.txt
    • Added vendored file for datatest-stable test fixture.
  • tools/vendor/datatest-stable/tests/files/dir/a.txt
    • Added vendored file for datatest-stable test fixture.
  • tools/vendor/datatest-stable/tests/files/other.json
    • Added vendored file for datatest-stable test fixture.
  • tools/vendor/datatest-stable/tests/integration.rs
    • Added vendored file for datatest-stable integration test.
  • tools/vendor/difflib/.cargo-checksum.json
    • Added vendored file for difflib crate checksums.
  • tools/vendor/difflib/Cargo.toml
    • Added vendored file for difflib crate manifest.
  • tools/vendor/difflib/Cargo.toml.orig
    • Added vendored file for original difflib crate manifest.
  • tools/vendor/difflib/examples/example.rs
    • Added vendored file for difflib example.
  • tools/vendor/difflib/src/differ.rs
    • Added vendored file for difflib differ logic.
  • tools/vendor/difflib/src/lib.rs
    • Added vendored file for difflib library entry point.
  • tools/vendor/difflib/src/sequencematcher.rs
    • Added vendored file for difflib sequence matcher logic.
  • tools/vendor/difflib/src/utils.rs
    • Added vendored file for difflib utilities.
  • tools/vendor/difflib/tests/tests.rs
    • Added vendored file for difflib tests.
  • tools/vendor/escape8259/.cargo-checksum.json
    • Added vendored file for escape8259 crate checksums.
  • tools/vendor/escape8259/.cargo_vcs_info.json
    • Added vendored file for escape8259 crate VCS info.
  • tools/vendor/escape8259/Cargo.toml
    • Added vendored file for escape8259 crate manifest.
  • tools/vendor/escape8259/Cargo.toml.orig
    • Added vendored file for original escape8259 crate manifest.
  • tools/vendor/escape8259/LICENSE
    • Added vendored file for escape8259 license.
  • tools/vendor/escape8259/README.md
    • Added vendored file for escape8259 README.
  • tools/vendor/escape8259/src/lib.rs
    • Added vendored file for escape8259 library entry point.
  • tools/vendor/fancy-regex/.cargo-checksum.json
    • Added vendored file for fancy-regex crate checksums.
  • tools/vendor/fancy-regex/.cargo_vcs_info.json
    • Added vendored file for fancy-regex crate VCS info.
  • tools/vendor/fancy-regex/AUTHORS
    • Added vendored file for fancy-regex authors list.
  • tools/vendor/fancy-regex/CHANGELOG.md
    • Added vendored file for fancy-regex changelog.
  • tools/vendor/fancy-regex/CONTRIBUTING.md
    • Added vendored file for fancy-regex contributing guidelines.
  • tools/vendor/fancy-regex/Cargo.lock
    • Added vendored file for fancy-regex crate dependency lock.
  • tools/vendor/fancy-regex/Cargo.toml
    • Added vendored file for fancy-regex crate manifest.
  • tools/vendor/fancy-regex/Cargo.toml.orig
    • Added vendored file for original fancy-regex crate manifest.
  • tools/vendor/fancy-regex/LICENSE
    • Added vendored file for fancy-regex license.
  • tools/vendor/fancy-regex/PERFORMANCE.md
    • Added vendored file for fancy-regex performance notes.
  • tools/vendor/fancy-regex/README.md
    • Added vendored file for fancy-regex README.
  • tools/vendor/fancy-regex/benches/bench.rs
    • Added vendored file for fancy-regex benchmarks.
  • tools/vendor/fancy-regex/codecov.yml
    • Added vendored file for fancy-regex codecov config.
  • tools/vendor/fancy-regex/examples/toy.rs
    • Added vendored file for fancy-regex toy example.
  • tools/vendor/fancy-regex/src/analyze.rs
    • Added vendored file for fancy-regex analysis logic.
  • tools/vendor/fancy-regex/src/compile.rs
    • Added vendored file for fancy-regex compilation logic.
  • tools/vendor/fancy-regex/src/error.rs
    • Added vendored file for fancy-regex error handling.
  • tools/vendor/fancy-regex/src/expand.rs
    • Added vendored file for fancy-regex expansion logic.
  • tools/vendor/fancy-regex/src/lib.rs
    • Added vendored file for fancy-regex library entry point.
  • tools/vendor/fancy-regex/src/parse.rs
    • Added vendored file for fancy-regex parsing logic.
  • tools/vendor/fancy-regex/src/replacer.rs
    • Added vendored file for fancy-regex replacer logic.
  • tools/vendor/fancy-regex/src/vm.rs
    • Added vendored file for fancy-regex VM logic.
  • tools/vendor/fancy-regex/tests/captures.rs
    • Added vendored file for fancy-regex captures tests.
  • tools/vendor/fancy-regex/tests/common/mod.rs
    • Added vendored file for fancy-regex common test utilities.
  • tools/vendor/fancy-regex/tests/finding.rs
    • Added vendored file for fancy-regex finding tests.
  • tools/vendor/fancy-regex/tests/matching.rs
    • Added vendored file for fancy-regex matching tests.
  • tools/vendor/fancy-regex/tests/oniguruma.rs
    • Added vendored file for fancy-regex Oniguruma tests.
  • tools/vendor/fancy-regex/tests/oniguruma/.gitattributes
    • Added vendored file for fancy-regex Oniguruma gitattributes.
  • tools/vendor/fancy-regex/tests/oniguruma/README.md
    • Added vendored file for fancy-regex Oniguruma README.
  • tools/vendor/fancy-regex/tests/oniguruma/test_utf8.c
    • Added vendored file for fancy-regex Oniguruma UTF-8 test.
  • tools/vendor/fancy-regex/tests/oniguruma/test_utf8_ignore.c
    • Added vendored file for fancy-regex Oniguruma UTF-8 ignore test.
  • tools/vendor/fancy-regex/tests/regex_options.rs
    • Added vendored file for fancy-regex regex options tests.
  • tools/vendor/fancy-regex/tests/replace.rs
    • Added vendored file for fancy-regex replace tests.
  • tools/vendor/fancy-regex/tests/splitting.rs
    • Added vendored file for fancy-regex splitting tests.
Activity
  • The pull request introduces a new integration test suite (integration.rs) which uses datatest-stable to run a variety of fixture-based tests.
  • A large number of new test fixture files have been added under tools/hermes/tests/fixtures/ to cover different scenarios and edge cases.
  • The hermes CLI has been refactored to support subcommands, indicating a structural change in how the tool's functionalities are organized and invoked.
  • The Cargo.lock file has been updated with numerous new dependencies, reflecting the addition of several testing-related crates and their transitive dependencies.
  • The presence of gherrit-pr-id suggests this PR might be part of a larger, external code review system, indicating a structured development process.
Using Gemini Code Assist

The full guide for Gemini Code Assist can be found on our documentation page, here are some quick tips.

Invoking Gemini

You can request assistance from Gemini at any point by creating a comment using either /gemini <command> or @gemini-code-assist <command>. Below is a summary of the supported commands on the current page.

Feature Command Description
Code Review /gemini review Performs a code review for the current pull request in its current state.
Pull Request Summary /gemini summary Provides a summary of the current pull request in its current state.
Comment @gemini-code-assist Responds in comments when explicitly tagged, both in pull request comments and review comments.
Help /gemini help Displays a list of available commands.

Customization

To customize Gemini Code Assist for GitHub experience, repository maintainers can create a configuration file and/or provide a custom code review style guide (such as PEP-8 for Python) by creating and adding files to a .gemini/ folder in the base of the repository. Detailed instructions can be found here.

Limitations & Feedback

Gemini Code Assist may make mistakes. Please leave feedback on any instances where its feedback is incorrect or counter productive. You can react with 👍 and 👎 on @gemini-code-assist comments. If you're interested in giving your feedback about your experience with Gemini Code Assist for Github and other Google products, sign up here.

You can also get AI-powered code generation, chat, as well as code reviews directly in the IDE at no cost with the Gemini Code Assist IDE Extension.

Footnotes

  1. Review the Privacy Notices, Generative AI Prohibited Use Policy, Terms of Service, and learn how to configure Gemini Code Assist in GitHub here. Gemini can make mistakes, so double check it and use code with caution.

@joshlf joshlf force-pushed the G3220747e90b678c598c506be49219a8f75118988 branch from 5940683 to e477af0 Compare February 7, 2026 17:55
Copy link
Contributor

@gemini-code-assist gemini-code-assist bot left a comment

Choose a reason for hiding this comment

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

Code Review

This pull request introduces a robust fixture-based testing framework for hermes using datatest-stable and assert_cmd, which is a significant step towards ensuring the tool's correctness and stability. The refactoring of the command-line interface in main.rs to use subcommands is also a welcome change for future extensibility. I have a couple of suggestions to improve the test harness implementation regarding efficiency and robustness.

let expected_content = fs::read_to_string(expected_path)?;
let actual_content = fs::read_to_string(&actual_path)?;
Copy link
Contributor

Choose a reason for hiding this comment

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

high

Using fs::read_to_string will cause a panic if any of the test fixtures are binary files. To make this more robust, you should use fs::read to get the contents as bytes. Then, you can use String::from_utf8_lossy to handle both text and binary files gracefully before normalizing line endings.

        let expected_bytes = fs::read(expected_path)?;
        let actual_bytes = fs::read(&actual_path)?;

Comment on lines +46 to +80
// Tests can specify the expected exit status.
let expected_status_file = test_case_root.join("expected_status.txt");
let assert = if expected_status_file.exists() {
let status = fs::read_to_string(&expected_status_file)?;
if status.trim() == "failure" {
assert.failure()
} else {
assert.success()
}
} else {
// Default to expecting success
assert.success()
};

// Tests can specify the expected stderr.
let expected_stderr_file = test_case_root.join("expected_stderr.txt");
if expected_stderr_file.exists() {
let needle = fs::read_to_string(expected_stderr_file)?;
assert.stderr(predicates::str::contains(needle.trim()));
}

// Tests can specify the expected shadow crate content.
let actual_shadow = sandbox_root.join("target/hermes_shadow");
let expected_shadow = test_case_root.join("expected");

if expected_shadow.exists() {
assert_directories_match(&expected_shadow, &actual_shadow)?;
} else {
// If the test expects failure, we may not have a shadow crate to check.
// Only warn if we expected success but found no 'expected' dir.
if !expected_status_file.exists()
|| fs::read_to_string(&expected_status_file)?.trim() != "failure"
{
eprintln!("WARNING: No 'expected' directory found for test case '{}'", test_name);
}
}
Copy link
Contributor

Choose a reason for hiding this comment

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

medium

This block reads expected_status.txt twice: once to set the assertion and once to decide whether to print a warning. This is inefficient. You can refactor this logic to read the file only once, store its content, and reuse it.

    // Tests can specify the expected exit status.
    let expected_status_file = test_case_root.join("expected_status.txt");
    let expects_failure = if let Ok(status) = fs::read_to_string(&expected_status_file) {
        status.trim() == "failure"
    } else {
        false
    };

    let assert = if expects_failure {
        assert.failure()
    } else {
        assert.success()
    };

    // Tests can specify the expected stderr.
    let expected_stderr_file = test_case_root.join("expected_stderr.txt");
    if expected_stderr_file.exists() {
        let needle = fs::read_to_string(expected_stderr_file)?;
        assert.stderr(predicates::str::contains(needle.trim()));
    }

    // Tests can specify the expected shadow crate content.
    let actual_shadow = sandbox_root.join("target/hermes_shadow");
    let expected_shadow = test_case_root.join("expected");

    if expected_shadow.exists() {
        assert_directories_match(&expected_shadow, &actual_shadow)?;
    } else {
        // If the test expects failure, we may not have a shadow crate to check.
        // Only warn if we expected success but found no 'expected' dir.
        if !expects_failure {
            eprintln!("WARNING: No 'expected' directory found for test case '{}'", test_name);
        }
    }

@joshlf joshlf force-pushed the G3220747e90b678c598c506be49219a8f75118988 branch from e477af0 to ec619c0 Compare February 7, 2026 17:56
@codecov-commenter
Copy link

codecov-commenter commented Feb 7, 2026

Codecov Report

✅ All modified and coverable lines are covered by tests.
⚠️ Please upload report for BASE (G2f234da34d5c9cd516c08526882baaee631fe7d2@1355228). Learn more about missing BASE report.

Additional details and impacted files
@@                             Coverage Diff                              @@
##             G2f234da34d5c9cd516c08526882baaee631fe7d2    #3010   +/-   ##
============================================================================
  Coverage                                             ?   91.87%           
============================================================================
  Files                                                ?       20           
  Lines                                                ?     6057           
  Branches                                             ?        0           
============================================================================
  Hits                                                 ?     5565           
  Misses                                               ?      492           
  Partials                                             ?        0           

☔ View full report in Codecov by Sentry.
📢 Have feedback on the report? Share it here.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.

@joshlf joshlf force-pushed the G3220747e90b678c598c506be49219a8f75118988 branch from ec619c0 to 75e4b1c Compare February 7, 2026 18:09
@joshlf
Copy link
Member Author

joshlf commented Feb 7, 2026

/gemini review

Copy link
Contributor

@gemini-code-assist gemini-code-assist bot left a comment

Choose a reason for hiding this comment

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

Code Review

This pull request introduces a fixture-based integration testing framework for hermes using datatest-stable and assert_cmd. A comprehensive set of test cases has been added to cover various scenarios, including different module structures, error conditions, and workspace setups. The CLI has also been refactored to use subcommands, improving its extensibility. The changes are well-structured and significantly improve the project's test coverage. My main feedback is a suggestion to make the test argument parsing more robust.

let args_file = test_case_root.join("args.txt");
if args_file.exists() {
let args_str = fs::read_to_string(args_file)?;
cmd.args(args_str.trim().split_whitespace());
Copy link
Contributor

Choose a reason for hiding this comment

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

medium

The use of split_whitespace() to parse arguments from args.txt is not robust for arguments that may contain spaces, such as file paths. This could lead to unexpected behavior where an argument is split into multiple parts.

For more robust argument parsing that handles quotes and spaces correctly, consider using the shlex crate. This will make the test harness more resilient to complex arguments in the future.

Example with shlex:

// In Cargo.toml, under [dev-dependencies]
// shlex = "1.1.0"

// In integration.rs
if args_file.exists() {
    let args_str = fs::read_to_string(args_file)?;
    match shlex::split(&args_str) {
        Some(args) => cmd.args(args),
        None => panic!("invalid shell-like syntax in args.txt: {}", args_str),
    };
} else {
    cmd.arg("verify");
}

gherrit-pr-id: G3220747e90b678c598c506be49219a8f75118988
@joshlf joshlf force-pushed the G3220747e90b678c598c506be49219a8f75118988 branch from 03142cc to db80a43 Compare February 10, 2026 23:18
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.

2 participants