todo editor

This commit is contained in:
2026-11-04 16:57:28 +01:00
parent 21694908a3
commit e6ca4aef8f
8 changed files with 763 additions and 46 deletions
+20 -5
View File
@@ -114,16 +114,18 @@ func Read(dir, id string) (Todo, error) {
return Parse(id, data)
}
// List reads todos in filename order. Malformed files are reported, not overwritten.
func List(dir string) ([]Todo, error) {
// Scan reads valid todos in filename order and reports malformed files separately.
// A missing directory is empty; other directory errors are fatal.
func Scan(dir string) ([]Todo, []error, error) {
entries, err := os.ReadDir(dir)
if errors.Is(err, os.ErrNotExist) {
return []Todo{}, nil
return []Todo{}, nil, nil
}
if err != nil {
return nil, fmt.Errorf("read todo directory: %w", err)
return nil, nil, fmt.Errorf("read todo directory: %w", err)
}
result := make([]Todo, 0)
var warnings []error
for _, entry := range entries {
if entry.IsDir() || !strings.HasSuffix(entry.Name(), ".md") {
continue
@@ -134,10 +136,23 @@ func List(dir string) ([]Todo, error) {
}
todo, err := Read(dir, id)
if err != nil {
return nil, err
warnings = append(warnings, err)
continue
}
result = append(result, todo)
}
return result, warnings, nil
}
// List reports malformed files as errors rather than silently omitting them.
func List(dir string) ([]Todo, error) {
result, warnings, err := Scan(dir)
if err != nil {
return nil, err
}
if len(warnings) > 0 {
return nil, errors.Join(warnings...)
}
return result, nil
}