RakuAST-Utils
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 <[email protected]>
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.
# vim: expandtab shiftwidth=4