diff options
| author | Paul Buetow <paul@buetow.org> | 2026-05-13 09:28:45 +0300 |
|---|---|---|
| committer | Paul Buetow <paul@buetow.org> | 2026-05-13 09:28:45 +0300 |
| commit | b086d3680e845a94c6662811c7f40e9592c3dec6 (patch) | |
| tree | 3e0adfeff115dc516770038330b303561cf0bd64 /internal | |
| parent | d41c192150391bb5da9b38b0ea84dc0f1ea65e48 (diff) | |
unify filter summary rendering by reusing globalfilter helpers
Export AppendStringSummary and AppendNumericSummary from globalfilter so
filterstack.go can delegate to the canonical token-formatting logic instead
of reimplementing fmt.Sprintf("%s~%s") and fmt.Sprintf("%sOP%s") in
appendStringFilterChange / appendNumericFilterChange. Drop the now-unused
fmt, strconv, and time imports from filterstack.go.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Diffstat (limited to 'internal')
| -rw-r--r-- | internal/globalfilter/filter.go | 31 | ||||
| -rw-r--r-- | internal/tui/filterstack.go | 17 |
2 files changed, 27 insertions, 21 deletions
diff --git a/internal/globalfilter/filter.go b/internal/globalfilter/filter.go index afc2698..ab3b0fb 100644 --- a/internal/globalfilter/filter.go +++ b/internal/globalfilter/filter.go @@ -176,21 +176,24 @@ func (f Filter) IsActive() bool { return false } +// Summary returns a compact human-readable description of the active filter +// predicates, e.g. "syscall~read pid=1234". Returns "all" when no predicates +// are set. func (f Filter) Summary() string { parts := make([]string, 0, 10) if f.ErrorsOnly { parts = append(parts, "errors") } - parts = appendStringSummary(parts, "syscall", f.Syscall) - parts = appendStringSummary(parts, "comm", f.Comm) - parts = appendStringSummary(parts, "file", f.File) - parts = appendNumericSummary(parts, "pid", f.PID, false) - parts = appendNumericSummary(parts, "tid", f.TID, false) - parts = appendNumericSummary(parts, "fd", f.FD, false) - parts = appendNumericSummary(parts, "latency", f.LatencyNs, true) - parts = appendNumericSummary(parts, "gap", f.GapNs, true) - parts = appendNumericSummary(parts, "bytes", f.Bytes, false) - parts = appendNumericSummary(parts, "ret", f.RetVal, false) + parts = AppendStringSummary(parts, "syscall", f.Syscall) + parts = AppendStringSummary(parts, "comm", f.Comm) + parts = AppendStringSummary(parts, "file", f.File) + parts = AppendNumericSummary(parts, "pid", f.PID, false) + parts = AppendNumericSummary(parts, "tid", f.TID, false) + parts = AppendNumericSummary(parts, "fd", f.FD, false) + parts = AppendNumericSummary(parts, "latency", f.LatencyNs, true) + parts = AppendNumericSummary(parts, "gap", f.GapNs, true) + parts = AppendNumericSummary(parts, "bytes", f.Bytes, false) + parts = AppendNumericSummary(parts, "ret", f.RetVal, false) if len(parts) == 0 { return "all" } @@ -218,7 +221,9 @@ func ParseDurationNs(input string) (int64, error) { return d.Nanoseconds(), nil } -func appendStringSummary(parts []string, name string, sf *StringFilter) []string { +// AppendStringSummary appends a "name~pattern" token to parts when the filter +// is non-nil and non-empty, then returns the updated slice. +func AppendStringSummary(parts []string, name string, sf *StringFilter) []string { if sf == nil { return parts } @@ -229,7 +234,9 @@ func appendStringSummary(parts []string, name string, sf *StringFilter) []string return append(parts, fmt.Sprintf("%s~%s", name, pattern)) } -func appendNumericSummary(parts []string, name string, nf *NumericFilter, duration bool) []string { +// AppendNumericSummary appends a "nameOPvalue" token to parts when the filter +// is non-nil, formatting the value as a duration string when duration is true. +func AppendNumericSummary(parts []string, name string, nf *NumericFilter, duration bool) []string { if nf == nil { return parts } diff --git a/internal/tui/filterstack.go b/internal/tui/filterstack.go index 3aadea3..dbd26a0 100644 --- a/internal/tui/filterstack.go +++ b/internal/tui/filterstack.go @@ -1,10 +1,7 @@ package tui import ( - "fmt" - "strconv" "strings" - "time" "ior/internal/globalfilter" ) @@ -132,6 +129,9 @@ func globalFilterActionLabel(prev, next globalfilter.Filter, action string) stri return strings.Join(parts, " ") } +// appendStringFilterChange appends a change token to parts for a string +// filter field. It emits "clear name" when the filter is removed, or delegates +// to globalfilter.AppendStringSummary for the canonical "name~pattern" format. func appendStringFilterChange(parts []string, name string, prev, next *globalfilter.StringFilter) []string { if sameStringFilter(prev, next) { return parts @@ -139,9 +139,12 @@ func appendStringFilterChange(parts []string, name string, prev, next *globalfil if next == nil || strings.TrimSpace(next.Pattern) == "" { return append(parts, "clear "+name) } - return append(parts, fmt.Sprintf("%s~%s", name, strings.TrimSpace(next.Pattern))) + return globalfilter.AppendStringSummary(parts, name, next) } +// appendNumericFilterChange appends a change token to parts for a numeric +// filter field. It emits "clear name" when the filter is removed, or delegates +// to globalfilter.AppendNumericSummary for the canonical "nameOPvalue" format. func appendNumericFilterChange(parts []string, name string, prev, next *globalfilter.NumericFilter, duration bool) []string { if sameNumericFilter(prev, next) { return parts @@ -149,11 +152,7 @@ func appendNumericFilterChange(parts []string, name string, prev, next *globalfi if next == nil { return append(parts, "clear "+name) } - value := strconv.FormatInt(next.Value, 10) - if duration { - value = time.Duration(next.Value).String() - } - return append(parts, fmt.Sprintf("%s%s%s", name, globalfilter.CompareOpSymbol(next.Op), value)) + return globalfilter.AppendNumericSummary(parts, name, next, duration) } func sameStringFilter(a, b *globalfilter.StringFilter) bool { |
