diff --git a/CHANGELOG.md b/CHANGELOG.md index bf66657..bf077fa 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,11 @@ # Changelog +## [Unreleased] + +### Changed + +* [Allow use of asterisks for list items, and support nested lists](https://github.com/ionide/KeepAChangelog/pull/42) + ## [0.3.2] - 2026.01.26 ### Fixed diff --git a/src/Library.fs b/src/Library.fs index a48d7c6..d9bba0f 100644 --- a/src/Library.fs +++ b/src/Library.fs @@ -119,7 +119,14 @@ type ParseChangeLogs() = member this.ParseChangelog(fileInfo: FileInfo) : Result = let changelogContent = File.ReadAllText(fileInfo.FullName) - let parserResult = ChangelogParser().Parse(changelogContent) + + let changeLogParserSettings = + ChangelogParserSettings( + ChangelogListHandling = (ChangelogListHandling.AllowAsterisk ||| ChangelogListHandling.AllowNestedLists) + ) + + let parserResult = + ChangelogParser().Parse(changelogContent, changeLogParserSettings) if parserResult.IsSuccess then Ok parserResult.Value diff --git a/tests/UnitTests.fs b/tests/UnitTests.fs index 43a096e..33ccf6e 100644 --- a/tests/UnitTests.fs +++ b/tests/UnitTests.fs @@ -112,6 +112,34 @@ type UnitTests() = |> Seq.cast |> _.Should().Contain("Date", "Should have date metadata")) + [] + member this.``task correctly parses changelogs containing nested lists``() = + let myTask = + ParseChangeLogs(ChangelogFile = Workspace.changelogs.``CHANGELOG_lists.md``) + + myTask.BuildEngine <- this.context.BuildEngine.Object + + let success = myTask.Execute() + %success.Should().BeTrue "Should have successfully parsed the changelog data" + %myTask.AllReleasedChangelogs.Length.Should().Be(1, "Should have 1 version") + + %myTask.CurrentReleaseChangelog.ItemSpec + .Should() + .Be("0.1.0", "Should have the most recent version") + + %myTask.CurrentReleaseChangelog + .GetMetadata("Date") + .Should() + .Be("2026-01-26", "Should have the most recent version's date") + + %(myTask.CurrentReleaseChangelog.MetadataNames + |> Seq.cast + |> _.Should().Contain("Changed", "Should have changed metadata")) + + %(myTask.CurrentReleaseChangelog.MetadataNames + |> Seq.cast + |> _.Should().Contain("Added", "Should have added metadata")) + [] member this.``task produces expected markdown``() = let myTask = ParseChangeLogs(ChangelogFile = Workspace.changelogs.``CHANGELOG.md``) diff --git a/tests/changelogs/CHANGELOG_lists.md b/tests/changelogs/CHANGELOG_lists.md new file mode 100644 index 0000000..f8356aa --- /dev/null +++ b/tests/changelogs/CHANGELOG_lists.md @@ -0,0 +1,21 @@ +# Changelog + +## [Unreleased] + +### Removed + +* A test removal line +* And another removal + +## [0.1.0] - 2026-01-26 + +### Added + +* Created the package + +### Changed + +* Changed something in the package +* Updated the target frameworks + * added .NET 10.0 + * removed .NET 5.0