Add Makefile targets for go vet and go fix, use named struct fields in tests, apply go fix improvements

This commit is contained in:
Dan Jones 2026-03-01 07:59:31 -06:00
commit 30a5786adf
7 changed files with 34 additions and 28 deletions

View file

@ -24,6 +24,13 @@ clean: ## Removes temporary and build files
fmt: $(SOURCES) ## Runs go fmt
go fmt ./...
.PHONY: fix ## Run go fix
go fix ./...
.PHONY: vet ## Runs go vet
vet: fmt fix
go vet ./...
.PHONY: test
test: ## Test application and generate coverage report
$(MAKE) clean

View file

@ -49,8 +49,8 @@ func appendTestSingle(t *testing.T) {
Title: "Jimmy",
Date: when,
Fields: []models.Meta{
{"foo", 42},
{"bar", true},
{Key: "foo", Value: 42},
{Key: "bar", Value: true},
},
}
l := models.Log{
@ -93,7 +93,7 @@ func appendTestAddNewLine(t *testing.T) {
when := time.Now().Local()
whens := when.Format(models.DateFormat)
e := []models.Entry{
{Title: "one", Date: when, Fields: models.Metas{{"id", "jimmy"}}},
{Title: "one", Date: when, Fields: models.Metas{{Key: "id", Value: "jimmy"}}},
}
l := models.Log{
Name: "test",
@ -112,7 +112,7 @@ func appendTestDontAddNewLine(t *testing.T) {
when := time.Now().Local()
whens := when.Format(models.DateFormat)
e := []models.Entry{
{Title: "one", Date: when, Fields: models.Metas{{"id", "jimmy"}}},
{Title: "one", Date: when, Fields: models.Metas{{Key: "id", Value: "jimmy"}}},
}
l := models.Log{
Name: "test",

View file

@ -17,7 +17,7 @@ func TestJsonName(t *testing.T) {
func TestJsonMeta(t *testing.T) {
f, _ := New("json")
m := models.Meta{"foo", 42}
m := models.Meta{Key: "foo", Value: 42}
exp := `{"foo":42}`
o, err := f.Meta(m)
be.Err(t, err, nil)
@ -27,7 +27,7 @@ func TestJsonMeta(t *testing.T) {
func TestJsonEntry(t *testing.T) {
when := time.Now()
f, _ := New("json")
m := models.Meta{"foo", 42}
m := models.Meta{Key: "foo", Value: 42}
e := models.Entry{
Title: "Homer",
Date: when,
@ -42,13 +42,13 @@ func TestJsonEntry(t *testing.T) {
func TestJsonLog(t *testing.T) {
when := time.Now()
f, _ := New("json")
m := models.Meta{"foo", 42}
m := models.Meta{Key: "foo", Value: 42}
e := models.Entry{
Title: "Homer",
Date: when,
Fields: []models.Meta{m},
}
l := models.Log{"stuff", []models.Entry{e}}
l := models.Log{Name: "stuff", Entries: []models.Entry{e}}
exp := fmt.Sprintf(`{"%s":[{"title":"%s","date":"%s","foo":42}]}`, l.Name, e.Title, when.Format(time.RFC3339))
o, err := f.Log(l)
be.Err(t, err, nil)
@ -65,7 +65,7 @@ func TestJsonNoLogs(t *testing.T) {
func TestJsonErr(t *testing.T) {
f, _ := New("json")
o, err := f.Meta(models.Meta{"foo", make(chan bool)})
o, err := f.Meta(models.Meta{Key: "foo", Value: make(chan bool)})
var exp []byte
be.Err(t, err)
be.Equal(t, o, exp)
@ -73,7 +73,7 @@ func TestJsonErr(t *testing.T) {
func TestJsonPretty(t *testing.T) {
f := Json{true}
o, err := f.Meta(models.Meta{"foo", 42})
o, err := f.Meta(models.Meta{Key: "foo", Value: 42})
exp := `{
"foo": 42
}`

View file

@ -18,28 +18,28 @@ func TestNullName(t *testing.T) {
func TestNullMeta(t *testing.T) {
f, _ := New("zero")
o, err := f.Meta(models.Meta{"foo", 42})
o, err := f.Meta(models.Meta{Key: "foo", Value: 42})
be.Err(t, err, nil)
be.Equal(t, o, empty)
}
func TestNullEntry(t *testing.T) {
f, _ := New("zero")
o, err := f.Entry(models.Entry{"title", time.Now(), models.Metas{}})
o, err := f.Entry(models.Entry{Title: "title", Date: time.Now()})
be.Err(t, err, nil)
be.Equal(t, o, empty)
}
func TestNullLog(t *testing.T) {
f, _ := New("zero")
o, err := f.Log(models.Log{"jim", []models.Entry{{"title", time.Now(), models.Metas{}}}})
o, err := f.Log(models.Log{Name: "jim", Entries: []models.Entry{{Title: "title", Date: time.Now()}}})
be.Err(t, err, nil)
be.Equal(t, o, empty)
}
func TestNullLogs(t *testing.T) {
f, _ := New("zero")
o, err := f.Logs([]models.Log{{"jim", []models.Entry{{"title", time.Now(), models.Metas{}}}}})
o, err := f.Logs([]models.Log{{Name: "jim", Entries: []models.Entry{{Title: "title", Date: time.Now()}}}})
be.Err(t, err, nil)
be.Equal(t, o, empty)
}

View file

@ -14,19 +14,19 @@ import (
func TestPlainLogs(t *testing.T) {
m := []models.Meta{
{"foo", "bar"},
{"baz", 42},
{Key: "foo", Value: "bar"},
{Key: "baz", Value: 42},
}
e := []models.Entry{
{Title: "one", Date: time.Now(), Fields: m},
{Title: "small", Date: time.Now()},
}
l := models.Log{"stuff", e}
l := models.Log{Name: "stuff", Entries: e}
e2 := models.Entry{
Title: "three",
Date: time.Now(),
}
l2 := models.Log{"more-stuff", []models.Entry{e2}}
l2 := models.Log{Name: "more-stuff", Entries: []models.Entry{e2}}
logs := []models.Log{l, l2}
f, err := New("plain")
@ -115,14 +115,14 @@ func TestPlainLogNoEntries(t *testing.T) {
func TestPlainMetaEmpty(t *testing.T) {
f, _ := New("plain")
out, err := f.Meta(models.Meta{"foo", ""})
out, err := f.Meta(models.Meta{Key: "foo", Value: ""})
be.Err(t, err, nil)
be.Equal(t, len(out), 0)
}
func TestPlainMetaError(t *testing.T) {
f, _ := New("plain")
out, err := f.Meta(models.Meta{"foo", make(chan bool)})
out, err := f.Meta(models.Meta{Key: "foo", Value: make(chan bool)})
be.Err(t, err)
be.Equal(t, len(out), 0)
}

View file

@ -6,6 +6,7 @@ import (
"encoding/json"
"errors"
"fmt"
"maps"
"os"
"regexp"
"strings"
@ -34,7 +35,7 @@ func (e Entry) getFieldMarshalChan() chan metaRes {
ch := make(chan metaRes, size)
var wg sync.WaitGroup
for i := 0; i < size; i++ {
for i := range size {
wg.Add(1)
go func(m Meta) {
defer wg.Done()
@ -139,8 +140,8 @@ func scanEntry(data []byte, atEOF bool) (advance int, token []byte, err error) {
if atEOF {
end := []byte{32, 64, 101, 110, 100}
token = data
if i := bytes.Index(data, end); i >= 0 {
token = data[0:i]
if before, _, ok := bytes.Cut(data, end); ok {
token = before
}
return len(data), token, nil
}
@ -198,9 +199,7 @@ func (e Entry) MarshalJSON() ([]byte, error) {
out := map[string]any{}
out["title"] = e.Title
out["date"] = e.Date.Format(time.RFC3339)
for k, v := range e.Fields.Map() {
out[k] = v
}
maps.Copy(out, e.Fields.Map())
return json.Marshal(out)
}

View file

@ -28,8 +28,8 @@ func WriteValue(buff *bytes.Buffer, val any) (n int, err error) {
return buff.Write(o)
}
case string:
if strings.HasPrefix(v, "!") {
return buff.WriteString(strings.TrimPrefix(v, "!"))
if after, ok := strings.CutPrefix(v, "!"); ok {
return buff.WriteString(after)
}
return buff.WriteString(v)
case int: