Kotlin / kotlin-jupyter

Kotlin kernel for Jupyter/IPython
Apache License 2.0
1.09k stars 106 forks source link

Smart cast and exhaustive when check failures #436

Open JarnaChao09 opened 8 months ago

JarnaChao09 commented 8 months ago

Hi everyone, been working with datalore for a bit and came across something interesting that I was wondering if others would have an explanation for: I have code that compiles fine locally with gradle and on play.kotlinlang.org, however, this same code does not compile in the latest kotlin kernel for datalore the main errors I encountered were smart cast and exhaustive when check errors

here is a gist of the code in the datalore notebook: https://gist.github.com/JarnaChao09/24ec66e1f4e13d96a2452977dc193851

thanks for your insight in advance!

ileasile commented 8 months ago

Hi! Provided code samples seem to work for us. Do they fail for you or you have attached already fixed code samples? It would be also great to have minimal reproducers for both of the problems.

JarnaChao09 commented 8 months ago

Hi, sorry for the late response. I have attached the already fixed code. Lines 158 and 247 were added to satisfy the errors I stated before. This code was tested both in Datalore and the Kotlin Notebooks plugin and resulted in the same errors. Hope that clears things up.

enolive commented 5 months ago

I discovered this issue when researching why exhaustive when statements don't work properly in the kotlin jupyter kernel. This seems to be the same problem I encountered. Small reproduction sample (copied into a code cell in Jupyter):

sealed interface MyType
object A : MyType
object B : MyType

fun func(e: MyType) {
    when (e) {
      is A -> TODO()
      is B -> TODO()  
    }
}

Compiler message:

Line_0.jupyter.kts (6:5 - 9) 'when' expression must be exhaustive, add necessary 'else' branch

Screenshot from jupyter notebook