z_mirror/luapls
git clone https://git.raiguard.me/z_mirror/luapls
d0e4705
main
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 { 8line := int (position .Line ) 9col := int (position .Character ) 10if line >= len (f ) { 11return InvalidPos 12 } 13lineStart := 0 14if line > 0 { 15lineStart = f [line - 1 ]+ 1 16 } 17lineEnd := f [line ] 18if col > lineEnd - lineStart { 19return InvalidPos 20 } 21return lineStart + col 22} 23 24func (f LineBreaks )ToProtocolPos (pos Pos ) protocol.Position { 25if len (f )== 0 { 26return protocol.Position { 27Line :0 , 28Character :uint32 (pos ), 29 } 30 } 31line := 0 32lineStart := 0 33lineEnd := - 1 34for line < len (f ) { 35lineStart = lineEnd + 1 36lineEnd = f [line ] 37if lineStart <= pos && lineEnd >= pos { 38break 39 } 40line ++ 41 } 42return protocol.Position { 43Line :uint32 (line ), 44Character :uint32 (pos - lineStart ), 45 } 46} 47 48func (f LineBreaks )ToProtocolRange (rng Range ) protocol.Range { 49return protocol.Range { 50Start :f .ToProtocolPos (rng .Start ), 51End :f .ToProtocolPos (rng .End ), 52 } 53}