0.0.4 • Published 7 years ago

ast-crumbs v0.0.4

Weekly downloads
-
License
MIT
Repository
-
Last release
7 years ago

AST Crumbs

Builds a data structure by traversing the AST (based on rules) of Fluent-style method invocations.

It can, for instance, analyze the AST similar to

db.products.filter(u => u.buyer === "jeswin").slice(0, 10);

Traversal rules, aka nodeDefinitions

const nodeDefinitions = [
  {
    id: "root",
    type: "predicate",
    predicate: isRoot,
    builder: args => ({ ...args }),
    args: getRootArgs
  },
  {
    id: "filter",
    name: "filter",
    type: "CallExpression",
    follows: ["root"],
    builder: (src, args) => ({ ...src, ...args }),
    args: path => ({ filter: true })
  },
  {
    id: "slice",
    name: "slice",
    type: "CallExpression",
    follows: ["root", "filter"],
    builder: (src, args) => ({ ...src, ...args }),
    args: path => ({ slice: true })
  },
  {
    id: "length",
    name: "length",
    type: "MemberExpression",
    follows: ["root", "filter"],
    builder: (src, args) => ({ ...src, length: true })
  }
];

In the above example, builder is invoked when a node matching a specific node-definition is found. The follows fields specifies acceptable parent node types.

After defining the rules (nodeDefinitions), the analyzer can be constructed for use in a babel plugin

const analyzer = crumbs(
  nodeDefinitions,
  isRoot
);

return {
  visitor: {
    CallExpression: path => analyzer(path, ["filter", "slice"]),
  }
}
0.0.4

7 years ago

0.0.3

7 years ago

0.0.2

7 years ago

0.0.1

7 years ago