21.11 Unknown Symbols

names_grabber <- function(x) {
  switch_expr(x,
              constant = character(),
              symbol =   as.character(x),
              call =     flat_map_chr(as.list(x[-1]), names_grabber)
  ) |>
    unique()
}

x+y+f(a,b,c,10)

names_grabber(expr(x + y + f(a, b, c, 10)))
#> [1] "x" "y" "a" "b" "c"
lobstr::ast(expr(x + y + f(a, b, c, 10)))
#> █─expr 
#> └─█─`+` 
#>   ├─█─`+` 
#>   │ ├─x 
#>   │ └─y 
#>   └─█─f 
#>     ├─a 
#>     ├─b 
#>     ├─c 
#>     └─10