z_mirror/luapls
git clone https://git.raiguard.me/z_mirror/luapls
96b3acb
main
1package ast 2 3import ( 4"github.com/raiguard/luapls/lua/token" 5) 6 7type Statement interface { 8Node 9statementNode () 10} 11 12type AssignmentStatement struct { 13Vars Punctuated [Expression ] 14Assign Unit 15Exps Punctuated [Expression ] 16} 17 18func (as * AssignmentStatement )statementNode () {} 19func (as * AssignmentStatement )Pos () token.Pos { 20return as .Vars .Pos () 21} 22func (as * AssignmentStatement )End () token.Pos { 23return as .Exps .End () 24} 25 26type BreakStatement Unit 27 28func (bs * BreakStatement )statementNode () {} 29func (bs * BreakStatement )Pos () token.Pos { 30return bs .Token .Pos 31} 32func (bs * BreakStatement )End () token.Pos { 33return bs .Token .End () 34} 35 36type DoStatement struct { 37DoTok Unit 38Body Block 39EndTok Unit 40} 41 42func (ds * DoStatement )statementNode () {} 43func (ds * DoStatement )Pos () token.Pos { 44return ds .DoTok .Pos () 45} 46func (ds * DoStatement )End () token.Pos { 47return ds .EndTok .End () 48} 49 50type ForStatement struct { 51ForTok Unit 52Name * Identifier 53AssignTok Unit 54Start Pair [Expression ] 55Finish Pair [Expression ] 56Step * Pair [Expression ] 57DoTok Unit 58Body Block 59EndTok Unit 60} 61 62func (fs * ForStatement )statementNode () {} 63func (fs * ForStatement )Pos () token.Pos { 64return fs .ForTok .Pos () 65} 66func (fs * ForStatement )End () token.Pos { 67return fs .EndTok .End () 68} 69 70type ForInStatement struct { 71ForTok Unit 72Names Punctuated [* Identifier ] 73InTok Unit 74Exps Punctuated [Expression ] 75DoTok Unit 76Body Block 77EndTok Unit 78} 79 80func (fs * ForInStatement )statementNode () {} 81func (fs * ForInStatement )Pos () token.Pos { 82return fs .ForTok .Pos () 83} 84func (fs * ForInStatement )End () token.Pos { 85return fs .EndTok .End () 86} 87 88type FunctionStatement struct { 89LocalTok * Unit 90FuncTok Unit 91Name Expression 92LeftParen Unit 93Params Punctuated [* Identifier ] 94Vararg * Unit 95RightParen Unit 96Body Block 97EndTok Unit 98} 99 100func (fs * FunctionStatement )statementNode () {} 101func (fs * FunctionStatement )Pos () token.Pos { 102if fs .LocalTok != nil { 103return fs .LocalTok .Pos () 104 } 105return fs .Name .Pos () 106} 107func (fs * FunctionStatement )End () token.Pos { 108return fs .EndTok .End () 109} 110 111type GotoStatement struct { 112GotoTok Unit 113Name * Identifier 114} 115 116func (gs * GotoStatement )statementNode () {} 117func (gs * GotoStatement )Pos () token.Pos { 118return gs .GotoTok .Pos () 119} 120func (gs * GotoStatement )End () token.Pos { 121return gs .Name .End () 122} 123 124type IfStatement struct { 125IfTok Unit // TODO: Remove this in favor of Clauses[0].LeadingTok, since it will always exist 126Clauses []* IfClause 127EndTok Unit 128} 129 130func (is * IfStatement )statementNode () {} 131func (is * IfStatement )Pos () token.Pos { 132return is .IfTok .Pos () 133} 134func (is * IfStatement )End () token.Pos { 135return is .EndTok .Pos () 136} 137 138type IfClause struct { 139LeadingTok Unit 140Condition Expression 141ThenTok * Unit 142Body Block 143} 144 145func (ic * IfClause )statementNode () {} 146func (ic * IfClause )Pos () token.Pos { 147return ic .LeadingTok .Pos () 148} 149func (ic * IfClause )End () token.Pos { 150return ic .Body .End () 151} 152 153type LabelStatement struct { 154LeadingLabelTok Unit 155Name * Identifier 156TrailingLabelTok Unit 157} 158 159func (ls * LabelStatement )statementNode () {} 160func (ls * LabelStatement )Pos () token.Pos { 161return ls .LeadingLabelTok .Pos () 162} 163func (ls * LabelStatement )End () token.Pos { 164return ls .TrailingLabelTok .End () 165} 166func (ls * LabelStatement )leaf () {} 167 168type LocalStatement struct { 169LocalTok Unit 170Names Punctuated [* Identifier ] 171AssignTok * Unit 172Exps * Punctuated [Expression ] 173} 174 175func (ls * LocalStatement )statementNode () {} 176func (ls * LocalStatement )Pos () token.Pos { 177return ls .LocalTok .Pos () 178} 179func (ls * LocalStatement )End () token.Pos { 180if ls .Exps != nil { 181return ls .Exps .End () 182 } 183if ls .AssignTok != nil { 184return ls .AssignTok .End () 185 } 186return ls .Names .End () 187} 188 189type RepeatStatement struct { 190RepeatTok Unit 191Body Block 192UntilTok Unit 193Condition Expression 194} 195 196func (rs * RepeatStatement )statementNode () {} 197func (rs * RepeatStatement )Pos () token.Pos { 198return rs .RepeatTok .Pos () 199} 200func (rs * RepeatStatement )End () token.Pos { 201return rs .Condition .End () 202} 203 204type ReturnStatement struct { 205ReturnTok Unit 206Exps * Punctuated [Expression ] 207} 208 209func (rs * ReturnStatement )statementNode () {} 210func (rs * ReturnStatement )Pos () token.Pos { 211return rs .ReturnTok .Pos () 212} 213func (rs * ReturnStatement )End () token.Pos { 214if rs .Exps != nil { 215return rs .Exps .End () 216 } 217return rs .ReturnTok .End () 218} 219 220type SemicolonStatement Unit 221 222func (ss * SemicolonStatement )statementNode () {} 223func (ss * SemicolonStatement )Pos () token.Pos { 224return ss .Token .Pos 225} 226func (ss * SemicolonStatement )End () token.Pos { 227return ss .Token .End () 228} 229 230type WhileStatement struct { 231WhileTok Unit 232Condition Expression 233DoTok Unit 234Body Block 235EndTok Unit 236} 237 238func (ws * WhileStatement )statementNode () {} 239func (ws * WhileStatement )Pos () token.Pos { 240return ws .WhileTok .Pos () 241} 242func (ws * WhileStatement )End () token.Pos { 243return ws .EndTok .End () 244}