mirror of
https://github.com/Smaug123/WoofWare.Myriad
synced 2025-10-10 06:28:40 +00:00
Use more of the Whippet Fantomas client lib (#284)
This commit is contained in:
@@ -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
|
||||||
|
|
||||||
|
@@ -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
|
||||||
|
|
||||||
|
@@ -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 "."
|
||||||
|
|
||||||
|
@@ -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
|
||||||
|
@@ -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
|
||||||
|
@@ -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
|
||||||
|
Reference in New Issue
Block a user