Change slice error message

This commit is contained in:
Anton Medvedev
2022-10-13 23:56:44 +02:00
parent 573ada7443
commit f646ce37e4
2 changed files with 23 additions and 20 deletions
+20 -17
View File
@@ -356,25 +356,28 @@ func (v *visitor) MemberNode(node *ast.MemberNode) (reflect.Type, info) {
func (v *visitor) SliceNode(node *ast.SliceNode) (reflect.Type, info) {
t, _ := v.visit(node.Node)
isIndex := true // TODO: check if it is index or slice
if isIndex || isString(t) {
if node.From != nil {
from, _ := v.visit(node.From)
if !isInteger(from) {
return v.error(node.From, "invalid operation: non-integer slice index %v", from)
}
}
if node.To != nil {
to, _ := v.visit(node.To)
if !isInteger(to) {
return v.error(node.To, "invalid operation: non-integer slice index %v", to)
}
}
return t, info{}
switch t.Kind() {
case reflect.Interface:
// ok
case reflect.String, reflect.Array, reflect.Slice:
// ok
default:
return v.error(node, "cannot slice %v", t)
}
return v.error(node, "invalid operation: cannot slice %v", t)
if node.From != nil {
from, _ := v.visit(node.From)
if !isInteger(from) {
return v.error(node.From, "non-integer slice index %v", from)
}
}
if node.To != nil {
to, _ := v.visit(node.To)
if !isInteger(to) {
return v.error(node.To, "non-integer slice index %v", to)
}
}
return t, info{}
}
func (v *visitor) CallNode(node *ast.CallNode) (reflect.Type, info) {
+3 -3
View File
@@ -449,17 +449,17 @@ array elements can only be selected using an integer (got mock.Foo) (1:12)
| ...........^
ArrayOfFoo[Bool:]
invalid operation: non-integer slice index bool (1:12)
non-integer slice index bool (1:12)
| ArrayOfFoo[Bool:]
| ...........^
ArrayOfFoo[1:Bool]
invalid operation: non-integer slice index bool (1:14)
non-integer slice index bool (1:14)
| ArrayOfFoo[1:Bool]
| .............^
Bool[:]
invalid operation: cannot slice bool (1:5)
cannot slice bool (1:5)
| Bool[:]
| ....^