69 lines
2.3 KiB
JavaScript
69 lines
2.3 KiB
JavaScript
/**
|
|
* require DI parameters to be sorted alphabetically
|
|
*
|
|
* Injected dependencies should be sorted alphabetically.
|
|
* If the second parameter is set to false, values which start and end with an underscore those underscores are stripped.
|
|
* This means for example that `_$httpBackend_` goes before `_$http_`.
|
|
*
|
|
* @version 0.6.0
|
|
* @category conventions
|
|
* @sinceAngularVersion 1.x
|
|
*/
|
|
'use strict';
|
|
|
|
var angularRule = require('./utils/angular-rule');
|
|
var caseSensitive = 'case_sensitive';
|
|
|
|
module.exports = {
|
|
meta: {
|
|
docs: {
|
|
url: 'https://github.com/Gillespie59/eslint-plugin-angular/blob/master/docs/rules/di-order.md'
|
|
},
|
|
schema: [{
|
|
type: 'boolean'
|
|
}, {
|
|
type: 'string'
|
|
}]
|
|
},
|
|
create: angularRule(function(context) {
|
|
var stripUnderscores = context.options[0] !== false;
|
|
var caseSensitiveOpt = (context.options[1] || caseSensitive) === caseSensitive;
|
|
|
|
function checkOrder(callee, fn) {
|
|
if (!fn || !fn.params) {
|
|
return;
|
|
}
|
|
var args = fn.params.map(function(arg) {
|
|
var formattedArg = arg.name;
|
|
if (stripUnderscores) {
|
|
formattedArg = formattedArg.replace(/^_(.+)_$/, '$1');
|
|
}
|
|
return caseSensitiveOpt ? formattedArg : formattedArg.toLowerCase();
|
|
});
|
|
var sortedArgs = args.slice().sort();
|
|
sortedArgs.some(function(value, index) {
|
|
if (args.indexOf(value) !== index) {
|
|
context.report(fn, 'Injected values should be sorted alphabetically');
|
|
return true;
|
|
}
|
|
});
|
|
}
|
|
|
|
return {
|
|
'angular?animation': checkOrder,
|
|
'angular?config': checkOrder,
|
|
'angular?controller': checkOrder,
|
|
'angular?directive': checkOrder,
|
|
'angular?factory': checkOrder,
|
|
'angular?filter': checkOrder,
|
|
'angular?inject': checkOrder,
|
|
'angular?run': checkOrder,
|
|
'angular?service': checkOrder,
|
|
'angular?provider': function(callee, providerFn, $get) {
|
|
checkOrder(null, providerFn);
|
|
checkOrder(null, $get);
|
|
}
|
|
};
|
|
})
|
|
};
|