Added more tests
This commit is contained in:
parent
8421a21c9a
commit
85568949a2
@ -18,6 +18,7 @@ var (
|
|||||||
MissingGroupEnd = &Base{"Missing ')'"}
|
MissingGroupEnd = &Base{"Missing ')'"}
|
||||||
MissingMainFunction = &Base{"Missing main function"}
|
MissingMainFunction = &Base{"Missing main function"}
|
||||||
MissingOperand = &Base{"Missing operand"}
|
MissingOperand = &Base{"Missing operand"}
|
||||||
|
MissingParameter = &Base{"Missing parameter"}
|
||||||
MissingType = &Base{"Missing type"}
|
MissingType = &Base{"Missing type"}
|
||||||
NotImplemented = &Base{"Not implemented"}
|
NotImplemented = &Base{"Not implemented"}
|
||||||
UnknownType = &Base{"Unknown type"}
|
UnknownType = &Base{"Unknown type"}
|
||||||
|
@ -164,7 +164,11 @@ func (s *Scanner) scanFunction(file *fs.File, tokens token.List, i int) (int, er
|
|||||||
count := 0
|
count := 0
|
||||||
|
|
||||||
err := parameters.Split(func(tokens token.List) error {
|
err := parameters.Split(func(tokens token.List) error {
|
||||||
if len(tokens) < 2 {
|
if len(tokens) == 0 {
|
||||||
|
return errors.New(errors.MissingParameter, file, parameters[0].Position)
|
||||||
|
}
|
||||||
|
|
||||||
|
if len(tokens) == 1 {
|
||||||
return errors.New(errors.MissingType, file, tokens[0].End())
|
return errors.New(errors.MissingType, file, tokens[0].End())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -31,6 +31,10 @@ func (list List) LastIndexKind(kind Kind) int {
|
|||||||
|
|
||||||
// Split calls the callback function on each set of tokens in a comma separated list.
|
// Split calls the callback function on each set of tokens in a comma separated list.
|
||||||
func (list List) Split(call func(List) error) error {
|
func (list List) Split(call func(List) error) error {
|
||||||
|
if len(list) == 0 {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
start := 0
|
start := 0
|
||||||
groupLevel := 0
|
groupLevel := 0
|
||||||
|
|
||||||
@ -58,12 +62,8 @@ func (list List) Split(call func(List) error) error {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if start != len(list) {
|
parameter := list[start:]
|
||||||
parameter := list[start:]
|
return call(parameter)
|
||||||
return call(parameter)
|
|
||||||
}
|
|
||||||
|
|
||||||
return nil
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Text returns the concatenated token text.
|
// Text returns the concatenated token text.
|
||||||
|
1
tests/errors/MissingParameter.q
Normal file
1
tests/errors/MissingParameter.q
Normal file
@ -0,0 +1 @@
|
|||||||
|
f(,) {}
|
1
tests/errors/MissingParameter2.q
Normal file
1
tests/errors/MissingParameter2.q
Normal file
@ -0,0 +1 @@
|
|||||||
|
f(a Int,) -> Int { return a }
|
1
tests/errors/MissingParameter3.q
Normal file
1
tests/errors/MissingParameter3.q
Normal file
@ -0,0 +1 @@
|
|||||||
|
f(,a Int) {}
|
1
tests/errors/MissingType.q
Normal file
1
tests/errors/MissingType.q
Normal file
@ -0,0 +1 @@
|
|||||||
|
f(a) {}
|
@ -40,6 +40,10 @@ var errs = []struct {
|
|||||||
{"MissingMainFunction.q", errors.MissingMainFunction},
|
{"MissingMainFunction.q", errors.MissingMainFunction},
|
||||||
{"MissingOperand.q", errors.MissingOperand},
|
{"MissingOperand.q", errors.MissingOperand},
|
||||||
{"MissingOperand2.q", errors.MissingOperand},
|
{"MissingOperand2.q", errors.MissingOperand},
|
||||||
|
{"MissingParameter.q", errors.MissingParameter},
|
||||||
|
{"MissingParameter2.q", errors.MissingParameter},
|
||||||
|
{"MissingParameter3.q", errors.MissingParameter},
|
||||||
|
{"MissingType.q", errors.MissingType},
|
||||||
{"ReturnCountMismatch.q", &errors.ReturnCountMismatch{Count: 1, ExpectedCount: 0}},
|
{"ReturnCountMismatch.q", &errors.ReturnCountMismatch{Count: 1, ExpectedCount: 0}},
|
||||||
{"TypeMismatch.q", &errors.TypeMismatch{Expected: "Pointer", Encountered: "Int64", ParameterName: "p"}},
|
{"TypeMismatch.q", &errors.TypeMismatch{Expected: "Pointer", Encountered: "Int64", ParameterName: "p"}},
|
||||||
{"UnknownFunction.q", &errors.UnknownFunction{Name: "unknown"}},
|
{"UnknownFunction.q", &errors.UnknownFunction{Name: "unknown"}},
|
||||||
|
Loading…
x
Reference in New Issue
Block a user