diff --git a/.eslintrc b/.eslintrc index 347734de88a..d73fda086fc 100644 --- a/.eslintrc +++ b/.eslintrc @@ -1,5 +1,5 @@ --- -parser: esprima-fb +parser: babel-eslint env: browser: true @@ -17,16 +17,18 @@ rules: strict: 2 # We actually have a transform to support this and we fix this for bundled # releases but not for the npm package, so enforce it strictly - no-comma-dangle: 2 + comma-dangle: [2, never] # Make this a warning for now. We do this in a few places so we might need to # disable no-unused-expressions: 2 - block-scoped-var: 2 eol-last: 2 dot-notation: 2 + dot-location: [2, property] consistent-return: 2 no-unused-vars: [2, args: none] - quotes: [2, 'single'] + quotes: [2, single] + no-shadow: 2 + no-multi-spaces: 2 # WARNINGS # This is the only one that's hard to track since we don't lint just changes. @@ -46,6 +48,9 @@ rules: no-use-before-define: 0 # We do this in a few places to align values key-spacing: 0 + # It's nice to be able to leave catch blocks empty + no-empty: 0 - # DISABLED. These currently cause errors when running. - no-multi-spaces: 0 + # BROKEN. We'd like to turn these back on. + # causes a ton of noise, eslint is too picky? + block-scoped-var: 0 diff --git a/grunt/tasks/eslint.js b/grunt/tasks/eslint.js index b2b56903943..861962a9011 100644 --- a/grunt/tasks/eslint.js +++ b/grunt/tasks/eslint.js @@ -6,7 +6,8 @@ module.exports = function() { var done = this.async(); grunt.util.spawn({ cmd: 'node_modules/.bin/eslint', - args: ['.'] + args: ['.'], + opts: {stdio: 'inherit'} // allows colors to passthrough }, function(err, result, code) { if (err) { grunt.log.error('Lint failed'); diff --git a/grunt/tasks/release.js b/grunt/tasks/release.js index dde3f809364..97619cfc95f 100644 --- a/grunt/tasks/release.js +++ b/grunt/tasks/release.js @@ -15,7 +15,7 @@ var EXAMPLES_PATH = 'examples/'; var EXAMPLES_GLOB = [EXAMPLES_PATH + '**/*.*']; var STARTER_PATH = 'starter/'; -var STARTER_GLOB = [STARTER_PATH + '/**/*.*']; +var STARTER_GLOB = [STARTER_PATH + '/**/*.*']; var STARTER_BUILD_PATH = 'build/starter/'; diff --git a/npm-react-codemod/transforms/class.js b/npm-react-codemod/transforms/class.js index 4acc162781b..1a0d291c4c9 100644 --- a/npm-react-codemod/transforms/class.js +++ b/npm-react-codemod/transforms/class.js @@ -8,7 +8,7 @@ * */ -/*eslint-disable no-comma-dangle*/ +/*eslint-disable comma-dangle*/ 'use strict'; @@ -157,11 +157,11 @@ function updateReactCreateClassToES6(file, api, options) { ) .filter(isFunctionExpression); - const findAutobindNamesFor = (root, fnNames, literalOrIdentifier) => { + const findAutobindNamesFor = (subtree, fnNames, literalOrIdentifier) => { const node = literalOrIdentifier; const autobindNames = {}; - j(root) + j(subtree) .find(j.MemberExpression, { object: node.name ? { type: node.type, diff --git a/npm-react-codemod/transforms/findDOMNode.js b/npm-react-codemod/transforms/findDOMNode.js index 5d0cacc60db..c59334fba0d 100644 --- a/npm-react-codemod/transforms/findDOMNode.js +++ b/npm-react-codemod/transforms/findDOMNode.js @@ -8,7 +8,7 @@ * */ -/*eslint-disable no-comma-dangle*/ +/*eslint-disable comma-dangle*/ 'use strict'; diff --git a/npm-react-codemod/transforms/pure-render-mixin.js b/npm-react-codemod/transforms/pure-render-mixin.js index 5a6f6d4a951..fc30ad4ebd3 100644 --- a/npm-react-codemod/transforms/pure-render-mixin.js +++ b/npm-react-codemod/transforms/pure-render-mixin.js @@ -8,7 +8,7 @@ * */ -/*eslint-disable no-comma-dangle*/ +/*eslint-disable comma-dangle*/ 'use strict'; diff --git a/npm-react-codemod/transforms/utils/ReactUtils.js b/npm-react-codemod/transforms/utils/ReactUtils.js index 351d334bdf2..64dbedc06ac 100644 --- a/npm-react-codemod/transforms/utils/ReactUtils.js +++ b/npm-react-codemod/transforms/utils/ReactUtils.js @@ -8,7 +8,7 @@ * */ - /*eslint-disable no-comma-dangle*/ +/*eslint-disable comma-dangle*/ 'use strict'; @@ -47,7 +47,7 @@ module.exports = function(j) { const findReactCreateClass = path => path .findVariableDeclarators() - .filter(path => findReactCreateClassCallExpression(path).size() > 0); + .filter(decl => findReactCreateClassCallExpression(decl).size() > 0); const findReactCreateClassModuleExports = path => path diff --git a/package.json b/package.json index 0749dcdf0e1..22eb65e0377 100644 --- a/package.json +++ b/package.json @@ -30,6 +30,7 @@ }, "devDependencies": { "babel": "^5.3.3", + "babel-eslint": "^3.1.9", "benchmark": "~1.0.0", "browserify": "^9.0.3", "bundle-collapser": "^1.1.1", @@ -38,8 +39,7 @@ "derequire": "^2.0.0", "envify": "^3.0.0", "es5-shim": "^4.0.0", - "eslint": "^0.14.1", - "esprima-fb": "^15001.1.0-dev-harmony-fb", + "eslint": "^0.21.2", "grunt": "~0.4.2", "grunt-cli": "^0.1.13", "grunt-compare-size": "~0.4.0", diff --git a/src/addons/ReactFragment.js b/src/addons/ReactFragment.js index 19cb40b4bda..40e3dc1789e 100644 --- a/src/addons/ReactFragment.js +++ b/src/addons/ReactFragment.js @@ -23,10 +23,13 @@ var warning = require('warning'); * create a keyed fragment. The resulting data structure is opaque, for now. */ +var fragmentKey; +var didWarnKey; +var canWarnForReactFragment; + if (__DEV__) { - var fragmentKey = '_reactFragment'; - var didWarnKey = '_reactDidWarn'; - var canWarnForReactFragment = false; + fragmentKey = '_reactFragment'; + didWarnKey = '_reactDidWarn'; try { // Feature test. Don't even try to issue this warning if we can't use @@ -49,7 +52,9 @@ if (__DEV__) { ); canWarnForReactFragment = true; - } catch (x) { } + } catch (x) { + canWarnForReactFragment = false; + } var proxyPropertyAccessWithWarning = function(obj, key) { Object.defineProperty(obj, key, { diff --git a/src/renderers/dom/client/ReactBrowserEventEmitter.js b/src/renderers/dom/client/ReactBrowserEventEmitter.js index d7f5da9616c..6f7951116e1 100644 --- a/src/renderers/dom/client/ReactBrowserEventEmitter.js +++ b/src/renderers/dom/client/ReactBrowserEventEmitter.js @@ -212,8 +212,8 @@ var ReactBrowserEventEmitter = assign({}, ReactEventEmitterMixin, { listenTo: function(registrationName, contentDocumentHandle) { var mountAt = contentDocumentHandle; var isListening = getListeningForDocument(mountAt); - var dependencies = EventPluginRegistry. - registrationNameDependencies[registrationName]; + var dependencies = + EventPluginRegistry.registrationNameDependencies[registrationName]; var topLevelTypes = EventConstants.topLevelTypes; for (var i = 0; i < dependencies.length; i++) { diff --git a/src/renderers/dom/client/eventPlugins/ChangeEventPlugin.js b/src/renderers/dom/client/eventPlugins/ChangeEventPlugin.js index df83f540e6b..52b1d00d739 100644 --- a/src/renderers/dom/client/eventPlugins/ChangeEventPlugin.js +++ b/src/renderers/dom/client/eventPlugins/ChangeEventPlugin.js @@ -150,7 +150,7 @@ if (ExecutionEnvironment.canUseDOM) { * (For old IE.) Replacement getter/setter for the `value` property that gets * set on the active element. */ -var newValueProp = { +var newValueProp = { get: function() { return activeElementValueProp.get.call(this); },