z_mirror/luapls
git clone https://git.raiguard.me/z_mirror/luapls
d89f2de
main
1package parser 2 3import ( 4"github.com/raiguard/luapls/lua/ast" 5"github.com/raiguard/luapls/lua/token" 6) 7 8func (p * Parser )parseTableFieldList () ast.Punctuated [ast.TableField ] { 9exps := ast.Punctuated [ast.TableField ]{StartPos :p .unit ().Pos ()} 10 11for { 12if p .tokIs (token .RBRACE ) { 13break 14 } 15pair := ast.Pair [ast.TableField ]{ 16Node :p .parseTableField (), 17 } 18if tableSep [p .unit ().Type ()] { 19pair .Delimeter = p .unit () 20p .next () 21 } 22exps .Pairs = append (exps .Pairs ,pair ) 23if pair .Delimeter == nil { 24break 25 } 26 } 27 28return exps 29} 30 31func (p * Parser )parseTableField () ast.TableField { 32if lbrack := p .accept (token .LBRACK );lbrack != nil { 33name := p .parseExpression (LOWEST ,true ) 34rbrack := p .expect (token .RBRACK ) 35assignTok := p .expect (token .ASSIGN ) 36expr := p .parseExpression (LOWEST ,true ) 37return & ast.TableExpressionKeyField { 38LeftBracket :* lbrack , 39Name :name , 40RightBracket :rbrack , 41AssignTok :assignTok , 42Expr :expr , 43 } 44 } 45 46expr := p .parseExpression (LOWEST ,true ) 47 48if ! p .tokIs (token .ASSIGN ) { 49return & ast.TableArrayField {Expr :expr } 50 } 51 52assignTok := p .expect (token .ASSIGN ) 53 54name ,ok := expr .(* ast.Identifier ) 55if ! ok { 56panic ("TODO: Table key was not an identifier!" ) 57 } 58 59expr = p .parseExpression (LOWEST ,true ) 60 61return & ast.TableSimpleKeyField { 62Name :* name , 63AssignTok :assignTok , 64Expr :expr , 65 } 66}