feat: brace expansion ({a,b,c}, {1..5}, literal {})#178
Merged
Conversation
Implements bash-style brace expansion in the task shell parser and
evaluator, and stops rejecting unquoted `{` / `}` as "Unexpected
character." when they don't form a valid brace pattern.
This fixes denoland/deno#20893 (`echo {}` and `find -exec {} \;` now
work — bare `{}` and unmatched braces are literal) and
denoland/deno#24500 (patterns like `mocha test/{*,**/**}.js` expand
into multiple words before globbing).
Supported forms: comma alternatives `{a,b,c}`, integer ranges
`{1..5}` / `{1..10..2}`, single-character ranges `{a..z}`, nesting,
and cartesian product across multiple braces. Braces inside single
or double quotes remain literal, matching bash.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
The task shell parser used to reject any unquoted
{or}with"Unexpected character.", which meant common bash idioms like
find -exec {} \;and patterns likemocha test/{*,**/**}.jscouldn't run via
deno taskat all. This adds bash-style braceexpansion and makes braces literal when they don't form a valid
brace pattern.
Supported forms are comma alternatives
{a,b,c}, integer ranges{1..5}and{1..10..2}, single-character ranges{a..z},nesting, and the cartesian product across multiple braces in one
word. Expansion happens before variable / tilde / command
substitution and globbing, matching bash. Braces inside single or
double quotes stay literal.
Fixes denoland/deno#20893
Fixes denoland/deno#24500