Neglected Puppy Market

    match-ast

    2.0.0 • Public • Published

    match-ast

    Travis Prettier npm License

    Collection of helper functions to verify a AST tree structure.

    Usage

    Type matchers

    Example: verify if a tree represents a JSON.stringify() call

    const {
      isCallExpression,
      isMemberExpression,
      isIdentifier 
    = require("match-ast");
     
    // Check if the tree represents a `JSON.stringify()` call.
    const isJsonStringify = isCallExpression({
      callee: isMemberExpression({
        object: isIdentifier("JSON"),
        property: isIdentifier("stringify")
      })
    });

    Most functions are named isSomething where Something is the type of the node (i.e. isIdentifier checks if node.type === "Identifier"). They accept a single argument: an object where keys represent the property of a node and the value is a matcher for that property.

    The accepted matchers are: a matcher function, primitive values, arrays or functions.

    Calling a function with no arguments means it will only assert its type and none of the properties. For types with no properties (i.e. ThisExpression), arguments are ignored.

    For nodes with only a single property (i.e. Identifier with property name), you can pass directly the matcher for that property, so you don't have to pass an object with a single property. For example, isIdentifier("foo") is equivalent to isIdentifier({ name: "foo" }).

    Passing extra properties to a matcher will make it always return false:

    // check() will always return false since there's no `name` property in CallExpression
    const check = isCallExpression({ name: "foo" });

    Other matchers

    either

    For cases where a node can be one of many values:

    const { either, isIdentifier, isMemberExpression } = require("match-ast");
     
    // Check if the three is a `JSON.stringify()` or `stringify()` call
    const isStringify = isCallExpression({
      callee: either(
        isMemberExpression({
          object: isIdentifier("JSON"),
          property: isIdentifier("stringify")
        }),
        isIdentifier("stringify")
      )
    });

    Credits

    This library consists of helper functions automatically generated on top of the excellent @babel/types definitions.

    Install

    npm i match-ast

    DownloadsWeekly Downloads

    1,972

    Version

    2.0.0

    License

    MIT

    Unpacked Size

    126 kB

    Total Files

    4

    Last publish

    Collaborators

    • duailibe