Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/jj/raku-doc-typegraph
Parse a description of the types for documentation.
https://github.com/jj/raku-doc-typegraph
graph module opensource perl6 type
Last synced: 1 day ago
JSON representation
Parse a description of the types for documentation.
- Host: GitHub
- URL: https://github.com/jj/raku-doc-typegraph
- Owner: JJ
- License: artistic-2.0
- Created: 2019-05-30T20:41:39.000Z (over 5 years ago)
- Default Branch: master
- Last Pushed: 2023-01-27T07:58:42.000Z (over 1 year ago)
- Last Synced: 2024-09-22T21:30:55.712Z (5 days ago)
- Topics: graph, module, opensource, perl6, type
- Language: Raku
- Homepage:
- Size: 115 KB
- Stars: 0
- Watchers: 5
- Forks: 2
- Open Issues: 5
-
Metadata Files:
- Readme: README.md
- Changelog: Changes
- License: LICENSE
Awesome Lists containing this project
README
[![Test](https://github.com/JJ/Raku-Doc-TypeGraph/actions/workflows/test.yaml/badge.svg)](https://github.com/JJ/Raku-Doc-TypeGraph/actions/workflows/test.yaml)
# NAME
Doc::TypeGraph - Parse a description of the types for documentation.
# SYNOPSIS
```Raku
use Doc::TypeGraph;
# create and initialize it
my $tg = Doc::TypeGraph.new-from-file("./resources/type-graph.txt");# and use it!
say $tg.sorted;
```# DESCRIPTION
Doc::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 `Doc::Type` object. Categories are just
descriptive and are not really used in the generation of graphs. They will
probably be eliminated in later iterations of this library.# Installation
You will need to have `graphviz` installed to generate the graphs; it uses
`dot`
# FILE SYNTAX[ 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 categories: `Metamodel`, `Domain-specific`, `Basic`, `Composite`, `Exceptions` and `Core`.
- Supported packagetypes: `class`, `module`, `role` and `enum`.
- Supported typenames: whatever string following the syntax
`class1::class2::class3 ...`; `class` follows 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 `is` and `does` statements (separated by spaces).
Example:
[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 => Doc::Type.
### has Positional @.sorted
Sorted array of type names.
### method new-from-file
```raku
method new-from-file(
$fn
) returns Mu
```Initialize %.types from a file.
### method parse-from-file
```raku
method parse-from-file(
$fn
) returns Mu
```Parse the file (using the Decl grammar) and initialize %.types and @.sorted
### method topo-sort
```raku
method topo-sort() returns Mu
```This method takes all Doc::Type objects in `%.types` and sort them
by its name. After that, recursively, add all roles and supers in the
object to `@!sorted`# AUTHOR
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](https://github.com/Raku/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.