z_mirror/luapls
git clone https://git.raiguard.me/z_mirror/luapls
e927fe5
main
1package ast 2 3import "github.com/raiguard/luapls/lua/token" 4 5type Punctuated [T Node ]struct { 6Pairs []Pair [T ] 7StartPos token.Pos // If there are zero pairs then we need an alternative way to get the position. 8} 9 10func SimplePunctuated [T Node ](node T )Punctuated [T ] { 11return Punctuated [T ]{ 12Pairs : []Pair [T ]{{node ,nil }}, 13StartPos :node .Pos (), 14 } 15} 16 17func (p * Punctuated [T ])Pos () token.Pos { 18if len (p .Pairs )== 0 { 19return p .StartPos 20 } 21return p .Pairs [0 ].Pos () 22} 23 24func (p * Punctuated [T ])End () token.Pos { 25if len (p .Pairs )== 0 { 26return p .StartPos 27 } 28return p .Pairs [len (p .Pairs )- 1 ].End () 29} 30 31func (p * Punctuated [T ])String ()string { 32out := "" 33for _ ,pair := range p .Pairs { 34out += pair .String () 35 } 36return out 37} 38 39type Pair [T Node ]struct { 40Node T 41Delimeter * Unit // Optional 42} 43 44func (p * Pair [T ])Pos () token.Pos { 45return p .Node .Pos () 46} 47 48func (p * Pair [T ])End () token.Pos { 49if p .Delimeter != nil { 50return p .Delimeter .End () 51 } 52return p .Node .End () 53} 54 55func (p * Pair [T ])String ()string { 56out := p .Node .String () 57if p .Delimeter != nil { 58out += p .Delimeter .String () 59 } 60return out 61}