Improve checker/fixer cohesion and harden workflows
This commit is contained in:
@@ -18,10 +18,13 @@ var entryRe = regexp.MustCompile(`^[-*]\s+\[([^\]]+)\]\(([^)]+)\)(.*?)\s+-\s+(.+
|
||||
// headingRe matches markdown headings: # Title, ## Title, etc.
|
||||
var headingRe = regexp.MustCompile(`^(#{1,6})\s+(.+?)(?:\s*<!--.*-->)?$`)
|
||||
|
||||
var markerMap = map[string]Marker{
|
||||
":skull:": MarkerAbandoned,
|
||||
":heavy_dollar_sign:": MarkerPaid,
|
||||
":construction:": MarkerWIP,
|
||||
var markerDefs = []struct {
|
||||
text string
|
||||
marker Marker
|
||||
}{
|
||||
{text: ":skull:", marker: MarkerAbandoned},
|
||||
{text: ":heavy_dollar_sign:", marker: MarkerPaid},
|
||||
{text: ":construction:", marker: MarkerWIP},
|
||||
}
|
||||
|
||||
// ParseEntry parses a single markdown list line into an Entry.
|
||||
@@ -36,11 +39,11 @@ func ParseEntry(line string, lineNum int) (Entry, error) {
|
||||
var markers []Marker
|
||||
|
||||
// Extract markers from both the middle section and the description
|
||||
for text, marker := range markerMap {
|
||||
if strings.Contains(middle, text) || strings.Contains(desc, text) {
|
||||
markers = append(markers, marker)
|
||||
middle = strings.ReplaceAll(middle, text, "")
|
||||
desc = strings.ReplaceAll(desc, text, "")
|
||||
for _, def := range markerDefs {
|
||||
if strings.Contains(middle, def.text) || strings.Contains(desc, def.text) {
|
||||
markers = append(markers, def.marker)
|
||||
middle = strings.ReplaceAll(middle, def.text, "")
|
||||
desc = strings.ReplaceAll(desc, def.text, "")
|
||||
}
|
||||
}
|
||||
desc = strings.TrimSpace(desc)
|
||||
|
||||
@@ -54,6 +54,20 @@ func TestParseEntryMultipleMarkers(t *testing.T) {
|
||||
}
|
||||
}
|
||||
|
||||
func TestParseEntryMarkersCanonicalOrder(t *testing.T) {
|
||||
line := `- [SomeProject](https://example.com) - :construction: A project. :skull:`
|
||||
entry, err := ParseEntry(line, 1)
|
||||
if err != nil {
|
||||
t.Fatalf("unexpected error: %v", err)
|
||||
}
|
||||
if len(entry.Markers) != 2 {
|
||||
t.Fatalf("markers count = %d, want 2", len(entry.Markers))
|
||||
}
|
||||
if entry.Markers[0] != MarkerAbandoned || entry.Markers[1] != MarkerWIP {
|
||||
t.Fatalf("marker order = %v, want [MarkerAbandoned MarkerWIP]", entry.Markers)
|
||||
}
|
||||
}
|
||||
|
||||
func TestParseDocument(t *testing.T) {
|
||||
input := `# Awesome Docker
|
||||
|
||||
|
||||
Reference in New Issue
Block a user