Skip to content

Feature Requst: Add regex support to test filters #53278

Open

Description

@TyOverby

Proposal

I'd like to filter my tests based on a more complex pattern than just substring.

The current behavior of rust tests is that when a pattern is specified, then only tests that contain that pattern as a substring are run.

cargo test -- foo will run only tests that contain the substring foo.

I propose to amend this to allow for a regex syntax.

cargo test -- /regex/ which will run tests that match the regex regex.

This is "technically" a breaking change because it's possible that people are already using filters with slashes in them, but since test names can't contain slashes these invocations would always be running 0 tests.

Misc

  • Let me know if this should be an RFC. The feature seems pretty small, but I'd understand if it should be more speced out.
  • I'd be happy to implement this if people are interested.

Activity

  1. added
    C-feature-requestCategory: A feature request, i.e: not implemented / a PR.
    A-libtestArea: `#[test]` / the `test` library
    on Jan 11, 2019
  2. ririsoft commented on Oct 11, 2019

    @ririsoft

    Hello,

    I came to this issue while trying to run only one test in a test suite with several tests sharing the same base name. Coming from Go I wanted to run a test with foo$ for instance.

    However reading this comment on Cargo, I discovered the --exact option that perfectly suite my needs.

    While I believe this feature request would be a plus, I recognize that the substring feature is enough for me so far.

  3. kennytm commented on Sep 24, 2020

    @kennytm
    Member

    This is "technically" a breaking change because it's possible that people are already using filters with slashes in them,

    We could make it truly backward-compatible by introducing a --regex flag like the existing --exact flag (#38181)

    cargo test -Z unstable-options --regex 'foo$'

    One potential issue is that this makes libtest depends on regex.

  4. Jasonoro commented on Nov 25, 2020

    @Jasonoro

    This looks like useful functionality, and I would like to take a stab at trying to implement it. Using a --regex flag seems like a good idea.

    @kennytm You said that making libtest depend on regex might be an issue. Do you have any idea on who to ping to find out if this is a big issue or not? The dev guide just has a TODO there, and while the regex crate is approved I'd like to get some clarification on that.

    @rustbot claim

  5. Jasonoro commented on Feb 7, 2021

    @Jasonoro

    This is currently blocked on rust-lang/regex#476, due to the fact that regex requires std which isn't available when building libtest. See also the following zulipchat conversation.

  6. Jasonoro commented on Feb 15, 2021

    @Jasonoro

    Some more discussion has been started in this conversation. I'll update the issue when a conclusion has been reached.

  7. RalfJung commented on Aug 11, 2022

    @RalfJung
    Member

    /filter/ seems nice because it lets one mix regex and non-regex filters.

    due to the fact that regex requires std which isn't available when building libtest

    libtest itself depends on std, so it should be okay for its dependencies to depend on std.

  8. RalfJung commented on Aug 11, 2022

    @RalfJung
    Member

    I think all that needs to happen on the regex side is that it needs to depend on rustc-std-workspace-std; see https://github.com/rust-lang/rust/tree/master/library/rustc-std-workspace-core for how to use that dependency.

    This should probably be enabled by a rustc-dep-of-std feature similar to libc.

  9. RalfJung commented on Aug 11, 2022

    @RalfJung
    Member

    However, adding a new dependency to the standard library is still a big deal. regex is approved for use in the compiler but that does not mean it can be used in the standard library. I am not sure what the process for that looks like.

  10. futurist commented on Nov 22, 2024

    @futurist

    +1, any update for this feature?

  11. added
    T-libsRelevant to the library team, which will review and decide on the PR/issue.
    and removed
    T-libs-api[DEPRECATED; DO NOT USE]
    on Aug 12, 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

    A-libtestArea: `#[test]` / the `test` libraryC-feature-requestCategory: A feature request, i.e: not implemented / a PR.T-libsRelevant to the library team, which will review and decide on the PR/issue.

    Type

    No type

    Projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions