[JS IR] Add CLI argument to setup error tolerance policy

-  Make sure dev mode is enabled if code with errors is allowed
This commit is contained in:
Roman Artemev
2020-07-08 14:16:52 +03:00
parent 8a810e2a5e
commit a60782f3df
8 changed files with 67 additions and 19 deletions
@@ -22,6 +22,7 @@ import org.jetbrains.kotlin.incremental.components.ExpectActualTracker
import org.jetbrains.kotlin.incremental.components.LookupTracker
import org.jetbrains.kotlin.incremental.js.IncrementalDataProvider
import org.jetbrains.kotlin.js.analyzer.JsAnalysisResult
import org.jetbrains.kotlin.js.config.ErrorTolerancePolicy
import org.jetbrains.kotlin.js.config.JSConfigurationKeys
import org.jetbrains.kotlin.js.config.JsConfig
import org.jetbrains.kotlin.js.resolve.JsPlatformAnalyzerServices
@@ -114,10 +115,14 @@ abstract class AbstractTopDownAnalyzerFacadeForJS {
return JsAnalysisResult.success(trace, moduleContext.module)
}
fun checkForErrors(allFiles: Collection<KtFile>, bindingContext: BindingContext) {
AnalyzingUtils.throwExceptionOnErrors(bindingContext)
for (file in allFiles) {
AnalyzingUtils.checkForSyntacticErrors(file)
fun checkForErrors(allFiles: Collection<KtFile>, bindingContext: BindingContext, errorPolicy: ErrorTolerancePolicy) {
if (!errorPolicy.allowSemanticErrors) {
AnalyzingUtils.throwExceptionOnErrors(bindingContext)
}
if (!errorPolicy.allowSyntaxErrors) {
for (file in allFiles) {
AnalyzingUtils.checkForSyntacticErrors(file)
}
}
}
}
@@ -0,0 +1,27 @@
/*
* Copyright 2010-2020 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.js.config
enum class ErrorTolerancePolicy(val allowSyntaxErrors: Boolean, val allowSemanticErrors: Boolean) {
NONE(false, false),
SEMANTIC(false, true),
ALL(true, true);
val allowErrors: Boolean get() = allowSyntaxErrors || allowSemanticErrors
companion object {
val DEFAULT = NONE
fun resolvePolicy(key: String): ErrorTolerancePolicy {
return when (key.toUpperCase()) {
"NONE" -> NONE
"SEMANTIC" -> SEMANTIC
"SYNTAX", "ALL" -> ALL
else -> error("Unknown error tolerance policy '$key'")
}
}
}
}
@@ -86,4 +86,7 @@ public class JSConfigurationKeys {
public static final CompilerConfigurationKey<Boolean> DISABLE_FAKE_OVERRIDE_VALIDATOR =
CompilerConfigurationKey.create("disable IR fake override validator");
public static final CompilerConfigurationKey<ErrorTolerancePolicy> ERROR_TOLERANCE_POLICY =
CompilerConfigurationKey.create("set up policy to ignore compilation errors");
}