benjamn / ast-types

Esprima-compatible implementation of the Mozilla JS Parser API
MIT License
1.13k stars 195 forks source link

partial visit #943

Open retorquere opened 1 year ago

retorquere commented 1 year ago

I want to visit an AST, but exclude CallExpression arguments. How can I do this? Given the script below, I'm missing almost all identifiers

const { parse } = require('recast')
const { visit } = require('ast-types')

const src = `
[
    () => ((x() ? y() : z()) + y()).len() + (auth(creator).lower(1) + year()).len(">", 0).postfix(_) + title().len(">", 0).lower() + other(),
    () => x()
]
`

const idents = {
  visitIdentifier(path) {
    console.log(path.node.name)
    this.traverse(path)
  },
  visitCallExpression(path) {
    this.traverse(path.get('callee'))
    // this.traverse(path)
  },
}

let ast = parse(src)
ast = visit(ast, idents)
retorquere commented 4 months ago

Could it be because arguments isn't really a node type, but simply an array of nodes? path.get('arguments') doesn't have a type.