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.
npm install 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 with npm:
``sh`
$ npm install --save parse-code-context
* Usage
* API
* Examples
* Custom parsers
`js`
const parse = require('parse-code-context');
console.log(parse('function app(a, b, c) {\n\n}'));
Create an instance of Parser with the given string, optionally passing a parent name for namespacing methods
Params
* str {String}parent
* {String}
Example
`js`
const { Parser } = require('parse-code-context');
const parser = new Parser('function foo(a, b, c) {}');
Convenience method for creating a property name
that is prefixed with the parent namespace, if defined.
Params
* name {String}returns
* {String}
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
`js`
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 the string passed to the constructor with all registered parsers.
* returns {Object|Null}
`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}' }
`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}' }
`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}' }
`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}' }
`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() {}' }
`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' }
`js`
parse("option.get = function() {}");
Results in:
`js`
{ type: 'method',
receiver: 'option',
name: 'get',
params: [],
string: 'option.get()',
original: 'option.get = function() {}' }
`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' }
`js`
parse("var name = \"delims\";\nasdf");
Results in:
`js
{ type: 'declaration',
name: 'name',
value: '"delims"',
string: 'name',
original: 'var name = "delims";\nasdf' }
`
`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}' }
`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}' }
`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}' }
`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) {}' }
Instantiate the Parser class to register custom parsers.
`js
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)'));
`
Regex was originally sourced and modified from https://github.com/visionmedia/dox.
Contributing
Pull requests and stars are always welcome. For bugs and feature requests, please create an issue.
Running Tests
Running and reviewing unit tests is a great way to get familiarized with a library and its API. You can install dependencies and run tests with the following command:
`sh`
$ npm install && npm test
Building docs
_(This project's readme.md is generated by verb, please don't edit the readme directly. Any changes to the readme must be made in the .verb.md readme template.)_
To generate the readme, run the following command:
`sh``
$ npm install -g verbose/verb#dev verb-generate-readme && verb
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
Jon Schlinkert
* GitHub Profile
* Twitter Profile
* LinkedIn Profile
Copyright © 2018, Jon Schlinkert.
Released under the MIT License.
*
_This file was generated by verb-generate-readme, v0.8.0, on November 24, 2018._