
NAME
RakuAST::Utils - provide basic RakuAST utilities
SYNOPSIS
use RakuAST::Utils;
say NameAST("Foo::Bar");
say TypeAST( Array[Int] );
sub foo(Int $a, Str $b) { }
say ParameterAST( &foo.signature.params[0] );
say SignatureAST( &foo.signature );
DESCRIPTION
The RakuAST::Utils
provides a number of subroutines that make the programmatical creation of code using RakuAST a lot easier.
SUBROUTINES
NameAST
say NameAST( "Foo" );
say NameAST( "Foo::Bar" );
RakuAST::Name.from-identifier("Foo")
RakuAST::Name.from-identifier-parts("Foo","Bar")
The TypeAST
subroutine takes a package-like string and returns the RakUAST representation of that string.
TypeAST
say TypeAST( Array[Int] );
RakuAST::Type::Parameterized.new(
base-type => RakuAST::Type::Simple.new(
RakuAST::Name.from-identifier("Array")
),
args => RakuAST::ArgList.new(
RakuAST::Type::Simple.new(
RakuAST::Name.from-identifier("Int")
)
)
)
The TypeAST
subroutine takes a type object and returns the RakUAST representation of that type object.
ParameterAST
sub foo(Int $a, Str $b --> Str:D) { }
say ParameterAST( &foo.signature.params[0] );
RakuAST::Parameter.new(
type => RakuAST::Type::Simple.new(
RakuAST::Name.from-identifier("Int")
),
target => RakuAST::ParameterTarget::Var.new(
name => "\$a"
)
)
The ParameterAST
subroutine takes a Parameter
object and returns the RakUAST representation of that object.
SignatureAST
sub foo(Int $a, Str $b --> Str:D) { }
say SignatureAST( &foo.signature );
RakuAST::Signature.new(
parameters => (
RakuAST::Parameter.new(
type => RakuAST::Type::Simple.new(
RakuAST::Name.from-identifier("Int")
),
target => RakuAST::ParameterTarget::Var.new(
name => "\$a"
)
),
RakuAST::Parameter.new(
type => RakuAST::Type::Simple.new(
RakuAST::Name.from-identifier("Str")
),
target => RakuAST::ParameterTarget::Var.new(
name => "\$b"
)
),
),
returns => RakuAST::Type::Simple.new(
RakuAST::Name.from-identifier("Str:D")
)
)
The SignatureAST
subroutine takes a Signature
object and returns the RakUAST representation of that object.
ACKNOWLEDGEMENTS
The initial version of this distribution was taken from the work on .assuming
, which was sponsored by the Raku Foundation.
AUTHOR
Elizabeth Mattijsen liz@raku.rocks
Source can be located at: https://github.com/lizmat/RakuAST-Utils . Comments and Pull Requests are welcome.
If you like this module, or what I'm doing more generally, committing to a small sponsorship would mean a great deal to me!
COPYRIGHT AND LICENSE
Copyright 2025 Elizabeth Mattijsen
This library is free software; you can redistribute it and/or modify it under the Artistic License 2.0.