Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Improvements proposition #27

Closed
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 0 additions & 3 deletions .vscode/settings.json
Original file line number Diff line number Diff line change
@@ -1,7 +1,4 @@
{
"[fsharp]": {
"editor.formatOnSave": true
},
"files.associations": {
"**/build*/*[props|targets]": "msbuild"
}
Expand Down
12 changes: 6 additions & 6 deletions src/Ionide.KeepAChangelog.Tasks/Library.fs
Original file line number Diff line number Diff line change
Expand Up @@ -65,14 +65,14 @@ type ParseChangelogs() =
let sortedReleases =
// have to use LINQ here because List.sortBy* require IComparable, which
// semver doesn't implement
changelogs.Releases.OrderByDescending(fun (v, _, _) -> v)
changelogs.Releases.OrderByDescending(fun release -> release.Version)

let items =
sortedReleases
|> Seq.map (fun (version, date, data) ->
|> Seq.map (fun release ->
TaskItem()
|> Util.mapReleaseInfo version date
|> fun d -> match data with Some data -> Util.mapChangelogData data d | None -> d
|> Util.mapReleaseInfo release.Version release.Date
|> fun d -> match release.Data with Some data -> Util.mapChangelogData data d | None -> d
)
|> Seq.toArray

Expand All @@ -81,8 +81,8 @@ type ParseChangelogs() =

sortedReleases
|> Seq.tryHead
|> Option.iter (fun (version, date, data) ->
data
|> Option.iter (fun release ->
release.Data
|> Option.iter (fun data ->
this.LatestReleaseNotes <- data.ToMarkdown())
)
Expand Down
30 changes: 25 additions & 5 deletions src/Ionide.KeepAChangelog/Library.fs
Original file line number Diff line number Diff line change
Expand Up @@ -40,9 +40,17 @@ module Domain =
section heading lines
]

type Release =
{
Version : SemanticVersion
Date : DateTime
Data : ChangelogData option
IsYanked : bool
}

type Changelogs =
{ Unreleased: ChangelogData option
Releases: (SemanticVersion * DateTime * ChangelogData option) list }
Releases: Release list }

module Parser =

Expand Down Expand Up @@ -237,17 +245,28 @@ module Parser =
pipe5 pDay dot pMonth dot pYear (fun d _ m _ y -> System.DateTime(y, m, d))

attempt dmyDots <|> ymdDashes


let pYanked: Parser<_> =
opt (pstring "[YANKED]")
|>> function
| None -> false
| Some _ -> true

let pVersion = mdUrl pSemver <|> pSemver

let pRelease: Parser<SemVersion.SemanticVersion * System.DateTime * ChangelogData option> =
let pRelease: Parser<Release> =
let vPart = skipString "##" >>. spaces1 >>. pVersion
let middle = spaces1 .>> pchar '-' .>> spaces1
let date = pDate .>> skipRestOfLine true
let date = pDate
let yanked = opt spaces1 >>. pYanked
Comment on lines -247 to +261
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I was not able to keep the .>> skipRestOfLine true for some reason it was making the tests fails.

let content = choice [ pData; pNonStructuredData ]

pipe5 vPart middle date (opt (many newline)) (opt content) (fun v _ date _ data -> v, date, data)
pipe6 vPart middle date yanked (opt (many newline)) (opt content) (fun v _ date isYanked _ data ->
{ Version = v
Date = date
Data = data
IsYanked = isYanked }
)

let pChangeLogs: Parser<Changelogs, unit> =
let unreleased =
Expand Down Expand Up @@ -275,3 +294,4 @@ module Parser =
with
| ParserResult.Success (result, _, pos) -> Result.Ok result
| ParserResult.Failure (msg, structuredError, pos) -> Result.Error(msg, structuredError)

111 changes: 80 additions & 31 deletions test/Ionide.KeepAChangelog.Test/Program.fs
Original file line number Diff line number Diff line change
Expand Up @@ -20,12 +20,17 @@ let singleRelease =
"""

let singleReleaseExpected =
(SemanticVersion.Parse "1.0.0", DateTime(2017, 06, 20), Some {
{
Version = SemanticVersion.Parse "1.0.0"
Date = DateTime(2017, 06, 20)
Data = Some {
ChangelogData.Default with
Added = "- A\n"
Changed = "- B\n"
Removed = "- C\n"
})
}
IsYanked = false
}

let keepAChangelog =
normalizeNewline """# Changelog
Expand Down Expand Up @@ -59,11 +64,14 @@ let keepAChangelogExpected: Changelogs =
Unreleased = None
Releases = [
singleReleaseExpected
SemanticVersion.Parse("0.3.0"),
DateTime(2015, 12, 03),
Some {
ChangelogData.Default with
Added = "- A\n- B\n- C\n\n"
{
Version = SemanticVersion.Parse "0.3.0"
Date = DateTime(2015, 12, 03)
Data = Some {
ChangelogData.Default with
Added = "- A\n- B\n- C\n\n"
}
IsYanked = false
}
]
}
Expand Down Expand Up @@ -96,7 +104,28 @@ let sample1Release = normalizeNewline """## [0.3.1] - 8.1.2022
"""

let sample1ReleaseExpected =
SemanticVersion.Parse "0.3.1", DateTime(2022, 1, 8), Some { ChangelogData.Default with Added = "- Add XmlDocs to the generated package\n\n" }
{
Version = SemanticVersion.Parse "0.3.1"
Date = DateTime(2022, 1, 8)
Data = Some { ChangelogData.Default with Added = "- Add XmlDocs to the generated package\n\n" }
IsYanked = false
}

let yankedRelease = normalizeNewline """## [0.3.1] - 8.1.2022 [YANKED]

### Added

- Add XmlDocs to the generated package

"""

let yankedReleaseExpected =
{
Version = SemanticVersion.Parse "0.3.1"
Date = DateTime(2022, 1, 8)
Data = Some { ChangelogData.Default with Added = "- Add XmlDocs to the generated package\n\n" }
IsYanked = true
}

let sample = normalizeNewline """# Changelog
All notable changes to this project will be documented in this file.
Expand Down Expand Up @@ -133,26 +162,36 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
let sampleExpected: Changelogs = {
Unreleased = None
Releases = [
SemanticVersion.Parse "0.3.1",
DateTime(2022, 1, 8),
Some { ChangelogData.Default with Added = "* Add XmlDocs to the generated package\n" }

SemanticVersion.Parse "0.3.0",
DateTime(2021, 11, 23),
Some {
{
Version = SemanticVersion.Parse "0.3.1"
Date = DateTime(2022, 1, 8)
Data = Some { ChangelogData.Default with Added = "* Add XmlDocs to the generated package\n" }
IsYanked = false
}
{
Version = SemanticVersion.Parse "0.3.0"
Date = DateTime(2021, 11, 23)
Data = Some {
ChangelogData.Default with
Added =
normalizeNewline
"""* Expose client `CodeAction` caps as CodeActionClientCapabilities. (by @razzmatazz)
* Map CodeAction.IsPreferred & CodeAction.Disabled props. (by @razzmatazz)
""" }
SemanticVersion.Parse "0.2.0",
DateTime(2021, 11, 17),
Some { ChangelogData.Default with Added = "* Add support for `codeAction/resolve` (by @razzmatazz)\n" }

SemanticVersion.Parse "0.1.1",
DateTime(2021, 11, 15),
Some { ChangelogData.Default with Added = "* Initial implementation\n" }
IsYanked = false
}
{
Version = SemanticVersion.Parse "0.2.0"
Date = DateTime(2021, 11, 17)
Data = Some { ChangelogData.Default with Added = "* Add support for `codeAction/resolve` (by @razzmatazz)\n" }
IsYanked = false
}
{
Version = SemanticVersion.Parse "0.1.1"
Date = DateTime(2021, 11, 15)
Data = Some { ChangelogData.Default with Added = "* Initial implementation\n" }
IsYanked = false
}
]
}

Expand Down Expand Up @@ -187,6 +226,7 @@ let parsingExamples = testList "parsing examples" [
runSuccess "header and unreleased" (Parser.pHeader >>. Parser.pUnreleased) headerAndUnreleased None
runSuccess "release" Parser.pRelease singleRelease singleReleaseExpected
runSuccess "sample 1 release" Parser.pRelease sample1Release sample1ReleaseExpected
runSuccess "yanked release" Parser.pRelease yankedRelease yankedReleaseExpected
runSuccess
"header and unreleased and released"
(Parser.pHeader >>. Parser.pUnreleased
Expand Down Expand Up @@ -328,9 +368,11 @@ let FableSampleExpected :Changelogs = {
"""
}
Releases = [
SemanticVersion.Parse "4.6.0",
DateTime(2023, 11, 27),
Some {
{
Version = SemanticVersion.Parse "4.6.0"
Date = DateTime(2023, 11, 27)
IsYanked = false
Data = Some {
ChangelogData.Default with
Changed =
normalizeNewline """#### All
Expand Down Expand Up @@ -360,6 +402,7 @@ let FableSampleExpected :Changelogs = {
* PR #3608: Rewrite `time_span.py` allowing for better precision by using a number representation intead of native `timedelta`. (by @MangelMaxime)
"""
}
}
]
}

Expand All @@ -382,12 +425,18 @@ let SectionLessSample = normalizeNewlines """# Changelog
let SectionLessSampleExpected: Changelogs = {
Unreleased = None
Releases = [
SemanticVersion.Parse "4.2.1",
DateTime(2023, 9, 29),
Some ChangelogData.Default
SemanticVersion.Parse "4.2.0",
DateTime(2023, 9, 29),
Some ChangelogData.Default
{
Version = SemanticVersion.Parse "4.2.1"
Date = DateTime(2023, 9, 29)
Data = Some ChangelogData.Default
IsYanked = false
}
{
Version = SemanticVersion.Parse "4.2.0"
Date = DateTime(2023, 9, 29)
Data = Some ChangelogData.Default
IsYanked = false
}
]
}

Expand Down
Loading