gretmn102 / gretmn102/MindNotes

feat(shared): add `parserRawFrontmatter`

Open
#7 0 comments 0 reactions 0 assignees View on GitHub
Dominant language
F#
Stars
0
Forks
0
PR merge metrics
No merged PRs in 30d

Description

```fsharp
#r "nuget: Expecto, 10.2.1"
#r "nuget: FSharpMyExt, 2.0.0-prerelease.9"

module MarkdownParser =
open FParsec
open FsharpMyExtension.Serialization.Deserializers.FParsec

let parserRawFrontmatter: Parser<_, unit> =
let separator = "---"
let pseparator = pstring separator
let rawYml =
let pline =
notFollowedByString separator
>>? many1Satisfy ((<>) '\n')
many (
pline .>> optional newline
<|> newlineReturn ""
)
rawYml |> between (pseparator .>> newline) pseparator

let parseFrontmatter =
runResult parserRawFrontmatter

open Expecto

[]
let ``parserRawFrontmatter`` =
let parse = MarkdownParser.parseFrontmatter

testList "parseRawFrontmatter" [
testCase "empty" <| fun () ->
Expect.equal
(parse <| String.concat System.Environment.NewLine [
"---"
"---"
])
(Ok [])
""
testCase "base" <| fun () ->
Expect.equal
(parse <| String.concat System.Environment.NewLine [
"---"
"authors:"
" - iam"
"tags:"
" - hello"
"---"
])
(Ok ([
"authors:"
" - iam"
"tags:"
" - hello"
]))
""
testCase "blank newlines" <| fun () ->
Expect.equal
(parse <| String.concat System.Environment.NewLine [
"---"
"authors:"
""
"tags:"
""
"---"
])
(Ok ([
"authors:"
""
"tags:"
""
]))
""
]

runTestsWithCLIArgs [] fsi.CommandLineArgs[1..] (testList "all" [
``parserRawFrontmatter``
])
```

Contributor guide

No contributing guide indexed for this repository

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.