scala 开发人员如何处理带有 shapeless 的 scala 代码中不正确的 IDE(Idea) 错误

Joh*_*n H 6 ide scala intellij-idea shapeless

这是一个带有具体示例的一般问题。

人们如何进入 Scala 并将其用于大型项目处理工具/IDE 的不可靠性?您是否只接受整个源代码中的红色标记?

我遇到了另一个 Scala 代码库,其中工作代码被 idea 标记为红色Cannot resolve symbol Repr

我开始了一个游乐场项目来探索代码库中的一个库 - shapeless(据我所知,它是 Scala 社区中备受推崇的库)。

我从官方无形指南的第一页编写了非常基本的代码。

package example
import shapeless._

object Hello extends App {
  val genericEmployee = Generic[Employee].to(Employee("Dave", isOld = true))
  val genericIceCream = Generic[IceCream].to(IceCream("yellow", isInCone = false))

  def genericCsv (gen: String :: Boolean :: HNil) :List[String] = List(gen(0), gen(1).toString())

  println(genericCsv(genericIceCream).toString())
}

case class Employee (name: String, isOld: Boolean)

case class IceCream (name: String, isInCone: Boolean)
Run Code Online (Sandbox Code Playgroud)

gen(0)gen(1)标有No implicits found for parameter at hlist.At[String :: Boolean :: HNil, Nat#N]

该代码有效。

我还记得由 Akka HTTP 引起的错误但不是真正的错误。

Mar*_*lic 6

IntelliJ 支持依赖宏(例如 shapeless)的库似乎存在根本性困难

\n\n

@尼克特罗普

\n\n
\n

Shapeless 大量使用宏。我们没有办法普遍支持他们。

\n
\n\n

@joroKr21

\n\n
\n

白盒宏存在一个根本障碍。您必须运行完整的类型检查并展开它们才能查看它们返回的类型,而这在每次击键时都是不可行的。另一方面,黑盒宏不应该造成这样的问题。

\n
\n\n

@olafurpg

\n\n
\n

scala-compiler 和 intellij-scala 是不同的类型检查器,\n scala-reflect 宏当前是针对 scala-compiler\n API 实现的,这使得它们很难在替代的 scala\n 编译器中得到支持。

\n
\n\n
\n\n

您可以尝试将突出显示错误报告为错误,网址为

\n\n

https://youtrack.jetbrains.com/issues/SCL

\n\n

这是一个可以用作模板的示例

\n\n

https://youtrack.jetbrains.com/issue/SCL-16091

\n\n

选择受影响的子系统作为Error Highlighting

\n\n

此功能称为类型感知突出显示T,可以通过单击右下角的小图标来禁用

\n\n

在此输入图像描述

\n\n
\n

如何处理虚假错误?

\n\n

所以,事实是你必须记住,有时会出现\xe2\x80\x99s no Spoon\n 错误。为了帮助我们修复突出显示问题,您可以像往常一样将其报告给\n YouTrack,或者在错误突出显示时按 Alt+Enter:

\n
\n