1 |
|
2 |
|
3 |
|
4 |
|
5 |
|
6 |
|
7 |
|
8 |
|
9 |
|
10 |
|
11 |
|
12 | 'use strict';
|
13 |
|
14 | var angularRule = require('./utils/angular-rule');
|
15 | var caseSensitive = 'case_sensitive';
|
16 |
|
17 | module.exports = {
|
18 | meta: {
|
19 | schema: [{
|
20 | type: 'boolean'
|
21 | }, {
|
22 | type: 'string'
|
23 | }]
|
24 | },
|
25 | create: angularRule(function(context) {
|
26 | var stripUnderscores = context.options[0] !== false;
|
27 | var caseSensitiveOpt = (context.options[1] || caseSensitive) === caseSensitive;
|
28 |
|
29 | function checkOrder(callee, fn) {
|
30 | if (!fn || !fn.params) {
|
31 | return;
|
32 | }
|
33 | var args = fn.params.map(function(arg) {
|
34 | var formattedArg = arg.name;
|
35 | if (stripUnderscores) {
|
36 | formattedArg = formattedArg.replace(/^_(.+)_$/, '$1');
|
37 | }
|
38 | return caseSensitiveOpt ? formattedArg : formattedArg.toLowerCase();
|
39 | });
|
40 | var sortedArgs = args.slice().sort();
|
41 | sortedArgs.some(function(value, index) {
|
42 | if (args.indexOf(value) !== index) {
|
43 | context.report(fn, 'Injected values should be sorted alphabetically');
|
44 | return true;
|
45 | }
|
46 | });
|
47 | }
|
48 |
|
49 | return {
|
50 | 'angular?animation': checkOrder,
|
51 | 'angular?config': checkOrder,
|
52 | 'angular?controller': checkOrder,
|
53 | 'angular?directive': checkOrder,
|
54 | 'angular?factory': checkOrder,
|
55 | 'angular?filter': checkOrder,
|
56 | 'angular?inject': checkOrder,
|
57 | 'angular?run': checkOrder,
|
58 | 'angular?service': checkOrder,
|
59 | 'angular?provider': function(callee, providerFn, $get) {
|
60 | checkOrder(null, providerFn);
|
61 | checkOrder(null, $get);
|
62 | }
|
63 | };
|
64 | })
|
65 | };
|