Detekce názvů argumentů funkcí pomocí JavaScriptu

Nedávno jsem si prohlížel kód promisify-node, abych viděl, jak autor dokázal převést základní funkce a objekty na slíbené API. Rychle jsem si uvědomil, že čtou podpisy funkcí, aby hledali běžné názvy argumentů zpětného volání jako callback a cb . Strategie se zdála zvláštní, ale pravděpodobně nutná.

Trvalo mi několik minut, než jsem vybral funkci JavaScript, která analyzovala názvy argumentů pro funkci, a tady to je:

function getArgs(func) {
  // First match everything inside the function argument parens.
  var args = func.toString().match(/function\s.*?\(([^)]*)\)/)[1];
 
  // Split the arguments string into an array comma delimited.
  return args.split(',').map(function(arg) {
    // Ensure no inline comments are parsed and trim the whitespace.
    return arg.replace(/\/\*.*\*\//, '').trim();
  }).filter(function(arg) {
    // Ensure no undefined values are added.
    return arg;
  });
}

Takže vzhledem k funkci výše a ukázkové funkci by to fungovalo následovně:

function myCustomFn(arg1, arg2,arg3) {
  
}

console.log(getArgs(myCustomFn)); // ["arg1", "arg2", "arg3"]

Nejsou regulární výrazy krásná věc? Nemohu jmenovat mnoho využití pro takovou funkci, ale tady je, pokud chcete něco takového udělat!