mirror of
https://github.com/golang/go
synced 2024-11-19 12:44:51 -07:00
ebnflint: better handling of stdin
- don't rely on /dev/stdin as the name for standard input - employ EBNF extraction if the source contains tags "cat source.html | ebnflint" works now R=r CC=golang-dev https://golang.org/cl/4641075
This commit is contained in:
parent
d94e350f48
commit
f70e8ed0f3
@ -35,6 +35,12 @@ var (
|
||||
)
|
||||
|
||||
|
||||
func report(err os.Error) {
|
||||
scanner.PrintError(os.Stderr, err)
|
||||
os.Exit(1)
|
||||
}
|
||||
|
||||
|
||||
func extractEBNF(src []byte) []byte {
|
||||
var buf bytes.Buffer
|
||||
|
||||
@ -75,34 +81,35 @@ func extractEBNF(src []byte) []byte {
|
||||
func main() {
|
||||
flag.Parse()
|
||||
|
||||
var filename string
|
||||
var (
|
||||
filename string
|
||||
src []byte
|
||||
err os.Error
|
||||
)
|
||||
switch flag.NArg() {
|
||||
case 0:
|
||||
filename = "/dev/stdin"
|
||||
filename = "<stdin>"
|
||||
src, err = ioutil.ReadAll(os.Stdin)
|
||||
case 1:
|
||||
filename = flag.Arg(0)
|
||||
src, err = ioutil.ReadFile(filename)
|
||||
default:
|
||||
usage()
|
||||
}
|
||||
|
||||
src, err := ioutil.ReadFile(filename)
|
||||
if err != nil {
|
||||
scanner.PrintError(os.Stderr, err)
|
||||
os.Exit(1)
|
||||
report(err)
|
||||
}
|
||||
|
||||
if filepath.Ext(filename) == ".html" {
|
||||
if filepath.Ext(filename) == ".html" || bytes.Index(src, open) >= 0 {
|
||||
src = extractEBNF(src)
|
||||
}
|
||||
|
||||
grammar, err := ebnf.Parse(fset, filename, src)
|
||||
if err != nil {
|
||||
scanner.PrintError(os.Stderr, err)
|
||||
os.Exit(1)
|
||||
report(err)
|
||||
}
|
||||
|
||||
if err = ebnf.Verify(fset, grammar, *start); err != nil {
|
||||
scanner.PrintError(os.Stderr, err)
|
||||
os.Exit(1)
|
||||
report(err)
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user