2023-10-25 11:56:42 +00:00
|
|
|
package diag
|
|
|
|
|
|
|
|
import (
|
|
|
|
"fmt"
|
|
|
|
|
2023-12-22 13:20:45 +00:00
|
|
|
"github.com/databricks/cli/libs/dyn"
|
2023-10-25 11:56:42 +00:00
|
|
|
)
|
|
|
|
|
|
|
|
type Diagnostic struct {
|
|
|
|
Severity Severity
|
|
|
|
|
|
|
|
// Summary is a short description of the diagnostic.
|
|
|
|
// This is expected to be a single line and always present.
|
|
|
|
Summary string
|
|
|
|
|
|
|
|
// Detail is a longer description of the diagnostic.
|
|
|
|
// This may be multiple lines and may be nil.
|
|
|
|
Detail string
|
|
|
|
|
|
|
|
// Location is a source code location associated with the diagnostic message.
|
|
|
|
// It may be zero if there is no associated location.
|
2023-12-22 13:20:45 +00:00
|
|
|
Location dyn.Location
|
2023-10-25 11:56:42 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
// Errorf creates a new error diagnostic.
|
|
|
|
func Errorf(format string, args ...any) Diagnostics {
|
|
|
|
return []Diagnostic{
|
|
|
|
{
|
|
|
|
Severity: Error,
|
|
|
|
Summary: fmt.Sprintf(format, args...),
|
|
|
|
},
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
// Warningf creates a new warning diagnostic.
|
|
|
|
func Warningf(format string, args ...any) Diagnostics {
|
|
|
|
return []Diagnostic{
|
|
|
|
{
|
|
|
|
Severity: Warning,
|
|
|
|
Summary: fmt.Sprintf(format, args...),
|
|
|
|
},
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
// Infof creates a new info diagnostic.
|
|
|
|
func Infof(format string, args ...any) Diagnostics {
|
|
|
|
return []Diagnostic{
|
|
|
|
{
|
|
|
|
Severity: Info,
|
|
|
|
Summary: fmt.Sprintf(format, args...),
|
|
|
|
},
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
// Diagsnostics holds zero or more instances of [Diagnostic].
|
|
|
|
type Diagnostics []Diagnostic
|
|
|
|
|
|
|
|
// Append adds a new diagnostic to the end of the list.
|
|
|
|
func (ds Diagnostics) Append(d Diagnostic) Diagnostics {
|
|
|
|
return append(ds, d)
|
|
|
|
}
|
|
|
|
|
|
|
|
// Extend adds all diagnostics from another list to the end of the list.
|
|
|
|
func (ds Diagnostics) Extend(other Diagnostics) Diagnostics {
|
|
|
|
return append(ds, other...)
|
|
|
|
}
|
|
|
|
|
|
|
|
// HasError returns true if any of the diagnostics are errors.
|
|
|
|
func (ds Diagnostics) HasError() bool {
|
|
|
|
for _, d := range ds {
|
|
|
|
if d.Severity == Error {
|
|
|
|
return true
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return false
|
|
|
|
}
|