Skip to content

Commit 5fdcf1d

Browse files
committed
added ParameterNameCheck
1 parent bb7e432 commit 5fdcf1d

File tree

6 files changed

+200
-0
lines changed

6 files changed

+200
-0
lines changed

README.md

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -161,6 +161,14 @@ More information in [wiki page](https://github.com/adireddy/haxe-checkstyle/wiki
161161
"severity": "ERROR"
162162
}
163163
},
164+
{
165+
"type": "ParameterName",
166+
"props": {
167+
"severity": "ERROR",
168+
"format": "^[a-z]+[a-zA-Z0-9_]*$",
169+
"tokens": []
170+
}
171+
},
164172
{
165173
"type": "ParameterNumber",
166174
"props": {
Lines changed: 66 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,66 @@
1+
package checkstyle.checks;
2+
3+
import checkstyle.LintMessage.SeverityLevel;
4+
import haxeparser.Data;
5+
import haxe.macro.Expr;
6+
7+
@name("ParameterName")
8+
@desc("Checks on naming conventions of parameters")
9+
class ParameterNameCheck extends NameCheckBase {
10+
11+
public function new() {
12+
super();
13+
severity = "ERROR";
14+
format = "^[a-z]+[a-zA-Z0-9_]*$";
15+
}
16+
17+
override function checkClassType(d:Definition<ClassFlag, Array<Field>>, pos:Position) {
18+
if (ignoreExtern && (d.flags.indexOf (HExtern) > -1)) return;
19+
checkFields (d.data);
20+
}
21+
22+
override function checkEnumType(d:Definition<EnumFlag, Array<EnumConstructor>>, pos:Position) {
23+
if (ignoreExtern && (d.flags.indexOf (EExtern) > -1)) return;
24+
checkEnumFields (d.data);
25+
}
26+
27+
override function checkAbstractType(d:Definition<AbstractFlag, Array<Field>>, pos:Position) {
28+
checkFields (d.data);
29+
}
30+
31+
override function checkTypedefType(d:Definition<EnumFlag, ComplexType>, pos:Position) {
32+
if (ignoreExtern && (d.flags.indexOf (EExtern) > -1)) return;
33+
34+
switch (d.data) {
35+
case TAnonymous (f):
36+
checkFields (f);
37+
default:
38+
}
39+
}
40+
41+
function checkFields(d:Array<Field>) {
42+
for (field in d) {
43+
switch (field.kind) {
44+
case FFun (f):
45+
checkField (f.args, field.pos);
46+
default:
47+
}
48+
}
49+
}
50+
51+
function checkEnumFields(d:Array<EnumConstructor>) {
52+
for (field in d) {
53+
for (arg in field.args) {
54+
matchTypeName ("parameter name", arg.name, field.pos);
55+
}
56+
}
57+
}
58+
59+
function checkField(args:Array<FunctionArg>, pos:Position) {
60+
if (args == null || args.length <= 0) return;
61+
62+
for (arg in args) {
63+
matchTypeName ("parameter name", arg.name, pos);
64+
}
65+
}
66+
}

resources/config.json

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -159,6 +159,14 @@
159159
"severity": "ERROR"
160160
}
161161
},
162+
{
163+
"type": "ParameterName",
164+
"props": {
165+
"severity": "ERROR",
166+
"format": "^[a-z]+[a-zA-Z0-9_]*$",
167+
"tokens": []
168+
}
169+
},
162170
{
163171
"type": "ParameterNumber",
164172
"props": {

run.n

1.54 KB
Binary file not shown.

test/ParameterNameCheckTest.hx

Lines changed: 117 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,117 @@
1+
package ;
2+
3+
import checkstyle.checks.ParameterNameCheck;
4+
5+
// TODO abstract tests
6+
class ParameterNameCheckTest extends CheckTestCase {
7+
8+
public function testCorrectNaming() {
9+
var msg = checkMessage (ParameterNameTests.TEST, new ParameterNameCheck ());
10+
assertEquals ('', msg);
11+
12+
msg = checkMessage (ParameterNameTests.TEST2, new ParameterNameCheck ());
13+
assertEquals ('', msg);
14+
15+
msg = checkMessage (ParameterNameTests.TEST4, new ParameterNameCheck ());
16+
assertEquals ('', msg);
17+
}
18+
19+
public function testWrongNaming() {
20+
var msg = checkMessage (ParameterNameTests.TEST1, new ParameterNameCheck ());
21+
assertEquals ('Invalid parameter name signature: Count (name should be ~/^[a-z]+[a-zA-Z0-9_]*$/)', msg);
22+
23+
msg = checkMessage (ParameterNameTests.TEST3, new ParameterNameCheck ());
24+
assertEquals ('Invalid parameter name signature: ParamName (name should be ~/^[a-z]+[a-zA-Z0-9_]*$/)', msg);
25+
26+
msg = checkMessage (ParameterNameTests.TEST5, new ParameterNameCheck ());
27+
assertEquals ('Invalid parameter name signature: ParamName (name should be ~/^[a-z]+[a-zA-Z0-9_]*$/)', msg);
28+
}
29+
30+
public function testIgnoreExtern() {
31+
var check = new ParameterNameCheck ();
32+
check.ignoreExtern = false;
33+
34+
var msg = checkMessage (ParameterNameTests.TEST, check);
35+
assertEquals ('', msg);
36+
37+
msg = checkMessage (ParameterNameTests.TEST4, new ParameterNameCheck ());
38+
assertEquals ('Invalid parameter name signature: Param1 (name should be ~/^[a-z]+[a-zA-Z0-9_]*$/)', msg);
39+
40+
msg = checkMessage (ParameterNameTests.TEST3, new ParameterNameCheck ());
41+
assertEquals ('Invalid parameter name signature: ParamName (name should be ~/^[a-z]+[a-zA-Z0-9_]*$/)', msg);
42+
43+
msg = checkMessage (ParameterNameTests.TEST5, new ParameterNameCheck ());
44+
assertEquals ('Invalid parameter name signature: ParamName (name should be ~/^[a-z]+[a-zA-Z0-9_]*$/)', msg);
45+
}
46+
47+
public function testFormat() {
48+
var check = new ParameterNameCheck ();
49+
check.format = "^[A-Z][a-zA-Z]*$";
50+
51+
var msg = checkMessage (ParameterNameTests.TEST5, check);
52+
assertEquals ('', msg);
53+
54+
msg = checkMessage (ParameterNameTests.TEST1, check);
55+
assertEquals ('', msg);
56+
57+
msg = checkMessage (ParameterNameTests.TEST2, check);
58+
assertEquals ('', msg);
59+
60+
msg = checkMessage (ParameterNameTests.TEST4, check);
61+
assertEquals ('', msg);
62+
63+
msg = checkMessage (ParameterNameTests.TEST, check);
64+
assertEquals ('Invalid parameter name signature: paramName (name should be ~/^[A-Z][a-zA-Z]*$/)', msg);
65+
66+
msg = checkMessage (ParameterNameTests.TEST3, check);
67+
assertEquals ('Invalid parameter name signature: param1 (name should be ~/^[A-Z][a-zA-Z]*$/)', msg);
68+
}
69+
}
70+
71+
class ParameterNameTests {
72+
public static inline var TEST:String = "
73+
class Test {
74+
function test(param1:Int, paramName:String) {
75+
}
76+
public function test2() {
77+
}
78+
}
79+
80+
enum Test2 {
81+
count(param:Int);
82+
}
83+
84+
typedef Test3 = {
85+
function test(param1:Int, paramName:String) {
86+
}
87+
}";
88+
89+
public static inline var TEST1:String = "
90+
class Test {
91+
public function test(Count:Int) {
92+
}
93+
}";
94+
95+
public static inline var TEST2:String = "
96+
class Test {
97+
public function test() {
98+
}
99+
}";
100+
101+
public static inline var TEST3:String =
102+
"typedef Test = {
103+
function test(param1:Int, ParamName:String) {
104+
}
105+
}";
106+
107+
public static inline var TEST4:String =
108+
"extern class Test {
109+
public function test(Param1:Int) {
110+
}
111+
}";
112+
113+
public static inline var TEST5:String =
114+
"enum Test {
115+
VALUE(ParamName:String);
116+
}";
117+
}

test/TestMain.hx

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ class TestMain {
2222
runner.add(new NestedIfDepthCheckTest());
2323
runner.add(new NestedTryDepthCheckTest());
2424
runner.add(new OverrideCheckTest());
25+
runner.add(new ParameterNameCheckTest());
2526
runner.add(new ParameterNumberCheckTest());
2627
runner.add(new PublicPrivateCheckTest());
2728
runner.add(new ReturnCheckTest());

0 commit comments

Comments
 (0)