cherow-dummy-plugin
v0.0.3
Published
Cherow dummy plugin
Downloads
5
Maintainers
Readme
Cherow dummy plugin
This is just a demo repo to show how a plugin can be developed and integrated with Cherow parser.
Usage for this plugin
import { parseScript } from 'cherow';
import { dummy } from 'cherow-dummy-plugin';
// Parse with the new plugin enabled
parseScript('1', {
plugins: [
dummy(123); // '123' will be the value on the literal node
]
});
How to
Location tracking
Start a new node with this.getLocations()
and finish it with this.finishNode()
as shown in this example:
const pos = this.getLocations();
return this.finishNode(pos, {
type: 'dummy'
});
Note! The location tracking will not be enabled unless the options are set for it - { loc: true, ranges: true }
Core context
By default Cherow pass around context masks everywhere as a simple immutable bit set.
It's also possible to extend this with your own set of context masks.
export const Context = {
None = 0,
Foo = 1 << 0,
Bar = 1 << 1,
}
export default function(value) {
return (parser) => {
parser.dummy(context | Context.Foo) {
// do something with the context mask
};
};
}
Mutable parser flags
Cherow also let you use mutable parser flags, in case any flags need passed by reference. For this you can create your
own bitmasks and hook them on the this.flags
.
export const Flags = {
None = 0,
Literal = 1 << 0,
Identifier = 1 << 1,
}
export default function(value) {
return (parser) => {
// Set the mutable parser flag
parser.flags |= Flags.Identifier;
parser.dummy(context) {
// If the mutable parser flag is the 'Literal' mask, Cherow will return
// a literal AST node. Else it return a identifier AST node
if (this.flags & Flags.Literal) return this.parseLiteral(context);
return this.parseIdentifier(context);
};
};
};
Methods
parse(context) {}
- the main parser functionparseLiteral(context) {}
- parses a literal nodeparseIdentifier(context) {}
- parses a identifier node
For others, please see the Cherow
source code