z_mirror/luapls

git clone https://git.raiguard.me/z_mirror/luapls

Caleb HeuerConvert LSP methods to new environment, fix bugs in file graph generationd0e4705

main
1019 B53 linesraw
1package token
2
3import protocol "github.com/tliron/glsp/protocol_3_16"
4
5type LineBreaks []int
6
7func (f LineBreaks) ToPos(position protocol.Position) Pos {
8	line := int(position.Line)
9	col := int(position.Character)
10	if line >= len(f) {
11		return InvalidPos
12	}
13	lineStart := 0
14	if line > 0 {
15		lineStart = f[line-1] + 1
16	}
17	lineEnd := f[line]
18	if col > lineEnd-lineStart {
19		return InvalidPos
20	}
21	return lineStart + col
22}
23
24func (f LineBreaks) ToProtocolPos(pos Pos) protocol.Position {
25	if len(f) == 0 {
26		return protocol.Position{
27			Line:      0,
28			Character: uint32(pos),
29		}
30	}
31	line := 0
32	lineStart := 0
33	lineEnd := -1
34	for line < len(f) {
35		lineStart = lineEnd + 1
36		lineEnd = f[line]
37		if lineStart <= pos && lineEnd >= pos {
38			break
39		}
40		line++
41	}
42	return protocol.Position{
43		Line:      uint32(line),
44		Character: uint32(pos - lineStart),
45	}
46}
47
48func (f LineBreaks) ToProtocolRange(rng Range) protocol.Range {
49	return protocol.Range{
50		Start: f.ToProtocolPos(rng.Start),
51		End:   f.ToProtocolPos(rng.End),
52	}
53}