aboutsummaryrefslogtreecommitdiff
path: root/vendor/github.com/hashicorp/hcl/hcl/token/token.go
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/github.com/hashicorp/hcl/hcl/token/token.go')
-rw-r--r--vendor/github.com/hashicorp/hcl/hcl/token/token.go219
1 files changed, 0 insertions, 219 deletions
diff --git a/vendor/github.com/hashicorp/hcl/hcl/token/token.go b/vendor/github.com/hashicorp/hcl/hcl/token/token.go
deleted file mode 100644
index e37c066..0000000
--- a/vendor/github.com/hashicorp/hcl/hcl/token/token.go
+++ /dev/null
@@ -1,219 +0,0 @@
-// Package token defines constants representing the lexical tokens for HCL
-// (HashiCorp Configuration Language)
-package token
-
-import (
- "fmt"
- "strconv"
- "strings"
-
- hclstrconv "github.com/hashicorp/hcl/hcl/strconv"
-)
-
-// Token defines a single HCL token which can be obtained via the Scanner
-type Token struct {
- Type Type
- Pos Pos
- Text string
- JSON bool
-}
-
-// Type is the set of lexical tokens of the HCL (HashiCorp Configuration Language)
-type Type int
-
-const (
- // Special tokens
- ILLEGAL Type = iota
- EOF
- COMMENT
-
- identifier_beg
- IDENT // literals
- literal_beg
- NUMBER // 12345
- FLOAT // 123.45
- BOOL // true,false
- STRING // "abc"
- HEREDOC // <<FOO\nbar\nFOO
- literal_end
- identifier_end
-
- operator_beg
- LBRACK // [
- LBRACE // {
- COMMA // ,
- PERIOD // .
-
- RBRACK // ]
- RBRACE // }
-
- ASSIGN // =
- ADD // +
- SUB // -
- operator_end
-)
-
-var tokens = [...]string{
- ILLEGAL: "ILLEGAL",
-
- EOF: "EOF",
- COMMENT: "COMMENT",
-
- IDENT: "IDENT",
- NUMBER: "NUMBER",
- FLOAT: "FLOAT",
- BOOL: "BOOL",
- STRING: "STRING",
-
- LBRACK: "LBRACK",
- LBRACE: "LBRACE",
- COMMA: "COMMA",
- PERIOD: "PERIOD",
- HEREDOC: "HEREDOC",
-
- RBRACK: "RBRACK",
- RBRACE: "RBRACE",
-
- ASSIGN: "ASSIGN",
- ADD: "ADD",
- SUB: "SUB",
-}
-
-// String returns the string corresponding to the token tok.
-func (t Type) String() string {
- s := ""
- if 0 <= t && t < Type(len(tokens)) {
- s = tokens[t]
- }
- if s == "" {
- s = "token(" + strconv.Itoa(int(t)) + ")"
- }
- return s
-}
-
-// IsIdentifier returns true for tokens corresponding to identifiers and basic
-// type literals; it returns false otherwise.
-func (t Type) IsIdentifier() bool { return identifier_beg < t && t < identifier_end }
-
-// IsLiteral returns true for tokens corresponding to basic type literals; it
-// returns false otherwise.
-func (t Type) IsLiteral() bool { return literal_beg < t && t < literal_end }
-
-// IsOperator returns true for tokens corresponding to operators and
-// delimiters; it returns false otherwise.
-func (t Type) IsOperator() bool { return operator_beg < t && t < operator_end }
-
-// String returns the token's literal text. Note that this is only
-// applicable for certain token types, such as token.IDENT,
-// token.STRING, etc..
-func (t Token) String() string {
- return fmt.Sprintf("%s %s %s", t.Pos.String(), t.Type.String(), t.Text)
-}
-
-// Value returns the properly typed value for this token. The type of
-// the returned interface{} is guaranteed based on the Type field.
-//
-// This can only be called for literal types. If it is called for any other
-// type, this will panic.
-func (t Token) Value() interface{} {
- switch t.Type {
- case BOOL:
- if t.Text == "true" {
- return true
- } else if t.Text == "false" {
- return false
- }
-
- panic("unknown bool value: " + t.Text)
- case FLOAT:
- v, err := strconv.ParseFloat(t.Text, 64)
- if err != nil {
- panic(err)
- }
-
- return float64(v)
- case NUMBER:
- v, err := strconv.ParseInt(t.Text, 0, 64)
- if err != nil {
- panic(err)
- }
-
- return int64(v)
- case IDENT:
- return t.Text
- case HEREDOC:
- return unindentHeredoc(t.Text)
- case STRING:
- // Determine the Unquote method to use. If it came from JSON,
- // then we need to use the built-in unquote since we have to
- // escape interpolations there.
- f := hclstrconv.Unquote
- if t.JSON {
- f = strconv.Unquote
- }
-
- // This case occurs if json null is used
- if t.Text == "" {
- return ""
- }
-
- v, err := f(t.Text)
- if err != nil {
- panic(fmt.Sprintf("unquote %s err: %s", t.Text, err))
- }
-
- return v
- default:
- panic(fmt.Sprintf("unimplemented Value for type: %s", t.Type))
- }
-}
-
-// unindentHeredoc returns the string content of a HEREDOC if it is started with <<
-// and the content of a HEREDOC with the hanging indent removed if it is started with
-// a <<-, and the terminating line is at least as indented as the least indented line.
-func unindentHeredoc(heredoc string) string {
- // We need to find the end of the marker
- idx := strings.IndexByte(heredoc, '\n')
- if idx == -1 {
- panic("heredoc doesn't contain newline")
- }
-
- unindent := heredoc[2] == '-'
-
- // We can optimize if the heredoc isn't marked for indentation
- if !unindent {
- return string(heredoc[idx+1 : len(heredoc)-idx+1])
- }
-
- // We need to unindent each line based on the indentation level of the marker
- lines := strings.Split(string(heredoc[idx+1:len(heredoc)-idx+2]), "\n")
- whitespacePrefix := lines[len(lines)-1]
-
- isIndented := true
- for _, v := range lines {
- if strings.HasPrefix(v, whitespacePrefix) {
- continue
- }
-
- isIndented = false
- break
- }
-
- // If all lines are not at least as indented as the terminating mark, return the
- // heredoc as is, but trim the leading space from the marker on the final line.
- if !isIndented {
- return strings.TrimRight(string(heredoc[idx+1:len(heredoc)-idx+1]), " \t")
- }
-
- unindentedLines := make([]string, len(lines))
- for k, v := range lines {
- if k == len(lines)-1 {
- unindentedLines[k] = ""
- break
- }
-
- unindentedLines[k] = strings.TrimPrefix(v, whitespacePrefix)
- }
-
- return strings.Join(unindentedLines, "\n")
-}