diff options
| author | Marc Vertes <mvertes@free.fr> | 2025-11-28 16:34:28 +0100 |
|---|---|---|
| committer | Marc Vertes <mvertes@free.fr> | 2025-11-28 16:34:28 +0100 |
| commit | fbc73922e9853d7e344e388f3fdfedb8fa323682 (patch) | |
| tree | 17cab9c49babad09906a34f3c16ebb0558c4e948 /main.go | |
| parent | 22b020225ae77ca1cf9f9984817df9b7fd1aaa12 (diff) | |
doc: improve comments, pass lint
Also improve the setup of golangci-lint.
Diffstat (limited to 'main.go')
| -rw-r--r-- | main.go | 43 |
1 files changed, 11 insertions, 32 deletions
@@ -1,12 +1,11 @@ +// The parscan command interprets programs. package main import ( "flag" "fmt" - "io" "log" "os" - "strings" "github.com/mvertes/parscan/interpreter" "github.com/mvertes/parscan/lang/golang" @@ -19,7 +18,7 @@ func main() { } } -func run(arg []string) (err error) { +func run(arg []string) error { var str string rflag := flag.NewFlagSet("run", flag.ContinueOnError) rflag.Usage = func() { @@ -28,46 +27,26 @@ func run(arg []string) (err error) { rflag.PrintDefaults() } rflag.StringVar(&str, "e", "", "string to eval") - if err = rflag.Parse(arg); err != nil { + if err := rflag.Parse(arg); err != nil { return err } args := rflag.Args() interp := interpreter.NewInterpreter(golang.GoSpec) - - var in io.Reader if str != "" { - in = strings.NewReader(str) - } else { - in = os.Stdin - } - if len(args) > 0 { - if in, err = os.Open(arg[0]); err != nil { - return err - } - if i2, ok := in.(io.ReadCloser); ok { - defer i2.Close() - } + return evalStr(interp, str) } - - if isatty(in) { - return interp.Repl(in) + if len(args) == 0 { + return interp.Repl(os.Stdin) } - - buf, err := io.ReadAll(in) + buf, err := os.ReadFile(arg[0]) if err != nil { return err } - _, err = interp.Eval(string(buf)) - return err + return evalStr(interp, string(buf)) } -// isatty returns true if the input stream is a tty (i.e. a character device). -func isatty(in io.Reader) bool { - s, ok := in.(interface{ Stat() (os.FileInfo, error) }) - if !ok { - return false - } - stat, err := s.Stat() - return err == nil && stat.Mode()&os.ModeCharDevice != 0 +func evalStr(i *interpreter.Interp, s string) error { + _, err := i.Eval(s) + return err } |
