diff --git a/.eslintrc b/.eslintrc new file mode 100644 index 0000000000..098c60b14f --- /dev/null +++ b/.eslintrc @@ -0,0 +1,37 @@ +{ + rules: { + indent: [2, 2, {"SwitchCase": 1}], + no-multi-spaces: 2, + no-underscore-dangle: 0, + no-use-before-define: [1, "nofunc"], + no-unused-expressions: 0, + no-empty-class: 0, + object-curly-spacing: [2, "always"], + quotes: [1, "single"], + space-in-parens: [2, "never"] + }, + env: { + node: true + }, + globals: { + angular: true, + $: true, + jQuery: true, + moment: true, + window: true, + document: true, + Modernizr: true, + __TESTING__: true, + beforeEach: true, + expect: true, + describe: true, + it: true, + element: true, + by: true, + browser: true, + inject: true, + register: true, + sinon: true, + _: false + } +} diff --git a/gruntfile.js b/gruntfile.js index d10611e52d..1a9cc7ff99 100644 --- a/gruntfile.js +++ b/gruntfile.js @@ -102,6 +102,10 @@ module.exports = function (grunt) { } } }, + eslint: { + options: {}, + target: _.union(defaultAssets.server.gruntConfig, defaultAssets.server.allJS, defaultAssets.client.js, testAssets.tests.server, testAssets.tests.client, testAssets.tests.e2e) + }, csslint: { options: { csslintrc: '.csslintrc' @@ -293,7 +297,7 @@ module.exports = function (grunt) { }); // Lint CSS and JavaScript files. - grunt.registerTask('lint', ['sass', 'less', 'jshint', 'csslint']); + grunt.registerTask('lint', ['sass', 'less', 'jshint', 'eslint', 'csslint']); // Lint project files and minify them into two production files. grunt.registerTask('build', ['env:dev', 'lint', 'ngAnnotate', 'uglify', 'cssmin']); diff --git a/gulpfile.js b/gulpfile.js index ddde34e8f9..f6b2e1860b 100644 --- a/gulpfile.js +++ b/gulpfile.js @@ -96,6 +96,22 @@ gulp.task('jshint', function () { .pipe(plugins.jshint.reporter('fail')); }); +// ESLint JS linting task +gulp.task('eslint', function () { + var assets = _.union( + defaultAssets.server.gulpConfig, + defaultAssets.server.allJS, + defaultAssets.client.js, + testAssets.tests.server, + testAssets.tests.client, + testAssets.tests.e2e + ); + + return gulp.src(assets) + .pipe(plugins.eslint()) + .pipe(plugins.eslint.format()); +}); + // JS minifying task gulp.task('uglify', function () { var assets = _.union( @@ -243,7 +259,7 @@ gulp.task('protractor', ['webdriver_update'], function () { // Lint CSS and JavaScript files. gulp.task('lint', function (done) { - runSequence('less', 'sass', ['csslint', 'jshint'], done); + runSequence('less', 'sass', ['csslint', 'eslint', 'jshint'], done); }); // Lint project files and minify them into two production files. diff --git a/package.json b/package.json index 341a94201d..e978286bc6 100644 --- a/package.json +++ b/package.json @@ -75,6 +75,7 @@ "grunt-contrib-uglify": "~0.9.1", "grunt-contrib-watch": "~0.6.1", "grunt-env": "~0.4.4", + "grunt-eslint": "~17.3.1", "grunt-karma": "~0.11.2", "grunt-mocha-istanbul": "^2.4.0", "grunt-mocha-test": "~0.12.7", @@ -89,6 +90,7 @@ "gulp-concat": "^2.6.0", "gulp-csslint": "~0.1.5", "gulp-cssmin": "~0.1.7", + "gulp-eslint": "~1.0.0", "gulp-jshint": "^1.11.2", "gulp-karma": "~0.0.4", "gulp-less": "^3.0.3",