AST pattern matching with captures.
Patterns are valid Elixir syntax where:
name,expr— capture the matched AST node_or_name— wildcard, matches anything, not captured...— matches zero or more nodes (args, list items, block statements)- Structs and maps match partially (only specified keys must be present)
- Pipes are normalized (
data |> Enum.map(f)matchesEnum.map(data, f)) - Multi-statement patterns match contiguous sequences in blocks
Repeated variable names require the same value at every position.
Patterns can be given as strings or as quoted expressions:
Pattern.match(node, "IO.inspect(_)")
Pattern.match(node, quote(do: IO.inspect(_)))Use ... for variable-arity matching:
Pattern.match(node, "IO.inspect(...)") # any arity
Pattern.match(node, "foo(first, ...)") # 1+ args, capture first
Pattern.match(node, "def foo(_) do ... end") # any body
Summary
Functions
Matches an AST node against a pattern.
Matches an AST node against an already-parsed pattern AST.
Finds all contiguous subsequences of nodes matching pattern_asts.
Returns true if the pattern contains multiple statements
(separated by ; or newlines), enabling sequential matching.
Returns the individual pattern ASTs from a (possibly multi-node) pattern.
Substitutes captured values into a replacement template AST.
Types
Functions
Matches an AST node against a pattern.
The pattern can be a string or a quoted expression.
Returns {:ok, captures} on match, :error otherwise.
Alias directives found in the surrounding AST can be expanded before matching,
so alias AshPhoenix.Form followed by Form.for_update(...) matches
AshPhoenix.Form.for_update(...).
Matches an AST node against an already-parsed pattern AST.
Equivalent to match/2 with a quoted pattern, kept for
backward compatibility.
Finds all contiguous subsequences of nodes matching pattern_asts.
Returns a list of {captures, start_index..end_index} tuples.
Captures are accumulated across all matched nodes and must be consistent.
Returns true if the pattern contains multiple statements
(separated by ; or newlines), enabling sequential matching.
Returns the individual pattern ASTs from a (possibly multi-node) pattern.
Substitutes captured values into a replacement template AST.
Variables in the template that match capture names are replaced with the captured AST nodes.