## Getting started - [Usage](#usage) - [API](#api) - [Examples](#examples) - [Custom parsers](#custom-parsers) ## Usage ```js const parse = require('{%= name %}'); console.log(parse('function app(a, b, c) {\n\n}')); ``` ## API {%= apidocs('index.js') %} ## Examples ### function statement ```js const context = parse('function app(a, b, c) {\n\n}'); console.log(context); ``` Results in: ```js { type: 'function statement', name: 'app', params: [ 'a', 'b', 'c' ], string: 'app()', original: 'function app() {\n\n}' } ``` ### function expression ```js parse("var app = function(a, b, c) {\n\n}"); ``` Results in: ```js { type: 'function expression', name: 'app', params: [ 'a', 'b', 'c' ], string: 'app()', original: 'var app = function() {\n\n}' } ``` ### `module.exports` function expression ```js parse("module.exports = function foo(a, b, c) {\n\n}"); ``` Results in: ```js { type: 'function expression', receiver: 'module.exports', name: 'foo', params: [ 'a', 'b', 'c' ], string: 'module.exports()', original: 'module.exports = function foo(a, b, c) {\n\n}' } ``` ### `module.exports` method ```js parse("module.exports = function() {\n\n}"); ``` Results in: ```js { type: 'method', receiver: 'module.exports', name: '', params: [], string: 'module.exports.() {\n\n}()', original: 'module.exports = function() {\n\n}' } ``` ### prototype method ```js parse("Template.prototype.get = function() {}"); ``` Results in: ```js { type: 'prototype method', class: 'Template', name: 'get', params: [], string: 'Template.prototype.get()', original: 'Template.prototype.get = function() {}' } ``` ### prototype property ```js parse("Template.prototype.enabled = true;\nasdf"); ``` Results in: ```js { type: 'prototype property', class: 'Template', name: 'enabled', value: 'true', string: 'Template.prototype.enabled', original: 'Template.prototype.enabled = true;\nasdf' } ``` ### method ```js parse("option.get = function() {}"); ``` Results in: ```js { type: 'method', receiver: 'option', name: 'get', params: [], string: 'option.get()', original: 'option.get = function() {}' } ``` ### property ```js parse("option.name = \"delims\";\nasdf"); ``` Results in: ```js { type: 'property', receiver: 'option', name: 'name', value: '"delims"', string: 'option.name', original: 'option.name = "delims";\nasdf' } ``` ### declaration ```js parse("var name = \"delims\";\nasdf"); ``` Results in: ```js { type: 'declaration', name: 'name', value: '"delims"', string: 'name', original: 'var name = "delims";\nasdf' } ``` ### function statement params ```js parse("function app(a, b) {\n\n}"); ``` Results in: ```js { type: 'function statement', name: 'app', params: [ 'a', 'b' ], string: 'app()', original: 'function app(a, b) {\n\n}' } ``` ### function expression params ```js parse("var app = function(foo, bar) {\n\n}"); ``` Results in: ```js { type: 'function expression', name: 'app', params: [ 'foo', 'bar' ], string: 'app()', original: 'var app = function(foo, bar) {\n\n}' } ``` ### function expression params ```js parse("var app=function(foo,bar) {\n\n}"); ``` Results in: ```js { type: 'function expression', name: 'app', params: [ 'foo', 'bar' ], string: 'app()', original: 'var app=function(foo,bar) {\n\n}' } ``` ### prototype method params ```js parse("Template.prototype.get = function(key, value, options) {}"); ``` Results in: ```js { type: 'prototype method', class: 'Template', name: 'get', params: [ 'key', 'value', 'options' ], string: 'Template.prototype.get()', original: 'Template.prototype.get = function(key, value, options) {}' } ``` ## Custom parsers Instantiate the `Parser` class to register custom parsers. ```js const { Parser} = require('{%= name %}'); const parser = new Parser(); parser.capture(/foo\(([^)]+)\)/, match => { return { params: match[1].split(/[,\s]+/) }; }); console.log(parser.parse('foo(a, b, c)')); ``` ## Credit Regex was originally sourced and modified from .