Skip to content

Commit 2cb8ccc

Browse files
authored
Merge pull request #250 from MoiraeSoftware/repo-assist/fix-issue-249-filtertypes-helper-ast-ebf30c132bdcabc7
[Repo Assist] Refactor: extract filterTypes helper to eliminate 5-fold duplication in Ast.fs — closes #249
2 parents 4c65102 + 1224eef commit 2cb8ccc

1 file changed

Lines changed: 8 additions & 31 deletions

File tree

src/Myriad.Core/Ast.fs

Lines changed: 8 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -240,19 +240,14 @@ module Ast =
240240
| SynTypeDefnRepr.Simple(SynTypeDefnSimpleRepr.Union _, _) -> true
241241
| _ -> false
242242

243+
let private filterTypes predicate types =
244+
types |> List.map (fun (ns, types) -> ns, types |> List.filter predicate)
245+
243246
let extractRecords (ast: ParsedInput) =
244-
let types = extractTypeDefn ast
245-
let onlyRecords =
246-
types
247-
|> List.map (fun (ns, types) -> ns, types |> List.filter isRecord )
248-
onlyRecords
247+
extractTypeDefn ast |> filterTypes isRecord
249248

250249
let extractDU (ast: ParsedInput) =
251-
let types = extractTypeDefn ast
252-
let onlyDus =
253-
types
254-
|> List.map (fun (ns, types) -> ns, types |> List.filter isDu )
255-
onlyDus
250+
extractTypeDefn ast |> filterTypes isDu
256251

257252

258253
module ModuleOrNamespace =
@@ -286,31 +281,13 @@ module Ast =
286281
extractTypes moduleDecls namespaceId
287282

288283
let records (nsOrModule: SynModuleOrNamespace) =
289-
let types = getTypeDefns nsOrModule
290-
291-
let onlyRecords =
292-
types
293-
|> List.map (fun (ns, types) -> ns, types |> List.filter isRecord)
294-
295-
onlyRecords
284+
getTypeDefns nsOrModule |> filterTypes isRecord
296285

297286
let dus (nsOrModule: SynModuleOrNamespace) =
298-
let types = getTypeDefns nsOrModule
299-
300-
let onlyDus =
301-
types
302-
|> List.map (fun (ns, types) -> ns, types |> List.filter isDu)
303-
304-
onlyDus
287+
getTypeDefns nsOrModule |> filterTypes isDu
305288

306289
let recordsOrDus (nsOrModule: SynModuleOrNamespace) =
307-
let types = getTypeDefns nsOrModule
308-
309-
let recordsOrDus =
310-
types
311-
|> List.map (fun (ns, types) -> ns, types |> List.filter (fun t -> t |> isDu || t |> isRecord))
312-
313-
recordsOrDus
290+
getTypeDefns nsOrModule |> filterTypes (fun t -> isDu t || isRecord t)
314291

315292
module Ident =
316293
let asCamelCase (ident: Ident) =

0 commit comments

Comments
 (0)