Merge pull request #22209 from pselle/heredocs
Upgrade HCL to include fmt fix
This commit is contained in:
commit
a534e9c784
2
go.mod
2
go.mod
|
@ -64,7 +64,7 @@ require (
|
||||||
github.com/hashicorp/go-version v1.1.0
|
github.com/hashicorp/go-version v1.1.0
|
||||||
github.com/hashicorp/golang-lru v0.5.0 // indirect
|
github.com/hashicorp/golang-lru v0.5.0 // indirect
|
||||||
github.com/hashicorp/hcl v0.0.0-20170504190234-a4b07c25de5f
|
github.com/hashicorp/hcl v0.0.0-20170504190234-a4b07c25de5f
|
||||||
github.com/hashicorp/hcl2 v0.0.0-20190719002611-618463aa7958
|
github.com/hashicorp/hcl2 v0.0.0-20190725010614-0c3fe388e450
|
||||||
github.com/hashicorp/hil v0.0.0-20190212112733-ab17b08d6590
|
github.com/hashicorp/hil v0.0.0-20190212112733-ab17b08d6590
|
||||||
github.com/hashicorp/logutils v1.0.0
|
github.com/hashicorp/logutils v1.0.0
|
||||||
github.com/hashicorp/memberlist v0.1.0 // indirect
|
github.com/hashicorp/memberlist v0.1.0 // indirect
|
||||||
|
|
6
go.sum
6
go.sum
|
@ -216,10 +216,8 @@ github.com/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ
|
||||||
github.com/hashicorp/hcl v0.0.0-20170504190234-a4b07c25de5f h1:UdxlrJz4JOnY8W+DbLISwf2B8WXEolNRA8BGCwI9jws=
|
github.com/hashicorp/hcl v0.0.0-20170504190234-a4b07c25de5f h1:UdxlrJz4JOnY8W+DbLISwf2B8WXEolNRA8BGCwI9jws=
|
||||||
github.com/hashicorp/hcl v0.0.0-20170504190234-a4b07c25de5f/go.mod h1:oZtUIOe8dh44I2q6ScRibXws4Ajl+d+nod3AaR9vL5w=
|
github.com/hashicorp/hcl v0.0.0-20170504190234-a4b07c25de5f/go.mod h1:oZtUIOe8dh44I2q6ScRibXws4Ajl+d+nod3AaR9vL5w=
|
||||||
github.com/hashicorp/hcl2 v0.0.0-20181208003705-670926858200/go.mod h1:ShfpTh661oAaxo7VcNxg0zcZW6jvMa7Moy2oFx7e5dE=
|
github.com/hashicorp/hcl2 v0.0.0-20181208003705-670926858200/go.mod h1:ShfpTh661oAaxo7VcNxg0zcZW6jvMa7Moy2oFx7e5dE=
|
||||||
github.com/hashicorp/hcl2 v0.0.0-20190702185634-5b39d9ff3a9a h1:1KfDwkIXrxrfMpqwuW//ujObiYNuR2DqaETSK2NB8Ug=
|
github.com/hashicorp/hcl2 v0.0.0-20190725010614-0c3fe388e450 h1:wpa0vOXOnSEuwZ++eVk1gQNm3Jy2+Envn0cQRgsl8K8=
|
||||||
github.com/hashicorp/hcl2 v0.0.0-20190702185634-5b39d9ff3a9a/go.mod h1:FSQTwDi9qesxGBsII2VqhIzKQ4r0bHvBkOczWfD7llg=
|
github.com/hashicorp/hcl2 v0.0.0-20190725010614-0c3fe388e450/go.mod h1:FSQTwDi9qesxGBsII2VqhIzKQ4r0bHvBkOczWfD7llg=
|
||||||
github.com/hashicorp/hcl2 v0.0.0-20190719002611-618463aa7958 h1:tWvka6jPDo/2jqd06ErHWiWlrXZDczD63dTfBw2wxi0=
|
|
||||||
github.com/hashicorp/hcl2 v0.0.0-20190719002611-618463aa7958/go.mod h1:FSQTwDi9qesxGBsII2VqhIzKQ4r0bHvBkOczWfD7llg=
|
|
||||||
github.com/hashicorp/hil v0.0.0-20190212112733-ab17b08d6590 h1:2yzhWGdgQUWZUCNK+AoO35V+HTsgEmcM4J9IkArh7PI=
|
github.com/hashicorp/hil v0.0.0-20190212112733-ab17b08d6590 h1:2yzhWGdgQUWZUCNK+AoO35V+HTsgEmcM4J9IkArh7PI=
|
||||||
github.com/hashicorp/hil v0.0.0-20190212112733-ab17b08d6590/go.mod h1:n2TSygSNwsLJ76m8qFXTSc7beTb+auJxYdqrnoqwZWE=
|
github.com/hashicorp/hil v0.0.0-20190212112733-ab17b08d6590/go.mod h1:n2TSygSNwsLJ76m8qFXTSc7beTb+auJxYdqrnoqwZWE=
|
||||||
github.com/hashicorp/logutils v1.0.0 h1:dLEQVugN8vlakKOUE3ihGLTZJRB4j+M2cdTm/ORI65Y=
|
github.com/hashicorp/logutils v1.0.0 h1:dLEQVugN8vlakKOUE3ihGLTZJRB4j+M2cdTm/ORI65Y=
|
||||||
|
|
|
@ -59,7 +59,6 @@ func NewConstraint(v string) (Constraints, error) {
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
result[i] = c
|
result[i] = c
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -95,7 +95,7 @@ schema model provides a description of only one level of nested blocks at
|
||||||
a time, and thus a new schema must be provided for each additional level of
|
a time, and thus a new schema must be provided for each additional level of
|
||||||
nesting.
|
nesting.
|
||||||
|
|
||||||
To make this arduous process as convenient as possbile, this package provides
|
To make this arduous process as convenient as possible, this package provides
|
||||||
a helper function `WalkForEachVariables`, which returns a `WalkVariablesNode`
|
a helper function `WalkForEachVariables`, which returns a `WalkVariablesNode`
|
||||||
instance that can be used to find variables directly in a given body and also
|
instance that can be used to find variables directly in a given body and also
|
||||||
determine which nested blocks require recursive calls. Using this mechanism
|
determine which nested blocks require recursive calls. Using this mechanism
|
||||||
|
|
|
@ -187,7 +187,7 @@ for later evaluation by the calling application.
|
||||||
### Blocks
|
### Blocks
|
||||||
|
|
||||||
A _block_ creates a child body that is annotated with a block _type_ and
|
A _block_ creates a child body that is annotated with a block _type_ and
|
||||||
zero or more block _labels_. Blocks create a structural hierachy which can be
|
zero or more block _labels_. Blocks create a structural hierarchy which can be
|
||||||
interpreted by the calling application.
|
interpreted by the calling application.
|
||||||
|
|
||||||
Block labels can either be quoted literal strings or naked identifiers.
|
Block labels can either be quoted literal strings or naked identifiers.
|
||||||
|
|
|
@ -66,7 +66,7 @@ _block header schemata_:
|
||||||
Within a schema, it is an error to request the same attribute name twice or
|
Within a schema, it is an error to request the same attribute name twice or
|
||||||
to request a block type whose name is also an attribute name. While this can
|
to request a block type whose name is also an attribute name. While this can
|
||||||
in principle be supported in some syntaxes, in other syntaxes the attribute
|
in principle be supported in some syntaxes, in other syntaxes the attribute
|
||||||
and block namespaces are combined and so an an attribute cannot coexist with
|
and block namespaces are combined and so an attribute cannot coexist with
|
||||||
a block whose type name is identical to the attribute name.
|
a block whose type name is identical to the attribute name.
|
||||||
|
|
||||||
The result of applying a body schema to a body is _body content_, which
|
The result of applying a body schema to a body is _body content_, which
|
||||||
|
@ -497,7 +497,7 @@ producing an unknown value of the target type.
|
||||||
|
|
||||||
Conversion of any value _to_ the dynamic pseudo-type is a no-op. The result
|
Conversion of any value _to_ the dynamic pseudo-type is a no-op. The result
|
||||||
is the input value, verbatim. This is the only situation where the conversion
|
is the input value, verbatim. This is the only situation where the conversion
|
||||||
result value is not of the the given target type.
|
result value is not of the given target type.
|
||||||
|
|
||||||
### Primitive Type Conversions
|
### Primitive Type Conversions
|
||||||
|
|
||||||
|
|
|
@ -33,9 +33,9 @@ type Blocks []*Block
|
||||||
type Attributes map[string]*Attribute
|
type Attributes map[string]*Attribute
|
||||||
|
|
||||||
// Body is a container for attributes and blocks. It serves as the primary
|
// Body is a container for attributes and blocks. It serves as the primary
|
||||||
// unit of heirarchical structure within configuration.
|
// unit of hierarchical structure within configuration.
|
||||||
//
|
//
|
||||||
// The content of a body cannot be meaningfully intepreted without a schema,
|
// The content of a body cannot be meaningfully interpreted without a schema,
|
||||||
// so Body represents the raw body content and has methods that allow the
|
// so Body represents the raw body content and has methods that allow the
|
||||||
// content to be extracted in terms of a given schema.
|
// content to be extracted in terms of a given schema.
|
||||||
type Body interface {
|
type Body interface {
|
||||||
|
|
|
@ -54,22 +54,12 @@ func formatIndent(lines []formatLine) {
|
||||||
// which should be more than enough for reasonable HCL uses.
|
// which should be more than enough for reasonable HCL uses.
|
||||||
indents := make([]int, 0, 10)
|
indents := make([]int, 0, 10)
|
||||||
|
|
||||||
inHeredoc := false
|
|
||||||
for i := range lines {
|
for i := range lines {
|
||||||
line := &lines[i]
|
line := &lines[i]
|
||||||
if len(line.lead) == 0 {
|
if len(line.lead) == 0 {
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
|
|
||||||
if inHeredoc {
|
|
||||||
for _, token := range line.lead {
|
|
||||||
if token.Type == hclsyntax.TokenCHeredoc {
|
|
||||||
inHeredoc = false
|
|
||||||
}
|
|
||||||
}
|
|
||||||
continue // don't touch indentation inside heredocs
|
|
||||||
}
|
|
||||||
|
|
||||||
if line.lead[0].Type == hclsyntax.TokenNewline {
|
if line.lead[0].Type == hclsyntax.TokenNewline {
|
||||||
// Never place spaces before a newline
|
// Never place spaces before a newline
|
||||||
line.lead[0].SpacesBefore = 0
|
line.lead[0].SpacesBefore = 0
|
||||||
|
@ -80,9 +70,10 @@ func formatIndent(lines []formatLine) {
|
||||||
for _, token := range line.lead {
|
for _, token := range line.lead {
|
||||||
netBrackets += tokenBracketChange(token)
|
netBrackets += tokenBracketChange(token)
|
||||||
if token.Type == hclsyntax.TokenOHeredoc {
|
if token.Type == hclsyntax.TokenOHeredoc {
|
||||||
inHeredoc = true
|
break
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
for _, token := range line.assign {
|
for _, token := range line.assign {
|
||||||
netBrackets += tokenBracketChange(token)
|
netBrackets += tokenBracketChange(token)
|
||||||
}
|
}
|
||||||
|
@ -391,9 +382,9 @@ func linesForFormat(tokens Tokens) []formatLine {
|
||||||
|
|
||||||
// Now we'll pick off any trailing comments and attribute assignments
|
// Now we'll pick off any trailing comments and attribute assignments
|
||||||
// to shuffle off into the "comment" and "assign" cells.
|
// to shuffle off into the "comment" and "assign" cells.
|
||||||
inHeredoc := false
|
|
||||||
for i := range lines {
|
for i := range lines {
|
||||||
line := &lines[i]
|
line := &lines[i]
|
||||||
|
|
||||||
if len(line.lead) == 0 {
|
if len(line.lead) == 0 {
|
||||||
// if the line is empty then there's nothing for us to do
|
// if the line is empty then there's nothing for us to do
|
||||||
// (this should happen only for the final line, because all other
|
// (this should happen only for the final line, because all other
|
||||||
|
@ -401,26 +392,6 @@ func linesForFormat(tokens Tokens) []formatLine {
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
|
|
||||||
if inHeredoc {
|
|
||||||
for _, tok := range line.lead {
|
|
||||||
if tok.Type == hclsyntax.TokenCHeredoc {
|
|
||||||
inHeredoc = false
|
|
||||||
break
|
|
||||||
}
|
|
||||||
}
|
|
||||||
// Inside a heredoc everything is "lead", even if there's a
|
|
||||||
// template interpolation embedded in there that might otherwise
|
|
||||||
// confuse our logic below.
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
|
|
||||||
for _, tok := range line.lead {
|
|
||||||
if tok.Type == hclsyntax.TokenOHeredoc {
|
|
||||||
inHeredoc = true
|
|
||||||
break
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if len(line.lead) > 1 && line.lead[len(line.lead)-1].Type == hclsyntax.TokenComment {
|
if len(line.lead) > 1 && line.lead[len(line.lead)-1].Type == hclsyntax.TokenComment {
|
||||||
line.comment = line.lead[len(line.lead)-1:]
|
line.comment = line.lead[len(line.lead)-1:]
|
||||||
line.lead = line.lead[:len(line.lead)-1]
|
line.lead = line.lead[:len(line.lead)-1]
|
||||||
|
|
|
@ -326,7 +326,7 @@ github.com/hashicorp/hcl/hcl/scanner
|
||||||
github.com/hashicorp/hcl/hcl/strconv
|
github.com/hashicorp/hcl/hcl/strconv
|
||||||
github.com/hashicorp/hcl/json/scanner
|
github.com/hashicorp/hcl/json/scanner
|
||||||
github.com/hashicorp/hcl/json/token
|
github.com/hashicorp/hcl/json/token
|
||||||
# github.com/hashicorp/hcl2 v0.0.0-20190719002611-618463aa7958
|
# github.com/hashicorp/hcl2 v0.0.0-20190725010614-0c3fe388e450
|
||||||
github.com/hashicorp/hcl2/hcl
|
github.com/hashicorp/hcl2/hcl
|
||||||
github.com/hashicorp/hcl2/hcl/hclsyntax
|
github.com/hashicorp/hcl2/hcl/hclsyntax
|
||||||
github.com/hashicorp/hcl2/hcldec
|
github.com/hashicorp/hcl2/hcldec
|
||||||
|
|
Loading…
Reference in New Issue