summaryrefslogtreecommitdiffstats
path: root/vendor/github.com/d5/tengo/compiler/source/file_pos.go
blob: 4055fe6dfdb33ce6b7589cab20532d71210112aa (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
package source

import "fmt"

// FilePos represents a position information in the file.
type FilePos struct {
	Filename string // filename, if any
	Offset   int    // offset, starting at 0
	Line     int    // line number, starting at 1
	Column   int    // column number, starting at 1 (byte count)
}

// IsValid returns true if the position is valid.
func (p FilePos) IsValid() bool {
	return p.Line > 0
}

// String returns a string in one of several forms:
//
//	file:line:column    valid position with file name
//	file:line           valid position with file name but no column (column == 0)
//	line:column         valid position without file name
//	line                valid position without file name and no column (column == 0)
//	file                invalid position with file name
//	-                   invalid position without file name
//
func (p FilePos) String() string {
	s := p.Filename

	if p.IsValid() {
		if s != "" {
			s += ":"
		}

		s += fmt.Sprintf("%d", p.Line)

		if p.Column != 0 {
			s += fmt.Sprintf(":%d", p.Column)
		}
	}

	if s == "" {
		s = "-"
	}

	return s
}