cherow-dummy-plugin

    0.0.3 • Public • Published

    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 function
    • parseLiteral(context) {} - parses a literal node
    • parseIdentifier(context) {} - parses a identifier node

    For others, please see the Cherow source code

    Install

    npm i cherow-dummy-plugin

    DownloadsWeekly Downloads

    0

    Version

    0.0.3

    License

    ISC

    Last publish

    Collaborators

    • kennyf