Scalastyle Scala代码风格检测

记录下Scalastyle规则,方便查询。内容比较多,使用Ctrl + F 输入需要查询的检查器进行搜索查询。

目录

介绍

规则

使用示例

Maven集成Scalastyle

Spark的Scalastyle-config.xml


介绍

Scalastyle 是专门针对Scala代码开发的轻巧的code style检测工具,类似于Java代码检查工具Checkstyle、Findbugs等。可以在Maven中集成到项目中,方便代码风格的检测。

最下面附上了Spark2.4.3的 Scalastyle 配置代码,可以借鉴。

Scalastyle常用关键字 //scalastyle:on//scalastyle:off,如:

//scalastyle:on println
	if (args.length < 2) {
	  println("Usage:")
	  println("DRIVER_MEMORY=[mem] spark-submit " +
		"com.github.ehiggs.spark.terasort.TeraGen " +
		"spark-terasort-1.0-SNAPSHOT-with-dependencies.jar " +
		"[output-size] [output-directory]")
	  println(" ")
	  println("Example:")
	  println("DRIVER_MEMORY=50g spark-submit " +
		"com.github.ehiggs.spark.terasort.TeraGen " +
		"spark-terasort-1.0-SNAPSHOT-with-dependencies.jar " +
		"100G file:///scratch/username/terasort_in")
	  System.exit(0)
	}
//scalastyle:off println

规则

官网说明:已实现的规则 

目前已实现规则有69条

检查器 解释
org.scalastyle.file.FileLengthChecker 检查文件中的行数
org.scalastyle.file.FileLineLengthChecker 检查一行中的字符数
org.scalastyle.file.FileTabChecker 检查文件中是否有标签
org.scalastyle.file.HeaderMatchesChecker 检查每个文件的前几行与文本匹配
org.scalastyle.file.IndentationChecker 检查行是否由Tab的倍数缩进
org.scalastyle.file.NewLineAtEofChecker 检查文件是否以换行符结尾
org.scalastyle.file.NoNewLineAtEofChecker 检查文件不是以换行符结尾
org.scalastyle.file.RegexChecker 检查正则表达式是否匹配
org.scalastyle.file.WhitespaceEndOfLineChecker 检查行尾没有空格
org.scalastyle.scalariform.BlockImportChecker 检查导入块是否使用
org.scalastyle.scalariform.ClassNamesChecker 检查类名是否与正则表达式匹配
org.scalastyle.scalariform.ClassTypeParameterChecker 检查类的类型参数与正则表达式匹配
org.scalastyle.scalariform.CovariantEqualsChecker 检查类和对象在没有覆盖的情况下定义了相等(java.lang.object)
org.scalastyle.scalariform.CyclomaticComplexityChecker 检查方法的参数复杂度是否超过设定值
org.scalastyle.scalariform.DeprecatedJavaChecker 检查应该用Scala @deprecated代替Java @Deprecated
org.scalastyle.scalariform.DisallowSpaceAfterTokenChecker 检查某些既定标记后不允许使用空格
org.scalastyle.scalariform.DisallowSpaceBeforeTokenChecker 检查某些既定标记前不允许使用空格
org.scalastyle.scalariform.EmptyClassChecker 检查类或抽象类没有成员,则可以省略大括号
org.scalastyle.scalariform.EmptyInterpolatedStringChecker 检查是否有对字符串插入空值
org.scalastyle.scalariform.EnsureSingleSpaceAfterTokenChecker 检查某些既定标记后是否有空间
org.scalastyle.scalariform.EnsureSingleSpaceBeforeTokenChecker 检查某些既定标记前是否有空间
org.scalastyle.scalariform.EqualsHashCodeChecker 检查如果一个类实现了或等于Hash,那它应该实现另一个类
org.scalastyle.scalariform.FieldNamesChecker 检查字段名是否与正则表达式匹配
org.scalastyle.scalariform.ForBraceChecker 检查for是否使用大括号
org.scalastyle.scalariform.IfBraceChecker 检查if是否使用大括号
org.scalastyle.scalariform.IllegalImportsChecker 检查类没有导入某些类
org.scalastyle.scalariform.ImportGroupingChecker 检查导入是否分组
org.scalastyle.scalariform.ImportOrderChecker 检查是否根据样式配置对导入进行分组和排序
org.scalastyle.scalariform.LowercasePatternMatchChecker 检查case语句模式匹配是否为小写,因为这可能导致混淆
org.scalastyle.scalariform.MagicNumberChecker 检查魔数是否使用var定义
org.scalastyle.scalariform.MethodArgumentNamesChecker 检查方法参数名是否与正则表达式匹配
org.scalastyle.scalariform.MethodLengthChecker 检查方法不超过最大长度
org.scalastyle.scalariform.MethodNamesChecker 检查方法名是否与正则表达式匹配
org.scalastyle.scalariform.MultipleStringLiteralsChecker 检查字符串文字没有多次出现
org.scalastyle.scalariform.NamedArgumentChecker 检查参数是否命名
org.scalastyle.scalariform.NoCloneChecker 检查类和对象没有定义clone()方法
org.scalastyle.scalariform.NoFinalizeChecker 检查类和对象是否定义了Finish()方法
org.scalastyle.scalariform.NoWhitespaceAfterLeftBracketChecker 检查左括号‘[’后没有空格
org.scalastyle.scalariform.NoWhitespaceBeforeLeftBracketChecker 检查左括号‘[’之前没有空格
org.scalastyle.scalariform.NoWhitespaceBeforeRightBracketChecker 检查右括号“]”之前没有空格
org.scalastyle.scalariform.NonASCIICharacterChecker 检查是否使用非ASCII字符(Unicode字符)
org.scalastyle.scalariform.NotImplementedErrorUsage 检查代码是否有 ??? 操作符
org.scalastyle.scalariform.NullChecker 检查是否使用NULL
org.scalastyle.scalariform.NumberOfMethodsInTypeChecker 检查一个类/特性/对象是否申明太多的方法
org.scalastyle.scalariform.NumberOfTypesChecker 检查文件中声明的类型是否过多
org.scalastyle.scalariform.ObjectNamesChecker 检查对象名称是否与正则表达式匹配
org.scalastyle.scalariform.OverrideJavaChecker 检查java@重写是否被使用
org.scalastyle.scalariform.PackageNamesChecker 检查包名是否与正则表达式匹配
org.scalastyle.scalariform.PackageObjectNamesChecker 检查包对象名是否与正则表达式匹配
org.scalastyle.scalariform.ParameterNumberChecker 检查方法的参数个数是否超过设置数量
org.scalastyle.scalariform.PatternMatchAlignChecker 检查模式匹配箭头对齐
org.scalastyle.scalariform.ProcedureDeclarationChecker 检查申明过程 a:unit= 是否使用=号
org.scalastyle.scalariform.PublicMethodsHaveTypeChecker 检查方法是否具有显式返回类型
org.scalastyle.scalariform.RedundantIfChecker 检查表达式是否是冗余,如,if (cond) false else true
org.scalastyle.scalariform.ReturnChecker 检查是否使用return
org.scalastyle.scalariform.ScalaDocChecker 检查代码格式是否遵循Scaladoc文档说明
org.scalastyle.scalariform.SimplifyBooleanExpressionChecker 检查Boolean表达式是否可以简化
org.scalastyle.scalariform.SpaceAfterCommentStartChecker 检查在注释后是否有一个空格
org.scalastyle.scalariform.SpacesAfterPlusChecker 检查加号后面是否有空格
org.scalastyle.scalariform.SpacesBeforePlusChecker 检查加号前面是否有空格
org.scalastyle.scalariform.StructuralTypeChecker 检查结构类型是否未被使用
org.scalastyle.scalariform.TodoCommentChecker 检查是否使用Todo/Fixme单行注释
org.scalastyle.scalariform.TokenChecker 检查如果有正则表达式,是否在特殊标记中匹配
org.scalastyle.scalariform.UnderscoreImportChecker 检查是否使用通配符导入
org.scalastyle.scalariform.UppercaseLChecker 检查如果使用长字符串,则使用大写字母
org.scalastyle.scalariform.VarFieldChecker 检查类和对象是否定义可变字段
org.scalastyle.scalariform.VarLocalChecker 检查函数是否定义可变变量
org.scalastyle.scalariform.WhileChecker 检查是否使用While循环
org.scalastyle.scalariform.XmlLiteralChecker 检查是否未使用xml文本

使用示例

主要在 scalastyle-config.xml 中设置。

 org.scalastyle.file.FileLengthChecker    检查文件中的行数

<check enabled="true" class="org.scalastyle.file.FileLengthChecker" level="warning">
 <parameters>
  <parameter name="maxFileLength">800</parameter>
 </parameters>
</check>

org.scalastyle.file.FileLineLengthChecker    检查一行中的字符数

<check enabled="true" class="org.scalastyle.file.FileLineLengthChecker" level="warning">
 <parameters>
  <parameter name="maxLineLength">100</parameter>
  <parameter name="tabSize">2</parameter>
  <parameter name="ignoreImports">true</parameter>
 </parameters>
</check>

org.scalastyle.file.FileTabChecker    检查文件中是否有标签

<check enabled="true" class="org.scalastyle.file.FileTabChecker" level="warning"/>

org.scalastyle.file.HeaderMatchesChecker    检查每个文件的前几行与文本匹配

<check enabled="true" class="org.scalastyle.file.HeaderMatchesChecker" level="warning">
 <parameters>
  <parameter name="regex">false</parameter>
  <parameter name="header">// Copyright \(C\) 2011-2012 the original author or authors.</parameter>
 </parameters>
</check>

或者 

<check enabled="true" class="org.scalastyle.file.HeaderMatchesChecker" level="warning">
 <parameters>
  <parameter name="regex">true</parameter>
  <parameter name="header">// Copyright \(C\) (?:\d{4}-)?\d{4} the original author or authors.</parameter>
 </parameters>
</check>

org.scalastyle.file.IndentationChecker    检查行是否由Tab的倍数缩进

<check enabled="true" class="org.scalastyle.file.IndentationChecker" level="warning">
 <parameters>
  <parameter name="tabSize">2</parameter>
  <parameter name="methodParamIndentSize">2</parameter>
  <parameter name="classParamIndentSize">4</parameter>
 </parameters>
</check>

org.scalastyle.file.NewLineAtEofChecker    检查文件是否以换行符结尾

<check enabled="true" class="org.scalastyle.file.NewLineAtEofChecker" level="warning"/>

org.scalastyle.file.NoNewLineAtEofChecker    检查文件不是以换行符结尾

<check enabled="true" class="org.scalastyle.file.NoNewLineAtEofChecker" level="warning"/>

org.scalastyle.file.RegexChecker    检查正则表达式是否匹配

<check enabled="true" class="org.scalastyle.file.RegexChecker" level="warning">
 <parameters>
  <parameter name="regex">(?m)^\s*$(\r|)\n^\s*$(\r|)\n</parameter>
  <parameter name="line">false</parameter>
 </parameters>
 <customMessage>No double blank lines</customMessage>
</check>

org.scalastyle.file.WhitespaceEndOfLineChecker    检查行尾没有空格

<check enabled="true" class="org.scalastyle.file.WhitespaceEndOfLineChecker" level="warning">
 <parameters>
  <parameter default="false" type="boolean" name="ignoreWhitespaceLines"/>
 </parameters>
</check>

org.scalastyle.scalariform.BlockImportChecker    检查导入块是否使用

<check enabled="true" class="org.scalastyle.scalariform.BlockImportChecker" level="warning"/>

org.scalastyle.scalariform.ClassNamesChecker    检查类名是否与正则表达式匹配

<check enabled="true" class="org.scalastyle.scalariform.ClassNamesChecker" level="warning">
 <parameters>
  <parameter name="regex">^[A-Z][A-Za-z]*$</parameter>
 </parameters>
</check>

org.scalastyle.scalariform.ClassTypeParameterChecker    检查类的类型参数与正则表达式匹配

<check enabled="true" class="org.scalastyle.scalariform.ClassTypeParameterChecker" level="warning">
 <parameters>
  <parameter name="regex">^[A-Z_]$</parameter>
 </parameters>
</check>

org.scalastyle.scalariform.CovariantEqualsChecker    检查类和对象在没有覆盖的情况下定义了相等(java.lang.object)

<check enabled="true" class="org.scalastyle.scalariform.CovariantEqualsChecker" level="warning"/>

org.scalastyle.scalariform.CyclomaticComplexityChecker    检查方法的参数复杂度是否超过设定值

<check enabled="true" class="org.scalastyle.scalariform.CyclomaticComplexityChecker" level="warning">
 <parameters>
  <parameter name="maximum">10</parameter>
  <parameter name="countCases">true</parameter>
 </parameters>
</check>

org.scalastyle.scalariform.DeprecatedJavaChecker    检查应该用Scala @deprecated代替Java @Deprecated

<check enabled="true" class="org.scalastyle.scalariform.DeprecatedJavaChecker" level="warning"/>

org.scalastyle.scalariform.DisallowSpaceAfterTokenChecker    检查某些既定标记后不允许使用空格

<check enabled="true" class="org.scalastyle.scalariform.DisallowSpaceAfterTokenChecker" level="warning">
 <parameters>
  <parameter name="tokens">LPAREN</parameter>
 </parameters>
</check>

org.scalastyle.scalariform.DisallowSpaceBeforeTokenChecker    检查某些既定标记前不允许使用空格

<check enabled="true" class="org.scalastyle.scalariform.DisallowSpaceBeforeTokenChecker" level="warning">
 <parameters>
  <parameter name="tokens">COLON, COMMA, RPAREN</parameter>
 </parameters>
</check>

org.scalastyle.scalariform.EmptyClassChecker    检查类或抽象类没有成员,则可以省略大括号

<check enabled="true" class="org.scalastyle.scalariform.EmptyClassChecker" level="warning"/>

org.scalastyle.scalariform.EmptyInterpolatedStringChecker    检查是否有对字符串插入空值

<check enabled="true" level="warning" class="org.scalastyle.scalariform.EmptyInterpolatedStringChecker"/>

org.scalastyle.scalariform.EnsureSingleSpaceAfterTokenChecker    检查某些既定标记后是否有空间

<check enabled="true" class="org.scalastyle.scalariform.EnsureSingleSpaceAfterTokenChecker" level="warning">
 <parameters>
  <parameter name="tokens">COLON, IF</parameter>
 </parameters>
</check>

org.scalastyle.scalariform.EnsureSingleSpaceBeforeTokenChecker    检查某些既定标记前是否有空间

<check enabled="true" class="org.scalastyle.scalariform.EnsureSingleSpaceBeforeTokenChecker" level="warning">
 <parameters>
  <parameter name="tokens">LPAREN</parameter>
 </parameters>
</check>

org.scalastyle.scalariform.EqualsHashCodeChecker    检查如果一个类实现了或等于Hash,那它应该实现另一个类

<check enabled="true" class="org.scalastyle.scalariform.EqualsHashCodeChecker" level="warning"/>

org.scalastyle.scalariform.FieldNamesChecker    检查字段名是否与正则表达式匹配

<check enabled="true" class="org.scalastyle.scalariform.FieldNamesChecker" level="warning">
 <parameters>
  <parameter name="regex">^[a-z][A-Za-z0-9]*$</parameter>
  <parameter name="objectFieldRegex">^[A-Z][A-Za-z0-9]*$</parameter>
 </parameters>
</check>

org.scalastyle.scalariform.ForBraceChecker    检查for是否使用大括号

<check enabled="true" class="org.scalastyle.scalariform.ForBraceChecker" level="warning"/>

org.scalastyle.scalariform.IfBraceChecker    检查if是否使用大括号

<check enabled="true" class="org.scalastyle.scalariform.IfBraceChecker" level="warning">
 <parameters>
  <parameter name="singleLineAllowed">true</parameter>
  <parameter name="doubleLineAllowed">false</parameter>
 </parameters>
</check>

org.scalastyle.scalariform.IllegalImportsChecker    检查类没有导入某些类

<check enabled="true" class="org.scalastyle.scalariform.IllegalImportsChecker" level="warning"/>

org.scalastyle.scalariform.ImportGroupingChecker    检查导入是否分组

<check enabled="true" class="org.scalastyle.scalariform.ImportGroupingChecker" level="warning"/>

org.scalastyle.scalariform.ImportOrderChecker    检查是否根据样式配置对导入进行分组和排序

<check enabled="true&
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值