Skip to content

Commit 356f11e

Browse files
committed
Merge pull request #80 from borislavjivkov/ng_module_setter
Definitions (aka Setters) (Y021) implementation
2 parents e5f732a + 9a7df0c commit 356f11e

File tree

3 files changed

+130
-70
lines changed

3 files changed

+130
-70
lines changed

index.js

Lines changed: 72 additions & 70 deletions
Original file line numberDiff line numberDiff line change
@@ -1,72 +1,74 @@
11
(function(){
2-
'use strict';
2+
'use strict';
33

4-
module.exports = {
5-
rules: {
6-
'ng_angularelement': require('./rules/ng_angularelement'),
7-
'ng_controller_as': require('./rules/ng_controller_as'),
8-
'ng_controller_as_route': require('./rules/ng_controller_as_route'),
9-
'ng_controller_as_vm': require('./rules/ng_controller_as_vm'),
10-
'ng_controller_name': require('./rules/ng_controller_name'),
11-
'ng_definedundefined': require('./rules/ng_definedundefined'),
12-
'ng_di': require('./rules/ng_di'),
13-
'ng_directive_name': require('./rules/ng_directive_name'),
14-
'ng_document_service': require('./rules/ng_document_service'),
15-
'ng_empty_controller': require('./rules/ng_empty_controller'),
16-
'ng_filter_name': require('./rules/ng_filter_name'),
17-
'ng_interval_service': require('./rules/ng_interval_service'),
18-
'ng_json_functions': require('./rules/ng_json_functions'),
19-
'ng_module_name': require('./rules/ng_module_name'),
20-
'ng_no_digest': require('./rules/ng_no_digest'),
21-
'ng_no_jquery_angularelement': require('./rules/ng_no_jquery_angularelement'),
22-
'ng_no_private_call': require('./rules/ng_no_private_call'),
23-
'ng_no_services': require('./rules/ng_no_services'),
24-
'ng_no_service_method': require('./rules/ng_no_service_method'),
25-
'ng_on_watch': require('./rules/ng_on_watch'),
26-
'ng_service_name': require('./rules/ng_service_name'),
27-
'ng_timeout_service': require('./rules/ng_timeout_service'),
28-
'ng_typecheck_array': require('./rules/ng_typecheck_array'),
29-
'ng_typecheck_boolean': require('./rules/ng_typecheck_boolean'),
30-
'ng_typecheck_date': require('./rules/ng_typecheck_date'),
31-
'ng_typecheck_function': require('./rules/ng_typecheck_function'),
32-
'ng_typecheck_number': require('./rules/ng_typecheck_number'),
33-
'ng_typecheck_object': require('./rules/ng_typecheck_object'),
34-
'ng_typecheck_regexp': require('./rules/ng_typecheck_regexp'),
35-
'ng_typecheck_string': require('./rules/ng_typecheck_string'),
36-
'ng_window_service': require('./rules/ng_window_service')
37-
},
38-
rulesConfig: {
39-
'ng_angularelement': 1,
40-
'ng_controller_as': 2,
41-
'ng_controller_as_route': 2,
42-
'ng_controller_as_vm': [2, 'vm'],
43-
'ng_controller_name': [2, /[A-Z].*Controller$/],
44-
'ng_definedundefined': 2,
45-
'ng_di': [2, 'function'],
46-
'ng_directive_name': 0,
47-
'ng_document_service': 2,
48-
'ng_empty_controller': 0,
49-
'ng_filter_name': 0,
50-
'ng_interval_service': 2,
51-
'ng_json_functions': 2,
52-
'ng_module_name': 0,
53-
'ng_no_digest': 2,
54-
'ng_no_jquery_angularelement': 2,
55-
'ng_no_private_call': 2,
56-
'ng_no_services': [2, ['$http', '$resource', 'Restangular', '$q']],
57-
'ng_no_service_method': 2,
58-
'ng_on_watch': 2,
59-
'ng_service_name': 0,
60-
'ng_timeout_service': 2,
61-
'ng_typecheck_array': 2,
62-
'ng_typecheck_boolean': 2,
63-
'ng_typecheck_date': 2,
64-
'ng_typecheck_function': 2,
65-
'ng_typecheck_number': 2,
66-
'ng_typecheck_object': 2,
67-
'ng_typecheck_regexp': 2,
68-
'ng_typecheck_string': 2,
69-
'ng_window_service': 2
70-
}
71-
};
72-
})();
4+
module.exports = {
5+
rules: {
6+
'ng_angularelement': require('./rules/ng_angularelement'),
7+
'ng_controller_as': require('./rules/ng_controller_as'),
8+
'ng_controller_as_route': require('./rules/ng_controller_as_route'),
9+
'ng_controller_as_vm': require('./rules/ng_controller_as_vm'),
10+
'ng_controller_name': require('./rules/ng_controller_name'),
11+
'ng_definedundefined': require('./rules/ng_definedundefined'),
12+
'ng_di': require('./rules/ng_di'),
13+
'ng_directive_name': require('./rules/ng_directive_name'),
14+
'ng_document_service': require('./rules/ng_document_service'),
15+
'ng_empty_controller': require('./rules/ng_empty_controller'),
16+
'ng_filter_name': require('./rules/ng_filter_name'),
17+
'ng_interval_service': require('./rules/ng_interval_service'),
18+
'ng_json_functions': require('./rules/ng_json_functions'),
19+
'ng_module_name': require('./rules/ng_module_name'),
20+
'ng_module_setter': require('./rules/ng_module_setter'),
21+
'ng_no_digest': require('./rules/ng_no_digest'),
22+
'ng_no_jquery_angularelement': require('./rules/ng_no_jquery_angularelement'),
23+
'ng_no_private_call': require('./rules/ng_no_private_call'),
24+
'ng_no_services': require('./rules/ng_no_services'),
25+
'ng_no_service_method': require('./rules/ng_no_service_method'),
26+
'ng_on_watch': require('./rules/ng_on_watch'),
27+
'ng_service_name': require('./rules/ng_service_name'),
28+
'ng_timeout_service': require('./rules/ng_timeout_service'),
29+
'ng_typecheck_array': require('./rules/ng_typecheck_array'),
30+
'ng_typecheck_boolean': require('./rules/ng_typecheck_boolean'),
31+
'ng_typecheck_date': require('./rules/ng_typecheck_date'),
32+
'ng_typecheck_function': require('./rules/ng_typecheck_function'),
33+
'ng_typecheck_number': require('./rules/ng_typecheck_number'),
34+
'ng_typecheck_object': require('./rules/ng_typecheck_object'),
35+
'ng_typecheck_regexp': require('./rules/ng_typecheck_regexp'),
36+
'ng_typecheck_string': require('./rules/ng_typecheck_string'),
37+
'ng_window_service': require('./rules/ng_window_service')
38+
},
39+
rulesConfig: {
40+
'ng_angularelement': 1,
41+
'ng_controller_as': 2,
42+
'ng_controller_as_route': 2,
43+
'ng_controller_as_vm': [2, 'vm'],
44+
'ng_controller_name': [2, /[A-Z].*Controller$/],
45+
'ng_definedundefined': 2,
46+
'ng_di': [2, 'function'],
47+
'ng_directive_name': 0,
48+
'ng_document_service': 2,
49+
'ng_empty_controller': 0,
50+
'ng_filter_name': 0,
51+
'ng_interval_service': 2,
52+
'ng_json_functions': 2,
53+
'ng_module_name': 0,
54+
'ng_module_setter': 2,
55+
'ng_no_digest': 2,
56+
'ng_no_jquery_angularelement': 2,
57+
'ng_no_private_call': 2,
58+
'ng_no_services': [2, ['$http', '$resource', 'Restangular', '$q']],
59+
'ng_no_service_method': 2,
60+
'ng_on_watch': 2,
61+
'ng_service_name': 0,
62+
'ng_timeout_service': 2,
63+
'ng_typecheck_array': 2,
64+
'ng_typecheck_boolean': 2,
65+
'ng_typecheck_date': 2,
66+
'ng_typecheck_function': 2,
67+
'ng_typecheck_number': 2,
68+
'ng_typecheck_object': 2,
69+
'ng_typecheck_regexp': 2,
70+
'ng_typecheck_string': 2,
71+
'ng_window_service': 2
72+
}
73+
};
74+
})();

rules/ng_module_setter.js

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
module.exports = function(context) {
2+
3+
'use strict';
4+
5+
var utils = require('./utils/utils');
6+
7+
return {
8+
9+
'VariableDeclaration': function(node) {
10+
var variableDeclarator = node.declarations[0],
11+
rightExpression;
12+
13+
if(variableDeclarator.init) {
14+
rightExpression = variableDeclarator.init;
15+
16+
if(rightExpression.arguments && utils.isAngularModuleDeclaration(rightExpression)) {
17+
context.report(rightExpression, 'Declare modules without a variable using the setter syntax.');
18+
}
19+
}
20+
},
21+
'AssignmentExpression': function(node) {
22+
if(node.right.arguments && utils.isAngularModuleDeclaration(node.right)) {
23+
context.report(node.right, 'Declare modules without a variable using the setter syntax.');
24+
}
25+
}
26+
};
27+
};

test/ng_module_setter.js

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
//------------------------------------------------------------------------------
2+
// Requirements
3+
//------------------------------------------------------------------------------
4+
5+
var eslint = require('../node_modules/eslint/lib/eslint'),
6+
ESLintTester = require('eslint-tester');
7+
8+
//------------------------------------------------------------------------------
9+
// Tests
10+
//------------------------------------------------------------------------------
11+
12+
var eslintTester = new ESLintTester(eslint);
13+
eslintTester.addRuleTest('rules/ng_module_setter', {
14+
valid: [
15+
'angular.module("module", []);'
16+
],
17+
invalid: [{
18+
code: 'var app = angular.module("module", []);',
19+
errors: [{ message: 'Declare modules without a variable using the setter syntax.'}]
20+
}, {
21+
code: 'let app = angular.module("module", []);',
22+
errors: [{ message: 'Declare modules without a variable using the setter syntax.'}]
23+
}, {
24+
code: 'const app = angular.module("module", []);',
25+
errors: [{ message: 'Declare modules without a variable using the setter syntax.'}]
26+
}, {
27+
code: 'app = angular.module("module", []);',
28+
errors: [{ message: 'Declare modules without a variable using the setter syntax.'}]
29+
}
30+
]
31+
});

0 commit comments

Comments
 (0)