Fabulous.AST 1.0.0

dotnet add package Fabulous.AST --version 1.0.0                
NuGet\Install-Package Fabulous.AST -Version 1.0.0                
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="Fabulous.AST" Version="1.0.0" />                
For projects that support PackageReference, copy this XML node into the project file to reference the package.
paket add Fabulous.AST --version 1.0.0                
#r "nuget: Fabulous.AST, 1.0.0"                
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
// 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

build NuGet version NuGet downloads

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:

  1. Star this repository and the Fabulous.AST project on GitHub.
  2. 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 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. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.

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 87 12/15/2024
1.0.0-pre9 157 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 147 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 101 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 120 3/10/2024
0.8.0 135 3/8/2024
0.7.0 305 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