stack-generator icon indicating copy to clipboard operation
stack-generator copied to clipboard

Function name regex can get incorrect name for annoymous function

Open bengourley opened this issue 5 years ago • 0 comments

Given the function source:

function () {
  // set the script that called this function
  updateLastScript(script)
  // immediately unset it
  _setTimeout(function () { updateLastScript(null) }, 0)
  cb.apply(this, arguments)
}

this Regex will incorrectly name the function updateLastScript which is an unfortunate sequence of a comment ending in function followed by a function call.

https://github.com/stacktracejs/stack-generator/blob/1e295b637b5bc6a44b4c117faca1709bcf20e744/stack-generator.js#L30

a nested function definition can also trip it up:

function () {
  function jim() {
    // inner
  }
  more()
  statements()
}

The following update fixes these scenarios, correctly returning null for these two annonymous functions:

- if (/function(?:\s+([\w$]+))+\s*\(/.test(curr.toString())) { 
+ if (/^\s*function(?:\s+([\w$]+))+\s*\(/.test(curr.toString())) { 

I'm not sure if the "any preceding whitespace" part is strictly necessary but I don't think it hurts to permit that.

I can put together a PR for this including tests but I wanted to post it up as an issue before I get around to that while I work around it.

bengourley avatar Apr 25 '19 10:04 bengourley