Skip to content

Make workspace member inclusion/exclusion more useful, consistent, and intuitive #11405

Open
@weihanglo

Description

@weihanglo

Problem

As of now, Cargo supports glob syntax for workspace.member to include crates as workspace members. However, for workspace.exclude it is implemented by a plain starts_with comparing with manifest path of certain crates. This confuses people as they need to figure out which rules overrides the other. It is also inconsistent with package.include and package.exclude, as they choose gitignore syntax.

For workspace.member, it proactively checks the existence of Cargo.toml to include a member, and throws an errors if Cargo.toml doesn't exist, which makes globbing **/* often invalid.

Similar issues have been raised from time to time:

Proposed Solution

There are several possible ways to "fix" the situation (to some extent).

There might be other possible solution I am not aware of here.

Notes

I would keep this as the main issue and close some. If this is inappropriate, please say it out load, and we can reopen the original issues.

Footnotes

  1. An optional prefix "!" which negates the pattern; any matching file excluded by a previous pattern will become included again. It is not possible to re-include a file if a parent directory of that file is excluded.
    See https://git-scm.com/docs/gitignore#_pattern_format

Metadata

Metadata

Assignees

Labels

A-manifestArea: Cargo.toml issuesA-workspacesArea: workspacesC-feature-requestCategory: proposal for a feature. Before PR, ping rust-lang/cargo if this is not `Feature accepted`S-needs-designStatus: Needs someone to work further on the design for the feature or fix. NOT YET accepted.

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions