Scripts: switch ScriptReportSink to new scripting API
Use ScriptDiagnostic instead of ScripReport
This commit is contained in:
+15
-14
@@ -38,7 +38,8 @@ import com.intellij.psi.PsiFile
|
|||||||
import com.intellij.util.ui.UIUtil
|
import com.intellij.util.ui.UIUtil
|
||||||
import org.jetbrains.kotlin.idea.core.script.IdeScriptReportSink
|
import org.jetbrains.kotlin.idea.core.script.IdeScriptReportSink
|
||||||
import org.jetbrains.kotlin.psi.KtFile
|
import org.jetbrains.kotlin.psi.KtFile
|
||||||
import kotlin.script.experimental.dependencies.ScriptReport
|
import kotlin.script.experimental.api.ScriptDiagnostic
|
||||||
|
import kotlin.script.experimental.api.SourceCode
|
||||||
|
|
||||||
class ScriptExternalHighlightingPass(
|
class ScriptExternalHighlightingPass(
|
||||||
private val file: KtFile,
|
private val file: KtFile,
|
||||||
@@ -53,8 +54,8 @@ class ScriptExternalHighlightingPass(
|
|||||||
|
|
||||||
val reports = IdeScriptReportSink.getReports(file.virtualFile)
|
val reports = IdeScriptReportSink.getReports(file.virtualFile)
|
||||||
|
|
||||||
val annotations = reports.mapNotNull { (message, severity, position) ->
|
val annotations = reports.mapNotNull { (message, severity, _ , location) ->
|
||||||
val (startOffset, endOffset) = position?.let { computeOffsets(document, position) } ?: 0 to 0
|
val (startOffset, endOffset) = location?.let { computeOffsets(document, it) } ?: 0 to 0
|
||||||
val annotation = Annotation(
|
val annotation = Annotation(
|
||||||
startOffset,
|
startOffset,
|
||||||
endOffset,
|
endOffset,
|
||||||
@@ -73,14 +74,14 @@ class ScriptExternalHighlightingPass(
|
|||||||
UpdateHighlightersUtil.setHighlightersToEditor(myProject, myDocument!!, 0, file.textLength, infos, colorsScheme, id)
|
UpdateHighlightersUtil.setHighlightersToEditor(myProject, myDocument!!, 0, file.textLength, infos, colorsScheme, id)
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun computeOffsets(document: Document, position: ScriptReport.Position): Pair<Int, Int> {
|
private fun computeOffsets(document: Document, position: SourceCode.Location): Pair<Int, Int> {
|
||||||
val startLine = position.startLine.coerceLineIn(document)
|
val startLine = position.start.line.coerceLineIn(document)
|
||||||
val startOffset = document.offsetBy(startLine, position.startColumn)
|
val startOffset = document.offsetBy(startLine, position.start.col)
|
||||||
|
|
||||||
val endLine = position.endLine?.coerceAtLeast(startLine)?.coerceLineIn(document) ?: startLine
|
val endLine = position.end?.line?.coerceAtLeast(startLine)?.coerceLineIn(document) ?: startLine
|
||||||
val endOffset = document.offsetBy(
|
val endOffset = document.offsetBy(
|
||||||
endLine,
|
endLine,
|
||||||
position.endColumn ?: document.getLineEndOffset(endLine)
|
position.end?.col ?: document.getLineEndOffset(endLine)
|
||||||
).coerceAtLeast(startOffset)
|
).coerceAtLeast(startOffset)
|
||||||
|
|
||||||
return startOffset to endOffset
|
return startOffset to endOffset
|
||||||
@@ -92,13 +93,13 @@ class ScriptExternalHighlightingPass(
|
|||||||
return (getLineStartOffset(line) + col).coerceIn(getLineStartOffset(line), getLineEndOffset(line))
|
return (getLineStartOffset(line) + col).coerceIn(getLineStartOffset(line), getLineEndOffset(line))
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun ScriptReport.Severity.convertSeverity(): HighlightSeverity? {
|
private fun ScriptDiagnostic.Severity.convertSeverity(): HighlightSeverity? {
|
||||||
return when (this) {
|
return when (this) {
|
||||||
ScriptReport.Severity.FATAL -> ERROR
|
ScriptDiagnostic.Severity.FATAL -> ERROR
|
||||||
ScriptReport.Severity.ERROR -> ERROR
|
ScriptDiagnostic.Severity.ERROR -> ERROR
|
||||||
ScriptReport.Severity.WARNING -> WARNING
|
ScriptDiagnostic.Severity.WARNING -> WARNING
|
||||||
ScriptReport.Severity.INFO -> INFORMATION
|
ScriptDiagnostic.Severity.INFO -> INFORMATION
|
||||||
ScriptReport.Severity.DEBUG -> if (ApplicationManager.getApplication().isInternal) INFORMATION else null
|
ScriptDiagnostic.Severity.DEBUG -> if (ApplicationManager.getApplication().isInternal) INFORMATION else null
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+15
-14
@@ -41,7 +41,8 @@ import org.jetbrains.kotlin.idea.core.script.ScriptDefinitionsManager
|
|||||||
import org.jetbrains.kotlin.idea.core.script.ScriptDependenciesManager
|
import org.jetbrains.kotlin.idea.core.script.ScriptDependenciesManager
|
||||||
import org.jetbrains.kotlin.idea.core.script.ScriptsCompilationConfigurationUpdater
|
import org.jetbrains.kotlin.idea.core.script.ScriptsCompilationConfigurationUpdater
|
||||||
import org.jetbrains.kotlin.psi.KtFile
|
import org.jetbrains.kotlin.psi.KtFile
|
||||||
import kotlin.script.experimental.dependencies.ScriptReport
|
import kotlin.script.experimental.api.ScriptDiagnostic
|
||||||
|
import kotlin.script.experimental.api.SourceCode
|
||||||
|
|
||||||
class ScriptExternalHighlightingPass(
|
class ScriptExternalHighlightingPass(
|
||||||
private val file: KtFile,
|
private val file: KtFile,
|
||||||
@@ -74,8 +75,8 @@ class ScriptExternalHighlightingPass(
|
|||||||
|
|
||||||
val reports = IdeScriptReportSink.getReports(file.virtualFile)
|
val reports = IdeScriptReportSink.getReports(file.virtualFile)
|
||||||
|
|
||||||
val annotations = reports.mapNotNull { (message, severity, position) ->
|
val annotations = reports.mapNotNull { (message, severity, _ , location) ->
|
||||||
val (startOffset, endOffset) = position?.let { computeOffsets(document, position) } ?: 0 to 0
|
val (startOffset, endOffset) = location?.let { computeOffsets(document, it) } ?: 0 to 0
|
||||||
val annotation = Annotation(
|
val annotation = Annotation(
|
||||||
startOffset,
|
startOffset,
|
||||||
endOffset,
|
endOffset,
|
||||||
@@ -94,14 +95,14 @@ class ScriptExternalHighlightingPass(
|
|||||||
UpdateHighlightersUtil.setHighlightersToEditor(myProject, myDocument!!, 0, file.textLength, infos, colorsScheme, id)
|
UpdateHighlightersUtil.setHighlightersToEditor(myProject, myDocument!!, 0, file.textLength, infos, colorsScheme, id)
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun computeOffsets(document: Document, position: ScriptReport.Position): Pair<Int, Int> {
|
private fun computeOffsets(document: Document, position: SourceCode.Location): Pair<Int, Int> {
|
||||||
val startLine = position.startLine.coerceLineIn(document)
|
val startLine = position.start.line.coerceLineIn(document)
|
||||||
val startOffset = document.offsetBy(startLine, position.startColumn)
|
val startOffset = document.offsetBy(startLine, position.start.col)
|
||||||
|
|
||||||
val endLine = position.endLine?.coerceAtLeast(startLine)?.coerceLineIn(document) ?: startLine
|
val endLine = position.end?.line?.coerceAtLeast(startLine)?.coerceLineIn(document) ?: startLine
|
||||||
val endOffset = document.offsetBy(
|
val endOffset = document.offsetBy(
|
||||||
endLine,
|
endLine,
|
||||||
position.endColumn ?: document.getLineEndOffset(endLine)
|
position.end?.col ?: document.getLineEndOffset(endLine)
|
||||||
).coerceAtLeast(startOffset)
|
).coerceAtLeast(startOffset)
|
||||||
|
|
||||||
return startOffset to endOffset
|
return startOffset to endOffset
|
||||||
@@ -113,13 +114,13 @@ class ScriptExternalHighlightingPass(
|
|||||||
return (getLineStartOffset(line) + col).coerceIn(getLineStartOffset(line), getLineEndOffset(line))
|
return (getLineStartOffset(line) + col).coerceIn(getLineStartOffset(line), getLineEndOffset(line))
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun ScriptReport.Severity.convertSeverity(): HighlightSeverity? {
|
private fun ScriptDiagnostic.Severity.convertSeverity(): HighlightSeverity? {
|
||||||
return when (this) {
|
return when (this) {
|
||||||
ScriptReport.Severity.FATAL -> ERROR
|
ScriptDiagnostic.Severity.FATAL -> ERROR
|
||||||
ScriptReport.Severity.ERROR -> ERROR
|
ScriptDiagnostic.Severity.ERROR -> ERROR
|
||||||
ScriptReport.Severity.WARNING -> WARNING
|
ScriptDiagnostic.Severity.WARNING -> WARNING
|
||||||
ScriptReport.Severity.INFO -> INFORMATION
|
ScriptDiagnostic.Severity.INFO -> INFORMATION
|
||||||
ScriptReport.Severity.DEBUG -> if (ApplicationManager.getApplication().isInternal) INFORMATION else null
|
ScriptDiagnostic.Severity.DEBUG -> if (ApplicationManager.getApplication().isInternal) INFORMATION else null
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -25,14 +25,14 @@ import com.intellij.psi.PsiManager
|
|||||||
import com.intellij.ui.EditorNotifications
|
import com.intellij.ui.EditorNotifications
|
||||||
import org.jetbrains.kotlin.psi.UserDataProperty
|
import org.jetbrains.kotlin.psi.UserDataProperty
|
||||||
import org.jetbrains.kotlin.scripting.resolve.ScriptReportSink
|
import org.jetbrains.kotlin.scripting.resolve.ScriptReportSink
|
||||||
import kotlin.script.experimental.dependencies.ScriptReport
|
import kotlin.script.experimental.api.ScriptDiagnostic
|
||||||
|
|
||||||
class IdeScriptReportSink(val project: Project) : ScriptReportSink {
|
class IdeScriptReportSink(val project: Project) : ScriptReportSink {
|
||||||
override fun attachReports(scriptFile: VirtualFile, reports: List<ScriptReport>) {
|
override fun attachReports(scriptFile: VirtualFile, reports: List<ScriptDiagnostic>) {
|
||||||
if (getReports(scriptFile) == reports) return
|
if (getReports(scriptFile) == reports) return
|
||||||
|
|
||||||
// TODO: persist errors between launches?
|
// TODO: persist errors between launches?
|
||||||
scriptFile.scriptReports = reports
|
scriptFile.scriptDiagnostics = reports
|
||||||
|
|
||||||
ApplicationManager.getApplication().invokeLater {
|
ApplicationManager.getApplication().invokeLater {
|
||||||
if (scriptFile.isValid && !project.isDisposed) {
|
if (scriptFile.isValid && !project.isDisposed) {
|
||||||
@@ -45,10 +45,10 @@ class IdeScriptReportSink(val project: Project) : ScriptReportSink {
|
|||||||
}
|
}
|
||||||
|
|
||||||
companion object {
|
companion object {
|
||||||
fun getReports(file: VirtualFile): List<ScriptReport> {
|
fun getReports(file: VirtualFile): List<ScriptDiagnostic> {
|
||||||
return file.scriptReports ?: emptyList()
|
return file.scriptDiagnostics ?: emptyList()
|
||||||
}
|
}
|
||||||
|
|
||||||
private var VirtualFile.scriptReports: List<ScriptReport>? by UserDataProperty(Key.create("KOTLIN_SCRIPT_REPORTS"))
|
private var VirtualFile.scriptDiagnostics: List<ScriptDiagnostic>? by UserDataProperty(Key.create("KOTLIN_SCRIPT_DIAGNOSTICS"))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
+1
-2
@@ -20,7 +20,6 @@ import org.jetbrains.kotlin.scripting.resolve.ScriptCompilationConfigurationWrap
|
|||||||
import org.jetbrains.kotlin.scripting.resolve.ScriptReportSink
|
import org.jetbrains.kotlin.scripting.resolve.ScriptReportSink
|
||||||
import kotlin.script.experimental.api.ResultWithDiagnostics
|
import kotlin.script.experimental.api.ResultWithDiagnostics
|
||||||
import kotlin.script.experimental.api.valueOrNull
|
import kotlin.script.experimental.api.valueOrNull
|
||||||
import kotlin.script.experimental.jvm.compat.mapToLegacyReports
|
|
||||||
|
|
||||||
// TODO: rename and provide alias for compatibility - this is not only about dependencies anymore
|
// TODO: rename and provide alias for compatibility - this is not only about dependencies anymore
|
||||||
abstract class ScriptDependenciesLoader(protected val project: Project) {
|
abstract class ScriptDependenciesLoader(protected val project: Project) {
|
||||||
@@ -77,7 +76,7 @@ abstract class ScriptDependenciesLoader(protected val project: Project) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private fun attachReportsIfChanged(result: ResultWithDiagnostics<*>, file: VirtualFile) {
|
private fun attachReportsIfChanged(result: ResultWithDiagnostics<*>, file: VirtualFile) {
|
||||||
reporter.attachReports(file, result.reports.mapToLegacyReports())
|
reporter.attachReports(file, result.reports)
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun save(compilationConfigurationResult: ScriptCompilationConfigurationResult?, file: VirtualFile) {
|
private fun save(compilationConfigurationResult: ScriptCompilationConfigurationResult?, file: VirtualFile) {
|
||||||
|
|||||||
+2
-2
@@ -17,8 +17,8 @@
|
|||||||
package org.jetbrains.kotlin.scripting.resolve
|
package org.jetbrains.kotlin.scripting.resolve
|
||||||
|
|
||||||
import com.intellij.openapi.vfs.VirtualFile
|
import com.intellij.openapi.vfs.VirtualFile
|
||||||
import kotlin.script.experimental.dependencies.ScriptReport
|
import kotlin.script.experimental.api.ScriptDiagnostic
|
||||||
|
|
||||||
interface ScriptReportSink {
|
interface ScriptReportSink {
|
||||||
fun attachReports(scriptFile: VirtualFile, reports: List<ScriptReport>)
|
fun attachReports(scriptFile: VirtualFile, reports: List<ScriptDiagnostic>)
|
||||||
}
|
}
|
||||||
+1
-1
@@ -39,7 +39,7 @@ class CliScriptDependenciesProvider(private val project: Project) : ScriptDepend
|
|||||||
if (scriptDef != null) {
|
if (scriptDef != null) {
|
||||||
val result = refineScriptCompilationConfiguration(VirtualFileScriptSource(file), scriptDef, project)
|
val result = refineScriptCompilationConfiguration(VirtualFileScriptSource(file), scriptDef, project)
|
||||||
|
|
||||||
ServiceManager.getService(project, ScriptReportSink::class.java)?.attachReports(file, result.reports.mapToLegacyReports())
|
ServiceManager.getService(project, ScriptReportSink::class.java)?.attachReports(file, result.reports)
|
||||||
|
|
||||||
if (result is ResultWithDiagnostics.Success) {
|
if (result is ResultWithDiagnostics.Success) {
|
||||||
log.info("[kts] new cached deps for $path: ${result.value.dependenciesClassPath.joinToString(File.pathSeparator)}")
|
log.info("[kts] new cached deps for $path: ${result.value.dependenciesClassPath.joinToString(File.pathSeparator)}")
|
||||||
|
|||||||
+13
-12
@@ -10,27 +10,28 @@ import org.jetbrains.kotlin.cli.common.messages.CompilerMessageLocation
|
|||||||
import org.jetbrains.kotlin.cli.common.messages.CompilerMessageSeverity
|
import org.jetbrains.kotlin.cli.common.messages.CompilerMessageSeverity
|
||||||
import org.jetbrains.kotlin.cli.common.messages.MessageCollector
|
import org.jetbrains.kotlin.cli.common.messages.MessageCollector
|
||||||
import org.jetbrains.kotlin.scripting.resolve.ScriptReportSink
|
import org.jetbrains.kotlin.scripting.resolve.ScriptReportSink
|
||||||
import kotlin.script.experimental.dependencies.ScriptReport
|
import kotlin.script.experimental.api.ScriptDiagnostic
|
||||||
|
import kotlin.script.experimental.api.SourceCode
|
||||||
|
|
||||||
internal class CliScriptReportSink(private val messageCollector: MessageCollector) :
|
internal class CliScriptReportSink(private val messageCollector: MessageCollector) :
|
||||||
ScriptReportSink {
|
ScriptReportSink {
|
||||||
override fun attachReports(scriptFile: VirtualFile, reports: List<ScriptReport>) {
|
override fun attachReports(scriptFile: VirtualFile, reports: List<ScriptDiagnostic>) {
|
||||||
reports.forEach {
|
reports.forEach {
|
||||||
messageCollector.report(it.severity.convertSeverity(), it.message, location(scriptFile, it.position))
|
messageCollector.report(it.severity.convertSeverity(), it.message, location(scriptFile, it.location))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun location(scriptFile: VirtualFile, position: ScriptReport.Position?): CompilerMessageLocation? {
|
private fun location(scriptFile: VirtualFile, location: SourceCode.Location?): CompilerMessageLocation? {
|
||||||
if (position == null) return CompilerMessageLocation.create(scriptFile.path)
|
if (location == null) return CompilerMessageLocation.create(scriptFile.path)
|
||||||
|
|
||||||
return CompilerMessageLocation.create(scriptFile.path, position.startLine, position.startColumn, null)
|
return CompilerMessageLocation.create(scriptFile.path, location.start.line, location.start.col, null)
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun ScriptReport.Severity.convertSeverity(): CompilerMessageSeverity = when (this) {
|
private fun ScriptDiagnostic.Severity.convertSeverity(): CompilerMessageSeverity = when (this) {
|
||||||
ScriptReport.Severity.FATAL -> CompilerMessageSeverity.ERROR
|
ScriptDiagnostic.Severity.FATAL -> CompilerMessageSeverity.ERROR
|
||||||
ScriptReport.Severity.ERROR -> CompilerMessageSeverity.ERROR
|
ScriptDiagnostic.Severity.ERROR -> CompilerMessageSeverity.ERROR
|
||||||
ScriptReport.Severity.WARNING -> CompilerMessageSeverity.WARNING
|
ScriptDiagnostic.Severity.WARNING -> CompilerMessageSeverity.WARNING
|
||||||
ScriptReport.Severity.INFO -> CompilerMessageSeverity.INFO
|
ScriptDiagnostic.Severity.INFO -> CompilerMessageSeverity.INFO
|
||||||
ScriptReport.Severity.DEBUG -> CompilerMessageSeverity.LOGGING
|
ScriptDiagnostic.Severity.DEBUG -> CompilerMessageSeverity.LOGGING
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user