<!WHATEVER!> Kotlin 中的语法? (尖括号包裹感叹号)

<!WHATVER!> syntax in Kotlin? (Angle brackets wrapping exclamation points)

我在 Kotlin 编译器测试套件中看到了这个我不熟悉的语法。

// !DIAGNOSTICS: +UNUSED_LAMBDA_EXPRESSION, +UNUSED_VARIABLE

fun unusedLiteral(){
    <!UNUSED_LAMBDA_EXPRESSION!>{ ->
        val <!UNUSED_VARIABLE!>i<!> = 1
    }<!>
}

<!UNUSED_LAMBDA_EXPRESSION!>...<!> 是什么意思?

发现于unusedLiteral.kt

术语 UNUSED_LAMBDA_EXPRESSIONErrors.kt 中声明为:

DiagnosticFactory0<KtLambdaExpression> UNUSED_LAMBDA_EXPRESSION = DiagnosticFactory0.create(WARNING);

此语法在 Kotlin 中无效。它仅用于 Kotlin 测试管道的测试数据文件。也就是说,只有测试运行器可以识别这种语法,Kotlin 编译器无法识别。具体来说,<!DIAGNOSTIC_NAME!>foo<!> 语法表示一个 处理程序 。处理程序对事物进行检查,或将信息输出到文件。在这种情况下,此语法检查文件中的那个点是否确实发出了指定的诊断。

另请注意,顶部的 // !DIAGNOSTICS 评论不仅仅是评论。它表示一个指令。指令就像 运行 测试的选项。

我强烈建议您也阅读 compiler/testData/diagnostics/ReadMe.md, which explains how diagnostic tests work specifically, and if you're really interested in this stuff, check out compiler/test-infrastructure/ReadMe.md,它告诉您整个测试管道的一般工作原理。