Skip to content

Add check for redundant non-capturing groups (W129) - #59

Merged
thatch merged 1 commit into
thatch:masterfrom
jvoisin:usls
Jul 31, 2026
Merged

Add check for redundant non-capturing groups (W129)#59
thatch merged 1 commit into
thatch:masterfrom
jvoisin:usls

Conversation

@jvoisin

@jvoisin jvoisin commented Jul 28, 2026

Copy link
Copy Markdown
Contributor

Flag (?:...) groups that can be removed without changing the match. Unquantified concatenation is associative, so the group boundary is invisible: (?:ab) -> ab, x(?:ab)y -> xaby, (?:a) -> a. A quantified group is redundant only when it wraps a single atom: (?:a)+ -> a+, (?:[abc])+ -> [abc]+.

Load-bearing groups are left alone: a bare alternation keeps the group for precedence unless it is the whole pattern (x(?:a|b)y stays, (?:a|b) -> a|b), quantifiers over multiple atoms ((?:ab)+) or over an alternation ((?:a|b)+), and stacked quantifiers ((?:a+)+, which would otherwise merge into the illegal a++).

Includes unit tests for the single-atom, concatenation, whole-pattern alternation and no-flag cases.

Flag (?:...) groups that can be removed without changing the match.
Unquantified concatenation is associative, so the group boundary is
invisible: (?:ab) -> ab, x(?:ab)y -> xaby, (?:a) -> a. A quantified
group is redundant only when it wraps a single atom: (?:a)+ -> a+,
(?:[abc])+ -> [abc]+.

Load-bearing groups are left alone: a bare alternation keeps the group
for precedence unless it is the whole pattern (x(?:a|b)y stays, (?:a|b)
-> a|b), quantifiers over multiple atoms ((?:ab)+) or over an
alternation ((?:a|b)+), and stacked quantifiers ((?:a+)+, which would
otherwise merge into the illegal a++).

Includes unit tests for the single-atom, concatenation, whole-pattern
alternation and no-flag cases.
thatch added a commit that referenced this pull request Jul 31, 2026
This is the second time independent PRs collided on the same message
id (126 across #52/#53/#54, now 129 across #55-#59). Statically walk
each check_/bygroups_check_/groups_check_ function's source for its
'num' assignment and assert none repeat, so a future collision fails
CI instead of silently shipping ambiguous warning codes.
@thatch
thatch merged commit d9abd20 into thatch:master Jul 31, 2026
0 of 15 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants