Fabulous.AST
1.0.0
dotnet add package Fabulous.AST --version 1.0.0
NuGet\Install-Package Fabulous.AST -Version 1.0.0
<PackageReference Include="Fabulous.AST" Version="1.0.0" />
paket add Fabulous.AST --version 1.0.0
#r "nuget: Fabulous.AST, 1.0.0"
// Install Fabulous.AST as a Cake Addin #addin nuget:?package=Fabulous.AST&version=1.0.0 // Install Fabulous.AST as a Cake Tool #tool nuget:?package=Fabulous.AST&version=1.0.0
Fabulous.AST
Welcome to Fabulous.AST, an Abstract Syntax Tree (AST) Domain Specific Language (DSL) for F#.
Fabulous.AST leverages Fantomas to generate F# code from AST. This allows you to create F# code that adheres to the Fantomas style guide while providing a simple and expressive way to represent code as a tree of nodes. This approach simplifies programmatic code manipulation and analysis.
Features
- Simplified AST creation for F# code
- Integration with Fantomas for consistent code formatting
- Expressive DSL for representing code structures
- Easy-to-use API for code generation and manipulation
Installation
Install Fabulous.AST via NuGet:
dotnet add package Fabulous.AST
Usage
Let's compare AST creation using Fantomas directly and Fabulous.AST:
Fantomas AST Example
open Fantomas.Core
open Fantomas.Core.SyntaxOak
open Fantomas.FCS.Text
Oak(
[],
[ ModuleOrNamespaceNode(
None,
[ BindingNode(
None,
None,
MultipleTextsNode([ SingleTextNode("let", Range.Zero) ], Range.Zero),
false,
None,
None,
Choice1Of2(IdentListNode([ IdentifierOrDot.Ident(SingleTextNode("x", Range.Zero)) ], Range.Zero)),
None,
[],
None,
SingleTextNode("=", Range.Zero),
Expr.Constant(Constant.FromText(SingleTextNode("12", Range.Zero))),
Range.Zero
)
|> ModuleDecl.TopLevelBinding ],
Range.Zero
) ],
Range.Zero
)
|> CodeFormatter.FormatOakAsync
|> Async.RunSynchronously
|> printfn "%s"
Fabulous.AST Example
open Fantomas.Core
open Fabulous.AST
open type Fabulous.AST.Ast
Oak() {
AnonymousModule() {
Value("x", "12")
}
}
|> Gen.mkOak
|> CodeFormatter.FormatOakAsync
|> Async.RunSynchronously
|> printfn "%s"
Both examples produce the following F# code:
let x = 12
As you can see, Fabulous.AST significantly simplifies the process of creating ASTs for F# code.
Documentation
For comprehensive information about Fabulous.AST, visit our documentation site.
Additional resources:
Supporting Fabulous.AST
Show your support for Fabulous.AST:
- Star this repository and the Fabulous.AST project on GitHub.
- Become a sponsor through the GitHub Sponsors program.
Contributing
We welcome contributions to Fabulous.AST!
- Found a bug or have a suggestion? Open an issue, and we'll look into it promptly.
- Want to contribute code? PRs are always welcome! Please create them from the
main
branch and follow our Contributor Guide.
License
Fabulous.AST is released under the MIT License.
Product | Versions Compatible and additional computed target framework versions. |
---|---|
.NET | net5.0 was computed. net5.0-windows was computed. net6.0 was computed. net6.0-android was computed. net6.0-ios was computed. net6.0-maccatalyst was computed. net6.0-macos was computed. net6.0-tvos was computed. net6.0-windows was computed. net7.0 was computed. net7.0-android was computed. net7.0-ios was computed. net7.0-maccatalyst was computed. net7.0-macos was computed. net7.0-tvos was computed. net7.0-windows was computed. net8.0 is compatible. net8.0-android was computed. net8.0-browser was computed. net8.0-ios was computed. net8.0-maccatalyst was computed. net8.0-macos was computed. net8.0-tvos was computed. net8.0-windows was computed. |
.NET Core | netcoreapp3.0 was computed. netcoreapp3.1 was computed. |
.NET Standard | netstandard2.1 is compatible. |
MonoAndroid | monoandroid was computed. |
MonoMac | monomac was computed. |
MonoTouch | monotouch was computed. |
Tizen | tizen60 was computed. |
Xamarin.iOS | xamarinios was computed. |
Xamarin.Mac | xamarinmac was computed. |
Xamarin.TVOS | xamarintvos was computed. |
Xamarin.WatchOS | xamarinwatchos was computed. |
-
.NETStandard 2.1
- Fantomas.Core (= 6.3.16)
-
net8.0
- Fantomas.Core (= 6.3.16)
NuGet packages (1)
Showing the top 1 NuGet packages that depend on Fabulous.AST:
Package | Downloads |
---|---|
MigrateLib
Declarative migrations for SQLite |
GitHub repositories
This package is not used by any popular GitHub repositories.
Version | Downloads | Last updated |
---|---|---|
1.0.0 | 92 | 12/15/2024 |
1.0.0-pre9 | 159 | 5/13/2024 |
1.0.0-pre8 | 97 | 5/12/2024 |
1.0.0-pre7 | 117 | 5/10/2024 |
1.0.0-pre6 | 119 | 5/10/2024 |
1.0.0-pre5 | 149 | 4/14/2024 |
1.0.0-pre4 | 105 | 4/7/2024 |
1.0.0-pre3 | 114 | 4/1/2024 |
1.0.0-pre2 | 118 | 3/27/2024 |
1.0.0-pre17 | 73 | 10/6/2024 |
1.0.0-pre16 | 106 | 7/14/2024 |
1.0.0-pre15 | 112 | 7/1/2024 |
1.0.0-pre14 | 91 | 6/13/2024 |
1.0.0-pre13 | 100 | 6/2/2024 |
1.0.0-pre12 | 212 | 5/20/2024 |
1.0.0-pre11 | 111 | 5/16/2024 |
1.0.0-pre10 | 103 | 5/13/2024 |
1.0.0-pre1 | 118 | 3/25/2024 |
0.9.0 | 153 | 3/12/2024 |
0.8.2 | 133 | 3/11/2024 |
0.8.1 | 121 | 3/10/2024 |
0.8.0 | 135 | 3/8/2024 |
0.7.0 | 314 | 2/11/2024 |
0.6.2 | 234 | 6/8/2023 |
0.6.1 | 203 | 6/4/2023 |
0.6.0 | 177 | 5/29/2023 |
0.5.0 | 205 | 4/21/2023 |
0.4.0 | 232 | 4/13/2023 |
0.3.0 | 219 | 4/11/2023 |
0.2.0 | 204 | 4/6/2023 |
0.1.0 | 236 | 4/3/2023 |
### Changed
- Finish abstract members by @edgarfgp in https://github.com/edgarfgp/Fabulous.AST/pull/124
- Improve widgets by @edgarfgp in https://github.com/edgarfgp/Fabulous.AST/pull/126
### Fixed
- Fix type augmentations by @edgarfgp in https://github.com/edgarfgp/Fabulous.AST/pull/125