This project is a port of the Prettier formatter to the Ada programming language. The aim of this project is to provide a tool that allows Ada programmers to create formatters for any language of their choosing.
Please note that only the core generic formatting algorithm and its dependencies were ported. The formatters for all supported languages are not included in this project.
This library allows users to build their own Prettier documents and format it.
To use this library, users need to instantiate the
Prettier_Ada.Generic_Formatters
package and use its Print
function to
format a node:
generic
type Node_Type is private;
with function Print_IR
(Node : Node_Type)
return Prettier_Ada.Documents.Document_Type;
package Prettier_Ada.Generic_Formatters is
function Print
(Node : Node_Type;
Options : Prettier_Ada.Documents.Format_Options_Type)
return Ada.Strings.Unbounded.Unbounded_String;
end Prettier_Ada.Generic_Formatters;
Node_Type
is the user's Abstract Syntax Tree (AST) type.
Print_IR
is a function that uses the Prettier_Ada.Documents.Builders
package to create a Prettier_Ada.Documents.Document_Type
value from a
Node_Type
value. Prettier will then be able to turn this document into
formatted source code. The Prettier_Ada.Documents.Builders
API tries to match
as closely as possible the original Prettier's API.
The Prettier_Ada.Documents.Json
package provides serialization and
deserialization functions for Prettier_Ada.Documents.Document_Type
.
# To build in a single LIBRARY_TYPE which can be 'static', 'static-pic' or
# 'relocatable' (default)
make lib
# Or to build all types
make all
# Then install it in a specific location, for instance /usr/local
PREFIX=/usr/local make install
make test
This library has been tested against Prettier's tests that test how a Prettier document is formatted. The port methodology consisted in serializing the document that Prettier formats, deserializing and formatting using this library, and finally comparing the result with Prettier's one. This ported testsuite is currently internal and not shared under this repo.
Please note that this library is still a work in progress. In particular, there are two points that will soon be addressed:
- Remove global state which will allow easy paralelism
- Manage allocated memory
However, contributions are welcome! Please feel free to submit a pull request or open an issue if you find a bug or have a feature suggestion.
See LICENSE.txt file for details.