Source file src/cmd/go/internal/script/errors.go

     1  // Copyright 2022 The Go Authors. All rights reserved.
     2  // Use of this source code is governed by a BSD-style
     3  // license that can be found in the LICENSE file.
     4  
     5  package script
     6  
     7  import (
     8  	"errors"
     9  	"fmt"
    10  )
    11  
    12  // ErrUnexpectedSuccess indicates that a script command that was expected to
    13  // fail (as indicated by a "!" prefix) instead completed successfully.
    14  var ErrUnexpectedSuccess = errors.New("unexpected success")
    15  
    16  // A CommandError describes an error resulting from attempting to execute a
    17  // specific command.
    18  type CommandError struct {
    19  	File string
    20  	Line int
    21  	Op   string
    22  	Args []string
    23  	Err  error
    24  }
    25  
    26  func cmdError(cmd *command, err error) *CommandError {
    27  	return &CommandError{
    28  		File: cmd.file,
    29  		Line: cmd.line,
    30  		Op:   cmd.name,
    31  		Args: cmd.args,
    32  		Err:  err,
    33  	}
    34  }
    35  
    36  func (e *CommandError) Error() string {
    37  	if len(e.Args) == 0 {
    38  		return fmt.Sprintf("%s:%d: %s: %v", e.File, e.Line, e.Op, e.Err)
    39  	}
    40  	return fmt.Sprintf("%s:%d: %s %s: %v", e.File, e.Line, e.Op, quoteArgs(e.Args), e.Err)
    41  }
    42  
    43  func (e *CommandError) Unwrap() error { return e.Err }
    44  
    45  // A UsageError reports the valid arguments for a command.
    46  //
    47  // It may be returned in response to invalid arguments.
    48  type UsageError struct {
    49  	Name    string
    50  	Command Cmd
    51  }
    52  
    53  func (e *UsageError) Error() string {
    54  	usage := e.Command.Usage()
    55  	suffix := ""
    56  	if usage.Async {
    57  		suffix = " [&]"
    58  	}
    59  	return fmt.Sprintf("usage: %s %s%s", e.Name, usage.Args, suffix)
    60  }
    61  
    62  // ErrUsage may be returned by a Command to indicate that it was called with
    63  // invalid arguments; its Usage method may be called to obtain details.
    64  var ErrUsage = errors.New("invalid usage")
    65  

View as plain text