mirror of
https://github.com/Smaug123/WoofWare.Whippet
synced 2025-10-05 15:58:39 +00:00
Some checks failed
.NET / build (Debug) (push) Has been cancelled
.NET / build (Release) (push) Has been cancelled
.NET / analyzers (push) Has been cancelled
.NET / build-nix (push) Has been cancelled
.NET / check-dotnet-format (push) Has been cancelled
.NET / check-nix-format (push) Has been cancelled
.NET / Check links (push) Has been cancelled
.NET / Check flake (push) Has been cancelled
.NET / nuget-pack (push) Has been cancelled
.NET / expected-pack (push) Has been cancelled
.NET / all-required-checks-complete (push) Has been cancelled
58 lines
2.0 KiB
Forth
58 lines
2.0 KiB
Forth
namespace WoofWare.Whippet.Fantomas
|
|
|
|
open Fantomas.FCS.Syntax
|
|
open Fantomas.FCS.Text.Range
|
|
open Fantomas.FCS.Xml
|
|
open Fantomas.FCS.SyntaxTrivia
|
|
|
|
/// Represents everything you need to know about a union case.
|
|
/// This is generic on whether each field of this case must be named.
|
|
type UnionCase<'ident> =
|
|
{
|
|
/// The name of the case: e.g. `| Foo of blah` has this being `Foo`.
|
|
Name : Ident
|
|
/// Any docstring associated with this case.
|
|
XmlDoc : PreXmlDoc option
|
|
/// Any accessibility modifier: e.g. `type Foo = private | Blah`.
|
|
Access : SynAccess option
|
|
/// Attributes on the case: for example, `| [<Attr>] Foo of blah`.
|
|
Attributes : SynAttribute list
|
|
/// The data contained within the case: for example, `[blah]` in `| Foo of blah`.
|
|
Fields : SynFieldData<'ident> list
|
|
}
|
|
|
|
/// Methods for manipulating `SynUnionCase`, which represents a single case of a discriminated union.
|
|
[<RequireQualifiedAccess>]
|
|
module SynUnionCase =
|
|
/// Build a SynUnionCase from our structured `UnionCase` type.
|
|
let create (case : UnionCase<Ident option>) : SynUnionCase =
|
|
let fields =
|
|
case.Fields
|
|
|> List.map (fun field ->
|
|
SynField.SynField (
|
|
SynAttributes.ofAttrs field.Attrs,
|
|
false,
|
|
field.Ident,
|
|
field.Type,
|
|
false,
|
|
PreXmlDoc.Empty,
|
|
None,
|
|
range0,
|
|
{
|
|
LeadingKeyword = None
|
|
}
|
|
)
|
|
)
|
|
|
|
SynUnionCase.SynUnionCase (
|
|
SynAttributes.ofAttrs case.Attributes,
|
|
SynIdent.createI case.Name,
|
|
SynUnionCaseKind.Fields fields,
|
|
case.XmlDoc |> Option.defaultValue PreXmlDoc.Empty,
|
|
case.Access,
|
|
range0,
|
|
{
|
|
BarRange = Some range0
|
|
}
|
|
)
|