FIR checkers: report specific errors instead of INAPPLICABLE_CANDIDATE

Specifically, the report the following 4 errors.

* NON_VARARG_SPREAD
* ARGUMENT_PASSED_TWICE
* TOO_MANY_ARGUMENTS
* NO_VALUE_FOR_PARAMETER

Also added/updated the following position strategies.
* NAME_OF_NAMED_ARGUMENT
* VALUE_ARGUMENTS
This commit is contained in:
Tianyu Geng
2021-03-04 14:01:32 -08:00
committed by Mikhail Glukhikh
parent fc8d0e3ee0
commit 761a0a7d0d
143 changed files with 526 additions and 470 deletions
@@ -8,40 +8,40 @@ fun varargFn(vararg args: Int) {}
fun testNoArgs() {
noArgs()
<!INAPPLICABLE_CANDIDATE!>noArgs<!> {}
<!INAPPLICABLE_CANDIDATE!>noArgs<!>() {}
noArgs <!TOO_MANY_ARGUMENTS!>{}<!>
noArgs() <!TOO_MANY_ARGUMENTS!>{}<!>
noArgs() // {}
<!INAPPLICABLE_CANDIDATE!>noArgs<!>() /* */ {}
<!INAPPLICABLE_CANDIDATE!>noArgs<!>() /*
noArgs() /* */ <!TOO_MANY_ARGUMENTS!>{}<!>
noArgs() /*
block comment, no new line
*/ {}
<!INAPPLICABLE_CANDIDATE!>noArgs<!>()
*/ <!TOO_MANY_ARGUMENTS!>{}<!>
noArgs()
/*
block comment with new line
*/
{}
<!INAPPLICABLE_CANDIDATE!>noArgs<!>() // comment
<!TOO_MANY_ARGUMENTS!>{}<!>
noArgs() // comment
// comment
{}
<!INAPPLICABLE_CANDIDATE!>noArgs<!>() {} {}
<!INAPPLICABLE_CANDIDATE!>noArgs<!>() {}
{}
<!TOO_MANY_ARGUMENTS!>{}<!>
noArgs() <!TOO_MANY_ARGUMENTS!>{}<!> <!TOO_MANY_ARGUMENTS!>{}<!>
noArgs() <!TOO_MANY_ARGUMENTS!>{}<!>
<!TOO_MANY_ARGUMENTS!>{}<!>
}
fun testLambdaArg() {
<!INAPPLICABLE_CANDIDATE!>oneLambdaArg<!>()
oneLambdaArg(<!NO_VALUE_FOR_PARAMETER!>)<!>
oneLambdaArg {}
oneLambdaArg()
{}
<!INAPPLICABLE_CANDIDATE!>oneLambdaArg<!>()
oneLambdaArg()
{}
{}
<!INAPPLICABLE_CANDIDATE!>oneLambdaArg<!>(
<!TOO_MANY_ARGUMENTS!>{}<!>
oneLambdaArg(
{},
{}
<!TOO_MANY_ARGUMENTS!>{}<!>
)
oneLambdaArg() {}
<!INAPPLICABLE_CANDIDATE!>oneLambdaArg<!>() // {}
oneLambdaArg(<!NO_VALUE_FOR_PARAMETER!>)<!> // {}
oneLambdaArg() /* */ {}
oneLambdaArg() /*
block
@@ -50,21 +50,21 @@ fun testLambdaArg() {
oneLambdaArg() // comment
// comment
{}
<!INAPPLICABLE_CANDIDATE!>oneLambdaArg<!>() {}/*
oneLambdaArg() {}/*
block comment, no new line
*/ {}
<!INAPPLICABLE_CANDIDATE!>oneLambdaArg<!>() {}/*
*/ <!TOO_MANY_ARGUMENTS!>{}<!>
oneLambdaArg() {}/*
block comment with new line
*/
{}
<!INAPPLICABLE_CANDIDATE!>oneLambdaArg<!>() {}// comment
<!TOO_MANY_ARGUMENTS!>{}<!>
oneLambdaArg() {}// comment
// comment
{}
<!INAPPLICABLE_CANDIDATE!>oneLambdaArg<!>() {} {}
<!INAPPLICABLE_CANDIDATE!>oneLambdaArg<!>() {}
{}
<!INAPPLICABLE_CANDIDATE!>oneLambdaArg<!>() {} // comment
{}
<!TOO_MANY_ARGUMENTS!>{}<!>
oneLambdaArg() {} <!TOO_MANY_ARGUMENTS!>{}<!>
oneLambdaArg() {}
<!TOO_MANY_ARGUMENTS!>{}<!>
oneLambdaArg() {} // comment
<!TOO_MANY_ARGUMENTS!>{}<!>
}
fun testVararg() {
@@ -101,9 +101,9 @@ fun testTwoLambdas() {
{}
return if (true) {
<!INAPPLICABLE_CANDIDATE!>twoLambdaArgs<!>({})
{}
twoLambdaArgs({})
{}
<!TOO_MANY_ARGUMENTS!>{}<!>
} else {
{}
}
@@ -112,7 +112,7 @@ fun testTwoLambdas() {
fun f1(): (() -> Unit) -> (() -> Unit) -> Unit {
return { l1 ->
<!INAPPLICABLE_CANDIDATE!>l1<!>()
{ l2 -> <!UNRESOLVED_REFERENCE!>l2<!>() }
l1()
<!TOO_MANY_ARGUMENTS!>{ l2 -> <!UNRESOLVED_REFERENCE!>l2<!>() }<!>
}
}