From 74d7c0b9a1f2bcf98c6aa712b202dac809f95f81 Mon Sep 17 00:00:00 2001 From: Michael Schmidt Date: Wed, 6 Sep 2023 11:17:54 +0200 Subject: [PATCH 1/2] Use new refa AST transformers --- lib/rules/no-dupe-disjunctions.ts | 24 +++++++++--------------- lib/rules/no-super-linear-move.ts | 22 +++++++--------------- 2 files changed, 16 insertions(+), 30 deletions(-) diff --git a/lib/rules/no-dupe-disjunctions.ts b/lib/rules/no-dupe-disjunctions.ts index 97fb76cf7..453051ee1 100644 --- a/lib/rules/no-dupe-disjunctions.ts +++ b/lib/rules/no-dupe-disjunctions.ts @@ -19,7 +19,6 @@ import { import { getParser, isCoveredNode, isEqualNodes } from "../utils/regexp-ast" import type { Expression, FiniteAutomaton, NoParent, ReadonlyNFA } from "refa" import { - combineTransformers, Transformers, DFA, NFA, @@ -144,17 +143,6 @@ function isNonRegular(node: Node): boolean { ) } -const creationOption: Transformers.CreationOptions = { - ignoreAmbiguity: true, - ignoreOrder: true, -} -const assertionTransformer = combineTransformers([ - Transformers.applyAssertions(creationOption), - Transformers.removeUnnecessaryAssertions(creationOption), - Transformers.inline(creationOption), - Transformers.removeDeadBranches(creationOption), -]) - /** * Create an NFA from the given element. * @@ -175,7 +163,13 @@ function toNFA( let e if (containsAssertions(expression)) { - e = transform(assertionTransformer, expression) + e = transform( + Transformers.simplify({ + ignoreAmbiguity: true, + ignoreOrder: true, + }), + expression, + ) } else { e = expression } @@ -191,7 +185,7 @@ function toNFA( } catch (_error) { return { nfa: NFA.empty({ - maxCharacter: parser.ast.flags.unicode ? 0x10ffff : 0xffff, + maxCharacter: parser.maxCharacter, }), partial: true, } @@ -270,7 +264,7 @@ function* iteratePartialAlternatives( return } - const maxCharacter = parser.ast.flags.unicode ? 0x10ffff : 0xffff + const maxCharacter = parser.maxCharacter const partialParser = new PartialParser(parser, { assertions: "throw", backreferences: "throw", diff --git a/lib/rules/no-super-linear-move.ts b/lib/rules/no-super-linear-move.ts index b0567d36f..9fb918155 100644 --- a/lib/rules/no-super-linear-move.ts +++ b/lib/rules/no-super-linear-move.ts @@ -19,8 +19,8 @@ import { visitAst, JS, transform, - combineTransformers, Transformers, + CombinedTransformer, } from "refa" import { getJSRegexppAst } from "../utils/regexp-ast" @@ -99,24 +99,16 @@ function* findReachableQuantifiers( } } -const TRANFORMER_OPTIONS: Transformers.CreationOptions = { +const TRANSFORMER_OPTIONS: Transformers.CreationOptions = { ignoreAmbiguity: true, ignoreOrder: true, } -const PASS_1 = combineTransformers([ - Transformers.inline(TRANFORMER_OPTIONS), - Transformers.removeDeadBranches(TRANFORMER_OPTIONS), - Transformers.unionCharacters(TRANFORMER_OPTIONS), - Transformers.moveUpEmpty(TRANFORMER_OPTIONS), - Transformers.nestedQuantifiers(TRANFORMER_OPTIONS), - Transformers.removeUnnecessaryAssertions(TRANFORMER_OPTIONS), - Transformers.applyAssertions(TRANFORMER_OPTIONS), -]) -const PASS_2 = combineTransformers([ - Transformers.inline(TRANFORMER_OPTIONS), - Transformers.removeDeadBranches(TRANFORMER_OPTIONS), +const PASS_1 = Transformers.simplify(TRANSFORMER_OPTIONS) +const PASS_2 = new CombinedTransformer([ + Transformers.inline(TRANSFORMER_OPTIONS), + Transformers.removeDeadBranches(TRANSFORMER_OPTIONS), Transformers.replaceAssertions({ - ...TRANFORMER_OPTIONS, + ...TRANSFORMER_OPTIONS, replacement: "empty-set", }), ]) From 9c0059e08dffacef759681e2b41fdb1fe62cb299 Mon Sep 17 00:00:00 2001 From: Michael Schmidt Date: Wed, 6 Sep 2023 11:24:32 +0200 Subject: [PATCH 2/2] Create hungry-spoons-mix.md --- .changeset/hungry-spoons-mix.md | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 .changeset/hungry-spoons-mix.md diff --git a/.changeset/hungry-spoons-mix.md b/.changeset/hungry-spoons-mix.md new file mode 100644 index 000000000..1a945c979 --- /dev/null +++ b/.changeset/hungry-spoons-mix.md @@ -0,0 +1,5 @@ +--- +"eslint-plugin-regexp": patch +--- + +Use new refa AST transformers and fixed max character for `v`-flag regexes in `no-dupe-disjunctions` and `no-super-linear-move`.