Play 框架中的 Scalastyle "Public method must have explicit type"

Scalastyle "Public method must have explicit type" in Play Framework

我们已经开始在我的工作中试验 Scala 和 Play 框架。首先设置我们的自动检查和测试框架,并部署 Scalastyle 来处理前者。

这非常有用,只是我们遇到了这个特定的 lint 错误,我们发现它很难以好的方式解决。一个简单的例子是这样的:

  def helloWorld = Action {
    req =>
      Ok("Hello World!")
  }

尽管它通常会复杂得多,当然(到了很难弄清楚实际类型是什么的程度)。

无论哪种情况,这都会给我们带来来自 Scalastyle 的 "Public method must have explicit type" 错误。

不幸的是,在这里设置预期的显式类型似乎通常会导致语法错误。

有什么好的解决方案吗?或者我们是否只需要为 Play 项目关闭此检查?

Any suggestions on a good solution for this? Or do we just have to turn of this check for Play projects?

我建议为您的项目完全关闭 org.scalastyle.scalariform.PublicMethodsHaveTypeChecker 规则,或者将您的控制器标记为被此规则忽略(here 您会找到有关如何执行此操作的信息) .

最后,这项检查对编写库的人更有好处(因为它有助于更​​明确地说明 api 一个提供)。我发现,当您处理 "real" 项目时,像这样检查只会添加一些样板文件并阻止您利用类型推断。

我希望这有帮助。到设置 -> 编辑器 -> Scala -> 类型注释。对于 Public 值和方法,将值更改为 'Add' 而不是 'Add & Check'。然后它 IDE 将不再显示该警告。

我找到了一种更好的方法来删除“Public 方法必须具有显式类型”消息,而无需将其关闭。

定义这些方法时,可以设置主体[type]和[implicit][type];例如作为 Action[JsValue] 和隐式 RequestHeader。

代码示例:

def helloWorld:Action[JsValue] = Action { 
    implicit req: RequestHeader =>
      Ok("Hello World!")
  }

 def helloWorld:Action[AnyContent] = Action { 
    implicit req: RequestHeader =>
      Ok("Hello World!")
  }