Esanders has uploaded a new change for review. https://gerrit.wikimedia.org/r/320926
Change subject: build: Replace jscs+jshint with eslint ...................................................................... build: Replace jscs+jshint with eslint Change-Id: Idc2bc95a2b7c5ae37864d5c351b9031337e29f46 --- A .eslintrc.json D .jscsrc D .jshintignore D .jshintrc M Gruntfile.js M package.json M src/EventEmitter.js M src/Factory.js M src/Registry.js M src/core.js M src/export.js M src/util.js M src/util/jquery.js M tests/node-index.js M tests/saucelabs.browsers.js M tests/testrunner.js M tests/unit/SortedEmitterList.test.js M tests/unit/core.test.js M tests/unit/util.test.js 19 files changed, 50 insertions(+), 62 deletions(-) git pull ssh://gerrit.wikimedia.org:29418/oojs/core refs/changes/26/320926/1 diff --git a/.eslintrc.json b/.eslintrc.json new file mode 100644 index 0000000..e1760c6 --- /dev/null +++ b/.eslintrc.json @@ -0,0 +1,20 @@ +{ + "extends": "wikimedia", + + "ecmaVersion": 5, + "env": { + "browser": true, + "jquery": true, + "qunit": true + }, + "globals": { + "oo": true, + "OO": false + }, + + "rules": { + "dot-notation": 0, + "valid-jsdoc": 0, + "wrap-iife": 0 + } +} diff --git a/.jscsrc b/.jscsrc deleted file mode 100644 index 9d22e3f..0000000 --- a/.jscsrc +++ /dev/null @@ -1,3 +0,0 @@ -{ - "preset": "wikimedia" -} diff --git a/.jshintignore b/.jshintignore deleted file mode 100644 index 9aa34ea..0000000 --- a/.jshintignore +++ /dev/null @@ -1,4 +0,0 @@ -/coverage -/docs -/lib -node_modules diff --git a/.jshintrc b/.jshintrc deleted file mode 100644 index 7f73166..0000000 --- a/.jshintrc +++ /dev/null @@ -1,18 +0,0 @@ -{ - // Enforcing - "bitwise": true, - "eqeqeq": true, - "freeze": true, - "latedef": true, - "noarg": true, - "nonew": true, - "undef": true, - "unused": true, - "strict": false, - - "globals": { - "oo": true, - "OO": false, - "QUnit": false - } -} diff --git a/Gruntfile.js b/Gruntfile.js index 87d9dd9..4d57603 100644 --- a/Gruntfile.js +++ b/Gruntfile.js @@ -10,16 +10,15 @@ * SAUCE_ACCESS_KEY from your bashrc and run 'grunt ci'. Sign up for free at https://saucelabs.com/signup/plan/free. */ -/*jshint node:true */ +/* eslint-env node */ module.exports = function ( grunt ) { var sauceBrowsers = require( './tests/saucelabs.browsers.js' ); grunt.loadNpmTasks( 'grunt-contrib-clean' ); grunt.loadNpmTasks( 'grunt-contrib-concat' ); - grunt.loadNpmTasks( 'grunt-contrib-jshint' ); grunt.loadNpmTasks( 'grunt-contrib-uglify' ); grunt.loadNpmTasks( 'grunt-contrib-watch' ); - grunt.loadNpmTasks( 'grunt-jscs' ); + grunt.loadNpmTasks( 'grunt-eslint' ); grunt.loadNpmTasks( 'grunt-karma' ); grunt.initConfig( { @@ -65,19 +64,19 @@ ] } }, - jshint: { - options: { - jshintrc: true + eslint: { + fix: { + options: { + fix: true + }, + src: [ + '<%= eslint.dev %>' + ] }, dev: [ '*.js', '{src,tests}/**/*.js' - ], - // Skipping the minimised distribution files - dist: 'dist/**/oojs{.jquery,}.js' - }, - jscs: { - dev: '<%= jshint.dev %>' + ] }, uglify: { options: { @@ -152,8 +151,7 @@ }, watch: { files: [ - '.{jscsrc,jshintignore,jshintrc}', - '<%= jshint.dev %>' + '<%= eslint.dev %>' ], tasks: '_test' } @@ -174,7 +172,7 @@ } ); grunt.registerTask( 'build', [ 'clean', 'concat', 'uglify' ] ); - grunt.registerTask( '_test', [ 'git-build', 'build', 'jshint', 'jscs', 'karma:main', 'karma:jquery', 'karma:other' ] ); + grunt.registerTask( '_test', [ 'git-build', 'build', 'eslint', 'karma:main', 'karma:jquery', 'karma:other' ] ); grunt.registerTask( 'ci', [ '_test', 'karma:ci' ] ); if ( process.env.ZUUL_PIPELINE === 'gate-and-submit' ) { diff --git a/package.json b/package.json index f132a25..f3301ce 100644 --- a/package.json +++ b/package.json @@ -24,13 +24,13 @@ }, "dependencies": {}, "devDependencies": { + "eslint-config-wikimedia": "0.2.0", "grunt": "1.0.1", "grunt-contrib-clean": "1.0.0", "grunt-contrib-concat": "1.0.1", - "grunt-contrib-jshint": "1.0.0", "grunt-contrib-uglify": "1.0.1", "grunt-contrib-watch": "1.0.0", - "grunt-jscs": "2.8.0", + "grunt-eslint": "19.0.0", "grunt-karma": "2.0.0", "jquery": "1.11.3", "karma": "1.1.1", diff --git a/src/EventEmitter.js b/src/EventEmitter.js index dbb337f..169f3a8 100644 --- a/src/EventEmitter.js +++ b/src/EventEmitter.js @@ -1,4 +1,4 @@ -/*global hasOwn */ +/* global hasOwn */ ( function () { diff --git a/src/Factory.js b/src/Factory.js index bb78455..c0435c9 100644 --- a/src/Factory.js +++ b/src/Factory.js @@ -1,4 +1,4 @@ -/*global createObject */ +/* global createObject */ /** * @class OO.Factory diff --git a/src/Registry.js b/src/Registry.js index 6378715..f27e501 100644 --- a/src/Registry.js +++ b/src/Registry.js @@ -1,4 +1,4 @@ -/*global hasOwn */ +/* global hasOwn */ /** * @class OO.Registry diff --git a/src/core.js b/src/core.js index abae8ce..06f6669 100644 --- a/src/core.js +++ b/src/core.js @@ -1,4 +1,4 @@ -/*exported toString */ +/* exported toString */ var /** * Namespace for all classes, static methods and static properties. @@ -348,7 +348,7 @@ right = arr.length; while ( left < right ) { // Equivalent to Math.floor( ( left + right ) / 2 ) but much faster - /*jshint bitwise:false */ + // eslint-disable-next-line no-bitwise mid = ( left + right ) >> 1; cmpResult = searchFunc( arr[ mid ] ); if ( cmpResult < 0 ) { diff --git a/src/export.js b/src/export.js index 0d12d1d..eb09102 100644 --- a/src/export.js +++ b/src/export.js @@ -1,4 +1,4 @@ -/*jshint node:true */ +/* eslint-env node */ if ( typeof module !== 'undefined' && module.exports ) { module.exports = oo; } else { diff --git a/src/util.js b/src/util.js index 2783a8e..349436f 100644 --- a/src/util.js +++ b/src/util.js @@ -1,4 +1,4 @@ -/*global hasOwn, toString */ +/* global hasOwn, toString */ /** * Assert whether a value is a plain object or not. @@ -8,11 +8,10 @@ * @return {boolean} */ oo.isPlainObject = function ( obj ) { - /*jshint eqnull:true, eqeqeq:false */ - // Any object or value whose internal [[Class]] property is not "[object Object]" // Support IE8: Explicitly filter out DOM nodes // Support IE8: Explicitly filter out Window object (needs loose comparison) + // eslint-disable-next-line eqeqeq if ( !obj || toString.call( obj ) !== '[object Object]' || obj.nodeType || ( obj != null && obj == obj.window ) ) { return false; } diff --git a/src/util/jquery.js b/src/util/jquery.js index 027ae11..b5337c2 100644 --- a/src/util/jquery.js +++ b/src/util/jquery.js @@ -1,3 +1,3 @@ -/*global $ */ +/* global $ */ oo.isPlainObject = $.isPlainObject; diff --git a/tests/node-index.js b/tests/node-index.js index 2f90173..980a8f4 100644 --- a/tests/node-index.js +++ b/tests/node-index.js @@ -1,4 +1,4 @@ -/*jshint node:true */ +/* eslint-env node */ var qunit = require( 'qunit' ); qunit.setup( { diff --git a/tests/saucelabs.browsers.js b/tests/saucelabs.browsers.js index 96aa595..c10fab1 100644 --- a/tests/saucelabs.browsers.js +++ b/tests/saucelabs.browsers.js @@ -1,4 +1,4 @@ -/*jshint node:true */ +/* eslint-env node */ /** * Cover a wide range of browsers with (ideally) no more than 9 browsers (3 batches of 3). diff --git a/tests/testrunner.js b/tests/testrunner.js index 81b85d3..9845611 100644 --- a/tests/testrunner.js +++ b/tests/testrunner.js @@ -1,6 +1,4 @@ ( function () { - /*jshint browser:true */ - // Extend QUnit.module to provide a fixture element. This used to be in tests/index.html, but // dynamic test runners like Karma build their own web page. ( function () { @@ -42,7 +40,7 @@ document.getElementById( 'qunit-fixture' ).appendChild( iframe ); // Support IE8: Without "src", the contentWindow has no 'Object' constructor. - /*jshint scripturl:true */ + // eslint-disable-next-line no-script-url iframe.src = 'javascript:'; // Support IE6: Iframe contentWindow is populated asynchronously. diff --git a/tests/unit/SortedEmitterList.test.js b/tests/unit/SortedEmitterList.test.js index a56a15c..d0587fb 100644 --- a/tests/unit/SortedEmitterList.test.js +++ b/tests/unit/SortedEmitterList.test.js @@ -90,7 +90,7 @@ msg: 'Passing an item instead of an array to addItems' }, { - items: initialItems, + items: initialItems, newSortingCallback: function ( a, b ) { // Flip the sort return a.getContent() > b.getContent() ? -1 : diff --git a/tests/unit/core.test.js b/tests/unit/core.test.js index 603f5ec..f15b794 100644 --- a/tests/unit/core.test.js +++ b/tests/unit/core.test.js @@ -324,7 +324,6 @@ } } }; - /*jshint loopfunc:true */ funcObj = function abc( d ) { return d; }; funcObj.foo = 3; funcObj.bar = { @@ -802,7 +801,6 @@ }; oo.compare.callCount = 0; oo.compare( x, y ); - /**jshint bitwise: true */ assert.strictEqual( oo.compare.callCount, Math.pow( 2, depth + 1 ) - 2, diff --git a/tests/unit/util.test.js b/tests/unit/util.test.js index b6debf0..cb69324 100644 --- a/tests/unit/util.test.js +++ b/tests/unit/util.test.js @@ -20,8 +20,8 @@ // Primitives assert.strictEqual( oo.isPlainObject( undefined ), false, 'undefined' ); assert.strictEqual( oo.isPlainObject( null ), false, 'null' ); - assert.strictEqual( oo.isPlainObject( false ), false, 'boolean false' ); - assert.strictEqual( oo.isPlainObject( true ), false, 'boolean true' ); + assert.strictEqual( oo.isPlainObject( false ), false, 'boolean false' ); + assert.strictEqual( oo.isPlainObject( true ), false, 'boolean true' ); assert.strictEqual( oo.isPlainObject( 0 ), false, 'number 0' ); assert.strictEqual( oo.isPlainObject( 42 ), false, 'positive number' ); assert.strictEqual( oo.isPlainObject( -42 ), false, 'negative number' ); -- To view, visit https://gerrit.wikimedia.org/r/320926 To unsubscribe, visit https://gerrit.wikimedia.org/r/settings Gerrit-MessageType: newchange Gerrit-Change-Id: Idc2bc95a2b7c5ae37864d5c351b9031337e29f46 Gerrit-PatchSet: 1 Gerrit-Project: oojs/core Gerrit-Branch: master Gerrit-Owner: Esanders <esand...@wikimedia.org> _______________________________________________ MediaWiki-commits mailing list MediaWiki-commits@lists.wikimedia.org https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits