UNPKG

2.19 kBJavaScriptView Raw
1/**
2 * require DI parameters to be sorted alphabetically
3 *
4 * Injected dependencies should be sorted alphabetically.
5 * If the second parameter is set to false, values which start and end with an underscore those underscores are stripped.
6 * This means for example that `_$httpBackend_` goes before `_$http_`.
7 *
8 * @version 0.6.0
9 * @category conventions
10 * @sinceAngularVersion 1.x
11 */
12'use strict';
13
14var angularRule = require('./utils/angular-rule');
15var caseSensitive = 'case_sensitive';
16
17module.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};