parse-code-context

Fast and simple way to parse code context for use with documentation from code comments. Parses context from a single line of JavaScript, for functions, variable declarations, methods, prototype properties, prototype methods etc.
Please consider following this project's author, Jon Schlinkert, and consider starring the project to show your :heart: and support.
Install
Install with npm:
$ npm install --save parse-code-context
Getting started
Usage
const parse = require('parse-code-context');
console.log(parse('function app(a, b, c) {\n\n}'));
API
Parser
Create an instance of Parser
with the given string
, optionally passing a parent
name for namespacing methods
Params
str
{String}parent
{String}
Example
const { Parser } = require('parse-code-context');
const parser = new Parser('function foo(a, b, c) {}');
.name
Convenience method for creating a property name that is prefixed with the parent namespace, if defined.
Params
name
{String}returns
{String}
.capture
Register a parser to use (in addition to those already registered as default parsers) with the given regex
and function.
Params
regex
{RegExp}fn
{Function}returns
{Object}: The instance for chaining
Example
const parser = new Parser('function foo(a, b, c){}');
.capture(/function\s*([\w$]+)\s*\(([^)]+)/, (match) => {
return {
name: match[1],
params: matc(h[2] || '').split(/[,\s]/)
};
});
.parse
Parse the string passed to the constructor with all registered parsers.
returns
{Object|Null}
Examples
function statement
const context = parse('function app(a, b, c) {\n\n}');
console.log(context);
Results in:
{ type: 'function statement',
name: 'app',
params: [ 'a', 'b', 'c' ],
string: 'app()',
original: 'function app() {\n\n}' }
function expression
parse("var app = function(a, b, c) {\n\n}");
Results in:
{ type: 'function expression',
name: 'app',
params: [ 'a', 'b', 'c' ],
string: 'app()',
original: 'var app = function() {\n\n}' }
module.exports
function expression
parse("module.exports = function foo(a, b, c) {\n\n}");
Results in:
{ 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
parse("module.exports = function() {\n\n}");
Results in:
{ type: 'method',
receiver: 'module.exports',
name: '',
params: [],
string: 'module.exports.() {\n\n}()',
original: 'module.exports = function() {\n\n}' }
prototype method
parse("Template.prototype.get = function() {}");
Results in:
{ type: 'prototype method',
class: 'Template',
name: 'get',
params: [],
string: 'Template.prototype.get()',
original: 'Template.prototype.get = function() {}' }
prototype property
parse("Template.prototype.enabled = true;\nasdf");
Results in:
{ type: 'prototype property',
class: 'Template',
name: 'enabled',
value: 'true',
string: 'Template.prototype.enabled',
original: 'Template.prototype.enabled = true;\nasdf' }
method
parse("option.get = function() {}");
Results in:
{ type: 'method',
receiver: 'option',
name: 'get',
params: [],
string: 'option.get()',
original: 'option.get = function() {}' }
property
parse("option.name = \"delims\";\nasdf");
Results in:
{ type: 'property',
receiver: 'option',
name: 'name',
value: '"delims"',
string: 'option.name',
original: 'option.name = "delims";\nasdf' }
declaration
parse("var name = \"delims\";\nasdf");
Results in:
{ type: 'declaration',
name: 'name',
value: '"delims"',
string: 'name',
original: 'var name = "delims";\nasdf' }
function statement params
parse("function app(a, b) {\n\n}");
Results in:
{ type: 'function statement',
name: 'app',
params: [ 'a', 'b' ],
string: 'app()',
original: 'function app(a, b) {\n\n}' }
function expression params
parse("var app = function(foo, bar) {\n\n}");
Results in:
{ type: 'function expression',
name: 'app',
params: [ 'foo', 'bar' ],
string: 'app()',
original: 'var app = function(foo, bar) {\n\n}' }
function expression params
parse("var app=function(foo,bar) {\n\n}");
Results in:
{ type: 'function expression',
name: 'app',
params: [ 'foo', 'bar' ],
string: 'app()',
original: 'var app=function(foo,bar) {\n\n}' }
prototype method params
parse("Template.prototype.get = function(key, value, options) {}");
Results in:
{ 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.
const { Parser} = require('parse-code-context');
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 https://github.com/visionmedia/dox.
About
sh
$ npm install && npm test
sh
$ npm install -g verbose/verb#dev verb-generate-readme && verb
Related projects
You might also be interested in these projects:
- code-context: Parse a string of javascript to determine the context for functions, variables and comments based… more | homepage
- snapdragon: Easy-to-use plugin system for creating powerful, fast and versatile parsers and compilers, with built-in source-map… more | homepage
- strip-comments: Strip comments from code. Removes line comments, block comments, the first comment only, or all… more | homepage
Author
Jon Schlinkert
License
Copyright © 2018, Jon Schlinkert. Released under the MIT License.
This file was generated by verb-generate-readme, v0.8.0, on November 24, 2018.