Skip to content

Commit 98118e2

Browse files
committed
added type check
1 parent 99daae9 commit 98118e2

File tree

8 files changed

+78
-4
lines changed

8 files changed

+78
-4
lines changed

checkstyle/checks/NamingCheck.hx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -104,7 +104,7 @@ class NamingCheck extends Check {
104104

105105
function checkLocalVars() {
106106
ExprUtils.walkFile(_checker.ast, function(e) {
107-
switch(e.expr){
107+
switch(e.expr) {
108108
case EVars(vars):
109109
for (v in vars) {
110110
if (!localCamelCaseRE.match(v.name)) logPos('Invalid local variable signature: ${v.name} (name should be camelCase)', e.pos, Reflect.field(SeverityLevel, severity));

checkstyle/checks/TypeCheck.hx

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
package checkstyle.checks;
2+
3+
import checkstyle.LintMessage.SeverityLevel;
4+
import haxeparser.Data;
5+
import haxe.macro.Expr;
6+
7+
@name("Type")
8+
@desc("Type check for class variables")
9+
class TypeCheck extends Check {
10+
11+
public var severity:String = "ERROR";
12+
13+
override function _actualRun() {
14+
checkClassFields();
15+
}
16+
17+
function checkClassFields() {
18+
for (td in _checker.ast.decls) {
19+
switch (td.decl){
20+
case EClass(d):
21+
for (field in d.data) if (field.name != "new") checkField(field);
22+
default:
23+
}
24+
}
25+
}
26+
27+
function checkField(f:Field) {
28+
switch(f.kind) {
29+
case FVar(t, e):
30+
if (t == null) _error(f.name, f.pos);
31+
case FProp(g, s, t, e):
32+
case FFun(f):
33+
}
34+
}
35+
36+
function _error(name:String, pos:Position) {
37+
logPos('Missing type: ${name}', pos, Reflect.field(SeverityLevel, severity));
38+
}
39+
}

haxelib.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,8 +10,8 @@
1010
],
1111
"description": "Automated code analysis ideal for projects that want to enforce a coding standard.",
1212
"contributors": ["adireddy"],
13-
"releasenote": "improved naming check",
14-
"version": "1.0.3",
13+
"releasenote": "added type check",
14+
"version": "1.0.4",
1515
"url": "https://github.com/adireddy/haxe-checkstyle",
1616
"dependencies": {
1717

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "checkstyle",
3-
"version": "1.0.3",
3+
"version": "1.0.4",
44
"description": "Automated code analysis ideal for projects that want to enforce a coding standard.",
55
"repository": {
66
"type": "git",

resources/config.json

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -117,6 +117,12 @@
117117
"severity": "INFO"
118118
}
119119
},
120+
{
121+
"type": "Type",
122+
"props": {
123+
"severity": "ERROR"
124+
}
125+
},
120126
{
121127
"type": "VariableInitialisation",
122128
"props": {

run.n

1.17 KB
Binary file not shown.

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 TabForAligningCheckTest());
2323
runner.add(new TODOCommentCheckTest());
2424
runner.add(new TrailingWhitespaceCheckTest());
25+
runner.add(new TypeCheckTest());
2526
runner.add(new VariableInitialisationCheckTest());
2627

2728
var success = runner.run();

test/TypeCheckTest.hx

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
package ;
2+
3+
import checkstyle.checks.TypeCheck;
4+
5+
class TypeCheckTest extends CheckTestCase {
6+
7+
public function testClassVar() {
8+
var msg = checkMessage(TypeTests.TEST1, new TypeCheck());
9+
assertEquals(msg, 'Missing type: _a');
10+
}
11+
12+
public function testStaticClassVar() {
13+
var msg = checkMessage(TypeTests.TEST2, new TypeCheck());
14+
assertEquals(msg, 'Missing type: A');
15+
}
16+
}
17+
18+
class TypeTests {
19+
public static inline var TEST1:String = "
20+
class Test {
21+
var _a;
22+
}";
23+
24+
public static inline var TEST2:String = "
25+
class Test {
26+
static inline var A = 1;
27+
}";
28+
}

0 commit comments

Comments
 (0)