## ----include = FALSE----------------------------------------------------------
knitr::opts_chunk$set(
  collapse = TRUE,
  comment = "#>"
)

## ----setup--------------------------------------------------------------------
library(astgrepr)

## -----------------------------------------------------------------------------
src <- "x <- rnorm(100, mean = 2)
any(is.na(y))
plot(x)
any(is.na(x))
any(duplicated(variable))"

## -----------------------------------------------------------------------------
root <- src |>
  tree_new() |>
  tree_root()

root

## -----------------------------------------------------------------------------
ast_rule(id = "any_na", pattern = "any(is.na($VAR))")

## -----------------------------------------------------------------------------
root |> 
  node_find(
    ast_rule(id = "any_na", pattern = "any(is.na($VAR))"),
    ast_rule(id = "any_dup", pattern = "any(duplicated($VAR))")
  )

## -----------------------------------------------------------------------------
found_nodes <- root |> 
  node_find_all(
    ast_rule(id = "any_na", pattern = "any(is.na($VAR))"),
    ast_rule(id = "any_dup", pattern = "any(duplicated($VAR))")
  )

found_nodes

## -----------------------------------------------------------------------------
found_nodes |> 
  node_text_all()
found_nodes |> 
  node_range_all()

## -----------------------------------------------------------------------------
nodes_to_replace <- root |>
  node_find_all(
    ast_rule(id = "any_na", pattern = "any(is.na($VAR))"),
    ast_rule(id = "any_dup", pattern = "any(duplicated($VAR))")
  )

nodes_to_replace
fixes <- nodes_to_replace |>
  node_replace_all(
    any_na = "anyNA(~~VAR~~)",
    any_dup = "anyDuplicated(~~VAR~~) > 0"
  )

fixes

## -----------------------------------------------------------------------------
# original code
cat(src)
# new code
tree_rewrite(root, fixes)