githubEdit

snapdragon-node

Snapdragon utility for creating a new AST node in custom code, such as plugins.

Install

Install with npmarrow-up-right:

$ npm install --save snapdragon-node

Usage

With snapdragonarrow-up-right v0.9.0 and higher you can use this.node() to create a new Node, whenever it makes sense.

var Node = require('snapdragon-node');
var Snapdragon = require('snapdragon');
var snapdragon = new Snapdragon();

// example usage inside a parser visitor function
snapdragon.parser.set('foo', function() {
  // get the current "start" position
  var pos = this.position();

  // returns the match if regex matches the substring 
  // at the current position on `parser.input`
  var match = this.match(/foo/);
  if (match) {
    // call "pos" on the node, to set the start and end 
    // positions, and return the node to push it onto the AST
    // (snapdragon will push the node onto the correct
    // nodes array, based on the stack)
    return pos(new Node({type: 'bar', val: match[0]}));
  }
});

API

Create a new AST Node with the given val and type.

Params

  • val {String|Object}: Pass a matched substring, or an object to merge onto the node.

  • type {String}: The node type to use when val is a string.

  • returns {Object}: node instance

Example

Returns true if the given value is a node.

Params

  • node {Object}

  • returns {Boolean}

Example

Define a non-enumberable property on the node instance. Useful for adding properties that shouldn't be extended or visible during debugging.

Params

  • name {String}

  • val {any}

  • returns {Object}: returns the node instance

Example

Returns true if node.val is an empty string, or node.nodes does not contain any non-empty text nodes.

Params

  • fn {Function}: (optional) Filter function that is called on node and/or child nodes. isEmpty will return false immediately when the filter function returns false on any nodes.

  • returns {Boolean}

Example

Given node foo and node bar, push node bar onto foo.nodes, and set foo as bar.parent.

Params

  • node {Object}

  • returns {Number}: Returns the length of node.nodes

Example

Given node foo and node bar, unshift node bar onto foo.nodes, and set foo as bar.parent.

Params

  • node {Object}

  • returns {Number}: Returns the length of node.nodes

Example

Pop a node from node.nodes.

  • returns {Number}: Returns the popped node

Example

Shift a node from node.nodes.

  • returns {Object}: Returns the shifted node

Example

Remove node from node.nodes.

Params

  • node {Object}

  • returns {Object}: Returns the removed node.

Example

Get the first child node from node.nodes that matches the given type. If type is a number, the child node at that index is returned.

Params

  • type {String}

  • returns {Object}: Returns a child node or undefined.

Example

Return true if the node is the given type.

Params

  • type {String}

  • returns {Boolean}

Example

Return true if the node.nodes has the given type.

Params

  • type {String}

  • returns {Boolean}

Example

  • returns {Array}

Example

  • returns {Number}

Example

  • returns {Object}

Example

  • returns {Object}

Example

  • returns {Object}: The first node, or undefiend

Example

  • returns {Object}: The last node, or undefiend

Example

  • returns {Object}: The last node, or undefiend

Example

Release history

Changelog entries are classified using the following labels from keep-a-changelogarrow-up-right:

  • added: for new features

  • changed: for changes in existing functionality

  • deprecated: for once-stable features removed in upcoming releases

  • removed: for deprecated features removed in this release

  • fixed: for any bug fixes

Custom labels used in this changelog:

  • dependencies: bumps dependencies

  • housekeeping: code re-organization, minor edits, or other changes that don't fit in one of the other categories.

[2.0.0] - 2017-05-01

Changed

  • .unshiftNode was renamed to .unshift

  • .pushNode was renamed to .push

  • .getNode was renamed to .find

Added

[0.1.0]

First release.

About

Contributing

Pull requests and stars are always welcome. For bugs and feature requests, please create an issuearrow-up-right.

Please read the contributing guidearrow-up-right for advice on opening issues, pull requests, and coding standards.

Building docs

(This project's readme.md is generated by verbarrow-up-right, please don't edit the readme directly. Any changes to the readme must be made in the .verb.mdarrow-up-right readme template.)

To generate the readme, run the following command:

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:

Author

Jon Schlinkert

License

Copyright © 2017, Jon Schlinkertarrow-up-right. Released under the MIT Licensearrow-up-right.


This file was generated by verb-generate-readmearrow-up-right, v0.6.0, on June 25, 2017.

Last updated