Skip to content

Commit 4e72d71

Browse files
author
Maxime Mangel
committed
Add [YANKED] tag support
1 parent e2b7933 commit 4e72d71

File tree

2 files changed

+40
-5
lines changed

2 files changed

+40
-5
lines changed

src/Ionide.KeepAChangelog/Library.fs

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,7 @@ module Domain =
4545
Version : SemanticVersion
4646
Date : DateTime
4747
Data : ChangelogData option
48+
IsYanked : bool
4849
}
4950

5051
type Changelogs =
@@ -244,20 +245,27 @@ module Parser =
244245
pipe5 pDay dot pMonth dot pYear (fun d _ m _ y -> System.DateTime(y, m, d))
245246

246247
attempt dmyDots <|> ymdDashes
247-
248+
249+
let pYanked: Parser<_> =
250+
opt (pstring "[YANKED]")
251+
|>> function
252+
| None -> false
253+
| Some _ -> true
248254

249255
let pVersion = mdUrl pSemver <|> pSemver
250256

251257
let pRelease: Parser<Release> =
252258
let vPart = skipString "##" >>. spaces1 >>. pVersion
253259
let middle = spaces1 .>> pchar '-' .>> spaces1
254-
let date = pDate .>> skipRestOfLine true
260+
let date = pDate
261+
let yanked = opt spaces1 >>. pYanked
255262
let content = choice [ pData; pNonStructuredData ]
256263

257-
pipe5 vPart middle date (opt (many newline)) (opt content) (fun v _ date _ data ->
264+
pipe6 vPart middle date yanked (opt (many newline)) (opt content) (fun v _ date isYanked _ data ->
258265
{ Version = v
259266
Date = date
260-
Data = data }
267+
Data = data
268+
IsYanked = isYanked }
261269
)
262270

263271
let pChangeLogs: Parser<Changelogs, unit> =

test/Ionide.KeepAChangelog.Test/Program.fs

Lines changed: 28 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@ let singleReleaseExpected =
2929
Changed = "- B\n"
3030
Removed = "- C\n"
3131
}
32+
IsYanked = false
3233
}
3334

3435
let keepAChangelog =
@@ -70,6 +71,7 @@ let keepAChangelogExpected: Changelogs =
7071
ChangelogData.Default with
7172
Added = "- A\n- B\n- C\n\n"
7273
}
74+
IsYanked = false
7375
}
7476
]
7577
}
@@ -106,8 +108,25 @@ let sample1ReleaseExpected =
106108
Version = SemanticVersion.Parse "0.3.1"
107109
Date = DateTime(2022, 1, 8)
108110
Data = Some { ChangelogData.Default with Added = "- Add XmlDocs to the generated package\n\n" }
111+
IsYanked = false
109112
}
110-
113+
114+
let yankedRelease = normalizeNewline """## [0.3.1] - 8.1.2022 [YANKED]
115+
116+
### Added
117+
118+
- Add XmlDocs to the generated package
119+
120+
"""
121+
122+
let yankedReleaseExpected =
123+
{
124+
Version = SemanticVersion.Parse "0.3.1"
125+
Date = DateTime(2022, 1, 8)
126+
Data = Some { ChangelogData.Default with Added = "- Add XmlDocs to the generated package\n\n" }
127+
IsYanked = true
128+
}
129+
111130
let sample = normalizeNewline """# Changelog
112131
All notable changes to this project will be documented in this file.
113132
@@ -147,6 +166,7 @@ let sampleExpected: Changelogs = {
147166
Version = SemanticVersion.Parse "0.3.1"
148167
Date = DateTime(2022, 1, 8)
149168
Data = Some { ChangelogData.Default with Added = "* Add XmlDocs to the generated package\n" }
169+
IsYanked = false
150170
}
151171
{
152172
Version = SemanticVersion.Parse "0.3.0"
@@ -158,16 +178,19 @@ let sampleExpected: Changelogs = {
158178
"""* Expose client `CodeAction` caps as CodeActionClientCapabilities. (by @razzmatazz)
159179
* Map CodeAction.IsPreferred & CodeAction.Disabled props. (by @razzmatazz)
160180
""" }
181+
IsYanked = false
161182
}
162183
{
163184
Version = SemanticVersion.Parse "0.2.0"
164185
Date = DateTime(2021, 11, 17)
165186
Data = Some { ChangelogData.Default with Added = "* Add support for `codeAction/resolve` (by @razzmatazz)\n" }
187+
IsYanked = false
166188
}
167189
{
168190
Version = SemanticVersion.Parse "0.1.1"
169191
Date = DateTime(2021, 11, 15)
170192
Data = Some { ChangelogData.Default with Added = "* Initial implementation\n" }
193+
IsYanked = false
171194
}
172195
]
173196
}
@@ -203,6 +226,7 @@ let parsingExamples = testList "parsing examples" [
203226
runSuccess "header and unreleased" (Parser.pHeader >>. Parser.pUnreleased) headerAndUnreleased None
204227
runSuccess "release" Parser.pRelease singleRelease singleReleaseExpected
205228
runSuccess "sample 1 release" Parser.pRelease sample1Release sample1ReleaseExpected
229+
runSuccess "yanked release" Parser.pRelease yankedRelease yankedReleaseExpected
206230
runSuccess
207231
"header and unreleased and released"
208232
(Parser.pHeader >>. Parser.pUnreleased
@@ -347,6 +371,7 @@ let FableSampleExpected :Changelogs = {
347371
{
348372
Version = SemanticVersion.Parse "4.6.0"
349373
Date = DateTime(2023, 11, 27)
374+
IsYanked = false
350375
Data = Some {
351376
ChangelogData.Default with
352377
Changed =
@@ -404,11 +429,13 @@ let SectionLessSampleExpected: Changelogs = {
404429
Version = SemanticVersion.Parse "4.2.1"
405430
Date = DateTime(2023, 9, 29)
406431
Data = Some ChangelogData.Default
432+
IsYanked = false
407433
}
408434
{
409435
Version = SemanticVersion.Parse "4.2.0"
410436
Date = DateTime(2023, 9, 29)
411437
Data = Some ChangelogData.Default
438+
IsYanked = false
412439
}
413440
]
414441
}

0 commit comments

Comments
 (0)