xref: /XiangShan/scalastyle-config.xml (revision be3685ffd1314918da1a8a05b0fbf264ab119f5e)
1<scalastyle commentFilter="enabled">
2 <name>Scalastyle XiangShan configuration</name>
3
4 <!-- Ref: https://scalastyle.github.io/rules-1.0.0.html -->
5
6 <!-- ===== license ===== -->
7 <!-- always starts with XiangShan license -->
8 <check enabled="true" class="org.scalastyle.file.HeaderMatchesChecker" level="warning">
9  <parameters>
10   <parameter name="regex">true</parameter>
11   <parameter name="header"><![CDATA[(?m)(?:// Copyright \(c\) \d{4}(?:-\d{4})? (?:.+?)\n)+//
12// XiangShan is licensed under Mulan PSL v2.
13// You can use this software according to the terms and conditions of the Mulan PSL v2.
14// You may obtain a copy of Mulan PSL v2 at:
15//          https://license.coscl.org.cn/MulanPSL2
16//
17// THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND,
18// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT,
19// MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE.
20//
21// See the Mulan PSL v2 for more details.]]></parameter>
22  </parameters>
23 </check>
24
25 <!-- ===== file size ===== -->
26 <!-- avoid large files (>800 lines, or >20 classes) -->
27 <check enabled="true" class="org.scalastyle.file.FileLengthChecker" level="warning">
28  <parameters>
29   <parameter name="maxFileLength">800</parameter>
30  </parameters>
31 </check>
32 <check enabled="true" class="org.scalastyle.scalariform.NumberOfTypesChecker" level="warning">
33  <parameters>
34   <parameter name="maxTypes">20</parameter>
35  </parameters>
36 </check>
37 <!-- avoid long lines (>120 columns) -->
38 <check enabled="true" class="org.scalastyle.file.FileLineLengthChecker" level="warning">
39  <parameters>
40   <parameter name="maxLineLength">120</parameter> <!-- should be same with .scalafmt.conf maxColumn -->
41   <parameter name="tabSize">2</parameter>
42   <parameter name="ignoreImports">true</parameter>
43  </parameters>
44 </check>
45 <!-- avoid large classes (>30 methods) -->
46 <check enabled="true" class="org.scalastyle.scalariform.NumberOfMethodsInTypeChecker" level="warning">
47  <parameters>
48   <parameter name="maxMethods">30</parameter>
49  </parameters>
50 </check>
51 <!-- avoid large methods (>8 parameters, or >50 lines) -->
52 <check enabled="true" class="org.scalastyle.scalariform.ParameterNumberChecker" level="warning">
53  <parameters>
54   <parameter name="maxParameters">8</parameter>
55  </parameters>
56 </check>
57 <check enabled="true" class="org.scalastyle.scalariform.MethodLengthChecker" level="warning">
58  <parameters>
59   <parameter name="maxLength">50</parameter>
60   <parameter name="ignoreComments">true</parameter>
61  </parameters>
62 </check>
63
64 <!-- ===== tabs, new lines, and spaces ===== -->
65 <!-- avoid tabs -->
66 <check enabled="true" class="org.scalastyle.file.FileTabChecker" level="warning"/>
67 <!-- always add a new line at EOF -->
68 <check enabled="true" class="org.scalastyle.file.NewLineAtEofChecker" level="warning"/>
69 <!-- avoid extra spaces from EOL -->
70 <check enabled="true" class="org.scalastyle.file.WhitespaceEndOfLineChecker" level="warning"/>
71 <!-- always add a space after `//` or `/*` before comments -->
72 <check enabled="true" class="org.scalastyle.scalariform.SpaceAfterCommentStartChecker" level="warning"/>
73 <!-- check space around operators, ref: https://github.com/scala-ide/scalariform/blob/master/scalariform/src/main/scala/scalariform/lexer/Tokens.scala -->
74 <check enabled="false" class="org.scalastyle.scalariform.DisallowSpaceAfterTokenChecker" level="warning">
75  <parameters>
76   <!-- (, ~, ! -->
77   <parameter name="tokens">LPAREN, TILDE, EXCLAMATION</parameter>
78  </parameters>
79 </check>
80 <check enabled="false" class="org.scalastyle.scalariform.DisallowSpaceBeforeTokenChecker" level="warning">
81  <parameters>
82   <!-- :, ,, ) -->
83   <parameter name="tokens">COLON, COMMA, RPAREN</parameter>
84  </parameters>
85 </check>
86 <check enabled="false" class="org.scalastyle.scalariform.EnsureSingleSpaceAfterTokenChecker" level="warning">
87  <parameters>
88   <!-- if, match, case, for, while, =>, <-, {, <:, <%:, >:, +, -, *, |, = -->
89   <parameter name="tokens">IF, MATCH, CASE, FOR, WHILE, ARROW, LARROW, LBRACE, SUBTYPE, VIEWBOUND, SUPERTYPE, PLUS, MINUS, STAR, PIPE, EQUAL</parameter>
90  </parameters>
91 </check>
92 <check enabled="false" class="org.scalastyle.scalariform.EnsureSingleSpaceBeforeTokenChecker" level="warning">
93  <parameters>
94   <!-- =>, <-, }, <:, <%, >:, +, -, *, |, = -->
95   <parameter name="tokens">ARROW, LARROW, RBRACE, SUBTYPE, VIEWBOUND, SUPERTYPE, PLUS, MINUS, STAR, PIPE, EQUAL</parameter>
96  </parameters>
97 </check>
98 <check enabled="false" class="org.scalastyle.file.RegexChecker" level="warning">
99  <parameters>
100   <!-- :=, :<=, :>=, :<>=, :#=, <>, ===, =/=, <<, >>, <=, >= -->
101   <parameter name="regex"><![CDATA[[^ ](:<?#?>?=|<>|=[=/]=|<<|>>|[<>]=)]]></parameter>
102  </parameters>
103  <customMessage>No space before operators</customMessage>
104 </check>
105 <check enabled="false" class="org.scalastyle.file.RegexChecker" level="warning">
106  <parameters>
107   <!-- :=, :<=, :>=, :<>=, :#=, <>, ===, =/=, <<, >>, <=, >= -->
108   <parameter name="regex"><![CDATA[(:<?#?>?=|<>|=[=/]=|<<|>>|[<>]=)[^ \n]]]></parameter>
109  </parameters>
110  <customMessage>No space or newline after operators</customMessage>
111 </check>
112
113 <!-- ===== imports ===== -->
114 <!-- avoid block imports (`import pkg.{abc, def}`) -->
115 <check enabled="true" class="org.scalastyle.scalariform.BlockImportChecker" level="warning"/>
116 <!-- avoid wildcard imports (`import pkg._`) -->
117 <check enabled="true" class="org.scalastyle.scalariform.UnderscoreImportChecker" level="warning">
118  <parameters>
119   <!-- except for `chisel3._` and `chisel3.util._` -->
120   <parameter name="ignoreRegex">chisel3\._|chisel3\.util\._</parameter>
121  </parameters>
122 </check>
123
124 <!-- ===== names ===== -->
125 <!-- use UpperCamelCase for class names -->
126 <check enabled="true" class="org.scalastyle.scalariform.ClassNamesChecker" level="warning">
127  <parameters>
128   <parameter name="regex">^[A-Z][A-Za-z0-9]*$</parameter>
129  </parameters>
130 </check>
131 <!-- ... and object names -->
132 <check enabled="true" class="org.scalastyle.scalariform.ObjectNamesChecker" level="warning">
133  <parameters>
134   <parameter name="regex">^[A-Z][A-Za-z0-9]*$</parameter>
135  </parameters>
136 </check>
137 <!-- lowerCamelCase for variables and UpperCamelCase for constants -->
138 <check enabled="true" class="org.scalastyle.scalariform.FieldNamesChecker" level="warning">
139  <parameters>
140   <!-- we allow sx_lowerCamelCase for pipeline signals -->
141   <parameter name="regex">^(s[0-9]_)?[a-z][A-Za-z0-9]*$</parameter>
142   <parameter name="objectFieldRegex">^[A-Z][A-Za-z0-9]*$</parameter>
143  </parameters>
144 </check>
145 <!-- lowerCamelCase for parameters -->
146 <check enabled="true" class="org.scalastyle.scalariform.MethodArgumentNamesChecker" level="warning">
147  <parameters>
148   <parameter name="regex">^[a-z][A-Za-z0-9]*$</parameter>
149  </parameters>
150 </check>
151 <!-- lowerCamelCase or UpperCamelCase for methods, as we also use methods as constants -->
152 <check enabled="true" class="org.scalastyle.scalariform.MethodNamesChecker" level="warning">
153  <parameters>
154   <parameter name="regex">^[A-Za-z0-9]*$</parameter>
155   <parameter name="ignoreRegex"><![CDATA[^(\+[&%]?|\-[&%]?|\*|/|%|&|\||\^|<|>|\|\||&&|:=|<>|<=|>=|!=|===|<<|>>|##|unary_(~|\-%?|!))$]]></parameter>
156  </parameters>
157 </check>
158 <!-- pure lower cases for package names -->
159 <check enabled="true" class="org.scalastyle.scalariform.PackageNamesChecker" level="warning">
160  <parameters>
161   <parameter name="regex">^[a-z0-9]*$</parameter>
162  </parameters>
163 </check>
164
165 <!-- type annotations -->
166 <check enabled="true" class="org.scalastyle.scalariform.PublicMethodsHaveTypeChecker" level="warning"/>
167
168 <!-- ===== misc ===== -->
169 <!-- warn TODO and FIXME comments, we should fix them ASAP -->
170 <check enabled="true" class="org.scalastyle.scalariform.TodoCommentChecker" level="warning"/>
171 <!-- avoid define equals without overriding equals -->
172 <check enabled="true" class="org.scalastyle.scalariform.CovariantEqualsChecker" level="warning"/>
173 <!-- avoid using ';' to end line -->
174 <check enabled="true" class="org.scalastyle.file.RegexChecker" level="warning">
175  <parameters>
176   <parameter name="regex">;\r?\n</parameter>
177  </parameters>
178  <customMessage>Avoid using ';' to end line</customMessage>
179 </check>
180</scalastyle>
181