]> git.immae.eu Git - github/fretlink/terraform-provider-statuscake.git/blame - vendor/github.com/hashicorp/hcl2/hcl/hclsyntax/navigation.go
Merge branch 'fix_read_test' of github.com:alexandreFre/terraform-provider-statuscake
[github/fretlink/terraform-provider-statuscake.git] / vendor / github.com / hashicorp / hcl2 / hcl / hclsyntax / navigation.go
CommitLineData
15c0b25d
AP
1package hclsyntax
2
3import (
4 "bytes"
5 "fmt"
107c1cdb
ND
6
7 "github.com/hashicorp/hcl2/hcl"
15c0b25d
AP
8)
9
10type navigation struct {
11 root *Body
12}
13
14// Implementation of hcled.ContextString
15func (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}
107c1cdb
ND
44
45func (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}