Skip to content

Commit dc4e165

Browse files
committed
✨ Add option to quickly get items for the latest release
1 parent df5a255 commit dc4e165

File tree

1 file changed

+15
-1
lines changed

1 file changed

+15
-1
lines changed

Sources/Changelog.swift

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,12 +18,15 @@ struct Changelog: ParsableCommand {
1818

1919
enum Release: ExpressibleByArgument, CustomStringConvertible {
2020
case unreleased
21+
case latest
2122
case release(String)
2223

2324
var description: String {
2425
switch self {
2526
case .unreleased:
2627
return defaultValueDescription
28+
case .latest:
29+
return "latest"
2730
case let .release(value):
2831
return value
2932
}
@@ -37,10 +40,21 @@ struct Changelog: ParsableCommand {
3740
switch argument.lowercased() {
3841
case "unreleased":
3942
self = .unreleased
43+
case "latest":
44+
self = .latest
4045
default:
4146
self = .release(argument)
4247
}
4348
}
49+
50+
func filterForFirstMatching(_ heading: Heading) -> Bool {
51+
switch self {
52+
case .latest:
53+
heading.plainText.lowercased() != Release.unreleased.description
54+
case .unreleased, .release:
55+
heading.plainText.lowercased() == description
56+
}
57+
}
4458
}
4559

4660
@Argument(help: "Path to Changelog.md file")
@@ -60,7 +74,7 @@ struct Changelog: ParsableCommand {
6074
let heading = document.children
6175
.compactMap { $0 as? Heading }
6276
.filter { $0.level == 2 }
63-
.first { $0.plainText.lowercased() == release.description }
77+
.first { release.filterForFirstMatching($0) }
6478

6579
guard let heading else {
6680
throw ValidationError("Changelog does not contain '\(release.description.localizedCapitalized)' section")

0 commit comments

Comments
 (0)