Skip to content

Commit

Permalink
fixed golint errors.
Browse files Browse the repository at this point in the history
  • Loading branch information
zhuah committed Feb 25, 2017
1 parent 4968f0a commit 13bacc3
Show file tree
Hide file tree
Showing 3 changed files with 107 additions and 102 deletions.
12 changes: 6 additions & 6 deletions parser.go
Original file line number Diff line number Diff line change
Expand Up @@ -81,17 +81,17 @@ func (p *Parser) cmdline() error {
if err != nil {
return err
}
if tok.Type == TOK_EOF {
if tok.Type == TokEOF {
return nil
}
if !p.accept(tok.Type, TOK_PIPE) {
if !p.accept(tok.Type, TokPipe) {
return ErrInvalidSyntax
}
return p.cmdline()
}

func (p *Parser) section() error {
leftSpace, err := p.optional(TOK_SPACE)
leftSpace, err := p.optional(TokSpace)
if err != nil {
return err
}
Expand Down Expand Up @@ -126,7 +126,7 @@ func (p *Parser) spacedSection() (u unit, err error) {
if err != nil {
return
}
u.rightSpace, err = p.optional(TOK_SPACE)
u.rightSpace, err = p.optional(TokSpace)
return
}

Expand Down Expand Up @@ -157,7 +157,7 @@ func (p *Parser) unit() (Token, error) {
if err != nil {
return tok, err
}
if p.accept(tok.Type, TOK_STRING, TOK_REVERSEQUOTE) {
if p.accept(tok.Type, TokString, TokReversequote) {
return tok, nil
}
p.unreadToken(tok)
Expand Down Expand Up @@ -190,7 +190,7 @@ func (p *Parser) appendUnit(leftSpace bool, u unit) error {
p.currStr = p.currStr[:0]
}
for _, tok := range u.toks {
if tok.Type == TOK_REVERSEQUOTE {
if tok.Type == TokReversequote {
val, err := p.r(tok.Value, p.s.envs())
if err != nil {
return err
Expand Down
109 changes: 57 additions & 52 deletions scanner.go
Original file line number Diff line number Diff line change
Expand Up @@ -25,21 +25,21 @@ func (s *Scanner) envs() map[string]string {
return s.env
}

const _RUNE_EOF = 0
const _RuneEOF = 0

func (s *Scanner) nextRune() rune {
if s.rpos >= len(s.text) {
return _RUNE_EOF
return _RuneEOF
}

r := s.text[s.rpos]
s.rpos += 1
s.rpos++
return r
}

func (s *Scanner) unreadRune(r rune) {
if r != _RUNE_EOF {
s.rpos -= 1
if r != _RuneEOF {
s.rpos--
}
}

Expand Down Expand Up @@ -84,11 +84,16 @@ type Token struct {
}

const (
TOK_STRING TokenType = iota + 1 // string, single quoted string and double quoted string
TOK_PIPE // '|'
TOK_REVERSEQUOTE // reverse quoted string
TOK_SPACE // space characters
TOK_EOF // input end
// TokString for string, single quoted string and double quoted string
TokString TokenType = iota + 1
// TokPipe is the '|' character
TokPipe
// TokReversequote is reverse quoted string
TokReversequote
// TokSpace represent space character sequence
TokSpace
// TokEOF means the input end.
TokEOF
)

func (s *Scanner) getEnv(name string) string {
Expand Down Expand Up @@ -139,87 +144,87 @@ func (s *Scanner) checkDollarEnd(tok *Token, r rune, from, switchTo uint8) uint8
// Error is returned for invalid syntax such as unpaired quotes.
func (s *Scanner) Next() (Token, error) {
const (
INITIAL = iota + 1
SPACE
REVERSE_QUOTE
STRING
STRING_DOLLAR
STRING_QUOTE_SINGLE
STRING_QUOTE_DOUBLE
STRING_QUOTE_DOUBLE_DOLLAR
Initial = iota + 1
Space
ReverseQuote
String
StringDollar
StringQuoteSingle
StringQuoteDouble
StringQuoteDoubleDollar
)

var (
tok Token

state uint8 = INITIAL
state uint8 = Initial
)
s.dollarBuf = s.dollarBuf[:0]
for {
r := s.nextRune()
switch state {
case INITIAL:
case Initial:
switch {
case r == _RUNE_EOF:
tok.Type = TOK_EOF
case r == _RuneEOF:
tok.Type = TokEOF
return tok, nil
case r == '|':
tok.Type = TOK_PIPE
tok.Type = TokPipe
return tok, nil
case r == '`':
state = REVERSE_QUOTE
state = ReverseQuote
case unicode.IsSpace(r):
state = SPACE
state = Space
s.unreadRune(r)
default:
state = STRING
state = String
s.unreadRune(r)
}
case SPACE:
if r == _RUNE_EOF || !unicode.IsSpace(r) {
case Space:
if r == _RuneEOF || !unicode.IsSpace(r) {
s.unreadRune(r)
tok.Type = TOK_SPACE
tok.Type = TokSpace
return tok, nil
}
case REVERSE_QUOTE:
case ReverseQuote:
switch r {
case _RUNE_EOF:
case _RuneEOF:
return tok, ErrInvalidSyntax
case '`':
tok.Type = TOK_REVERSEQUOTE
tok.Type = TokReversequote
return tok, nil
default:
tok.Value = append(tok.Value, r)
}
case STRING:
case String:
switch {
case r == _RUNE_EOF || r == '|' || r == '`' || unicode.IsSpace(r):
tok.Type = TOK_STRING
case r == _RuneEOF || r == '|' || r == '`' || unicode.IsSpace(r):
tok.Type = TokString
s.unreadRune(r)
return tok, nil
case r == '\'':
state = STRING_QUOTE_SINGLE
state = StringQuoteSingle
case r == '"':
state = STRING_QUOTE_DOUBLE
state = StringQuoteDouble
case r == '\\':
nr := s.nextRune()
if nr == _RUNE_EOF {
if nr == _RuneEOF {
return tok, ErrInvalidSyntax
}
tok.Value = append(tok.Value, nr)
case r == '$':
state = s.checkDollarStart(&tok, r, state, STRING_DOLLAR)
state = s.checkDollarStart(&tok, r, state, StringDollar)
default:
tok.Value = append(tok.Value, r)
}
case STRING_DOLLAR:
state = s.checkDollarEnd(&tok, r, state, STRING)
case STRING_QUOTE_SINGLE:
case StringDollar:
state = s.checkDollarEnd(&tok, r, state, String)
case StringQuoteSingle:
switch r {
case _RUNE_EOF:
case _RuneEOF:
return tok, ErrInvalidSyntax
case '\'':
state = STRING
state = String
case '\\':
nr := s.nextRune()
if escape, ok := s.isEscapeChars(nr); ok {
Expand All @@ -231,15 +236,15 @@ func (s *Scanner) Next() (Token, error) {
default:
tok.Value = append(tok.Value, r)
}
case STRING_QUOTE_DOUBLE:
case StringQuoteDouble:
switch r {
case _RUNE_EOF:
case _RuneEOF:
return tok, ErrInvalidSyntax
case '"':
state = STRING
state = String
case '\\':
nr := s.nextRune()
if nr == _RUNE_EOF {
if nr == _RuneEOF {
return tok, ErrInvalidSyntax
}
if escape, ok := s.isEscapeChars(nr); ok {
Expand All @@ -249,12 +254,12 @@ func (s *Scanner) Next() (Token, error) {
s.unreadRune(nr)
}
case '$':
state = s.checkDollarStart(&tok, r, state, STRING_QUOTE_DOUBLE_DOLLAR)
state = s.checkDollarStart(&tok, r, state, StringQuoteDoubleDollar)
default:
tok.Value = append(tok.Value, r)
}
case STRING_QUOTE_DOUBLE_DOLLAR:
state = s.checkDollarEnd(&tok, r, state, STRING_QUOTE_DOUBLE)
case StringQuoteDoubleDollar:
state = s.checkDollarEnd(&tok, r, state, StringQuoteDouble)
}
}
}
Expand All @@ -269,7 +274,7 @@ func Scan(text []rune, env map[string]string) ([]Token, error) {
return nil, err
}
tokens = append(tokens, tok)
if tok.Type == TOK_EOF {
if tok.Type == TokEOF {
break
}
}
Expand Down
88 changes: 44 additions & 44 deletions scanner_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -27,49 +27,49 @@ func TestScanner(t *testing.T) {
t.Fatal(err)
}
expects := []Token{
{Type: TOK_SPACE},
{Type: TOK_STRING, Value: []rune("a")},
{Type: TOK_SPACE},
{Type: TOK_STRING, Value: []rune("aa")},
{Type: TOK_SPACE},
{Type: TOK_STRING, Value: []rune("aaa")},
{Type: TOK_SPACE},
{Type: TOK_STRING, Value: []rune("aaaa")},
{Type: TOK_SPACE},
{Type: TOK_STRING, Value: []rune("a/bin")},
{Type: TOK_SPACE},
{Type: TOK_STRING, Value: []rune("a/bin")},
{Type: TOK_SPACE},
{Type: TOK_STRING, Value: []rune("a$PATH")},
{Type: TOK_SPACE},
{Type: TOK_STRING, Value: []rune("aa")},
{Type: TOK_SPACE},
{Type: TOK_STRING, Value: []rune("a")},
{Type: TOK_SPACE},
{Type: TOK_STRING, Value: []rune("a$\\")},
{Type: TOK_SPACE},
{Type: TOK_STRING, Value: []rune("a")},
{Type: TOK_PIPE},
{Type: TOK_SPACE},
{Type: TOK_STRING, Value: []rune("a")},
{Type: TOK_PIPE},
{Type: TOK_STRING, Value: []rune("a")},
{Type: TOK_SPACE},
{Type: TOK_STRING, Value: []rune("a\\A")},
{Type: TOK_SPACE},
{Type: TOK_STRING, Value: []rune("a\a\b\f\n\r\t\v\\$")},
{Type: TOK_SPACE},
{Type: TOK_STRING, Value: []rune("t")},
{Type: TOK_SPACE},
{Type: TOK_STRING, Value: []rune("a\\A")},
{Type: TOK_SPACE},
{Type: TOK_STRING, Value: []rune("a\t")},
{Type: TOK_SPACE},
{Type: TOK_STRING, Value: []rune("a")},
{Type: TOK_REVERSEQUOTE, Value: []rune("ls /")},
{Type: TOK_SPACE},
{Type: TOK_REVERSEQUOTE, Value: []rune("ls ~")},
{Type: TOK_EOF},
{Type: TokSpace},
{Type: TokString, Value: []rune("a")},
{Type: TokSpace},
{Type: TokString, Value: []rune("aa")},
{Type: TokSpace},
{Type: TokString, Value: []rune("aaa")},
{Type: TokSpace},
{Type: TokString, Value: []rune("aaaa")},
{Type: TokSpace},
{Type: TokString, Value: []rune("a/bin")},
{Type: TokSpace},
{Type: TokString, Value: []rune("a/bin")},
{Type: TokSpace},
{Type: TokString, Value: []rune("a$PATH")},
{Type: TokSpace},
{Type: TokString, Value: []rune("aa")},
{Type: TokSpace},
{Type: TokString, Value: []rune("a")},
{Type: TokSpace},
{Type: TokString, Value: []rune("a$\\")},
{Type: TokSpace},
{Type: TokString, Value: []rune("a")},
{Type: TokPipe},
{Type: TokSpace},
{Type: TokString, Value: []rune("a")},
{Type: TokPipe},
{Type: TokString, Value: []rune("a")},
{Type: TokSpace},
{Type: TokString, Value: []rune("a\\A")},
{Type: TokSpace},
{Type: TokString, Value: []rune("a\a\b\f\n\r\t\v\\$")},
{Type: TokSpace},
{Type: TokString, Value: []rune("t")},
{Type: TokSpace},
{Type: TokString, Value: []rune("a\\A")},
{Type: TokSpace},
{Type: TokString, Value: []rune("a\t")},
{Type: TokSpace},
{Type: TokString, Value: []rune("a")},
{Type: TokReversequote, Value: []rune("ls /")},
{Type: TokSpace},
{Type: TokReversequote, Value: []rune("ls ~")},
{Type: TokEOF},
}
if len(gots) != len(expects) {
t.Errorf("token count is not equal: expect %d, got %d", len(expects), len(gots))
Expand All @@ -82,7 +82,7 @@ func TestScanner(t *testing.T) {
t.Errorf("token type is not equal: %d: expect %d, got %d", i, expect.Type, got.Type)
}

if expect.Type != TOK_SPACE && string(got.Value) != string(expect.Value) {
if expect.Type != TokSpace && string(got.Value) != string(expect.Value) {
t.Errorf("token value is not equal: %d: expect %s, got %s", i, string(expect.Value), string(got.Value))
}
}
Expand Down

0 comments on commit 13bacc3

Please sign in to comment.