From 387c5f60f97141d638327f84ee426fb44f6c554e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bj=C3=B8rn=20Erik=20Pedersen?= Date: Mon, 17 Jul 2023 19:15:48 +0200 Subject: Improve error messages for PostCSS etc. Fixes #9730 --- common/herrors/errors.go | 25 ++++++++++++++++++++++++- common/herrors/errors_test.go | 10 ++++++++++ 2 files changed, 34 insertions(+), 1 deletion(-) (limited to 'common') diff --git a/common/herrors/errors.go b/common/herrors/errors.go index 4d8642362..598c50b32 100644 --- a/common/herrors/errors.go +++ b/common/herrors/errors.go @@ -59,11 +59,34 @@ func GetGID() uint64 { return n } +// IsFeatureNotAvailableError returns true if the given error is or contains a FeatureNotAvailableError. +func IsFeatureNotAvailableError(err error) bool { + return errors.Is(err, &FeatureNotAvailableError{}) +} + // ErrFeatureNotAvailable denotes that a feature is unavailable. // // We will, at least to begin with, make some Hugo features (SCSS with libsass) optional, // and this error is used to signal those situations. -var ErrFeatureNotAvailable = errors.New("this feature is not available in your current Hugo version, see https://goo.gl/YMrWcn for more information") +var ErrFeatureNotAvailable = &FeatureNotAvailableError{Cause: errors.New("this feature is not available in your current Hugo version, see https://goo.gl/YMrWcn for more information")} + +// FeatureNotAvailableError is an error type used to signal that a feature is not available. +type FeatureNotAvailableError struct { + Cause error +} + +func (e *FeatureNotAvailableError) Unwrap() error { + return e.Cause +} + +func (e *FeatureNotAvailableError) Error() string { + return e.Cause.Error() +} + +func (e *FeatureNotAvailableError) Is(target error) bool { + _, ok := target.(*FeatureNotAvailableError) + return ok +} // Must panics if err != nil. func Must(err error) { diff --git a/common/herrors/errors_test.go b/common/herrors/errors_test.go index 1e0730028..223782e23 100644 --- a/common/herrors/errors_test.go +++ b/common/herrors/errors_test.go @@ -14,6 +14,7 @@ package herrors import ( + "errors" "fmt" "testing" @@ -34,3 +35,12 @@ func TestIsNotExist(t *testing.T) { // os.IsNotExist returns false for wrapped errors. c.Assert(IsNotExist(fmt.Errorf("foo: %w", afero.ErrFileNotFound)), qt.Equals, true) } + +func TestIsFeatureNotAvailableError(t *testing.T) { + c := qt.New(t) + + c.Assert(IsFeatureNotAvailableError(ErrFeatureNotAvailable), qt.Equals, true) + c.Assert(IsFeatureNotAvailableError(&FeatureNotAvailableError{}), qt.Equals, true) + c.Assert(IsFeatureNotAvailableError(errors.New("asdf")), qt.Equals, false) + +} -- cgit v1.2.3