feat: support variables in include/exclude glob patterns#161
feat: support variables in include/exclude glob patterns#161alirezanet merged 5 commits intomasterfrom
Conversation
alirezanet
left a comment
There was a problem hiding this comment.
Build is failing right now, and make sure you have enough unit tests and some integration tests to fully make sure this feature working as expected.
| { | ||
| foreach (var pattern in patterns) | ||
| { | ||
| if (pattern.Contains("${args}") && optionArguments is { Length: > 0 }) |
There was a problem hiding this comment.
does this check mean we only support ${args} variable? if not, we should support all possible variables as before
There was a problem hiding this comment.
Currently only ${args} is supported in include/exclude glob patterns. Other variables like ${staged}, ${all-files}, ${last-commit}, and ${git-files} expand to file path lists, not string fragments — embedding file paths as glob patterns doesn't make semantic sense. ${args} is the only variable that provides literal string values (e.g., a directory name) suitable for substitution into a glob pattern like ${args}/**/*.cs.
Fixed in 6efed18. The CI failure was because the integration tests were checking Also expanded integration test coverage to 4 tests:
|
alirezanet
left a comment
There was a problem hiding this comment.
add a couple of tests to make sure the old behavior is still working,
1- old behavior with a variable
2- old behavior without any variable
3- also new behavior without any variable and just with some glob patterns
Added 4 regression tests in fb03f67:
|
Variables like
${args}were only resolved in taskargs, not ininclude/excludeglob patterns. This prevented users from scoping file matching to a runtime-provided directory — a common need in multi-solution repos wheredotnet formatshould only run against solutions containing staged files.Example use case:
{ "tasks": [ { "name": "dotnet-format-staged-files", "command": "dotnet", "args": ["format", "${args}", "--include", "${staged}"], "include": ["${args}/**/*.cs"] } ] }Run with:
dotnet husky run --args src/MySolutionChanges
ArgumentParser.GetPatternMatcher— accepts optionaloptionArguments; expands${args}in each include/exclude pattern, yielding one pattern per argument value (supports multiple--args)ArgumentParser.ParseAsync— forwardsoptionArgumentstoGetPatternMatcherExecutableTaskFactory.CheckIfWeShouldSkipTheTask— accepts and forwardsoptionArgumentstoGetPatternMatcherso skip-checks honour variable-based patternsIssue113Tests.cs— 8 integration tests total:${args}variable substitution inincludeandexcludepatterns (match/skip cases for each)${staged}variable in args with static include pattern (match and no-match cases)--argsis supplied but pattern contains no${args}Type of change
Checklist
Original prompt
💬 We'd love your input! Share your thoughts on Copilot coding agent in our 2 minute survey.