From a3431928354f375d22c7ebe7bf2c4453889a085c Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Wed, 11 Mar 2026 16:35:47 +0000 Subject: [PATCH 1/2] Initial plan From 0f84777e04dcb31225f61280cc757b9f8f41252b Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Wed, 11 Mar 2026 16:44:42 +0000 Subject: [PATCH 2/2] Refactor: move resolveCaseIdent to GeneratorHelpers to eliminate duplication Co-authored-by: 7sharp9 <588746+7sharp9@users.noreply.github.com> --- src/Myriad.Plugins/DUCasesGenerator.fs | 12 ++---------- src/Myriad.Plugins/GeneratorHelpers.fs | 11 +++++++++++ src/Myriad.Plugins/LensesGenerator.fs | 8 +------- 3 files changed, 14 insertions(+), 17 deletions(-) diff --git a/src/Myriad.Plugins/DUCasesGenerator.fs b/src/Myriad.Plugins/DUCasesGenerator.fs index 8f06cf1b..6dafe925 100644 --- a/src/Myriad.Plugins/DUCasesGenerator.fs +++ b/src/Myriad.Plugins/DUCasesGenerator.fs @@ -15,20 +15,12 @@ module internal CreateDUModule = let args = SynPat.CreateTyped(name, duType) |> SynPat.CreateParen SynPat.CreateLongIdent(varIdent, [args]) - let resolveCaseIdent (requiresQualifiedAccess: bool) (parent: LongIdent) (id: Fantomas.FCS.Syntax.Ident) : SynLongIdent = - let parts = - if requiresQualifiedAccess then - (parent |> List.map (fun i -> i.idText)) @ [id.idText] - else - [id.idText] - SynLongIdent.Create parts - let createMatchOnIdent (inputIdent: string) : SynExpr = let ident = SynLongIdent.CreateString inputIdent SynExpr.CreateLongIdent(false, ident, None) let createCaseMatchClause (requiresQualifiedAccess: bool) (parent: LongIdent) (id: Ident) (hasFields: bool) (rhs: SynExpr) : SynMatchClause = - let indent = resolveCaseIdent requiresQualifiedAccess parent id + let indent = GeneratorHelpers.resolveCaseIdent requiresQualifiedAccess parent id let args = if hasFields then [SynPat.CreateWild] else [] let p = SynPat.CreateLongIdent(indent, args) SynMatchClause.Create(p, None, rhs) @@ -65,7 +57,7 @@ module internal CreateDUModule = let pat = SynPat.CreateConst(con) let rhs = let f = SynExpr.Ident (Ident("Some", range0)) - let fullCaseName = resolveCaseIdent requiresQualifiedAccess parent id + let fullCaseName = GeneratorHelpers.resolveCaseIdent requiresQualifiedAccess parent id let x = SynExpr.CreateLongIdent fullCaseName SynExpr.App(ExprAtomicFlag.NonAtomic, false, f, x, range0) SynMatchClause.Create(pat, None, rhs) diff --git a/src/Myriad.Plugins/GeneratorHelpers.fs b/src/Myriad.Plugins/GeneratorHelpers.fs index 86d43019..bf707ed0 100644 --- a/src/Myriad.Plugins/GeneratorHelpers.fs +++ b/src/Myriad.Plugins/GeneratorHelpers.fs @@ -6,6 +6,17 @@ open Myriad.Core.Ast module internal GeneratorHelpers = + /// Resolves the identifier for a DU case, optionally fully qualifying it with the + /// parent type name when RequireQualifiedAccess is present. + let resolveCaseIdent (requiresQualifiedAccess: bool) (parent: LongIdent) (id: Fantomas.FCS.Syntax.Ident) : SynLongIdent = + let parts = + if requiresQualifiedAccess then + (parent |> List.map (fun i -> i.idText)) @ [id.idText] + else + [id.idText] + SynLongIdent.Create parts + + /// Parses the input file specified in the generator context and returns the first parsed AST. let parseInputAst (context: GeneratorContext) = Ast.fromFilename context.InputFilename diff --git a/src/Myriad.Plugins/LensesGenerator.fs b/src/Myriad.Plugins/LensesGenerator.fs index 04d83950..4063b856 100644 --- a/src/Myriad.Plugins/LensesGenerator.fs +++ b/src/Myriad.Plugins/LensesGenerator.fs @@ -65,14 +65,8 @@ module internal CreateLenses = let pattern = SynPat.CreateLongIdent(SynLongIdent.CreateString "Lens'", []) - let matchCaseIdentParts = - if requiresQualifiedAccess then - (parent |> List.map (fun i -> i.idText)) @ [id.idText] - else - [id.idText] - // The name of the DU case, optionally preceded by the name of the DU itself, if fully qualified access is required - let fullCaseName = SynLongIdent.Create matchCaseIdentParts + let fullCaseName = GeneratorHelpers.resolveCaseIdent requiresQualifiedAccess parent id let lensExpression = let matchCase =