[FIR JS] Report WRONG_JS_QUALIFIER for the argument of JsQualifier
This commit is contained in:
committed by
Space Team
parent
73c89a5d9d
commit
f422a3a4e8
+6
-1
@@ -7,7 +7,12 @@ package org.jetbrains.kotlin.fir.checkers.generator.diagnostics
|
||||
|
||||
import org.jetbrains.kotlin.fir.PrivateForInline
|
||||
import org.jetbrains.kotlin.fir.checkers.generator.diagnostics.model.DiagnosticList
|
||||
import org.jetbrains.kotlin.psi.KtElement
|
||||
|
||||
@Suppress("UNUSED_VARIABLE", "LocalVariableName", "ClassName", "unused")
|
||||
@OptIn(PrivateForInline::class)
|
||||
object JS_DIAGNOSTICS_LIST : DiagnosticList("FirJsErrors")
|
||||
object JS_DIAGNOSTICS_LIST : DiagnosticList("FirJsErrors") {
|
||||
val ANNOTATIONS by object : DiagnosticGroup("Annotations") {
|
||||
val WRONG_JS_QUALIFIER by error<KtElement>()
|
||||
}
|
||||
}
|
||||
|
||||
@@ -6,6 +6,7 @@ plugins {
|
||||
}
|
||||
|
||||
dependencies {
|
||||
api(project(":core:compiler.common.js"))
|
||||
api(project(":compiler:fir:checkers"))
|
||||
|
||||
/*
|
||||
|
||||
+4
@@ -8,6 +8,7 @@ package org.jetbrains.kotlin.fir.analysis.diagnostics.js
|
||||
import org.jetbrains.kotlin.diagnostics.*
|
||||
import org.jetbrains.kotlin.diagnostics.rendering.RootDiagnosticRendererFactory
|
||||
import org.jetbrains.kotlin.fir.analysis.diagnostics.*
|
||||
import org.jetbrains.kotlin.psi.KtElement
|
||||
|
||||
/*
|
||||
* This file was generated automatically
|
||||
@@ -15,6 +16,9 @@ import org.jetbrains.kotlin.fir.analysis.diagnostics.*
|
||||
*/
|
||||
|
||||
object FirJsErrors {
|
||||
// Annotations
|
||||
val WRONG_JS_QUALIFIER by error0<KtElement>()
|
||||
|
||||
init {
|
||||
RootDiagnosticRendererFactory.registerFactory(FirJsErrorsDefaultMessages)
|
||||
}
|
||||
|
||||
+6
-1
@@ -7,9 +7,14 @@ package org.jetbrains.kotlin.fir.analysis.diagnostics.js
|
||||
|
||||
import org.jetbrains.kotlin.diagnostics.KtDiagnosticFactoryToRendererMap
|
||||
import org.jetbrains.kotlin.diagnostics.rendering.BaseDiagnosticRendererFactory
|
||||
import org.jetbrains.kotlin.fir.analysis.diagnostics.checkMissingMessages
|
||||
import org.jetbrains.kotlin.fir.analysis.diagnostics.js.FirJsErrors.WRONG_JS_QUALIFIER
|
||||
|
||||
@Suppress("unused")
|
||||
object FirJsErrorsDefaultMessages : BaseDiagnosticRendererFactory() {
|
||||
override val MAP = KtDiagnosticFactoryToRendererMap("FIR").also { _ ->
|
||||
override val MAP = KtDiagnosticFactoryToRendererMap("FIR").also { map ->
|
||||
map.put(WRONG_JS_QUALIFIER, "Qualifier contains illegal characters")
|
||||
|
||||
map.checkMissingMessages(FirJsErrors)
|
||||
}
|
||||
}
|
||||
+7
-1
@@ -6,5 +6,11 @@
|
||||
package org.jetbrains.kotlin.fir.analysis.js.checkers
|
||||
|
||||
import org.jetbrains.kotlin.fir.analysis.checkers.expression.*
|
||||
import org.jetbrains.kotlin.fir.analysis.js.checkers.expression.FirJsQualifierChecker
|
||||
|
||||
object JsExpressionCheckers : ExpressionCheckers()
|
||||
object JsExpressionCheckers : ExpressionCheckers() {
|
||||
override val annotationCallCheckers: Set<FirAnnotationCallChecker>
|
||||
get() = setOf(
|
||||
FirJsQualifierChecker,
|
||||
)
|
||||
}
|
||||
|
||||
+33
@@ -0,0 +1,33 @@
|
||||
/*
|
||||
* Copyright 2010-2023 JetBrains s.r.o. and Kotlin Programming Language contributors.
|
||||
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
|
||||
*/
|
||||
|
||||
package org.jetbrains.kotlin.fir.analysis.js.checkers.expression
|
||||
|
||||
import org.jetbrains.kotlin.diagnostics.DiagnosticReporter
|
||||
import org.jetbrains.kotlin.diagnostics.reportOn
|
||||
import org.jetbrains.kotlin.fir.analysis.checkers.context.CheckerContext
|
||||
import org.jetbrains.kotlin.fir.analysis.checkers.expression.FirAnnotationCallChecker
|
||||
import org.jetbrains.kotlin.fir.analysis.diagnostics.js.FirJsErrors
|
||||
import org.jetbrains.kotlin.fir.declarations.fullyExpandedClassId
|
||||
import org.jetbrains.kotlin.fir.expressions.FirAnnotationCall
|
||||
import org.jetbrains.kotlin.fir.expressions.FirConstExpression
|
||||
import org.jetbrains.kotlin.js.validateQualifier
|
||||
import org.jetbrains.kotlin.name.JsStandardClassIds.Annotations.JsQualifier
|
||||
|
||||
object FirJsQualifierChecker : FirAnnotationCallChecker() {
|
||||
override fun check(expression: FirAnnotationCall, context: CheckerContext, reporter: DiagnosticReporter) {
|
||||
val annotationFqName = expression.fullyExpandedClassId(context.session)
|
||||
|
||||
if (annotationFqName != JsQualifier) {
|
||||
return
|
||||
}
|
||||
|
||||
val string = (expression.argumentMapping.mapping.values.firstOrNull() as? FirConstExpression<*>)?.value as? String ?: return
|
||||
|
||||
if (!validateQualifier(string)) {
|
||||
reporter.reportOn(expression.argumentList.arguments.first().source, FirJsErrors.WRONG_JS_QUALIFIER, context)
|
||||
}
|
||||
}
|
||||
}
|
||||
-17
@@ -1,17 +0,0 @@
|
||||
// FILE: a.kt
|
||||
@file:JsQualifier("")
|
||||
|
||||
// FILE: b.kt
|
||||
@file:JsQualifier("a..b")
|
||||
|
||||
// FILE: c.kt
|
||||
@file:JsQualifier("a.")
|
||||
|
||||
// FILE: d.kt
|
||||
@file:JsQualifier(".a")
|
||||
|
||||
// FILE: e.kt
|
||||
@file:JsQualifier("%^&")
|
||||
|
||||
// FILE: f.kt
|
||||
@file:JsQualifier("a.bc.d23._$")
|
||||
+8
-1
@@ -1,3 +1,4 @@
|
||||
// FIR_IDENTICAL
|
||||
// FILE: a.kt
|
||||
@file:JsQualifier(<!WRONG_JS_QUALIFIER!>""<!>)
|
||||
|
||||
@@ -14,4 +15,10 @@
|
||||
@file:JsQualifier(<!WRONG_JS_QUALIFIER!>"%^&"<!>)
|
||||
|
||||
// FILE: f.kt
|
||||
@file:JsQualifier("a.bc.d23._$")
|
||||
@file:JsQualifier("a.bc.d23._$")
|
||||
|
||||
// FILE: g.kt
|
||||
typealias JsQ = JsQualifier
|
||||
|
||||
// FILE: h.kt
|
||||
@file:JsQ(<!WRONG_JS_QUALIFIER!>value = "%^&"<!>)
|
||||
|
||||
@@ -1 +1,4 @@
|
||||
package
|
||||
|
||||
public typealias JsQ = kotlin.js.JsQualifier
|
||||
|
||||
|
||||
Reference in New Issue
Block a user