标签: scalastyle

Scala的静态分析工具的当前状态是什么?

我在Scala中看到了关于静态分析的StackOverflow问题,但是在2009年得到了回答.如您所知,Scala工具正在快速变化.

因此,我想知道熟悉Scala中当前静态分析工具状态的人是否可以告诉我,例如,Scala的Findbugs等价物是否存在.我发现Findbugs为Scala发出了许多不必要的警告,可能与"对象"单例编译成字节码的方式有关,由于特征等等.我听说Scalastyle不仅是Java的CheckStyle的Scala版本,它也是包括Findbugs和PMD.但是,如果它没有实现所有Findbugs和/或PMD,那么还有其他工具可以补充吗?或者,Scalastyle不仅适用于样式检查,还有助于提高代码质量吗?

另外,Scala与Sonar的整合怎么样?Scala Sonar插件(适用于Scalastyle)是否可靠?

static-analysis scala scalastyle sonarqube

59
推荐指数
4
解决办法
1万
查看次数

如何抑制Scalastyle警告?

我得到以下代码:

    string match {
      case Regex(_, "1", "0", _, _)    =>
      case Regex(_, "1", "1", null, _) =>
    }
Run Code Online (Sandbox Code Playgroud)

Scalastyle抱怨使用null,这是无法避免的.我能用这条线压制警告吗?

scalastyle

33
推荐指数
2
解决办法
1万
查看次数

有没有更好的方法在IntelliJ下设置ScalaStyle?

IntelliJScala插件中有一些scalastyle支持.这个问题是关于设置它捡起scalastyle配置文件,该文件是在定制的目录名下根的最佳方法scalastyle-config.xml(例如,用于星火项目).

目前,要获取IntelliJ中的scalastyle插件来拾取我们的scalastyle配置,您需要将它的副本放入您的.idea文件夹(据说.project也可以使用,但我还没有测试过).此外,需要命名文件scalastyle_config.xml(使用下划线而不是连字符).简而言之,您需要在项目的根目录中调用以下内容:

cp scalastyle-config.xml .idea/scalastyle_config.xml

虽然我认为这是一个丑陋的黑客,但它至少允许我在构建整个项目之前看到scalastyle违规.如果您有更好的解决方案,请告诉我.

scala intellij-idea scalastyle

14
推荐指数
1
解决办法
6288
查看次数

Scala"def"方法声明:冒号vs等于

我正处于学习Scala的早期阶段,我注意到了声明方法的不同方法.

我已经确定不使用等号使方法成为一个void方法(返回一个Unit而不是一个值),并使用等号返回实际值,所以

def product(x: Int, y: Int) {
  x*y
}
Run Code Online (Sandbox Code Playgroud)

将返回()(单位),但是

def product(x: Int, y: Int) = {
  x*y
}
Run Code Online (Sandbox Code Playgroud)

将返回两个参数的乘积(x*y)

我注意到了第三种声明方法 - 用冒号.这是一个例子

def isEqual(x: Any): Boolean
Run Code Online (Sandbox Code Playgroud)

这与=符号有何不同?在什么情况下最好用这种方式?

methods scala function scalastyle

5
推荐指数
1
解决办法
1129
查看次数

Play框架中的Scalastyle"公共方法必须具有显式类型"

我们已经开始在我的工作中尝试使用Scala和Play框架.设置我们的自动linting和测试框架作为第一件事,并已部署Scalastyle来处理前者.

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

  def helloWorld = Action {
    req =>
      Ok("Hello World!")
  }
Run Code Online (Sandbox Code Playgroud)

虽然它常常会复杂得多(当然,很难弄清楚实际上是什么类型).

在任何一种情况下,这都为Scalastyle提供了"公共方法必须具有显式类型"错误.

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

对此有什么好的解决方案的建议?或者我们是否只需要对Play项目进行此检查?

scala playframework playframework-2.0 scalastyle

5
推荐指数
1
解决办法
3979
查看次数

Scalastyle布尔表达式可以简化

Scalastyle(intellij 2016.1默认值)表示这个布尔表达式可以简化

val t = Option(true)
val f = Option(false)
if(t.contains(true) && f.contains(false)) {
  println("booop")
}
Run Code Online (Sandbox Code Playgroud)

我可以通过改变if来解决这个问题:

if(t.contains(true).&&(f.contains(false)))
Run Code Online (Sandbox Code Playgroud)

或者将&&更改为&

但是没有真正看到这是如何简化它,任何人都可以解释发生了什么?

更新 它似乎与vals在编译时是否已知,或者它们是否在本地定义无关.以下代码也会得到表达式可以简化的警告:

object TestFoo {
  def bar(t: Option[Boolean]) = {
    val f = Option(scala.util.Random.nextBoolean)
    if (t.contains(true) && f.contains(false)) println("booop")
  }
  def main(args: Array[String]) = bar(t = Option(scala.util.Random.nextBoolean))
}
Run Code Online (Sandbox Code Playgroud)

我只是不知道我应该如何做到更简单,是否有一些奇怪的选项[布尔]比较我错过了?

scala scala-collections scalastyle

5
推荐指数
1
解决办法
2781
查看次数

IntelliJ - 如何在 Scala 编辑器中强制命名参数并添加它们

基本上我希望 IDE 在自动完成时强制执行命名参数语法

https://docs.scala-lang.org/style/method-invocation.html

因此,例如给定的类

class MyClass {
  def myMethod( param1 : String, param2 : String)
}
Run Code Online (Sandbox Code Playgroud)

我希望 IDE 像这样放置“param1”和“param2”的占位符:

val myObj = new MyClass()
myObj.myMethod( param1 = "value of param 1", param2 = "value of param2")
Run Code Online (Sandbox Code Playgroud)

AND NOT(这很糟糕)

myObj.myMethod("calling the method without explicitly naming param1" , "calling the method without explicitly naming param2")
Run Code Online (Sandbox Code Playgroud)

scala intellij-idea scalastyle intellij-14

5
推荐指数
0
解决办法
355
查看次数

简化 Scala 中的 Option[Boolean] 表达式

我有这样的代码:

optionBoolean.getOrElse(false) && otherOptionBoolean.getOrElse(false)
Run Code Online (Sandbox Code Playgroud)

Scalastyle 告诉我它可以简化。如何?

boolean-logic scala optional scalastyle scala-option

5
推荐指数
1
解决办法
277
查看次数

如何在IDEA中抑制特定的scalastyle规则?

我想no.finalize仅针对一个特定类抑制 ScalaStyle 规则。

我认为抑制 IntelliJ IDEA 检查的一种方法是在类的开头添加以下注释:

//noinspection ScalaStyle

但是,这将抑制该特定类的所有 ScalaStyle 规则。我只想选择性地抑制一项规则。

请注意,我已经尝试过 scalastyle 的抑制方法,即使用 // scalastyle:off no.finalize. 然而,IntelliJ IDEA 不尊重它。

我使用的是IDEA版本2018.2.5(社区版)。

scala intellij-idea scalastyle

4
推荐指数
1
解决办法
921
查看次数

在scalastyle警告上使sbt构建失败

我正在对我的代码空间执行scalastyle检查,参考http://www.scalastyle.org/sbt.html.

在build.sbt中:

// scalastyle check
lazy val compileScalastyle = taskKey[Unit]("compileScalastyle")
compileScalastyle := org.scalastyle.sbt.ScalastylePlugin.scalastyle.in(Compile).toTask("").value
(compile in Compile) <<= (compile in Compile) dependsOn compileScalastyle
Run Code Online (Sandbox Code Playgroud)

在project/plugins.sbt中:

addSbtPlugin("org.scalastyle" %% "scalastyle-sbt-plugin" % "0.8.0")
Run Code Online (Sandbox Code Playgroud)

当我运行时sbt compile,scalastyle正在生成[warning] ***./utils/ConfigManager.scala: File must end with newline character,但编译仍然成功.

有没有办法让sbt compile scalastyle警告失败

我只是改变这一切<check level="warning" ...><check level="error" ...>scalastyleGenerateConfig,我不知道这是做正确的方式.

非常感谢

scala sbt scalastyle

3
推荐指数
1
解决办法
1391
查看次数