Skip to content

Commit 7376975

Browse files
Use new refa AST transformers (#569)
* Use new refa AST transformers * Create hungry-spoons-mix.md
1 parent c1aaa96 commit 7376975

File tree

3 files changed

+21
-30
lines changed

3 files changed

+21
-30
lines changed

.changeset/hungry-spoons-mix.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
"eslint-plugin-regexp": patch
3+
---
4+
5+
Use new refa AST transformers and fixed max character for `v`-flag regexes in `no-dupe-disjunctions` and `no-super-linear-move`.

lib/rules/no-dupe-disjunctions.ts

Lines changed: 9 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,6 @@ import {
1919
import { getParser, isCoveredNode, isEqualNodes } from "../utils/regexp-ast"
2020
import type { Expression, FiniteAutomaton, NoParent, ReadonlyNFA } from "refa"
2121
import {
22-
combineTransformers,
2322
Transformers,
2423
DFA,
2524
NFA,
@@ -144,17 +143,6 @@ function isNonRegular(node: Node): boolean {
144143
)
145144
}
146145

147-
const creationOption: Transformers.CreationOptions = {
148-
ignoreAmbiguity: true,
149-
ignoreOrder: true,
150-
}
151-
const assertionTransformer = combineTransformers([
152-
Transformers.applyAssertions(creationOption),
153-
Transformers.removeUnnecessaryAssertions(creationOption),
154-
Transformers.inline(creationOption),
155-
Transformers.removeDeadBranches(creationOption),
156-
])
157-
158146
/**
159147
* Create an NFA from the given element.
160148
*
@@ -175,7 +163,13 @@ function toNFA(
175163

176164
let e
177165
if (containsAssertions(expression)) {
178-
e = transform(assertionTransformer, expression)
166+
e = transform(
167+
Transformers.simplify({
168+
ignoreAmbiguity: true,
169+
ignoreOrder: true,
170+
}),
171+
expression,
172+
)
179173
} else {
180174
e = expression
181175
}
@@ -191,7 +185,7 @@ function toNFA(
191185
} catch (_error) {
192186
return {
193187
nfa: NFA.empty({
194-
maxCharacter: parser.ast.flags.unicode ? 0x10ffff : 0xffff,
188+
maxCharacter: parser.maxCharacter,
195189
}),
196190
partial: true,
197191
}
@@ -270,7 +264,7 @@ function* iteratePartialAlternatives(
270264
return
271265
}
272266

273-
const maxCharacter = parser.ast.flags.unicode ? 0x10ffff : 0xffff
267+
const maxCharacter = parser.maxCharacter
274268
const partialParser = new PartialParser(parser, {
275269
assertions: "throw",
276270
backreferences: "throw",

lib/rules/no-super-linear-move.ts

Lines changed: 7 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -19,8 +19,8 @@ import {
1919
visitAst,
2020
JS,
2121
transform,
22-
combineTransformers,
2322
Transformers,
23+
CombinedTransformer,
2424
} from "refa"
2525
import { getJSRegexppAst } from "../utils/regexp-ast"
2626

@@ -99,24 +99,16 @@ function* findReachableQuantifiers(
9999
}
100100
}
101101

102-
const TRANFORMER_OPTIONS: Transformers.CreationOptions = {
102+
const TRANSFORMER_OPTIONS: Transformers.CreationOptions = {
103103
ignoreAmbiguity: true,
104104
ignoreOrder: true,
105105
}
106-
const PASS_1 = combineTransformers([
107-
Transformers.inline(TRANFORMER_OPTIONS),
108-
Transformers.removeDeadBranches(TRANFORMER_OPTIONS),
109-
Transformers.unionCharacters(TRANFORMER_OPTIONS),
110-
Transformers.moveUpEmpty(TRANFORMER_OPTIONS),
111-
Transformers.nestedQuantifiers(TRANFORMER_OPTIONS),
112-
Transformers.removeUnnecessaryAssertions(TRANFORMER_OPTIONS),
113-
Transformers.applyAssertions(TRANFORMER_OPTIONS),
114-
])
115-
const PASS_2 = combineTransformers([
116-
Transformers.inline(TRANFORMER_OPTIONS),
117-
Transformers.removeDeadBranches(TRANFORMER_OPTIONS),
106+
const PASS_1 = Transformers.simplify(TRANSFORMER_OPTIONS)
107+
const PASS_2 = new CombinedTransformer([
108+
Transformers.inline(TRANSFORMER_OPTIONS),
109+
Transformers.removeDeadBranches(TRANSFORMER_OPTIONS),
118110
Transformers.replaceAssertions({
119-
...TRANFORMER_OPTIONS,
111+
...TRANSFORMER_OPTIONS,
120112
replacement: "empty-set",
121113
}),
122114
])

0 commit comments

Comments
 (0)