@@ -65,6 +65,7 @@ type Function struct {
65
65
Body []Statement // function body
66
66
Name Expr // function name
67
67
Params []* Ident // parameters
68
+ DefaultArgs []Expr // default arguments
68
69
Attr FuncAttr // function attributes
69
70
EndFunction * EndFunction // :endfunction
70
71
}
@@ -119,6 +120,7 @@ func (f *ExCall) Pos() Pos { return f.ExCall }
119
120
func (f * ExCall ) Cmd () Cmd { return * f .ExArg .Cmd }
120
121
121
122
// vimlparser: LET .ea .op .left .list .rest .right
123
+ // vimlparser: CONST .ea .op .left .list .rest .right
122
124
type Let struct {
123
125
Let Pos // position of starting the :let
124
126
ExArg ExArg // Ex command arg
@@ -341,6 +343,17 @@ type Throw struct {
341
343
func (f * Throw ) Pos () Pos { return f .Throw }
342
344
func (f * Throw ) Cmd () Cmd { return * f .ExArg .Cmd }
343
345
346
+ // vimlparser: EVAL .ea .left
347
+ // :eval {Expr}
348
+ type Eval struct {
349
+ Eval Pos // position of starting the :eval
350
+ ExArg ExArg // Ex command arg
351
+ Expr Expr
352
+ }
353
+
354
+ func (f * Eval ) Pos () Pos { return f .Eval }
355
+ func (f * Eval ) Cmd () Cmd { return * f .ExArg .Cmd }
356
+
344
357
// vimlparser: ECHO .ea .list
345
358
// vimlparser: ECHON .ea .list
346
359
// vimlparser: ECHOMSG .ea .list
@@ -426,6 +439,16 @@ type SliceExpr struct {
426
439
427
440
func (f * SliceExpr ) Pos () Pos { return f .Lbrack }
428
441
442
+ // vimlparser: METHOD .left .right
443
+ type MethodExpr struct {
444
+ Left Expr // this object
445
+ Method Expr // method
446
+ Lparen Pos // position of "("
447
+ Args []Expr // function arguments; or nil
448
+ }
449
+
450
+ func (c * MethodExpr ) Pos () Pos { return c .Lparen }
451
+
429
452
// vimlparser: CALL .left .rlist
430
453
type CallExpr struct {
431
454
Fun Expr // function expression
@@ -516,7 +539,7 @@ type Ident struct {
516
539
func (i * Ident ) Pos () Pos { return i .NamePos }
517
540
518
541
// LambdaExpr node represents lambda.
519
- // vimlparsr : LAMBDA .rlist .left
542
+ // vimlparser : LAMBDA .rlist .left
520
543
// { Params -> Expr }
521
544
type LambdaExpr struct {
522
545
Lcurlybrace Pos // position of "{"
@@ -527,14 +550,25 @@ type LambdaExpr struct {
527
550
func (i * LambdaExpr ) Pos () Pos { return i .Lcurlybrace }
528
551
529
552
// ParenExpr node represents a parenthesized expression.
530
- // vimlparsr : PARENEXPR .value
553
+ // vimlparser : PARENEXPR .value
531
554
type ParenExpr struct {
532
555
Lparen Pos // position of "("
533
556
X Expr // parenthesized expression
534
557
}
535
558
536
559
func (i * ParenExpr ) Pos () Pos { return i .Lparen }
537
560
561
+ // HeredocExpr node represents a heredoc expression.
562
+ // vimlparser: HEREDOC .rlist .op .body
563
+ type HeredocExpr struct {
564
+ OpPos Pos // position of "=<<"
565
+ Flags []Expr // modifiers [trim]; or nil
566
+ EndMarker string // {endmarker}
567
+ Body []Expr // body
568
+ }
569
+
570
+ func (i * HeredocExpr ) Pos () Pos { return i .OpPos }
571
+
538
572
// stmtNode() ensures that only ExComamnd and Comment nodes can be assigned to
539
573
// an Statement.
540
574
//
@@ -562,6 +596,7 @@ func (*Let) stmtNode() {}
562
596
func (* LockVar ) stmtNode () {}
563
597
func (* Return ) stmtNode () {}
564
598
func (* Throw ) stmtNode () {}
599
+ func (* Eval ) stmtNode () {}
565
600
func (* Try ) stmtNode () {}
566
601
func (* UnLet ) stmtNode () {}
567
602
func (* UnLockVar ) stmtNode () {}
@@ -576,6 +611,7 @@ func (*BinaryExpr) exprNode() {}
576
611
func (* UnaryExpr ) exprNode () {}
577
612
func (* SubscriptExpr ) exprNode () {}
578
613
func (* SliceExpr ) exprNode () {}
614
+ func (* MethodExpr ) exprNode () {}
579
615
func (* CallExpr ) exprNode () {}
580
616
func (* DotExpr ) exprNode () {}
581
617
func (* BasicLit ) exprNode () {}
@@ -587,3 +623,4 @@ func (*CurlyNameExpr) exprNode() {}
587
623
func (* Ident ) exprNode () {}
588
624
func (* LambdaExpr ) exprNode () {}
589
625
func (* ParenExpr ) exprNode () {}
626
+ func (* HeredocExpr ) exprNode () {}
0 commit comments