Perl6::TypeGraph - Parse a description of the types for documentation.
use Perl6::TypeGraph; # create and initialize it my $tg = Perl6::TypeGraph.new-from-file("./resources/type-graph.txt"); # and use it! say $tg.sorted;
Perl6::Typegraph creates a graph of all types in a file that describes them. It gives you info about what classes a type inherits from and the roles it does. In addition, it also computes the inversion of this relations, which let you know what types inherit a given type and the types implementing a specific role.
All types are represented using a
[ Category ] # only one-line comments are supported packagetype typename[role-signature] packagetype typename[role-signature] is typename[role-signature] # inheritance packagetype typename[role-signature] does typename[role-signature] # roles [ Another cateogory ]
Supported typenames: whatever string following the syntax
classfollows the usual identifier format that might include apostrophes and dashes.
[role-signature]is not processed, but you can add it anyway.
If your type inherits from more than one type or implements several roles, you can add more
doesstatements (separated by spaces).
[Metamodel] # Metamodel class Metamodel::Archetypes role Metamodel::AttributeContainer class Metamodel::GenericHOW does Metamodel::Naming class Metamodel::MethodDispatcher is Metamodel::BaseDispatcher is Another::Something enum Bool is Int module Test
(whitespace is only included for appearance, it does not have any meaning)
has Associative %.types
Format: $name => Perl6::Type.
has Positional @.sorted
Sorted array of type names.
method new-from-file( $fn ) returns Mu
Initialize %.types from a file.
method parse-from-file( $fn ) returns Mu
Parse the file (using the Decl grammar) and initialize %.types and @.sorted
method topo-sort() returns Mu
This method takes all Perl6::Type objects in
%.types and sort them
by its name. After that, recursively, add all roles and supers in the
Moritz Lenz <@moritz> Antonio Gámiz <@antoniogamiz>
COPYRIGHT AND LICENSE
This module is a spin-off from the Official Doc repo, if you want to see the past changes go to the official doc.
Copyright 2019 Moritz and Antonio This library is free software; you can redistribute it and/or modify it under the Artistic License 2.0.