github.com/bir3/gocompiler@v0.9.2202/src/cmd/gocmd/internal/script/errors.go (about) 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")