|  | var annotate = function() { | 
|  | var args = Array.prototype.slice.call(arguments); | 
|  | var fn = args.pop(); | 
|  |  | 
|  | fn.$inject = args; | 
|  |  | 
|  | return fn; | 
|  | }; | 
|  |  | 
|  |  | 
|  | // Current limitations: | 
|  | // - can't put into "function arg" comments | 
|  | // function /* (no parenthesis like this) */ (){} | 
|  | // function abc( /* xx (no parenthesis like this) */ a, b) {} | 
|  | // | 
|  | // Just put the comment before function or inside: | 
|  | // /* (((this is fine))) */ function(a, b) {} | 
|  | // function abc(a) { /* (((this is fine))) */} | 
|  |  | 
|  | var FN_ARGS = /^function\s*[^\(]*\(\s*([^\)]*)\)/m; | 
|  | var FN_ARG = /\/\*([^\*]*)\*\//m; | 
|  |  | 
|  | var parse = function(fn) { | 
|  | if (typeof fn !== 'function') { | 
|  | throw new Error('Can not annotate "' + fn + '". Expected a function!'); | 
|  | } | 
|  |  | 
|  | var match = fn.toString().match(FN_ARGS); | 
|  | return match[1] && match[1].split(',').map(function(arg) { | 
|  | match = arg.match(FN_ARG); | 
|  | return match ? match[1].trim() : arg.trim(); | 
|  | }) || []; | 
|  | }; | 
|  |  | 
|  |  | 
|  | exports.annotate = annotate; | 
|  | exports.parse = parse; |