]> git.immae.eu Git - github/fretlink/terraform-provider-statuscake.git/blob - vendor/github.com/hashicorp/hcl2/hcl/hclsyntax/navigation.go
Upgrade to 0.12
[github/fretlink/terraform-provider-statuscake.git] / vendor / github.com / hashicorp / hcl2 / hcl / hclsyntax / navigation.go
1 package hclsyntax
2
3 import (
4 "bytes"
5 "fmt"
6
7 "github.com/hashicorp/hcl2/hcl"
8 )
9
10 type navigation struct {
11 root *Body
12 }
13
14 // Implementation of hcled.ContextString
15 func (n navigation) ContextString(offset int) string {
16 // We will walk our top-level blocks until we find one that contains
17 // the given offset, and then construct a representation of the header
18 // of the block.
19
20 var block *Block
21 for _, candidate := range n.root.Blocks {
22 if candidate.Range().ContainsOffset(offset) {
23 block = candidate
24 break
25 }
26 }
27
28 if block == nil {
29 return ""
30 }
31
32 if len(block.Labels) == 0 {
33 // Easy case!
34 return block.Type
35 }
36
37 buf := &bytes.Buffer{}
38 buf.WriteString(block.Type)
39 for _, label := range block.Labels {
40 fmt.Fprintf(buf, " %q", label)
41 }
42 return buf.String()
43 }
44
45 func (n navigation) ContextDefRange(offset int) hcl.Range {
46 var block *Block
47 for _, candidate := range n.root.Blocks {
48 if candidate.Range().ContainsOffset(offset) {
49 block = candidate
50 break
51 }
52 }
53
54 if block == nil {
55 return hcl.Range{}
56 }
57
58 return block.DefRange()
59 }