Expose invocation reporting mode
This commit is contained in:
40
reporter.go
40
reporter.go
@@ -10,13 +10,19 @@ import (
|
||||
commandmeta "go.maximumdirect.net/commandkit/internal/commandmeta"
|
||||
)
|
||||
|
||||
type reportingMode uint8
|
||||
// ReportingMode identifies the invocation's selected reporting visibility.
|
||||
// Its zero value is ReportingModeOrdinary.
|
||||
type ReportingMode uint8
|
||||
|
||||
const (
|
||||
modeOrdinary reportingMode = iota
|
||||
modeQuiet
|
||||
modeVerbose
|
||||
modeDebug
|
||||
// ReportingModeOrdinary uses ordinary reporting visibility.
|
||||
ReportingModeOrdinary ReportingMode = iota
|
||||
// ReportingModeQuiet suppresses ordinary output and messages.
|
||||
ReportingModeQuiet
|
||||
// ReportingModeVerbose enables verbose reporting.
|
||||
ReportingModeVerbose
|
||||
// ReportingModeDebug enables debug reporting.
|
||||
ReportingModeDebug
|
||||
)
|
||||
|
||||
type reportingDestination uint8
|
||||
@@ -41,7 +47,7 @@ type reportingState struct {
|
||||
diagnostics destinationState
|
||||
closed bool
|
||||
deferredClosed bool
|
||||
mode reportingMode
|
||||
mode ReportingMode
|
||||
format Format
|
||||
progress bool
|
||||
progressSet bool
|
||||
@@ -109,7 +115,7 @@ func newReporter(streams Streams) *Reporter {
|
||||
return &Reporter{state: &reportingState{
|
||||
output: destinationState{writer: streams.Out},
|
||||
diagnostics: destinationState{writer: streams.Err},
|
||||
mode: modeOrdinary,
|
||||
mode: ReportingModeOrdinary,
|
||||
}}
|
||||
}
|
||||
|
||||
@@ -125,13 +131,13 @@ func (r *Reporter) applySelection(selection commandmeta.ReportingSelection) {
|
||||
}
|
||||
switch selection.Mode {
|
||||
case commandmeta.ReportingModeQuiet:
|
||||
state.mode = modeQuiet
|
||||
state.mode = ReportingModeQuiet
|
||||
case commandmeta.ReportingModeVerbose:
|
||||
state.mode = modeVerbose
|
||||
state.mode = ReportingModeVerbose
|
||||
case commandmeta.ReportingModeDebug:
|
||||
state.mode = modeDebug
|
||||
state.mode = ReportingModeDebug
|
||||
default:
|
||||
state.mode = modeOrdinary
|
||||
state.mode = ReportingModeOrdinary
|
||||
}
|
||||
state.progress = selection.Progress
|
||||
state.progressSet = selection.ProgressSet
|
||||
@@ -189,7 +195,7 @@ func (r *Reporter) RenderOutput(write func(io.Writer) error) error {
|
||||
destination.submitted = true
|
||||
writer := &coordinatedWriter{state: state, destination: destinationOutput}
|
||||
renderErr := write(writer)
|
||||
if state.mode == modeQuiet {
|
||||
if state.mode == ReportingModeQuiet {
|
||||
destination.suppressed = true
|
||||
} else if renderErr == nil && writer.writeError == nil {
|
||||
destination.delivered = true
|
||||
@@ -489,17 +495,17 @@ func renderDetailsLocked(state *reportingState, details []Detail, visible bool)
|
||||
func (state *reportingState) visible(category messageCategory) bool {
|
||||
switch category {
|
||||
case categoryInfo, categoryWarning:
|
||||
return state.mode == modeVerbose || state.mode == modeDebug
|
||||
return state.mode == ReportingModeVerbose || state.mode == ReportingModeDebug
|
||||
case categoryDebug:
|
||||
return state.mode == modeDebug
|
||||
return state.mode == ReportingModeDebug
|
||||
case categoryProgress:
|
||||
if state.mode == modeQuiet {
|
||||
if state.mode == ReportingModeQuiet {
|
||||
return false
|
||||
}
|
||||
if state.progressSet {
|
||||
return state.progress
|
||||
}
|
||||
return state.mode == modeDebug
|
||||
return state.mode == ReportingModeDebug
|
||||
default:
|
||||
return false
|
||||
}
|
||||
@@ -617,7 +623,7 @@ func (state *reportingState) destination(destination reportingDestination) *dest
|
||||
|
||||
func (state *reportingState) suppressed(destination reportingDestination) bool {
|
||||
if destination == destinationOutput {
|
||||
return state.mode == modeQuiet
|
||||
return state.mode == ReportingModeQuiet
|
||||
}
|
||||
return false
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user