@@ -25,6 +25,7 @@ type ExCommand interface {
25
25
// Expr is the interface for expression.
26
26
type Expr interface {
27
27
Node
28
+ exprNode ()
28
29
}
29
30
30
31
// File node represents a Vim script source file.
@@ -480,7 +481,7 @@ type CurlyName struct {
480
481
func (c * CurlyName ) Pos () Pos { return c .CurlyName }
481
482
482
483
type CurlyNamePart interface {
483
- Node
484
+ Expr
484
485
IsCurlyExpr () bool
485
486
}
486
487
@@ -522,3 +523,22 @@ type LambdaExpr struct {
522
523
}
523
524
524
525
func (i * LambdaExpr ) Pos () Pos { return i .Lcurlybrace }
526
+
527
+ // exprNode() ensures that only expression nodes can be assigned to an Expr.
528
+ //
529
+ func (* TernaryExpr ) exprNode () {}
530
+ func (* BinaryExpr ) exprNode () {}
531
+ func (* UnaryExpr ) exprNode () {}
532
+ func (* SubscriptExpr ) exprNode () {}
533
+ func (* SliceExpr ) exprNode () {}
534
+ func (* CallExpr ) exprNode () {}
535
+ func (* DotExpr ) exprNode () {}
536
+ func (* BasicLit ) exprNode () {}
537
+ func (* List ) exprNode () {}
538
+ func (* Dict ) exprNode () {}
539
+ func (* KeyValue ) exprNode () {}
540
+ func (* CurlyName ) exprNode () {}
541
+ func (* CurlyNameLit ) exprNode () {}
542
+ func (* CurlyNameExpr ) exprNode () {}
543
+ func (* Ident ) exprNode () {}
544
+ func (* LambdaExpr ) exprNode () {}
0 commit comments