-
-
Notifications
You must be signed in to change notification settings - Fork 35
Open
Description
@BenMorel I found it hard to read such code and control start/end manually:
return $parser ??= (new PatternParserBuilder())
->startGroup()
->appendCapturePattern('[Zz]', TimeZoneOffsetSign::NAME)
->appendOr()
->startGroup()
->appendCapturePattern('[\-\+]', TimeZoneOffsetSign::NAME)
->appendCapturePattern(TimeZoneOffsetHour::PATTERN, TimeZoneOffsetHour::NAME)
->startOptional()
->appendLiteral(':')
->appendCapturePattern(TimeZoneOffsetMinute::PATTERN, TimeZoneOffsetMinute::NAME)
->endOptional()
->startOptional()
->appendLiteral(':')
->appendCapturePattern(TimeZoneOffsetSecond::PATTERN, TimeZoneOffsetSecond::NAME)
->endOptional()
->endGroup()
->endGroup()
->toParser();Maybe this syntax will be more readable and easier to maintain:
return $parser ??= (new PatternParserBuilder())
->group(
fn(PatternParserBuilder $builder) => $builder
->appendCapturePattern('[Zz]', TimeZoneOffsetSign::NAME)
->appendOr()
->group(
fn(PatternParserBuilder $builder) => $builder
->appendCapturePattern('[\-\+]', TimeZoneOffsetSign::NAME)
->appendCapturePattern(TimeZoneOffsetHour::PATTERN, TimeZoneOffsetHour::NAME)
->optional(
fn(PatternParserBuilder $builder) => $builder
->appendLiteral(':')
->appendCapturePattern(TimeZoneOffsetMinute::PATTERN, TimeZoneOffsetMinute::NAME)
)
->optional(
fn(PatternParserBuilder $builder) => $builder
->appendLiteral(':')
->appendCapturePattern(TimeZoneOffsetSecond::PATTERN, TimeZoneOffsetSecond::NAME)
)
)
)
->toParser();Metadata
Metadata
Assignees
Labels
No labels