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