diff --git a/cmd/treerack/check.go b/cmd/treerack/check.go index a172a1c..6b9c712 100644 --- a/cmd/treerack/check.go +++ b/cmd/treerack/check.go @@ -37,6 +37,8 @@ func check(args []string) int { return code } + defer input.Close() + _, err := s.Parse(input) if err != nil { stderr(err) diff --git a/cmd/treerack/check_test.go b/cmd/treerack/check_test.go index 939389b..220dc29 100644 --- a/cmd/treerack/check_test.go +++ b/cmd/treerack/check_test.go @@ -189,6 +189,13 @@ var checkTests = []mainTest{ }, }, + { + title: "input as positional", + args: []string{ + "treerack", "check", "-syntax-string", `foo = "bar"`, "bar_test.txt", + }, + }, + { title: "input as string", args: []string{ diff --git a/cmd/treerack/checksyntax.go b/cmd/treerack/checksyntax.go index 67386e7..e5faf88 100644 --- a/cmd/treerack/checksyntax.go +++ b/cmd/treerack/checksyntax.go @@ -22,6 +22,15 @@ func checkSyntax(args []string) int { } o.syntax.positional = o.command.flagSet.Args() - _, code := o.syntax.openSyntax() - return code + s, code := o.syntax.openSyntax() + if code != 0 { + return code + } + + if err := s.Init(); err != nil { + stderr(err) + return -1 + } + + return 0 } diff --git a/cmd/treerack/checksyntax_test.go b/cmd/treerack/checksyntax_test.go index 6871972..9ff8402 100644 --- a/cmd/treerack/checksyntax_test.go +++ b/cmd/treerack/checksyntax_test.go @@ -111,6 +111,13 @@ var checkSyntaxTests = []mainTest{ }, }, + { + title: "syntax as positional", + args: []string{ + "treerack", "check-syntax", "foo_test.treerack", + }, + }, + { title: "syntax as string", args: []string{ @@ -125,6 +132,17 @@ var checkSyntaxTests = []mainTest{ }, stdin: "invalid", }, + + { + title: "invalid syntax semantics", + args: []string{ + "treerack", "check-syntax", "-syntax-string", `foo:alias = "bar"`, + }, + exit: -1, + stderr: []string{ + "root", + }, + }, } func TestCheckSyntax(t *testing.T) { diff --git a/cmd/treerack/generate_test.go b/cmd/treerack/generate_test.go index ea347fb..c1c21eb 100644 --- a/cmd/treerack/generate_test.go +++ b/cmd/treerack/generate_test.go @@ -37,6 +37,17 @@ var generateTests = []mainTest{ }, }, + { + title: "syntax as positional", + args: []string{ + "treerack", "generate", "-export", "-package-name", "foo", "foo_test.treerack", + }, + stdout: []string{ + "package foo", + "func Parse", + }, + }, + { title: "syntax as string", args: []string{ diff --git a/cmd/treerack/open.go b/cmd/treerack/open.go index 062f6e9..91ad9db 100644 --- a/cmd/treerack/open.go +++ b/cmd/treerack/open.go @@ -113,6 +113,8 @@ func (o *fileOptions) openSyntax() (*treerack.Syntax, int) { return nil, code } + defer input.Close() + s := &treerack.Syntax{} if err := s.ReadSyntax(input); err != nil { stderr(err) diff --git a/cmd/treerack/parse.go b/cmd/treerack/parse.go index 9ee742c..3e3977a 100644 --- a/cmd/treerack/parse.go +++ b/cmd/treerack/parse.go @@ -74,6 +74,8 @@ func parse(args []string) int { return code } + defer input.Close() + n, err := s.Parse(input) if err != nil { stderr(err) diff --git a/cmd/treerack/parse_test.go b/cmd/treerack/parse_test.go index c0bd0ec..14b1a7d 100644 --- a/cmd/treerack/parse_test.go +++ b/cmd/treerack/parse_test.go @@ -46,6 +46,16 @@ var parseTests = []mainTest{ }, }, + { + title: "input as positional", + args: []string{ + "treerack", "parse", "-syntax-string", `foo = "bar"`, "bar_test.txt", + }, + stdout: []string{ + `"name":"foo"`, + }, + }, + { title: "input as string", args: []string{