Use more of the Whippet Fantomas client lib (#284)

This commit is contained in:
Patrick Stevens
2024-10-06 22:22:24 +01:00
committed by GitHub
parent 5319a33b7b
commit d59ebdfccb
6 changed files with 33 additions and 48 deletions

View File

@@ -1758,10 +1758,7 @@ type ArgParserGenerator () =
let ast, _ = let ast, _ =
Ast.fromFilename context.InputFilename |> Async.RunSynchronously |> Array.head Ast.fromFilename context.InputFilename |> Async.RunSynchronously |> Array.head
let types = let types = Ast.getTypes ast
Ast.extractTypeDefn ast
|> List.groupBy (fst >> List.map _.idText >> String.concat ".")
|> List.map (fun (_, v) -> fst (List.head v), List.collect snd v)
let opens = AstHelper.extractOpens ast let opens = AstHelper.extractOpens ast

View File

@@ -996,7 +996,7 @@ type HttpClientGenerator () =
let ast, _ = let ast, _ =
Ast.fromFilename context.InputFilename |> Async.RunSynchronously |> Array.head Ast.fromFilename context.InputFilename |> Async.RunSynchronously |> Array.head
let types = Ast.extractTypeDefn ast let types = Ast.getTypes ast
let opens = AstHelper.extractOpens ast let opens = AstHelper.extractOpens ast

View File

@@ -291,14 +291,14 @@ type InterfaceMockGenerator () =
let ast, _ = let ast, _ =
Ast.fromFilename context.InputFilename |> Async.RunSynchronously |> Array.head Ast.fromFilename context.InputFilename |> Async.RunSynchronously |> Array.head
let types = Ast.extractTypeDefn ast let types = Ast.getTypes ast
let namespaceAndInterfaces = let namespaceAndInterfaces =
types types
|> List.choose (fun (ns, types) -> |> List.choose (fun (ns, types) ->
types types
|> List.choose (fun typeDef -> |> List.choose (fun typeDef ->
match Ast.getAttribute<GenerateMockAttribute> typeDef with match SynTypeDefn.getAttribute typeof<GenerateMockAttribute>.Name typeDef with
| None -> | None ->
let name = SynTypeDefn.getName typeDef |> List.map _.idText |> String.concat "." let name = SynTypeDefn.getName typeDef |> List.map _.idText |> String.concat "."

View File

@@ -711,13 +711,13 @@ type JsonParseGenerator () =
Ast.fromFilename context.InputFilename |> Async.RunSynchronously |> Array.head Ast.fromFilename context.InputFilename |> Async.RunSynchronously |> Array.head
let relevantTypes = let relevantTypes =
Ast.extractTypeDefn ast Ast.getTypes ast
|> List.map (fun (name, defns) -> |> List.map (fun (name, defns) ->
defns defns
|> List.choose (fun defn -> |> List.choose (fun defn ->
if Ast.isRecord defn then Some defn if SynTypeDefn.isRecord defn then Some defn
elif Ast.isDu defn then Some defn elif SynTypeDefn.isDu defn then Some defn
elif AstHelper.isEnum defn then Some defn elif SynTypeDefn.isEnum defn then Some defn
else None else None
) )
|> fun defns -> name, defns |> fun defns -> name, defns

View File

@@ -528,13 +528,13 @@ type JsonSerializeGenerator () =
Ast.fromFilename context.InputFilename |> Async.RunSynchronously |> Array.head Ast.fromFilename context.InputFilename |> Async.RunSynchronously |> Array.head
let relevantTypes = let relevantTypes =
Ast.extractTypeDefn ast Ast.getTypes ast
|> List.map (fun (name, defns) -> |> List.map (fun (name, defns) ->
defns defns
|> List.choose (fun defn -> |> List.choose (fun defn ->
if Ast.isRecord defn then Some defn if SynTypeDefn.isRecord defn then Some defn
elif Ast.isDu defn then Some defn elif SynTypeDefn.isDu defn then Some defn
elif AstHelper.isEnum defn then Some defn elif SynTypeDefn.isEnum defn then Some defn
else None else None
) )
|> fun defns -> name, defns |> fun defns -> name, defns

View File

@@ -1,5 +1,6 @@
namespace WoofWare.Myriad.Plugins namespace WoofWare.Myriad.Plugins
open System
open Fantomas.FCS.Syntax open Fantomas.FCS.Syntax
open Fantomas.FCS.Xml open Fantomas.FCS.Xml
open WoofWare.Whippet.Fantomas open WoofWare.Whippet.Fantomas
@@ -59,7 +60,7 @@ module internal RemoveOptionsGenerator =
Attributes = [] Attributes = []
} }
let typeDecl = AstHelper.defineRecordType record let typeDecl = RecordType.ToAst record
SynModuleDecl.Types ([ typeDecl ], range0) SynModuleDecl.Types ([ typeDecl ], range0)
@@ -146,44 +147,31 @@ type RemoveOptionsGenerator () =
let ast, _ = let ast, _ =
Ast.fromFilename context.InputFilename |> Async.RunSynchronously |> Array.head Ast.fromFilename context.InputFilename |> Async.RunSynchronously |> Array.head
let records = Ast.extractRecords ast let records = Ast.getRecords ast
let namespaceAndRecords = let namespaceAndRecords =
records records
|> List.choose (fun (ns, types) -> |> List.collect (fun (ns, ty) ->
match ty
types |> List.filter (fun record ->
|> List.filter (SynTypeDefn.hasAttribute typeof<RemoveOptionsAttribute>.Name) record.Attributes
with |> List.exists (fun attr ->
| [] -> None attr.TypeName.LongIdent
| types -> |> List.last
let types = |> _.idText
types |> fun s ->
|> List.map (fun ty -> if s.EndsWith ("Attribute", StringComparison.Ordinal) then
match ty with s
| SynTypeDefn.SynTypeDefn (sci, else
SynTypeDefnRepr.Simple (SynTypeDefnSimpleRepr.Record (access, $"%s{s}Attribute"
fields, |> (=) typeof<RemoveOptionsAttribute>.Name
_), )
_), )
smd, |> List.map (fun ty -> ns, ty)
smdo,
_,
_) -> RecordType.OfRecord sci smd access fields
| _ -> failwith "unexpectedly not a record"
)
Some (ns, types)
) )
let modules = let modules =
namespaceAndRecords namespaceAndRecords
|> List.collect (fun (ns, records) -> |> List.map (fun (ns, record) -> RemoveOptionsGenerator.createRecordModule ns record)
records
|> List.map (fun record ->
let recordModule = RemoveOptionsGenerator.createRecordModule ns record
recordModule
)
)
Output.Ast modules Output.Ast modules