Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Named capturing groups cause crashes on the unicode regexp transform #10367

Closed
Jessidhia opened this issue Aug 26, 2019 · 2 comments · Fixed by #10447
Closed

Named capturing groups cause crashes on the unicode regexp transform #10367

Jessidhia opened this issue Aug 26, 2019 · 2 comments · Fixed by #10447

Comments

@Jessidhia
Copy link
Member

@Jessidhia Jessidhia commented Aug 26, 2019

Bug Report

Current Behavior
Adding the u flag to a regexp with a named capturing group causes babel to crash if any transform related to unicode regexps is also enabled. This happens even when the named capturing group transform is enabled in preset-env, likely due to plugin execution order.

Input Code

void /(?<test>foo)/u

Expected behavior/code

void _wrapRegExp(/(foo)/, {
  test: 1
})

Babel Configuration (.babelrc, package.json, cli command)

{
  "presets": [
    "env"
  ]
}

Environment

  • Babel version(s): 7.4.3
  • Node/npm version: 12.6.0
  • OS: macOS 10.14
  • Monorepo: yes
  • How you are using Babel: loader

Possible Solution
The named capturing group transform could run before the other transforms; or regexpu should get support for parsing and preserving named capturing groups

Additional context/Screenshots
While writing a reproduction to this I also found an emit bug when babel helpers are injected and the first statement is a regexp literal. Not related, just a coincidence.

@Jessidhia
Copy link
Member Author

@Jessidhia Jessidhia commented Aug 26, 2019

Even making the named capture plugin run first doesn't help here; there's something weird with the unicode parsing in regexp-tree as well.

This actual regexp breaks on it: /(?<name>[^+]+?)(?:\..+)?$/u

invalid Unicode escape \.
    at Object.lexRules (.../node_modules/regexp-tree/dist/parser/generated/regexp-tree.js:442:11)
    at Object.getNextToken (.../node_modules/regexp-tree/dist/parser/generated/regexp-tree.js:580:32)
    at Object.parse (.../node_modules/regexp-tree/dist/parser/generated/regexp-tree.js:809:27)
    at Object.regexpTreeParser.parse (.../node_modules/regexp-tree/dist/parser/index.js:22:10)
    at Object.transform (.../node_modules/regexp-tree/dist/transform/index.js:129:20)
    at .../node_modules/regexp-tree/dist/compat-transpiler/index.js:36:27
    at Array.forEach (<anonymous>)
    at Object.transform (.../node_modules/regexp-tree/dist/compat-transpiler/index.js:28:22)
    at Object.compatTranspile (.../node_modules/regexp-tree/dist/regexp-tree.js:148:29)
    at PluginPass.RegExpLiteral (.../node_modules/@babel/plugin-transform-named-capturing-groups-regex/lib/index.js:41:46)

Changing the \.. to \\.. or just .. gets rid of the crash, but it's not the same regexp.

@JLHwung
Copy link
Contributor

@JLHwung JLHwung commented Aug 26, 2019

This actual regexp breaks on it: /(?<name>[^+]+?)(?:\..+)?$/u

It is an upstream issue: DmitrySoshnikov/regexp-tree#187

On this issue we should track the plugin ordering in env preset.

Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Projects
None yet
Linked pull requests

Successfully merging a pull request may close this issue.

2 participants