From 40f261b9d9b5ecb0f4240cd885aa965818b2585d Mon Sep 17 00:00:00 2001
From: Mitsuru Ogawa <mitsuru.ogawa.jp@gmail.com>
Date: Fri, 1 Feb 2013 00:32:20 +0900
Subject: [PATCH 0001/1591] Fixed typo

---
 README.md | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/README.md b/README.md
index 2c9d95b750..4f04ae9253 100644
--- a/README.md
+++ b/README.md
@@ -454,7 +454,7 @@
       var declaredButNotAssigned = true;
     }
 
-    // The interpretor is hoisting the variable
+    // The interpreter is hoisting the variable
     // declaration to the top of the scope.
     // Which means our example could be rewritten as:
     function example() {

From 11bfc4a221907f20acf9ec8839f69cb5653cb1a2 Mon Sep 17 00:00:00 2001
From: Mitsuru Ogawa <mitsuru.ogawa.jp@gmail.com>
Date: Sun, 10 Feb 2013 23:54:57 +0900
Subject: [PATCH 0002/1591] Fixed typo

---
 README.md | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/README.md b/README.md
index 4f04ae9253..fbd0ba120c 100644
--- a/README.md
+++ b/README.md
@@ -255,7 +255,7 @@
     ```
 
   - Never declare a function in a non-function block (if, while, etc). Assign the function to a variable instead. Browsers will allow you to do it, but they all interpret it differently, which is bad news bears.
-  - **Note:** ECMA-262 defines a `block` as a list of statements. A function declartion is not a statement. [Read ECMA-262's note on this issue](http://www.ecma-international.org/publications/files/ECMA-ST/Ecma-262.pdf#page=97).
+  - **Note:** ECMA-262 defines a `block` as a list of statements. A function declaration is not a statement. [Read ECMA-262's note on this issue](http://www.ecma-international.org/publications/files/ECMA-ST/Ecma-262.pdf#page=97).
 
     ```javascript
     // bad

From e484fa58b13fffca55aae057eea406300bb05fc9 Mon Sep 17 00:00:00 2001
From: Mitsuru Ogawa <mitsuru.ogawa.jp@gmail.com>
Date: Fri, 15 Feb 2013 00:01:19 +0900
Subject: [PATCH 0003/1591] translate into Japanese

---
 README.md | 7 +++++++
 1 file changed, 7 insertions(+)

diff --git a/README.md b/README.md
index c7078dad0d..2afcce4909 100644
--- a/README.md
+++ b/README.md
@@ -30,6 +30,7 @@
   1. [Performance](#performance)
   1. [Resources](#resources)
   1. [In the Wild](#in-the-wild)
+  1. [Translation](#translation)
   1. [The JavaScript Style Guide Guide](#guide-guide)
   1. [Contributors](#contributors)
   1. [License](#license)
@@ -1340,6 +1341,12 @@
   - **Razorfish**: [razorfish/javascript-style-guide](//github.com/razorfish/javascript-style-guide)
   - **Shutterfly**: [shutterfly/javascript](//github.com/shutterfly/javascript)
 
+## <a name='translation'>Translation</a>
+
+  The style guide is also available in other language.
+
+  - **Japanese**: [mitsuruog/javacript-style-guide](https://github.com/mitsuruog/javacript-style-guide)
+
 ## <a name='guide-guide'>The JavaScript Style Guide Guide</a>
 
   - [Reference](//github.com/airbnb/javascript/wiki/The-JavaScript-Style-Guide-Guide)

From f91e83e84d3486c99d11699b3ff36fa34ace8a17 Mon Sep 17 00:00:00 2001
From: Harrison Shoff <hi@hshoff.com>
Date: Thu, 14 Feb 2013 17:53:43 -0800
Subject: [PATCH 0004/1591] [translations] update wording

---
 README.md | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/README.md b/README.md
index 2afcce4909..dabb54b424 100644
--- a/README.md
+++ b/README.md
@@ -1343,7 +1343,7 @@
 
 ## <a name='translation'>Translation</a>
 
-  The style guide is also available in other language.
+  This style guide is also available in other languages:
 
   - **Japanese**: [mitsuruog/javacript-style-guide](https://github.com/mitsuruog/javacript-style-guide)
 

From 99bf84776d0f6a31e1363a54df3e790ad6d59d60 Mon Sep 17 00:00:00 2001
From: Timo Furrer <tuxtimo@gmail.com>
Date: Fri, 15 Feb 2013 14:47:57 +0100
Subject: [PATCH 0005/1591] [Translations] added german

---
 README.md | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/README.md b/README.md
index dabb54b424..9d4d4e2f54 100644
--- a/README.md
+++ b/README.md
@@ -963,7 +963,7 @@
     // bad
     this.__firstName__ = 'Panda';
     this.firstName_ = 'Panda';
-    
+
     // good
     this._firstName = 'Panda';
     ```
@@ -1345,6 +1345,7 @@
 
   This style guide is also available in other languages:
 
+  - **German**: [timofurrer/javascript-style-guide](https://github.com/timofurrer/javascript-style-guide)
   - **Japanese**: [mitsuruog/javacript-style-guide](https://github.com/mitsuruog/javacript-style-guide)
 
 ## <a name='guide-guide'>The JavaScript Style Guide Guide</a>

From a11223ab93fa8f96724634abe4cfdcf246d05d83 Mon Sep 17 00:00:00 2001
From: Timo Furrer <tuxtimo@gmail.com>
Date: Fri, 15 Feb 2013 14:50:27 +0100
Subject: [PATCH 0006/1591] moved link to TOC in Whitespace chapter to the end
 and corrected indentation

---
 README.md | 60 +++++++++++++++++++++++++++----------------------------
 1 file changed, 30 insertions(+), 30 deletions(-)

diff --git a/README.md b/README.md
index 9d4d4e2f54..66bcfba485 100644
--- a/README.md
+++ b/README.md
@@ -732,38 +732,38 @@
 
     ```
 
-    **[[⬆]](#TOC)**
-
   - Use indentation when making long method chains.
 
-  ```javascript
-  // bad
-  $('#items').find('.selected').highlight().end().find('.open').updateCount();
-
-  // good
-  $('#items')
-    .find('.selected')
-      .highlight()
-      .end()
-    .find('.open')
-      .updateCount();
-
-  // bad
-  var leds = stage.selectAll('.led').data(data).enter().append("svg:svg").class('led', true)
-      .attr('width',  (radius + margin) * 2).append("svg:g")
-      .attr("transform", "translate(" + (radius + margin) + "," + (radius + margin) + ")")
-      .call(tron.led);
-
-  // good
-  var leds = stage.selectAll('.led')
-      .data(data)
-    .enter().append("svg:svg")
-      .class('led', true)
-      .attr('width',  (radius + margin) * 2)
-    .append("svg:g")
-      .attr("transform", "translate(" + (radius + margin) + "," + (radius + margin) + ")")
-      .call(tron.led);
-  ```
+    ```javascript
+    // bad
+    $('#items').find('.selected').highlight().end().find('.open').updateCount();
+
+    // good
+    $('#items')
+      .find('.selected')
+        .highlight()
+        .end()
+      .find('.open')
+        .updateCount();
+
+    // bad
+    var leds = stage.selectAll('.led').data(data).enter().append("svg:svg").class('led', true)
+        .attr('width',  (radius + margin) * 2).append("svg:g")
+        .attr("transform", "translate(" + (radius + margin) + "," + (radius + margin) + ")")
+        .call(tron.led);
+
+    // good
+    var leds = stage.selectAll('.led')
+        .data(data)
+      .enter().append("svg:svg")
+        .class('led', true)
+        .attr('width',  (radius + margin) * 2)
+      .append("svg:g")
+        .attr("transform", "translate(" + (radius + margin) + "," + (radius + margin) + ")")
+        .call(tron.led);
+    ```
+
+    **[[⬆]](#TOC)**
 
 ## <a name='leading-commas'>Leading Commas</a>
 

From ce104eaa5b16ae49856bd753faf932c081ffdfee Mon Sep 17 00:00:00 2001
From: Harrison Shoff <hi@hshoff.com>
Date: Sat, 16 Feb 2013 10:39:57 -0800
Subject: [PATCH 0007/1591] [translations] add emoji flags

---
 README.md | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/README.md b/README.md
index 66bcfba485..ec9e8e4ea3 100644
--- a/README.md
+++ b/README.md
@@ -1345,8 +1345,8 @@
 
   This style guide is also available in other languages:
 
-  - **German**: [timofurrer/javascript-style-guide](https://github.com/timofurrer/javascript-style-guide)
-  - **Japanese**: [mitsuruog/javacript-style-guide](https://github.com/mitsuruog/javacript-style-guide)
+  - :de: **German**: [timofurrer/javascript-style-guide](https://github.com/timofurrer/javascript-style-guide)
+  - :jp: **Japanese**: [mitsuruog/javacript-style-guide](https://github.com/mitsuruog/javacript-style-guide)
 
 ## <a name='guide-guide'>The JavaScript Style Guide Guide</a>
 

From cea75d10aee7911d35cf22c590a34dd27af2dbc1 Mon Sep 17 00:00:00 2001
From: oslek <git.oslek@gmail.com>
Date: Sun, 17 Feb 2013 14:17:16 -0800
Subject: [PATCH 0008/1591] variables example - moved length declaration to
 newline

---
 README.md | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/README.md b/README.md
index ec9e8e4ea3..cdf02c2958 100644
--- a/README.md
+++ b/README.md
@@ -371,7 +371,8 @@
     var items = getItems(),
         goSportsTeam = true,
         dragonball,
-        i, length;
+        i, 
+        length;
     ```
 
   - Assign variables at the top of their scope. This helps avoid issues with variable declaration and assignment hoisting related issues.

From e012839d088f4ca5a93b35933886a4532b122037 Mon Sep 17 00:00:00 2001
From: Harrison Shoff <hi@hshoff.com>
Date: Mon, 18 Feb 2013 17:22:52 -0800
Subject: [PATCH 0009/1591] [variables] swap length and i declaration order.

---
 README.md | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/README.md b/README.md
index cdf02c2958..6461c6c91b 100644
--- a/README.md
+++ b/README.md
@@ -371,8 +371,8 @@
     var items = getItems(),
         goSportsTeam = true,
         dragonball,
-        i, 
-        length;
+        length,
+        i;
     ```
 
   - Assign variables at the top of their scope. This helps avoid issues with variable declaration and assignment hoisting related issues.

From fba96a8bf06d5bbf7559250834b4913d1dbec159 Mon Sep 17 00:00:00 2001
From: Harrison Shoff <hi@hshoff.com>
Date: Mon, 25 Feb 2013 12:07:01 -0800
Subject: [PATCH 0010/1591] [other styles] add link to conditional callback
 discussion. fixes #52

---
 README.md | 1 +
 1 file changed, 1 insertion(+)

diff --git a/README.md b/README.md
index 6461c6c91b..6be6dee9bf 100644
--- a/README.md
+++ b/README.md
@@ -1299,6 +1299,7 @@
 **Other Styles**
 
   - [Naming this in nested functions](https://gist.github.com/4135065) - Christian Johansen
+  - [Conditional Callbacks](//github.com/airbnb/javascript/issues/52)
 
 **Books**
 

From e0572c7f89fbc91462b4541075cd666ebecf6338 Mon Sep 17 00:00:00 2001
From: Markus Hedlund <znarkus@gmail.com>
Date: Tue, 26 Feb 2013 14:12:56 +0100
Subject: [PATCH 0011/1591] fixed link in Other Styles->Conditional Callbacks

---
 README.md | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/README.md b/README.md
index 6be6dee9bf..31ef086401 100644
--- a/README.md
+++ b/README.md
@@ -1299,7 +1299,7 @@
 **Other Styles**
 
   - [Naming this in nested functions](https://gist.github.com/4135065) - Christian Johansen
-  - [Conditional Callbacks](//github.com/airbnb/javascript/issues/52)
+  - [Conditional Callbacks](https://github.com/airbnb/javascript/issues/52)
 
 **Books**
 

From bbfcaa47b4621894bd65bc31cd6d871f0b45166b Mon Sep 17 00:00:00 2001
From: Reza Qorbani <reza@qorbani.com>
Date: Wed, 6 Mar 2013 10:18:50 -0800
Subject: [PATCH 0012/1591] Fix links in "In the Wild" and "The JavaScript
 Style Guide Guide" sections

---
 README.md | 20 ++++++++++----------
 1 file changed, 10 insertions(+), 10 deletions(-)

diff --git a/README.md b/README.md
index 31ef086401..f9dc913517 100644
--- a/README.md
+++ b/README.md
@@ -1332,16 +1332,16 @@
 
   This is a list of organizations that are using this style guide. Send us a pull request or open an issue and we'll add you to the list.
 
-  - **Airbnb**: [airbnb/javascript](//github.com/airbnb/javascript)
-  - **American Insitutes for Research**: [AIRAST/javascript](//github.com/AIRAST/javascript)
-  - **ExactTarget**: [ExactTarget/javascript](//github.com/ExactTarget/javascript)
-  - **GoCardless**: [gocardless/javascript](//github.com/gocardless/javascript)
-  - **GoodData**: [gooddata/gdc-js-style](//github.com/gooddata/gdc-js-style)
-  - **How About We**: [howaboutwe/javascript](//github.com/howaboutwe/javascript)
-  - **MinnPost**: [MinnPost/javascript](//github.com/MinnPost/javascript)
+  - **Airbnb**: [airbnb/javascript](https://github.com/airbnb/javascript)
+  - **American Insitutes for Research**: [AIRAST/javascript](https://github.com/AIRAST/javascript)
+  - **ExactTarget**: [ExactTarget/javascript](https://github.com/ExactTarget/javascript)
+  - **GoCardless**: [gocardless/javascript](https://github.com/gocardless/javascript)
+  - **GoodData**: [gooddata/gdc-js-style](https://github.com/gooddata/gdc-js-style)
+  - **How About We**: [howaboutwe/javascript](https://github.com/howaboutwe/javascript)
+  - **MinnPost**: [MinnPost/javascript](https://github.com/MinnPost/javascript)
   - **National Geographic**: [natgeo/javascript](https://github.com/natgeo/javascript)
-  - **Razorfish**: [razorfish/javascript-style-guide](//github.com/razorfish/javascript-style-guide)
-  - **Shutterfly**: [shutterfly/javascript](//github.com/shutterfly/javascript)
+  - **Razorfish**: [razorfish/javascript-style-guide](https://github.com/razorfish/javascript-style-guide)
+  - **Shutterfly**: [shutterfly/javascript](https://github.com/shutterfly/javascript)
 
 ## <a name='translation'>Translation</a>
 
@@ -1352,7 +1352,7 @@
 
 ## <a name='guide-guide'>The JavaScript Style Guide Guide</a>
 
-  - [Reference](//github.com/airbnb/javascript/wiki/The-JavaScript-Style-Guide-Guide)
+  - [Reference](https://github.com/airbnb/javascript/wiki/The-JavaScript-Style-Guide-Guide)
 
 ## <a name='authors'>Contributors</a>
 

From d5e0a5e7e3ec4c1280b0ff84582614150625d6bc Mon Sep 17 00:00:00 2001
From: Harrison Shoff <hi@hshoff.com>
Date: Wed, 6 Mar 2013 16:51:16 -0800
Subject: [PATCH 0013/1591] [in the wild] remove GoCardless

---
 README.md | 1 -
 1 file changed, 1 deletion(-)

diff --git a/README.md b/README.md
index f9dc913517..98ae8c1df0 100644
--- a/README.md
+++ b/README.md
@@ -1335,7 +1335,6 @@
   - **Airbnb**: [airbnb/javascript](https://github.com/airbnb/javascript)
   - **American Insitutes for Research**: [AIRAST/javascript](https://github.com/AIRAST/javascript)
   - **ExactTarget**: [ExactTarget/javascript](https://github.com/ExactTarget/javascript)
-  - **GoCardless**: [gocardless/javascript](https://github.com/gocardless/javascript)
   - **GoodData**: [gooddata/gdc-js-style](https://github.com/gooddata/gdc-js-style)
   - **How About We**: [howaboutwe/javascript](https://github.com/howaboutwe/javascript)
   - **MinnPost**: [MinnPost/javascript](https://github.com/MinnPost/javascript)

From a15b27e670d92aac838d581f500fdfa2a16e6bb5 Mon Sep 17 00:00:00 2001
From: Harrison Shoff <hi@hshoff.com>
Date: Mon, 11 Mar 2013 11:07:37 -0700
Subject: [PATCH 0014/1591] [in the wild] add modcloth and zillow

---
 README.md | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/README.md b/README.md
index 98ae8c1df0..d337a1e725 100644
--- a/README.md
+++ b/README.md
@@ -1338,9 +1338,11 @@
   - **GoodData**: [gooddata/gdc-js-style](https://github.com/gooddata/gdc-js-style)
   - **How About We**: [howaboutwe/javascript](https://github.com/howaboutwe/javascript)
   - **MinnPost**: [MinnPost/javascript](https://github.com/MinnPost/javascript)
+  - **ModCloth**: [modcloth/javascript](https://github.com/modcloth/javascript)
   - **National Geographic**: [natgeo/javascript](https://github.com/natgeo/javascript)
   - **Razorfish**: [razorfish/javascript-style-guide](https://github.com/razorfish/javascript-style-guide)
   - **Shutterfly**: [shutterfly/javascript](https://github.com/shutterfly/javascript)
+  - **Zillow**: [zillow/javascript](https://github.com/zillow/javascript)
 
 ## <a name='translation'>Translation</a>
 

From cad9032e7cd798c09f8774971265f8ebb1baeae3 Mon Sep 17 00:00:00 2001
From: Harrison Shoff <hi@hshoff.com>
Date: Sun, 17 Mar 2013 15:46:26 -0700
Subject: [PATCH 0015/1591] [comments] add FIXME and TODO annotations. Fixes
 #62

---
 README.md | 26 ++++++++++++++++++++++++++
 1 file changed, 26 insertions(+)

diff --git a/README.md b/README.md
index d337a1e725..8a6522a100 100644
--- a/README.md
+++ b/README.md
@@ -668,6 +668,32 @@
     }
     ```
 
+  - Prefixing your comments with `FIXME` or `TODO` helps other developers quickly understand if you're pointing out a problem that needs to be revisited, or if you're suggesting a solution to the problem that needs to be implemented. These are different than regular comments because they are actionable. The actions are `FIXME -- need to figure this out` or `TODO -- need to implement`.
+
+  - Use `// FIXME:` to annotate problems
+
+    ```javascript
+    function Calculator() {
+
+      // FIXME: shouldn't use a global here
+      total = 0;
+
+      return this;
+    }
+    ```
+
+  - Use `// TODO:` to annotate solutions to problems
+
+    ```javascript
+    function Calculator() {
+
+      // TODO: total should be configurable by an options param
+      this.total = 0;
+
+      return this;
+    }
+  ```
+
     **[[⬆]](#TOC)**
 
 

From f435429b986dacb816ed31bb3074f0c4dd73f394 Mon Sep 17 00:00:00 2001
From: Alexandre Assouad <alexandre.assouad@gmail.com>
Date: Wed, 20 Mar 2013 18:49:50 +0100
Subject: [PATCH 0016/1591] Fixed small error in jQuery selector example

$('.sidebar > ul') instead of $('.sidebar > .ul')
---
 README.md | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/README.md b/README.md
index 8a6522a100..eaa3651025 100644
--- a/README.md
+++ b/README.md
@@ -1249,7 +1249,7 @@
     }
     ```
 
-  - For DOM queries use Cascading `$('.sidebar ul')` or parent > child `$('.sidebar > .ul')`. [jsPerf](http://jsperf.com/jquery-find-vs-context-sel/16)
+  - For DOM queries use Cascading `$('.sidebar ul')` or parent > child `$('.sidebar > ul')`. [jsPerf](http://jsperf.com/jquery-find-vs-context-sel/16)
   - Use `find` with scoped jQuery object queries.
 
     ```javascript

From 40f18c5b316ae356c41d62fe6a940d316f29b75f Mon Sep 17 00:00:00 2001
From: Harrison Shoff <hi@hshoff.com>
Date: Wed, 20 Mar 2013 13:45:32 -0700
Subject: [PATCH 0017/1591] [in the wild] add userify

---
 README.md | 1 +
 1 file changed, 1 insertion(+)

diff --git a/README.md b/README.md
index eaa3651025..d5525cb9f1 100644
--- a/README.md
+++ b/README.md
@@ -1368,6 +1368,7 @@
   - **National Geographic**: [natgeo/javascript](https://github.com/natgeo/javascript)
   - **Razorfish**: [razorfish/javascript-style-guide](https://github.com/razorfish/javascript-style-guide)
   - **Shutterfly**: [shutterfly/javascript](https://github.com/shutterfly/javascript)
+  - **Userify**: [userify/javascript](https://github.com/userify/javascript)
   - **Zillow**: [zillow/javascript](https://github.com/zillow/javascript)
 
 ## <a name='translation'>Translation</a>

From 8aeebc98765b1d98160b2cdb253d5553684d4c35 Mon Sep 17 00:00:00 2001
From: Arthur Moura Carvalho <armoucar@gmail.com>
Date: Wed, 3 Apr 2013 14:39:59 -0300
Subject: [PATCH 0018/1591] Portuguese Translation (pt-BR)

---
 README.md | 1 +
 1 file changed, 1 insertion(+)

diff --git a/README.md b/README.md
index d5525cb9f1..22e7d9115d 100644
--- a/README.md
+++ b/README.md
@@ -1377,6 +1377,7 @@
 
   - :de: **German**: [timofurrer/javascript-style-guide](https://github.com/timofurrer/javascript-style-guide)
   - :jp: **Japanese**: [mitsuruog/javacript-style-guide](https://github.com/mitsuruog/javacript-style-guide)
+  - :br: **Portuguese**: [armoucar/javascript-style-guide](https://github.com/armoucar/javascript-style-guide)
 
 ## <a name='guide-guide'>The JavaScript Style Guide Guide</a>
 

From c96672368a2c1f539f97b206bb66f6da32aed5ed Mon Sep 17 00:00:00 2001
From: SiPlus <hwguy.siplus@gmail.com>
Date: Fri, 19 Apr 2013 15:23:41 +0400
Subject: [PATCH 0019/1591] Array.prototype.slice.call -> .slice

---
 README.md | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/README.md b/README.md
index 22e7d9115d..6444323d60 100644
--- a/README.md
+++ b/README.md
@@ -139,7 +139,7 @@
     }
 
     // good
-    itemsCopy = Array.prototype.slice.call(items);
+    itemsCopy = items.slice();
     ```
 
     **[[⬆]](#TOC)**

From 948ccd9269727b2346104464cd5aaf0037bdd7f8 Mon Sep 17 00:00:00 2001
From: Spike Brehm <ocelot@gmail.com>
Date: Mon, 22 Apr 2013 10:31:01 -0700
Subject: [PATCH 0020/1591] Add note about converting array-like objects to
 Array

---
 README.md | 9 +++++++++
 1 file changed, 9 insertions(+)

diff --git a/README.md b/README.md
index 6444323d60..aa39a237fa 100644
--- a/README.md
+++ b/README.md
@@ -142,6 +142,15 @@
     itemsCopy = items.slice();
     ```
 
+  - To convert an array-like object to an array, use Array#slice.
+
+    ```javascript
+    function trigger() {
+      var args = Array.prototype.slice.call(arguments);
+      ...
+    }
+    ```
+
     **[[⬆]](#TOC)**
 
 

From cb7b261028929820e195eb8a0287b2301e208459 Mon Sep 17 00:00:00 2001
From: Harrison Shoff <hi@hshoff.com>
Date: Tue, 30 Apr 2013 17:13:54 -0700
Subject: [PATCH 0021/1591] [in the wild] add General Electric

---
 README.md | 1 +
 1 file changed, 1 insertion(+)

diff --git a/README.md b/README.md
index aa39a237fa..09030dcb02 100644
--- a/README.md
+++ b/README.md
@@ -1370,6 +1370,7 @@
   - **Airbnb**: [airbnb/javascript](https://github.com/airbnb/javascript)
   - **American Insitutes for Research**: [AIRAST/javascript](https://github.com/AIRAST/javascript)
   - **ExactTarget**: [ExactTarget/javascript](https://github.com/ExactTarget/javascript)
+  - **GeneralElectric**: [GeneralElectric/javascript](https://github.com/GeneralElectric/javascript)
   - **GoodData**: [gooddata/gdc-js-style](https://github.com/gooddata/gdc-js-style)
   - **How About We**: [howaboutwe/javascript](https://github.com/howaboutwe/javascript)
   - **MinnPost**: [MinnPost/javascript](https://github.com/MinnPost/javascript)

From 8335ffadb439a1d646189bf28082ee7d16b2eb73 Mon Sep 17 00:00:00 2001
From: Harrison Shoff <hi@hshoff.com>
Date: Wed, 8 May 2013 10:28:13 -0700
Subject: [PATCH 0022/1591] [whitespace] use single quotes for strings. fixes
 #68

---
 README.md | 12 ++++++------
 1 file changed, 6 insertions(+), 6 deletions(-)

diff --git a/README.md b/README.md
index 09030dcb02..9ffa524ba4 100644
--- a/README.md
+++ b/README.md
@@ -783,19 +783,19 @@
         .updateCount();
 
     // bad
-    var leds = stage.selectAll('.led').data(data).enter().append("svg:svg").class('led', true)
-        .attr('width',  (radius + margin) * 2).append("svg:g")
-        .attr("transform", "translate(" + (radius + margin) + "," + (radius + margin) + ")")
+    var leds = stage.selectAll('.led').data(data).enter().append('svg:svg').class('led', true)
+        .attr('width',  (radius + margin) * 2).append('svg:g')
+        .attr('transform', 'translate(' + (radius + margin) + ',' + (radius + margin) + ')')
         .call(tron.led);
 
     // good
     var leds = stage.selectAll('.led')
         .data(data)
-      .enter().append("svg:svg")
+      .enter().append('svg:svg')
         .class('led', true)
         .attr('width',  (radius + margin) * 2)
-      .append("svg:g")
-        .attr("transform", "translate(" + (radius + margin) + "," + (radius + margin) + ")")
+      .append('svg:g')
+        .attr('transform', 'translate(' + (radius + margin) + ',' + (radius + margin) + ')')
         .call(tron.led);
     ```
 

From 18485bd186828c1f099f75271b17b1db9b0dd766 Mon Sep 17 00:00:00 2001
From: Harrison Shoff <hi@hshoff.com>
Date: Mon, 1 Jul 2013 12:44:41 -0700
Subject: [PATCH 0023/1591] [events] add events section, pass a hash not a raw
 value

---
 README.md | 27 +++++++++++++++++++++++++++
 1 file changed, 27 insertions(+)

diff --git a/README.md b/README.md
index 9ffa524ba4..c70fa76091 100644
--- a/README.md
+++ b/README.md
@@ -23,6 +23,7 @@
   1. [Naming Conventions](#naming-conventions)
   1. [Accessors](#accessors)
   1. [Constructors](#constructors)
+  1. [Events](#events)
   1. [Modules](#modules)
   1. [jQuery](#jquery)
   1. [ES5 Compatibility](#es5)
@@ -1188,6 +1189,32 @@
     **[[⬆]](#TOC)**
 
 
+## <a name='events'>Events</a>
+
+  - When attaching data payloads to events use a hash instead of a raw value
+
+    ```javascript
+    // bad
+    $(this).trigger('listingUpdated', listing.id);
+
+    ...
+
+    $(this).on('listingUpdated', function(e, listingId) {
+      // do something with listingId
+    });
+
+    // good
+    $(this).trigger('listingUpdated', { listingId : listing.id });
+
+    ...
+
+    $(this).on('listingUpdated', function(e, data) {
+      // do something with data.listingId
+    });
+    ```
+  **[[⬆]](#TOC)**
+
+
 ## <a name='modules'>Modules</a>
 
   - The module should start with a `!`. This ensures that if a malformed module forgets to include a final semicolon there aren't errors in production when the scripts get concatenated.

From 7d7c1c799c265f3640e29dc17c8837c3a63cf3b4 Mon Sep 17 00:00:00 2001
From: Harrison Shoff <hi@hshoff.com>
Date: Mon, 1 Jul 2013 13:02:09 -0700
Subject: [PATCH 0024/1591] [events] add period

---
 README.md | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/README.md b/README.md
index c70fa76091..c293953322 100644
--- a/README.md
+++ b/README.md
@@ -1191,7 +1191,7 @@
 
 ## <a name='events'>Events</a>
 
-  - When attaching data payloads to events use a hash instead of a raw value
+  - When attaching data payloads to events use a hash instead of a raw value.
 
     ```javascript
     // bad

From 412a7f972cf1a7eb162aa0e785bf960192e983ad Mon Sep 17 00:00:00 2001
From: Nirav Sanghani <nirav.sanghani@gmail.com>
Date: Mon, 1 Jul 2013 13:25:34 -0700
Subject: [PATCH 0025/1591] Use explanation from #71

---
 README.md | 11 ++++++++---
 1 file changed, 8 insertions(+), 3 deletions(-)

diff --git a/README.md b/README.md
index c293953322..d0a0f2f81d 100644
--- a/README.md
+++ b/README.md
@@ -1191,9 +1191,9 @@
 
 ## <a name='events'>Events</a>
 
-  - When attaching data payloads to events use a hash instead of a raw value.
-
-    ```javascript
+  - When attaching data payloads to events (whether DOM events or something more proprietary like Backbone events), pass a hash instead of a raw value. This allows a subsequent contributor to add more data to the event payload without finding and updating every handler for the event. For example, instead of:
+    
+    ```js
     // bad
     $(this).trigger('listingUpdated', listing.id);
 
@@ -1202,7 +1202,11 @@
     $(this).on('listingUpdated', function(e, listingId) {
       // do something with listingId
     });
+    ```
 
+    prefer:
+    
+    ```js
     // good
     $(this).trigger('listingUpdated', { listingId : listing.id });
 
@@ -1212,6 +1216,7 @@
       // do something with data.listingId
     });
     ```
+
   **[[⬆]](#TOC)**
 
 

From e3e3cc1a4e246c720fc8305d80fa6504d4a69584 Mon Sep 17 00:00:00 2001
From: Harrison Shoff <hi@hshoff.com>
Date: Tue, 2 Jul 2013 10:34:21 -0700
Subject: [PATCH 0026/1591] [resources] add section for further reading,
 closures. fixes #64

---
 README.md | 8 ++++++--
 1 file changed, 6 insertions(+), 2 deletions(-)

diff --git a/README.md b/README.md
index d0a0f2f81d..6b2691d682 100644
--- a/README.md
+++ b/README.md
@@ -1192,7 +1192,7 @@
 ## <a name='events'>Events</a>
 
   - When attaching data payloads to events (whether DOM events or something more proprietary like Backbone events), pass a hash instead of a raw value. This allows a subsequent contributor to add more data to the event payload without finding and updating every handler for the event. For example, instead of:
-    
+
     ```js
     // bad
     $(this).trigger('listingUpdated', listing.id);
@@ -1205,7 +1205,7 @@
     ```
 
     prefer:
-    
+
     ```js
     // good
     $(this).trigger('listingUpdated', { listingId : listing.id });
@@ -1368,6 +1368,10 @@
   - [Naming this in nested functions](https://gist.github.com/4135065) - Christian Johansen
   - [Conditional Callbacks](https://github.com/airbnb/javascript/issues/52)
 
+**Further Reading**
+
+  - [Understanding JavaScript Closures](http://javascriptweblog.wordpress.com/2010/10/25/understanding-javascript-closures/) - Angus Croll
+
 **Books**
 
   - [JavaScript: The Good Parts](http://www.amazon.com/JavaScript-Good-Parts-Douglas-Crockford/dp/0596517742) - Douglas Crockford

From bf87eec1996c02342ba8819e4bd5dad0f93ea7de Mon Sep 17 00:00:00 2001
From: Harrison Shoff <hi@hshoff.com>
Date: Thu, 11 Jul 2013 12:06:25 -0700
Subject: [PATCH 0027/1591] [commas] add section on additional trailing commas.
 fixes #75

---
 README.md | 34 +++++++++++++++++++++++++++++++---
 1 file changed, 31 insertions(+), 3 deletions(-)

diff --git a/README.md b/README.md
index 6b2691d682..aceaef546d 100644
--- a/README.md
+++ b/README.md
@@ -17,7 +17,7 @@
   1. [Blocks](#blocks)
   1. [Comments](#comments)
   1. [Whitespace](#whitespace)
-  1. [Leading Commas](#leading-commas)
+  1. [Commas](#commas)
   1. [Semicolons](#semicolons)
   1. [Type Casting & Coercion](#type-coercion)
   1. [Naming Conventions](#naming-conventions)
@@ -802,9 +802,9 @@
 
     **[[⬆]](#TOC)**
 
-## <a name='leading-commas'>Leading Commas</a>
+## <a name='commas'>Commas</a>
 
-  - **Nope.**
+  - Leading commas: **Nope.**
 
     ```javascript
     // bad
@@ -834,6 +834,34 @@
     };
     ```
 
+  - Additional trailing comma: **Nope.** This can cause problems with IE6/7 and IE9 if it's in quirksmode. Also, in some implementations of ES3 would add length to an array if it had an additional trailing comma. This was clarified in ES5 ([source](http://es5.github.io/#D)):
+
+  > Edition 5 clarifies the fact that a trailing comma at the end of an ArrayInitialiser does not add to the length of the array. This is not a semantic change from Edition 3 but some implementations may have previously misinterpreted this.
+
+    ```javascript
+    // bad
+    var hero = {
+      firstName: 'Kevin',
+      lastName: 'Flynn',
+    };
+
+    var heroes = [
+      'Batman',
+      'Superman',
+    ];
+
+    // good
+    var hero = {
+      firstName: 'Kevin',
+      lastName: 'Flynn'
+    };
+
+    var heroes = [
+      'Batman',
+      'Superman'
+    ];
+    ```
+
     **[[⬆]](#TOC)**
 
 

From 12d3f05a4bb0444741089f941ecc8aaef241fa2c Mon Sep 17 00:00:00 2001
From: Harrison Shoff <hi@hshoff.com>
Date: Fri, 12 Jul 2013 13:56:02 -0700
Subject: [PATCH 0028/1591] [in the wild] add ZocDoc

---
 README.md | 1 +
 1 file changed, 1 insertion(+)

diff --git a/README.md b/README.md
index aceaef546d..3bf21f5152 100644
--- a/README.md
+++ b/README.md
@@ -1444,6 +1444,7 @@
   - **Shutterfly**: [shutterfly/javascript](https://github.com/shutterfly/javascript)
   - **Userify**: [userify/javascript](https://github.com/userify/javascript)
   - **Zillow**: [zillow/javascript](https://github.com/zillow/javascript)
+  - **ZocDoc**: [ZocDoc/javascript](https://github.com/ZocDoc/javascript)
 
 ## <a name='translation'>Translation</a>
 

From 6a749befe8141bb2c353f47f7c2ca6c411894111 Mon Sep 17 00:00:00 2001
From: Harrison Shoff <hi@hshoff.com>
Date: Mon, 29 Jul 2013 16:29:28 -0700
Subject: [PATCH 0029/1591] [in the wild] add National Park Service

---
 README.md | 1 +
 1 file changed, 1 insertion(+)

diff --git a/README.md b/README.md
index 3bf21f5152..cd5fd112d1 100644
--- a/README.md
+++ b/README.md
@@ -1440,6 +1440,7 @@
   - **MinnPost**: [MinnPost/javascript](https://github.com/MinnPost/javascript)
   - **ModCloth**: [modcloth/javascript](https://github.com/modcloth/javascript)
   - **National Geographic**: [natgeo/javascript](https://github.com/natgeo/javascript)
+  - **National Park Service**: [nationalparkservice/javascript](https://github.com/nationalparkservice/javascript)
   - **Razorfish**: [razorfish/javascript-style-guide](https://github.com/razorfish/javascript-style-guide)
   - **Shutterfly**: [shutterfly/javascript](https://github.com/shutterfly/javascript)
   - **Userify**: [userify/javascript](https://github.com/userify/javascript)

From ede18e7aa95b07de149a0fd182ebfa071cffd314 Mon Sep 17 00:00:00 2001
From: Adam <luchaowu@sohu.com>
Date: Thu, 1 Aug 2013 21:00:01 +0800
Subject: [PATCH 0030/1591] Update README.md

---
 README.md | 1 +
 1 file changed, 1 insertion(+)

diff --git a/README.md b/README.md
index cd5fd112d1..db8ed688cd 100644
--- a/README.md
+++ b/README.md
@@ -1454,6 +1454,7 @@
   - :de: **German**: [timofurrer/javascript-style-guide](https://github.com/timofurrer/javascript-style-guide)
   - :jp: **Japanese**: [mitsuruog/javacript-style-guide](https://github.com/mitsuruog/javacript-style-guide)
   - :br: **Portuguese**: [armoucar/javascript-style-guide](https://github.com/armoucar/javascript-style-guide)
+  - :cn: **Chinese**: [adamlu/javascript-style-guide](https://github.com/adamlu/javascript-style-guide)
 
 ## <a name='guide-guide'>The JavaScript Style Guide Guide</a>
 

From afd3ed00567854c614d9f571ea6173136bd69e00 Mon Sep 17 00:00:00 2001
From: Bishop Zareh <bishop@compasslearning.com>
Date: Mon, 5 Aug 2013 16:17:26 -0500
Subject: [PATCH 0031/1591] adding Compass as an implementor

---
 README.md | 1 +
 1 file changed, 1 insertion(+)

diff --git a/README.md b/README.md
index cd5fd112d1..6977d3be01 100644
--- a/README.md
+++ b/README.md
@@ -1433,6 +1433,7 @@
 
   - **Airbnb**: [airbnb/javascript](https://github.com/airbnb/javascript)
   - **American Insitutes for Research**: [AIRAST/javascript](https://github.com/AIRAST/javascript)
+  - **Compass Learning**: [compasslearning/javascript-style-guide](https://github.com/compasslearning/javascript-style-guide)
   - **ExactTarget**: [ExactTarget/javascript](https://github.com/ExactTarget/javascript)
   - **GeneralElectric**: [GeneralElectric/javascript](https://github.com/GeneralElectric/javascript)
   - **GoodData**: [gooddata/gdc-js-style](https://github.com/gooddata/gdc-js-style)

From ae425f03ed47e0da401e5a608e6a239998d70d64 Mon Sep 17 00:00:00 2001
From: Harrison Shoff <hi@hshoff.com>
Date: Wed, 7 Aug 2013 13:04:47 -0700
Subject: [PATCH 0032/1591] [type casting] move explanation about bitshift
 closer to example code. fixes #80

---
 README.md | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

diff --git a/README.md b/README.md
index 84dff9a56d..609fcb910d 100644
--- a/README.md
+++ b/README.md
@@ -914,7 +914,6 @@
     ```
 
   - Use `parseInt` for Numbers and always with a radix for type casting.
-  - If for whatever reason you are doing something wild and `parseInt` is your bottleneck and need to use Bitshift for [performance reasons](http://jsperf.com/coercion-vs-casting/3), leave a comment explaining why and what you're doing.
 
     ```javascript
     var inputValue = '4';
@@ -936,6 +935,9 @@
 
     // good
     var val = parseInt(inputValue, 10);
+    ```
+
+  - If for whatever reason you are doing something wild and `parseInt` is your bottleneck and need to use Bitshift for [performance reasons](http://jsperf.com/coercion-vs-casting/3), leave a comment explaining why and what you're doing.
 
     // good
     /**

From 020fe0387283d97d3d42b7d95e0c4e4bb16817df Mon Sep 17 00:00:00 2001
From: Harrison Shoff <hi@hshoff.com>
Date: Wed, 7 Aug 2013 16:08:38 -0700
Subject: [PATCH 0033/1591] [objects] update discussion on reserved word usage.
 fixes #61

---
 README.md | 23 ++++++++++++++++++++---
 1 file changed, 20 insertions(+), 3 deletions(-)

diff --git a/README.md b/README.md
index 609fcb910d..88db16797e 100644
--- a/README.md
+++ b/README.md
@@ -83,23 +83,40 @@
     var item = {};
     ```
 
-  - Don't use [reserved words](https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Reserved_Words) as keys.
+  - Don't use [reserved words](http://es5.github.io/#x7.6.1) as keys. It won't work in IE8. [More info](https://github.com/airbnb/javascript/issues/61)
 
     ```javascript
     // bad
     var superman = {
-      class: 'superhero',
       default: { clark: 'kent' },
       private: true
     };
 
     // good
     var superman = {
-      klass: 'superhero',
       defaults: { clark: 'kent' },
       hidden: true
     };
     ```
+
+  - Use readable synonyms in place of reserved words.
+
+    ```javascript
+    // bad
+    var superman = {
+      class: 'alien'
+    };
+
+    // bad
+    var superman = {
+      klass: 'alien'
+    };
+
+    // good
+    var superman = {
+      type: 'alien'
+    };
+    ```
     **[[⬆]](#TOC)**
 
 ## <a name='arrays'>Arrays</a>

From 39b4c020eff9cb994c1df027b03c505f857cad5f Mon Sep 17 00:00:00 2001
From: Harrison Shoff <hi@hshoff.com>
Date: Thu, 8 Aug 2013 10:58:15 -0700
Subject: [PATCH 0034/1591] [type casting] add opening code block

---
 README.md | 1 +
 1 file changed, 1 insertion(+)

diff --git a/README.md b/README.md
index 88db16797e..dbafdc488d 100644
--- a/README.md
+++ b/README.md
@@ -956,6 +956,7 @@
 
   - If for whatever reason you are doing something wild and `parseInt` is your bottleneck and need to use Bitshift for [performance reasons](http://jsperf.com/coercion-vs-casting/3), leave a comment explaining why and what you're doing.
 
+    ```javascript
     // good
     /**
      * parseInt was the reason my code was slow.

From a0cefb8162584cf8fa294ff5477211348b08306c Mon Sep 17 00:00:00 2001
From: Harrison Shoff <hi@hshoff.com>
Date: Mon, 16 Sep 2013 10:54:48 -0700
Subject: [PATCH 0035/1591] [in the wild] add grooveshark

---
 README.md | 1 +
 1 file changed, 1 insertion(+)

diff --git a/README.md b/README.md
index dbafdc488d..ea51762ebd 100644
--- a/README.md
+++ b/README.md
@@ -1457,6 +1457,7 @@
   - **ExactTarget**: [ExactTarget/javascript](https://github.com/ExactTarget/javascript)
   - **GeneralElectric**: [GeneralElectric/javascript](https://github.com/GeneralElectric/javascript)
   - **GoodData**: [gooddata/gdc-js-style](https://github.com/gooddata/gdc-js-style)
+  - **Grooveshark**: [grooveshark/javascript](https://github.com/grooveshark/javascript)
   - **How About We**: [howaboutwe/javascript](https://github.com/howaboutwe/javascript)
   - **MinnPost**: [MinnPost/javascript](https://github.com/MinnPost/javascript)
   - **ModCloth**: [modcloth/javascript](https://github.com/modcloth/javascript)

From c8442b484c2729954d4b5e39cd3f70f7f3fb0be5 Mon Sep 17 00:00:00 2001
From: Harrison Shoff <hi@hshoff.com>
Date: Mon, 30 Sep 2013 15:38:22 -0700
Subject: [PATCH 0036/1591] [modules] add link to @reissbaker's explanation of
 bangs, cat, ASI, and newlines

---
 README.md | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/README.md b/README.md
index ea51762ebd..149df336c2 100644
--- a/README.md
+++ b/README.md
@@ -1270,7 +1270,7 @@
 
 ## <a name='modules'>Modules</a>
 
-  - The module should start with a `!`. This ensures that if a malformed module forgets to include a final semicolon there aren't errors in production when the scripts get concatenated.
+  - The module should start with a `!`. This ensures that if a malformed module forgets to include a final semicolon there aren't errors in production when the scripts get concatenated. [Explanation](https://github.com/airbnb/javascript/issues/44#issuecomment-13063933)
   - The file should be named with camelCase, live in a folder with the same name, and match the name of the single export.
   - Add a method called noConflict() that sets the exported module to the previous version and returns this one.
   - Always declare `'use strict';` at the top of the module.

From a37d284b20d4add165dcdf515ebe7a4fa6810be9 Mon Sep 17 00:00:00 2001
From: nicoder <nicolas.dermine@gmail.com>
Date: Thu, 10 Oct 2013 23:00:39 +0200
Subject: [PATCH 0037/1591] fix typo (i think)

---
 README.md | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/README.md b/README.md
index 149df336c2..0607fa608a 100644
--- a/README.md
+++ b/README.md
@@ -665,7 +665,7 @@
     }
     ```
 
-  - Use `//` for single line comments. Place single line comments on a newline above the subject of the comment. Put an emptyline before the comment.
+  - Use `//` for single line comments. Place single line comments on a newline above the subject of the comment. Put an empty line before the comment.
 
     ```javascript
     // bad

From 701311ecd9a486262ea26541b211fba2f823c241 Mon Sep 17 00:00:00 2001
From: nicoder <nicolas.dermine@gmail.com>
Date: Thu, 10 Oct 2013 23:05:17 +0200
Subject: [PATCH 0038/1591] "declare each variable on a newline"

for consistency with another rule below
---
 README.md | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/README.md b/README.md
index 149df336c2..4037a7562b 100644
--- a/README.md
+++ b/README.md
@@ -220,7 +220,8 @@
     ```javascript
     var items,
         messages,
-        length, i;
+        length,
+        i;
 
     messages = [{
         state: 'success',

From 5c30b95cd4b7bf057f2d8173807d89132acf03b6 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E5=BE=90=E8=BF=AA=E8=A1=8C?= <xdx158@gmail.com>
Date: Mon, 14 Oct 2013 12:44:47 +0800
Subject: [PATCH 0039/1591] better?

---
 README.md | 19 +++++++++----------
 1 file changed, 9 insertions(+), 10 deletions(-)

diff --git a/README.md b/README.md
index 291652f1f8..2e76a62716 100644
--- a/README.md
+++ b/README.md
@@ -521,18 +521,17 @@
       var named = function superPower() {
         console.log('Flying');
       };
+    }
+    
+    // the same is true when the function name
+    // is the same as the variable name.
+    function example() {
+      console.log(named); // => undefined
 
+      named(); // => TypeError named is not a function
 
-      // the same is true when the function name
-      // is the same as the variable name.
-      function example() {
-        console.log(named); // => undefined
-
-        named(); // => TypeError named is not a function
-
-        var named = function named() {
-          console.log('named');
-        };
+      var named = function named() {
+        console.log('named');
       }
     }
     ```

From 7b40bfba478f2a3021e20edd9456b207de611ea9 Mon Sep 17 00:00:00 2001
From: Andreas Savvides <andreas@editd.com>
Date: Mon, 21 Oct 2013 14:59:46 +0100
Subject: [PATCH 0040/1591] Add Secrets of the JavaScript Ninja to list of
 books

---
 README.md | 1 +
 1 file changed, 1 insertion(+)

diff --git a/README.md b/README.md
index 2e76a62716..5ce822b86c 100644
--- a/README.md
+++ b/README.md
@@ -1430,6 +1430,7 @@
   - [JavaScript Web Applications](http://www.amazon.com/JavaScript-Web-Applications-Alex-MacCaw/dp/144930351X) - Alex MacCaw
   - [Pro JavaScript Techniques](http://www.amazon.com/Pro-JavaScript-Techniques-John-Resig/dp/1590597273) - John Resig
   - [Smashing Node.js: JavaScript Everywhere](http://www.amazon.com/Smashing-Node-js-JavaScript-Everywhere-Magazine/dp/1119962595) - Guillermo Rauch
+  - [Secrets of the JavaScript Ninja](http://www.amazon.com/Secrets-JavaScript-Ninja-John-Resig/dp/193398869X) - John Resig and Bear Bibeault
 
 **Blogs**
 

From c4a44b57539eb31f8bf6eab27713aecf97cdae5d Mon Sep 17 00:00:00 2001
From: Harrison Shoff <hi@hshoff.com>
Date: Mon, 21 Oct 2013 09:57:17 -0700
Subject: [PATCH 0041/1591] [resources] add human javascript

---
 README.md | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/README.md b/README.md
index 5ce822b86c..ce0066acb4 100644
--- a/README.md
+++ b/README.md
@@ -522,7 +522,7 @@
         console.log('Flying');
       };
     }
-    
+
     // the same is true when the function name
     // is the same as the variable name.
     function example() {
@@ -1431,6 +1431,7 @@
   - [Pro JavaScript Techniques](http://www.amazon.com/Pro-JavaScript-Techniques-John-Resig/dp/1590597273) - John Resig
   - [Smashing Node.js: JavaScript Everywhere](http://www.amazon.com/Smashing-Node-js-JavaScript-Everywhere-Magazine/dp/1119962595) - Guillermo Rauch
   - [Secrets of the JavaScript Ninja](http://www.amazon.com/Secrets-JavaScript-Ninja-John-Resig/dp/193398869X) - John Resig and Bear Bibeault
+  - [Human JavaScript](http://humanjavascript.com/) - Henrik Joreteg
 
 **Blogs**
 

From 5a769c1c0eb55825ba692cd18b95d06fa475aefa Mon Sep 17 00:00:00 2001
From: Harrison Shoff <hi@hshoff.com>
Date: Thu, 24 Oct 2013 13:37:02 -0700
Subject: [PATCH 0042/1591] [resources] add superhero.js

---
 README.md | 1 +
 1 file changed, 1 insertion(+)

diff --git a/README.md b/README.md
index ce0066acb4..e2ac7e2f99 100644
--- a/README.md
+++ b/README.md
@@ -1432,6 +1432,7 @@
   - [Smashing Node.js: JavaScript Everywhere](http://www.amazon.com/Smashing-Node-js-JavaScript-Everywhere-Magazine/dp/1119962595) - Guillermo Rauch
   - [Secrets of the JavaScript Ninja](http://www.amazon.com/Secrets-JavaScript-Ninja-John-Resig/dp/193398869X) - John Resig and Bear Bibeault
   - [Human JavaScript](http://humanjavascript.com/) - Henrik Joreteg
+  - [Superhero.js](http://superherojs.com/) - Kim Joar Bekkelund, Mads Mobæk, & Olav Bjorkoy
 
 **Blogs**
 

From 6394ca8dd84dd475a1ef60befc53497b4df84366 Mon Sep 17 00:00:00 2001
From: Harrison Shoff <hi@hshoff.com>
Date: Fri, 25 Oct 2013 14:20:42 -0700
Subject: [PATCH 0043/1591] [jquery] the faster lookup isn't actually faster.
 Fixes #90

---
 README.md | 5 +----
 1 file changed, 1 insertion(+), 4 deletions(-)

diff --git a/README.md b/README.md
index e2ac7e2f99..10582faf40 100644
--- a/README.md
+++ b/README.md
@@ -1354,11 +1354,8 @@
     // good
     $('.sidebar > ul').hide();
 
-    // good (slower)
+    // good
     $sidebar.find('ul');
-
-    // good (faster)
-    $($sidebar[0]).find('ul');
     ```
 
     **[[⬆]](#TOC)**

From e84b63c07f53a1b139363dcdd5880691480a58c7 Mon Sep 17 00:00:00 2001
From: JD Hartley <jdhartley@users.noreply.github.com>
Date: Mon, 28 Oct 2013 14:15:37 -0500
Subject: [PATCH 0044/1591] Fix jQuery selector with context param order

`$(selector, parent)`

See: http://api.jquery.com/jQuery/#jQuery-selector-context
---
 README.md | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/README.md b/README.md
index 10582faf40..49f7fecf01 100644
--- a/README.md
+++ b/README.md
@@ -1343,7 +1343,7 @@
 
     ```javascript
     // bad
-    $('.sidebar', 'ul').hide();
+    $('ul', '.sidebar').hide();
 
     // bad
     $('.sidebar').find('ul').hide();

From 9d17310d2966328de886df53ca74608eb3b5e1e7 Mon Sep 17 00:00:00 2001
From: Harrison Shoff <hi@hshoff.com>
Date: Thu, 31 Oct 2013 12:08:25 -0700
Subject: [PATCH 0045/1591] [resources] add additional helpful resources. fixes
 #92

---
 README.md | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/README.md b/README.md
index 49f7fecf01..fd743b258b 100644
--- a/README.md
+++ b/README.md
@@ -1416,6 +1416,7 @@
 **Further Reading**
 
   - [Understanding JavaScript Closures](http://javascriptweblog.wordpress.com/2010/10/25/understanding-javascript-closures/) - Angus Croll
+  - [Basic JavaScript for the impatient programmer](http://www.2ality.com/2013/06/basic-javascript.html) - Dr. Axel Rauschmayer
 
 **Books**
 
@@ -1430,6 +1431,7 @@
   - [Secrets of the JavaScript Ninja](http://www.amazon.com/Secrets-JavaScript-Ninja-John-Resig/dp/193398869X) - John Resig and Bear Bibeault
   - [Human JavaScript](http://humanjavascript.com/) - Henrik Joreteg
   - [Superhero.js](http://superherojs.com/) - Kim Joar Bekkelund, Mads Mobæk, & Olav Bjorkoy
+  - [JSBooks](http://jsbooks.revolunet.com/)
 
 **Blogs**
 

From 16acfdad650f71f8061cc3fc7c208b826e80b06f Mon Sep 17 00:00:00 2001
From: Paolo Carrasco <paolocarrasco@users.noreply.github.com>
Date: Thu, 31 Oct 2013 20:42:31 -0200
Subject: [PATCH 0046/1591] Adding a Spanish version to the list of
 translations

---
 README.md | 1 +
 1 file changed, 1 insertion(+)

diff --git a/README.md b/README.md
index fd743b258b..b213bb8122 100644
--- a/README.md
+++ b/README.md
@@ -1479,6 +1479,7 @@
   - :jp: **Japanese**: [mitsuruog/javacript-style-guide](https://github.com/mitsuruog/javacript-style-guide)
   - :br: **Portuguese**: [armoucar/javascript-style-guide](https://github.com/armoucar/javascript-style-guide)
   - :cn: **Chinese**: [adamlu/javascript-style-guide](https://github.com/adamlu/javascript-style-guide)
+  - :es: **Spanish**: [paolocarrasco/javascript-style-guide](https://github.com/paolocarrasco/javascript-style-guide)
 
 ## <a name='guide-guide'>The JavaScript Style Guide Guide</a>
 

From 65a86bc4a67dd6abcc80f0a53d5447f436173cb9 Mon Sep 17 00:00:00 2001
From: Aleksey Smolenchuk <lxe@lxe.co>
Date: Thu, 7 Nov 2013 17:23:47 -0500
Subject: [PATCH 0047/1591] Format object array to conform to whitespace
 guidelines

---
 README.md | 16 ++++++++--------
 1 file changed, 8 insertions(+), 8 deletions(-)

diff --git a/README.md b/README.md
index b213bb8122..110829b4e9 100644
--- a/README.md
+++ b/README.md
@@ -224,14 +224,14 @@
         i;
 
     messages = [{
-        state: 'success',
-        message: 'This one worked.'
-    },{
-        state: 'success',
-        message: 'This one worked as well.'
-    },{
-        state: 'error',
-        message: 'This one did not work.'
+      state: 'success',
+      message: 'This one worked.'
+    }, {
+      state: 'success',
+      message: 'This one worked as well.'
+    }, {
+      state: 'error',
+      message: 'This one did not work.'
     }];
 
     length = messages.length;

From cce1a2d3e0c895dd14cd2b53e579fe08ae26d832 Mon Sep 17 00:00:00 2001
From: Jason Edelman <jason@jasonedelman.com>
Date: Fri, 8 Nov 2013 11:06:43 -0800
Subject: [PATCH 0048/1591] Update README.md

always define your variables at the top. defining them elsewhere is confusing because of hoisting. there is no block scope in javascript.
---
 README.md | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/README.md b/README.md
index b213bb8122..821606d83d 100644
--- a/README.md
+++ b/README.md
@@ -295,8 +295,9 @@
     }
 
     // good
+    var test;
     if (currentUser) {
-      var test = function test() {
+      test = function test() {
         console.log('Yup.');
       };
     }

From ed6df6433221510707cd42615a2f82af15a2494b Mon Sep 17 00:00:00 2001
From: Harrison Shoff <hi@hshoff.com>
Date: Fri, 8 Nov 2013 12:03:21 -0800
Subject: [PATCH 0049/1591] [resources] add link to popular js conventions on
 github

---
 README.md | 1 +
 1 file changed, 1 insertion(+)

diff --git a/README.md b/README.md
index 821606d83d..589c3e8f4e 100644
--- a/README.md
+++ b/README.md
@@ -1413,6 +1413,7 @@
 
   - [Naming this in nested functions](https://gist.github.com/4135065) - Christian Johansen
   - [Conditional Callbacks](https://github.com/airbnb/javascript/issues/52)
+  - [Popular JavaScript Coding Conventions on Github](http://sideeffect.kr/popularconvention/#javascript)
 
 **Further Reading**
 

From 9862309820141c40e9a11dc443dddc144a511ea6 Mon Sep 17 00:00:00 2001
From: Harrison Shoff <hi@hshoff.com>
Date: Sat, 9 Nov 2013 12:03:02 -0800
Subject: [PATCH 0050/1591] [in the wild] add Mighty Spring

---
 README.md | 1 +
 1 file changed, 1 insertion(+)

diff --git a/README.md b/README.md
index 589c3e8f4e..bd60267e02 100644
--- a/README.md
+++ b/README.md
@@ -1463,6 +1463,7 @@
   - **GoodData**: [gooddata/gdc-js-style](https://github.com/gooddata/gdc-js-style)
   - **Grooveshark**: [grooveshark/javascript](https://github.com/grooveshark/javascript)
   - **How About We**: [howaboutwe/javascript](https://github.com/howaboutwe/javascript)
+  - **Mighty Spring**: [mightyspring/javascript](https://github.com/mightyspring/javascript)
   - **MinnPost**: [MinnPost/javascript](https://github.com/MinnPost/javascript)
   - **ModCloth**: [modcloth/javascript](https://github.com/modcloth/javascript)
   - **National Geographic**: [natgeo/javascript](https://github.com/natgeo/javascript)

From de4979b999ebfd9a4aad35b1303f73dfda636ec9 Mon Sep 17 00:00:00 2001
From: Pascal Borreli <pascal@borreli.com>
Date: Sun, 10 Nov 2013 23:27:33 +0000
Subject: [PATCH 0051/1591] Fixed typos

---
 README.md | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/README.md b/README.md
index bd60267e02..7f57340f79 100644
--- a/README.md
+++ b/README.md
@@ -564,7 +564,7 @@
     + **Undefined** evaluates to **false**
     + **Null** evaluates to **false**
     + **Booleans** evaluate to **the value of the boolean**
-    + **Numbers** evalute to **false** if **+0, -0, or NaN**, otherwise **true**
+    + **Numbers** evaluate to **false** if **+0, -0, or NaN**, otherwise **true**
     + **Strings** evaluate to **false** if an empty string `''`, otherwise **true**
 
     ```javascript

From e8caad29d4a77d4310c4970cd52def4a5f1e86a9 Mon Sep 17 00:00:00 2001
From: Jelle Kralt <jelle@jellekralt.nl>
Date: Tue, 12 Nov 2013 17:26:13 +0100
Subject: [PATCH 0052/1591] Update README.md

---
 README.md | 1 +
 1 file changed, 1 insertion(+)

diff --git a/README.md b/README.md
index 7f57340f79..f2fe1ca502 100644
--- a/README.md
+++ b/README.md
@@ -1455,6 +1455,7 @@
 
   This is a list of organizations that are using this style guide. Send us a pull request or open an issue and we'll add you to the list.
 
+  - **Aan Zee**: [AanZee/javascript](https://github.com/AanZee/javascript)
   - **Airbnb**: [airbnb/javascript](https://github.com/airbnb/javascript)
   - **American Insitutes for Research**: [AIRAST/javascript](https://github.com/AIRAST/javascript)
   - **Compass Learning**: [compasslearning/javascript-style-guide](https://github.com/compasslearning/javascript-style-guide)

From 775ba4e2e959d3de8cfc6d60db2567f7b7264a08 Mon Sep 17 00:00:00 2001
From: SeungHyun PAEK <pekuid@gmail.com>
Date: Wed, 13 Nov 2013 14:03:15 +0900
Subject: [PATCH 0053/1591] Add Korean version

---
 README.md | 1 +
 1 file changed, 1 insertion(+)

diff --git a/README.md b/README.md
index f2fe1ca502..1a7452e077 100644
--- a/README.md
+++ b/README.md
@@ -1484,6 +1484,7 @@
   - :br: **Portuguese**: [armoucar/javascript-style-guide](https://github.com/armoucar/javascript-style-guide)
   - :cn: **Chinese**: [adamlu/javascript-style-guide](https://github.com/adamlu/javascript-style-guide)
   - :es: **Spanish**: [paolocarrasco/javascript-style-guide](https://github.com/paolocarrasco/javascript-style-guide)
+  - :kr: **Korean**: [tipjs/javascript-style-guide](https://github.com/tipjs/javascript-style-guide)
 
 ## <a name='guide-guide'>The JavaScript Style Guide Guide</a>
 

From fa32d9a1585db72fd69e258f6a57387a54856824 Mon Sep 17 00:00:00 2001
From: Harrison Shoff <hi@hshoff.com>
Date: Wed, 13 Nov 2013 10:52:26 -0800
Subject: [PATCH 0054/1591] [in the wild] add Gawker Media

---
 README.md | 1 +
 1 file changed, 1 insertion(+)

diff --git a/README.md b/README.md
index 1a7452e077..2cbcaca832 100644
--- a/README.md
+++ b/README.md
@@ -1460,6 +1460,7 @@
   - **American Insitutes for Research**: [AIRAST/javascript](https://github.com/AIRAST/javascript)
   - **Compass Learning**: [compasslearning/javascript-style-guide](https://github.com/compasslearning/javascript-style-guide)
   - **ExactTarget**: [ExactTarget/javascript](https://github.com/ExactTarget/javascript)
+  - **Gawker Media**: [gawkermedia/javascript](https://github.com/gawkermedia/javascript)
   - **GeneralElectric**: [GeneralElectric/javascript](https://github.com/GeneralElectric/javascript)
   - **GoodData**: [gooddata/gdc-js-style](https://github.com/gooddata/gdc-js-style)
   - **Grooveshark**: [grooveshark/javascript](https://github.com/grooveshark/javascript)

From 8bab767301b27b0f976b539542310b2dee01ed57 Mon Sep 17 00:00:00 2001
From: Harrison Shoff <hi@hshoff.com>
Date: Thu, 14 Nov 2013 14:02:01 -0800
Subject: [PATCH 0055/1591] [type casting & coercion] add note about bitshift
 and large integers. fixes #109

---
 README.md | 1 +
 1 file changed, 1 insertion(+)

diff --git a/README.md b/README.md
index 2cbcaca832..97e5240ee7 100644
--- a/README.md
+++ b/README.md
@@ -956,6 +956,7 @@
     ```
 
   - If for whatever reason you are doing something wild and `parseInt` is your bottleneck and need to use Bitshift for [performance reasons](http://jsperf.com/coercion-vs-casting/3), leave a comment explaining why and what you're doing.
+  - **Note** Be careful when using bitshift operations. Numbers are represented as [64-bit values](http://es5.github.io/#x4.3.19), but Bitshift operations always return a 32-bit integer [source](http://es5.github.io/#x11.7). Bitshift can lead to unexpected behavior for integer values larger than 32 bits. [Discussion](https://github.com/airbnb/javascript/issues/109)
 
     ```javascript
     // good

From aaaf392e1c15b3056f06b415387dd9da1824d27e Mon Sep 17 00:00:00 2001
From: Harrison Shoff <hi@hshoff.com>
Date: Thu, 14 Nov 2013 14:05:28 -0800
Subject: [PATCH 0056/1591] [type casting & coercion] fix formatting

---
 README.md | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/README.md b/README.md
index 97e5240ee7..32225f1d18 100644
--- a/README.md
+++ b/README.md
@@ -956,7 +956,7 @@
     ```
 
   - If for whatever reason you are doing something wild and `parseInt` is your bottleneck and need to use Bitshift for [performance reasons](http://jsperf.com/coercion-vs-casting/3), leave a comment explaining why and what you're doing.
-  - **Note** Be careful when using bitshift operations. Numbers are represented as [64-bit values](http://es5.github.io/#x4.3.19), but Bitshift operations always return a 32-bit integer [source](http://es5.github.io/#x11.7). Bitshift can lead to unexpected behavior for integer values larger than 32 bits. [Discussion](https://github.com/airbnb/javascript/issues/109)
+  - **Note:** Be careful when using bitshift operations. Numbers are represented as [64-bit values](http://es5.github.io/#x4.3.19), but Bitshift operations always return a 32-bit integer ([source](http://es5.github.io/#x11.7)). Bitshift can lead to unexpected behavior for integer values larger than 32 bits. [Discussion](https://github.com/airbnb/javascript/issues/109)
 
     ```javascript
     // good

From 6445a6fd00fb8a7c4cd5f0d1adab9717c092ef5a Mon Sep 17 00:00:00 2001
From: Ahmed Aeon Axan <azaan@outlook.com>
Date: Sun, 17 Nov 2013 21:07:54 +0530
Subject: [PATCH 0057/1591] Remove invalid name - Naming Conventions

In naming conventions `var this-is-my-object = {};` is given as an example of a bad name. But since this is an invalid name in Javascript. I dont think it is needed since its a syntax error.
---
 README.md | 1 -
 1 file changed, 1 deletion(-)

diff --git a/README.md b/README.md
index 32225f1d18..949e8e4292 100644
--- a/README.md
+++ b/README.md
@@ -1008,7 +1008,6 @@
     // bad
     var OBJEcttsssss = {};
     var this_is_my_object = {};
-    var this-is-my-object = {};
     function c() {};
     var u = new user({
       name: 'Bob Parr'

From c29818caa3753d26c07a9aaba8dbcbc635462ee6 Mon Sep 17 00:00:00 2001
From: Jimmy Gaussen <jimmygaussen@gmail.com>
Date: Tue, 19 Nov 2013 19:31:10 +0100
Subject: [PATCH 0058/1591] Added French translation to the list

---
 README.md | 1 +
 1 file changed, 1 insertion(+)

diff --git a/README.md b/README.md
index 949e8e4292..5b6376ca63 100644
--- a/README.md
+++ b/README.md
@@ -1486,6 +1486,7 @@
   - :cn: **Chinese**: [adamlu/javascript-style-guide](https://github.com/adamlu/javascript-style-guide)
   - :es: **Spanish**: [paolocarrasco/javascript-style-guide](https://github.com/paolocarrasco/javascript-style-guide)
   - :kr: **Korean**: [tipjs/javascript-style-guide](https://github.com/tipjs/javascript-style-guide)
+  - :fr: **French**: [nmussy/javascript-style-guide](https://github.com/timofurrer/javascript-style-guide)
 
 ## <a name='guide-guide'>The JavaScript Style Guide Guide</a>
 

From 30d8ea098ea3a16d04c215555bb19aed3df0f3f4 Mon Sep 17 00:00:00 2001
From: Jimmy Gaussen <jimmygaussen@gmail.com>
Date: Tue, 19 Nov 2013 19:40:06 +0100
Subject: [PATCH 0059/1591] copy pasta

---
 README.md | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/README.md b/README.md
index 5b6376ca63..142adeacdb 100644
--- a/README.md
+++ b/README.md
@@ -1486,7 +1486,7 @@
   - :cn: **Chinese**: [adamlu/javascript-style-guide](https://github.com/adamlu/javascript-style-guide)
   - :es: **Spanish**: [paolocarrasco/javascript-style-guide](https://github.com/paolocarrasco/javascript-style-guide)
   - :kr: **Korean**: [tipjs/javascript-style-guide](https://github.com/tipjs/javascript-style-guide)
-  - :fr: **French**: [nmussy/javascript-style-guide](https://github.com/timofurrer/javascript-style-guide)
+  - :fr: **French**: [nmussy/javascript-style-guide](https://github.com/nmussy/javascript-style-guide)
 
 ## <a name='guide-guide'>The JavaScript Style Guide Guide</a>
 

From 8702dd4b8388b9454d1bf34da4aa97a4d6d18602 Mon Sep 17 00:00:00 2001
From: Serg <undrdog@yandex.ru>
Date: Fri, 22 Nov 2013 00:01:50 +0200
Subject: [PATCH 0060/1591] Added Russian translation

---
 README.md | 1 +
 1 file changed, 1 insertion(+)

diff --git a/README.md b/README.md
index 142adeacdb..dd0becddd9 100644
--- a/README.md
+++ b/README.md
@@ -1487,6 +1487,7 @@
   - :es: **Spanish**: [paolocarrasco/javascript-style-guide](https://github.com/paolocarrasco/javascript-style-guide)
   - :kr: **Korean**: [tipjs/javascript-style-guide](https://github.com/tipjs/javascript-style-guide)
   - :fr: **French**: [nmussy/javascript-style-guide](https://github.com/nmussy/javascript-style-guide)
+  - :ru: **Russian**: [sbezludny/javascript-style-guide](https://github.com/sbezludny/javascript-style-guide)
 
 ## <a name='guide-guide'>The JavaScript Style Guide Guide</a>
 

From f07de4befb52e22f4d77d5e94c22d57c62357621 Mon Sep 17 00:00:00 2001
From: Harrison Shoff <hi@hshoff.com>
Date: Sun, 24 Nov 2013 21:35:53 -0800
Subject: [PATCH 0061/1591] [translation] add Bulgarian translation. fixes #121

---
 README.md | 1 +
 1 file changed, 1 insertion(+)

diff --git a/README.md b/README.md
index dd0becddd9..e1cf06a26c 100644
--- a/README.md
+++ b/README.md
@@ -1488,6 +1488,7 @@
   - :kr: **Korean**: [tipjs/javascript-style-guide](https://github.com/tipjs/javascript-style-guide)
   - :fr: **French**: [nmussy/javascript-style-guide](https://github.com/nmussy/javascript-style-guide)
   - :ru: **Russian**: [sbezludny/javascript-style-guide](https://github.com/sbezludny/javascript-style-guide)
+  - :bg: **Bulgarian**: [borislavvv/javascript](https://github.com/borislavvv/javascript)
 
 ## <a name='guide-guide'>The JavaScript Style Guide Guide</a>
 

From d44c4e01eacb95599f246846fd870fb7494c6a9a Mon Sep 17 00:00:00 2001
From: Ben Morrall <bemo56@hotmail.com>
Date: Tue, 26 Nov 2013 15:17:25 +1100
Subject: [PATCH 0062/1591] Concatenation examples are now equivalent

---
 README.md | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/README.md b/README.md
index e1cf06a26c..49ff04e8f0 100644
--- a/README.md
+++ b/README.md
@@ -208,7 +208,7 @@
 
     // good
     var errorMessage = 'This is a super long error that ' +
-      'was thrown because of Batman.' +
+      'was thrown because of Batman. ' +
       'When you stop to think about ' +
       'how Batman had anything to do ' +
       'with this, you would get nowhere ' +

From 3a6aff1f13ed449a83495354ab4f64fdd4939a17 Mon Sep 17 00:00:00 2001
From: Harrison Shoff <hi@hshoff.com>
Date: Tue, 26 Nov 2013 19:15:17 -0800
Subject: [PATCH 0063/1591] [in the wild] add REI

---
 README.md | 1 +
 1 file changed, 1 insertion(+)

diff --git a/README.md b/README.md
index 49ff04e8f0..b4d45ca16f 100644
--- a/README.md
+++ b/README.md
@@ -1471,6 +1471,7 @@
   - **National Geographic**: [natgeo/javascript](https://github.com/natgeo/javascript)
   - **National Park Service**: [nationalparkservice/javascript](https://github.com/nationalparkservice/javascript)
   - **Razorfish**: [razorfish/javascript-style-guide](https://github.com/razorfish/javascript-style-guide)
+  - **REI**: [reidev/js-style-guide](https://github.com/reidev/js-style-guide)
   - **Shutterfly**: [shutterfly/javascript](https://github.com/shutterfly/javascript)
   - **Userify**: [userify/javascript](https://github.com/userify/javascript)
   - **Zillow**: [zillow/javascript](https://github.com/zillow/javascript)

From 898b46dc1512d11b8a778c1d2b77927de402aa2b Mon Sep 17 00:00:00 2001
From: vahan-hartooni <vahan.hartooni@codazen.com>
Date: Mon, 2 Dec 2013 10:46:34 -0800
Subject: [PATCH 0064/1591] Update SublimeLinter.sublime-settings

The Airbnb guide states: "Strings longer than 80 characters should be written across multiple lines using string concatenation."

I propose to add the maxlen option to enforce this rule: http://www.jshint.com/docs/options/#maxlen

However maxlen enforces the entire source code, not just a line of String. I would like to hear your thoughts on whether that is a beneficial enforcement to keep JS code at a set width.
---
 linters/SublimeLinter/SublimeLinter.sublime-settings | 5 ++++-
 1 file changed, 4 insertions(+), 1 deletion(-)

diff --git a/linters/SublimeLinter/SublimeLinter.sublime-settings b/linters/SublimeLinter/SublimeLinter.sublime-settings
index 1e12f7c6bb..5c4e5dd382 100644
--- a/linters/SublimeLinter/SublimeLinter.sublime-settings
+++ b/linters/SublimeLinter/SublimeLinter.sublime-settings
@@ -62,6 +62,9 @@
       "undef": true,
 
       // Warn when variables are defined but never used.
-      "unused": true
+      "unused": true,
+      
+      // Enforce line length to 80 characters
+      "maxlen": 80
     }
 }

From 745cf854d11510bebe2d971cd981ca884ac52228 Mon Sep 17 00:00:00 2001
From: Harrison Shoff <hi@hshoff.com>
Date: Tue, 3 Dec 2013 10:21:54 -0800
Subject: [PATCH 0065/1591] [translation] update russian fixes #120

---
 README.md | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/README.md b/README.md
index b4d45ca16f..75c818cbd6 100644
--- a/README.md
+++ b/README.md
@@ -1488,7 +1488,7 @@
   - :es: **Spanish**: [paolocarrasco/javascript-style-guide](https://github.com/paolocarrasco/javascript-style-guide)
   - :kr: **Korean**: [tipjs/javascript-style-guide](https://github.com/tipjs/javascript-style-guide)
   - :fr: **French**: [nmussy/javascript-style-guide](https://github.com/nmussy/javascript-style-guide)
-  - :ru: **Russian**: [sbezludny/javascript-style-guide](https://github.com/sbezludny/javascript-style-guide)
+  - :ru: **Russian**: [uprock/javascript](https://github.com/uprock/javascript)
   - :bg: **Bulgarian**: [borislavvv/javascript](https://github.com/borislavvv/javascript)
 
 ## <a name='guide-guide'>The JavaScript Style Guide Guide</a>

From 388294966894e0aec4649cc75ebfdfe5a74a5d60 Mon Sep 17 00:00:00 2001
From: Vsevolod Rodionov <crbrus@gmail.com>
Date: Thu, 5 Dec 2013 11:38:25 +0300
Subject: [PATCH 0066/1591] 32-bit integers and bitwise operators explained
 with example of possible issues

I've added this example to russian translation when I've got question from our juniors "what's the limits of wise use of bitwise operators".
---
 README.md | 9 ++++++++-
 1 file changed, 8 insertions(+), 1 deletion(-)

diff --git a/README.md b/README.md
index 75c818cbd6..bf4a31a705 100644
--- a/README.md
+++ b/README.md
@@ -956,7 +956,6 @@
     ```
 
   - If for whatever reason you are doing something wild and `parseInt` is your bottleneck and need to use Bitshift for [performance reasons](http://jsperf.com/coercion-vs-casting/3), leave a comment explaining why and what you're doing.
-  - **Note:** Be careful when using bitshift operations. Numbers are represented as [64-bit values](http://es5.github.io/#x4.3.19), but Bitshift operations always return a 32-bit integer ([source](http://es5.github.io/#x11.7)). Bitshift can lead to unexpected behavior for integer values larger than 32 bits. [Discussion](https://github.com/airbnb/javascript/issues/109)
 
     ```javascript
     // good
@@ -968,6 +967,14 @@
     var val = inputValue >> 0;
     ```
 
+  - **Note:** Be careful when using bitshift operations. Numbers are represented as [64-bit values](http://es5.github.io/#x4.3.19), but Bitshift operations always return a 32-bit integer ([source](http://es5.github.io/#x11.7)). Bitshift can lead to unexpected behavior for integer values larger than 32 bits. [Discussion](https://github.com/airbnb/javascript/issues/109). Largest signed 32-bit Int is 2,147,483,647:
+
+    ```javascript
+    2147483647 >> 0 //=> 2147483647
+    2147483648 >> 0 //=> -2147483648
+    2147483649 >> 0 //=> -2147483647
+    ```
+
   - Booleans:
 
     ```javascript

From 9469e94a073490b8b727a9e0cad22c4c3044084a Mon Sep 17 00:00:00 2001
From: Nirav Sanghani <nirav.sanghani@gmail.com>
Date: Thu, 5 Dec 2013 16:35:21 -0800
Subject: [PATCH 0067/1591] Add guideline for spaces around operators

---
 README.md | 12 ++++++++++++
 1 file changed, 12 insertions(+)

diff --git a/README.md b/README.md
index 75c818cbd6..524ca73f74 100644
--- a/README.md
+++ b/README.md
@@ -745,6 +745,7 @@
     ∙∙var name;
     }
     ```
+
   - Place 1 space before the leading brace.
 
     ```javascript
@@ -770,6 +771,17 @@
       breed: 'Bernese Mountain Dog'
     });
     ```
+
+  - Set off operators with spaces.
+
+    ```javascript
+    // bad
+    var x=y+5;
+
+    // good
+    var x = y + 5;
+    ```
+
   - Place an empty newline at the end of the file.
 
     ```javascript

From fbc79a3bfe0d311e2eb71531e06345c340125b10 Mon Sep 17 00:00:00 2001
From: Ulysse Carion <ulyssecarion@gmail.com>
Date: Thu, 12 Dec 2013 19:00:45 -0800
Subject: [PATCH 0068/1591] Add a missing `.hide()` for consistency's sake.

---
 README.md | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/README.md b/README.md
index 524ca73f74..090319be57 100644
--- a/README.md
+++ b/README.md
@@ -1368,7 +1368,7 @@
     $('.sidebar > ul').hide();
 
     // good
-    $sidebar.find('ul');
+    $sidebar.find('ul').hide();
     ```
 
     **[[⬆]](#TOC)**

From 440b34a0b5c7b2b3a7e106760e9d2d5986e75315 Mon Sep 17 00:00:00 2001
From: Harrison Shoff <hi@hshoff.com>
Date: Fri, 13 Dec 2013 11:06:04 -0800
Subject: [PATCH 0069/1591] [resources] add link to Third Party JavaScript.
 fixes #128

---
 README.md | 1 +
 1 file changed, 1 insertion(+)

diff --git a/README.md b/README.md
index 090319be57..8edde50c5c 100644
--- a/README.md
+++ b/README.md
@@ -1446,6 +1446,7 @@
   - [Human JavaScript](http://humanjavascript.com/) - Henrik Joreteg
   - [Superhero.js](http://superherojs.com/) - Kim Joar Bekkelund, Mads Mobæk, & Olav Bjorkoy
   - [JSBooks](http://jsbooks.revolunet.com/)
+  - [Third Party JavaScript](http://manning.com/vinegar/) - Ben Vinegar and Anton Kovalyov
 
 **Blogs**
 

From d5db0a2f45509835002f84af23b64b47bfe77154 Mon Sep 17 00:00:00 2001
From: vahan-hartooni <vahan.hartooni@codazen.com>
Date: Tue, 17 Dec 2013 13:07:59 -0800
Subject: [PATCH 0070/1591] Enforce 'use strict'

As stated in the [Modules section](https://github.com/airbnb/javascript#modules), `'use strict'` needs to be declared at the top of a module

[JSHint has an option](http://www.jshint.com/docs/options/#strict) for something like this by enforcing the declaration of the statement at the top function scope.
---
 linters/SublimeLinter/SublimeLinter.sublime-settings | 5 ++++-
 1 file changed, 4 insertions(+), 1 deletion(-)

diff --git a/linters/SublimeLinter/SublimeLinter.sublime-settings b/linters/SublimeLinter/SublimeLinter.sublime-settings
index 5c4e5dd382..12360f3f1c 100644
--- a/linters/SublimeLinter/SublimeLinter.sublime-settings
+++ b/linters/SublimeLinter/SublimeLinter.sublime-settings
@@ -65,6 +65,9 @@
       "unused": true,
       
       // Enforce line length to 80 characters
-      "maxlen": 80
+      "maxlen": 80,
+
+      // Enforce placing 'use strict' at the top function scope
+      "strict": true
     }
 }

From b65dd90ea56898a124985dabe06a895eb78dab35 Mon Sep 17 00:00:00 2001
From: Spike Brehm <ocelot@gmail.com>
Date: Thu, 26 Dec 2013 19:00:21 -0800
Subject: [PATCH 0071/1591] Add .jshintrc

This adds a `.jshintrc` to the `linters/` directory. I just copied over
the settings from the `SublimeLinter` file, de-nesting the JSON object
by one level.

It means we'll have to maintain both files, but it's good to have a
basic `.jshintrc` for those of us that aren't using JSHint through
Sublime Text.
---
 linters/jshintrc | 57 ++++++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 57 insertions(+)
 create mode 100644 linters/jshintrc

diff --git a/linters/jshintrc b/linters/jshintrc
new file mode 100644
index 0000000000..d3b47148a8
--- /dev/null
+++ b/linters/jshintrc
@@ -0,0 +1,57 @@
+{
+  /*
+   * ENVIRONMENTS
+   * =================
+   */
+
+  // Define globals exposed by modern browsers.
+  "browser": true,
+
+  // Define globals exposed by jQuery.
+  "jquery": true,
+
+  // Define globals exposed by Node.js.
+  "node": true,
+
+  /*
+   * ENFORCING OPTIONS
+   * =================
+   */
+
+  // Force all variable names to use either camelCase style or UPPER_CASE
+  // with underscores.
+  "camelcase": true,
+
+  // Prohibit use of == and != in favor of === and !==.
+  "eqeqeq": true,
+
+  // Suppress warnings about == null comparisons.
+  "eqnull": true,
+
+  // Enforce tab width of 2 spaces.
+  "indent": 2,
+
+  // Prohibit use of a variable before it is defined.
+  "latedef": true,
+
+  // Require capitalized names for constructor functions.
+  "newcap": true,
+
+  // Enforce use of single quotation marks for strings.
+  "quotmark": "single",
+
+  // Prohibit trailing whitespace.
+  "trailing": true,
+
+  // Prohibit use of explicitly undeclared variables.
+  "undef": true,
+
+  // Warn when variables are defined but never used.
+  "unused": true,
+
+  // Enforce line length to 80 characters
+  "maxlen": 80,
+
+  // Enforce placing 'use strict' at the top function scope
+  "strict": true
+}

From d27bcfa4712b98f0d6c97305f0ed855e0a71c164 Mon Sep 17 00:00:00 2001
From: Harrison Shoff <hi@hshoff.com>
Date: Sun, 5 Jan 2014 11:19:25 -0800
Subject: [PATCH 0072/1591] [readme] add GA

---
 README.md | 1 +
 1 file changed, 1 insertion(+)

diff --git a/README.md b/README.md
index 3e22d08bb6..b84183f557 100644
--- a/README.md
+++ b/README.md
@@ -1542,3 +1542,4 @@ SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 
 # };
 
+[![Analytics](https://ga-beacon.appspot.com/UA-46826236-1/airbnb/javascript?pixel)](https://github.com/airbnb/javascript)

From 6e40437c23f3bbe6390cc5ecead565bf8381d1dd Mon Sep 17 00:00:00 2001
From: Harrison Shoff <hi@hshoff.com>
Date: Tue, 7 Jan 2014 10:47:36 -0800
Subject: [PATCH 0073/1591] [readme] remove GA in favor of Github analytics

---
 README.md | 2 --
 1 file changed, 2 deletions(-)

diff --git a/README.md b/README.md
index b84183f557..e43726f7c8 100644
--- a/README.md
+++ b/README.md
@@ -1541,5 +1541,3 @@ SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 **[[⬆]](#TOC)**
 
 # };
-
-[![Analytics](https://ga-beacon.appspot.com/UA-46826236-1/airbnb/javascript?pixel)](https://github.com/airbnb/javascript)

From bd3914c19a86e48284145239ea749f209c061c25 Mon Sep 17 00:00:00 2001
From: godspeedelbow <eelke@boezeman.com>
Date: Wed, 22 Jan 2014 13:55:54 +0100
Subject: [PATCH 0074/1591] added Peerby to list of organizations that use this
 guide

---
 README.md | 1 +
 1 file changed, 1 insertion(+)

diff --git a/README.md b/README.md
index e43726f7c8..38fdcb1474 100644
--- a/README.md
+++ b/README.md
@@ -1483,6 +1483,7 @@
   - **ModCloth**: [modcloth/javascript](https://github.com/modcloth/javascript)
   - **National Geographic**: [natgeo/javascript](https://github.com/natgeo/javascript)
   - **National Park Service**: [nationalparkservice/javascript](https://github.com/nationalparkservice/javascript)
+  - **Peerby**: [Peerby/javascript](https://github.com/Peerby/javascript)
   - **Razorfish**: [razorfish/javascript-style-guide](https://github.com/razorfish/javascript-style-guide)
   - **REI**: [reidev/js-style-guide](https://github.com/reidev/js-style-guide)
   - **Shutterfly**: [shutterfly/javascript](https://github.com/shutterfly/javascript)

From 7d470d860f5e47f63f79452499941879e163d2c7 Mon Sep 17 00:00:00 2001
From: Harrison Shoff <hi@hshoff.com>
Date: Thu, 30 Jan 2014 11:44:42 -0800
Subject: [PATCH 0075/1591] [resources] add you might not need jquery

---
 README.md | 1 +
 1 file changed, 1 insertion(+)

diff --git a/README.md b/README.md
index 38fdcb1474..3451933be7 100644
--- a/README.md
+++ b/README.md
@@ -1431,6 +1431,7 @@
 
   - [Understanding JavaScript Closures](http://javascriptweblog.wordpress.com/2010/10/25/understanding-javascript-closures/) - Angus Croll
   - [Basic JavaScript for the impatient programmer](http://www.2ality.com/2013/06/basic-javascript.html) - Dr. Axel Rauschmayer
+  - [You Might Not Need jQuery](http://youmightnotneedjquery.com/)
 
 **Books**
 

From ed3e46e4986cc403993ff176b2dbb47714d831c4 Mon Sep 17 00:00:00 2001
From: Harrison Shoff <hi@hshoff.com>
Date: Thu, 30 Jan 2014 11:46:02 -0800
Subject: [PATCH 0076/1591] [resources] add you might not need jquery authors

---
 README.md | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/README.md b/README.md
index 3451933be7..e0e1f76e61 100644
--- a/README.md
+++ b/README.md
@@ -1431,7 +1431,7 @@
 
   - [Understanding JavaScript Closures](http://javascriptweblog.wordpress.com/2010/10/25/understanding-javascript-closures/) - Angus Croll
   - [Basic JavaScript for the impatient programmer](http://www.2ality.com/2013/06/basic-javascript.html) - Dr. Axel Rauschmayer
-  - [You Might Not Need jQuery](http://youmightnotneedjquery.com/)
+  - [You Might Not Need jQuery](http://youmightnotneedjquery.com/) - Zack Bloom & Adam Schwartz
 
 **Books**
 

From f2e49d131a9cac8157213123cc47bae2c3127643 Mon Sep 17 00:00:00 2001
From: PatrickJS <github@gdi2290.com>
Date: Mon, 3 Feb 2014 22:38:45 -0800
Subject: [PATCH 0077/1591] update copyright year

---
 README.md | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/README.md b/README.md
index e0e1f76e61..3a477b6c50 100644
--- a/README.md
+++ b/README.md
@@ -1519,7 +1519,7 @@
 
 (The MIT License)
 
-Copyright (c) 2012 Airbnb
+Copyright (c) 2014 Airbnb
 
 Permission is hereby granted, free of charge, to any person obtaining
 a copy of this software and associated documentation files (the

From 6c25eddf0ed87df0178d408b1542bf9ef73a983d Mon Sep 17 00:00:00 2001
From: Gareth Visagie <gareth@gjvis.com>
Date: Tue, 25 Feb 2014 11:30:46 +0000
Subject: [PATCH 0078/1591] Add Money Advice Service to list of organisations
 using this style guide

---
 README.md | 1 +
 1 file changed, 1 insertion(+)

diff --git a/README.md b/README.md
index 3a477b6c50..b7d4043297 100644
--- a/README.md
+++ b/README.md
@@ -1482,6 +1482,7 @@
   - **Mighty Spring**: [mightyspring/javascript](https://github.com/mightyspring/javascript)
   - **MinnPost**: [MinnPost/javascript](https://github.com/MinnPost/javascript)
   - **ModCloth**: [modcloth/javascript](https://github.com/modcloth/javascript)
+  - **Money Advice Service**: [moneyadviceservice/javascript](https://github.com/moneyadviceservice/javascript)
   - **National Geographic**: [natgeo/javascript](https://github.com/natgeo/javascript)
   - **National Park Service**: [nationalparkservice/javascript](https://github.com/nationalparkservice/javascript)
   - **Peerby**: [Peerby/javascript](https://github.com/Peerby/javascript)

From 8c01bc4aa85309683c98ac249c592869d7576f43 Mon Sep 17 00:00:00 2001
From: Harrison Shoff <hi@hshoff.com>
Date: Tue, 4 Mar 2014 09:23:44 -0800
Subject: [PATCH 0079/1591] [resources] add link to es6 features

---
 README.md | 1 +
 1 file changed, 1 insertion(+)

diff --git a/README.md b/README.md
index b7d4043297..2aa6cea373 100644
--- a/README.md
+++ b/README.md
@@ -1432,6 +1432,7 @@
   - [Understanding JavaScript Closures](http://javascriptweblog.wordpress.com/2010/10/25/understanding-javascript-closures/) - Angus Croll
   - [Basic JavaScript for the impatient programmer](http://www.2ality.com/2013/06/basic-javascript.html) - Dr. Axel Rauschmayer
   - [You Might Not Need jQuery](http://youmightnotneedjquery.com/) - Zack Bloom & Adam Schwartz
+  - [ES6 Features](https://github.com/lukehoban/es6features) - Luke Hoban
 
 **Books**
 

From c4d7cc0a210587e7e9b71ad3c5d793c6396c9942 Mon Sep 17 00:00:00 2001
From: Flurin Egger <flurin@digitpaint.nl>
Date: Thu, 13 Mar 2014 11:37:23 +0100
Subject: [PATCH 0080/1591] Add Digitpaint to list of organisations using this
 style guide

---
 README.md | 1 +
 1 file changed, 1 insertion(+)

diff --git a/README.md b/README.md
index 2aa6cea373..3f1cd89ed0 100644
--- a/README.md
+++ b/README.md
@@ -1474,6 +1474,7 @@
   - **Airbnb**: [airbnb/javascript](https://github.com/airbnb/javascript)
   - **American Insitutes for Research**: [AIRAST/javascript](https://github.com/AIRAST/javascript)
   - **Compass Learning**: [compasslearning/javascript-style-guide](https://github.com/compasslearning/javascript-style-guide)
+  - **Digitpaint** [digitpaint/javascript](https://github.com/digitpaint/javascript)
   - **ExactTarget**: [ExactTarget/javascript](https://github.com/ExactTarget/javascript)
   - **Gawker Media**: [gawkermedia/javascript](https://github.com/gawkermedia/javascript)
   - **GeneralElectric**: [GeneralElectric/javascript](https://github.com/GeneralElectric/javascript)

From c3a9c7f7412ab47b2c5121ec0aa9c09907c95d26 Mon Sep 17 00:00:00 2001
From: Koen Punt <koen@koenpunt.nl>
Date: Sun, 16 Mar 2014 15:24:43 +0100
Subject: [PATCH 0081/1591] Rely on github's default heading anchors

---
 README.md | 70 +++++++++++++++++++++++++++----------------------------
 1 file changed, 35 insertions(+), 35 deletions(-)

diff --git a/README.md b/README.md
index 3f1cd89ed0..4821dd7fce 100644
--- a/README.md
+++ b/README.md
@@ -3,7 +3,7 @@
 *A mostly reasonable approach to JavaScript*
 
 
-## <a name='TOC'>Table of Contents</a>
+## Table of Contents
 
   1. [Types](#types)
   1. [Objects](#objects)
@@ -13,30 +13,30 @@
   1. [Properties](#properties)
   1. [Variables](#variables)
   1. [Hoisting](#hoisting)
-  1. [Conditional Expressions & Equality](#conditionals)
+  1. [Conditional Expressions & Equality](#conditional-expressions--equality)
   1. [Blocks](#blocks)
   1. [Comments](#comments)
   1. [Whitespace](#whitespace)
   1. [Commas](#commas)
   1. [Semicolons](#semicolons)
-  1. [Type Casting & Coercion](#type-coercion)
+  1. [Type Casting & Coercion](#type-casting--coercion)
   1. [Naming Conventions](#naming-conventions)
   1. [Accessors](#accessors)
   1. [Constructors](#constructors)
   1. [Events](#events)
   1. [Modules](#modules)
   1. [jQuery](#jquery)
-  1. [ES5 Compatibility](#es5)
+  1. [ECMAScript 5 Compatibility](#ecmascript-5-compatibility)
   1. [Testing](#testing)
   1. [Performance](#performance)
   1. [Resources](#resources)
   1. [In the Wild](#in-the-wild)
   1. [Translation](#translation)
-  1. [The JavaScript Style Guide Guide](#guide-guide)
+  1. [The JavaScript Style Guide Guide](#the-javascript-style-guide-guide)
   1. [Contributors](#contributors)
   1. [License](#license)
 
-## <a name='types'>Types</a>
+## Types
 
   - **Primitives**: When you access a primitive type you work directly on its value
 
@@ -71,7 +71,7 @@
 
     **[[⬆]](#TOC)**
 
-## <a name='objects'>Objects</a>
+## Objects
 
   - Use the literal syntax for object creation.
 
@@ -119,7 +119,7 @@
     ```
     **[[⬆]](#TOC)**
 
-## <a name='arrays'>Arrays</a>
+## Arrays
 
   - Use the literal syntax for array creation
 
@@ -172,7 +172,7 @@
     **[[⬆]](#TOC)**
 
 
-## <a name='strings'>Strings</a>
+## Strings
 
   - Use single quotes `''` for strings
 
@@ -262,7 +262,7 @@
     **[[⬆]](#TOC)**
 
 
-## <a name='functions'>Functions</a>
+## Functions
 
   - Function expressions:
 
@@ -321,7 +321,7 @@
 
 
 
-## <a name='properties'>Properties</a>
+## Properties
 
   - Use dot notation when accessing properties.
 
@@ -356,7 +356,7 @@
     **[[⬆]](#TOC)**
 
 
-## <a name='variables'>Variables</a>
+## Variables
 
   - Always use `var` to declare variables. Not doing so will result in global variables. We want to avoid polluting the global namespace. Captain Planet warned us of that.
 
@@ -465,7 +465,7 @@
     **[[⬆]](#TOC)**
 
 
-## <a name='hoisting'>Hoisting</a>
+## Hoisting
 
   - Variable declarations get hoisted to the top of their scope, their assignment does not.
 
@@ -555,7 +555,7 @@
 
 
 
-## <a name='conditionals'>Conditional Expressions & Equality</a>
+## Conditional Expressions & Equality
 
   - Use `===` and `!==` over `==` and `!=`.
   - Conditional expressions are evaluated using coercion with the `ToBoolean` method and always follow these simple rules:
@@ -603,7 +603,7 @@
     **[[⬆]](#TOC)**
 
 
-## <a name='blocks'>Blocks</a>
+## Blocks
 
   - Use braces with all multi-line blocks.
 
@@ -632,7 +632,7 @@
     **[[⬆]](#TOC)**
 
 
-## <a name='comments'>Comments</a>
+## Comments
 
   - Use `/** ... */` for multiline comments. Include a description, specify types and values for all parameters and return values.
 
@@ -725,7 +725,7 @@
     **[[⬆]](#TOC)**
 
 
-## <a name='whitespace'>Whitespace</a>
+## Whitespace
 
   - Use soft tabs set to 2 spaces
 
@@ -832,7 +832,7 @@
 
     **[[⬆]](#TOC)**
 
-## <a name='commas'>Commas</a>
+## Commas
 
   - Leading commas: **Nope.**
 
@@ -895,7 +895,7 @@
     **[[⬆]](#TOC)**
 
 
-## <a name='semicolons'>Semicolons</a>
+## Semicolons
 
   - **Yup.**
 
@@ -922,7 +922,7 @@
     **[[⬆]](#TOC)**
 
 
-## <a name='type-coercion'>Type Casting & Coercion</a>
+## Type Casting & Coercion
 
   - Perform type coercion at the beginning of the statement.
   - Strings:
@@ -998,7 +998,7 @@
     **[[⬆]](#TOC)**
 
 
-## <a name='naming-conventions'>Naming Conventions</a>
+## Naming Conventions
 
   - Avoid single letter names. Be descriptive with your naming.
 
@@ -1111,7 +1111,7 @@
     **[[⬆]](#TOC)**
 
 
-## <a name='accessors'>Accessors</a>
+## Accessors
 
   - Accessor functions for properties are not required
   - If you do make accessor functions use getVal() and setVal('hello')
@@ -1165,7 +1165,7 @@
     **[[⬆]](#TOC)**
 
 
-## <a name='constructors'>Constructors</a>
+## Constructors
 
   - Assign methods to the prototype object, instead of overwriting the prototype with a new object. Overwriting the prototype makes inheritance impossible: by resetting the prototype you'll overwrite the base!
 
@@ -1250,7 +1250,7 @@
     **[[⬆]](#TOC)**
 
 
-## <a name='events'>Events</a>
+## Events
 
   - When attaching data payloads to events (whether DOM events or something more proprietary like Backbone events), pass a hash instead of a raw value. This allows a subsequent contributor to add more data to the event payload without finding and updating every handler for the event. For example, instead of:
 
@@ -1281,7 +1281,7 @@
   **[[⬆]](#TOC)**
 
 
-## <a name='modules'>Modules</a>
+## Modules
 
   - The module should start with a `!`. This ensures that if a malformed module forgets to include a final semicolon there aren't errors in production when the scripts get concatenated. [Explanation](https://github.com/airbnb/javascript/issues/44#issuecomment-13063933)
   - The file should be named with camelCase, live in a folder with the same name, and match the name of the single export.
@@ -1312,7 +1312,7 @@
     **[[⬆]](#TOC)**
 
 
-## <a name='jquery'>jQuery</a>
+## jQuery
 
   - Prefix jQuery object variables with a `$`.
 
@@ -1374,14 +1374,14 @@
     **[[⬆]](#TOC)**
 
 
-## <a name='es5'>ECMAScript 5 Compatibility</a>
+## ECMAScript 5 Compatibility
 
   - Refer to [Kangax](https://twitter.com/kangax/)'s ES5 [compatibility table](http://kangax.github.com/es5-compat-table/)
 
   **[[⬆]](#TOC)**
 
 
-## <a name='testing'>Testing</a>
+## Testing
 
   - **Yup.**
 
@@ -1394,7 +1394,7 @@
     **[[⬆]](#TOC)**
 
 
-## <a name='performance'>Performance</a>
+## Performance
 
   - [On Layout & Web Performance](http://kellegous.com/j/2013/01/26/layout-performance/)
   - [String vs Array Concat](http://jsperf.com/string-vs-array-concat/2)
@@ -1408,7 +1408,7 @@
   **[[⬆]](#TOC)**
 
 
-## <a name='resources'>Resources</a>
+## Resources
 
 
 **Read This**
@@ -1466,7 +1466,7 @@
 
   **[[⬆]](#TOC)**
 
-## <a name='in-the-wild'>In the Wild</a>
+## In the Wild
 
   This is a list of organizations that are using this style guide. Send us a pull request or open an issue and we'll add you to the list.
 
@@ -1495,7 +1495,7 @@
   - **Zillow**: [zillow/javascript](https://github.com/zillow/javascript)
   - **ZocDoc**: [ZocDoc/javascript](https://github.com/ZocDoc/javascript)
 
-## <a name='translation'>Translation</a>
+## Translation
 
   This style guide is also available in other languages:
 
@@ -1509,16 +1509,16 @@
   - :ru: **Russian**: [uprock/javascript](https://github.com/uprock/javascript)
   - :bg: **Bulgarian**: [borislavvv/javascript](https://github.com/borislavvv/javascript)
 
-## <a name='guide-guide'>The JavaScript Style Guide Guide</a>
+## The JavaScript Style Guide Guide
 
   - [Reference](https://github.com/airbnb/javascript/wiki/The-JavaScript-Style-Guide-Guide)
 
-## <a name='authors'>Contributors</a>
+## Contributors
 
   - [View Contributors](https://github.com/airbnb/javascript/graphs/contributors)
 
 
-## <a name='license'>License</a>
+## License
 
 (The MIT License)
 

From fb86fc032d96597b7b33721a13cc3807d8fb90c0 Mon Sep 17 00:00:00 2001
From: Koen Punt <koen@koenpunt.nl>
Date: Sun, 16 Mar 2014 15:38:10 +0100
Subject: [PATCH 0082/1591] TOC links updated

---
 README.md | 53 +++++++++++++++++++++++++++--------------------------
 1 file changed, 27 insertions(+), 26 deletions(-)

diff --git a/README.md b/README.md
index 4821dd7fce..1bcb08b76f 100644
--- a/README.md
+++ b/README.md
@@ -69,7 +69,7 @@
     console.log(foo[0], bar[0]); // => 9, 9
     ```
 
-    **[[⬆]](#TOC)**
+**[⬆ back to top](#table-of-contents)**
 
 ## Objects
 
@@ -117,7 +117,8 @@
       type: 'alien'
     };
     ```
-    **[[⬆]](#TOC)**
+
+**[⬆ back to top](#table-of-contents)**
 
 ## Arrays
 
@@ -169,7 +170,7 @@
     }
     ```
 
-    **[[⬆]](#TOC)**
+**[⬆ back to top](#table-of-contents)**
 
 
 ## Strings
@@ -259,7 +260,7 @@
     }
     ```
 
-    **[[⬆]](#TOC)**
+**[⬆ back to top](#table-of-contents)**
 
 
 ## Functions
@@ -317,7 +318,7 @@
     }
     ```
 
-    **[[⬆]](#TOC)**
+**[⬆ back to top](#table-of-contents)**
 
 
 
@@ -353,7 +354,7 @@
     var isJedi = getProp('jedi');
     ```
 
-    **[[⬆]](#TOC)**
+**[⬆ back to top](#table-of-contents)**
 
 
 ## Variables
@@ -462,7 +463,7 @@
     }
     ```
 
-    **[[⬆]](#TOC)**
+**[⬆ back to top](#table-of-contents)**
 
 
 ## Hoisting
@@ -551,7 +552,7 @@
 
   - For more information refer to [JavaScript Scoping & Hoisting](http://www.adequatelygood.com/2010/2/JavaScript-Scoping-and-Hoisting) by [Ben Cherry](http://www.adequatelygood.com/)
 
-    **[[⬆]](#TOC)**
+**[⬆ back to top](#table-of-contents)**
 
 
 
@@ -600,7 +601,7 @@
 
   - For more information see [Truth Equality and JavaScript](http://javascriptweblog.wordpress.com/2011/02/07/truth-equality-and-javascript/#more-2108) by Angus Croll
 
-    **[[⬆]](#TOC)**
+**[⬆ back to top](#table-of-contents)**
 
 
 ## Blocks
@@ -629,7 +630,7 @@
     }
     ```
 
-    **[[⬆]](#TOC)**
+**[⬆ back to top](#table-of-contents)**
 
 
 ## Comments
@@ -722,7 +723,7 @@
     }
   ```
 
-    **[[⬆]](#TOC)**
+**[⬆ back to top](#table-of-contents)**
 
 
 ## Whitespace
@@ -830,7 +831,7 @@
         .call(tron.led);
     ```
 
-    **[[⬆]](#TOC)**
+**[⬆ back to top](#table-of-contents)**
 
 ## Commas
 
@@ -892,7 +893,7 @@
     ];
     ```
 
-    **[[⬆]](#TOC)**
+**[⬆ back to top](#table-of-contents)**
 
 
 ## Semicolons
@@ -919,7 +920,7 @@
     })();
     ```
 
-    **[[⬆]](#TOC)**
+**[⬆ back to top](#table-of-contents)**
 
 
 ## Type Casting & Coercion
@@ -995,7 +996,7 @@
     var hasAge = !!age;
     ```
 
-    **[[⬆]](#TOC)**
+**[⬆ back to top](#table-of-contents)**
 
 
 ## Naming Conventions
@@ -1108,7 +1109,7 @@
     };
     ```
 
-    **[[⬆]](#TOC)**
+**[⬆ back to top](#table-of-contents)**
 
 
 ## Accessors
@@ -1162,7 +1163,7 @@
     };
     ```
 
-    **[[⬆]](#TOC)**
+**[⬆ back to top](#table-of-contents)**
 
 
 ## Constructors
@@ -1247,7 +1248,7 @@
     };
     ```
 
-    **[[⬆]](#TOC)**
+**[⬆ back to top](#table-of-contents)**
 
 
 ## Events
@@ -1278,7 +1279,7 @@
     });
     ```
 
-  **[[⬆]](#TOC)**
+  **[⬆ back to top](#table-of-contents)**
 
 
 ## Modules
@@ -1309,7 +1310,7 @@
     }(this);
     ```
 
-    **[[⬆]](#TOC)**
+**[⬆ back to top](#table-of-contents)**
 
 
 ## jQuery
@@ -1371,14 +1372,14 @@
     $sidebar.find('ul').hide();
     ```
 
-    **[[⬆]](#TOC)**
+**[⬆ back to top](#table-of-contents)**
 
 
 ## ECMAScript 5 Compatibility
 
   - Refer to [Kangax](https://twitter.com/kangax/)'s ES5 [compatibility table](http://kangax.github.com/es5-compat-table/)
 
-  **[[⬆]](#TOC)**
+**[⬆ back to top](#table-of-contents)**
 
 
 ## Testing
@@ -1391,7 +1392,7 @@
     }
     ```
 
-    **[[⬆]](#TOC)**
+**[⬆ back to top](#table-of-contents)**
 
 
 ## Performance
@@ -1405,7 +1406,7 @@
   - [Long String Concatenation](http://jsperf.com/ya-string-concat)
   - Loading...
 
-  **[[⬆]](#TOC)**
+**[⬆ back to top](#table-of-contents)**
 
 
 ## Resources
@@ -1464,7 +1465,7 @@
   - [Dustin Diaz](http://dustindiaz.com/)
   - [nettuts](http://net.tutsplus.com/?s=javascript)
 
-  **[[⬆]](#TOC)**
+**[⬆ back to top](#table-of-contents)**
 
 ## In the Wild
 
@@ -1543,6 +1544,6 @@ CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
 TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
 SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 
-**[[⬆]](#TOC)**
+**[⬆ back to top](#table-of-contents)**
 
 # };

From fee185379a992ee8e747ca7b7aff1af816c1469c Mon Sep 17 00:00:00 2001
From: Stefan Thomas <justmoon@members.fsf.org>
Date: Mon, 17 Mar 2014 13:55:51 -0700
Subject: [PATCH 0083/1591] Add Ripple to list of projects using this style
 guide.

---
 README.md | 1 +
 1 file changed, 1 insertion(+)

diff --git a/README.md b/README.md
index 1bcb08b76f..a42eb7e913 100644
--- a/README.md
+++ b/README.md
@@ -1491,6 +1491,7 @@
   - **Peerby**: [Peerby/javascript](https://github.com/Peerby/javascript)
   - **Razorfish**: [razorfish/javascript-style-guide](https://github.com/razorfish/javascript-style-guide)
   - **REI**: [reidev/js-style-guide](https://github.com/reidev/js-style-guide)
+  - **Ripple**: [ripple/javascript-style-guide](https://github.com/ripple/javascript-style-guide)
   - **Shutterfly**: [shutterfly/javascript](https://github.com/shutterfly/javascript)
   - **Userify**: [userify/javascript](https://github.com/userify/javascript)
   - **Zillow**: [zillow/javascript](https://github.com/zillow/javascript)

From edfab47de01d14623b5bbd52679f8f6cadd89134 Mon Sep 17 00:00:00 2001
From: Juan Lulkin <maiz@lulk.in>
Date: Thu, 20 Mar 2014 21:06:13 +0200
Subject: [PATCH 0084/1591] Update README.md to add SeekingAlpha

---
 README.md | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/README.md b/README.md
index 1bcb08b76f..ef04bdb5ee 100644
--- a/README.md
+++ b/README.md
@@ -1,4 +1,4 @@
-# Airbnb JavaScript Style Guide() {
+# ~~Airbnb~~ SeekingAlpha JavaScript Style Guide() {
 
 *A mostly reasonable approach to JavaScript*
 

From f59724185adae45572fba6d6eca4d5c7adf1cb8f Mon Sep 17 00:00:00 2001
From: Juan Lulkin <maiz@lulk.in>
Date: Thu, 20 Mar 2014 21:09:20 +0200
Subject: [PATCH 0085/1591] Add SeekingAlpha to companies in the README

---
 README.md | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/README.md b/README.md
index ef04bdb5ee..87730609db 100644
--- a/README.md
+++ b/README.md
@@ -1,4 +1,4 @@
-# ~~Airbnb~~ SeekingAlpha JavaScript Style Guide() {
+# Airbnb JavaScript Style Guide() {
 
 *A mostly reasonable approach to JavaScript*
 
@@ -1490,6 +1490,7 @@
   - **National Park Service**: [nationalparkservice/javascript](https://github.com/nationalparkservice/javascript)
   - **Peerby**: [Peerby/javascript](https://github.com/Peerby/javascript)
   - **Razorfish**: [razorfish/javascript-style-guide](https://github.com/razorfish/javascript-style-guide)
+  - **SeekingAlpha**: [seekingalpha/javascript-style-guide](https://github.com/seekingalpha/javascript-style-guide)
   - **REI**: [reidev/js-style-guide](https://github.com/reidev/js-style-guide)
   - **Shutterfly**: [shutterfly/javascript](https://github.com/shutterfly/javascript)
   - **Userify**: [userify/javascript](https://github.com/userify/javascript)

From 12baae728e0fc710e1efe3e662a6b63e2353bd37 Mon Sep 17 00:00:00 2001
From: Dan Caddigan <dcaddigan@dataxu.com>
Date: Tue, 25 Mar 2014 13:02:27 -0400
Subject: [PATCH 0086/1591] Fix typo with word programatically

---
 README.md | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/README.md b/README.md
index 87730609db..6379a5d505 100644
--- a/README.md
+++ b/README.md
@@ -216,7 +216,7 @@
       'fast.';
     ```
 
-  - When programatically building up a string, use Array#join instead of string concatenation. Mostly for IE: [jsPerf](http://jsperf.com/string-vs-array-concat/2).
+  - When programmatically building up a string, use Array#join instead of string concatenation. Mostly for IE: [jsPerf](http://jsperf.com/string-vs-array-concat/2).
 
     ```javascript
     var items,

From 27379163658080c1d0b3a2b7dd210d8d74e6d038 Mon Sep 17 00:00:00 2001
From: Dan Caddigan <dcaddigan@dataxu.com>
Date: Tue, 25 Mar 2014 13:08:33 -0400
Subject: [PATCH 0087/1591] Use 80 chars for consistency with comment above

---
 README.md | 16 +++++-----------
 1 file changed, 5 insertions(+), 11 deletions(-)

diff --git a/README.md b/README.md
index 87730609db..1570033aa0 100644
--- a/README.md
+++ b/README.md
@@ -199,21 +199,15 @@
     var errorMessage = 'This is a super long error that was thrown because of Batman. When you stop to think about how Batman had anything to do with this, you would get nowhere fast.';
 
     // bad
-    var errorMessage = 'This is a super long error that \
-    was thrown because of Batman. \
-    When you stop to think about \
-    how Batman had anything to do \
+    var errorMessage = 'This is a super long error that was thrown because \
+    of Batman. When you stop to think about how Batman had anything to do \
     with this, you would get nowhere \
     fast.';
 
-
     // good
-    var errorMessage = 'This is a super long error that ' +
-      'was thrown because of Batman. ' +
-      'When you stop to think about ' +
-      'how Batman had anything to do ' +
-      'with this, you would get nowhere ' +
-      'fast.';
+    var errorMessage = 'This is a super long error that was thrown because ' +
+      'of Batman. When you stop to think about how Batman had anything to do ' +
+      'with this, you would get nowhere fast.';
     ```
 
   - When programatically building up a string, use Array#join instead of string concatenation. Mostly for IE: [jsPerf](http://jsperf.com/string-vs-array-concat/2).

From 3c504e9622588aadbb2c9f4163ea6699e75d6459 Mon Sep 17 00:00:00 2001
From: James Bunt <james.bunt@gmail.com>
Date: Wed, 23 Apr 2014 11:00:09 +1200
Subject: [PATCH 0088/1591] Remove unnecessary extra newline that confused some
 markdown previewers (in my case Atom.io).

---
 README.md | 1 -
 1 file changed, 1 deletion(-)

diff --git a/README.md b/README.md
index 3409c68ccd..ab248d07a1 100644
--- a/README.md
+++ b/README.md
@@ -137,7 +137,6 @@
     ```javascript
     var someStack = [];
 
-
     // bad
     someStack[someStack.length] = 'abracadabra';
 

From 1a6d30820957b02a2eed8d7cd937f1fb6db7850a Mon Sep 17 00:00:00 2001
From: James Bunt <james.bunt@gmail.com>
Date: Thu, 24 Apr 2014 11:05:30 +1200
Subject: [PATCH 0089/1591] Add justification and some further reading on using
 a leading semi colon before an IIFE to the Semicolons section.

---
 README.md | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

diff --git a/README.md b/README.md
index 3409c68ccd..5e4bdd339c 100644
--- a/README.md
+++ b/README.md
@@ -907,13 +907,15 @@
       return name;
     })();
 
-    // good
+    // good (guards against the function becoming an argument when two files with IIFEs are concatenated)
     ;(function() {
       var name = 'Skywalker';
       return name;
     })();
     ```
 
+    [Read more](http://stackoverflow.com/a/7365214/1712802).
+
 **[⬆ back to top](#table-of-contents)**
 
 

From 6288faf3dce86c64be7a4ce8328b53f4baa82855 Mon Sep 17 00:00:00 2001
From: James Bunt <james.bunt@gmail.com>
Date: Thu, 24 Apr 2014 11:11:23 +1200
Subject: [PATCH 0090/1591] Add Orion Health to the list of companies in the
 README.

---
 README.md | 1 +
 1 file changed, 1 insertion(+)

diff --git a/README.md b/README.md
index 3409c68ccd..23f69aca96 100644
--- a/README.md
+++ b/README.md
@@ -1482,6 +1482,7 @@
   - **Money Advice Service**: [moneyadviceservice/javascript](https://github.com/moneyadviceservice/javascript)
   - **National Geographic**: [natgeo/javascript](https://github.com/natgeo/javascript)
   - **National Park Service**: [nationalparkservice/javascript](https://github.com/nationalparkservice/javascript)
+  - **Orion Health**: [orionhealth/javascript](https://github.com/orionhealth/javascript)
   - **Peerby**: [Peerby/javascript](https://github.com/Peerby/javascript)
   - **Razorfish**: [razorfish/javascript-style-guide](https://github.com/razorfish/javascript-style-guide)
   - **SeekingAlpha**: [seekingalpha/javascript-style-guide](https://github.com/seekingalpha/javascript-style-guide)

From a3a0af93ed84b2da231558efea02c5d66364ffb7 Mon Sep 17 00:00:00 2001
From: Jack Lawson <ajacksified@gmail.com>
Date: Tue, 6 May 2014 12:18:44 -0700
Subject: [PATCH 0091/1591] Add Reddit to list of companies.

---
 README.md | 1 +
 1 file changed, 1 insertion(+)

diff --git a/README.md b/README.md
index 23f69aca96..525de0638e 100644
--- a/README.md
+++ b/README.md
@@ -1486,6 +1486,7 @@
   - **Peerby**: [Peerby/javascript](https://github.com/Peerby/javascript)
   - **Razorfish**: [razorfish/javascript-style-guide](https://github.com/razorfish/javascript-style-guide)
   - **SeekingAlpha**: [seekingalpha/javascript-style-guide](https://github.com/seekingalpha/javascript-style-guide)
+  - **Reddit**: [reddit/styleguide/javascript](https://github.com/reddit/styleguide/tree/master/javascript)
   - **REI**: [reidev/js-style-guide](https://github.com/reidev/js-style-guide)
   - **Ripple**: [ripple/javascript-style-guide](https://github.com/ripple/javascript-style-guide)
   - **Shutterfly**: [shutterfly/javascript](https://github.com/shutterfly/javascript)

From b138d89d7b7b65117bba094e871c6fb025fb8e19 Mon Sep 17 00:00:00 2001
From: Harrison Shoff <hi@hshoff.com>
Date: Wed, 7 May 2014 12:36:56 -0700
Subject: [PATCH 0092/1591] [in the wild] Reddit => reddit

---
 README.md | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/README.md b/README.md
index 525de0638e..536ea8e7fc 100644
--- a/README.md
+++ b/README.md
@@ -1486,7 +1486,7 @@
   - **Peerby**: [Peerby/javascript](https://github.com/Peerby/javascript)
   - **Razorfish**: [razorfish/javascript-style-guide](https://github.com/razorfish/javascript-style-guide)
   - **SeekingAlpha**: [seekingalpha/javascript-style-guide](https://github.com/seekingalpha/javascript-style-guide)
-  - **Reddit**: [reddit/styleguide/javascript](https://github.com/reddit/styleguide/tree/master/javascript)
+  - **reddit**: [reddit/styleguide/javascript](https://github.com/reddit/styleguide/tree/master/javascript)
   - **REI**: [reidev/js-style-guide](https://github.com/reidev/js-style-guide)
   - **Ripple**: [ripple/javascript-style-guide](https://github.com/ripple/javascript-style-guide)
   - **Shutterfly**: [shutterfly/javascript](https://github.com/shutterfly/javascript)

From 8189d6cc5845dc5f64ac29e062f62e0b914c0c98 Mon Sep 17 00:00:00 2001
From: Max Goodman <c@chromakode.com>
Date: Tue, 13 May 2014 15:43:44 -0700
Subject: [PATCH 0093/1591] Clarify single newlines at the end of files.

---
 README.md | 13 ++++++++++---
 1 file changed, 10 insertions(+), 3 deletions(-)

diff --git a/README.md b/README.md
index 536ea8e7fc..d1513147db 100644
--- a/README.md
+++ b/README.md
@@ -777,7 +777,7 @@
     var x = y + 5;
     ```
 
-  - Place an empty newline at the end of the file.
+  - End files with a single newline character.
 
     ```javascript
     // bad
@@ -787,11 +787,18 @@
     ```
 
     ```javascript
-    // good
+    // bad
     (function(global) {
       // ...stuff...
-    })(this);
+    })(this);↵
+    ↵
+    ```
 
+    ```javascript
+    // good
+    (function(global) {
+      // ...stuff...
+    })(this);↵
     ```
 
   - Use indentation when making long method chains.

From 1c3e0c88176c548d3ebaf94464de64b333adedcb Mon Sep 17 00:00:00 2001
From: Joe Pettersson <me@joe8bit.com>
Date: Fri, 23 May 2014 12:20:24 +0100
Subject: [PATCH 0094/1591] Add syntax highlighting to noConflict reference

---
 README.md | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/README.md b/README.md
index d1513147db..234071e05b 100644
--- a/README.md
+++ b/README.md
@@ -1287,7 +1287,7 @@
 
   - The module should start with a `!`. This ensures that if a malformed module forgets to include a final semicolon there aren't errors in production when the scripts get concatenated. [Explanation](https://github.com/airbnb/javascript/issues/44#issuecomment-13063933)
   - The file should be named with camelCase, live in a folder with the same name, and match the name of the single export.
-  - Add a method called noConflict() that sets the exported module to the previous version and returns this one.
+  - Add a method called `noConflict()` that sets the exported module to the previous version and returns this one.
   - Always declare `'use strict';` at the top of the module.
 
     ```javascript

From 12df1f50f9ec1f76202dea8d1444b93c11447189 Mon Sep 17 00:00:00 2001
From: Robert Djurasaj <robertd@users.noreply.github.com>
Date: Thu, 5 Jun 2014 11:03:11 -0600
Subject: [PATCH 0095/1591] Remove ; from function endings

---
 README.md | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/README.md b/README.md
index 234071e05b..53ece2b488 100644
--- a/README.md
+++ b/README.md
@@ -1022,14 +1022,14 @@
     // bad
     var OBJEcttsssss = {};
     var this_is_my_object = {};
-    function c() {};
+    function c() {}
     var u = new user({
       name: 'Bob Parr'
     });
 
     // good
     var thisIsMyObject = {};
-    function thisIsMyFunction() {};
+    function thisIsMyFunction() {}
     var user = new User({
       name: 'Bob Parr'
     });

From 0a58fc75def52b776d3e391dbf3b278867ef9047 Mon Sep 17 00:00:00 2001
From: Harrison Shoff <hi@hshoff.com>
Date: Fri, 6 Jun 2014 18:15:59 -0700
Subject: [PATCH 0096/1591] [naming conventions] add note about NFEs, IE8 and
 below. fixes #82

---
 README.md | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/README.md b/README.md
index 0d961422f1..2d277e2625 100644
--- a/README.md
+++ b/README.md
@@ -1117,6 +1117,8 @@
     };
     ```
 
+  - **Note:** IE8 and below exhibit some quirks with named function expressions.  See [http://kangax.github.io/nfe/](http://kangax.github.io/nfe/) for more info.
+
 **[⬆ back to top](#table-of-contents)**
 
 

From 2895ae0e57aee2198c5dbf71ec28b1de383d41ef Mon Sep 17 00:00:00 2001
From: Rahul Doshi <rahuld223@yahoo.com>
Date: Thu, 12 Jun 2014 09:10:06 -0700
Subject: [PATCH 0097/1591] Add DailyMotion to the list of organizations that
 are using this style guide

---
 README.md | 1 +
 1 file changed, 1 insertion(+)

diff --git a/README.md b/README.md
index 2d277e2625..92f4a2402c 100644
--- a/README.md
+++ b/README.md
@@ -1485,6 +1485,7 @@
   - **Airbnb**: [airbnb/javascript](https://github.com/airbnb/javascript)
   - **American Insitutes for Research**: [AIRAST/javascript](https://github.com/AIRAST/javascript)
   - **Compass Learning**: [compasslearning/javascript-style-guide](https://github.com/compasslearning/javascript-style-guide)
+  - **DailyMotion**: [dailymotion/javascript](https://github.com/dailymotion/javascript)
   - **Digitpaint** [digitpaint/javascript](https://github.com/digitpaint/javascript)
   - **ExactTarget**: [ExactTarget/javascript](https://github.com/ExactTarget/javascript)
   - **Gawker Media**: [gawkermedia/javascript](https://github.com/gawkermedia/javascript)

From 214bf78ea8de4418a25004c6c6c0efaec7472e4c Mon Sep 17 00:00:00 2001
From: John Mumm <jtfmumm@gmail.com>
Date: Mon, 16 Jun 2014 09:50:25 -0400
Subject: [PATCH 0098/1591] Add TheLadders to the list of organizations that
 forked this style guide

---
 README.md | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/README.md b/README.md
index 92f4a2402c..61d84b0ea8 100644
--- a/README.md
+++ b/README.md
@@ -1502,11 +1502,12 @@
   - **Orion Health**: [orionhealth/javascript](https://github.com/orionhealth/javascript)
   - **Peerby**: [Peerby/javascript](https://github.com/Peerby/javascript)
   - **Razorfish**: [razorfish/javascript-style-guide](https://github.com/razorfish/javascript-style-guide)
-  - **SeekingAlpha**: [seekingalpha/javascript-style-guide](https://github.com/seekingalpha/javascript-style-guide)
   - **reddit**: [reddit/styleguide/javascript](https://github.com/reddit/styleguide/tree/master/javascript)
   - **REI**: [reidev/js-style-guide](https://github.com/reidev/js-style-guide)
   - **Ripple**: [ripple/javascript-style-guide](https://github.com/ripple/javascript-style-guide)
+  - **SeekingAlpha**: [seekingalpha/javascript-style-guide](https://github.com/seekingalpha/javascript-style-guide)
   - **Shutterfly**: [shutterfly/javascript](https://github.com/shutterfly/javascript)
+  - **TheLadders**: [TheLadders/javascript](https://github.com/TheLadders/javascript)  
   - **Userify**: [userify/javascript](https://github.com/userify/javascript)
   - **Zillow**: [zillow/javascript](https://github.com/zillow/javascript)
   - **ZocDoc**: [ZocDoc/javascript](https://github.com/ZocDoc/javascript)

From 0c36235c35ea866bb274efbb60b29098ac4b7fc4 Mon Sep 17 00:00:00 2001
From: Francis Plaza <francis@francis.ph>
Date: Sun, 29 Jun 2014 13:09:51 -0400
Subject: [PATCH 0099/1591] Added Muber to the list of organizations using this
 styleguide

---
 README.md | 1 +
 1 file changed, 1 insertion(+)

diff --git a/README.md b/README.md
index caf54d4843..c6636f1a96 100644
--- a/README.md
+++ b/README.md
@@ -1499,6 +1499,7 @@
   - **MinnPost**: [MinnPost/javascript](https://github.com/MinnPost/javascript)
   - **ModCloth**: [modcloth/javascript](https://github.com/modcloth/javascript)
   - **Money Advice Service**: [moneyadviceservice/javascript](https://github.com/moneyadviceservice/javascript)
+  - **Muber**: [muber/javascript](https://github.com/muber/javascript)
   - **National Geographic**: [natgeo/javascript](https://github.com/natgeo/javascript)
   - **National Park Service**: [nationalparkservice/javascript](https://github.com/nationalparkservice/javascript)
   - **Orion Health**: [orionhealth/javascript](https://github.com/orionhealth/javascript)

From 697aa00da0a53402a92bac6629e856302b7d1707 Mon Sep 17 00:00:00 2001
From: Mark Storus <mark.storus@airbnb.com>
Date: Tue, 29 Jul 2014 16:09:54 -0700
Subject: [PATCH 0100/1591] jshintrc cleanup

- eqnull is a relaxing option, not an enforcing option
- trailing has been removed as of jshint 2.5
- put in alphabetical order
---
 linters/jshintrc | 20 +++++++++++---------
 1 file changed, 11 insertions(+), 9 deletions(-)

diff --git a/linters/jshintrc b/linters/jshintrc
index d3b47148a8..cc6e398b40 100644
--- a/linters/jshintrc
+++ b/linters/jshintrc
@@ -25,23 +25,23 @@
   // Prohibit use of == and != in favor of === and !==.
   "eqeqeq": true,
 
-  // Suppress warnings about == null comparisons.
-  "eqnull": true,
-
   // Enforce tab width of 2 spaces.
   "indent": 2,
 
   // Prohibit use of a variable before it is defined.
   "latedef": true,
 
+  // Enforce line length to 80 characters
+  "maxlen": 80,
+
   // Require capitalized names for constructor functions.
   "newcap": true,
 
   // Enforce use of single quotation marks for strings.
   "quotmark": "single",
 
-  // Prohibit trailing whitespace.
-  "trailing": true,
+  // Enforce placing 'use strict' at the top function scope
+  "strict": true,
 
   // Prohibit use of explicitly undeclared variables.
   "undef": true,
@@ -49,9 +49,11 @@
   // Warn when variables are defined but never used.
   "unused": true,
 
-  // Enforce line length to 80 characters
-  "maxlen": 80,
+  /*
+   * RELAXING OPTIONS
+   * =================
+   */
 
-  // Enforce placing 'use strict' at the top function scope
-  "strict": true
+  // Suppress warnings about == null comparisons.
+  "eqnull": true
 }

From cccf3644b1f8b50de557aed41e5a57760756f966 Mon Sep 17 00:00:00 2001
From: Adrian Bruinhout <adrian@webfella.com.au>
Date: Tue, 5 Aug 2014 12:16:53 -0400
Subject: [PATCH 0101/1591] Adding Intent Media to the list of companies

---
 README.md | 1 +
 1 file changed, 1 insertion(+)

diff --git a/README.md b/README.md
index c6636f1a96..32eff50a28 100644
--- a/README.md
+++ b/README.md
@@ -1495,6 +1495,7 @@
   - **GoodData**: [gooddata/gdc-js-style](https://github.com/gooddata/gdc-js-style)
   - **Grooveshark**: [grooveshark/javascript](https://github.com/grooveshark/javascript)
   - **How About We**: [howaboutwe/javascript](https://github.com/howaboutwe/javascript)
+  - **Intent Media**: [intentmedia/javascript](https://github.com/intentmedia/javascript)
   - **Mighty Spring**: [mightyspring/javascript](https://github.com/mightyspring/javascript)
   - **MinnPost**: [MinnPost/javascript](https://github.com/MinnPost/javascript)
   - **ModCloth**: [modcloth/javascript](https://github.com/modcloth/javascript)

From 46481209040f85e9c76ff5cc9186335aedf66198 Mon Sep 17 00:00:00 2001
From: Harrison Shoff <hi@hshoff.com>
Date: Tue, 5 Aug 2014 16:27:06 -0700
Subject: [PATCH 0102/1591] [npm] add package.json

---
 index.js     |  0
 package.json | 24 ++++++++++++++++++++++++
 2 files changed, 24 insertions(+)
 create mode 100644 index.js
 create mode 100644 package.json

diff --git a/index.js b/index.js
new file mode 100644
index 0000000000..e69de29bb2
diff --git a/package.json b/package.json
new file mode 100644
index 0000000000..0643a32821
--- /dev/null
+++ b/package.json
@@ -0,0 +1,24 @@
+{
+  "name": "airbnb-style",
+  "version": "1.0.0",
+  "description": "A mostly reasonable approach to JavaScript.",
+  "main": "index.js",
+  "scripts": {
+    "test": "echo \"Error: no test specified\" && exit 1"
+  },
+  "repository": {
+    "type": "git",
+    "url": "https://github.com/airbnb/javascript.git"
+  },
+  "keywords": [
+    "style guide",
+    "lint",
+    "airbnb"
+  ],
+  "author": "Harrison Shoff <hi@hshoff.com> (https://twitter.com/hshoff)",
+  "license": "MIT",
+  "bugs": {
+    "url": "https://github.com/airbnb/javascript/issues"
+  },
+  "homepage": "https://github.com/airbnb/javascript"
+}

From 9f535bd724fe01ffea9fbabb65a3053f3bf98e2f Mon Sep 17 00:00:00 2001
From: Harrison Shoff <hi@hshoff.com>
Date: Tue, 5 Aug 2014 16:48:54 -0700
Subject: [PATCH 0103/1591] [npm] remove main, index.js

---
 index.js     | 0
 package.json | 1 -
 2 files changed, 1 deletion(-)
 delete mode 100644 index.js

diff --git a/index.js b/index.js
deleted file mode 100644
index e69de29bb2..0000000000
diff --git a/package.json b/package.json
index 0643a32821..2fe47fb268 100644
--- a/package.json
+++ b/package.json
@@ -2,7 +2,6 @@
   "name": "airbnb-style",
   "version": "1.0.0",
   "description": "A mostly reasonable approach to JavaScript.",
-  "main": "index.js",
   "scripts": {
     "test": "echo \"Error: no test specified\" && exit 1"
   },

From b7560735222ab3f902554900e08ab808794b8cd2 Mon Sep 17 00:00:00 2001
From: Harrison Shoff <hi@hshoff.com>
Date: Wed, 13 Aug 2014 18:06:26 -0700
Subject: [PATCH 0104/1591] [resources] add link to 'multiple var statements'
 in other styles

---
 README.md | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/README.md b/README.md
index 32eff50a28..cd099b56ce 100644
--- a/README.md
+++ b/README.md
@@ -1439,6 +1439,7 @@
   - [Naming this in nested functions](https://gist.github.com/4135065) - Christian Johansen
   - [Conditional Callbacks](https://github.com/airbnb/javascript/issues/52)
   - [Popular JavaScript Coding Conventions on Github](http://sideeffect.kr/popularconvention/#javascript)
+  - [Multiple var statements in JavaScript, not superfluous](http://benalman.com/news/2012/05/multiple-var-statements-javascript/) - Ben Alman
 
 **Further Reading**
 
@@ -1511,7 +1512,7 @@
   - **Ripple**: [ripple/javascript-style-guide](https://github.com/ripple/javascript-style-guide)
   - **SeekingAlpha**: [seekingalpha/javascript-style-guide](https://github.com/seekingalpha/javascript-style-guide)
   - **Shutterfly**: [shutterfly/javascript](https://github.com/shutterfly/javascript)
-  - **TheLadders**: [TheLadders/javascript](https://github.com/TheLadders/javascript)  
+  - **TheLadders**: [TheLadders/javascript](https://github.com/TheLadders/javascript)
   - **Userify**: [userify/javascript](https://github.com/userify/javascript)
   - **Zillow**: [zillow/javascript](https://github.com/zillow/javascript)
   - **ZocDoc**: [ZocDoc/javascript](https://github.com/ZocDoc/javascript)

From e46091bf44cf35c1a143c879b73104d3a6198e68 Mon Sep 17 00:00:00 2001
From: Justin Soliz <justin.soliz@avalara.com>
Date: Mon, 8 Sep 2014 10:11:29 -0700
Subject: [PATCH 0105/1591] Adding Avalara to list of orgs

---
 README.md | 1 +
 1 file changed, 1 insertion(+)

diff --git a/README.md b/README.md
index cd099b56ce..67ae2404f2 100644
--- a/README.md
+++ b/README.md
@@ -1487,6 +1487,7 @@
   - **Aan Zee**: [AanZee/javascript](https://github.com/AanZee/javascript)
   - **Airbnb**: [airbnb/javascript](https://github.com/airbnb/javascript)
   - **American Insitutes for Research**: [AIRAST/javascript](https://github.com/AIRAST/javascript)
+  - **Avalara**: [avalara/javascript](https://github.com/avalara/javascript)
   - **Compass Learning**: [compasslearning/javascript-style-guide](https://github.com/compasslearning/javascript-style-guide)
   - **DailyMotion**: [dailymotion/javascript](https://github.com/dailymotion/javascript)
   - **Digitpaint** [digitpaint/javascript](https://github.com/digitpaint/javascript)

From b81a7402416b90c9ef7b484a947111f8f514b386 Mon Sep 17 00:00:00 2001
From: Harrison Shoff <hi@hshoff.com>
Date: Mon, 8 Sep 2014 10:41:36 -0700
Subject: [PATCH 0106/1591] [in the wild] add VoxFeed. fixes #192

---
 README.md | 1 +
 1 file changed, 1 insertion(+)

diff --git a/README.md b/README.md
index 67ae2404f2..d551150d7e 100644
--- a/README.md
+++ b/README.md
@@ -1515,6 +1515,7 @@
   - **Shutterfly**: [shutterfly/javascript](https://github.com/shutterfly/javascript)
   - **TheLadders**: [TheLadders/javascript](https://github.com/TheLadders/javascript)
   - **Userify**: [userify/javascript](https://github.com/userify/javascript)
+  - **VoxFeed**: [VoxFeed/javascript-style-guide](https://github.com/VoxFeed/javascript-style-guide)
   - **Zillow**: [zillow/javascript](https://github.com/zillow/javascript)
   - **ZocDoc**: [ZocDoc/javascript](https://github.com/ZocDoc/javascript)
 

From 38fd77e159fc905820f6beb40e39e0a8b23dc9a4 Mon Sep 17 00:00:00 2001
From: Harrison Shoff <hi@hshoff.com>
Date: Mon, 8 Sep 2014 10:42:50 -0700
Subject: [PATCH 0107/1591] [in the wild] add Evernote. fixes #193

---
 README.md | 1 +
 1 file changed, 1 insertion(+)

diff --git a/README.md b/README.md
index d551150d7e..3c6f2da1a3 100644
--- a/README.md
+++ b/README.md
@@ -1491,6 +1491,7 @@
   - **Compass Learning**: [compasslearning/javascript-style-guide](https://github.com/compasslearning/javascript-style-guide)
   - **DailyMotion**: [dailymotion/javascript](https://github.com/dailymotion/javascript)
   - **Digitpaint** [digitpaint/javascript](https://github.com/digitpaint/javascript)
+  - **Evernote**: [evernote/javascript-style-guide](https://github.com/evernote/javascript-style-guide)
   - **ExactTarget**: [ExactTarget/javascript](https://github.com/ExactTarget/javascript)
   - **Gawker Media**: [gawkermedia/javascript](https://github.com/gawkermedia/javascript)
   - **GeneralElectric**: [GeneralElectric/javascript](https://github.com/GeneralElectric/javascript)

From e7c2997b3c662724eebb8425c2e6e1b76ce63974 Mon Sep 17 00:00:00 2001
From: Harrison Shoff <hi@hshoff.com>
Date: Fri, 19 Sep 2014 11:42:07 -0700
Subject: [PATCH 0108/1591] [resources] add tools section, include JSHint &
 JSCS

---
 README.md | 7 +++++++
 1 file changed, 7 insertions(+)

diff --git a/README.md b/README.md
index 3c6f2da1a3..ba3d5392bc 100644
--- a/README.md
+++ b/README.md
@@ -1428,6 +1428,13 @@
 
   - [Annotated ECMAScript 5.1](http://es5.github.com/)
 
+**Tools**
+
+  - [JSHint](http://www.jshint.com/)
+    + [Airbnb Style .jshintrc](https://github.com/airbnb/javascript/blob/master/linters/jshintrc)
+  - [JSCS](https://github.com/jscs-dev/node-jscs) - a code style checker
+    + [Airbnb Style Preset](https://github.com/jscs-dev/node-jscs/blob/master/presets/airbnb.json)
+
 **Other Styleguides**
 
   - [Google JavaScript Style Guide](http://google-styleguide.googlecode.com/svn/trunk/javascriptguide.xml)

From e0917c80230afc7e13ed94923e89380c465303a3 Mon Sep 17 00:00:00 2001
From: Harrison Shoff <hi@hshoff.com>
Date: Fri, 19 Sep 2014 11:52:54 -0700
Subject: [PATCH 0109/1591] [resources] add clarity to new tools section

---
 README.md | 7 +++----
 1 file changed, 3 insertions(+), 4 deletions(-)

diff --git a/README.md b/README.md
index ba3d5392bc..0063edd60c 100644
--- a/README.md
+++ b/README.md
@@ -1430,10 +1430,9 @@
 
 **Tools**
 
-  - [JSHint](http://www.jshint.com/)
-    + [Airbnb Style .jshintrc](https://github.com/airbnb/javascript/blob/master/linters/jshintrc)
-  - [JSCS](https://github.com/jscs-dev/node-jscs) - a code style checker
-    + [Airbnb Style Preset](https://github.com/jscs-dev/node-jscs/blob/master/presets/airbnb.json)
+  - Code Style Linters
+    + [JSHint](http://www.jshint.com/) - [Airbnb Style .jshintrc](https://github.com/airbnb/javascript/blob/master/linters/jshintrc)
+    + [JSCS](https://github.com/jscs-dev/node-jscs) - [Airbnb Style Preset](https://github.com/jscs-dev/node-jscs/blob/master/presets/airbnb.json)
 
 **Other Styleguides**
 

From cdb49a3478ee102cbb42404fdc28e314c4a2d924 Mon Sep 17 00:00:00 2001
From: Alexander Jeng <alexanderjeng@gmail.com>
Date: Sun, 21 Sep 2014 21:31:18 -0700
Subject: [PATCH 0110/1591] Added author for JSBooks

---
 README.md | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/README.md b/README.md
index 0063edd60c..2ddaa34afd 100644
--- a/README.md
+++ b/README.md
@@ -1467,7 +1467,7 @@
   - [Secrets of the JavaScript Ninja](http://www.amazon.com/Secrets-JavaScript-Ninja-John-Resig/dp/193398869X) - John Resig and Bear Bibeault
   - [Human JavaScript](http://humanjavascript.com/) - Henrik Joreteg
   - [Superhero.js](http://superherojs.com/) - Kim Joar Bekkelund, Mads Mobæk, & Olav Bjorkoy
-  - [JSBooks](http://jsbooks.revolunet.com/)
+  - [JSBooks](http://jsbooks.revolunet.com/) - Julien Bouquillon
   - [Third Party JavaScript](http://manning.com/vinegar/) - Ben Vinegar and Anton Kovalyov
 
 **Blogs**

From 6161375094a994236e3a6066c8db7aab979bc22c Mon Sep 17 00:00:00 2001
From: Jose Joaquin Merino <jomerinog@gmail.com>
Date: Mon, 22 Sep 2014 12:35:31 -0700
Subject: [PATCH 0111/1591] Added author in: Other Styles

JeongHoon Byun (https://github.com/outsideris) created the website that this repo links to.
---
 README.md | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/README.md b/README.md
index 2ddaa34afd..1808a02629 100644
--- a/README.md
+++ b/README.md
@@ -1444,7 +1444,7 @@
 
   - [Naming this in nested functions](https://gist.github.com/4135065) - Christian Johansen
   - [Conditional Callbacks](https://github.com/airbnb/javascript/issues/52)
-  - [Popular JavaScript Coding Conventions on Github](http://sideeffect.kr/popularconvention/#javascript)
+  - [Popular JavaScript Coding Conventions on Github](http://sideeffect.kr/popularconvention/#javascript) - JeongHoon Byun
   - [Multiple var statements in JavaScript, not superfluous](http://benalman.com/news/2012/05/multiple-var-statements-javascript/) - Ben Alman
 
 **Further Reading**

From aaf2f2e24b13372f492b90790b5e39fd711cad71 Mon Sep 17 00:00:00 2001
From: Andrew Teich <andrewteich@me.com>
Date: Mon, 22 Sep 2014 17:36:28 -0700
Subject: [PATCH 0112/1591] Added author to Conditional Callbacks

On Line 1446, gave credit to Ross Allen who wrote Conditional Callbacks
---
 README.md | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/README.md b/README.md
index 1808a02629..6598ed69c4 100644
--- a/README.md
+++ b/README.md
@@ -1443,7 +1443,7 @@
 **Other Styles**
 
   - [Naming this in nested functions](https://gist.github.com/4135065) - Christian Johansen
-  - [Conditional Callbacks](https://github.com/airbnb/javascript/issues/52)
+  - [Conditional Callbacks](https://github.com/airbnb/javascript/issues/52) - Ross Allen
   - [Popular JavaScript Coding Conventions on Github](http://sideeffect.kr/popularconvention/#javascript) - JeongHoon Byun
   - [Multiple var statements in JavaScript, not superfluous](http://benalman.com/news/2012/05/multiple-var-statements-javascript/) - Ben Alman
 

From a02795efdae6b3dc76eb616a61e3188e487203be Mon Sep 17 00:00:00 2001
From: Francesc Puig <francesc.puig@gmail.com>
Date: Thu, 2 Oct 2014 16:40:30 +0200
Subject: [PATCH 0113/1591] Catalan: added new translation

Update the translations section with a new translation that is in development.
---
 README.md | 1 +
 1 file changed, 1 insertion(+)

diff --git a/README.md b/README.md
index 6598ed69c4..b2669f47c7 100644
--- a/README.md
+++ b/README.md
@@ -1539,6 +1539,7 @@
   - :fr: **French**: [nmussy/javascript-style-guide](https://github.com/nmussy/javascript-style-guide)
   - :ru: **Russian**: [uprock/javascript](https://github.com/uprock/javascript)
   - :bg: **Bulgarian**: [borislavvv/javascript](https://github.com/borislavvv/javascript)
+  - ![ScreenShot](https://raw.githubusercontent.com/fpmweb/javascript-style-guide/master/img/catala.png) **Catalan**: [fpmweb/javascript-style-guide](https://github.com/fpmweb/javascript-style-guide)
 
 ## The JavaScript Style Guide Guide
 

From 6cbf79a6e7432ee1b089a4299a58ddc695134176 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Sebastian=20Ro=CC=88nnlund?= <sebastian.ronnlund@accedo.tv>
Date: Mon, 27 Oct 2014 21:27:07 +0100
Subject: [PATCH 0114/1591] Added missing semicolon.

---
 README.md | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/README.md b/README.md
index b2669f47c7..062d57c238 100644
--- a/README.md
+++ b/README.md
@@ -1223,7 +1223,7 @@
 
     var luke = new Jedi();
     luke.jump(); // => true
-    luke.setHeight(20) // => undefined
+    luke.setHeight(20); // => undefined
 
     // good
     Jedi.prototype.jump = function() {

From 21a44a7627c266f35f6d2a7f8b8ba1504987b0f9 Mon Sep 17 00:00:00 2001
From: Harrison Shoff <hi@hshoff.com>
Date: Wed, 29 Oct 2014 00:15:03 -0700
Subject: [PATCH 0115/1591] [in the wild] add Target

---
 README.md | 1 +
 1 file changed, 1 insertion(+)

diff --git a/README.md b/README.md
index 062d57c238..2212fb6386 100644
--- a/README.md
+++ b/README.md
@@ -1520,6 +1520,7 @@
   - **Ripple**: [ripple/javascript-style-guide](https://github.com/ripple/javascript-style-guide)
   - **SeekingAlpha**: [seekingalpha/javascript-style-guide](https://github.com/seekingalpha/javascript-style-guide)
   - **Shutterfly**: [shutterfly/javascript](https://github.com/shutterfly/javascript)
+  - **Target**: [target/javascript](https://github.com/target/javascript)
   - **TheLadders**: [TheLadders/javascript](https://github.com/TheLadders/javascript)
   - **Userify**: [userify/javascript](https://github.com/userify/javascript)
   - **VoxFeed**: [VoxFeed/javascript-style-guide](https://github.com/VoxFeed/javascript-style-guide)

From ef4420bfa00f0f228d7da65f78097f3cda414620 Mon Sep 17 00:00:00 2001
From: Harrison Shoff <hi@hshoff.com>
Date: Wed, 29 Oct 2014 00:17:44 -0700
Subject: [PATCH 0116/1591] [in the wild] add InfoJobs. fixes #203

---
 README.md | 1 +
 1 file changed, 1 insertion(+)

diff --git a/README.md b/README.md
index 2212fb6386..fa47974833 100644
--- a/README.md
+++ b/README.md
@@ -1504,6 +1504,7 @@
   - **GoodData**: [gooddata/gdc-js-style](https://github.com/gooddata/gdc-js-style)
   - **Grooveshark**: [grooveshark/javascript](https://github.com/grooveshark/javascript)
   - **How About We**: [howaboutwe/javascript](https://github.com/howaboutwe/javascript)
+  - **InfoJobs**: [InfoJobs/JavaScript-Style-Guide](https://github.com/InfoJobs/JavaScript-Style-Guide)
   - **Intent Media**: [intentmedia/javascript](https://github.com/intentmedia/javascript)
   - **Mighty Spring**: [mightyspring/javascript](https://github.com/mightyspring/javascript)
   - **MinnPost**: [MinnPost/javascript](https://github.com/MinnPost/javascript)

From d4f266878461ad39c90c731649a5a10b46a53404 Mon Sep 17 00:00:00 2001
From: Joseandro Luiz <joseandro@users.noreply.github.com>
Date: Mon, 3 Nov 2014 14:13:53 +0100
Subject: [PATCH 0117/1591] Included Weggo as one of the style guide users

---
 README.md | 1 +
 1 file changed, 1 insertion(+)

diff --git a/README.md b/README.md
index fa47974833..6886e4f079 100644
--- a/README.md
+++ b/README.md
@@ -1525,6 +1525,7 @@
   - **TheLadders**: [TheLadders/javascript](https://github.com/TheLadders/javascript)
   - **Userify**: [userify/javascript](https://github.com/userify/javascript)
   - **VoxFeed**: [VoxFeed/javascript-style-guide](https://github.com/VoxFeed/javascript-style-guide)
+  - **Weggo**: [Weggo/javascript](https://github.com/Weggo/javascript)
   - **Zillow**: [zillow/javascript](https://github.com/zillow/javascript)
   - **ZocDoc**: [ZocDoc/javascript](https://github.com/ZocDoc/javascript)
 

From 0baa1054ed9528dc626ec8e91de998ed21b22347 Mon Sep 17 00:00:00 2001
From: Harrison Shoff <hi@hshoff.com>
Date: Wed, 12 Nov 2014 16:56:56 +0000
Subject: [PATCH 0118/1591] [chat] add link to gitter, come chat with us about
 js

---
 README.md | 5 +++++
 1 file changed, 5 insertions(+)

diff --git a/README.md b/README.md
index 6886e4f079..17f5e5df07 100644
--- a/README.md
+++ b/README.md
@@ -33,6 +33,7 @@
   1. [In the Wild](#in-the-wild)
   1. [Translation](#translation)
   1. [The JavaScript Style Guide Guide](#the-javascript-style-guide-guide)
+  1. [Chat With Us About Javascript](#chat-with-us-about-javascript)
   1. [Contributors](#contributors)
   1. [License](#license)
 
@@ -1548,6 +1549,10 @@
 
   - [Reference](https://github.com/airbnb/javascript/wiki/The-JavaScript-Style-Guide-Guide)
 
+## Chat With Us About JavaScript
+
+  - Find us on [gitter](https://gitter.im/airbnb/javascript).
+
 ## Contributors
 
   - [View Contributors](https://github.com/airbnb/javascript/graphs/contributors)

From d14b219b8a001974b1edbaacbdc77fc7f1da5f96 Mon Sep 17 00:00:00 2001
From: Harrison Shoff <hi@hshoff.com>
Date: Wed, 12 Nov 2014 17:03:37 +0000
Subject: [PATCH 0119/1591] [chat] add gitter badge

---
 README.md | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/README.md b/README.md
index 17f5e5df07..7ea727b09e 100644
--- a/README.md
+++ b/README.md
@@ -1551,6 +1551,8 @@
 
 ## Chat With Us About JavaScript
 
+  [![Gitter](https://badges.gitter.im/Join Chat.svg)](https://gitter.im/airbnb/javascript?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge)
+
   - Find us on [gitter](https://gitter.im/airbnb/javascript).
 
 ## Contributors

From 058e9adce3e8b720781b99faa4c7ba2f15911fff Mon Sep 17 00:00:00 2001
From: Maciej Jurczyk <mjurczyk@libertyglobal.com>
Date: Sat, 15 Nov 2014 00:33:44 +0100
Subject: [PATCH 0120/1591] Added a link to the translated tutorial

---
 README.md | 1 +
 1 file changed, 1 insertion(+)

diff --git a/README.md b/README.md
index 7ea727b09e..24980c8e72 100644
--- a/README.md
+++ b/README.md
@@ -1544,6 +1544,7 @@
   - :ru: **Russian**: [uprock/javascript](https://github.com/uprock/javascript)
   - :bg: **Bulgarian**: [borislavvv/javascript](https://github.com/borislavvv/javascript)
   - ![ScreenShot](https://raw.githubusercontent.com/fpmweb/javascript-style-guide/master/img/catala.png) **Catalan**: [fpmweb/javascript-style-guide](https://github.com/fpmweb/javascript-style-guide)
+  - :pl: **Polish**: [mjurczyk/javascript](https://github.com/mjurczyk/javascript)
 
 ## The JavaScript Style Guide Guide
 

From da9103f11bc9143ff58bc65957bca45e255bad02 Mon Sep 17 00:00:00 2001
From: Maciej Jurczyk <mjurczyk@libertyglobal.com>
Date: Sat, 15 Nov 2014 00:41:53 +0100
Subject: [PATCH 0121/1591] Fixed flag icon

---
 README.md | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/README.md b/README.md
index 24980c8e72..3be49fc990 100644
--- a/README.md
+++ b/README.md
@@ -1544,7 +1544,7 @@
   - :ru: **Russian**: [uprock/javascript](https://github.com/uprock/javascript)
   - :bg: **Bulgarian**: [borislavvv/javascript](https://github.com/borislavvv/javascript)
   - ![ScreenShot](https://raw.githubusercontent.com/fpmweb/javascript-style-guide/master/img/catala.png) **Catalan**: [fpmweb/javascript-style-guide](https://github.com/fpmweb/javascript-style-guide)
-  - :pl: **Polish**: [mjurczyk/javascript](https://github.com/mjurczyk/javascript)
+  - ![ScreenShot](https://raw.githubusercontent.com/gosquared/flags/master/src/flags/Poland/16.png) **Polish**: [mjurczyk/javascript](https://github.com/mjurczyk/javascript)
 
 ## The JavaScript Style Guide Guide
 

From 2522afab5d939aabec131744d2a821b8677e76a6 Mon Sep 17 00:00:00 2001
From: Maciej Jurczyk <mjurczyk@libertyglobal.com>
Date: Sat, 15 Nov 2014 00:43:30 +0100
Subject: [PATCH 0122/1591] Also fixed Bulgarian flag icon

---
 README.md | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/README.md b/README.md
index 3be49fc990..e0e1e9ef8c 100644
--- a/README.md
+++ b/README.md
@@ -1542,7 +1542,7 @@
   - :kr: **Korean**: [tipjs/javascript-style-guide](https://github.com/tipjs/javascript-style-guide)
   - :fr: **French**: [nmussy/javascript-style-guide](https://github.com/nmussy/javascript-style-guide)
   - :ru: **Russian**: [uprock/javascript](https://github.com/uprock/javascript)
-  - :bg: **Bulgarian**: [borislavvv/javascript](https://github.com/borislavvv/javascript)
+  - ![ScreenShot](https://raw.githubusercontent.com/gosquared/flags/master/src/flags/Bulgaria/16.png) **Bulgarian**: [borislavvv/javascript](https://github.com/borislavvv/javascript)
   - ![ScreenShot](https://raw.githubusercontent.com/fpmweb/javascript-style-guide/master/img/catala.png) **Catalan**: [fpmweb/javascript-style-guide](https://github.com/fpmweb/javascript-style-guide)
   - ![ScreenShot](https://raw.githubusercontent.com/gosquared/flags/master/src/flags/Poland/16.png) **Polish**: [mjurczyk/javascript](https://github.com/mjurczyk/javascript)
 

From 90f3dc357fb5a7ccd6eb56dfe9f3e6d7044c24c5 Mon Sep 17 00:00:00 2001
From: Maciej Jurczyk <mjurczyk@libertyglobal.com>
Date: Sat, 15 Nov 2014 00:45:20 +0100
Subject: [PATCH 0123/1591] Also the flag of the Portugal was missing

---
 README.md | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/README.md b/README.md
index e0e1e9ef8c..12c0da97d8 100644
--- a/README.md
+++ b/README.md
@@ -1536,7 +1536,7 @@
 
   - :de: **German**: [timofurrer/javascript-style-guide](https://github.com/timofurrer/javascript-style-guide)
   - :jp: **Japanese**: [mitsuruog/javacript-style-guide](https://github.com/mitsuruog/javacript-style-guide)
-  - :br: **Portuguese**: [armoucar/javascript-style-guide](https://github.com/armoucar/javascript-style-guide)
+  - ![ScreenShot](https://raw.githubusercontent.com/gosquared/flags/master/src/flags/Portugal/16.png) **Portuguese**: [armoucar/javascript-style-guide](https://github.com/armoucar/javascript-style-guide)
   - :cn: **Chinese**: [adamlu/javascript-style-guide](https://github.com/adamlu/javascript-style-guide)
   - :es: **Spanish**: [paolocarrasco/javascript-style-guide](https://github.com/paolocarrasco/javascript-style-guide)
   - :kr: **Korean**: [tipjs/javascript-style-guide](https://github.com/tipjs/javascript-style-guide)

From 4b24cc1c254dfada973d5d718082ef8a33e7a68d Mon Sep 17 00:00:00 2001
From: Harrison Shoff <hi@hshoff.com>
Date: Sun, 16 Nov 2014 19:59:48 -0800
Subject: [PATCH 0124/1591] [translations] use gosquared flags for consistency

---
 README.md | 22 +++++++++++-----------
 1 file changed, 11 insertions(+), 11 deletions(-)

diff --git a/README.md b/README.md
index 12c0da97d8..684697e64e 100644
--- a/README.md
+++ b/README.md
@@ -1534,17 +1534,17 @@
 
   This style guide is also available in other languages:
 
-  - :de: **German**: [timofurrer/javascript-style-guide](https://github.com/timofurrer/javascript-style-guide)
-  - :jp: **Japanese**: [mitsuruog/javacript-style-guide](https://github.com/mitsuruog/javacript-style-guide)
-  - ![ScreenShot](https://raw.githubusercontent.com/gosquared/flags/master/src/flags/Portugal/16.png) **Portuguese**: [armoucar/javascript-style-guide](https://github.com/armoucar/javascript-style-guide)
-  - :cn: **Chinese**: [adamlu/javascript-style-guide](https://github.com/adamlu/javascript-style-guide)
-  - :es: **Spanish**: [paolocarrasco/javascript-style-guide](https://github.com/paolocarrasco/javascript-style-guide)
-  - :kr: **Korean**: [tipjs/javascript-style-guide](https://github.com/tipjs/javascript-style-guide)
-  - :fr: **French**: [nmussy/javascript-style-guide](https://github.com/nmussy/javascript-style-guide)
-  - :ru: **Russian**: [uprock/javascript](https://github.com/uprock/javascript)
-  - ![ScreenShot](https://raw.githubusercontent.com/gosquared/flags/master/src/flags/Bulgaria/16.png) **Bulgarian**: [borislavvv/javascript](https://github.com/borislavvv/javascript)
-  - ![ScreenShot](https://raw.githubusercontent.com/fpmweb/javascript-style-guide/master/img/catala.png) **Catalan**: [fpmweb/javascript-style-guide](https://github.com/fpmweb/javascript-style-guide)
-  - ![ScreenShot](https://raw.githubusercontent.com/gosquared/flags/master/src/flags/Poland/16.png) **Polish**: [mjurczyk/javascript](https://github.com/mjurczyk/javascript)
+  - ![de](https://raw.githubusercontent.com/gosquared/flags/master/src/flags/Germany/16.png) **German**: [timofurrer/javascript-style-guide](https://github.com/timofurrer/javascript-style-guide)
+  - ![jp](https://raw.githubusercontent.com/gosquared/flags/master/src/flags/Japan/16.png) **Japanese**: [mitsuruog/javacript-style-guide](https://github.com/mitsuruog/javacript-style-guide)
+  - ![br](https://raw.githubusercontent.com/gosquared/flags/master/src/flags/Portugal/16.png) **Portuguese**: [armoucar/javascript-style-guide](https://github.com/armoucar/javascript-style-guide)
+  - ![cn](https://raw.githubusercontent.com/gosquared/flags/master/src/flags/China/16.png) **Chinese**: [adamlu/javascript-style-guide](https://github.com/adamlu/javascript-style-guide)
+  - ![es](https://raw.githubusercontent.com/gosquared/flags/master/src/flags/Spain/16.png) **Spanish**: [paolocarrasco/javascript-style-guide](https://github.com/paolocarrasco/javascript-style-guide)
+  - ![kr](https://raw.githubusercontent.com/gosquared/flags/master/src/flags/South-Korea/16.png) **Korean**: [tipjs/javascript-style-guide](https://github.com/tipjs/javascript-style-guide)
+  - ![fr](https://raw.githubusercontent.com/gosquared/flags/master/src/flags/France/16.png) **French**: [nmussy/javascript-style-guide](https://github.com/nmussy/javascript-style-guide)
+  - ![ru](https://raw.githubusercontent.com/gosquared/flags/master/src/flags/Russia/16.png) **Russian**: [uprock/javascript](https://github.com/uprock/javascript)
+  - ![bg](https://raw.githubusercontent.com/gosquared/flags/master/src/flags/Bulgaria/16.png) **Bulgarian**: [borislavvv/javascript](https://github.com/borislavvv/javascript)
+  - ![ca](https://raw.githubusercontent.com/fpmweb/javascript-style-guide/master/img/catala.png) **Catalan**: [fpmweb/javascript-style-guide](https://github.com/fpmweb/javascript-style-guide)
+  - ![pl](https://raw.githubusercontent.com/gosquared/flags/master/src/flags/Poland/16.png) **Polish**: [mjurczyk/javascript](https://github.com/mjurczyk/javascript)
 
 ## The JavaScript Style Guide Guide
 

From b2357ce19aaafa551eae21cbee0837c04d017cc5 Mon Sep 17 00:00:00 2001
From: Harrison Shoff <hi@hshoff.com>
Date: Sun, 16 Nov 2014 20:05:13 -0800
Subject: [PATCH 0125/1591] [translations] use bigger, shinier flags

---
 README.md | 20 ++++++++++----------
 1 file changed, 10 insertions(+), 10 deletions(-)

diff --git a/README.md b/README.md
index 684697e64e..0257d88dd9 100644
--- a/README.md
+++ b/README.md
@@ -1534,17 +1534,17 @@
 
   This style guide is also available in other languages:
 
-  - ![de](https://raw.githubusercontent.com/gosquared/flags/master/src/flags/Germany/16.png) **German**: [timofurrer/javascript-style-guide](https://github.com/timofurrer/javascript-style-guide)
-  - ![jp](https://raw.githubusercontent.com/gosquared/flags/master/src/flags/Japan/16.png) **Japanese**: [mitsuruog/javacript-style-guide](https://github.com/mitsuruog/javacript-style-guide)
-  - ![br](https://raw.githubusercontent.com/gosquared/flags/master/src/flags/Portugal/16.png) **Portuguese**: [armoucar/javascript-style-guide](https://github.com/armoucar/javascript-style-guide)
-  - ![cn](https://raw.githubusercontent.com/gosquared/flags/master/src/flags/China/16.png) **Chinese**: [adamlu/javascript-style-guide](https://github.com/adamlu/javascript-style-guide)
-  - ![es](https://raw.githubusercontent.com/gosquared/flags/master/src/flags/Spain/16.png) **Spanish**: [paolocarrasco/javascript-style-guide](https://github.com/paolocarrasco/javascript-style-guide)
-  - ![kr](https://raw.githubusercontent.com/gosquared/flags/master/src/flags/South-Korea/16.png) **Korean**: [tipjs/javascript-style-guide](https://github.com/tipjs/javascript-style-guide)
-  - ![fr](https://raw.githubusercontent.com/gosquared/flags/master/src/flags/France/16.png) **French**: [nmussy/javascript-style-guide](https://github.com/nmussy/javascript-style-guide)
-  - ![ru](https://raw.githubusercontent.com/gosquared/flags/master/src/flags/Russia/16.png) **Russian**: [uprock/javascript](https://github.com/uprock/javascript)
-  - ![bg](https://raw.githubusercontent.com/gosquared/flags/master/src/flags/Bulgaria/16.png) **Bulgarian**: [borislavvv/javascript](https://github.com/borislavvv/javascript)
+  - ![de](https://raw.githubusercontent.com/gosquared/flags/master/flags/flags/shiny/24/Germany.png) **German**: [timofurrer/javascript-style-guide](https://github.com/timofurrer/javascript-style-guide)
+  - ![jp](https://raw.githubusercontent.com/gosquared/flags/master/flags/flags/shiny/24/Japan.png) **Japanese**: [mitsuruog/javacript-style-guide](https://github.com/mitsuruog/javacript-style-guide)
+  - ![br](https://raw.githubusercontent.com/gosquared/flags/master/flags/flags/shiny/24/Portugal.png) **Portuguese**: [armoucar/javascript-style-guide](https://github.com/armoucar/javascript-style-guide)
+  - ![cn](https://raw.githubusercontent.com/gosquared/flags/master/flags/flags/shiny/24/China.png) **Chinese**: [adamlu/javascript-style-guide](https://github.com/adamlu/javascript-style-guide)
+  - ![es](https://raw.githubusercontent.com/gosquared/flags/master/flags/flags/shiny/24/Spain.png) **Spanish**: [paolocarrasco/javascript-style-guide](https://github.com/paolocarrasco/javascript-style-guide)
+  - ![kr](https://raw.githubusercontent.com/gosquared/flags/master/flags/flags/shiny/24/South-Korea.png) **Korean**: [tipjs/javascript-style-guide](https://github.com/tipjs/javascript-style-guide)
+  - ![fr](https://raw.githubusercontent.com/gosquared/flags/master/flags/flags/shiny/24/France.png) **French**: [nmussy/javascript-style-guide](https://github.com/nmussy/javascript-style-guide)
+  - ![ru](https://raw.githubusercontent.com/gosquared/flags/master/flags/flags/shiny/24/Russia.png) **Russian**: [uprock/javascript](https://github.com/uprock/javascript)
+  - ![bg](https://raw.githubusercontent.com/gosquared/flags/master/flags/flags/shiny/24/Bulgaria.png) **Bulgarian**: [borislavvv/javascript](https://github.com/borislavvv/javascript)
   - ![ca](https://raw.githubusercontent.com/fpmweb/javascript-style-guide/master/img/catala.png) **Catalan**: [fpmweb/javascript-style-guide](https://github.com/fpmweb/javascript-style-guide)
-  - ![pl](https://raw.githubusercontent.com/gosquared/flags/master/src/flags/Poland/16.png) **Polish**: [mjurczyk/javascript](https://github.com/mjurczyk/javascript)
+  - ![pl](https://raw.githubusercontent.com/gosquared/flags/master/flags/flags/shiny/24/Poland.png) **Polish**: [mjurczyk/javascript](https://github.com/mjurczyk/javascript)
 
 ## The JavaScript Style Guide Guide
 

From a224d0a15624bd1ecdc55db14743d5da597fabf4 Mon Sep 17 00:00:00 2001
From: Harrison Shoff <hi@hshoff.com>
Date: Sun, 16 Nov 2014 20:06:19 -0800
Subject: [PATCH 0126/1591] [chat] add gitter badge

---
 README.md | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/README.md b/README.md
index 0257d88dd9..9a9cd3fd22 100644
--- a/README.md
+++ b/README.md
@@ -1,3 +1,5 @@
+[![Gitter](https://badges.gitter.im/Join Chat.svg)](https://gitter.im/airbnb/javascript?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge)
+
 # Airbnb JavaScript Style Guide() {
 
 *A mostly reasonable approach to JavaScript*
@@ -1552,8 +1554,6 @@
 
 ## Chat With Us About JavaScript
 
-  [![Gitter](https://badges.gitter.im/Join Chat.svg)](https://gitter.im/airbnb/javascript?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge)
-
   - Find us on [gitter](https://gitter.im/airbnb/javascript).
 
 ## Contributors

From 7f393a4120c29abb427785d62de2a37088a3d0ca Mon Sep 17 00:00:00 2001
From: Allan Bettarel <allan.bettarel@supinfo.com>
Date: Wed, 26 Nov 2014 12:29:20 -0500
Subject: [PATCH 0127/1591] Update README.md

Add StudentSphere in the list
---
 README.md | 1 +
 1 file changed, 1 insertion(+)

diff --git a/README.md b/README.md
index 9a9cd3fd22..1053c08ffe 100644
--- a/README.md
+++ b/README.md
@@ -1524,6 +1524,7 @@
   - **Ripple**: [ripple/javascript-style-guide](https://github.com/ripple/javascript-style-guide)
   - **SeekingAlpha**: [seekingalpha/javascript-style-guide](https://github.com/seekingalpha/javascript-style-guide)
   - **Shutterfly**: [shutterfly/javascript](https://github.com/shutterfly/javascript)
+  - **StudentSphere**: [studentsphere/javascript](https://github.com/studentsphere/javascript)
   - **Target**: [target/javascript](https://github.com/target/javascript)
   - **TheLadders**: [TheLadders/javascript](https://github.com/TheLadders/javascript)
   - **Userify**: [userify/javascript](https://github.com/userify/javascript)

From 8d51bd504b3d64e551f28a2b5bfbd98f1605f131 Mon Sep 17 00:00:00 2001
From: Jake Teton-Landis <jake.tl@airbnb.com>
Date: Mon, 1 Dec 2014 14:20:22 -0800
Subject: [PATCH 0128/1591] Switch from single var to one-var-per-variable

Frontenders at Airbnb at have been discussing this change for a bit, and
we've come to favor one-var-per-variable over one-var-only declarations.
Two things improve the maintainability of this style over one var for
multiple variables:

 1. You never have a diff of a line that's removing a `;` and inserting
    a `,`.
 2. You can't accidentally declare global variables because you have a
    one-character mistake (semicolon instead of comma):

    ```javascript
    var foo = 1,
        bar = 2;
        baz = 3; // added later and (accidentally) declared globally
    ```
---
 README.md | 72 +++++++++++++++++++++++++++++++++----------------------
 1 file changed, 44 insertions(+), 28 deletions(-)

diff --git a/README.md b/README.md
index 1053c08ffe..6a0de972c1 100644
--- a/README.md
+++ b/README.md
@@ -50,8 +50,8 @@
     + `undefined`
 
     ```javascript
-    var foo = 1,
-        bar = foo;
+    var foo = 1;
+    var bar = foo;
 
     bar = 9;
 
@@ -64,8 +64,8 @@
     + `function`
 
     ```javascript
-    var foo = [1, 2],
-        bar = foo;
+    var foo = [1, 2];
+    var bar = foo;
 
     bar[0] = 9;
 
@@ -151,9 +151,9 @@
   - When you need to copy an array use Array#slice. [jsPerf](http://jsperf.com/converting-arguments-to-an-array/7)
 
     ```javascript
-    var len = items.length,
-        itemsCopy = [],
-        i;
+    var len = items.length;
+    var itemsCopy = [];
+    var i;
 
     // bad
     for (i = 0; i < len; i++) {
@@ -216,10 +216,10 @@
   - When programmatically building up a string, use Array#join instead of string concatenation. Mostly for IE: [jsPerf](http://jsperf.com/string-vs-array-concat/2).
 
     ```javascript
-    var items,
-        messages,
-        length,
-        i;
+    var items;
+    var messages;
+    var length;
+    var i;
 
     messages = [{
       state: 'success',
@@ -366,17 +366,28 @@
     var superPower = new SuperPower();
     ```
 
-  - Use one `var` declaration for multiple variables and declare each variable on a newline.
+  - Use one `var` declaration per variable.
 
     ```javascript
     // bad
+    var items = getItems(),
+        goSportsTeam = true,
+        dragonball = 'z';
+
+    // good
     var items = getItems();
     var goSportsTeam = true;
     var dragonball = 'z';
+    ```
 
-    // good
+    It's easier to add new variable declarations this way, and you never have
+    to worry about swapping out a `;` for a `,` or introducing punctuation-only
+    diffs. Also, you can't make the following mistake:
+
+    ```javascript
+    // can you catch the error?
     var items = getItems(),
-        goSportsTeam = true,
+        goSportsTeam = true;
         dragonball = 'z';
     ```
 
@@ -389,17 +400,18 @@
         goSportsTeam = true;
 
     // bad
-    var i, items = getItems(),
-        dragonball,
-        goSportsTeam = true,
-        len;
+    var i;
+    var items = getItems();
+    var dragonball;
+    var goSportsTeam = true;
+    var len;
 
     // good
-    var items = getItems(),
-        goSportsTeam = true,
-        dragonball,
-        length,
-        i;
+    var items = getItems();
+    var goSportsTeam = true;
+    var dragonball;
+    var length;
+    var i;
     ```
 
   - Assign variables at the top of their scope. This helps avoid issues with variable declaration and assignment hoisting related issues.
@@ -843,14 +855,18 @@
 
     ```javascript
     // bad
-    var once
+    var story = [
+        once
       , upon
-      , aTime;
+      , aTime
+    ];
 
     // good
-    var once,
-        upon,
-        aTime;
+    var story = [
+      once,
+      upon,
+      aTime
+    ];
 
     // bad
     var hero = {

From b61d52ca41450c5f661bd96265b3c8e063c0961c Mon Sep 17 00:00:00 2001
From: Jake Teton-Landis <jake.tl@airbnb.com>
Date: Mon, 1 Dec 2014 14:28:20 -0800
Subject: [PATCH 0129/1591] use JSDoc/Closure Compiler style type annotations

---
 README.md | 8 ++++----
 1 file changed, 4 insertions(+), 4 deletions(-)

diff --git a/README.md b/README.md
index 6a0de972c1..21947075b4 100644
--- a/README.md
+++ b/README.md
@@ -651,8 +651,8 @@
     // make() returns a new element
     // based on the passed in tag name
     //
-    // @param <String> tag
-    // @return <Element> element
+    // @param {String} tag
+    // @return {Element} element
     function make(tag) {
 
       // ...stuff...
@@ -665,8 +665,8 @@
      * make() returns a new element
      * based on the passed in tag name
      *
-     * @param <String> tag
-     * @return <Element> element
+     * @param {String} tag
+     * @return {Element} element
      */
     function make(tag) {
 

From 3c68fc494632bfb28b470f63af94cf8b9a11acf1 Mon Sep 17 00:00:00 2001
From: Jake Teton-Landis <jake.tl@airbnb.com>
Date: Wed, 3 Dec 2014 17:41:15 -0800
Subject: [PATCH 0130/1591] Reformat var change

---
 README.md | 20 +++++++++-----------
 1 file changed, 9 insertions(+), 11 deletions(-)

diff --git a/README.md b/README.md
index 21947075b4..6e7c6f1bc8 100644
--- a/README.md
+++ b/README.md
@@ -367,6 +367,9 @@
     ```
 
   - Use one `var` declaration per variable.
+    It's easier to add new variable declarations this way, and you never have
+    to worry about swapping out a `;` for a `,` or introducing punctuation-only
+    diffs. 
 
     ```javascript
     // bad
@@ -374,23 +377,18 @@
         goSportsTeam = true,
         dragonball = 'z';
 
+    // bad
+    // (compare to above, and try to spot the mistake)
+    var items = getItems(),
+        goSportsTeam = true;
+        dragonball = 'z';
+
     // good
     var items = getItems();
     var goSportsTeam = true;
     var dragonball = 'z';
     ```
 
-    It's easier to add new variable declarations this way, and you never have
-    to worry about swapping out a `;` for a `,` or introducing punctuation-only
-    diffs. Also, you can't make the following mistake:
-
-    ```javascript
-    // can you catch the error?
-    var items = getItems(),
-        goSportsTeam = true;
-        dragonball = 'z';
-    ```
-
   - Declare unassigned variables last. This is helpful when later on you might need to assign a variable depending on one of the previous assigned variables.
 
     ```javascript

From 7ab3b294632ff6bc35bbe2602ba298937ef10dfc Mon Sep 17 00:00:00 2001
From: Gabriel Pedro <gpedro@users.noreply.github.com>
Date: Mon, 15 Dec 2014 15:36:12 -0300
Subject: [PATCH 0131/1591] Brazilian Portuguese Flag

---
 README.md | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/README.md b/README.md
index 6e7c6f1bc8..0a6d79385c 100644
--- a/README.md
+++ b/README.md
@@ -1553,7 +1553,7 @@
 
   - ![de](https://raw.githubusercontent.com/gosquared/flags/master/flags/flags/shiny/24/Germany.png) **German**: [timofurrer/javascript-style-guide](https://github.com/timofurrer/javascript-style-guide)
   - ![jp](https://raw.githubusercontent.com/gosquared/flags/master/flags/flags/shiny/24/Japan.png) **Japanese**: [mitsuruog/javacript-style-guide](https://github.com/mitsuruog/javacript-style-guide)
-  - ![br](https://raw.githubusercontent.com/gosquared/flags/master/flags/flags/shiny/24/Portugal.png) **Portuguese**: [armoucar/javascript-style-guide](https://github.com/armoucar/javascript-style-guide)
+  - ![br](https://raw.githubusercontent.com/gosquared/flags/master/flags/flags/shiny/24/Brazil.png) **Brazilian Portuguese**: [armoucar/javascript-style-guide](https://github.com/armoucar/javascript-style-guide)
   - ![cn](https://raw.githubusercontent.com/gosquared/flags/master/flags/flags/shiny/24/China.png) **Chinese**: [adamlu/javascript-style-guide](https://github.com/adamlu/javascript-style-guide)
   - ![es](https://raw.githubusercontent.com/gosquared/flags/master/flags/flags/shiny/24/Spain.png) **Spanish**: [paolocarrasco/javascript-style-guide](https://github.com/paolocarrasco/javascript-style-guide)
   - ![kr](https://raw.githubusercontent.com/gosquared/flags/master/flags/flags/shiny/24/South-Korea.png) **Korean**: [tipjs/javascript-style-guide](https://github.com/tipjs/javascript-style-guide)

From b4c87b1ba9ede3ad59d36031ab3641568a0244f0 Mon Sep 17 00:00:00 2001
From: Leonardo Micheloni <leomicheloni@hotmail.com>
Date: Fri, 2 Jan 2015 15:20:27 -0300
Subject: [PATCH 0132/1591] Added Kinetica solutions to organizations list

---
 README.md | 1 +
 1 file changed, 1 insertion(+)

diff --git a/README.md b/README.md
index 0a6d79385c..a4f1d51d69 100644
--- a/README.md
+++ b/README.md
@@ -1523,6 +1523,7 @@
   - **How About We**: [howaboutwe/javascript](https://github.com/howaboutwe/javascript)
   - **InfoJobs**: [InfoJobs/JavaScript-Style-Guide](https://github.com/InfoJobs/JavaScript-Style-Guide)
   - **Intent Media**: [intentmedia/javascript](https://github.com/intentmedia/javascript)
+  - **Kinetica Solutions**: [kinetica/javascript](https://github.com/kinetica/javascript)
   - **Mighty Spring**: [mightyspring/javascript](https://github.com/mightyspring/javascript)
   - **MinnPost**: [MinnPost/javascript](https://github.com/MinnPost/javascript)
   - **ModCloth**: [modcloth/javascript](https://github.com/modcloth/javascript)

From a280e9595fa06ed0a1fd3ae3444e0da890f7bdb8 Mon Sep 17 00:00:00 2001
From: Preston Parry <ClimbsRocks@users.noreply.github.com>
Date: Wed, 21 Jan 2015 23:04:39 -0800
Subject: [PATCH 0133/1591] Punctuation tweak

---
 README.md | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/README.md b/README.md
index a4f1d51d69..c48b03bdaa 100644
--- a/README.md
+++ b/README.md
@@ -494,8 +494,8 @@
     }
 
     // The interpreter is hoisting the variable
-    // declaration to the top of the scope.
-    // Which means our example could be rewritten as:
+    // declaration to the top of the scope,
+    // which means our example could be rewritten as:
     function example() {
       var declaredButNotAssigned;
       console.log(declaredButNotAssigned); // => undefined

From 233c1db73ae24731074ecba583945036f3c7148a Mon Sep 17 00:00:00 2001
From: Preston Parry <ClimbsRocks@users.noreply.github.com>
Date: Tue, 27 Jan 2015 17:48:00 -0800
Subject: [PATCH 0134/1591] Update README.md

---
 README.md | 36 ++++++++++++++++++------------------
 1 file changed, 18 insertions(+), 18 deletions(-)

diff --git a/README.md b/README.md
index c48b03bdaa..59baac5c76 100644
--- a/README.md
+++ b/README.md
@@ -41,7 +41,7 @@
 
 ## Types
 
-  - **Primitives**: When you access a primitive type you work directly on its value
+  - **Primitives**: When you access a primitive type you work directly on its value.
 
     + `string`
     + `number`
@@ -57,7 +57,7 @@
 
     console.log(foo, bar); // => 1, 9
     ```
-  - **Complex**: When you access a complex type you work on a reference to its value
+  - **Complex**: When you access a complex type you work on a reference to its value.
 
     + `object`
     + `array`
@@ -86,7 +86,7 @@
     var item = {};
     ```
 
-  - Don't use [reserved words](http://es5.github.io/#x7.6.1) as keys. It won't work in IE8. [More info](https://github.com/airbnb/javascript/issues/61)
+  - Don't use [reserved words](http://es5.github.io/#x7.6.1) as keys. It won't work in IE8. [More info](https://github.com/airbnb/javascript/issues/61).
 
     ```javascript
     // bad
@@ -125,7 +125,7 @@
 
 ## Arrays
 
-  - Use the literal syntax for array creation
+  - Use the literal syntax for array creation.
 
     ```javascript
     // bad
@@ -178,7 +178,7 @@
 
 ## Strings
 
-  - Use single quotes `''` for strings
+  - Use single quotes `''` for strings.
 
     ```javascript
     // bad
@@ -195,7 +195,7 @@
     ```
 
   - Strings longer than 80 characters should be written across multiple lines using string concatenation.
-  - Note: If overused, long strings with concatenation could impact performance. [jsPerf](http://jsperf.com/ya-string-concat) & [Discussion](https://github.com/airbnb/javascript/issues/40)
+  - Note: If overused, long strings with concatenation could impact performance. [jsPerf](http://jsperf.com/ya-string-concat) & [Discussion](https://github.com/airbnb/javascript/issues/40).
 
     ```javascript
     // bad
@@ -557,7 +557,7 @@
     }
     ```
 
-  - For more information refer to [JavaScript Scoping & Hoisting](http://www.adequatelygood.com/2010/2/JavaScript-Scoping-and-Hoisting) by [Ben Cherry](http://www.adequatelygood.com/)
+  - For more information refer to [JavaScript Scoping & Hoisting](http://www.adequatelygood.com/2010/2/JavaScript-Scoping-and-Hoisting) by [Ben Cherry](http://www.adequatelygood.com/).
 
 **[⬆ back to top](#table-of-contents)**
 
@@ -606,7 +606,7 @@
     }
     ```
 
-  - For more information see [Truth Equality and JavaScript](http://javascriptweblog.wordpress.com/2011/02/07/truth-equality-and-javascript/#more-2108) by Angus Croll
+  - For more information see [Truth Equality and JavaScript](http://javascriptweblog.wordpress.com/2011/02/07/truth-equality-and-javascript/#more-2108) by Angus Croll.
 
 **[⬆ back to top](#table-of-contents)**
 
@@ -706,7 +706,7 @@
 
   - Prefixing your comments with `FIXME` or `TODO` helps other developers quickly understand if you're pointing out a problem that needs to be revisited, or if you're suggesting a solution to the problem that needs to be implemented. These are different than regular comments because they are actionable. The actions are `FIXME -- need to figure this out` or `TODO -- need to implement`.
 
-  - Use `// FIXME:` to annotate problems
+  - Use `// FIXME:` to annotate problems.
 
     ```javascript
     function Calculator() {
@@ -718,7 +718,7 @@
     }
     ```
 
-  - Use `// TODO:` to annotate solutions to problems
+  - Use `// TODO:` to annotate solutions to problems.
 
     ```javascript
     function Calculator() {
@@ -735,7 +735,7 @@
 
 ## Whitespace
 
-  - Use soft tabs set to 2 spaces
+  - Use soft tabs set to 2 spaces.
 
     ```javascript
     // bad
@@ -1042,7 +1042,7 @@
     }
     ```
 
-  - Use camelCase when naming objects, functions, and instances
+  - Use camelCase when naming objects, functions, and instances.
 
     ```javascript
     // bad
@@ -1061,7 +1061,7 @@
     });
     ```
 
-  - Use PascalCase when naming constructors or classes
+  - Use PascalCase when naming constructors or classes.
 
     ```javascript
     // bad
@@ -1083,7 +1083,7 @@
     });
     ```
 
-  - Use a leading underscore `_` when naming private properties
+  - Use a leading underscore `_` when naming private properties.
 
     ```javascript
     // bad
@@ -1143,8 +1143,8 @@
 
 ## Accessors
 
-  - Accessor functions for properties are not required
-  - If you do make accessor functions use getVal() and setVal('hello')
+  - Accessor functions for properties are not required.
+  - If you do make accessor functions use getVal() and setVal('hello').
 
     ```javascript
     // bad
@@ -1160,7 +1160,7 @@
     dragon.setAge(25);
     ```
 
-  - If the property is a boolean, use isVal() or hasVal()
+  - If the property is a boolean, use isVal() or hasVal().
 
     ```javascript
     // bad
@@ -1406,7 +1406,7 @@
 
 ## ECMAScript 5 Compatibility
 
-  - Refer to [Kangax](https://twitter.com/kangax/)'s ES5 [compatibility table](http://kangax.github.com/es5-compat-table/)
+  - Refer to [Kangax](https://twitter.com/kangax/)'s ES5 [compatibility table](http://kangax.github.com/es5-compat-table/).
 
 **[⬆ back to top](#table-of-contents)**
 

From 33363af613a6c8e9fa3958e7c90340e69e7db387 Mon Sep 17 00:00:00 2001
From: Jake Teton-Landis <jake.tl@airbnb.com>
Date: Thu, 22 Jan 2015 17:38:38 -0800
Subject: [PATCH 0135/1591] put the dot with fn name when chaining

---
 README.md | 11 ++++++++++-
 1 file changed, 10 insertions(+), 1 deletion(-)

diff --git a/README.md b/README.md
index 6e7c6f1bc8..aee3ef7154 100644
--- a/README.md
+++ b/README.md
@@ -814,12 +814,21 @@
     })(this);↵
     ```
 
-  - Use indentation when making long method chains.
+  - Use indentation when making long method chains. Use a leading dot, which
+    emphasizes that the line is a method call, not a new statement.
 
     ```javascript
     // bad
     $('#items').find('.selected').highlight().end().find('.open').updateCount();
 
+    // bad
+    $('#items').
+      find('selected').
+        highlight().
+        end().
+      find('.open').
+        updateCount();
+
     // good
     $('#items')
       .find('.selected')

From 384d65e472516a4e6a62da2a4d05e4d4242dce10 Mon Sep 17 00:00:00 2001
From: Davy Chiu <davychiu@gmail.com>
Date: Sat, 31 Jan 2015 23:46:58 -0500
Subject: [PATCH 0136/1591] add Apartmint to list of organizations

---
 README.md | 1 +
 1 file changed, 1 insertion(+)

diff --git a/README.md b/README.md
index bdb19ea668..d212f2198e 100644
--- a/README.md
+++ b/README.md
@@ -1519,6 +1519,7 @@
   - **Aan Zee**: [AanZee/javascript](https://github.com/AanZee/javascript)
   - **Airbnb**: [airbnb/javascript](https://github.com/airbnb/javascript)
   - **American Insitutes for Research**: [AIRAST/javascript](https://github.com/AIRAST/javascript)
+  - **Apartmint**: [apartmint/javascript](https://github.com/apartmint/javascript)
   - **Avalara**: [avalara/javascript](https://github.com/avalara/javascript)
   - **Compass Learning**: [compasslearning/javascript-style-guide](https://github.com/compasslearning/javascript-style-guide)
   - **DailyMotion**: [dailymotion/javascript](https://github.com/dailymotion/javascript)

From cedfc81848fc4eeffe1db520e655d5d3c0cea920 Mon Sep 17 00:00:00 2001
From: Jigsaw <jigsaw.ye@gmail.com>
Date: Wed, 4 Feb 2015 19:18:48 +0800
Subject: [PATCH 0137/1591] Update README.md

Add Chinese(Traditional) to Translation.
---
 README.md | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/README.md b/README.md
index d212f2198e..098d584e41 100644
--- a/README.md
+++ b/README.md
@@ -1565,7 +1565,8 @@
   - ![de](https://raw.githubusercontent.com/gosquared/flags/master/flags/flags/shiny/24/Germany.png) **German**: [timofurrer/javascript-style-guide](https://github.com/timofurrer/javascript-style-guide)
   - ![jp](https://raw.githubusercontent.com/gosquared/flags/master/flags/flags/shiny/24/Japan.png) **Japanese**: [mitsuruog/javacript-style-guide](https://github.com/mitsuruog/javacript-style-guide)
   - ![br](https://raw.githubusercontent.com/gosquared/flags/master/flags/flags/shiny/24/Brazil.png) **Brazilian Portuguese**: [armoucar/javascript-style-guide](https://github.com/armoucar/javascript-style-guide)
-  - ![cn](https://raw.githubusercontent.com/gosquared/flags/master/flags/flags/shiny/24/China.png) **Chinese**: [adamlu/javascript-style-guide](https://github.com/adamlu/javascript-style-guide)
+  - ![tw](https://raw.githubusercontent.com/gosquared/flags/master/flags/flags/shiny/24/Taiwan.png) **Chinese(Traditional)**: [jigsawye/javascript](https://github.com/jigsawye/javascript)
+  - ![cn](https://raw.githubusercontent.com/gosquared/flags/master/flags/flags/shiny/24/China.png) **Chinese(Simplified)**: [adamlu/javascript-style-guide](https://github.com/adamlu/javascript-style-guide)
   - ![es](https://raw.githubusercontent.com/gosquared/flags/master/flags/flags/shiny/24/Spain.png) **Spanish**: [paolocarrasco/javascript-style-guide](https://github.com/paolocarrasco/javascript-style-guide)
   - ![kr](https://raw.githubusercontent.com/gosquared/flags/master/flags/flags/shiny/24/South-Korea.png) **Korean**: [tipjs/javascript-style-guide](https://github.com/tipjs/javascript-style-guide)
   - ![fr](https://raw.githubusercontent.com/gosquared/flags/master/flags/flags/shiny/24/France.png) **French**: [nmussy/javascript-style-guide](https://github.com/nmussy/javascript-style-guide)

From 533e9ea7babe43e7775d79de86975bb3404e332d Mon Sep 17 00:00:00 2001
From: Eli White <github@eli-white.com>
Date: Sat, 7 Feb 2015 23:21:58 -0800
Subject: [PATCH 0138/1591] Adding comments about spacing between blocks

---
 README.md | 39 ++++++++++++++++++++++++++++++++++++++-
 1 file changed, 38 insertions(+), 1 deletion(-)

diff --git a/README.md b/README.md
index d212f2198e..ba9f9dd405 100644
--- a/README.md
+++ b/README.md
@@ -369,7 +369,7 @@
   - Use one `var` declaration per variable.
     It's easier to add new variable declarations this way, and you never have
     to worry about swapping out a `;` for a `,` or introducing punctuation-only
-    diffs. 
+    diffs.
 
     ```javascript
     // bad
@@ -854,6 +854,43 @@
         .call(tron.led);
     ```
 
+  - Leave a blank line after blocks and before the next statement
+
+    ```javascript
+    // bad
+    if (true) {
+      var a = 2;
+    }
+    var b = 3;
+
+    // good
+    if (true) {
+      var a = 2;
+    }
+    var b = 3;
+
+    // bad
+    var o = {
+      foo: function() {
+      },
+      bar: function() {
+      }
+    };
+    return o;
+
+    // good
+    var o = {
+      foo: function() {
+      },
+
+      bar: function() {
+      }
+    };
+
+    return o;
+    ```
+
+
 **[⬆ back to top](#table-of-contents)**
 
 ## Commas

From 80e698eb651f78f8d3088c6d38659eadfdb64d84 Mon Sep 17 00:00:00 2001
From: Eli White <github@eli-white.com>
Date: Sun, 8 Feb 2015 09:26:37 -0800
Subject: [PATCH 0139/1591] Using better examples

---
 README.md | 21 +++++++++++----------
 1 file changed, 11 insertions(+), 10 deletions(-)

diff --git a/README.md b/README.md
index ba9f9dd405..90e921fab4 100644
--- a/README.md
+++ b/README.md
@@ -858,28 +858,29 @@
 
     ```javascript
     // bad
-    if (true) {
-      var a = 2;
+    if (foo) {
+      return bar;
     }
-    var b = 3;
+    return baz;
 
     // good
-    if (true) {
-      var a = 2;
+    if (foo) {
+      return bar;
     }
-    var b = 3;
+
+    return baz
 
     // bad
-    var o = {
+    var obj = {
       foo: function() {
       },
       bar: function() {
       }
     };
-    return o;
+    return obj;
 
     // good
-    var o = {
+    var obj = {
       foo: function() {
       },
 
@@ -887,7 +888,7 @@
       }
     };
 
-    return o;
+    return obj;
     ```
 
 

From 54060760023576dc9801a1c147d0e7afd8d31cb4 Mon Sep 17 00:00:00 2001
From: Carlos Andres Herrera <caherrerapa@gmail.com>
Date: Thu, 12 Feb 2015 12:23:23 +0700
Subject: [PATCH 0140/1591] Adding Nimbl3 to the organizations list

---
 README.md | 1 +
 1 file changed, 1 insertion(+)

diff --git a/README.md b/README.md
index 90e921fab4..fdf138818f 100644
--- a/README.md
+++ b/README.md
@@ -1579,6 +1579,7 @@
   - **Muber**: [muber/javascript](https://github.com/muber/javascript)
   - **National Geographic**: [natgeo/javascript](https://github.com/natgeo/javascript)
   - **National Park Service**: [nationalparkservice/javascript](https://github.com/nationalparkservice/javascript)
+  - **Nimbl3**: [nimbl3/javascript](https://github.com/nimbl3/javascript)
   - **Orion Health**: [orionhealth/javascript](https://github.com/orionhealth/javascript)
   - **Peerby**: [Peerby/javascript](https://github.com/Peerby/javascript)
   - **Razorfish**: [razorfish/javascript-style-guide](https://github.com/razorfish/javascript-style-guide)

From b0a364dedbc1f9c2c8512606bc5c26db5bceb2f8 Mon Sep 17 00:00:00 2001
From: Omar Duarte <omarduarte@gmail.com>
Date: Thu, 12 Feb 2015 00:11:37 -0800
Subject: [PATCH 0141/1591] Missed a semicolon

---
 README.md | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/README.md b/README.md
index 90e921fab4..28f5e0bb3c 100644
--- a/README.md
+++ b/README.md
@@ -868,7 +868,7 @@
       return bar;
     }
 
-    return baz
+    return baz;
 
     // bad
     var obj = {

From b49d58ff0b7700952b6abc17aad13ec349f76829 Mon Sep 17 00:00:00 2001
From: Harrison Shoff <hi@hshoff.com>
Date: Wed, 25 Feb 2015 00:28:55 -0800
Subject: [PATCH 0142/1591] [resources] add frontend guidlines by @bendc

---
 README.md | 1 +
 1 file changed, 1 insertion(+)

diff --git a/README.md b/README.md
index 57e17ea83f..6fef48ad81 100644
--- a/README.md
+++ b/README.md
@@ -1517,6 +1517,7 @@
   - [Basic JavaScript for the impatient programmer](http://www.2ality.com/2013/06/basic-javascript.html) - Dr. Axel Rauschmayer
   - [You Might Not Need jQuery](http://youmightnotneedjquery.com/) - Zack Bloom & Adam Schwartz
   - [ES6 Features](https://github.com/lukehoban/es6features) - Luke Hoban
+  - [Frontend Guidelines](https://github.com/bendc/frontend-guidelines) - Benjamin De Cock
 
 **Books**
 

From 656a8f678199cfbe7b48e7bc00e68791ff1be862 Mon Sep 17 00:00:00 2001
From: Harrison Shoff <hi@hshoff.com>
Date: Tue, 3 Mar 2015 12:45:16 -0800
Subject: [PATCH 0143/1591] [in the wild] add @Jam3

---
 README.md | 1 +
 1 file changed, 1 insertion(+)

diff --git a/README.md b/README.md
index 6fef48ad81..5908010bd9 100644
--- a/README.md
+++ b/README.md
@@ -1572,6 +1572,7 @@
   - **How About We**: [howaboutwe/javascript](https://github.com/howaboutwe/javascript)
   - **InfoJobs**: [InfoJobs/JavaScript-Style-Guide](https://github.com/InfoJobs/JavaScript-Style-Guide)
   - **Intent Media**: [intentmedia/javascript](https://github.com/intentmedia/javascript)
+  - **Jam3**: [Jam3/Javascript-Code-Conventions](https://github.com/Jam3/Javascript-Code-Conventions)
   - **Kinetica Solutions**: [kinetica/javascript](https://github.com/kinetica/javascript)
   - **Mighty Spring**: [mightyspring/javascript](https://github.com/mightyspring/javascript)
   - **MinnPost**: [MinnPost/javascript](https://github.com/MinnPost/javascript)

From af096c8a940886b7ce5e802f01f81636fe977a41 Mon Sep 17 00:00:00 2001
From: Jake Teton-Landis <jake.tl@airbnb.com>
Date: Tue, 10 Mar 2015 16:50:20 -0700
Subject: [PATCH 0144/1591] add `else` to docs

---
 README.md | 23 +++++++++++++++++++++++
 1 file changed, 23 insertions(+)

diff --git a/README.md b/README.md
index 6e7c6f1bc8..906245e196 100644
--- a/README.md
+++ b/README.md
@@ -637,6 +637,29 @@
     }
     ```
 
+  - If you're using multi-line blocks with `if` and `else`, put `else` on the same line as your
+    `if` block's closing brace.
+
+    ```javascript
+    // bad
+    if (test) {
+      thing1();
+      thing2();
+    }
+    else {
+      thing3();
+    }
+
+    // good
+    if (test) {
+      thing1();
+      thing2();
+    } else {
+      thing3();
+    }
+    ```
+
+
 **[⬆ back to top](#table-of-contents)**
 
 

From e9b573287c405d67b9a92f213df137f11a011913 Mon Sep 17 00:00:00 2001
From: Jake Teton-Landis <jake.tl@airbnb.com>
Date: Wed, 11 Mar 2015 15:01:14 -0700
Subject: [PATCH 0145/1591] naming files containing one class

---
 README.md | 19 +++++++++++++++++++
 1 file changed, 19 insertions(+)

diff --git a/README.md b/README.md
index 6cf1f6d0a3..99e286d73b 100644
--- a/README.md
+++ b/README.md
@@ -1208,6 +1208,25 @@
 
   - **Note:** IE8 and below exhibit some quirks with named function expressions.  See [http://kangax.github.io/nfe/](http://kangax.github.io/nfe/) for more info.
 
+  - If your file exports a single class, your filename should be exactly the name of the class.
+    ```javascript
+    // file contents
+    class CheckBox {
+      // ...
+    }
+    module.exports = CheckBox;
+
+    // in some other file
+    // bad
+    var CheckBox = require('./checkBox');
+
+    // bad
+    var CheckBox = require('./check_box');
+
+    // good
+    var CheckBox = require('./CheckBox');
+    ```
+
 **[⬆ back to top](#table-of-contents)**
 
 

From 5a01165dbb455d327f89afa0eae66858cff8eb43 Mon Sep 17 00:00:00 2001
From: Prasanth Vaaheeswaran <pvaaheeswaran@myseneca.ca>
Date: Fri, 13 Mar 2015 13:35:47 -0400
Subject: [PATCH 0146/1591] Added a book to the book list

- Added Effective JavaScript: 68 Specific Ways to Harness the Power of JavaScript
---
 README.md | 1 +
 1 file changed, 1 insertion(+)

diff --git a/README.md b/README.md
index 99e286d73b..9cdc00b0f3 100644
--- a/README.md
+++ b/README.md
@@ -1576,6 +1576,7 @@
   - [Superhero.js](http://superherojs.com/) - Kim Joar Bekkelund, Mads Mobæk, & Olav Bjorkoy
   - [JSBooks](http://jsbooks.revolunet.com/) - Julien Bouquillon
   - [Third Party JavaScript](http://manning.com/vinegar/) - Ben Vinegar and Anton Kovalyov
+  - [Effective JavaScript: 68 Specific Ways to Harness the Power of JavaScript](http://amzn.com/0321812182) - David Herman
 
 **Blogs**
 

From 02d3f52402d753417b9fd62df073e88268c83b23 Mon Sep 17 00:00:00 2001
From: Prasanth Vaaheeswaran <pvaaheeswaran@myseneca.ca>
Date: Fri, 13 Mar 2015 13:39:15 -0400
Subject: [PATCH 0147/1591] Created Podcasts section

---
 README.md | 5 +++++
 1 file changed, 5 insertions(+)

diff --git a/README.md b/README.md
index 9cdc00b0f3..a8d45cd4ba 100644
--- a/README.md
+++ b/README.md
@@ -1592,6 +1592,11 @@
   - [Dustin Diaz](http://dustindiaz.com/)
   - [nettuts](http://net.tutsplus.com/?s=javascript)
 
+**Podcasts**
+
+-[JavaScript Jabber](http://devchat.tv/js-jabber/)
+
+
 **[⬆ back to top](#table-of-contents)**
 
 ## In the Wild

From c6191f834b15fee35e30f8db9029b069e54846b4 Mon Sep 17 00:00:00 2001
From: Prasanth Vaaheeswaran <pvaaheeswaran@myseneca.ca>
Date: Fri, 13 Mar 2015 13:40:45 -0400
Subject: [PATCH 0148/1591] Formatting updated for Podcasts

---
 README.md | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/README.md b/README.md
index a8d45cd4ba..cfbfaaf5bc 100644
--- a/README.md
+++ b/README.md
@@ -1594,7 +1594,7 @@
 
 **Podcasts**
 
--[JavaScript Jabber](http://devchat.tv/js-jabber/)
+  - [JavaScript Jabber](http://devchat.tv/js-jabber/)
 
 
 **[⬆ back to top](#table-of-contents)**

From 3eef511fd650a2d4504afdf9007fd1c4c3a508da Mon Sep 17 00:00:00 2001
From: fvanderwielen <fvanderwielen@gmail.com>
Date: Mon, 16 Mar 2015 23:05:09 +0100
Subject: [PATCH 0149/1591] Fixes #251 - Rename Conditional Expressions

As per issue #251, renames section Conditional Expressions & Equality to Comparison Operators & Equality, as the section is not about the Elvis operator :)
---
 README.md | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/README.md b/README.md
index 99e286d73b..a06ea741b8 100644
--- a/README.md
+++ b/README.md
@@ -15,7 +15,7 @@
   1. [Properties](#properties)
   1. [Variables](#variables)
   1. [Hoisting](#hoisting)
-  1. [Conditional Expressions & Equality](#conditional-expressions--equality)
+  1. [Comparison Operators & Equality](#comparison-operators--equality)
   1. [Blocks](#blocks)
   1. [Comments](#comments)
   1. [Whitespace](#whitespace)
@@ -563,10 +563,10 @@
 
 
 
-## Conditional Expressions & Equality
+## Comparison Operators & Equality
 
   - Use `===` and `!==` over `==` and `!=`.
-  - Conditional expressions are evaluated using coercion with the `ToBoolean` method and always follow these simple rules:
+  - Comparison operators are evaluated using coercion with the `ToBoolean` method and always follow these simple rules:
 
     + **Objects** evaluate to **true**
     + **Undefined** evaluates to **false**

From 7c79b4e21c943085ac59071880407bc2b486a7c8 Mon Sep 17 00:00:00 2001
From: Bruno Ferreira <brunogonncalves@icloud.com>
Date: Fri, 20 Mar 2015 08:33:35 -0300
Subject: [PATCH 0150/1591] Added T4R Technology to organizations list

---
 README.md | 1 +
 1 file changed, 1 insertion(+)

diff --git a/README.md b/README.md
index a06ea741b8..37de03a301 100644
--- a/README.md
+++ b/README.md
@@ -1635,6 +1635,7 @@
   - **StudentSphere**: [studentsphere/javascript](https://github.com/studentsphere/javascript)
   - **Target**: [target/javascript](https://github.com/target/javascript)
   - **TheLadders**: [TheLadders/javascript](https://github.com/TheLadders/javascript)
+  - **T4R Technology**: [T4R-Technology/javascript](https://github.com/T4R-Technology/javascript)
   - **Userify**: [userify/javascript](https://github.com/userify/javascript)
   - **VoxFeed**: [VoxFeed/javascript-style-guide](https://github.com/VoxFeed/javascript-style-guide)
   - **Weggo**: [Weggo/javascript](https://github.com/Weggo/javascript)

From 5fd7c6f08c0650ed67297fc83c8a0590c9a92cc8 Mon Sep 17 00:00:00 2001
From: Estelle <estelle@surveymonkey.com>
Date: Mon, 23 Mar 2015 18:48:19 -0700
Subject: [PATCH 0151/1591] added naming convention of UPPERCASE names

---
 README.md | 27 +++++++++++++++++++++++++++
 1 file changed, 27 insertions(+)

diff --git a/README.md b/README.md
index 2c6c5c6c7d..1116dcb4ba 100644
--- a/README.md
+++ b/README.md
@@ -3139,6 +3139,33 @@ Other Style Guides
     ];
     ```
 
+  <a name="naming--uppercase"></a>
+  - [23.10](#naming--uppercase) Use UPPERCASE for nested object namespacing, global variables, and constants.
+
+
+    ```javascript
+    // bad
+    const namespace = namespace || {};
+
+    namespace.util.Widget = {
+       // ...stuff...
+    }
+
+    // bad
+    const apiKey = '44b345234534t455245njkl523452-vbb9';
+
+    // good
+    const NAMESPACE = NAMESPACE || {};
+
+    NAMESPACE.util.Widget = {
+       // ...stuff...
+    }
+
+    // good
+    const API_KEY = '44b345234534t455245njkl523452-vbb9';
+    ```
+
+
 **[⬆ back to top](#table-of-contents)**
 
 ## Accessors

From 78309e7ddbc8fff172ca770f641b04ca4eadb425 Mon Sep 17 00:00:00 2001
From: Veikko Karsikko <veikko88@gmail.com>
Date: Thu, 26 Mar 2015 10:22:35 +0200
Subject: [PATCH 0152/1591] Add Nordic Venture Family to organizations list

---
 README.md | 1 +
 1 file changed, 1 insertion(+)

diff --git a/README.md b/README.md
index e764021251..0e80fd9bce 100644
--- a/README.md
+++ b/README.md
@@ -1630,6 +1630,7 @@
   - **National Geographic**: [natgeo/javascript](https://github.com/natgeo/javascript)
   - **National Park Service**: [nationalparkservice/javascript](https://github.com/nationalparkservice/javascript)
   - **Nimbl3**: [nimbl3/javascript](https://github.com/nimbl3/javascript)
+  - **Nordic Venture Family**: [CodeDistillery/javascript](https://github.com/CodeDistillery/javascript)
   - **Orion Health**: [orionhealth/javascript](https://github.com/orionhealth/javascript)
   - **Peerby**: [Peerby/javascript](https://github.com/Peerby/javascript)
   - **Razorfish**: [razorfish/javascript-style-guide](https://github.com/razorfish/javascript-style-guide)

From 3dc4b5edc8786855f9a5288af021141b73ce1d2a Mon Sep 17 00:00:00 2001
From: Joe Frambach <joe@framba.ch>
Date: Fri, 27 Mar 2015 10:40:15 -0700
Subject: [PATCH 0153/1591] String concat code blocks were not equivalent.

If the array is empty, the "bad" code will return `<ul></ul>` and the "good" code will return `<ul><li></li></ul>`.

Although I would prefer this over the for loop:

    function inbox(messages) {
      items = messages.map(function(message) {
        return '<li>' + message.message + '</li>';
      });

      return '<ul>' + items.join('') + '</ul>';
---
 README.md | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/README.md b/README.md
index 0e80fd9bce..209f1a1ed7 100644
--- a/README.md
+++ b/README.md
@@ -250,10 +250,10 @@
       items = [];
 
       for (i = 0; i < length; i++) {
-        items[i] = messages[i].message;
+        items[i] = '<li>' + messages[i].message + '</li>';
       }
 
-      return '<ul><li>' + items.join('</li><li>') + '</li></ul>';
+      return '<ul>' + items.join('') + '</ul>';
     }
     ```
 

From 716a9658af323775f1d6a73512e28cc0f7eeda1b Mon Sep 17 00:00:00 2001
From: marcel-me <m.medak@web.de>
Date: Fri, 27 Mar 2015 22:02:39 +0100
Subject: [PATCH 0154/1591] Add Eloquent JavaScript to books

---
 README.md | 1 +
 1 file changed, 1 insertion(+)

diff --git a/README.md b/README.md
index 209f1a1ed7..516f0e2862 100644
--- a/README.md
+++ b/README.md
@@ -1577,6 +1577,7 @@
   - [JSBooks](http://jsbooks.revolunet.com/) - Julien Bouquillon
   - [Third Party JavaScript](http://manning.com/vinegar/) - Ben Vinegar and Anton Kovalyov
   - [Effective JavaScript: 68 Specific Ways to Harness the Power of JavaScript](http://amzn.com/0321812182) - David Herman
+  - [Eloquent JavaScript](http://eloquentjavascript.net) - Marijn Haverbeke
 
 **Blogs**
 

From b91deedf22ebfe7573be80cf0d489e53e335a284 Mon Sep 17 00:00:00 2001
From: Christoph Jasinski <christoph.jasinski@googlemail.com>
Date: Mon, 30 Mar 2015 00:41:28 +0200
Subject: [PATCH 0155/1591] Add You Don't Know JS to books

---
 README.md | 1 +
 1 file changed, 1 insertion(+)

diff --git a/README.md b/README.md
index 516f0e2862..c1b63acbe4 100644
--- a/README.md
+++ b/README.md
@@ -1578,6 +1578,7 @@
   - [Third Party JavaScript](http://manning.com/vinegar/) - Ben Vinegar and Anton Kovalyov
   - [Effective JavaScript: 68 Specific Ways to Harness the Power of JavaScript](http://amzn.com/0321812182) - David Herman
   - [Eloquent JavaScript](http://eloquentjavascript.net) - Marijn Haverbeke
+  - [You Don't Know JS](https://github.com/getify/You-Dont-Know-JS) - Kyle Simpson
 
 **Blogs**
 

From 520b6d658f3f0f1fb23438bd3181361fac5dc7cc Mon Sep 17 00:00:00 2001
From: Harrison Shoff <hi@hshoff.com>
Date: Mon, 30 Mar 2015 13:07:29 -0700
Subject: [PATCH 0156/1591] [resources] add link to standard style by @feross

---
 README.md | 1 +
 1 file changed, 1 insertion(+)

diff --git a/README.md b/README.md
index c1b63acbe4..bcbe6489c3 100644
--- a/README.md
+++ b/README.md
@@ -1545,6 +1545,7 @@
   - [Google JavaScript Style Guide](http://google-styleguide.googlecode.com/svn/trunk/javascriptguide.xml)
   - [jQuery Core Style Guidelines](http://docs.jquery.com/JQuery_Core_Style_Guidelines)
   - [Principles of Writing Consistent, Idiomatic JavaScript](https://github.com/rwldrn/idiomatic.js/)
+  - [JavaScript Standard Style](https://github.com/feross/standard)
 
 **Other Styles**
 

From dbbdec3f290e7b246a7e7054baa39858ca53b532 Mon Sep 17 00:00:00 2001
From: Rob Loach <robloach@gmail.com>
Date: Wed, 1 Apr 2015 17:39:32 -0400
Subject: [PATCH 0157/1591] feat(eslint): Add ESLint linting support

---
 linters/eslintrc | 44 ++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 44 insertions(+)
 create mode 100644 linters/eslintrc

diff --git a/linters/eslintrc b/linters/eslintrc
new file mode 100644
index 0000000000..4dcf426715
--- /dev/null
+++ b/linters/eslintrc
@@ -0,0 +1,44 @@
+env: 
+  browser: true
+  node: true
+  amd: true
+  jquery: true
+
+rules:
+  no-new-object: 2
+  no-reserved-keys: 2
+  no-array-constructor: 2
+  quotes: [2, "single"]
+  indent: [2, 2]
+  no-multi-str: 2
+  no-multi-spaces: 2
+  no-shadow-restricted-names: 2
+  dot-notation: 2
+  block-scoped-var: 2
+  vars-on-top: 2
+  no-unused-vars: 2
+  eqeqeq: 2
+  use-isnan: 2
+  no-eq-null: 2
+  brace-style: 2
+  spaced-line-comment: 2
+  valid-jsdoc: 2
+  space-infix-ops: 2
+  eol-last: 2
+  padded-blocks: [2, "never"]
+  space-before-blocks: 2
+  comma-dangle: [2, "never"]
+  comma-style: 2
+  semi: [2, always]
+  semi-spacing: 2
+  no-extra-boolean-cast: 2
+  space-before-function-paren: [2, "never"]
+  no-spaced-func: 2
+  no-wrap-func: 2
+  camelcase: 2
+  new-cap: 2
+  consistent-this: [1, "_this"]
+  func-names: 2
+  key-spacing: 2
+  no-dupe-keys: 2
+  strict: 2

From 2e51880f1046ce7673167f34b02afe7c7e17bb51 Mon Sep 17 00:00:00 2001
From: Tomek Wiszniewski <t.wiszniewski@gmail.com>
Date: Thu, 2 Apr 2015 04:10:21 +0200
Subject: [PATCH 0158/1591] Specify whitespace rules for parentheses

Based on existing examples and <http://sideeffect.kr/popularconvention/#javascript>.
---
 README.md | 24 ++++++++++++++++++++++++
 1 file changed, 24 insertions(+)

diff --git a/README.md b/README.md
index bcbe6489c3..c395491c8e 100644
--- a/README.md
+++ b/README.md
@@ -803,6 +803,30 @@
     });
     ```
 
+  - Place 1 space before the opening parenthesis in control statements (`if`, `while` etc.). Place no space before the argument list in function calls and declarations.
+
+    ```javascript
+    // bad
+    if(isJedi) {
+      fight ();
+    }
+
+    // good
+    if (isJedi) {
+      fight();
+    }
+
+    // bad
+    function fight () {
+      console.log ('Swooosh!');
+    }
+
+    // good
+    function fight() {
+      console.log('Swooosh!');
+    }
+    ```
+
   - Set off operators with spaces.
 
     ```javascript

From 369fdb8f562f57e3a5c64ad3d628f9e24cdd39b0 Mon Sep 17 00:00:00 2001
From: Harrison Shoff <hi@hshoff.com>
Date: Thu, 2 Apr 2015 09:12:33 -0700
Subject: [PATCH 0159/1591] [whitespace] add dots for whitespace examples

---
 README.md | 10 +++++-----
 1 file changed, 5 insertions(+), 5 deletions(-)

diff --git a/README.md b/README.md
index c395491c8e..99d78beb82 100644
--- a/README.md
+++ b/README.md
@@ -786,7 +786,7 @@
     }
 
     // good
-    function test() {
+    function test()∙{
       console.log('test');
     }
 
@@ -797,7 +797,7 @@
     });
 
     // good
-    dog.set('attr', {
+    dog.set('attr',∙{
       age: '1 year',
       breed: 'Bernese Mountain Dog'
     });
@@ -808,7 +808,7 @@
     ```javascript
     // bad
     if(isJedi) {
-      fight ();
+      fight∙();
     }
 
     // good
@@ -817,7 +817,7 @@
     }
 
     // bad
-    function fight () {
+    function fight∙() {
       console.log ('Swooosh!');
     }
 
@@ -834,7 +834,7 @@
     var x=y+5;
 
     // good
-    var x = y + 5;
+    var x∙=∙y∙+∙5;
     ```
 
   - End files with a single newline character.

From 615dc76f632dad35ccb08809b825485d96b88b4e Mon Sep 17 00:00:00 2001
From: Harrison Shoff <hi@hshoff.com>
Date: Thu, 2 Apr 2015 09:13:38 -0700
Subject: [PATCH 0160/1591] [whitespace] remove dots, they look bad

---
 README.md | 10 +++++-----
 1 file changed, 5 insertions(+), 5 deletions(-)

diff --git a/README.md b/README.md
index 99d78beb82..c395491c8e 100644
--- a/README.md
+++ b/README.md
@@ -786,7 +786,7 @@
     }
 
     // good
-    function test()∙{
+    function test() {
       console.log('test');
     }
 
@@ -797,7 +797,7 @@
     });
 
     // good
-    dog.set('attr',∙{
+    dog.set('attr', {
       age: '1 year',
       breed: 'Bernese Mountain Dog'
     });
@@ -808,7 +808,7 @@
     ```javascript
     // bad
     if(isJedi) {
-      fight∙();
+      fight ();
     }
 
     // good
@@ -817,7 +817,7 @@
     }
 
     // bad
-    function fight∙() {
+    function fight () {
       console.log ('Swooosh!');
     }
 
@@ -834,7 +834,7 @@
     var x=y+5;
 
     // good
-    var x∙=∙y∙+∙5;
+    var x = y + 5;
     ```
 
   - End files with a single newline character.

From 3058e38d0157db360d4b513342455213e2642fe3 Mon Sep 17 00:00:00 2001
From: Rob Loach <robloach@gmail.com>
Date: Thu, 2 Apr 2015 12:36:42 -0400
Subject: [PATCH 0161/1591] fix(eslint): Remove amd and jquery from env

---
 linters/eslintrc | 2 --
 1 file changed, 2 deletions(-)

diff --git a/linters/eslintrc b/linters/eslintrc
index 4dcf426715..e90a6a11b6 100644
--- a/linters/eslintrc
+++ b/linters/eslintrc
@@ -1,8 +1,6 @@
 env: 
   browser: true
   node: true
-  amd: true
-  jquery: true
 
 rules:
   no-new-object: 2

From 2bccaf62031d25b97aa71dac62607526fdc22b6f Mon Sep 17 00:00:00 2001
From: Justin Gardner <justin.gardner@turner.com>
Date: Thu, 2 Apr 2015 20:40:40 +0100
Subject: [PATCH 0162/1591] Added Adult Swim to In the Wild section

---
 README.md | 1 +
 1 file changed, 1 insertion(+)

diff --git a/README.md b/README.md
index 516f0e2862..485b03ab7a 100644
--- a/README.md
+++ b/README.md
@@ -1605,6 +1605,7 @@
   This is a list of organizations that are using this style guide. Send us a pull request or open an issue and we'll add you to the list.
 
   - **Aan Zee**: [AanZee/javascript](https://github.com/AanZee/javascript)
+  - **Adult Swim**: [adult-swim/javascript](https://github.com/adult-swim/javascript)
   - **Airbnb**: [airbnb/javascript](https://github.com/airbnb/javascript)
   - **American Insitutes for Research**: [AIRAST/javascript](https://github.com/AIRAST/javascript)
   - **Apartmint**: [apartmint/javascript](https://github.com/apartmint/javascript)

From 4b012cddf32e396753bd9dddd7ad6306ba7a913c Mon Sep 17 00:00:00 2001
From: Marcio Oliveira <marcio.oliveira@thoughtworks.com>
Date: Fri, 3 Apr 2015 19:51:16 -0300
Subject: [PATCH 0163/1591] Rephrasing Array#push style guide

---
 README.md | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/README.md b/README.md
index e91903d1f8..5cd3f44c13 100644
--- a/README.md
+++ b/README.md
@@ -135,7 +135,7 @@
     var items = [];
     ```
 
-  - If you don't know array length use Array#push.
+  - Use Array#push instead of direct assignment to add items to an array.
 
     ```javascript
     var someStack = [];

From ebe8cb253dce09535f8a45e47d1ec5be75129f27 Mon Sep 17 00:00:00 2001
From: Roman <broilerster@gmail.com>
Date: Sat, 4 Apr 2015 11:47:48 +0300
Subject: [PATCH 0164/1591] Fix a typo in selector

---
 README.md | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/README.md b/README.md
index e91903d1f8..1efa341848 100644
--- a/README.md
+++ b/README.md
@@ -870,7 +870,7 @@
 
     // bad
     $('#items').
-      find('selected').
+      find('.selected').
         highlight().
         end().
       find('.open').

From 6cda67e2f54556f8b42f08be27bd8fbc92936a94 Mon Sep 17 00:00:00 2001
From: Sunshine Yin <sunshine.w.yin@gmail.com>
Date: Sun, 5 Apr 2015 12:57:01 -0700
Subject: [PATCH 0165/1591] Fix minor punctuation errors
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

(1) BEFORE: Never name a parameter `arguments`, this will take precedence over the `arguments` object.
AFTER: Never name a parameter `arguments`. This will take precedence over the `arguments` object.

(2) BEFORE: Variable declarations get hoisted to the top of their scope, their assignment does not.
AFTER:
Variable declarations get hoisted to the top of their scope, but their assignment does not.

(3) BEFORE: for multiline comments
AFTER: for multi-line comments

(4)BEFORE: It’s okay to write a custom toString() method, just make sure
AFTER: It's okay to write a custom toString() method. Just make sure
---
 README.md | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/README.md b/README.md
index bcbe6489c3..2bb2ea8885 100644
--- a/README.md
+++ b/README.md
@@ -301,7 +301,7 @@
     }
     ```
 
-  - Never name a parameter `arguments`, this will take precedence over the `arguments` object that is given to every function scope.
+  - Never name a parameter `arguments`. This will take precedence over the `arguments` object that is given to every function scope.
 
     ```javascript
     // bad
@@ -475,7 +475,7 @@
 
 ## Hoisting
 
-  - Variable declarations get hoisted to the top of their scope, their assignment does not.
+  - Variable declarations get hoisted to the top of their scope, but their assignment does not.
 
     ```javascript
     // we know this wouldn't work (assuming there
@@ -665,7 +665,7 @@
 
 ## Comments
 
-  - Use `/** ... */` for multiline comments. Include a description, specify types and values for all parameters and return values.
+  - Use `/** ... */` for multi-line comments. Include a description, specify types and values for all parameters and return values.
 
     ```javascript
     // bad

From 999a9f3dc5e97e816747f39de6668d1075bd7b75 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Jan=20Ho=C5=99ava?= <honzi@users.noreply.github.com>
Date: Sun, 5 Apr 2015 14:51:18 -0700
Subject: [PATCH 0166/1591] Alphabetized Translation links

---
 README.md | 14 +++++++-------
 1 file changed, 7 insertions(+), 7 deletions(-)

diff --git a/README.md b/README.md
index e91903d1f8..dcb4d3c582 100644
--- a/README.md
+++ b/README.md
@@ -1681,18 +1681,18 @@
 
   This style guide is also available in other languages:
 
-  - ![de](https://raw.githubusercontent.com/gosquared/flags/master/flags/flags/shiny/24/Germany.png) **German**: [timofurrer/javascript-style-guide](https://github.com/timofurrer/javascript-style-guide)
-  - ![jp](https://raw.githubusercontent.com/gosquared/flags/master/flags/flags/shiny/24/Japan.png) **Japanese**: [mitsuruog/javacript-style-guide](https://github.com/mitsuruog/javacript-style-guide)
   - ![br](https://raw.githubusercontent.com/gosquared/flags/master/flags/flags/shiny/24/Brazil.png) **Brazilian Portuguese**: [armoucar/javascript-style-guide](https://github.com/armoucar/javascript-style-guide)
+  - ![bg](https://raw.githubusercontent.com/gosquared/flags/master/flags/flags/shiny/24/Bulgaria.png) **Bulgarian**: [borislavvv/javascript](https://github.com/borislavvv/javascript)
+  - ![ca](https://raw.githubusercontent.com/fpmweb/javascript-style-guide/master/img/catala.png) **Catalan**: [fpmweb/javascript-style-guide](https://github.com/fpmweb/javascript-style-guide)
   - ![tw](https://raw.githubusercontent.com/gosquared/flags/master/flags/flags/shiny/24/Taiwan.png) **Chinese(Traditional)**: [jigsawye/javascript](https://github.com/jigsawye/javascript)
   - ![cn](https://raw.githubusercontent.com/gosquared/flags/master/flags/flags/shiny/24/China.png) **Chinese(Simplified)**: [adamlu/javascript-style-guide](https://github.com/adamlu/javascript-style-guide)
-  - ![es](https://raw.githubusercontent.com/gosquared/flags/master/flags/flags/shiny/24/Spain.png) **Spanish**: [paolocarrasco/javascript-style-guide](https://github.com/paolocarrasco/javascript-style-guide)
-  - ![kr](https://raw.githubusercontent.com/gosquared/flags/master/flags/flags/shiny/24/South-Korea.png) **Korean**: [tipjs/javascript-style-guide](https://github.com/tipjs/javascript-style-guide)
   - ![fr](https://raw.githubusercontent.com/gosquared/flags/master/flags/flags/shiny/24/France.png) **French**: [nmussy/javascript-style-guide](https://github.com/nmussy/javascript-style-guide)
-  - ![ru](https://raw.githubusercontent.com/gosquared/flags/master/flags/flags/shiny/24/Russia.png) **Russian**: [uprock/javascript](https://github.com/uprock/javascript)
-  - ![bg](https://raw.githubusercontent.com/gosquared/flags/master/flags/flags/shiny/24/Bulgaria.png) **Bulgarian**: [borislavvv/javascript](https://github.com/borislavvv/javascript)
-  - ![ca](https://raw.githubusercontent.com/fpmweb/javascript-style-guide/master/img/catala.png) **Catalan**: [fpmweb/javascript-style-guide](https://github.com/fpmweb/javascript-style-guide)
+  - ![de](https://raw.githubusercontent.com/gosquared/flags/master/flags/flags/shiny/24/Germany.png) **German**: [timofurrer/javascript-style-guide](https://github.com/timofurrer/javascript-style-guide)
+  - ![jp](https://raw.githubusercontent.com/gosquared/flags/master/flags/flags/shiny/24/Japan.png) **Japanese**: [mitsuruog/javacript-style-guide](https://github.com/mitsuruog/javacript-style-guide)
+  - ![kr](https://raw.githubusercontent.com/gosquared/flags/master/flags/flags/shiny/24/South-Korea.png) **Korean**: [tipjs/javascript-style-guide](https://github.com/tipjs/javascript-style-guide)
   - ![pl](https://raw.githubusercontent.com/gosquared/flags/master/flags/flags/shiny/24/Poland.png) **Polish**: [mjurczyk/javascript](https://github.com/mjurczyk/javascript)
+  - ![ru](https://raw.githubusercontent.com/gosquared/flags/master/flags/flags/shiny/24/Russia.png) **Russian**: [uprock/javascript](https://github.com/uprock/javascript)
+  - ![es](https://raw.githubusercontent.com/gosquared/flags/master/flags/flags/shiny/24/Spain.png) **Spanish**: [paolocarrasco/javascript-style-guide](https://github.com/paolocarrasco/javascript-style-guide)
 
 ## The JavaScript Style Guide Guide
 

From 87ea8909d851f1a56b6cb7173b73a15f4b2a5d5b Mon Sep 17 00:00:00 2001
From: Rob Loach <robloach@gmail.com>
Date: Sun, 5 Apr 2015 23:04:13 -0400
Subject: [PATCH 0167/1591] fix(one-var): Add one-var setting from @nkbt

---
 linters/eslintrc | 1 +
 1 file changed, 1 insertion(+)

diff --git a/linters/eslintrc b/linters/eslintrc
index e90a6a11b6..fa9296ac90 100644
--- a/linters/eslintrc
+++ b/linters/eslintrc
@@ -33,6 +33,7 @@ rules:
   space-before-function-paren: [2, "never"]
   no-spaced-func: 2
   no-wrap-func: 2
+  one-var: [2, "never"]
   camelcase: 2
   new-cap: 2
   consistent-this: [1, "_this"]

From 540365c4cc68323abb401bcb0e7f55ceb5113d1f Mon Sep 17 00:00:00 2001
From: Harrison Shoff <hi@hshoff.com>
Date: Mon, 6 Apr 2015 18:00:36 -0700
Subject: [PATCH 0168/1591] [whitespace] class => classed. fixes #294

---
 README.md | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/README.md b/README.md
index 6d2a6492c4..fd5f4ffdaf 100644
--- a/README.md
+++ b/README.md
@@ -885,7 +885,7 @@
         .updateCount();
 
     // bad
-    var leds = stage.selectAll('.led').data(data).enter().append('svg:svg').class('led', true)
+    var leds = stage.selectAll('.led').data(data).enter().append('svg:svg').classed('led', true)
         .attr('width',  (radius + margin) * 2).append('svg:g')
         .attr('transform', 'translate(' + (radius + margin) + ',' + (radius + margin) + ')')
         .call(tron.led);
@@ -894,7 +894,7 @@
     var leds = stage.selectAll('.led')
         .data(data)
       .enter().append('svg:svg')
-        .class('led', true)
+        .classed('led', true)
         .attr('width',  (radius + margin) * 2)
       .append('svg:g')
         .attr('transform', 'translate(' + (radius + margin) + ',' + (radius + margin) + ')')

From 67dda213b81c8330f337635a11d85eacf03a3afb Mon Sep 17 00:00:00 2001
From: Varayut Lerdkanlayanawat <l.varayut@gmail.com>
Date: Thu, 16 Apr 2015 10:12:06 +0700
Subject: [PATCH 0169/1591] Add Thai language version

---
 README.md | 1 +
 1 file changed, 1 insertion(+)

diff --git a/README.md b/README.md
index c41b1ecb84..befcf4ef5b 100644
--- a/README.md
+++ b/README.md
@@ -1693,6 +1693,7 @@
   - ![pl](https://raw.githubusercontent.com/gosquared/flags/master/flags/flags/shiny/24/Poland.png) **Polish**: [mjurczyk/javascript](https://github.com/mjurczyk/javascript)
   - ![ru](https://raw.githubusercontent.com/gosquared/flags/master/flags/flags/shiny/24/Russia.png) **Russian**: [uprock/javascript](https://github.com/uprock/javascript)
   - ![es](https://raw.githubusercontent.com/gosquared/flags/master/flags/flags/shiny/24/Spain.png) **Spanish**: [paolocarrasco/javascript-style-guide](https://github.com/paolocarrasco/javascript-style-guide)
+  - ![th](https://raw.githubusercontent.com/gosquared/flags/master/flags/flags/shiny/24/Thailand.png) **Thai**: [lvarayut/javascript-style-guide](https://github.com/lvarayut/javascript-style-guide)
 
 ## The JavaScript Style Guide Guide
 

From 64013fb578c2600ed4d3c22e9d1296dbe8ed5db9 Mon Sep 17 00:00:00 2001
From: nagits <aleksey.nagits@gmail.com>
Date: Fri, 17 Apr 2015 18:28:05 +0500
Subject: [PATCH 0170/1591] Add Flexberry to the organizations list

---
 README.md | 1 +
 1 file changed, 1 insertion(+)

diff --git a/README.md b/README.md
index befcf4ef5b..78c1142e2b 100644
--- a/README.md
+++ b/README.md
@@ -1641,6 +1641,7 @@
   - **Digitpaint** [digitpaint/javascript](https://github.com/digitpaint/javascript)
   - **Evernote**: [evernote/javascript-style-guide](https://github.com/evernote/javascript-style-guide)
   - **ExactTarget**: [ExactTarget/javascript](https://github.com/ExactTarget/javascript)
+  - **Flexberry**: [Flexberry/javascript-style-guide](https://github.com/Flexberry/javascript-style-guide)
   - **Gawker Media**: [gawkermedia/javascript](https://github.com/gawkermedia/javascript)
   - **GeneralElectric**: [GeneralElectric/javascript](https://github.com/GeneralElectric/javascript)
   - **GoodData**: [gooddata/gdc-js-style](https://github.com/gooddata/gdc-js-style)

From 5fe373c646b39b6efb42b153cfdd2d183186bead Mon Sep 17 00:00:00 2001
From: robertmargelli <margellirobert@gmail.com>
Date: Fri, 17 Apr 2015 15:13:59 -0700
Subject: [PATCH 0171/1591] Added italian translation

---
 README.md | 1 +
 1 file changed, 1 insertion(+)

diff --git a/README.md b/README.md
index 78c1142e2b..826f4dffd2 100644
--- a/README.md
+++ b/README.md
@@ -1689,6 +1689,7 @@
   - ![cn](https://raw.githubusercontent.com/gosquared/flags/master/flags/flags/shiny/24/China.png) **Chinese(Simplified)**: [adamlu/javascript-style-guide](https://github.com/adamlu/javascript-style-guide)
   - ![fr](https://raw.githubusercontent.com/gosquared/flags/master/flags/flags/shiny/24/France.png) **French**: [nmussy/javascript-style-guide](https://github.com/nmussy/javascript-style-guide)
   - ![de](https://raw.githubusercontent.com/gosquared/flags/master/flags/flags/shiny/24/Germany.png) **German**: [timofurrer/javascript-style-guide](https://github.com/timofurrer/javascript-style-guide)
+  - ![it](https://raw.githubusercontent.com/gosquared/flags/master/flags/flags/shiny/24/Italy.png) **Italian**: [sinkswim/javascript-style-guide](https://github.com/sinkswim/javascript-style-guide)
   - ![jp](https://raw.githubusercontent.com/gosquared/flags/master/flags/flags/shiny/24/Japan.png) **Japanese**: [mitsuruog/javacript-style-guide](https://github.com/mitsuruog/javacript-style-guide)
   - ![kr](https://raw.githubusercontent.com/gosquared/flags/master/flags/flags/shiny/24/South-Korea.png) **Korean**: [tipjs/javascript-style-guide](https://github.com/tipjs/javascript-style-guide)
   - ![pl](https://raw.githubusercontent.com/gosquared/flags/master/flags/flags/shiny/24/Poland.png) **Polish**: [mjurczyk/javascript](https://github.com/mjurczyk/javascript)

From b694fedccdcfa1c2c1761957de44fc43d1e9d175 Mon Sep 17 00:00:00 2001
From: Harrison Shoff <hi@hshoff.com>
Date: Sat, 18 Apr 2015 17:58:26 -0700
Subject: [PATCH 0172/1591] [linters] update .eslintrc

---
 linters/.eslintrc | 168 ++++++++++++++++++++++++++++++++++++++++++++++
 linters/eslintrc  |  43 ------------
 2 files changed, 168 insertions(+), 43 deletions(-)
 create mode 100644 linters/.eslintrc
 delete mode 100644 linters/eslintrc

diff --git a/linters/.eslintrc b/linters/.eslintrc
new file mode 100644
index 0000000000..c491f2009e
--- /dev/null
+++ b/linters/.eslintrc
@@ -0,0 +1,168 @@
+{
+  "parser": "babel-eslint",
+  "env": {
+    "browser": true,
+    "node": true
+  },
+  "ecmaFeatures": {
+    "arrowFunctions": true,
+    "blockBindings": true,
+    "classes": true,
+    "defaultParams": true,
+    "destructuring": true,
+    "forOf": true,
+    "generators": false,
+    "modules": true,
+    "objectLiteralComputedProperties": true,
+    "objectLiteralDuplicateProperties": false,
+    "objectLiteralShorthandMethods": true,
+    "objectLiteralShorthandProperties": true,
+    "spread": true,
+    "superInFunctions": true,
+    "templateStrings": true,
+    "jsx": true
+  },
+  "rules": {
+/**
+ * Strict mode
+ */
+    // babel inserts "use strict"; for us
+    // http://eslint.org/docs/rules/strict
+    "strict": [2, "never"],
+
+/**
+ * ES6
+ */
+    "no-var": 2,                     // http://eslint.org/docs/rules/no-var
+
+/**
+ * Variables
+ */
+    "no-shadow": 2,                  // http://eslint.org/docs/rules/no-shadow
+    "no-shadow-restricted-names": 2, // http://eslint.org/docs/rules/no-shadow-restricted-names
+    "no-unused-vars": [2, {          // http://eslint.org/docs/rules/no-unused-vars
+      "vars": "local",
+      "args": "after-used"
+    }],
+    "no-use-before-define": 2,       // http://eslint.org/docs/rules/no-use-before-define
+
+/**
+ * Possible errors
+ */
+    "comma-dangle": [2, "never"],    // http://eslint.org/docs/rules/comma-dangle
+    "no-cond-assign": [2,"always"],  // http://eslint.org/docs/rules/no-cond-assign
+    "no-console": 1,                 // http://eslint.org/docs/rules/no-console
+    "no-debugger": 1,                // http://eslint.org/docs/rules/no-debugger
+    "no-alert": 1,                   // http://eslint.org/docs/rules/no-alert
+    "no-constant-condition": 1,      // http://eslint.org/docs/rules/no-constant-condition
+    "no-dupe-keys": 2,               // http://eslint.org/docs/rules/no-dupe-keys
+    "no-duplicate-case": 2,          // http://eslint.org/docs/rules/no-duplicate-case
+    "no-empty": 2,                   // http://eslint.org/docs/rules/no-empty
+    "no-ex-assign": 2,               // http://eslint.org/docs/rules/no-ex-assign
+    "no-extra-boolean-cast": 0,      // http://eslint.org/docs/rules/no-extra-boolean-cast
+    "no-extra-semi": 2,              // http://eslint.org/docs/rules/no-extra-semi
+    "no-func-assign": 2,             // http://eslint.org/docs/rules/no-func-assign
+    "no-inner-declarations": 2,      // http://eslint.org/docs/rules/no-inner-declarations
+    "no-invalid-regexp": 2,          // http://eslint.org/docs/rules/no-invalid-regexp
+    "no-irregular-whitespace": 2,    // http://eslint.org/docs/rules/no-irregular-whitespace
+    "no-obj-calls": 2,               // http://eslint.org/docs/rules/no-obj-calls
+    "no-reserved-keys": 2,           // http://eslint.org/docs/rules/no-reserved-keys
+    "no-sparse-arrays": 2,           // http://eslint.org/docs/rules/no-sparse-arrays
+    "no-unreachable": 2,             // http://eslint.org/docs/rules/no-unreachable
+    "use-isnan": 2,                  // http://eslint.org/docs/rules/use-isnan
+    "block-scoped-var": 2,           // http://eslint.org/docs/rules/block-scoped-var
+
+/**
+ * Best practices
+ */
+    "consistent-return": 2,          // http://eslint.org/docs/rules/consistent-return
+    "curly": [2, "multi-line"],      // http://eslint.org/docs/rules/curly
+    "default-case": 2,               // http://eslint.org/docs/rules/default-case
+    "dot-notation": [2, {            // http://eslint.org/docs/rules/dot-notation
+      "allowKeywords": false
+    }],
+    "eqeqeq": 2,                     // http://eslint.org/docs/rules/eqeqeq
+    "guard-for-in": 2,               // http://eslint.org/docs/rules/guard-for-in
+    "no-caller": 2,                  // http://eslint.org/docs/rules/no-caller
+    "no-else-return": 2,             // http://eslint.org/docs/rules/no-else-return
+    "no-eq-null": 2,                 // http://eslint.org/docs/rules/no-eq-null
+    "no-eval": 2,                    // http://eslint.org/docs/rules/no-eval
+    "no-extend-native": 2,           // http://eslint.org/docs/rules/no-extend-native
+    "no-extra-bind": 2,              // http://eslint.org/docs/rules/no-extra-bind
+    "no-fallthrough": 2,             // http://eslint.org/docs/rules/no-fallthrough
+    "no-floating-decimal": 2,        // http://eslint.org/docs/rules/no-floating-decimal
+    "no-implied-eval": 2,            // http://eslint.org/docs/rules/no-implied-eval
+    "no-lone-blocks": 2,             // http://eslint.org/docs/rules/no-lone-blocks
+    "no-loop-func": 2,               // http://eslint.org/docs/rules/no-loop-func
+    "no-multi-str": 2,               // http://eslint.org/docs/rules/no-multi-str
+    "no-native-reassign": 2,         // http://eslint.org/docs/rules/no-native-reassign
+    "no-new": 2,                     // http://eslint.org/docs/rules/no-new
+    "no-new-func": 2,                // http://eslint.org/docs/rules/no-new-func
+    "no-new-wrappers": 2,            // http://eslint.org/docs/rules/no-new-wrappers
+    "no-octal": 2,                   // http://eslint.org/docs/rules/no-octal
+    "no-octal-escape": 2,            // http://eslint.org/docs/rules/no-octal-escape
+    "no-param-reassign": 2,          // http://eslint.org/docs/rules/no-param-reassign
+    "no-proto": 2,                   // http://eslint.org/docs/rules/no-proto
+    "no-redeclare": 2,               // http://eslint.org/docs/rules/no-redeclare
+    "no-return-assign": 2,           // http://eslint.org/docs/rules/no-return-assign
+    "no-script-url": 2,              // http://eslint.org/docs/rules/no-script-url
+    "no-self-compare": 2,            // http://eslint.org/docs/rules/no-self-compare
+    "no-sequences": 2,               // http://eslint.org/docs/rules/no-sequences
+    "no-throw-literal": 2,           // http://eslint.org/docs/rules/no-throw-literal
+    "no-with": 2,                    // http://eslint.org/docs/rules/no-with
+    "radix": 2,                      // http://eslint.org/docs/rules/radix
+    "vars-on-top": 2,                // http://eslint.org/docs/rules/vars-on-top
+    "wrap-iife": [2, "any"],         // http://eslint.org/docs/rules/wrap-iife
+    "yoda": 2,                       // http://eslint.org/docs/rules/yoda
+
+/**
+ * Style
+ */
+    "indent": [2, 2],                // http://eslint.org/docs/rules/
+    "brace-style": [2,               // http://eslint.org/docs/rules/brace-style
+      "1tbs", {
+      "allowSingleLine": true
+    }],
+    "quotes": [
+      2, "single", "avoid-escape"    // http://eslint.org/docs/rules/quotes
+    ],
+    "camelcase": [2, {               // http://eslint.org/docs/rules/camelcase
+      "properties": "never"
+    }],
+    "comma-spacing": [2, {           // http://eslint.org/docs/rules/comma-spacing
+      "before": false,
+      "after": true
+    }],
+    "comma-style": [2, "last"],      // http://eslint.org/docs/rules/comma-style
+    "eol-last": 2,                   // http://eslint.org/docs/rules/eol-last
+    "func-names": 1,                 // http://eslint.org/docs/rules/func-names
+    "key-spacing": [2, {             // http://eslint.org/docs/rules/key-spacing
+        "beforeColon": false,
+        "afterColon": true
+    }],
+    "new-cap": [2, {                 // http://eslint.org/docs/rules/new-cap
+      "newIsCap": true
+    }],
+    "no-multiple-empty-lines": [2, { // http://eslint.org/docs/rules/no-multiple-empty-lines
+      "max": 2
+    }],
+    "no-nested-ternary": 2,          // http://eslint.org/docs/rules/no-nested-ternary
+    "no-new-object": 2,              // http://eslint.org/docs/rules/no-new-object
+    "no-spaced-func": 2,             // http://eslint.org/docs/rules/no-spaced-func
+    "no-trailing-spaces": 2,         // http://eslint.org/docs/rules/no-trailing-spaces
+    "no-wrap-func": 2,               // http://eslint.org/docs/rules/no-wrap-func
+    "one-var": [2, "never"],         // http://eslint.org/docs/rules/one-var
+    "padded-blocks": [2, "never"],   // http://eslint.org/docs/rules/padded-blocks
+    "semi": [2, "always"],           // http://eslint.org/docs/rules/semi
+    "semi-spacing": [2, {            // http://eslint.org/docs/rules/semi-spacing
+      "before": false,
+      "after": true
+    }],
+    "space-after-keywords": 2,       // http://eslint.org/docs/rules/space-after-keywords
+    "space-before-blocks": 2,        // http://eslint.org/docs/rules/space-before-blocks
+    "space-before-function-paren": [2, "never"], // http://eslint.org/docs/rules/space-before-function-paren
+    "space-infix-ops": 2,            // http://eslint.org/docs/rules/space-infix-ops
+    "space-return-throw-case": 2,    // http://eslint.org/docs/rules/space-return-throw-case
+    "spaced-line-comment": 2         // http://eslint.org/docs/rules/spaced-line-comment
+  }
+}
diff --git a/linters/eslintrc b/linters/eslintrc
deleted file mode 100644
index fa9296ac90..0000000000
--- a/linters/eslintrc
+++ /dev/null
@@ -1,43 +0,0 @@
-env: 
-  browser: true
-  node: true
-
-rules:
-  no-new-object: 2
-  no-reserved-keys: 2
-  no-array-constructor: 2
-  quotes: [2, "single"]
-  indent: [2, 2]
-  no-multi-str: 2
-  no-multi-spaces: 2
-  no-shadow-restricted-names: 2
-  dot-notation: 2
-  block-scoped-var: 2
-  vars-on-top: 2
-  no-unused-vars: 2
-  eqeqeq: 2
-  use-isnan: 2
-  no-eq-null: 2
-  brace-style: 2
-  spaced-line-comment: 2
-  valid-jsdoc: 2
-  space-infix-ops: 2
-  eol-last: 2
-  padded-blocks: [2, "never"]
-  space-before-blocks: 2
-  comma-dangle: [2, "never"]
-  comma-style: 2
-  semi: [2, always]
-  semi-spacing: 2
-  no-extra-boolean-cast: 2
-  space-before-function-paren: [2, "never"]
-  no-spaced-func: 2
-  no-wrap-func: 2
-  one-var: [2, "never"]
-  camelcase: 2
-  new-cap: 2
-  consistent-this: [1, "_this"]
-  func-names: 2
-  key-spacing: 2
-  no-dupe-keys: 2
-  strict: 2

From 91d56b6874b55dd545cdb668f1c3b3b1a9f446d9 Mon Sep 17 00:00:00 2001
From: Harrison Shoff <hi@hshoff.com>
Date: Sun, 19 Apr 2015 15:34:51 -0700
Subject: [PATCH 0173/1591] [eslint] fix whitespace, silence underscore dangle

---
 linters/.eslintrc | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/linters/.eslintrc b/linters/.eslintrc
index c491f2009e..357f9d9b75 100644
--- a/linters/.eslintrc
+++ b/linters/.eslintrc
@@ -50,7 +50,7 @@
  * Possible errors
  */
     "comma-dangle": [2, "never"],    // http://eslint.org/docs/rules/comma-dangle
-    "no-cond-assign": [2,"always"],  // http://eslint.org/docs/rules/no-cond-assign
+    "no-cond-assign": [2, "always"],  // http://eslint.org/docs/rules/no-cond-assign
     "no-console": 1,                 // http://eslint.org/docs/rules/no-console
     "no-debugger": 1,                // http://eslint.org/docs/rules/no-debugger
     "no-alert": 1,                   // http://eslint.org/docs/rules/no-alert
@@ -151,6 +151,7 @@
     "no-spaced-func": 2,             // http://eslint.org/docs/rules/no-spaced-func
     "no-trailing-spaces": 2,         // http://eslint.org/docs/rules/no-trailing-spaces
     "no-wrap-func": 2,               // http://eslint.org/docs/rules/no-wrap-func
+    "no-underscore-dangle": 0,       // http://eslint.org/docs/rules/no-underscore-dangle
     "one-var": [2, "never"],         // http://eslint.org/docs/rules/one-var
     "padded-blocks": [2, "never"],   // http://eslint.org/docs/rules/padded-blocks
     "semi": [2, "always"],           // http://eslint.org/docs/rules/semi

From 7fe4883a7571e0e64abda1937bd807f6c5a2a0d2 Mon Sep 17 00:00:00 2001
From: Harrison Shoff <hi@hshoff.com>
Date: Sun, 19 Apr 2015 15:42:15 -0700
Subject: [PATCH 0174/1591] [variables] fix variable hoisting example. fixes
 #265

---
 README.md | 9 +++++++--
 1 file changed, 7 insertions(+), 2 deletions(-)

diff --git a/README.md b/README.md
index 826f4dffd2..5a60d84f14 100644
--- a/README.md
+++ b/README.md
@@ -447,7 +447,7 @@
       return name;
     }
 
-    // bad
+    // bad - unnessary function call
     function() {
       var name = getName();
 
@@ -455,16 +455,21 @@
         return false;
       }
 
+      this.setFirstName(name);
+
       return true;
     }
 
     // good
     function() {
+      var name;
+
       if (!arguments.length) {
         return false;
       }
 
-      var name = getName();
+      name = getName();
+      this.setFirstName(name);
 
       return true;
     }

From 17dde0d59338ce6550cbbb0019b27e6de428e4c1 Mon Sep 17 00:00:00 2001
From: Jensen <Jensechu@gmail.com>
Date: Mon, 20 Apr 2015 16:17:48 -0700
Subject: [PATCH 0175/1591] Remove excess whitespace in Whitespace section

---
 README.md | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/README.md b/README.md
index 5a60d84f14..3679b4a98e 100644
--- a/README.md
+++ b/README.md
@@ -891,7 +891,7 @@
 
     // bad
     var leds = stage.selectAll('.led').data(data).enter().append('svg:svg').classed('led', true)
-        .attr('width',  (radius + margin) * 2).append('svg:g')
+        .attr('width', (radius + margin) * 2).append('svg:g')
         .attr('transform', 'translate(' + (radius + margin) + ',' + (radius + margin) + ')')
         .call(tron.led);
 
@@ -900,7 +900,7 @@
         .data(data)
       .enter().append('svg:svg')
         .classed('led', true)
-        .attr('width',  (radius + margin) * 2)
+        .attr('width', (radius + margin) * 2)
       .append('svg:g')
         .attr('transform', 'translate(' + (radius + margin) + ',' + (radius + margin) + ')')
         .call(tron.led);

From a1b53a1d857936ce7a7a0602da4bb15b3e8f9eac Mon Sep 17 00:00:00 2001
From: Maxim <uzumaxy@gmail.com>
Date: Thu, 23 Apr 2015 15:25:49 +0300
Subject: [PATCH 0176/1591] Added new organization.

---
 README.md | 1 +
 1 file changed, 1 insertion(+)

diff --git a/README.md b/README.md
index 3679b4a98e..ee4ca8f8ee 100644
--- a/README.md
+++ b/README.md
@@ -1655,6 +1655,7 @@
   - **InfoJobs**: [InfoJobs/JavaScript-Style-Guide](https://github.com/InfoJobs/JavaScript-Style-Guide)
   - **Intent Media**: [intentmedia/javascript](https://github.com/intentmedia/javascript)
   - **Jam3**: [Jam3/Javascript-Code-Conventions](https://github.com/Jam3/Javascript-Code-Conventions)
+  - **JSSolutions**: [JSSolutions/javascript](https://github.com/JSSolutions/javascript)
   - **Kinetica Solutions**: [kinetica/javascript](https://github.com/kinetica/javascript)
   - **Mighty Spring**: [mightyspring/javascript](https://github.com/mightyspring/javascript)
   - **MinnPost**: [MinnPost/javascript](https://github.com/MinnPost/javascript)

From 15c947b48bcb3ef2fee1655cd99e22f0395f2e1f Mon Sep 17 00:00:00 2001
From: Nikita Gusakov <dev@nkt.me>
Date: Sat, 25 Apr 2015 18:24:58 +0300
Subject: [PATCH 0177/1591] Allow dot-notation keywords in eslint

ES6 gives us promises, which have `.catch` method. Other Promise implementation also uses `try` and `finally` methods, which are also reserved keywords ([bluebird](https://github.com/petkaantonov/bluebird/blob/master/API.md)).
---
 linters/.eslintrc | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/linters/.eslintrc b/linters/.eslintrc
index 357f9d9b75..32eecff357 100644
--- a/linters/.eslintrc
+++ b/linters/.eslintrc
@@ -79,7 +79,7 @@
     "curly": [2, "multi-line"],      // http://eslint.org/docs/rules/curly
     "default-case": 2,               // http://eslint.org/docs/rules/default-case
     "dot-notation": [2, {            // http://eslint.org/docs/rules/dot-notation
-      "allowKeywords": false
+      "allowKeywords": true
     }],
     "eqeqeq": 2,                     // http://eslint.org/docs/rules/eqeqeq
     "guard-for-in": 2,               // http://eslint.org/docs/rules/guard-for-in

From 1282ee63df09442602588af5cedce850533b217a Mon Sep 17 00:00:00 2001
From: Josh Perez <josh@goatslacker.com>
Date: Mon, 27 Apr 2015 16:39:57 -0700
Subject: [PATCH 0178/1591] Add comment on why we're breaking a rule

---
 README.md | 1 +
 1 file changed, 1 insertion(+)

diff --git a/README.md b/README.md
index ee4ca8f8ee..834db2004c 100644
--- a/README.md
+++ b/README.md
@@ -250,6 +250,7 @@
       items = [];
 
       for (i = 0; i < length; i++) {
+        // use direct assignment in this case because we're micro-optimizing.
         items[i] = '<li>' + messages[i].message + '</li>';
       }
 

From a6e906a1b96067dd259f5b7a490692bfb521ab25 Mon Sep 17 00:00:00 2001
From: Andrew <kzsh@users.noreply.github.com>
Date: Thu, 23 Apr 2015 09:10:29 -0400
Subject: [PATCH 0179/1591] Clarifying what rule is being enforced.

Capitalization of constructors is not the rule in question here.  It makes it more clear what the offending difference is between `//bad` and `//good` to have consistent constructor capitalization.
---
 README.md | 7 +------
 1 file changed, 1 insertion(+), 6 deletions(-)

diff --git a/README.md b/README.md
index 3679b4a98e..f700a69971 100644
--- a/README.md
+++ b/README.md
@@ -1147,17 +1147,12 @@
     // bad
     var OBJEcttsssss = {};
     var this_is_my_object = {};
+    var o = {};
     function c() {}
-    var u = new user({
-      name: 'Bob Parr'
-    });
 
     // good
     var thisIsMyObject = {};
     function thisIsMyFunction() {}
-    var user = new User({
-      name: 'Bob Parr'
-    });
     ```
 
   - Use PascalCase when naming constructors or classes.

From 58cdc731f435db78f3c1f4d466284796128fb75b Mon Sep 17 00:00:00 2001
From: Josh Perez <josh.perez@airbnb.com>
Date: Thu, 2 Apr 2015 08:43:50 -0700
Subject: [PATCH 0180/1591] Initial ES6 style guide

---
 README.md     | 1085 +++++++++++++++++++++----------
 es5/README.md | 1712 +++++++++++++++++++++++++++++++++++++++++++++++++
 2 files changed, 2445 insertions(+), 352 deletions(-)
 create mode 100644 es5/README.md

diff --git a/README.md b/README.md
index 02ecc75ee6..c6b552c885 100644
--- a/README.md
+++ b/README.md
@@ -4,14 +4,21 @@
 
 *A mostly reasonable approach to JavaScript*
 
+[For our old ES5-only guide click here](es5/).
 
 ## Table of Contents
 
   1. [Types](#types)
+  1. [References](#references)
   1. [Objects](#objects)
   1. [Arrays](#arrays)
+  1. [Destructuring](#destructuring)
   1. [Strings](#strings)
   1. [Functions](#functions)
+  1. [Arrow Functions](#arrow-functions)
+  1. [Constructors](#constructors)
+  1. [Modules](#modules)
+  1. [Iterators and Generators](#iterators-and-generators)
   1. [Properties](#properties)
   1. [Variables](#variables)
   1. [Hoisting](#hoisting)
@@ -24,11 +31,11 @@
   1. [Type Casting & Coercion](#type-casting--coercion)
   1. [Naming Conventions](#naming-conventions)
   1. [Accessors](#accessors)
-  1. [Constructors](#constructors)
   1. [Events](#events)
   1. [Modules](#modules)
   1. [jQuery](#jquery)
   1. [ECMAScript 5 Compatibility](#ecmascript-5-compatibility)
+  1. [ECMAScript 6 Styles](#ecmascript-6-styles)
   1. [Testing](#testing)
   1. [Performance](#performance)
   1. [Resources](#resources)
@@ -50,8 +57,8 @@
     + `undefined`
 
     ```javascript
-    var foo = 1;
-    var bar = foo;
+    const foo = 1;
+    let bar = foo;
 
     bar = 9;
 
@@ -64,8 +71,8 @@
     + `function`
 
     ```javascript
-    var foo = [1, 2];
-    var bar = foo;
+    const foo = [1, 2];
+    const bar = foo;
 
     bar[0] = 9;
 
@@ -74,29 +81,77 @@
 
 **[⬆ back to top](#table-of-contents)**
 
+## References
+
+  - Use `const` for all of your references; avoid using `var`.
+
+  > Why? This ensures that you can't reassign your references (mutation), which can lead to bugs and difficult to comprehend code.
+
+    ```javascript
+    // bad
+    var a = 1;
+    var b = 2;
+
+    // good
+    const a = 1;
+    const b = 2;
+    ```
+
+  - If you must mutate references, use `let` instead of `var`.
+
+  > Why? `let` is block-scoped rather than function-scoped like `var`.
+
+    ```javascript
+    // bad
+    var count = 1;
+    if (true) {
+      count += 1;
+    }
+
+    // good, use the let.
+    let count = 1;
+    if (true) {
+      count += 1;
+    }
+    ```
+
+  - Note that both `let` and `const` are block-scoped.
+
+    ```javascript
+    // const and let only exist in the blocks they are defined in.
+    {
+      let a = 1;
+      const b = 1;
+    }
+    console.log(a); // ReferenceError
+    console.log(b); // ReferenceError
+    ```
+
+**[⬆ back to top](#table-of-contents)**
+
 ## Objects
 
   - Use the literal syntax for object creation.
 
     ```javascript
     // bad
-    var item = new Object();
+    const item = new Object();
 
     // good
-    var item = {};
+    const item = {};
     ```
 
   - Don't use [reserved words](http://es5.github.io/#x7.6.1) as keys. It won't work in IE8. [More info](https://github.com/airbnb/javascript/issues/61).
 
     ```javascript
     // bad
-    var superman = {
+    const superman = {
       default: { clark: 'kent' },
       private: true
     };
 
     // good
-    var superman = {
+    const superman = {
       defaults: { clark: 'kent' },
       hidden: true
     };
@@ -106,21 +161,118 @@
 
     ```javascript
     // bad
-    var superman = {
+    const superman = {
       class: 'alien'
     };
 
     // bad
-    var superman = {
+    const superman = {
       klass: 'alien'
     };
 
     // good
-    var superman = {
+    const superman = {
       type: 'alien'
     };
     ```
 
+  <a name="es6-computed-properties"></a>
+  - Use computed property names when creating objects with dynamic property names.
+
+  > Why? They allow you to define all the properties of an object in one place.
+
+    ```javascript
+
+    function getKey(k) {
+      return `a key named ${k}`;
+    }
+
+    // bad
+    const obj = {
+      id: 5,
+      name: 'San Francisco'
+    };
+    obj[getKey('enabled')] = true;
+
+    // good
+    const obj = {
+      id: 5,
+      name: 'San Francisco',
+      [getKey('enabled')]: true,
+    };
+    ```
+
+  <a name="es6-object-shorthand"></a>
+  - Use object method shorthand.
+
+    ```javascript
+    // bad
+    const atom = {
+      value: 1,
+
+      addValue: function (value) {
+        return atom.value + value;
+      },
+    };
+
+    // good
+    const atom = {
+      value: 1,
+
+      addValue(value) {
+        return atom.value + value;
+      },
+    };
+    ```
+
+  <a name="es6-object-concise"></a>
+  - Use property value shorthand.
+
+  > Why? It is shorter to write and descriptive.
+
+    ```javascript
+    const lukeSkywalker = 'Luke Skywalker';
+
+    // bad
+    const obj = {
+      lukeSkywalker: lukeSkywalker
+    };
+
+    // good
+    const obj = {
+      lukeSkywalker
+    };
+    ```
+
+  - Group your shorthand properties at the beginning of your object declaration.
+
+  > Why? It's easier to tell which properties are using the shorthand.
+
+    ```javascript
+    const anakinSkywalker = 'Anakin Skywalker';
+    const lukeSkywalker = 'Luke Skywalker';
+
+    // bad
+    const obj = {
+      episodeOne: 1,
+      twoJedisWalkIntoACantina: 2,
+      lukeSkywalker,
+      episodeThree: 3,
+      mayTheFourth: 4,
+      anakinSkywalker
+    };
+
+    // good
+    const obj = {
+      lukeSkywalker,
+      anakinSkywalker,
+      episodeOne: 1,
+      twoJedisWalkIntoACantina: 2,
+      episodeThree: 3,
+      mayTheFourth: 4
+    };
+    ```
+
 **[⬆ back to top](#table-of-contents)**
 
 ## Arrays
@@ -129,16 +281,16 @@
 
     ```javascript
     // bad
-    var items = new Array();
+    const items = new Array();
 
     // good
-    var items = [];
+    const items = [];
     ```
 
   - Use Array#push instead of direct assignment to add items to an array.
 
     ```javascript
-    var someStack = [];
+    const someStack = [];
 
 
     // bad
@@ -148,33 +300,96 @@
     someStack.push('abracadabra');
     ```
 
-  - When you need to copy an array use Array#slice. [jsPerf](http://jsperf.com/converting-arguments-to-an-array/7)
+  <a name="es6-array-spreads"></a>
+  - Use array spreads `...` to copy arrays.
 
     ```javascript
-    var len = items.length;
-    var itemsCopy = [];
-    var i;
-
     // bad
+    const len = items.length;
+    const itemsCopy = [];
+    let i;
+
     for (i = 0; i < len; i++) {
       itemsCopy[i] = items[i];
     }
 
     // good
-    itemsCopy = items.slice();
+    const itemsCopy = [...items];
+    ```
+  - To convert an array-like object to an array, use Array#from.
+
+    ```javascript
+    const foo = document.querySelectorAll('.foo');
+    const nodes = Array.from(foo);
     ```
 
-  - To convert an array-like object to an array, use Array#slice.
+**[⬆ back to top](#table-of-contents)**
+
+## Destructuring
+
+  - Use object destructuring when accessing and using multiple properties of an object.
+
+  > Why? Destructuring saves you from creating temporary references for those properties.
 
     ```javascript
-    function trigger() {
-      var args = Array.prototype.slice.call(arguments);
-      ...
+    // bad
+    function getFullName(user) {
+      const firstName = user.firstName;
+      const lastName = user.lastName;
+
+      return `${firstName} ${lastName}`;
+    }
+
+    // good
+    function getFullName(obj) {
+      const { firstName, lastName } = obj;
+      return `${firstName} ${lastName}`;
+    }
+
+    // best
+    function getFullName({ firstName, lastName }) {
+      return `${firstName} ${lastName}`;
     }
     ```
 
-**[⬆ back to top](#table-of-contents)**
+  - Use array destructuring.
+
+    ```javascript
+    const arr = [1, 2, 3, 4];
+
+    // bad
+    const first = arr[0];
+    const second = arr[1];
+
+    // good
+    const [first, second] = arr;
+    ```
 
+  - Use object destructuring for multiple return values, not array destructuring.
+
+  > Why? You can add new properties over time or change the order of things without breaking call sites.
+
+    ```javascript
+    function processInput(input) {
+      // then a miracle occurs
+      return [left, right, top, bottom];
+    }
+
+    // the caller needs to think about the order of return data
+    const [left, __, top] = processInput(input);
+
+    // good
+    function processInput(input) {
+      // then a miracle occurs
+      return { left, right, top, bottom };
+    }
+
+    // the caller selects only the data they need
+    const { left, right } = processInput(input);
+    ```
+
+
+**[⬆ back to top](#table-of-contents)**
 
 ## Strings
 
@@ -182,16 +397,16 @@
 
     ```javascript
     // bad
-    var name = "Bob Parr";
+    const name = "Bob Parr";
 
     // good
-    var name = 'Bob Parr';
+    const name = 'Bob Parr';
 
     // bad
-    var fullName = "Bob " + this.lastName;
+    const fullName = "Bob " + this.lastName;
 
     // good
-    var fullName = 'Bob ' + this.lastName;
+    const fullName = 'Bob ' + this.lastName;
     ```
 
   - Strings longer than 80 characters should be written across multiple lines using string concatenation.
@@ -199,62 +414,39 @@
 
     ```javascript
     // bad
-    var errorMessage = 'This is a super long error that was thrown because of Batman. When you stop to think about how Batman had anything to do with this, you would get nowhere fast.';
+    const errorMessage = 'This is a super long error that was thrown because of Batman. When you stop to think about how Batman had anything to do with this, you would get nowhere fast.';
 
     // bad
-    var errorMessage = 'This is a super long error that was thrown because \
+    const errorMessage = 'This is a super long error that was thrown because \
     of Batman. When you stop to think about how Batman had anything to do \
     with this, you would get nowhere \
     fast.';
 
     // good
-    var errorMessage = 'This is a super long error that was thrown because ' +
+    const errorMessage = 'This is a super long error that was thrown because ' +
       'of Batman. When you stop to think about how Batman had anything to do ' +
       'with this, you would get nowhere fast.';
     ```
 
-  - When programmatically building up a string, use Array#join instead of string concatenation. Mostly for IE: [jsPerf](http://jsperf.com/string-vs-array-concat/2).
-
-    ```javascript
-    var items;
-    var messages;
-    var length;
-    var i;
-
-    messages = [{
-      state: 'success',
-      message: 'This one worked.'
-    }, {
-      state: 'success',
-      message: 'This one worked as well.'
-    }, {
-      state: 'error',
-      message: 'This one did not work.'
-    }];
+  <a name="es6-template-literals"></a>
+  - When programmatically building up strings, use template strings instead of concatenation.
 
-    length = messages.length;
+  > Why? Template strings give you a readable, concise syntax with proper newlines and string interpolation features.
 
+    ```javascript
     // bad
-    function inbox(messages) {
-      items = '<ul>';
-
-      for (i = 0; i < length; i++) {
-        items += '<li>' + messages[i].message + '</li>';
-      }
+    function sayHi(name) {
+      return 'How are you, ' + name + '?';
+    }
 
-      return items + '</ul>';
+    // bad
+    function sayHi(name) {
+      return ['How are you, ', name, '?'].join();
     }
 
     // good
-    function inbox(messages) {
-      items = [];
-
-      for (i = 0; i < length; i++) {
-        // use direct assignment in this case because we're micro-optimizing.
-        items[i] = '<li>' + messages[i].message + '</li>';
-      }
-
-      return '<ul>' + items.join('') + '</ul>';
+    function sayHi(name) {
+      return `How are you, ${name}?`;
     }
     ```
 
@@ -263,21 +455,25 @@
 
 ## Functions
 
-  - Function expressions:
+  - Use function declarations instead of function expressions.
+
+  > Why? Function declarations are named, so they're easier to identify in call stacks. Also, the whole body of a function declaration is hoisted, whereas only the reference of a function expression is hoisted. This rule makes it possible to always use [Arrow Functions](#arrow-functions) in place of function expressions.
 
     ```javascript
-    // anonymous function expression
-    var anonymous = function() {
-      return true;
+    // bad
+    const foo = function () {
     };
 
-    // named function expression
-    var named = function named() {
-      return true;
-    };
+    // good
+    function foo() {
+    }
+    ```
 
+  - Function expressions:
+
+    ```javascript
     // immediately-invoked function expression (IIFE)
-    (function() {
+    (() => {
       console.log('Welcome to the Internet. Please follow me.');
     })();
     ```
@@ -294,9 +490,9 @@
     }
 
     // good
-    var test;
+    let test;
     if (currentUser) {
-      test = function test() {
+      test = () => {
         console.log('Yup.');
       };
     }
@@ -316,31 +512,320 @@
     }
     ```
 
+  <a name="es6-rest"></a>
+  - Never use `arguments`, opt to use rest syntax `...` instead.
+
+  > Why? `...` is explicit about which arguments you want pulled. Plus rest arguments are a real Array and not Array-like like `arguments`.
+
+    ```javascript
+    // bad
+    function concatenateAll() {
+      const args = Array.prototype.slice.call(arguments);
+      return args.join('');
+    }
+
+    // good
+    function concatenateAll(...args) {
+      return args.join('');
+    }
+    ```
+
+  <a name="es6-default-parameters"></a>
+  - Use default parameter syntax rather than mutating function arguments.
+
+    ```javascript
+    // really bad
+    function handleThings(opts) {
+      // No! We shouldn't mutate function arguments.
+      // Double bad: if opts is falsy it'll be set to an object which may
+      // be what you want but it can introduce subtle bugs.
+      opts = opts || {};
+      // ...
+    }
+
+    // still bad
+    function handleThings(opts) {
+      if (opts === void 0) {
+        opts = {};
+      }
+      // ...
+    }
+
+    // good
+    function handleThings(opts = {}) {
+      // ...
+    }
+    ```
+
+**[⬆ back to top](#table-of-contents)**
+
+## Arrow Functions
+
+  - When you must use function expressions (as when passing an anonymous function), use arrow function notation.
+
+  > Why? It creates a version of the function that executes in the context of `this`, which is usually what you want, and is a more concise syntax.
+
+  > Why not? If you have a fairly complicated function, you might move that logic out into its own function declaration.
+
+    ```javascript
+    // bad
+    [1, 2, 3].map(function (x) {
+      return x * x;
+    });
+
+    // good
+    [1, 2, 3].map((x) => {
+      return x * x
+    });
+    ```
+
+  - If the function body fits on one line, feel free to omit the braces and use implicit return. Otherwise, add the braces and use a `return` statement.
+
+  > Why? Syntactic sugar. It reads well when multiple functions are chained together.
+
+  > Why not? If you plan on returning an object.
+
+    ```javascript
+    // good
+    [1, 2, 3].map((x) => x * x);
+
+    // good
+    [1, 2, 3].map((x) => {
+      return { number: x };
+    });
+    ```
+
+  - Always use parentheses around the arguments. Omitting the parentheses makes the functions less readable and only works for single arguments.
+
+  > Why? These declarations read better with parentheses. They are also required when you have multiple parameters so this enforces consistency.
+
+    ```javascript
+    // bad
+    [1, 2, 3].map(x => x * x);
+
+    // good
+    [1, 2, 3].map((x) => x * x);
+    ```
+
 **[⬆ back to top](#table-of-contents)**
 
 
+## Constructors
+
+  - Always use `class`. Avoid manipulating `prototype` directly.
+
+  > Why? `class` syntax is more concise and easier to reason about.
+
+    ```javascript
+    // bad
+    function Queue(contents = []) {
+      this._queue = [...contents];
+    }
+    Queue.prototype.pop = function() {
+      const value = this._queue[0];
+      this._queue.splice(0, 1);
+      return value;
+    }
+
+
+    // good
+    class Queue {
+      constructor(contents = []) {
+        this._queue = [...contents];
+      }
+      pop() {
+        const value = this._queue[0];
+        this._queue.splice(0, 1);
+        return value;
+      }
+    }
+    ```
+
+  - Use `extends` for inheritance.
+
+  > Why? It is a built-in way to inherit prototype functionality without breaking `instanceof`.
+
+    ```javascript
+    // bad
+    const inherits = require('inherits');
+    function PeekableQueue(contents) {
+      Queue.apply(this, contents);
+    }
+    inherits(PeekableQueue, Queue);
+    PeekableQueue.prototype.peek = function() {
+      return this._queue[0];
+    }
+
+    // good
+    class PeekableQueue extends Queue {
+      peek() {
+        return this._queue[0];
+      }
+    }
+    ```
+
+  - Methods can return `this` to help with method chaining.
+
+    ```javascript
+    // bad
+    Jedi.prototype.jump = function() {
+      this.jumping = true;
+      return true;
+    };
+
+    Jedi.prototype.setHeight = function(height) {
+      this.height = height;
+    };
+
+    const luke = new Jedi();
+    luke.jump(); // => true
+    luke.setHeight(20); // => undefined
+
+    // good
+    class Jedi {
+      jump() {
+        this.jumping = true;
+        return this;
+      }
+
+      setHeight(height) {
+        this.height = height;
+        return this;
+      }
+    }
+
+    const luke = new Jedi();
+
+    luke.jump()
+      .setHeight(20);
+    ```
+
+
+  - It's okay to write a custom toString() method, just make sure it works successfully and causes no side effects.
+
+    ```javascript
+    class Jedi {
+      contructor(options = {}) {
+        this.name = options.name || 'no name';
+      }
+
+      getName() {
+        return this.name;
+      }
+
+      toString() {
+        return 'Jedi - ' + this.getName();
+      }
+    }
+    ```
+
+**[⬆ back to top](#table-of-contents)**
+
+
+## Modules
+
+  - Always use modules (`import`/`export`) over a non-standard module system. You can always transpile to your preferred module system.
+
+  > Why? Modules are the future, let's start using the future now.
+
+    ```javascript
+    // bad
+    const AirbnbStyleGuide = require('./AirbnbStyleGuide');
+    module.exports = AirbnbStyleGuide.es6;
+
+    // ok
+    import AirbnbStyleGuide from './AirbnbStyleGuide';
+    export default AirbnbStyleGuide.es6;
+
+    // best
+    import { es6 } from './AirbnbStyleGuide';
+    export default es6;
+    ```
+
+  - Do not use wildcard imports.
+
+  > Why? This makes sure you have a single default export.
+
+    ```javascript
+    // bad
+    import * as AirbnbStyleGuide from './AirbnbStyleGuide';
+
+    // good
+    import AirbnbStyleGuide from './AirbnbStyleGuide';
+    ```
+
+  - And do not export directly from an import.
+
+  > Why? Although the one-liner is concise, having one clear way to import and one clear way to export makes things consistent.
+
+    ```javascript
+    // bad
+    // filename es6.js
+    export default { es6 } from './airbnbStyleGuide';
+
+    // good
+    // filename es6.js
+    import { es6 } from './AirbnbStyleGuide';
+    export default es6;
+    ```
+
+**[⬆ back to top](#table-of-contents)**
+
+## Iterators and Generators
+
+  - Don't use iterators. Prefer JavaScript's function constructors instead of loops like `for-of`.
+
+  > Why? This enforces our immutable rule. Dealing with pure functions that return values is easier to reason about than side-effects.
+
+    ```javascript
+    const numbers = [1, 2, 3, 4, 5];
+
+    // bad
+    let sum = 0;
+    for (let num of numbers) {
+      sum += num;
+    }
+
+    sum === 10;
+
+    // good
+    let sum = 0;
+    numbers.forEach((num) => sum += num);
+    sum === 10;
+
+    // best (use the functional force)
+    const sum = numbers.reduce((total, num) => total + num, 0);
+    sum === 10;
+    ```
+
+  - Don't use generators.
+
+  > Why? They don't transpile well to ES5.
+
+**[⬆ back to top](#table-of-contents)**
+
 
 ## Properties
 
   - Use dot notation when accessing properties.
 
     ```javascript
-    var luke = {
+    const luke = {
       jedi: true,
       age: 28
     };
 
     // bad
-    var isJedi = luke['jedi'];
+    const isJedi = luke['jedi'];
 
     // good
-    var isJedi = luke.jedi;
+    const isJedi = luke.jedi;
     ```
 
   - Use subscript notation `[]` when accessing properties with a variable.
 
     ```javascript
-    var luke = {
+    const luke = {
       jedi: true,
       age: 28
     };
@@ -349,7 +834,7 @@
       return luke[prop];
     }
 
-    var isJedi = getProp('jedi');
+    const isJedi = getProp('jedi');
     ```
 
 **[⬆ back to top](#table-of-contents)**
@@ -357,90 +842,77 @@
 
 ## Variables
 
-  - Always use `var` to declare variables. Not doing so will result in global variables. We want to avoid polluting the global namespace. Captain Planet warned us of that.
+  - Always use `const` to declare variables. Not doing so will result in global variables. We want to avoid polluting the global namespace. Captain Planet warned us of that.
 
     ```javascript
     // bad
     superPower = new SuperPower();
 
     // good
-    var superPower = new SuperPower();
+    const superPower = new SuperPower();
     ```
 
-  - Use one `var` declaration per variable.
-    It's easier to add new variable declarations this way, and you never have
-    to worry about swapping out a `;` for a `,` or introducing punctuation-only
-    diffs.
+  - Use one `const` declaration per variable.
+
+    > Why? It's easier to add new variable declarations this way, and you never have to worry about swapping out a `;` for a `,` or introducing punctuation-only diffs.
 
     ```javascript
     // bad
-    var items = getItems(),
+    const items = getItems(),
         goSportsTeam = true,
         dragonball = 'z';
 
     // bad
     // (compare to above, and try to spot the mistake)
-    var items = getItems(),
+    const items = getItems(),
         goSportsTeam = true;
         dragonball = 'z';
 
     // good
-    var items = getItems();
-    var goSportsTeam = true;
-    var dragonball = 'z';
+    const items = getItems();
+    const goSportsTeam = true;
+    const dragonball = 'z';
     ```
 
-  - Declare unassigned variables last. This is helpful when later on you might need to assign a variable depending on one of the previous assigned variables.
+  - Group all your `const`s and then group all your `let`s.
+
+  > Why? This is helpful when later on you might need to assign a variable depending on one of the previous assigned variables.
 
     ```javascript
     // bad
-    var i, len, dragonball,
+    let i, len, dragonball,
         items = getItems(),
         goSportsTeam = true;
 
     // bad
-    var i;
-    var items = getItems();
-    var dragonball;
-    var goSportsTeam = true;
-    var len;
+    let i;
+    let items = getItems();
+    let dragonball;
+    let goSportsTeam = true;
+    let len;
 
     // good
-    var items = getItems();
-    var goSportsTeam = true;
-    var dragonball;
-    var length;
-    var i;
+    const goSportsTeam = true;
+    const items = getItems();
+    let dragonball;
+    let i;
+    let length;
     ```
 
-  - Assign variables at the top of their scope. This helps avoid issues with variable declaration and assignment hoisting related issues.
+  - Assign variables where you need them, but place them in a reasonable place.
 
-    ```javascript
-    // bad
-    function() {
-      test();
-      console.log('doing stuff..');
-
-      //..other stuff..
-
-      var name = getName();
-
-      if (name === 'test') {
-        return false;
-      }
-
-      return name;
-    }
+  > Why? `let` and `const` are block scoped and not function scoped.
 
+    ```javascript
     // good
     function() {
-      var name = getName();
-
       test();
       console.log('doing stuff..');
 
       //..other stuff..
 
+      const name = getName();
+
       if (name === 'test') {
         return false;
       }
@@ -449,10 +921,10 @@
     }
 
     // bad - unnessary function call
-    function() {
-      var name = getName();
+    function(hasName) {
+      const name = getName();
 
-      if (!arguments.length) {
+      if (!hasName) {
         return false;
       }
 
@@ -462,14 +934,12 @@
     }
 
     // good
-    function() {
-      var name;
-
-      if (!arguments.length) {
+    function(hasName) {
+      if (!hasName) {
         return false;
       }
 
-      name = getName();
+      const name = getName();
       this.setFirstName(name);
 
       return true;
@@ -481,7 +951,7 @@
 
 ## Hoisting
 
-  - Variable declarations get hoisted to the top of their scope, but their assignment does not.
+  - `var` declarations get hoisted to the top of their scope, but their assignment does not. `const` and `let` declarations suffer from [Temporal Dead Zones (TDZ)](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/let#Temporal_dead_zone_and_errors_with_let). Also see why [typeof is no longer safe](http://es-discourse.com/t/why-typeof-is-no-longer-safe/15).
 
     ```javascript
     // we know this wouldn't work (assuming there
@@ -503,10 +973,17 @@
     // declaration to the top of the scope,
     // which means our example could be rewritten as:
     function example() {
-      var declaredButNotAssigned;
+      let declaredButNotAssigned;
       console.log(declaredButNotAssigned); // => undefined
       declaredButNotAssigned = true;
     }
+
+    // using const and let
+    function example() {
+      console.log(declaredButNotAssigned); // => throws a ReferenceError
+      console.log(typeof declaredButNotAssigned); // => throws a ReferenceError
+      const declaredButNotAssigned = true;
+    }
     ```
 
   - Anonymous function expressions hoist their variable name, but not the function assignment.
@@ -517,7 +994,7 @@
 
       anonymous(); // => TypeError anonymous is not a function
 
-      var anonymous = function() {
+      let anonymous = function() {
         console.log('anonymous function expression');
       };
     }
@@ -533,7 +1010,7 @@
 
       superPower(); // => ReferenceError superPower is not defined
 
-      var named = function superPower() {
+      let named = function superPower() {
         console.log('Flying');
       };
     }
@@ -545,7 +1022,7 @@
 
       named(); // => TypeError named is not a function
 
-      var named = function named() {
+      let named = function named() {
         console.log('named');
       }
     }
@@ -568,7 +1045,6 @@
 **[⬆ back to top](#table-of-contents)**
 
 
-
 ## Comparison Operators & Equality
 
   - Use `===` and `!==` over `==` and `!=`.
@@ -707,17 +1183,17 @@
 
     ```javascript
     // bad
-    var active = true;  // is current tab
+    const active = true;  // is current tab
 
     // good
     // is current tab
-    var active = true;
+    const active = true;
 
     // bad
     function getType() {
       console.log('fetching type...');
       // set the default type to 'no type'
-      var type = this._type || 'no type';
+      const type = this._type || 'no type';
 
       return type;
     }
@@ -727,7 +1203,7 @@
       console.log('fetching type...');
 
       // set the default type to 'no type'
-      var type = this._type || 'no type';
+      const type = this._type || 'no type';
 
       return type;
     }
@@ -769,17 +1245,17 @@
     ```javascript
     // bad
     function() {
-    ∙∙∙∙var name;
+    ∙∙∙∙const name;
     }
 
     // bad
     function() {
-    ∙var name;
+    ∙const name;
     }
 
     // good
     function() {
-    ∙∙var name;
+    ∙∙const name;
     }
     ```
 
@@ -837,10 +1313,10 @@
 
     ```javascript
     // bad
-    var x=y+5;
+    const x=y+5;
 
     // good
-    var x = y + 5;
+    const x = y + 5;
     ```
 
   - End files with a single newline character.
@@ -891,13 +1367,13 @@
         .updateCount();
 
     // bad
-    var leds = stage.selectAll('.led').data(data).enter().append('svg:svg').classed('led', true)
+    const leds = stage.selectAll('.led').data(data).enter().append('svg:svg').class('led', true)
         .attr('width', (radius + margin) * 2).append('svg:g')
         .attr('transform', 'translate(' + (radius + margin) + ',' + (radius + margin) + ')')
         .call(tron.led);
 
     // good
-    var leds = stage.selectAll('.led')
+    const leds = stage.selectAll('.led')
         .data(data)
       .enter().append('svg:svg')
         .classed('led', true)
@@ -924,7 +1400,7 @@
     return baz;
 
     // bad
-    var obj = {
+    const obj = {
       foo: function() {
       },
       bar: function() {
@@ -933,7 +1409,7 @@
     return obj;
 
     // good
-    var obj = {
+    const obj = {
       foo: function() {
       },
 
@@ -953,21 +1429,21 @@
 
     ```javascript
     // bad
-    var story = [
+    const story = [
         once
       , upon
       , aTime
     ];
 
     // good
-    var story = [
+    const story = [
       once,
       upon,
       aTime
     ];
 
     // bad
-    var hero = {
+    const hero = {
         firstName: 'Bob'
       , lastName: 'Parr'
       , heroName: 'Mr. Incredible'
@@ -975,7 +1451,7 @@
     };
 
     // good
-    var hero = {
+    const hero = {
       firstName: 'Bob',
       lastName: 'Parr',
       heroName: 'Mr. Incredible',
@@ -989,23 +1465,23 @@
 
     ```javascript
     // bad
-    var hero = {
+    const hero = {
       firstName: 'Kevin',
       lastName: 'Flynn',
     };
 
-    var heroes = [
+    const heroes = [
       'Batman',
       'Superman',
     ];
 
     // good
-    var hero = {
+    const hero = {
       firstName: 'Kevin',
       lastName: 'Flynn'
     };
 
-    var heroes = [
+    const heroes = [
       'Batman',
       'Superman'
     ];
@@ -1021,19 +1497,19 @@
     ```javascript
     // bad
     (function() {
-      var name = 'Skywalker'
+      const name = 'Skywalker'
       return name
     })()
 
     // good
-    (function() {
-      var name = 'Skywalker';
+    (() => {
+      const name = 'Skywalker';
       return name;
     })();
 
     // good (guards against the function becoming an argument when two files with IIFEs are concatenated)
-    ;(function() {
-      var name = 'Skywalker';
+    ;(() => {
+      const name = 'Skywalker';
       return name;
     })();
     ```
@@ -1052,40 +1528,40 @@
     //  => this.reviewScore = 9;
 
     // bad
-    var totalScore = this.reviewScore + '';
+    const totalScore = this.reviewScore + '';
 
     // good
-    var totalScore = '' + this.reviewScore;
+    const totalScore = '' + this.reviewScore;
 
     // bad
-    var totalScore = '' + this.reviewScore + ' total score';
+    const totalScore = '' + this.reviewScore + ' total score';
 
     // good
-    var totalScore = this.reviewScore + ' total score';
+    const totalScore = this.reviewScore + ' total score';
     ```
 
   - Use `parseInt` for Numbers and always with a radix for type casting.
 
     ```javascript
-    var inputValue = '4';
+    const inputValue = '4';
 
     // bad
-    var val = new Number(inputValue);
+    const val = new Number(inputValue);
 
     // bad
-    var val = +inputValue;
+    const val = +inputValue;
 
     // bad
-    var val = inputValue >> 0;
+    const val = inputValue >> 0;
 
     // bad
-    var val = parseInt(inputValue);
+    const val = parseInt(inputValue);
 
     // good
-    var val = Number(inputValue);
+    const val = Number(inputValue);
 
     // good
-    var val = parseInt(inputValue, 10);
+    const val = parseInt(inputValue, 10);
     ```
 
   - If for whatever reason you are doing something wild and `parseInt` is your bottleneck and need to use Bitshift for [performance reasons](http://jsperf.com/coercion-vs-casting/3), leave a comment explaining why and what you're doing.
@@ -1097,7 +1573,7 @@
      * Bitshifting the String to coerce it to a
      * Number made it a lot faster.
      */
-    var val = inputValue >> 0;
+    const val = inputValue >> 0;
     ```
 
   - **Note:** Be careful when using bitshift operations. Numbers are represented as [64-bit values](http://es5.github.io/#x4.3.19), but Bitshift operations always return a 32-bit integer ([source](http://es5.github.io/#x11.7)). Bitshift can lead to unexpected behavior for integer values larger than 32 bits. [Discussion](https://github.com/airbnb/javascript/issues/109). Largest signed 32-bit Int is 2,147,483,647:
@@ -1111,16 +1587,16 @@
   - Booleans:
 
     ```javascript
-    var age = 0;
+    const age = 0;
 
     // bad
-    var hasAge = new Boolean(age);
+    const hasAge = new Boolean(age);
 
     // good
-    var hasAge = Boolean(age);
+    const hasAge = Boolean(age);
 
     // good
-    var hasAge = !!age;
+    const hasAge = !!age;
     ```
 
 **[⬆ back to top](#table-of-contents)**
@@ -1146,13 +1622,12 @@
 
     ```javascript
     // bad
-    var OBJEcttsssss = {};
-    var this_is_my_object = {};
-    var o = {};
+    const OBJEcttsssss = {};
+    const this_is_my_object = {};
     function c() {}
 
     // good
-    var thisIsMyObject = {};
+    const thisIsMyObject = {};
     function thisIsMyFunction() {}
     ```
 
@@ -1164,16 +1639,18 @@
       this.name = options.name;
     }
 
-    var bad = new user({
+    const bad = new user({
       name: 'nope'
     });
 
     // good
-    function User(options) {
-      this.name = options.name;
+    class User {
+      constructor(options) {
+        this.name = options.name;
+      }
     }
 
-    var good = new User({
+    const good = new User({
       name: 'yup'
     });
     ```
@@ -1189,50 +1666,33 @@
     this._firstName = 'Panda';
     ```
 
-  - When saving a reference to `this` use `_this`.
+  - Don't save references to `this`. Use arrow functions or Function#bind.
 
     ```javascript
     // bad
-    function() {
-      var self = this;
+    function foo() {
+      const self = this;
       return function() {
         console.log(self);
       };
     }
 
     // bad
-    function() {
-      var that = this;
+    function foo() {
+      const that = this;
       return function() {
         console.log(that);
       };
     }
 
     // good
-    function() {
-      var _this = this;
-      return function() {
-        console.log(_this);
+    function foo() {
+      return () => {
+        console.log(this);
       };
     }
     ```
 
-  - Name your functions. This is helpful for stack traces.
-
-    ```javascript
-    // bad
-    var log = function(msg) {
-      console.log(msg);
-    };
-
-    // good
-    var log = function log(msg) {
-      console.log(msg);
-    };
-    ```
-
-  - **Note:** IE8 and below exhibit some quirks with named function expressions.  See [http://kangax.github.io/nfe/](http://kangax.github.io/nfe/) for more info.
-
   - If your file exports a single class, your filename should be exactly the name of the class.
     ```javascript
     // file contents
@@ -1243,15 +1703,36 @@
 
     // in some other file
     // bad
-    var CheckBox = require('./checkBox');
+    const CheckBox = require('./checkBox');
 
     // bad
-    var CheckBox = require('./check_box');
+    const CheckBox = require('./check_box');
 
     // good
-    var CheckBox = require('./CheckBox');
+    const CheckBox = require('./CheckBox');
     ```
 
+  - Use camelCase when you export-default a function. Your filename should be identical to your function's name.
+
+    ```javascript
+    function makeStyleGuide() {
+    }
+
+    export default makeStyleGuide;
+    ```
+
+  - Use PascalCase when you export a singleton / function library / bare object.
+
+    ```javascript
+    const AirbnbStyleGuide = {
+      es6: {
+      }
+    };
+
+    export default AirbnbStyleGuide;
+    ```
+
+
 **[⬆ back to top](#table-of-contents)**
 
 
@@ -1291,104 +1772,20 @@
   - It's okay to create get() and set() functions, but be consistent.
 
     ```javascript
-    function Jedi(options) {
-      options || (options = {});
-      var lightsaber = options.lightsaber || 'blue';
-      this.set('lightsaber', lightsaber);
-    }
-
-    Jedi.prototype.set = function(key, val) {
-      this[key] = val;
-    };
-
-    Jedi.prototype.get = function(key) {
-      return this[key];
-    };
-    ```
-
-**[⬆ back to top](#table-of-contents)**
-
-
-## Constructors
-
-  - Assign methods to the prototype object, instead of overwriting the prototype with a new object. Overwriting the prototype makes inheritance impossible: by resetting the prototype you'll overwrite the base!
-
-    ```javascript
-    function Jedi() {
-      console.log('new jedi');
-    }
-
-    // bad
-    Jedi.prototype = {
-      fight: function fight() {
-        console.log('fighting');
-      },
-
-      block: function block() {
-        console.log('blocking');
+    class Jedi {
+      constructor(options = {}) {
+        const lightsaber = options.lightsaber || 'blue';
+        this.set('lightsaber', lightsaber);
       }
-    };
-
-    // good
-    Jedi.prototype.fight = function fight() {
-      console.log('fighting');
-    };
-
-    Jedi.prototype.block = function block() {
-      console.log('blocking');
-    };
-    ```
 
-  - Methods can return `this` to help with method chaining.
-
-    ```javascript
-    // bad
-    Jedi.prototype.jump = function() {
-      this.jumping = true;
-      return true;
-    };
-
-    Jedi.prototype.setHeight = function(height) {
-      this.height = height;
-    };
-
-    var luke = new Jedi();
-    luke.jump(); // => true
-    luke.setHeight(20); // => undefined
-
-    // good
-    Jedi.prototype.jump = function() {
-      this.jumping = true;
-      return this;
-    };
-
-    Jedi.prototype.setHeight = function(height) {
-      this.height = height;
-      return this;
-    };
-
-    var luke = new Jedi();
-
-    luke.jump()
-      .setHeight(20);
-    ```
-
-
-  - It's okay to write a custom toString() method, just make sure it works successfully and causes no side effects.
+      set(key, val) {
+        this[key] = val;
+      }
 
-    ```javascript
-    function Jedi(options) {
-      options || (options = {});
-      this.name = options.name || 'no name';
+      get(key) {
+        return this[key];
+      }
     }
-
-    Jedi.prototype.getName = function getName() {
-      return this.name;
-    };
-
-    Jedi.prototype.toString = function toString() {
-      return 'Jedi - ' + this.getName();
-    };
     ```
 
 **[⬆ back to top](#table-of-contents)**
@@ -1398,7 +1795,7 @@
 
   - When attaching data payloads to events (whether DOM events or something more proprietary like Backbone events), pass a hash instead of a raw value. This allows a subsequent contributor to add more data to the event payload without finding and updating every handler for the event. For example, instead of:
 
-    ```js
+    ```javascript
     // bad
     $(this).trigger('listingUpdated', listing.id);
 
@@ -1411,7 +1808,7 @@
 
     prefer:
 
-    ```js
+    ```javascript
     // good
     $(this).trigger('listingUpdated', { listingId : listing.id });
 
@@ -1425,47 +1822,16 @@
   **[⬆ back to top](#table-of-contents)**
 
 
-## Modules
-
-  - The module should start with a `!`. This ensures that if a malformed module forgets to include a final semicolon there aren't errors in production when the scripts get concatenated. [Explanation](https://github.com/airbnb/javascript/issues/44#issuecomment-13063933)
-  - The file should be named with camelCase, live in a folder with the same name, and match the name of the single export.
-  - Add a method called `noConflict()` that sets the exported module to the previous version and returns this one.
-  - Always declare `'use strict';` at the top of the module.
-
-    ```javascript
-    // fancyInput/fancyInput.js
-
-    !function(global) {
-      'use strict';
-
-      var previousFancyInput = global.FancyInput;
-
-      function FancyInput(options) {
-        this.options = options || {};
-      }
-
-      FancyInput.noConflict = function noConflict() {
-        global.FancyInput = previousFancyInput;
-        return FancyInput;
-      };
-
-      global.FancyInput = FancyInput;
-    }(this);
-    ```
-
-**[⬆ back to top](#table-of-contents)**
-
-
 ## jQuery
 
   - Prefix jQuery object variables with a `$`.
 
     ```javascript
     // bad
-    var sidebar = $('.sidebar');
+    const sidebar = $('.sidebar');
 
     // good
-    var $sidebar = $('.sidebar');
+    const $sidebar = $('.sidebar');
     ```
 
   - Cache jQuery lookups.
@@ -1484,7 +1850,7 @@
 
     // good
     function setSidebar() {
-      var $sidebar = $('.sidebar');
+      const $sidebar = $('.sidebar');
       $sidebar.hide();
 
       // ...stuff...
@@ -1524,6 +1890,25 @@
 
 **[⬆ back to top](#table-of-contents)**
 
+## ECMAScript 6 Styles
+
+This is a collection of links to the various es6 features.
+
+1. [Arrow Functions](#arrow-functions)
+1. [Classes](#constructors)
+1. [Object Shorthand](#es6-object-shorthand)
+1. [Object Concise](#es6-object-concise)
+1. [Object Computed Properties](#es6-computed-properties)
+1. [Template Strings](#es6-template-literals)
+1. [Destructuring](#destructuring)
+1. [Default Parameters](#es6-default-parameters)
+1. [Rest](#es6-rest)
+1. [Array Spreads](#es6-array-spreads)
+1. [Let and Const](#references)
+1. [Iterators and Generators](#iterators-and-generators)
+1. [Modules](#modules)
+
+**[⬆ back to top](#table-of-contents)**
 
 ## Testing
 
@@ -1570,7 +1955,6 @@
   - [Google JavaScript Style Guide](http://google-styleguide.googlecode.com/svn/trunk/javascriptguide.xml)
   - [jQuery Core Style Guidelines](http://docs.jquery.com/JQuery_Core_Style_Guidelines)
   - [Principles of Writing Consistent, Idiomatic JavaScript](https://github.com/rwldrn/idiomatic.js/)
-  - [JavaScript Standard Style](https://github.com/feross/standard)
 
 **Other Styles**
 
@@ -1603,8 +1987,6 @@
   - [JSBooks](http://jsbooks.revolunet.com/) - Julien Bouquillon
   - [Third Party JavaScript](http://manning.com/vinegar/) - Ben Vinegar and Anton Kovalyov
   - [Effective JavaScript: 68 Specific Ways to Harness the Power of JavaScript](http://amzn.com/0321812182) - David Herman
-  - [Eloquent JavaScript](http://eloquentjavascript.net) - Marijn Haverbeke
-  - [You Don't Know JS](https://github.com/getify/You-Dont-Know-JS) - Kyle Simpson
 
 **Blogs**
 
@@ -1661,7 +2043,6 @@
   - **National Geographic**: [natgeo/javascript](https://github.com/natgeo/javascript)
   - **National Park Service**: [nationalparkservice/javascript](https://github.com/nationalparkservice/javascript)
   - **Nimbl3**: [nimbl3/javascript](https://github.com/nimbl3/javascript)
-  - **Nordic Venture Family**: [CodeDistillery/javascript](https://github.com/CodeDistillery/javascript)
   - **Orion Health**: [orionhealth/javascript](https://github.com/orionhealth/javascript)
   - **Peerby**: [Peerby/javascript](https://github.com/Peerby/javascript)
   - **Razorfish**: [razorfish/javascript-style-guide](https://github.com/razorfish/javascript-style-guide)
diff --git a/es5/README.md b/es5/README.md
new file mode 100644
index 0000000000..bcbe6489c3
--- /dev/null
+++ b/es5/README.md
@@ -0,0 +1,1712 @@
+[![Gitter](https://badges.gitter.im/Join Chat.svg)](https://gitter.im/airbnb/javascript?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge)
+
+# Airbnb JavaScript Style Guide() {
+
+*A mostly reasonable approach to JavaScript*
+
+
+## Table of Contents
+
+  1. [Types](#types)
+  1. [Objects](#objects)
+  1. [Arrays](#arrays)
+  1. [Strings](#strings)
+  1. [Functions](#functions)
+  1. [Properties](#properties)
+  1. [Variables](#variables)
+  1. [Hoisting](#hoisting)
+  1. [Comparison Operators & Equality](#comparison-operators--equality)
+  1. [Blocks](#blocks)
+  1. [Comments](#comments)
+  1. [Whitespace](#whitespace)
+  1. [Commas](#commas)
+  1. [Semicolons](#semicolons)
+  1. [Type Casting & Coercion](#type-casting--coercion)
+  1. [Naming Conventions](#naming-conventions)
+  1. [Accessors](#accessors)
+  1. [Constructors](#constructors)
+  1. [Events](#events)
+  1. [Modules](#modules)
+  1. [jQuery](#jquery)
+  1. [ECMAScript 5 Compatibility](#ecmascript-5-compatibility)
+  1. [Testing](#testing)
+  1. [Performance](#performance)
+  1. [Resources](#resources)
+  1. [In the Wild](#in-the-wild)
+  1. [Translation](#translation)
+  1. [The JavaScript Style Guide Guide](#the-javascript-style-guide-guide)
+  1. [Chat With Us About Javascript](#chat-with-us-about-javascript)
+  1. [Contributors](#contributors)
+  1. [License](#license)
+
+## Types
+
+  - **Primitives**: When you access a primitive type you work directly on its value.
+
+    + `string`
+    + `number`
+    + `boolean`
+    + `null`
+    + `undefined`
+
+    ```javascript
+    var foo = 1;
+    var bar = foo;
+
+    bar = 9;
+
+    console.log(foo, bar); // => 1, 9
+    ```
+  - **Complex**: When you access a complex type you work on a reference to its value.
+
+    + `object`
+    + `array`
+    + `function`
+
+    ```javascript
+    var foo = [1, 2];
+    var bar = foo;
+
+    bar[0] = 9;
+
+    console.log(foo[0], bar[0]); // => 9, 9
+    ```
+
+**[⬆ back to top](#table-of-contents)**
+
+## Objects
+
+  - Use the literal syntax for object creation.
+
+    ```javascript
+    // bad
+    var item = new Object();
+
+    // good
+    var item = {};
+    ```
+
+  - Don't use [reserved words](http://es5.github.io/#x7.6.1) as keys. It won't work in IE8. [More info](https://github.com/airbnb/javascript/issues/61).
+
+    ```javascript
+    // bad
+    var superman = {
+      default: { clark: 'kent' },
+      private: true
+    };
+
+    // good
+    var superman = {
+      defaults: { clark: 'kent' },
+      hidden: true
+    };
+    ```
+
+  - Use readable synonyms in place of reserved words.
+
+    ```javascript
+    // bad
+    var superman = {
+      class: 'alien'
+    };
+
+    // bad
+    var superman = {
+      klass: 'alien'
+    };
+
+    // good
+    var superman = {
+      type: 'alien'
+    };
+    ```
+
+**[⬆ back to top](#table-of-contents)**
+
+## Arrays
+
+  - Use the literal syntax for array creation.
+
+    ```javascript
+    // bad
+    var items = new Array();
+
+    // good
+    var items = [];
+    ```
+
+  - If you don't know array length use Array#push.
+
+    ```javascript
+    var someStack = [];
+
+
+    // bad
+    someStack[someStack.length] = 'abracadabra';
+
+    // good
+    someStack.push('abracadabra');
+    ```
+
+  - When you need to copy an array use Array#slice. [jsPerf](http://jsperf.com/converting-arguments-to-an-array/7)
+
+    ```javascript
+    var len = items.length;
+    var itemsCopy = [];
+    var i;
+
+    // bad
+    for (i = 0; i < len; i++) {
+      itemsCopy[i] = items[i];
+    }
+
+    // good
+    itemsCopy = items.slice();
+    ```
+
+  - To convert an array-like object to an array, use Array#slice.
+
+    ```javascript
+    function trigger() {
+      var args = Array.prototype.slice.call(arguments);
+      ...
+    }
+    ```
+
+**[⬆ back to top](#table-of-contents)**
+
+
+## Strings
+
+  - Use single quotes `''` for strings.
+
+    ```javascript
+    // bad
+    var name = "Bob Parr";
+
+    // good
+    var name = 'Bob Parr';
+
+    // bad
+    var fullName = "Bob " + this.lastName;
+
+    // good
+    var fullName = 'Bob ' + this.lastName;
+    ```
+
+  - Strings longer than 80 characters should be written across multiple lines using string concatenation.
+  - Note: If overused, long strings with concatenation could impact performance. [jsPerf](http://jsperf.com/ya-string-concat) & [Discussion](https://github.com/airbnb/javascript/issues/40).
+
+    ```javascript
+    // bad
+    var errorMessage = 'This is a super long error that was thrown because of Batman. When you stop to think about how Batman had anything to do with this, you would get nowhere fast.';
+
+    // bad
+    var errorMessage = 'This is a super long error that was thrown because \
+    of Batman. When you stop to think about how Batman had anything to do \
+    with this, you would get nowhere \
+    fast.';
+
+    // good
+    var errorMessage = 'This is a super long error that was thrown because ' +
+      'of Batman. When you stop to think about how Batman had anything to do ' +
+      'with this, you would get nowhere fast.';
+    ```
+
+  - When programmatically building up a string, use Array#join instead of string concatenation. Mostly for IE: [jsPerf](http://jsperf.com/string-vs-array-concat/2).
+
+    ```javascript
+    var items;
+    var messages;
+    var length;
+    var i;
+
+    messages = [{
+      state: 'success',
+      message: 'This one worked.'
+    }, {
+      state: 'success',
+      message: 'This one worked as well.'
+    }, {
+      state: 'error',
+      message: 'This one did not work.'
+    }];
+
+    length = messages.length;
+
+    // bad
+    function inbox(messages) {
+      items = '<ul>';
+
+      for (i = 0; i < length; i++) {
+        items += '<li>' + messages[i].message + '</li>';
+      }
+
+      return items + '</ul>';
+    }
+
+    // good
+    function inbox(messages) {
+      items = [];
+
+      for (i = 0; i < length; i++) {
+        items[i] = '<li>' + messages[i].message + '</li>';
+      }
+
+      return '<ul>' + items.join('') + '</ul>';
+    }
+    ```
+
+**[⬆ back to top](#table-of-contents)**
+
+
+## Functions
+
+  - Function expressions:
+
+    ```javascript
+    // anonymous function expression
+    var anonymous = function() {
+      return true;
+    };
+
+    // named function expression
+    var named = function named() {
+      return true;
+    };
+
+    // immediately-invoked function expression (IIFE)
+    (function() {
+      console.log('Welcome to the Internet. Please follow me.');
+    })();
+    ```
+
+  - Never declare a function in a non-function block (if, while, etc). Assign the function to a variable instead. Browsers will allow you to do it, but they all interpret it differently, which is bad news bears.
+  - **Note:** ECMA-262 defines a `block` as a list of statements. A function declaration is not a statement. [Read ECMA-262's note on this issue](http://www.ecma-international.org/publications/files/ECMA-ST/Ecma-262.pdf#page=97).
+
+    ```javascript
+    // bad
+    if (currentUser) {
+      function test() {
+        console.log('Nope.');
+      }
+    }
+
+    // good
+    var test;
+    if (currentUser) {
+      test = function test() {
+        console.log('Yup.');
+      };
+    }
+    ```
+
+  - Never name a parameter `arguments`, this will take precedence over the `arguments` object that is given to every function scope.
+
+    ```javascript
+    // bad
+    function nope(name, options, arguments) {
+      // ...stuff...
+    }
+
+    // good
+    function yup(name, options, args) {
+      // ...stuff...
+    }
+    ```
+
+**[⬆ back to top](#table-of-contents)**
+
+
+
+## Properties
+
+  - Use dot notation when accessing properties.
+
+    ```javascript
+    var luke = {
+      jedi: true,
+      age: 28
+    };
+
+    // bad
+    var isJedi = luke['jedi'];
+
+    // good
+    var isJedi = luke.jedi;
+    ```
+
+  - Use subscript notation `[]` when accessing properties with a variable.
+
+    ```javascript
+    var luke = {
+      jedi: true,
+      age: 28
+    };
+
+    function getProp(prop) {
+      return luke[prop];
+    }
+
+    var isJedi = getProp('jedi');
+    ```
+
+**[⬆ back to top](#table-of-contents)**
+
+
+## Variables
+
+  - Always use `var` to declare variables. Not doing so will result in global variables. We want to avoid polluting the global namespace. Captain Planet warned us of that.
+
+    ```javascript
+    // bad
+    superPower = new SuperPower();
+
+    // good
+    var superPower = new SuperPower();
+    ```
+
+  - Use one `var` declaration per variable.
+    It's easier to add new variable declarations this way, and you never have
+    to worry about swapping out a `;` for a `,` or introducing punctuation-only
+    diffs.
+
+    ```javascript
+    // bad
+    var items = getItems(),
+        goSportsTeam = true,
+        dragonball = 'z';
+
+    // bad
+    // (compare to above, and try to spot the mistake)
+    var items = getItems(),
+        goSportsTeam = true;
+        dragonball = 'z';
+
+    // good
+    var items = getItems();
+    var goSportsTeam = true;
+    var dragonball = 'z';
+    ```
+
+  - Declare unassigned variables last. This is helpful when later on you might need to assign a variable depending on one of the previous assigned variables.
+
+    ```javascript
+    // bad
+    var i, len, dragonball,
+        items = getItems(),
+        goSportsTeam = true;
+
+    // bad
+    var i;
+    var items = getItems();
+    var dragonball;
+    var goSportsTeam = true;
+    var len;
+
+    // good
+    var items = getItems();
+    var goSportsTeam = true;
+    var dragonball;
+    var length;
+    var i;
+    ```
+
+  - Assign variables at the top of their scope. This helps avoid issues with variable declaration and assignment hoisting related issues.
+
+    ```javascript
+    // bad
+    function() {
+      test();
+      console.log('doing stuff..');
+
+      //..other stuff..
+
+      var name = getName();
+
+      if (name === 'test') {
+        return false;
+      }
+
+      return name;
+    }
+
+    // good
+    function() {
+      var name = getName();
+
+      test();
+      console.log('doing stuff..');
+
+      //..other stuff..
+
+      if (name === 'test') {
+        return false;
+      }
+
+      return name;
+    }
+
+    // bad
+    function() {
+      var name = getName();
+
+      if (!arguments.length) {
+        return false;
+      }
+
+      return true;
+    }
+
+    // good
+    function() {
+      if (!arguments.length) {
+        return false;
+      }
+
+      var name = getName();
+
+      return true;
+    }
+    ```
+
+**[⬆ back to top](#table-of-contents)**
+
+
+## Hoisting
+
+  - Variable declarations get hoisted to the top of their scope, their assignment does not.
+
+    ```javascript
+    // we know this wouldn't work (assuming there
+    // is no notDefined global variable)
+    function example() {
+      console.log(notDefined); // => throws a ReferenceError
+    }
+
+    // creating a variable declaration after you
+    // reference the variable will work due to
+    // variable hoisting. Note: the assignment
+    // value of `true` is not hoisted.
+    function example() {
+      console.log(declaredButNotAssigned); // => undefined
+      var declaredButNotAssigned = true;
+    }
+
+    // The interpreter is hoisting the variable
+    // declaration to the top of the scope,
+    // which means our example could be rewritten as:
+    function example() {
+      var declaredButNotAssigned;
+      console.log(declaredButNotAssigned); // => undefined
+      declaredButNotAssigned = true;
+    }
+    ```
+
+  - Anonymous function expressions hoist their variable name, but not the function assignment.
+
+    ```javascript
+    function example() {
+      console.log(anonymous); // => undefined
+
+      anonymous(); // => TypeError anonymous is not a function
+
+      var anonymous = function() {
+        console.log('anonymous function expression');
+      };
+    }
+    ```
+
+  - Named function expressions hoist the variable name, not the function name or the function body.
+
+    ```javascript
+    function example() {
+      console.log(named); // => undefined
+
+      named(); // => TypeError named is not a function
+
+      superPower(); // => ReferenceError superPower is not defined
+
+      var named = function superPower() {
+        console.log('Flying');
+      };
+    }
+
+    // the same is true when the function name
+    // is the same as the variable name.
+    function example() {
+      console.log(named); // => undefined
+
+      named(); // => TypeError named is not a function
+
+      var named = function named() {
+        console.log('named');
+      }
+    }
+    ```
+
+  - Function declarations hoist their name and the function body.
+
+    ```javascript
+    function example() {
+      superPower(); // => Flying
+
+      function superPower() {
+        console.log('Flying');
+      }
+    }
+    ```
+
+  - For more information refer to [JavaScript Scoping & Hoisting](http://www.adequatelygood.com/2010/2/JavaScript-Scoping-and-Hoisting) by [Ben Cherry](http://www.adequatelygood.com/).
+
+**[⬆ back to top](#table-of-contents)**
+
+
+
+## Comparison Operators & Equality
+
+  - Use `===` and `!==` over `==` and `!=`.
+  - Comparison operators are evaluated using coercion with the `ToBoolean` method and always follow these simple rules:
+
+    + **Objects** evaluate to **true**
+    + **Undefined** evaluates to **false**
+    + **Null** evaluates to **false**
+    + **Booleans** evaluate to **the value of the boolean**
+    + **Numbers** evaluate to **false** if **+0, -0, or NaN**, otherwise **true**
+    + **Strings** evaluate to **false** if an empty string `''`, otherwise **true**
+
+    ```javascript
+    if ([0]) {
+      // true
+      // An array is an object, objects evaluate to true
+    }
+    ```
+
+  - Use shortcuts.
+
+    ```javascript
+    // bad
+    if (name !== '') {
+      // ...stuff...
+    }
+
+    // good
+    if (name) {
+      // ...stuff...
+    }
+
+    // bad
+    if (collection.length > 0) {
+      // ...stuff...
+    }
+
+    // good
+    if (collection.length) {
+      // ...stuff...
+    }
+    ```
+
+  - For more information see [Truth Equality and JavaScript](http://javascriptweblog.wordpress.com/2011/02/07/truth-equality-and-javascript/#more-2108) by Angus Croll.
+
+**[⬆ back to top](#table-of-contents)**
+
+
+## Blocks
+
+  - Use braces with all multi-line blocks.
+
+    ```javascript
+    // bad
+    if (test)
+      return false;
+
+    // good
+    if (test) return false;
+
+    // good
+    if (test) {
+      return false;
+    }
+
+    // bad
+    function() { return false; }
+
+    // good
+    function() {
+      return false;
+    }
+    ```
+
+  - If you're using multi-line blocks with `if` and `else`, put `else` on the same line as your
+    `if` block's closing brace.
+
+    ```javascript
+    // bad
+    if (test) {
+      thing1();
+      thing2();
+    }
+    else {
+      thing3();
+    }
+
+    // good
+    if (test) {
+      thing1();
+      thing2();
+    } else {
+      thing3();
+    }
+    ```
+
+
+**[⬆ back to top](#table-of-contents)**
+
+
+## Comments
+
+  - Use `/** ... */` for multiline comments. Include a description, specify types and values for all parameters and return values.
+
+    ```javascript
+    // bad
+    // make() returns a new element
+    // based on the passed in tag name
+    //
+    // @param {String} tag
+    // @return {Element} element
+    function make(tag) {
+
+      // ...stuff...
+
+      return element;
+    }
+
+    // good
+    /**
+     * make() returns a new element
+     * based on the passed in tag name
+     *
+     * @param {String} tag
+     * @return {Element} element
+     */
+    function make(tag) {
+
+      // ...stuff...
+
+      return element;
+    }
+    ```
+
+  - Use `//` for single line comments. Place single line comments on a newline above the subject of the comment. Put an empty line before the comment.
+
+    ```javascript
+    // bad
+    var active = true;  // is current tab
+
+    // good
+    // is current tab
+    var active = true;
+
+    // bad
+    function getType() {
+      console.log('fetching type...');
+      // set the default type to 'no type'
+      var type = this._type || 'no type';
+
+      return type;
+    }
+
+    // good
+    function getType() {
+      console.log('fetching type...');
+
+      // set the default type to 'no type'
+      var type = this._type || 'no type';
+
+      return type;
+    }
+    ```
+
+  - Prefixing your comments with `FIXME` or `TODO` helps other developers quickly understand if you're pointing out a problem that needs to be revisited, or if you're suggesting a solution to the problem that needs to be implemented. These are different than regular comments because they are actionable. The actions are `FIXME -- need to figure this out` or `TODO -- need to implement`.
+
+  - Use `// FIXME:` to annotate problems.
+
+    ```javascript
+    function Calculator() {
+
+      // FIXME: shouldn't use a global here
+      total = 0;
+
+      return this;
+    }
+    ```
+
+  - Use `// TODO:` to annotate solutions to problems.
+
+    ```javascript
+    function Calculator() {
+
+      // TODO: total should be configurable by an options param
+      this.total = 0;
+
+      return this;
+    }
+  ```
+
+**[⬆ back to top](#table-of-contents)**
+
+
+## Whitespace
+
+  - Use soft tabs set to 2 spaces.
+
+    ```javascript
+    // bad
+    function() {
+    ∙∙∙∙var name;
+    }
+
+    // bad
+    function() {
+    ∙var name;
+    }
+
+    // good
+    function() {
+    ∙∙var name;
+    }
+    ```
+
+  - Place 1 space before the leading brace.
+
+    ```javascript
+    // bad
+    function test(){
+      console.log('test');
+    }
+
+    // good
+    function test() {
+      console.log('test');
+    }
+
+    // bad
+    dog.set('attr',{
+      age: '1 year',
+      breed: 'Bernese Mountain Dog'
+    });
+
+    // good
+    dog.set('attr', {
+      age: '1 year',
+      breed: 'Bernese Mountain Dog'
+    });
+    ```
+
+  - Set off operators with spaces.
+
+    ```javascript
+    // bad
+    var x=y+5;
+
+    // good
+    var x = y + 5;
+    ```
+
+  - End files with a single newline character.
+
+    ```javascript
+    // bad
+    (function(global) {
+      // ...stuff...
+    })(this);
+    ```
+
+    ```javascript
+    // bad
+    (function(global) {
+      // ...stuff...
+    })(this);↵
+    ↵
+    ```
+
+    ```javascript
+    // good
+    (function(global) {
+      // ...stuff...
+    })(this);↵
+    ```
+
+  - Use indentation when making long method chains. Use a leading dot, which
+    emphasizes that the line is a method call, not a new statement.
+
+    ```javascript
+    // bad
+    $('#items').find('.selected').highlight().end().find('.open').updateCount();
+
+    // bad
+    $('#items').
+      find('selected').
+        highlight().
+        end().
+      find('.open').
+        updateCount();
+
+    // good
+    $('#items')
+      .find('.selected')
+        .highlight()
+        .end()
+      .find('.open')
+        .updateCount();
+
+    // bad
+    var leds = stage.selectAll('.led').data(data).enter().append('svg:svg').class('led', true)
+        .attr('width',  (radius + margin) * 2).append('svg:g')
+        .attr('transform', 'translate(' + (radius + margin) + ',' + (radius + margin) + ')')
+        .call(tron.led);
+
+    // good
+    var leds = stage.selectAll('.led')
+        .data(data)
+      .enter().append('svg:svg')
+        .class('led', true)
+        .attr('width',  (radius + margin) * 2)
+      .append('svg:g')
+        .attr('transform', 'translate(' + (radius + margin) + ',' + (radius + margin) + ')')
+        .call(tron.led);
+    ```
+
+  - Leave a blank line after blocks and before the next statement
+
+    ```javascript
+    // bad
+    if (foo) {
+      return bar;
+    }
+    return baz;
+
+    // good
+    if (foo) {
+      return bar;
+    }
+
+    return baz;
+
+    // bad
+    var obj = {
+      foo: function() {
+      },
+      bar: function() {
+      }
+    };
+    return obj;
+
+    // good
+    var obj = {
+      foo: function() {
+      },
+
+      bar: function() {
+      }
+    };
+
+    return obj;
+    ```
+
+
+**[⬆ back to top](#table-of-contents)**
+
+## Commas
+
+  - Leading commas: **Nope.**
+
+    ```javascript
+    // bad
+    var story = [
+        once
+      , upon
+      , aTime
+    ];
+
+    // good
+    var story = [
+      once,
+      upon,
+      aTime
+    ];
+
+    // bad
+    var hero = {
+        firstName: 'Bob'
+      , lastName: 'Parr'
+      , heroName: 'Mr. Incredible'
+      , superPower: 'strength'
+    };
+
+    // good
+    var hero = {
+      firstName: 'Bob',
+      lastName: 'Parr',
+      heroName: 'Mr. Incredible',
+      superPower: 'strength'
+    };
+    ```
+
+  - Additional trailing comma: **Nope.** This can cause problems with IE6/7 and IE9 if it's in quirksmode. Also, in some implementations of ES3 would add length to an array if it had an additional trailing comma. This was clarified in ES5 ([source](http://es5.github.io/#D)):
+
+  > Edition 5 clarifies the fact that a trailing comma at the end of an ArrayInitialiser does not add to the length of the array. This is not a semantic change from Edition 3 but some implementations may have previously misinterpreted this.
+
+    ```javascript
+    // bad
+    var hero = {
+      firstName: 'Kevin',
+      lastName: 'Flynn',
+    };
+
+    var heroes = [
+      'Batman',
+      'Superman',
+    ];
+
+    // good
+    var hero = {
+      firstName: 'Kevin',
+      lastName: 'Flynn'
+    };
+
+    var heroes = [
+      'Batman',
+      'Superman'
+    ];
+    ```
+
+**[⬆ back to top](#table-of-contents)**
+
+
+## Semicolons
+
+  - **Yup.**
+
+    ```javascript
+    // bad
+    (function() {
+      var name = 'Skywalker'
+      return name
+    })()
+
+    // good
+    (function() {
+      var name = 'Skywalker';
+      return name;
+    })();
+
+    // good (guards against the function becoming an argument when two files with IIFEs are concatenated)
+    ;(function() {
+      var name = 'Skywalker';
+      return name;
+    })();
+    ```
+
+    [Read more](http://stackoverflow.com/a/7365214/1712802).
+
+**[⬆ back to top](#table-of-contents)**
+
+
+## Type Casting & Coercion
+
+  - Perform type coercion at the beginning of the statement.
+  - Strings:
+
+    ```javascript
+    //  => this.reviewScore = 9;
+
+    // bad
+    var totalScore = this.reviewScore + '';
+
+    // good
+    var totalScore = '' + this.reviewScore;
+
+    // bad
+    var totalScore = '' + this.reviewScore + ' total score';
+
+    // good
+    var totalScore = this.reviewScore + ' total score';
+    ```
+
+  - Use `parseInt` for Numbers and always with a radix for type casting.
+
+    ```javascript
+    var inputValue = '4';
+
+    // bad
+    var val = new Number(inputValue);
+
+    // bad
+    var val = +inputValue;
+
+    // bad
+    var val = inputValue >> 0;
+
+    // bad
+    var val = parseInt(inputValue);
+
+    // good
+    var val = Number(inputValue);
+
+    // good
+    var val = parseInt(inputValue, 10);
+    ```
+
+  - If for whatever reason you are doing something wild and `parseInt` is your bottleneck and need to use Bitshift for [performance reasons](http://jsperf.com/coercion-vs-casting/3), leave a comment explaining why and what you're doing.
+
+    ```javascript
+    // good
+    /**
+     * parseInt was the reason my code was slow.
+     * Bitshifting the String to coerce it to a
+     * Number made it a lot faster.
+     */
+    var val = inputValue >> 0;
+    ```
+
+  - **Note:** Be careful when using bitshift operations. Numbers are represented as [64-bit values](http://es5.github.io/#x4.3.19), but Bitshift operations always return a 32-bit integer ([source](http://es5.github.io/#x11.7)). Bitshift can lead to unexpected behavior for integer values larger than 32 bits. [Discussion](https://github.com/airbnb/javascript/issues/109). Largest signed 32-bit Int is 2,147,483,647:
+
+    ```javascript
+    2147483647 >> 0 //=> 2147483647
+    2147483648 >> 0 //=> -2147483648
+    2147483649 >> 0 //=> -2147483647
+    ```
+
+  - Booleans:
+
+    ```javascript
+    var age = 0;
+
+    // bad
+    var hasAge = new Boolean(age);
+
+    // good
+    var hasAge = Boolean(age);
+
+    // good
+    var hasAge = !!age;
+    ```
+
+**[⬆ back to top](#table-of-contents)**
+
+
+## Naming Conventions
+
+  - Avoid single letter names. Be descriptive with your naming.
+
+    ```javascript
+    // bad
+    function q() {
+      // ...stuff...
+    }
+
+    // good
+    function query() {
+      // ..stuff..
+    }
+    ```
+
+  - Use camelCase when naming objects, functions, and instances.
+
+    ```javascript
+    // bad
+    var OBJEcttsssss = {};
+    var this_is_my_object = {};
+    function c() {}
+    var u = new user({
+      name: 'Bob Parr'
+    });
+
+    // good
+    var thisIsMyObject = {};
+    function thisIsMyFunction() {}
+    var user = new User({
+      name: 'Bob Parr'
+    });
+    ```
+
+  - Use PascalCase when naming constructors or classes.
+
+    ```javascript
+    // bad
+    function user(options) {
+      this.name = options.name;
+    }
+
+    var bad = new user({
+      name: 'nope'
+    });
+
+    // good
+    function User(options) {
+      this.name = options.name;
+    }
+
+    var good = new User({
+      name: 'yup'
+    });
+    ```
+
+  - Use a leading underscore `_` when naming private properties.
+
+    ```javascript
+    // bad
+    this.__firstName__ = 'Panda';
+    this.firstName_ = 'Panda';
+
+    // good
+    this._firstName = 'Panda';
+    ```
+
+  - When saving a reference to `this` use `_this`.
+
+    ```javascript
+    // bad
+    function() {
+      var self = this;
+      return function() {
+        console.log(self);
+      };
+    }
+
+    // bad
+    function() {
+      var that = this;
+      return function() {
+        console.log(that);
+      };
+    }
+
+    // good
+    function() {
+      var _this = this;
+      return function() {
+        console.log(_this);
+      };
+    }
+    ```
+
+  - Name your functions. This is helpful for stack traces.
+
+    ```javascript
+    // bad
+    var log = function(msg) {
+      console.log(msg);
+    };
+
+    // good
+    var log = function log(msg) {
+      console.log(msg);
+    };
+    ```
+
+  - **Note:** IE8 and below exhibit some quirks with named function expressions.  See [http://kangax.github.io/nfe/](http://kangax.github.io/nfe/) for more info.
+
+  - If your file exports a single class, your filename should be exactly the name of the class.
+    ```javascript
+    // file contents
+    class CheckBox {
+      // ...
+    }
+    module.exports = CheckBox;
+
+    // in some other file
+    // bad
+    var CheckBox = require('./checkBox');
+
+    // bad
+    var CheckBox = require('./check_box');
+
+    // good
+    var CheckBox = require('./CheckBox');
+    ```
+
+**[⬆ back to top](#table-of-contents)**
+
+
+## Accessors
+
+  - Accessor functions for properties are not required.
+  - If you do make accessor functions use getVal() and setVal('hello').
+
+    ```javascript
+    // bad
+    dragon.age();
+
+    // good
+    dragon.getAge();
+
+    // bad
+    dragon.age(25);
+
+    // good
+    dragon.setAge(25);
+    ```
+
+  - If the property is a boolean, use isVal() or hasVal().
+
+    ```javascript
+    // bad
+    if (!dragon.age()) {
+      return false;
+    }
+
+    // good
+    if (!dragon.hasAge()) {
+      return false;
+    }
+    ```
+
+  - It's okay to create get() and set() functions, but be consistent.
+
+    ```javascript
+    function Jedi(options) {
+      options || (options = {});
+      var lightsaber = options.lightsaber || 'blue';
+      this.set('lightsaber', lightsaber);
+    }
+
+    Jedi.prototype.set = function(key, val) {
+      this[key] = val;
+    };
+
+    Jedi.prototype.get = function(key) {
+      return this[key];
+    };
+    ```
+
+**[⬆ back to top](#table-of-contents)**
+
+
+## Constructors
+
+  - Assign methods to the prototype object, instead of overwriting the prototype with a new object. Overwriting the prototype makes inheritance impossible: by resetting the prototype you'll overwrite the base!
+
+    ```javascript
+    function Jedi() {
+      console.log('new jedi');
+    }
+
+    // bad
+    Jedi.prototype = {
+      fight: function fight() {
+        console.log('fighting');
+      },
+
+      block: function block() {
+        console.log('blocking');
+      }
+    };
+
+    // good
+    Jedi.prototype.fight = function fight() {
+      console.log('fighting');
+    };
+
+    Jedi.prototype.block = function block() {
+      console.log('blocking');
+    };
+    ```
+
+  - Methods can return `this` to help with method chaining.
+
+    ```javascript
+    // bad
+    Jedi.prototype.jump = function() {
+      this.jumping = true;
+      return true;
+    };
+
+    Jedi.prototype.setHeight = function(height) {
+      this.height = height;
+    };
+
+    var luke = new Jedi();
+    luke.jump(); // => true
+    luke.setHeight(20); // => undefined
+
+    // good
+    Jedi.prototype.jump = function() {
+      this.jumping = true;
+      return this;
+    };
+
+    Jedi.prototype.setHeight = function(height) {
+      this.height = height;
+      return this;
+    };
+
+    var luke = new Jedi();
+
+    luke.jump()
+      .setHeight(20);
+    ```
+
+
+  - It's okay to write a custom toString() method, just make sure it works successfully and causes no side effects.
+
+    ```javascript
+    function Jedi(options) {
+      options || (options = {});
+      this.name = options.name || 'no name';
+    }
+
+    Jedi.prototype.getName = function getName() {
+      return this.name;
+    };
+
+    Jedi.prototype.toString = function toString() {
+      return 'Jedi - ' + this.getName();
+    };
+    ```
+
+**[⬆ back to top](#table-of-contents)**
+
+
+## Events
+
+  - When attaching data payloads to events (whether DOM events or something more proprietary like Backbone events), pass a hash instead of a raw value. This allows a subsequent contributor to add more data to the event payload without finding and updating every handler for the event. For example, instead of:
+
+    ```js
+    // bad
+    $(this).trigger('listingUpdated', listing.id);
+
+    ...
+
+    $(this).on('listingUpdated', function(e, listingId) {
+      // do something with listingId
+    });
+    ```
+
+    prefer:
+
+    ```js
+    // good
+    $(this).trigger('listingUpdated', { listingId : listing.id });
+
+    ...
+
+    $(this).on('listingUpdated', function(e, data) {
+      // do something with data.listingId
+    });
+    ```
+
+  **[⬆ back to top](#table-of-contents)**
+
+
+## Modules
+
+  - The module should start with a `!`. This ensures that if a malformed module forgets to include a final semicolon there aren't errors in production when the scripts get concatenated. [Explanation](https://github.com/airbnb/javascript/issues/44#issuecomment-13063933)
+  - The file should be named with camelCase, live in a folder with the same name, and match the name of the single export.
+  - Add a method called `noConflict()` that sets the exported module to the previous version and returns this one.
+  - Always declare `'use strict';` at the top of the module.
+
+    ```javascript
+    // fancyInput/fancyInput.js
+
+    !function(global) {
+      'use strict';
+
+      var previousFancyInput = global.FancyInput;
+
+      function FancyInput(options) {
+        this.options = options || {};
+      }
+
+      FancyInput.noConflict = function noConflict() {
+        global.FancyInput = previousFancyInput;
+        return FancyInput;
+      };
+
+      global.FancyInput = FancyInput;
+    }(this);
+    ```
+
+**[⬆ back to top](#table-of-contents)**
+
+
+## jQuery
+
+  - Prefix jQuery object variables with a `$`.
+
+    ```javascript
+    // bad
+    var sidebar = $('.sidebar');
+
+    // good
+    var $sidebar = $('.sidebar');
+    ```
+
+  - Cache jQuery lookups.
+
+    ```javascript
+    // bad
+    function setSidebar() {
+      $('.sidebar').hide();
+
+      // ...stuff...
+
+      $('.sidebar').css({
+        'background-color': 'pink'
+      });
+    }
+
+    // good
+    function setSidebar() {
+      var $sidebar = $('.sidebar');
+      $sidebar.hide();
+
+      // ...stuff...
+
+      $sidebar.css({
+        'background-color': 'pink'
+      });
+    }
+    ```
+
+  - For DOM queries use Cascading `$('.sidebar ul')` or parent > child `$('.sidebar > ul')`. [jsPerf](http://jsperf.com/jquery-find-vs-context-sel/16)
+  - Use `find` with scoped jQuery object queries.
+
+    ```javascript
+    // bad
+    $('ul', '.sidebar').hide();
+
+    // bad
+    $('.sidebar').find('ul').hide();
+
+    // good
+    $('.sidebar ul').hide();
+
+    // good
+    $('.sidebar > ul').hide();
+
+    // good
+    $sidebar.find('ul').hide();
+    ```
+
+**[⬆ back to top](#table-of-contents)**
+
+
+## ECMAScript 5 Compatibility
+
+  - Refer to [Kangax](https://twitter.com/kangax/)'s ES5 [compatibility table](http://kangax.github.com/es5-compat-table/).
+
+**[⬆ back to top](#table-of-contents)**
+
+
+## Testing
+
+  - **Yup.**
+
+    ```javascript
+    function() {
+      return true;
+    }
+    ```
+
+**[⬆ back to top](#table-of-contents)**
+
+
+## Performance
+
+  - [On Layout & Web Performance](http://kellegous.com/j/2013/01/26/layout-performance/)
+  - [String vs Array Concat](http://jsperf.com/string-vs-array-concat/2)
+  - [Try/Catch Cost In a Loop](http://jsperf.com/try-catch-in-loop-cost)
+  - [Bang Function](http://jsperf.com/bang-function)
+  - [jQuery Find vs Context, Selector](http://jsperf.com/jquery-find-vs-context-sel/13)
+  - [innerHTML vs textContent for script text](http://jsperf.com/innerhtml-vs-textcontent-for-script-text)
+  - [Long String Concatenation](http://jsperf.com/ya-string-concat)
+  - Loading...
+
+**[⬆ back to top](#table-of-contents)**
+
+
+## Resources
+
+
+**Read This**
+
+  - [Annotated ECMAScript 5.1](http://es5.github.com/)
+
+**Tools**
+
+  - Code Style Linters
+    + [JSHint](http://www.jshint.com/) - [Airbnb Style .jshintrc](https://github.com/airbnb/javascript/blob/master/linters/jshintrc)
+    + [JSCS](https://github.com/jscs-dev/node-jscs) - [Airbnb Style Preset](https://github.com/jscs-dev/node-jscs/blob/master/presets/airbnb.json)
+
+**Other Styleguides**
+
+  - [Google JavaScript Style Guide](http://google-styleguide.googlecode.com/svn/trunk/javascriptguide.xml)
+  - [jQuery Core Style Guidelines](http://docs.jquery.com/JQuery_Core_Style_Guidelines)
+  - [Principles of Writing Consistent, Idiomatic JavaScript](https://github.com/rwldrn/idiomatic.js/)
+  - [JavaScript Standard Style](https://github.com/feross/standard)
+
+**Other Styles**
+
+  - [Naming this in nested functions](https://gist.github.com/4135065) - Christian Johansen
+  - [Conditional Callbacks](https://github.com/airbnb/javascript/issues/52) - Ross Allen
+  - [Popular JavaScript Coding Conventions on Github](http://sideeffect.kr/popularconvention/#javascript) - JeongHoon Byun
+  - [Multiple var statements in JavaScript, not superfluous](http://benalman.com/news/2012/05/multiple-var-statements-javascript/) - Ben Alman
+
+**Further Reading**
+
+  - [Understanding JavaScript Closures](http://javascriptweblog.wordpress.com/2010/10/25/understanding-javascript-closures/) - Angus Croll
+  - [Basic JavaScript for the impatient programmer](http://www.2ality.com/2013/06/basic-javascript.html) - Dr. Axel Rauschmayer
+  - [You Might Not Need jQuery](http://youmightnotneedjquery.com/) - Zack Bloom & Adam Schwartz
+  - [ES6 Features](https://github.com/lukehoban/es6features) - Luke Hoban
+  - [Frontend Guidelines](https://github.com/bendc/frontend-guidelines) - Benjamin De Cock
+
+**Books**
+
+  - [JavaScript: The Good Parts](http://www.amazon.com/JavaScript-Good-Parts-Douglas-Crockford/dp/0596517742) - Douglas Crockford
+  - [JavaScript Patterns](http://www.amazon.com/JavaScript-Patterns-Stoyan-Stefanov/dp/0596806752) - Stoyan Stefanov
+  - [Pro JavaScript Design Patterns](http://www.amazon.com/JavaScript-Design-Patterns-Recipes-Problem-Solution/dp/159059908X)  - Ross Harmes and Dustin Diaz
+  - [High Performance Web Sites: Essential Knowledge for Front-End Engineers](http://www.amazon.com/High-Performance-Web-Sites-Essential/dp/0596529309) - Steve Souders
+  - [Maintainable JavaScript](http://www.amazon.com/Maintainable-JavaScript-Nicholas-C-Zakas/dp/1449327680) - Nicholas C. Zakas
+  - [JavaScript Web Applications](http://www.amazon.com/JavaScript-Web-Applications-Alex-MacCaw/dp/144930351X) - Alex MacCaw
+  - [Pro JavaScript Techniques](http://www.amazon.com/Pro-JavaScript-Techniques-John-Resig/dp/1590597273) - John Resig
+  - [Smashing Node.js: JavaScript Everywhere](http://www.amazon.com/Smashing-Node-js-JavaScript-Everywhere-Magazine/dp/1119962595) - Guillermo Rauch
+  - [Secrets of the JavaScript Ninja](http://www.amazon.com/Secrets-JavaScript-Ninja-John-Resig/dp/193398869X) - John Resig and Bear Bibeault
+  - [Human JavaScript](http://humanjavascript.com/) - Henrik Joreteg
+  - [Superhero.js](http://superherojs.com/) - Kim Joar Bekkelund, Mads Mobæk, & Olav Bjorkoy
+  - [JSBooks](http://jsbooks.revolunet.com/) - Julien Bouquillon
+  - [Third Party JavaScript](http://manning.com/vinegar/) - Ben Vinegar and Anton Kovalyov
+  - [Effective JavaScript: 68 Specific Ways to Harness the Power of JavaScript](http://amzn.com/0321812182) - David Herman
+  - [Eloquent JavaScript](http://eloquentjavascript.net) - Marijn Haverbeke
+  - [You Don't Know JS](https://github.com/getify/You-Dont-Know-JS) - Kyle Simpson
+
+**Blogs**
+
+  - [DailyJS](http://dailyjs.com/)
+  - [JavaScript Weekly](http://javascriptweekly.com/)
+  - [JavaScript, JavaScript...](http://javascriptweblog.wordpress.com/)
+  - [Bocoup Weblog](http://weblog.bocoup.com/)
+  - [Adequately Good](http://www.adequatelygood.com/)
+  - [NCZOnline](http://www.nczonline.net/)
+  - [Perfection Kills](http://perfectionkills.com/)
+  - [Ben Alman](http://benalman.com/)
+  - [Dmitry Baranovskiy](http://dmitry.baranovskiy.com/)
+  - [Dustin Diaz](http://dustindiaz.com/)
+  - [nettuts](http://net.tutsplus.com/?s=javascript)
+
+**Podcasts**
+
+  - [JavaScript Jabber](http://devchat.tv/js-jabber/)
+
+
+**[⬆ back to top](#table-of-contents)**
+
+## In the Wild
+
+  This is a list of organizations that are using this style guide. Send us a pull request or open an issue and we'll add you to the list.
+
+  - **Aan Zee**: [AanZee/javascript](https://github.com/AanZee/javascript)
+  - **Airbnb**: [airbnb/javascript](https://github.com/airbnb/javascript)
+  - **American Insitutes for Research**: [AIRAST/javascript](https://github.com/AIRAST/javascript)
+  - **Apartmint**: [apartmint/javascript](https://github.com/apartmint/javascript)
+  - **Avalara**: [avalara/javascript](https://github.com/avalara/javascript)
+  - **Compass Learning**: [compasslearning/javascript-style-guide](https://github.com/compasslearning/javascript-style-guide)
+  - **DailyMotion**: [dailymotion/javascript](https://github.com/dailymotion/javascript)
+  - **Digitpaint** [digitpaint/javascript](https://github.com/digitpaint/javascript)
+  - **Evernote**: [evernote/javascript-style-guide](https://github.com/evernote/javascript-style-guide)
+  - **ExactTarget**: [ExactTarget/javascript](https://github.com/ExactTarget/javascript)
+  - **Gawker Media**: [gawkermedia/javascript](https://github.com/gawkermedia/javascript)
+  - **GeneralElectric**: [GeneralElectric/javascript](https://github.com/GeneralElectric/javascript)
+  - **GoodData**: [gooddata/gdc-js-style](https://github.com/gooddata/gdc-js-style)
+  - **Grooveshark**: [grooveshark/javascript](https://github.com/grooveshark/javascript)
+  - **How About We**: [howaboutwe/javascript](https://github.com/howaboutwe/javascript)
+  - **InfoJobs**: [InfoJobs/JavaScript-Style-Guide](https://github.com/InfoJobs/JavaScript-Style-Guide)
+  - **Intent Media**: [intentmedia/javascript](https://github.com/intentmedia/javascript)
+  - **Jam3**: [Jam3/Javascript-Code-Conventions](https://github.com/Jam3/Javascript-Code-Conventions)
+  - **Kinetica Solutions**: [kinetica/javascript](https://github.com/kinetica/javascript)
+  - **Mighty Spring**: [mightyspring/javascript](https://github.com/mightyspring/javascript)
+  - **MinnPost**: [MinnPost/javascript](https://github.com/MinnPost/javascript)
+  - **ModCloth**: [modcloth/javascript](https://github.com/modcloth/javascript)
+  - **Money Advice Service**: [moneyadviceservice/javascript](https://github.com/moneyadviceservice/javascript)
+  - **Muber**: [muber/javascript](https://github.com/muber/javascript)
+  - **National Geographic**: [natgeo/javascript](https://github.com/natgeo/javascript)
+  - **National Park Service**: [nationalparkservice/javascript](https://github.com/nationalparkservice/javascript)
+  - **Nimbl3**: [nimbl3/javascript](https://github.com/nimbl3/javascript)
+  - **Nordic Venture Family**: [CodeDistillery/javascript](https://github.com/CodeDistillery/javascript)
+  - **Orion Health**: [orionhealth/javascript](https://github.com/orionhealth/javascript)
+  - **Peerby**: [Peerby/javascript](https://github.com/Peerby/javascript)
+  - **Razorfish**: [razorfish/javascript-style-guide](https://github.com/razorfish/javascript-style-guide)
+  - **reddit**: [reddit/styleguide/javascript](https://github.com/reddit/styleguide/tree/master/javascript)
+  - **REI**: [reidev/js-style-guide](https://github.com/reidev/js-style-guide)
+  - **Ripple**: [ripple/javascript-style-guide](https://github.com/ripple/javascript-style-guide)
+  - **SeekingAlpha**: [seekingalpha/javascript-style-guide](https://github.com/seekingalpha/javascript-style-guide)
+  - **Shutterfly**: [shutterfly/javascript](https://github.com/shutterfly/javascript)
+  - **StudentSphere**: [studentsphere/javascript](https://github.com/studentsphere/javascript)
+  - **Target**: [target/javascript](https://github.com/target/javascript)
+  - **TheLadders**: [TheLadders/javascript](https://github.com/TheLadders/javascript)
+  - **T4R Technology**: [T4R-Technology/javascript](https://github.com/T4R-Technology/javascript)
+  - **Userify**: [userify/javascript](https://github.com/userify/javascript)
+  - **VoxFeed**: [VoxFeed/javascript-style-guide](https://github.com/VoxFeed/javascript-style-guide)
+  - **Weggo**: [Weggo/javascript](https://github.com/Weggo/javascript)
+  - **Zillow**: [zillow/javascript](https://github.com/zillow/javascript)
+  - **ZocDoc**: [ZocDoc/javascript](https://github.com/ZocDoc/javascript)
+
+## Translation
+
+  This style guide is also available in other languages:
+
+  - ![de](https://raw.githubusercontent.com/gosquared/flags/master/flags/flags/shiny/24/Germany.png) **German**: [timofurrer/javascript-style-guide](https://github.com/timofurrer/javascript-style-guide)
+  - ![jp](https://raw.githubusercontent.com/gosquared/flags/master/flags/flags/shiny/24/Japan.png) **Japanese**: [mitsuruog/javacript-style-guide](https://github.com/mitsuruog/javacript-style-guide)
+  - ![br](https://raw.githubusercontent.com/gosquared/flags/master/flags/flags/shiny/24/Brazil.png) **Brazilian Portuguese**: [armoucar/javascript-style-guide](https://github.com/armoucar/javascript-style-guide)
+  - ![tw](https://raw.githubusercontent.com/gosquared/flags/master/flags/flags/shiny/24/Taiwan.png) **Chinese(Traditional)**: [jigsawye/javascript](https://github.com/jigsawye/javascript)
+  - ![cn](https://raw.githubusercontent.com/gosquared/flags/master/flags/flags/shiny/24/China.png) **Chinese(Simplified)**: [adamlu/javascript-style-guide](https://github.com/adamlu/javascript-style-guide)
+  - ![es](https://raw.githubusercontent.com/gosquared/flags/master/flags/flags/shiny/24/Spain.png) **Spanish**: [paolocarrasco/javascript-style-guide](https://github.com/paolocarrasco/javascript-style-guide)
+  - ![kr](https://raw.githubusercontent.com/gosquared/flags/master/flags/flags/shiny/24/South-Korea.png) **Korean**: [tipjs/javascript-style-guide](https://github.com/tipjs/javascript-style-guide)
+  - ![fr](https://raw.githubusercontent.com/gosquared/flags/master/flags/flags/shiny/24/France.png) **French**: [nmussy/javascript-style-guide](https://github.com/nmussy/javascript-style-guide)
+  - ![ru](https://raw.githubusercontent.com/gosquared/flags/master/flags/flags/shiny/24/Russia.png) **Russian**: [uprock/javascript](https://github.com/uprock/javascript)
+  - ![bg](https://raw.githubusercontent.com/gosquared/flags/master/flags/flags/shiny/24/Bulgaria.png) **Bulgarian**: [borislavvv/javascript](https://github.com/borislavvv/javascript)
+  - ![ca](https://raw.githubusercontent.com/fpmweb/javascript-style-guide/master/img/catala.png) **Catalan**: [fpmweb/javascript-style-guide](https://github.com/fpmweb/javascript-style-guide)
+  - ![pl](https://raw.githubusercontent.com/gosquared/flags/master/flags/flags/shiny/24/Poland.png) **Polish**: [mjurczyk/javascript](https://github.com/mjurczyk/javascript)
+
+## The JavaScript Style Guide Guide
+
+  - [Reference](https://github.com/airbnb/javascript/wiki/The-JavaScript-Style-Guide-Guide)
+
+## Chat With Us About JavaScript
+
+  - Find us on [gitter](https://gitter.im/airbnb/javascript).
+
+## Contributors
+
+  - [View Contributors](https://github.com/airbnb/javascript/graphs/contributors)
+
+
+## License
+
+(The MIT License)
+
+Copyright (c) 2014 Airbnb
+
+Permission is hereby granted, free of charge, to any person obtaining
+a copy of this software and associated documentation files (the
+'Software'), to deal in the Software without restriction, including
+without limitation the rights to use, copy, modify, merge, publish,
+distribute, sublicense, and/or sell copies of the Software, and to
+permit persons to whom the Software is furnished to do so, subject to
+the following conditions:
+
+The above copyright notice and this permission notice shall be
+included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
+CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
+TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
+SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+
+**[⬆ back to top](#table-of-contents)**
+
+# };

From b8fd0438fb2878aaf617716ac3513ae3da6910c6 Mon Sep 17 00:00:00 2001
From: Casey Jenks <caseyjenks@gmail.com>
Date: Thu, 2 Apr 2015 21:41:11 -0400
Subject: [PATCH 0181/1591] Iterators and Generators: sum should be 15, not 10

---
 README.md | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/README.md b/README.md
index c6b552c885..896351e0a7 100644
--- a/README.md
+++ b/README.md
@@ -786,16 +786,16 @@
       sum += num;
     }
 
-    sum === 10;
+    sum === 15;
 
     // good
     let sum = 0;
     numbers.forEach((num) => sum += num);
-    sum === 10;
+    sum === 15;
 
     // best (use the functional force)
     const sum = numbers.reduce((total, num) => total + num, 0);
-    sum === 10;
+    sum === 15;
     ```
 
   - Don't use generators.

From a6a573e3ccac39cabf83780a0b02b30a2c5ee6b2 Mon Sep 17 00:00:00 2001
From: Josh Perez <josh@goatslacker.com>
Date: Fri, 3 Apr 2015 14:47:01 -0700
Subject: [PATCH 0182/1591] Use more template literals, s/suffer/blessed with

---
 README.md | 18 +++---------------
 1 file changed, 3 insertions(+), 15 deletions(-)

diff --git a/README.md b/README.md
index 896351e0a7..fbb05387fa 100644
--- a/README.md
+++ b/README.md
@@ -401,12 +401,6 @@
 
     // good
     const name = 'Bob Parr';
-
-    // bad
-    const fullName = "Bob " + this.lastName;
-
-    // good
-    const fullName = 'Bob ' + this.lastName;
     ```
 
   - Strings longer than 80 characters should be written across multiple lines using string concatenation.
@@ -714,7 +708,7 @@
       }
 
       toString() {
-        return 'Jedi - ' + this.getName();
+        return `Jedi - ${this.getName()}`;
       }
     }
     ```
@@ -951,7 +945,7 @@
 
 ## Hoisting
 
-  - `var` declarations get hoisted to the top of their scope, but their assignment does not. `const` and `let` declarations suffer from [Temporal Dead Zones (TDZ)](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/let#Temporal_dead_zone_and_errors_with_let). Also see why [typeof is no longer safe](http://es-discourse.com/t/why-typeof-is-no-longer-safe/15).
+  - `var` declarations get hoisted to the top of their scope, their assignment does not. `const` and `let` declarations are blessed with a new concept called [Temporal Dead Zones (TDZ)](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/let#Temporal_dead_zone_and_errors_with_let). It's important to know why [typeof is no longer safe](http://es-discourse.com/t/why-typeof-is-no-longer-safe/15).
 
     ```javascript
     // we know this wouldn't work (assuming there
@@ -1531,13 +1525,7 @@
     const totalScore = this.reviewScore + '';
 
     // good
-    const totalScore = '' + this.reviewScore;
-
-    // bad
-    const totalScore = '' + this.reviewScore + ' total score';
-
-    // good
-    const totalScore = this.reviewScore + ' total score';
+    const totalScore = String(this.reviewScore);
     ```
 
   - Use `parseInt` for Numbers and always with a radix for type casting.

From 22e3c89d045e60fba240b07009bed07ba1797eaf Mon Sep 17 00:00:00 2001
From: Josh Perez <josh@goatslacker.com>
Date: Fri, 3 Apr 2015 15:15:56 -0700
Subject: [PATCH 0183/1591] Removing a few trailing commas

---
 README.md | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/README.md b/README.md
index fbb05387fa..eb77894051 100644
--- a/README.md
+++ b/README.md
@@ -198,7 +198,7 @@
     const obj = {
       id: 5,
       name: 'San Francisco',
-      [getKey('enabled')]: true,
+      [getKey('enabled')]: true
     };
     ```
 
@@ -212,7 +212,7 @@
 
       addValue: function (value) {
         return atom.value + value;
-      },
+      }
     };
 
     // good
@@ -221,7 +221,7 @@
 
       addValue(value) {
         return atom.value + value;
-      },
+      }
     };
     ```
 

From bc5b0ee007ba9e7bd92afb7caf325f4c63fc6e09 Mon Sep 17 00:00:00 2001
From: Luke Westby <lwestby@nd.edu>
Date: Fri, 3 Apr 2015 21:13:50 -0500
Subject: [PATCH 0184/1591] Change wording in Iterators and Generators

I found the term "function constructors" to be confusing as the functions the section refers to are not constructors. I think "higher-order functions" or something similar would be more clear.

Thanks!
---
 README.md | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/README.md b/README.md
index eb77894051..f68fc1d4de 100644
--- a/README.md
+++ b/README.md
@@ -767,7 +767,7 @@
 
 ## Iterators and Generators
 
-  - Don't use iterators. Prefer JavaScript's function constructors instead of loops like `for-of`.
+  - Don't use iterators. Prefer JavaScript's higher-order functions like `map()` and `reduce()` instead of loops like `for-of`.
 
   > Why? This enforces our immutable rule. Dealing with pure functions that return values is easier to reason about than side-effects.
 

From e8260674988be12080b3c75d3af84c64ed35af86 Mon Sep 17 00:00:00 2001
From: NoNameSheep <HerringtonDarkholme@users.noreply.github.com>
Date: Sat, 4 Apr 2015 13:54:49 +0800
Subject: [PATCH 0185/1591] advice against side effect in default parameter

---
 README.md | 17 +++++++++++++++++
 1 file changed, 17 insertions(+)

diff --git a/README.md b/README.md
index f68fc1d4de..869f8a051c 100644
--- a/README.md
+++ b/README.md
@@ -550,6 +550,23 @@
       // ...
     }
     ```
+    
+  - Don't put side effect into default parameter
+  
+  > it introduces confusion and subtlety. Arguments in function call are evaluated at call site, but default parameters are not evaluated at define site. 
+
+  ```javascript
+  var b = 1
+  // bad
+  function count(a = b++) {
+    console.log(a)
+  }
+  count()  // 1
+  count()  // 2
+  count(3) // 3
+  count()  // 3
+  ```
+
 
 **[⬆ back to top](#table-of-contents)**
 

From 38ae6b6df209d229491cb6ce0edc2c0d5b1d34b9 Mon Sep 17 00:00:00 2001
From: Sean Massa <EndangeredMassa@gmail.com>
Date: Sun, 5 Apr 2015 01:34:31 -0500
Subject: [PATCH 0186/1591] add `bad` comment to bad section of destructuring

---
 README.md | 1 +
 1 file changed, 1 insertion(+)

diff --git a/README.md b/README.md
index 869f8a051c..db16779168 100644
--- a/README.md
+++ b/README.md
@@ -370,6 +370,7 @@
   > Why? You can add new properties over time or change the order of things without breaking call sites.
 
     ```javascript
+    // bad
     function processInput(input) {
       // then a miracle occurs
       return [left, right, top, bottom];

From 6d34c516cc1649fe795a5145e89545328d04d360 Mon Sep 17 00:00:00 2001
From: Harrison Shoff <hi@hshoff.com>
Date: Sun, 5 Apr 2015 21:49:13 -0700
Subject: [PATCH 0187/1591] [toc] remove extra modules link

---
 README.md | 1 -
 1 file changed, 1 deletion(-)

diff --git a/README.md b/README.md
index db16779168..272d94a140 100644
--- a/README.md
+++ b/README.md
@@ -32,7 +32,6 @@
   1. [Naming Conventions](#naming-conventions)
   1. [Accessors](#accessors)
   1. [Events](#events)
-  1. [Modules](#modules)
   1. [jQuery](#jquery)
   1. [ECMAScript 5 Compatibility](#ecmascript-5-compatibility)
   1. [ECMAScript 6 Styles](#ecmascript-6-styles)

From f7321b303d6f3046ba49741041312fa2d8c76ed7 Mon Sep 17 00:00:00 2001
From: Harrison Shoff <hi@hshoff.com>
Date: Sun, 5 Apr 2015 21:50:08 -0700
Subject: [PATCH 0188/1591] [modules] fix invalid syntax in bad example. fixes
 #287

---
 README.md | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/README.md b/README.md
index 272d94a140..24a5edcfbe 100644
--- a/README.md
+++ b/README.md
@@ -772,7 +772,7 @@
     ```javascript
     // bad
     // filename es6.js
-    export default { es6 } from './airbnbStyleGuide';
+    export { es6 as default } from './airbnbStyleGuide';
 
     // good
     // filename es6.js

From 875d2ad05e7587bec304375f9d5451a80ef13ae5 Mon Sep 17 00:00:00 2001
From: Tomek Wiszniewski <t.wiszniewski@gmail.com>
Date: Fri, 10 Apr 2015 00:13:09 +0200
Subject: [PATCH 0189/1591] Add `esnext` to the jsHint configuration

This way we'll allow ES6 syntax.
---
 linters/jshintrc | 3 +++
 1 file changed, 3 insertions(+)

diff --git a/linters/jshintrc b/linters/jshintrc
index cc6e398b40..141067fd23 100644
--- a/linters/jshintrc
+++ b/linters/jshintrc
@@ -13,6 +13,9 @@
   // Define globals exposed by Node.js.
   "node": true,
 
+  // Allow ES6.
+  "esnext": true,
+
   /*
    * ENFORCING OPTIONS
    * =================

From ee176044c303a523cbb1ee68d1202d399639bcb3 Mon Sep 17 00:00:00 2001
From: dsc <david.schwertfeger@googlemail.com>
Date: Fri, 10 Apr 2015 15:34:54 +0200
Subject: [PATCH 0190/1591] Rename two let keywords to const

---
 README.md | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/README.md b/README.md
index 24a5edcfbe..0c1afab917 100644
--- a/README.md
+++ b/README.md
@@ -897,9 +897,9 @@
 
     // bad
     let i;
-    let items = getItems();
+    const items = getItems();
     let dragonball;
-    let goSportsTeam = true;
+    const goSportsTeam = true;
     let len;
 
     // good

From 0cca5e21fc66d6c5f076af71ab9a269a3ccddcc7 Mon Sep 17 00:00:00 2001
From: Tomek Wiszniewski <t.wiszniewski@gmail.com>
Date: Sat, 11 Apr 2015 12:46:08 +0200
Subject: [PATCH 0191/1591] Fix hoisting examples
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

Hoisting only happens to `var`. As kangax describes in [Why `typeof` is no longer “safe”](http://es-discourse.com/t/why-typeof-is-no-longer-safe/15/3).

Also, I wonder if we need the whole section, since you recommend to [avoid using `var` altogether](https://github.com/airbnb/javascript/blob/b492/README.md#references).
---
 README.md | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/README.md b/README.md
index 0c1afab917..aaf2290f9e 100644
--- a/README.md
+++ b/README.md
@@ -1005,7 +1005,7 @@
 
       anonymous(); // => TypeError anonymous is not a function
 
-      let anonymous = function() {
+      var anonymous = function() {
         console.log('anonymous function expression');
       };
     }
@@ -1021,7 +1021,7 @@
 
       superPower(); // => ReferenceError superPower is not defined
 
-      let named = function superPower() {
+      var named = function superPower() {
         console.log('Flying');
       };
     }
@@ -1033,7 +1033,7 @@
 
       named(); // => TypeError named is not a function
 
-      let named = function named() {
+      var named = function named() {
         console.log('named');
       }
     }

From e5006931f106fd6b1e3907fddc70950ed6c1cff2 Mon Sep 17 00:00:00 2001
From: Matias Singers <mail@matiassingers.com>
Date: Sun, 12 Apr 2015 20:44:48 +0800
Subject: [PATCH 0192/1591] Use modules in naming conventions example

Following the rule from further up: "Always use modules (import/export) over a non-standard module system."
---
 README.md | 8 ++++----
 1 file changed, 4 insertions(+), 4 deletions(-)

diff --git a/README.md b/README.md
index aaf2290f9e..1ba0446bdc 100644
--- a/README.md
+++ b/README.md
@@ -1704,17 +1704,17 @@
     class CheckBox {
       // ...
     }
-    module.exports = CheckBox;
+    export default CheckBox;
 
     // in some other file
     // bad
-    const CheckBox = require('./checkBox');
+    import CheckBox from './checkBox';
 
     // bad
-    const CheckBox = require('./check_box');
+    import CheckBox from './check_box';
 
     // good
-    const CheckBox = require('./CheckBox');
+    import CheckBox from './CheckBox';
     ```
 
   - Use camelCase when you export-default a function. Your filename should be identical to your function's name.

From d0028724eac28637d7bc4cde2ceac1c634dc452c Mon Sep 17 00:00:00 2001
From: Herrington Darkholme <nonamesheep1@gmail.com>
Date: Mon, 13 Apr 2015 09:04:39 +0800
Subject: [PATCH 0193/1591] add semicolons

---
 README.md | 18 +++++++++---------
 1 file changed, 9 insertions(+), 9 deletions(-)

diff --git a/README.md b/README.md
index 1ba0446bdc..b149f3570e 100644
--- a/README.md
+++ b/README.md
@@ -550,21 +550,21 @@
       // ...
     }
     ```
-    
+
   - Don't put side effect into default parameter
-  
-  > it introduces confusion and subtlety. Arguments in function call are evaluated at call site, but default parameters are not evaluated at define site. 
+
+  > it introduces confusion and subtlety. Arguments in function call are evaluated at call site, but default parameters are not evaluated at define site.
 
   ```javascript
-  var b = 1
+  var b = 1;
   // bad
   function count(a = b++) {
-    console.log(a)
+    console.log(a);
   }
-  count()  // 1
-  count()  // 2
-  count(3) // 3
-  count()  // 3
+  count();  // 1
+  count();  // 2
+  count(3); // 3
+  count();  // 3
   ```
 
 

From cb47b478c70bb0d1bee0a60643c5970bd67a799a Mon Sep 17 00:00:00 2001
From: Josh Perez <josh.perez@airbnb.com>
Date: Mon, 27 Apr 2015 16:58:09 -0700
Subject: [PATCH 0194/1591] Amend grammar for default parameters

---
 README.md | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/README.md b/README.md
index b149f3570e..e63ee40032 100644
--- a/README.md
+++ b/README.md
@@ -551,9 +551,9 @@
     }
     ```
 
-  - Don't put side effect into default parameter
+  - Avoid side effects with default parameters
 
-  > it introduces confusion and subtlety. Arguments in function call are evaluated at call site, but default parameters are not evaluated at define site.
+  > Why? They are confusing to reason about.
 
   ```javascript
   var b = 1;

From 455529c2346bd9f38e9ce09c507afbc11bba6b17 Mon Sep 17 00:00:00 2001
From: Josh Perez <josh@goatslacker.com>
Date: Tue, 28 Apr 2015 21:28:40 -0700
Subject: [PATCH 0195/1591] Updates es5 guide with latest

---
 es5/README.md | 78 +++++++++++++++++++++++++++++++++++----------------
 1 file changed, 54 insertions(+), 24 deletions(-)

diff --git a/es5/README.md b/es5/README.md
index bcbe6489c3..02ecc75ee6 100644
--- a/es5/README.md
+++ b/es5/README.md
@@ -135,7 +135,7 @@
     var items = [];
     ```
 
-  - If you don't know array length use Array#push.
+  - Use Array#push instead of direct assignment to add items to an array.
 
     ```javascript
     var someStack = [];
@@ -250,6 +250,7 @@
       items = [];
 
       for (i = 0; i < length; i++) {
+        // use direct assignment in this case because we're micro-optimizing.
         items[i] = '<li>' + messages[i].message + '</li>';
       }
 
@@ -301,7 +302,7 @@
     }
     ```
 
-  - Never name a parameter `arguments`, this will take precedence over the `arguments` object that is given to every function scope.
+  - Never name a parameter `arguments`. This will take precedence over the `arguments` object that is given to every function scope.
 
     ```javascript
     // bad
@@ -447,7 +448,7 @@
       return name;
     }
 
-    // bad
+    // bad - unnessary function call
     function() {
       var name = getName();
 
@@ -455,16 +456,21 @@
         return false;
       }
 
+      this.setFirstName(name);
+
       return true;
     }
 
     // good
     function() {
+      var name;
+
       if (!arguments.length) {
         return false;
       }
 
-      var name = getName();
+      name = getName();
+      this.setFirstName(name);
 
       return true;
     }
@@ -475,7 +481,7 @@
 
 ## Hoisting
 
-  - Variable declarations get hoisted to the top of their scope, their assignment does not.
+  - Variable declarations get hoisted to the top of their scope, but their assignment does not.
 
     ```javascript
     // we know this wouldn't work (assuming there
@@ -665,7 +671,7 @@
 
 ## Comments
 
-  - Use `/** ... */` for multiline comments. Include a description, specify types and values for all parameters and return values.
+  - Use `/** ... */` for multi-line comments. Include a description, specify types and values for all parameters and return values.
 
     ```javascript
     // bad
@@ -803,6 +809,30 @@
     });
     ```
 
+  - Place 1 space before the opening parenthesis in control statements (`if`, `while` etc.). Place no space before the argument list in function calls and declarations.
+
+    ```javascript
+    // bad
+    if(isJedi) {
+      fight ();
+    }
+
+    // good
+    if (isJedi) {
+      fight();
+    }
+
+    // bad
+    function fight () {
+      console.log ('Swooosh!');
+    }
+
+    // good
+    function fight() {
+      console.log('Swooosh!');
+    }
+    ```
+
   - Set off operators with spaces.
 
     ```javascript
@@ -846,7 +876,7 @@
 
     // bad
     $('#items').
-      find('selected').
+      find('.selected').
         highlight().
         end().
       find('.open').
@@ -861,8 +891,8 @@
         .updateCount();
 
     // bad
-    var leds = stage.selectAll('.led').data(data).enter().append('svg:svg').class('led', true)
-        .attr('width',  (radius + margin) * 2).append('svg:g')
+    var leds = stage.selectAll('.led').data(data).enter().append('svg:svg').classed('led', true)
+        .attr('width', (radius + margin) * 2).append('svg:g')
         .attr('transform', 'translate(' + (radius + margin) + ',' + (radius + margin) + ')')
         .call(tron.led);
 
@@ -870,8 +900,8 @@
     var leds = stage.selectAll('.led')
         .data(data)
       .enter().append('svg:svg')
-        .class('led', true)
-        .attr('width',  (radius + margin) * 2)
+        .classed('led', true)
+        .attr('width', (radius + margin) * 2)
       .append('svg:g')
         .attr('transform', 'translate(' + (radius + margin) + ',' + (radius + margin) + ')')
         .call(tron.led);
@@ -1118,17 +1148,12 @@
     // bad
     var OBJEcttsssss = {};
     var this_is_my_object = {};
+    var o = {};
     function c() {}
-    var u = new user({
-      name: 'Bob Parr'
-    });
 
     // good
     var thisIsMyObject = {};
     function thisIsMyFunction() {}
-    var user = new User({
-      name: 'Bob Parr'
-    });
     ```
 
   - Use PascalCase when naming constructors or classes.
@@ -1607,6 +1632,7 @@
   This is a list of organizations that are using this style guide. Send us a pull request or open an issue and we'll add you to the list.
 
   - **Aan Zee**: [AanZee/javascript](https://github.com/AanZee/javascript)
+  - **Adult Swim**: [adult-swim/javascript](https://github.com/adult-swim/javascript)
   - **Airbnb**: [airbnb/javascript](https://github.com/airbnb/javascript)
   - **American Insitutes for Research**: [AIRAST/javascript](https://github.com/AIRAST/javascript)
   - **Apartmint**: [apartmint/javascript](https://github.com/apartmint/javascript)
@@ -1616,6 +1642,7 @@
   - **Digitpaint** [digitpaint/javascript](https://github.com/digitpaint/javascript)
   - **Evernote**: [evernote/javascript-style-guide](https://github.com/evernote/javascript-style-guide)
   - **ExactTarget**: [ExactTarget/javascript](https://github.com/ExactTarget/javascript)
+  - **Flexberry**: [Flexberry/javascript-style-guide](https://github.com/Flexberry/javascript-style-guide)
   - **Gawker Media**: [gawkermedia/javascript](https://github.com/gawkermedia/javascript)
   - **GeneralElectric**: [GeneralElectric/javascript](https://github.com/GeneralElectric/javascript)
   - **GoodData**: [gooddata/gdc-js-style](https://github.com/gooddata/gdc-js-style)
@@ -1624,6 +1651,7 @@
   - **InfoJobs**: [InfoJobs/JavaScript-Style-Guide](https://github.com/InfoJobs/JavaScript-Style-Guide)
   - **Intent Media**: [intentmedia/javascript](https://github.com/intentmedia/javascript)
   - **Jam3**: [Jam3/Javascript-Code-Conventions](https://github.com/Jam3/Javascript-Code-Conventions)
+  - **JSSolutions**: [JSSolutions/javascript](https://github.com/JSSolutions/javascript)
   - **Kinetica Solutions**: [kinetica/javascript](https://github.com/kinetica/javascript)
   - **Mighty Spring**: [mightyspring/javascript](https://github.com/mightyspring/javascript)
   - **MinnPost**: [MinnPost/javascript](https://github.com/MinnPost/javascript)
@@ -1656,18 +1684,20 @@
 
   This style guide is also available in other languages:
 
-  - ![de](https://raw.githubusercontent.com/gosquared/flags/master/flags/flags/shiny/24/Germany.png) **German**: [timofurrer/javascript-style-guide](https://github.com/timofurrer/javascript-style-guide)
-  - ![jp](https://raw.githubusercontent.com/gosquared/flags/master/flags/flags/shiny/24/Japan.png) **Japanese**: [mitsuruog/javacript-style-guide](https://github.com/mitsuruog/javacript-style-guide)
   - ![br](https://raw.githubusercontent.com/gosquared/flags/master/flags/flags/shiny/24/Brazil.png) **Brazilian Portuguese**: [armoucar/javascript-style-guide](https://github.com/armoucar/javascript-style-guide)
+  - ![bg](https://raw.githubusercontent.com/gosquared/flags/master/flags/flags/shiny/24/Bulgaria.png) **Bulgarian**: [borislavvv/javascript](https://github.com/borislavvv/javascript)
+  - ![ca](https://raw.githubusercontent.com/fpmweb/javascript-style-guide/master/img/catala.png) **Catalan**: [fpmweb/javascript-style-guide](https://github.com/fpmweb/javascript-style-guide)
   - ![tw](https://raw.githubusercontent.com/gosquared/flags/master/flags/flags/shiny/24/Taiwan.png) **Chinese(Traditional)**: [jigsawye/javascript](https://github.com/jigsawye/javascript)
   - ![cn](https://raw.githubusercontent.com/gosquared/flags/master/flags/flags/shiny/24/China.png) **Chinese(Simplified)**: [adamlu/javascript-style-guide](https://github.com/adamlu/javascript-style-guide)
-  - ![es](https://raw.githubusercontent.com/gosquared/flags/master/flags/flags/shiny/24/Spain.png) **Spanish**: [paolocarrasco/javascript-style-guide](https://github.com/paolocarrasco/javascript-style-guide)
-  - ![kr](https://raw.githubusercontent.com/gosquared/flags/master/flags/flags/shiny/24/South-Korea.png) **Korean**: [tipjs/javascript-style-guide](https://github.com/tipjs/javascript-style-guide)
   - ![fr](https://raw.githubusercontent.com/gosquared/flags/master/flags/flags/shiny/24/France.png) **French**: [nmussy/javascript-style-guide](https://github.com/nmussy/javascript-style-guide)
-  - ![ru](https://raw.githubusercontent.com/gosquared/flags/master/flags/flags/shiny/24/Russia.png) **Russian**: [uprock/javascript](https://github.com/uprock/javascript)
-  - ![bg](https://raw.githubusercontent.com/gosquared/flags/master/flags/flags/shiny/24/Bulgaria.png) **Bulgarian**: [borislavvv/javascript](https://github.com/borislavvv/javascript)
-  - ![ca](https://raw.githubusercontent.com/fpmweb/javascript-style-guide/master/img/catala.png) **Catalan**: [fpmweb/javascript-style-guide](https://github.com/fpmweb/javascript-style-guide)
+  - ![de](https://raw.githubusercontent.com/gosquared/flags/master/flags/flags/shiny/24/Germany.png) **German**: [timofurrer/javascript-style-guide](https://github.com/timofurrer/javascript-style-guide)
+  - ![it](https://raw.githubusercontent.com/gosquared/flags/master/flags/flags/shiny/24/Italy.png) **Italian**: [sinkswim/javascript-style-guide](https://github.com/sinkswim/javascript-style-guide)
+  - ![jp](https://raw.githubusercontent.com/gosquared/flags/master/flags/flags/shiny/24/Japan.png) **Japanese**: [mitsuruog/javacript-style-guide](https://github.com/mitsuruog/javacript-style-guide)
+  - ![kr](https://raw.githubusercontent.com/gosquared/flags/master/flags/flags/shiny/24/South-Korea.png) **Korean**: [tipjs/javascript-style-guide](https://github.com/tipjs/javascript-style-guide)
   - ![pl](https://raw.githubusercontent.com/gosquared/flags/master/flags/flags/shiny/24/Poland.png) **Polish**: [mjurczyk/javascript](https://github.com/mjurczyk/javascript)
+  - ![ru](https://raw.githubusercontent.com/gosquared/flags/master/flags/flags/shiny/24/Russia.png) **Russian**: [uprock/javascript](https://github.com/uprock/javascript)
+  - ![es](https://raw.githubusercontent.com/gosquared/flags/master/flags/flags/shiny/24/Spain.png) **Spanish**: [paolocarrasco/javascript-style-guide](https://github.com/paolocarrasco/javascript-style-guide)
+  - ![th](https://raw.githubusercontent.com/gosquared/flags/master/flags/flags/shiny/24/Thailand.png) **Thai**: [lvarayut/javascript-style-guide](https://github.com/lvarayut/javascript-style-guide)
 
 ## The JavaScript Style Guide Guide
 

From cc460132ccbcbad2dceac70474ca3756e43b5b95 Mon Sep 17 00:00:00 2001
From: Josh Perez <josh@goatslacker.com>
Date: Tue, 28 Apr 2015 21:31:58 -0700
Subject: [PATCH 0196/1591] Learn you some ES6

---
 README.md | 6 ++++++
 1 file changed, 6 insertions(+)

diff --git a/README.md b/README.md
index e63ee40032..5c1913cc55 100644
--- a/README.md
+++ b/README.md
@@ -1944,6 +1944,12 @@ This is a collection of links to the various es6 features.
 
 ## Resources
 
+**Learning ES6**
+
+  - [Draft ECMA 2015 (ES6) Spec](https://people.mozilla.org/~jorendorff/es6-draft.html)
+  - [ExploringJS](http://exploringjs.com/)
+  - [ES6 Compatibility Table](https://kangax.github.io/compat-table/es6/)
+  - [Comprehensive Overview of ES6 Features](http://es6-features.org/)
 
 **Read This**
 

From a41c1fab68fa913c9184299cfa92ac453a420291 Mon Sep 17 00:00:00 2001
From: Harrison Shoff <hi@hshoff.com>
Date: Wed, 29 Apr 2015 10:07:11 -0700
Subject: [PATCH 0197/1591] [intro] our es5 guide is still up to date

---
 README.md | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/README.md b/README.md
index 5c1913cc55..825ccfc539 100644
--- a/README.md
+++ b/README.md
@@ -4,7 +4,7 @@
 
 *A mostly reasonable approach to JavaScript*
 
-[For our old ES5-only guide click here](es5/).
+[For the ES5-only guide click here](es5/).
 
 ## Table of Contents
 

From a2034b0f6ce448c272bd4c13773dfd710dbfeb89 Mon Sep 17 00:00:00 2001
From: Harrison Shoff <hi@hshoff.com>
Date: Wed, 29 Apr 2015 10:39:01 -0700
Subject: [PATCH 0198/1591] [commas] additional trailing commas good in es6.
 fixes #323

---
 README.md | 26 ++++++++++++++++++++------
 1 file changed, 20 insertions(+), 6 deletions(-)

diff --git a/README.md b/README.md
index 825ccfc539..ea5de7c7ab 100644
--- a/README.md
+++ b/README.md
@@ -1470,31 +1470,45 @@
     };
     ```
 
-  - Additional trailing comma: **Nope.** This can cause problems with IE6/7 and IE9 if it's in quirksmode. Also, in some implementations of ES3 would add length to an array if it had an additional trailing comma. This was clarified in ES5 ([source](http://es5.github.io/#D)):
+  - Additional trailing comma: **Yup.**
 
-  > Edition 5 clarifies the fact that a trailing comma at the end of an ArrayInitialiser does not add to the length of the array. This is not a semantic change from Edition 3 but some implementations may have previously misinterpreted this.
+  > Why? This leads to cleaner git diffs. Also, transpilers like Babel will remove the additional trailing comma in the transpiled code which means you don't have to worry about the [trailing comma problem](es5/README.md#commas) in legacy browsers.
 
     ```javascript
+    // bad - git diff without trailing comma
+    const hero = {
+    -    firstName: 'Bob',
+    +    lastName: 'Parr',
+    +    heroName: 'Mr. Incredible'
+    }
+
+    // good - git diff with trailing comma
+    const hero = {
+         firstName: 'Bob',
+         lastName: 'Parr',
+    +    heroName: 'Mr. Incredible',
+    }
+
     // bad
     const hero = {
       firstName: 'Kevin',
-      lastName: 'Flynn',
+      lastName: 'Flynn'
     };
 
     const heroes = [
       'Batman',
-      'Superman',
+      'Superman'
     ];
 
     // good
     const hero = {
       firstName: 'Kevin',
-      lastName: 'Flynn'
+      lastName: 'Flynn',
     };
 
     const heroes = [
       'Batman',
-      'Superman'
+      'Superman',
     ];
     ```
 

From 7ade95434c6d9e8faf862e6f69df1110449e4955 Mon Sep 17 00:00:00 2001
From: Harrison Shoff <hi@hshoff.com>
Date: Wed, 29 Apr 2015 10:42:03 -0700
Subject: [PATCH 0199/1591] [commas] fix bad git diff example

---
 README.md | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/README.md b/README.md
index ea5de7c7ab..4ae97936b4 100644
--- a/README.md
+++ b/README.md
@@ -1477,7 +1477,8 @@
     ```javascript
     // bad - git diff without trailing comma
     const hero = {
-    -    firstName: 'Bob',
+         firstName: 'Bob',
+    -    lastName: 'Parr'
     +    lastName: 'Parr',
     +    heroName: 'Mr. Incredible'
     }

From 07bba234a0f45e70dc7e7d7fa6810b6e966aefbd Mon Sep 17 00:00:00 2001
From: Harrison Shoff <hi@hshoff.com>
Date: Wed, 29 Apr 2015 11:48:52 -0700
Subject: [PATCH 0200/1591] [readme] update additional trailing commas,
 examples

---
 README.md | 102 ++++++++++++++++++++++++++++--------------------------
 1 file changed, 53 insertions(+), 49 deletions(-)

diff --git a/README.md b/README.md
index 4ae97936b4..e1680fb91e 100644
--- a/README.md
+++ b/README.md
@@ -189,7 +189,7 @@
     // bad
     const obj = {
       id: 5,
-      name: 'San Francisco'
+      name: 'San Francisco',
     };
     obj[getKey('enabled')] = true;
 
@@ -197,7 +197,7 @@
     const obj = {
       id: 5,
       name: 'San Francisco',
-      [getKey('enabled')]: true
+      [getKey('enabled')]: true,
     };
     ```
 
@@ -211,7 +211,7 @@
 
       addValue: function (value) {
         return atom.value + value;
-      }
+      },
     };
 
     // good
@@ -220,7 +220,7 @@
 
       addValue(value) {
         return atom.value + value;
-      }
+      },
     };
     ```
 
@@ -258,7 +258,7 @@
       lukeSkywalker,
       episodeThree: 3,
       mayTheFourth: 4,
-      anakinSkywalker
+      anakinSkywalker,
     };
 
     // good
@@ -268,7 +268,7 @@
       episodeOne: 1,
       twoJedisWalkIntoACantina: 2,
       episodeThree: 3,
-      mayTheFourth: 4
+      mayTheFourth: 4,
     };
     ```
 
@@ -397,10 +397,10 @@
 
     ```javascript
     // bad
-    const name = "Bob Parr";
+    const name = "Capt. Janeway";
 
     // good
-    const name = 'Bob Parr';
+    const name = 'Capt. Janeway';
     ```
 
   - Strings longer than 80 characters should be written across multiple lines using string concatenation.
@@ -809,7 +809,7 @@
     sum === 15;
     ```
 
-  - Don't use generators.
+  - Don't use generators for now.
 
   > Why? They don't transpile well to ES5.
 
@@ -823,7 +823,7 @@
     ```javascript
     const luke = {
       jedi: true,
-      age: 28
+      age: 28,
     };
 
     // bad
@@ -838,7 +838,7 @@
     ```javascript
     const luke = {
       jedi: true,
-      age: 28
+      age: 28,
     };
 
     function getProp(prop) {
@@ -1225,24 +1225,26 @@
   - Use `// FIXME:` to annotate problems.
 
     ```javascript
-    function Calculator() {
+    class Calculator {
+      constructor() {
+        // FIXME: shouldn't use a global here
+        total = 0;
 
-      // FIXME: shouldn't use a global here
-      total = 0;
-
-      return this;
+        return this;
+      }
     }
     ```
 
   - Use `// TODO:` to annotate solutions to problems.
 
     ```javascript
-    function Calculator() {
-
-      // TODO: total should be configurable by an options param
-      this.total = 0;
+    class Calculator {
+      constructor() {
+        // TODO: total should be configurable by an options param
+        this.total = 0;
 
-      return this;
+        return this;
+      }
     }
   ```
 
@@ -1412,20 +1414,20 @@
 
     // bad
     const obj = {
-      foo: function() {
+      foo() {
+      },
+      bar() {
       },
-      bar: function() {
-      }
     };
     return obj;
 
     // good
     const obj = {
-      foo: function() {
+      foo() {
       },
 
-      bar: function() {
-      }
+      bar() {
+      },
     };
 
     return obj;
@@ -1450,23 +1452,23 @@
     const story = [
       once,
       upon,
-      aTime
+      aTime,
     ];
 
     // bad
     const hero = {
-        firstName: 'Bob'
-      , lastName: 'Parr'
-      , heroName: 'Mr. Incredible'
-      , superPower: 'strength'
+        firstName: 'Ada'
+      , lastName: 'Lovelace'
+      , birthYear: 1815
+      , superPower: 'computers'
     };
 
     // good
     const hero = {
-      firstName: 'Bob',
-      lastName: 'Parr',
-      heroName: 'Mr. Incredible',
-      superPower: 'strength'
+      firstName: 'Ada',
+      lastName: 'Lovelace',
+      birthYear: 1815,
+      superPower: 'computers',
     };
     ```
 
@@ -1477,23 +1479,24 @@
     ```javascript
     // bad - git diff without trailing comma
     const hero = {
-         firstName: 'Bob',
-    -    lastName: 'Parr'
-    +    lastName: 'Parr',
-    +    heroName: 'Mr. Incredible'
+         firstName: 'Florence',
+    -    lastName: 'Nightingale'
+    +    lastName: 'Nightingale',
+    +    inventorOf: ['coxcomb graph', 'mordern nursing']
     }
 
     // good - git diff with trailing comma
     const hero = {
-         firstName: 'Bob',
-         lastName: 'Parr',
-    +    heroName: 'Mr. Incredible',
+         firstName: 'Florence',
+         lastName: 'Nightingale',
+    +    inventorOf: ['coxcomb chart', 'mordern nursing'],
     }
 
     // bad
     const hero = {
-      firstName: 'Kevin',
-      lastName: 'Flynn'
+      firstName: 'Dana',
+      lastName: 'Scully',
+      catchPhrase: 'Adventure is out there'
     };
 
     const heroes = [
@@ -1503,8 +1506,9 @@
 
     // good
     const hero = {
-      firstName: 'Kevin',
-      lastName: 'Flynn',
+      firstName: 'Dana',
+      lastName: 'Scully',
+      catchPhrase: 'Adventure is out there',
     };
 
     const heroes = [
@@ -1660,7 +1664,7 @@
     }
 
     const bad = new user({
-      name: 'nope'
+      name: 'nope',
     });
 
     // good
@@ -1671,7 +1675,7 @@
     }
 
     const good = new User({
-      name: 'yup'
+      name: 'yup',
     });
     ```
 

From 2521d46683ce8487f0bd1cdfdd49d42cf595faf6 Mon Sep 17 00:00:00 2001
From: Harrison Shoff <hi@hshoff.com>
Date: Wed, 29 Apr 2015 11:49:28 -0700
Subject: [PATCH 0201/1591] [readme] update additional trailing commas,
 examples

---
 README.md | 4 +---
 1 file changed, 1 insertion(+), 3 deletions(-)

diff --git a/README.md b/README.md
index e1680fb91e..b0cf7d9e92 100644
--- a/README.md
+++ b/README.md
@@ -1495,8 +1495,7 @@
     // bad
     const hero = {
       firstName: 'Dana',
-      lastName: 'Scully',
-      catchPhrase: 'Adventure is out there'
+      lastName: 'Scully'
     };
 
     const heroes = [
@@ -1508,7 +1507,6 @@
     const hero = {
       firstName: 'Dana',
       lastName: 'Scully',
-      catchPhrase: 'Adventure is out there',
     };
 
     const heroes = [

From 0ffbdd3692e6717dd5d34288da5e2e3efb8be0e9 Mon Sep 17 00:00:00 2001
From: Harrison Shoff <hi@hshoff.com>
Date: Wed, 29 Apr 2015 12:26:14 -0700
Subject: [PATCH 0202/1591] [comments] fix example

---
 README.md | 4 ----
 1 file changed, 4 deletions(-)

diff --git a/README.md b/README.md
index b0cf7d9e92..18a460a7e6 100644
--- a/README.md
+++ b/README.md
@@ -1229,8 +1229,6 @@
       constructor() {
         // FIXME: shouldn't use a global here
         total = 0;
-
-        return this;
       }
     }
     ```
@@ -1242,8 +1240,6 @@
       constructor() {
         // TODO: total should be configurable by an options param
         this.total = 0;
-
-        return this;
       }
     }
   ```

From 3764337df248e5068684f00bd2153dfd31fa243f Mon Sep 17 00:00:00 2001
From: Alvin Sng <alvin.sng@airbedandbreakfast.com>
Date: Wed, 29 Apr 2015 15:29:51 -0700
Subject: [PATCH 0203/1591] React/JSX Style Guide

---
 react/README.md | 218 ++++++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 218 insertions(+)
 create mode 100644 react/README.md

diff --git a/react/README.md b/react/README.md
new file mode 100644
index 0000000000..331382735f
--- /dev/null
+++ b/react/README.md
@@ -0,0 +1,218 @@
+# Airbnb React/JSX Style Guide
+
+*A mostly reasonable approach to React and JSX*
+
+## Table of Contents
+
+  1. [Basic Rules](#basic-rules)
+  1. [Naming](#naming)
+  1. [Declaration](#declaration)
+  1. [Alignment](#alignment)
+  1. [Quotes](#quotes)
+  1. [Spacing](#spacing)
+  1. [Props](#props)
+  1. [Parentheses](#parentheses)
+  1. [Tags](#tags)
+  1. [Ordering](#ordering)
+
+## Basic Rules
+
+  - Only include one React component per file.
+  - Always use JSX syntax.
+  - Do not use `React.createElement` unless you're initializing the app from a `.js` file.
+
+## Naming
+
+  - **Extensions**: Use `.jsx` extension for React components.
+  - **Filename**: Use PascalCase for filenames. E.g., `ReservationCard.jsx`.
+  - **Reference Naming**: Use PascalCase for React components and camelCase for their instances:
+    ```javascript
+    // bad
+    const reservationCard = require('./ReservationCard');
+
+    // good
+    const ReservationCard = require('./ReservationCard');
+
+    // bad
+    const ReservationItem = <ReservationCard />;
+
+    // good
+    const reservationItem = <ReservationCard />;
+    ```
+
+    **Component Naming**: Use the filename as the component name. So `ReservationCard.jsx` should have a reference name of ReservationCard. However, for root components of a directory, use index.jsx as the filename and use the directory name as the component name:
+    ```javascript
+    // bad
+    const Footer = require('./Footer/Footer.jsx')
+
+    // bad
+    const Footer = require('./Footer/index.jsx')
+
+    // good
+    const Footer = require('./Footer')
+    ```
+
+
+## Declaration
+  - Do not use displayName for naming components, instead name the component by reference.
+
+    ```javascript
+    // bad
+    export default React.createClass({
+      displayName: 'ReservationCard',
+      // stuff goes here
+    });
+
+    // good
+    const ReservationCard = React.createClass({
+      // stuff goes here
+    });
+    export default ReservationCard;
+    ```
+
+## Alignment
+  - Follow these alignment styles for JSX syntax
+
+    ```javascript
+    // bad
+    <Foo bar="bar"
+         baz="baz" />
+
+    // good
+    <Foo
+      bar="bar"
+      baz="baz"
+    />
+
+    // if props fit in one line then keep it on the same line
+    <Foo bar="bar" />
+
+    // children get indented normally
+    <Foo
+      bar="bar"
+      baz="baz"
+    >
+      <Spazz />
+    </Foo>
+    ```
+
+## Quotes
+  - Always use double quotes (`"`) for JSX attributes, but single quotes for all other JavaScript.
+    ```javascript
+    // bad
+    <Foo bar='bar' />
+
+    // good
+    <Foo bar="bar" />
+
+    // bad
+    <Foo style={{ left: "20px" }} />
+
+    // good
+    <Foo style={{ left: '20px' }} />
+    ```
+
+## Spacing
+  - Always include a single space in your self-closing tag.
+    ```javascript
+    // bad
+    <Foo/>
+
+    // very bad
+    <Foo                 />
+
+    // bad
+    <Foo
+     />
+
+    // good
+    <Foo />
+    ```
+
+## Props
+  - Alphabetically order your props.
+    ```javascript
+    // bad
+    <Foo
+      className="bar baz"
+      bar="bar"
+    />
+
+    // good
+    <Foo
+      bar="bar"
+      className="bar baz"
+    />
+    ```
+
+## Parentheses
+  - Wrap JSX tags in parentheses when they span more than one line:
+    ```javascript
+    /// bad
+    render() {
+      return <MyComponent className="long body" foo="bar" >
+               <MyChild />
+             </MyComponent>;
+    }
+
+    // good
+    render() {
+      return (
+        <MyComponent className="long body" foo="bar">
+          <MyChild />
+        </MyComponent>
+      );
+    }
+
+    // good, when single line
+    render() {
+      const body = <div>hello</div>;
+      return <MyComponent>{body}</MyComponent>;
+    }
+    ```
+
+## Tags
+  - Always self-close tags that have no children.
+    ```javascript
+    // bad
+    <Foo className="stuff"></Foo>
+
+    // good
+    <Foo className="stuff" />
+    ```
+
+  - If your component has multi-line properties, close its tag on a new line.
+    ```javascript
+    // bad
+    <Foo
+      bar="bar"
+      baz="baz" />
+
+    // good
+    <Foo
+      bar="bar"
+      baz="baz"
+    />
+    ```
+
+## Ordering
+  - Always follow the following order for methods in a react component:
+
+  1. displayName
+  2. mixins (as of React v0.13 mixins are deprecated)
+  3. statics
+  4. propTypes
+  5. getDefaultProps
+  6. getInitialState
+  7. componentWillMount
+  8. componentDidMount
+  9. componentWillReceiveProps
+  10. shouldComponentUpdate
+  11. componentWillUpdate
+  12. componentWillUnmount
+  13. *clickHandlers or eventHandlers* like onClickSubmit() or onChangeDescription()
+  14. *gettter methods for render* like getSelectReason() or getFooterContent()
+  15. *Optional render methods* like renderNavigation() or renderProfilePicture()
+  16. render
+
+**[⬆ back to top](#table-of-contents)**

From 2595cb6724d0fd02ed771006517394fc43df341e Mon Sep 17 00:00:00 2001
From: Alvin Sng <alvin.sng@airbedandbreakfast.com>
Date: Thu, 30 Apr 2015 11:57:01 -0700
Subject: [PATCH 0204/1591] removed alpha sort, changed jsx exten to js, added
 method prefix rule, added camelCase for props

---
 react/README.md | 63 +++++++++++++++++++++++++++++++++----------------
 1 file changed, 43 insertions(+), 20 deletions(-)

diff --git a/react/README.md b/react/README.md
index 331382735f..6d9eb16921 100644
--- a/react/README.md
+++ b/react/README.md
@@ -13,18 +13,19 @@
   1. [Props](#props)
   1. [Parentheses](#parentheses)
   1. [Tags](#tags)
+  1. [Methods](#methods)
   1. [Ordering](#ordering)
 
 ## Basic Rules
 
   - Only include one React component per file.
   - Always use JSX syntax.
-  - Do not use `React.createElement` unless you're initializing the app from a `.js` file.
+  - Do not use `React.createElement` unless you're initializing the app from a file that does not transform JSX.
 
 ## Naming
 
-  - **Extensions**: Use `.jsx` extension for React components.
-  - **Filename**: Use PascalCase for filenames. E.g., `ReservationCard.jsx`.
+  - **Extensions**: Use `.js` extension for React components.
+  - **Filename**: Use PascalCase for filenames. E.g., `ReservationCard.js`.
   - **Reference Naming**: Use PascalCase for React components and camelCase for their instances:
     ```javascript
     // bad
@@ -40,13 +41,13 @@
     const reservationItem = <ReservationCard />;
     ```
 
-    **Component Naming**: Use the filename as the component name. So `ReservationCard.jsx` should have a reference name of ReservationCard. However, for root components of a directory, use index.jsx as the filename and use the directory name as the component name:
+    **Component Naming**: Use the filename as the component name. So `ReservationCard.js` should have a reference name of ReservationCard. However, for root components of a directory, use index.js as the filename and use the directory name as the component name:
     ```javascript
     // bad
-    const Footer = require('./Footer/Footer.jsx')
+    const Footer = require('./Footer/Footer.js')
 
     // bad
-    const Footer = require('./Footer/index.jsx')
+    const Footer = require('./Footer/index.js')
 
     // good
     const Footer = require('./Footer')
@@ -71,17 +72,17 @@
     ```
 
 ## Alignment
-  - Follow these alignment styles for JSX syntax
+  - Follow these alignment styles for js syntax
 
     ```javascript
     // bad
-    <Foo bar="bar"
-         baz="baz" />
+    <Foo superLongParam="bar"
+         anotherSuperLongParam="baz" />
 
     // good
     <Foo
-      bar="bar"
-      baz="baz"
+      superLongParam="bar"
+      anotherSuperLongParam="baz"
     />
 
     // if props fit in one line then keep it on the same line
@@ -89,8 +90,8 @@
 
     // children get indented normally
     <Foo
-      bar="bar"
-      baz="baz"
+      superLongParam="bar"
+      anotherSuperLongParam="baz"
     >
       <Spazz />
     </Foo>
@@ -130,18 +131,18 @@
     ```
 
 ## Props
-  - Alphabetically order your props.
+  - Always use camelCase for prop names.
     ```javascript
     // bad
     <Foo
-      className="bar baz"
-      bar="bar"
+      UserName="hello"
+      phone_number={12345678}
     />
 
     // good
     <Foo
-      bar="bar"
-      className="bar baz"
+      userName="hello"
+      phoneNumber={12345678}
     />
     ```
 
@@ -150,7 +151,7 @@
     ```javascript
     /// bad
     render() {
-      return <MyComponent className="long body" foo="bar" >
+      return <MyComponent className="long body" foo="bar">
                <MyChild />
              </MyComponent>;
     }
@@ -195,6 +196,28 @@
     />
     ```
 
+## Methods
+  - Do not use underscore prefix for internal methods of a react component.
+    ```javascript
+    // bad
+    React.createClass({
+      _onClickSubmit() {
+        // do stuff
+      }
+
+      // other stuff
+    });
+
+    // good
+    React.createClass({
+      onClickSubmit() {
+        // do stuff
+      }
+
+      // other stuff
+    });
+    ```
+
 ## Ordering
   - Always follow the following order for methods in a react component:
 
@@ -211,7 +234,7 @@
   11. componentWillUpdate
   12. componentWillUnmount
   13. *clickHandlers or eventHandlers* like onClickSubmit() or onChangeDescription()
-  14. *gettter methods for render* like getSelectReason() or getFooterContent()
+  14. *getter methods for render* like getSelectReason() or getFooterContent()
   15. *Optional render methods* like renderNavigation() or renderProfilePicture()
   16. render
 

From a9319691e4618188732c132e96cc8122955b678f Mon Sep 17 00:00:00 2001
From: Tomek Wiszniewski <t.wiszniewski@gmail.com>
Date: Tue, 5 May 2015 09:51:00 +0200
Subject: [PATCH 0205/1591] Fix typo

---
 README.md | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/README.md b/README.md
index 18a460a7e6..d80628486a 100644
--- a/README.md
+++ b/README.md
@@ -586,7 +586,7 @@
 
     // good
     [1, 2, 3].map((x) => {
-      return x * x
+      return x * x;
     });
     ```
 

From df5029b5a55602a0b65f6a0a8dd7ac9a757caea8 Mon Sep 17 00:00:00 2001
From: Harrison Shoff <hi@hshoff.com>
Date: Wed, 6 May 2015 15:49:50 -0700
Subject: [PATCH 0206/1591] [pkg] bump version

---
 package.json | 8 ++++++--
 1 file changed, 6 insertions(+), 2 deletions(-)

diff --git a/package.json b/package.json
index 2fe47fb268..ff8167fad5 100644
--- a/package.json
+++ b/package.json
@@ -1,6 +1,6 @@
 {
   "name": "airbnb-style",
-  "version": "1.0.0",
+  "version": "2.0.0",
   "description": "A mostly reasonable approach to JavaScript.",
   "scripts": {
     "test": "echo \"Error: no test specified\" && exit 1"
@@ -12,7 +12,11 @@
   "keywords": [
     "style guide",
     "lint",
-    "airbnb"
+    "airbnb",
+    "es6",
+    "es2015",
+    "react",
+    "jsx"
   ],
   "author": "Harrison Shoff <hi@hshoff.com> (https://twitter.com/hshoff)",
   "license": "MIT",

From 36ddb36e21a3e7c62a93e9d0f194973c0578fccb Mon Sep 17 00:00:00 2001
From: Harrison Shoff <hi@hshoff.com>
Date: Thu, 7 May 2015 11:35:42 -0700
Subject: [PATCH 0207/1591] [conditionals] clarify conditionals. fixes #336

---
 README.md | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/README.md b/README.md
index d80628486a..c8398ad88b 100644
--- a/README.md
+++ b/README.md
@@ -1059,7 +1059,7 @@
 ## Comparison Operators & Equality
 
   - Use `===` and `!==` over `==` and `!=`.
-  - Comparison operators are evaluated using coercion with the `ToBoolean` method and always follow these simple rules:
+  - Comparison operators are evaluated in conditional statements using coercion with the `ToBoolean` method and always follow these simple rules:
 
     + **Objects** evaluate to **true**
     + **Undefined** evaluates to **false**

From 42958035765aa5cfacef2fdc2cfc92a51e6b704a Mon Sep 17 00:00:00 2001
From: Harrison Shoff <hi@hshoff.com>
Date: Thu, 7 May 2015 11:44:19 -0700
Subject: [PATCH 0208/1591] [conditionals] use if statement

---
 README.md | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/README.md b/README.md
index c8398ad88b..4067a930ce 100644
--- a/README.md
+++ b/README.md
@@ -1059,7 +1059,7 @@
 ## Comparison Operators & Equality
 
   - Use `===` and `!==` over `==` and `!=`.
-  - Comparison operators are evaluated in conditional statements using coercion with the `ToBoolean` method and always follow these simple rules:
+  - Comparison operators are evaluated in `if` statements using coercion with the `ToBoolean` method and always follow these simple rules:
 
     + **Objects** evaluate to **true**
     + **Undefined** evaluates to **false**

From 871a798a0dc22b9e667fcc291f5f11ee5c87870d Mon Sep 17 00:00:00 2001
From: Harrison Shoff <hi@hshoff.com>
Date: Thu, 7 May 2015 11:58:16 -0700
Subject: [PATCH 0209/1591] [conditionals] update wording, es5 version

---
 README.md     | 2 +-
 es5/README.md | 2 +-
 2 files changed, 2 insertions(+), 2 deletions(-)

diff --git a/README.md b/README.md
index 4067a930ce..8a2bd91dc4 100644
--- a/README.md
+++ b/README.md
@@ -1059,7 +1059,7 @@
 ## Comparison Operators & Equality
 
   - Use `===` and `!==` over `==` and `!=`.
-  - Comparison operators are evaluated in `if` statements using coercion with the `ToBoolean` method and always follow these simple rules:
+  - Conditional statements such as the `if` statement evaulate their expression using coercion with the `ToBoolean` abstract method and always follow these simple rules:
 
     + **Objects** evaluate to **true**
     + **Undefined** evaluates to **false**
diff --git a/es5/README.md b/es5/README.md
index 02ecc75ee6..85fc17db0d 100644
--- a/es5/README.md
+++ b/es5/README.md
@@ -572,7 +572,7 @@
 ## Comparison Operators & Equality
 
   - Use `===` and `!==` over `==` and `!=`.
-  - Comparison operators are evaluated using coercion with the `ToBoolean` method and always follow these simple rules:
+  - Conditional statements such as the `if` statement evaulate their expression using coercion with the `ToBoolean` abstract method and always follow these simple rules:
 
     + **Objects** evaluate to **true**
     + **Undefined** evaluates to **false**

From 27cc9a008c4ed96b5076cd54b692bd48ed430308 Mon Sep 17 00:00:00 2001
From: Michael Deol <mdeol@billabong.com>
Date: Tue, 12 May 2015 11:37:09 -0700
Subject: [PATCH 0210/1591] Addition of Billabong Orginization

---
 README.md     | 1 +
 es5/README.md | 1 +
 2 files changed, 2 insertions(+)

diff --git a/README.md b/README.md
index 8a2bd91dc4..f9f22f2bc6 100644
--- a/README.md
+++ b/README.md
@@ -2043,6 +2043,7 @@ This is a collection of links to the various es6 features.
   - **American Insitutes for Research**: [AIRAST/javascript](https://github.com/AIRAST/javascript)
   - **Apartmint**: [apartmint/javascript](https://github.com/apartmint/javascript)
   - **Avalara**: [avalara/javascript](https://github.com/avalara/javascript)
+  - **Billabong**: [billabong/javascript](https://github.com/billabong/javascript)
   - **Compass Learning**: [compasslearning/javascript-style-guide](https://github.com/compasslearning/javascript-style-guide)
   - **DailyMotion**: [dailymotion/javascript](https://github.com/dailymotion/javascript)
   - **Digitpaint** [digitpaint/javascript](https://github.com/digitpaint/javascript)
diff --git a/es5/README.md b/es5/README.md
index 85fc17db0d..b1a4efcbe9 100644
--- a/es5/README.md
+++ b/es5/README.md
@@ -1637,6 +1637,7 @@
   - **American Insitutes for Research**: [AIRAST/javascript](https://github.com/AIRAST/javascript)
   - **Apartmint**: [apartmint/javascript](https://github.com/apartmint/javascript)
   - **Avalara**: [avalara/javascript](https://github.com/avalara/javascript)
+  - **Billabong**: [billabong/javascript](https://github.com/billabong/javascript)
   - **Compass Learning**: [compasslearning/javascript-style-guide](https://github.com/compasslearning/javascript-style-guide)
   - **DailyMotion**: [dailymotion/javascript](https://github.com/dailymotion/javascript)
   - **Digitpaint** [digitpaint/javascript](https://github.com/digitpaint/javascript)

From 8bc1c17585e0f75b3a58c914902f00ff2630394f Mon Sep 17 00:00:00 2001
From: Michael Deol <mdeol@billabong.com>
Date: Tue, 12 May 2015 11:57:40 -0700
Subject: [PATCH 0211/1591] Fixed spacing on code block under Comments.

Even though github was rendering this correctly; I did this to fix tools
like https://github.com/suan/vim-instant-markdown from breaking syntax.
---
 README.md     | 2 +-
 es5/README.md | 2 +-
 2 files changed, 2 insertions(+), 2 deletions(-)

diff --git a/README.md b/README.md
index 8a2bd91dc4..c2182be754 100644
--- a/README.md
+++ b/README.md
@@ -1242,7 +1242,7 @@
         this.total = 0;
       }
     }
-  ```
+    ```
 
 **[⬆ back to top](#table-of-contents)**
 
diff --git a/es5/README.md b/es5/README.md
index 85fc17db0d..81376ee844 100644
--- a/es5/README.md
+++ b/es5/README.md
@@ -757,7 +757,7 @@
 
       return this;
     }
-  ```
+    ```
 
 **[⬆ back to top](#table-of-contents)**
 

From 535c4f73d0b72dd793278b41609a1cfcec35d0e2 Mon Sep 17 00:00:00 2001
From: Harrison Shoff <hi@hshoff.com>
Date: Wed, 13 May 2015 17:49:26 -0700
Subject: [PATCH 0212/1591] add links to individual rules

---
 README.md | 200 +++++++++++++++++++++++++++---------------------------
 1 file changed, 100 insertions(+), 100 deletions(-)

diff --git a/README.md b/README.md
index 114758b335..8c1a265ad3 100644
--- a/README.md
+++ b/README.md
@@ -47,7 +47,7 @@
 
 ## Types
 
-  - **Primitives**: When you access a primitive type you work directly on its value.
+  - [1.1](#1.1) <a id='1.1'></a> **Primitives**: When you access a primitive type you work directly on its value.
 
     + `string`
     + `number`
@@ -63,7 +63,7 @@
 
     console.log(foo, bar); // => 1, 9
     ```
-  - **Complex**: When you access a complex type you work on a reference to its value.
+  - [1.2](#1.2) <a id='1.2'></a> **Complex**: When you access a complex type you work on a reference to its value.
 
     + `object`
     + `array`
@@ -82,7 +82,7 @@
 
 ## References
 
-  - Use `const` for all of your references; avoid using `var`.
+  - [2.1](#2.1) <a id='2.1'></a> Use `const` for all of your references; avoid using `var`.
 
   > Why? This ensures that you can't reassign your references (mutation), which can lead to bugs and difficult to comprehend code.
 
@@ -96,7 +96,7 @@
     const b = 2;
     ```
 
-  - If you must mutate references, use `let` instead of `var`.
+  - [2.2](#2.2) <a id='2.2'></a> If you must mutate references, use `let` instead of `var`.
 
   > Why? `let` is block-scoped rather than function-scoped like `var`.
 
@@ -114,7 +114,7 @@
     }
     ```
 
-  - Note that both `let` and `const` are block-scoped.
+  - [2.3](#2.3) <a id='2.3'></a> Note that both `let` and `const` are block-scoped.
 
     ```javascript
     // const and let only exist in the blocks they are defined in.
@@ -130,7 +130,7 @@
 
 ## Objects
 
-  - Use the literal syntax for object creation.
+  - [3.1](#3.1) <a id='3.1'></a> Use the literal syntax for object creation.
 
     ```javascript
     // bad
@@ -140,7 +140,7 @@
     const item = {};
     ```
 
-  - Don't use [reserved words](http://es5.github.io/#x7.6.1) as keys. It won't work in IE8. [More info](https://github.com/airbnb/javascript/issues/61).
+  - [3.2](#3.2) <a id='3.2'></a> Don't use [reserved words](http://es5.github.io/#x7.6.1) as keys. It won't work in IE8. [More info](https://github.com/airbnb/javascript/issues/61).
 
     ```javascript
     // bad
@@ -156,7 +156,7 @@
     };
     ```
 
-  - Use readable synonyms in place of reserved words.
+  - [3.3](#3.3) <a id='3.3'></a> Use readable synonyms in place of reserved words.
 
     ```javascript
     // bad
@@ -176,7 +176,7 @@
     ```
 
   <a name="es6-computed-properties"></a>
-  - Use computed property names when creating objects with dynamic property names.
+  - [3.4](#3.4) <a id='3.4'></a> Use computed property names when creating objects with dynamic property names.
 
   > Why? They allow you to define all the properties of an object in one place.
 
@@ -202,7 +202,7 @@
     ```
 
   <a name="es6-object-shorthand"></a>
-  - Use object method shorthand.
+  - [3.5](#3.5) <a id='3.5'></a> Use object method shorthand.
 
     ```javascript
     // bad
@@ -225,7 +225,7 @@
     ```
 
   <a name="es6-object-concise"></a>
-  - Use property value shorthand.
+  - [3.6](#3.6) <a id='3.6'></a> Use property value shorthand.
 
   > Why? It is shorter to write and descriptive.
 
@@ -243,7 +243,7 @@
     };
     ```
 
-  - Group your shorthand properties at the beginning of your object declaration.
+  - [3.7](#3.7) <a id='3.7'></a> Group your shorthand properties at the beginning of your object declaration.
 
   > Why? It's easier to tell which properties are using the shorthand.
 
@@ -276,7 +276,7 @@
 
 ## Arrays
 
-  - Use the literal syntax for array creation.
+  - [4.1](#4.1) <a id='4.1'></a> Use the literal syntax for array creation.
 
     ```javascript
     // bad
@@ -286,7 +286,7 @@
     const items = [];
     ```
 
-  - Use Array#push instead of direct assignment to add items to an array.
+  - [4.2](#4.2) <a id='4.2'></a> Use Array#push instead of direct assignment to add items to an array.
 
     ```javascript
     const someStack = [];
@@ -300,7 +300,7 @@
     ```
 
   <a name="es6-array-spreads"></a>
-  - Use array spreads `...` to copy arrays.
+  - [4.3](#4.3) <a id='4.3'></a> Use array spreads `...` to copy arrays.
 
     ```javascript
     // bad
@@ -315,7 +315,7 @@
     // good
     const itemsCopy = [...items];
     ```
-  - To convert an array-like object to an array, use Array#from.
+  - [4.4](#4.4) <a id='4.4'></a> To convert an array-like object to an array, use Array#from.
 
     ```javascript
     const foo = document.querySelectorAll('.foo');
@@ -326,7 +326,7 @@
 
 ## Destructuring
 
-  - Use object destructuring when accessing and using multiple properties of an object.
+  - [5.1](#5.1) <a id='5.1'></a> Use object destructuring when accessing and using multiple properties of an object.
 
   > Why? Destructuring saves you from creating temporary references for those properties.
 
@@ -351,7 +351,7 @@
     }
     ```
 
-  - Use array destructuring.
+  - [5.2](#5.2) <a id='5.2'></a> Use array destructuring.
 
     ```javascript
     const arr = [1, 2, 3, 4];
@@ -364,7 +364,7 @@
     const [first, second] = arr;
     ```
 
-  - Use object destructuring for multiple return values, not array destructuring.
+  - [5.3](#5.3) <a id='5.3'></a> Use object destructuring for multiple return values, not array destructuring.
 
   > Why? You can add new properties over time or change the order of things without breaking call sites.
 
@@ -393,7 +393,7 @@
 
 ## Strings
 
-  - Use single quotes `''` for strings.
+  - [6.1](#6.1) <a id='6.1'></a> Use single quotes `''` for strings.
 
     ```javascript
     // bad
@@ -403,8 +403,8 @@
     const name = 'Capt. Janeway';
     ```
 
-  - Strings longer than 80 characters should be written across multiple lines using string concatenation.
-  - Note: If overused, long strings with concatenation could impact performance. [jsPerf](http://jsperf.com/ya-string-concat) & [Discussion](https://github.com/airbnb/javascript/issues/40).
+  - [6.2](#6.2) <a id='6.2'></a> Strings longer than 80 characters should be written across multiple lines using string concatenation.
+  - [6.3](#6.3) <a id='6.3'></a> Note: If overused, long strings with concatenation could impact performance. [jsPerf](http://jsperf.com/ya-string-concat) & [Discussion](https://github.com/airbnb/javascript/issues/40).
 
     ```javascript
     // bad
@@ -423,7 +423,7 @@
     ```
 
   <a name="es6-template-literals"></a>
-  - When programmatically building up strings, use template strings instead of concatenation.
+  - [6.4](#6.4) <a id='6.4'></a> When programmatically building up strings, use template strings instead of concatenation.
 
   > Why? Template strings give you a readable, concise syntax with proper newlines and string interpolation features.
 
@@ -449,7 +449,7 @@
 
 ## Functions
 
-  - Use function declarations instead of function expressions.
+  - [7.1](#7.1) <a id='7.1'></a> Use function declarations instead of function expressions.
 
   > Why? Function declarations are named, so they're easier to identify in call stacks. Also, the whole body of a function declaration is hoisted, whereas only the reference of a function expression is hoisted. This rule makes it possible to always use [Arrow Functions](#arrow-functions) in place of function expressions.
 
@@ -463,7 +463,7 @@
     }
     ```
 
-  - Function expressions:
+  - [7.2](#7.2) <a id='7.2'></a> Function expressions:
 
     ```javascript
     // immediately-invoked function expression (IIFE)
@@ -472,8 +472,8 @@
     })();
     ```
 
-  - Never declare a function in a non-function block (if, while, etc). Assign the function to a variable instead. Browsers will allow you to do it, but they all interpret it differently, which is bad news bears.
-  - **Note:** ECMA-262 defines a `block` as a list of statements. A function declaration is not a statement. [Read ECMA-262's note on this issue](http://www.ecma-international.org/publications/files/ECMA-ST/Ecma-262.pdf#page=97).
+  - [7.3](#7.3) <a id='7.3'></a> Never declare a function in a non-function block (if, while, etc). Assign the function to a variable instead. Browsers will allow you to do it, but they all interpret it differently, which is bad news bears.
+  - [7.4](#7.4) <a id='7.4'></a> **Note:** ECMA-262 defines a `block` as a list of statements. A function declaration is not a statement. [Read ECMA-262's note on this issue](http://www.ecma-international.org/publications/files/ECMA-ST/Ecma-262.pdf#page=97).
 
     ```javascript
     // bad
@@ -492,7 +492,7 @@
     }
     ```
 
-  - Never name a parameter `arguments`. This will take precedence over the `arguments` object that is given to every function scope.
+  - [7.5](#7.5) <a id='7.5'></a> Never name a parameter `arguments`. This will take precedence over the `arguments` object that is given to every function scope.
 
     ```javascript
     // bad
@@ -507,7 +507,7 @@
     ```
 
   <a name="es6-rest"></a>
-  - Never use `arguments`, opt to use rest syntax `...` instead.
+  - [7.6](#7.6) <a id='7.6'></a> Never use `arguments`, opt to use rest syntax `...` instead.
 
   > Why? `...` is explicit about which arguments you want pulled. Plus rest arguments are a real Array and not Array-like like `arguments`.
 
@@ -525,7 +525,7 @@
     ```
 
   <a name="es6-default-parameters"></a>
-  - Use default parameter syntax rather than mutating function arguments.
+  - [7.7](#7.7) <a id='7.7'></a> Use default parameter syntax rather than mutating function arguments.
 
     ```javascript
     // really bad
@@ -551,7 +551,7 @@
     }
     ```
 
-  - Avoid side effects with default parameters
+  - [7.8](#7.8) <a id='7.8'></a> Avoid side effects with default parameters
 
   > Why? They are confusing to reason about.
 
@@ -572,7 +572,7 @@
 
 ## Arrow Functions
 
-  - When you must use function expressions (as when passing an anonymous function), use arrow function notation.
+  - [8.1](#8.1) <a id='8.1'></a> When you must use function expressions (as when passing an anonymous function), use arrow function notation.
 
   > Why? It creates a version of the function that executes in the context of `this`, which is usually what you want, and is a more concise syntax.
 
@@ -590,7 +590,7 @@
     });
     ```
 
-  - If the function body fits on one line, feel free to omit the braces and use implicit return. Otherwise, add the braces and use a `return` statement.
+  - [8.2](#8.2) <a id='8.2'></a> If the function body fits on one line, feel free to omit the braces and use implicit return. Otherwise, add the braces and use a `return` statement.
 
   > Why? Syntactic sugar. It reads well when multiple functions are chained together.
 
@@ -606,7 +606,7 @@
     });
     ```
 
-  - Always use parentheses around the arguments. Omitting the parentheses makes the functions less readable and only works for single arguments.
+  - [8.3](#8.3) <a id='8.3'></a> Always use parentheses around the arguments. Omitting the parentheses makes the functions less readable and only works for single arguments.
 
   > Why? These declarations read better with parentheses. They are also required when you have multiple parameters so this enforces consistency.
 
@@ -623,7 +623,7 @@
 
 ## Constructors
 
-  - Always use `class`. Avoid manipulating `prototype` directly.
+  - [9.1](#9.1) <a id='9.1'></a> Always use `class`. Avoid manipulating `prototype` directly.
 
   > Why? `class` syntax is more concise and easier to reason about.
 
@@ -652,7 +652,7 @@
     }
     ```
 
-  - Use `extends` for inheritance.
+  - [9.2](#9.2) <a id='9.2'></a> Use `extends` for inheritance.
 
   > Why? It is a built-in way to inherit prototype functionality without breaking `instanceof`.
 
@@ -675,7 +675,7 @@
     }
     ```
 
-  - Methods can return `this` to help with method chaining.
+  - [9.3](#9.3) <a id='9.3'></a> Methods can return `this` to help with method chaining.
 
     ```javascript
     // bad
@@ -712,7 +712,7 @@
     ```
 
 
-  - It's okay to write a custom toString() method, just make sure it works successfully and causes no side effects.
+  - [9.4](#9.4) <a id='9.4'></a> It's okay to write a custom toString() method, just make sure it works successfully and causes no side effects.
 
     ```javascript
     class Jedi {
@@ -735,7 +735,7 @@
 
 ## Modules
 
-  - Always use modules (`import`/`export`) over a non-standard module system. You can always transpile to your preferred module system.
+  - [10.1](#10.1) <a id='10.1'></a> Always use modules (`import`/`export`) over a non-standard module system. You can always transpile to your preferred module system.
 
   > Why? Modules are the future, let's start using the future now.
 
@@ -753,7 +753,7 @@
     export default es6;
     ```
 
-  - Do not use wildcard imports.
+  - [10.2](#10.2) <a id='10.2'></a> Do not use wildcard imports.
 
   > Why? This makes sure you have a single default export.
 
@@ -765,7 +765,7 @@
     import AirbnbStyleGuide from './AirbnbStyleGuide';
     ```
 
-  - And do not export directly from an import.
+  - [10.3](#10.3) <a id='10.3'></a>And do not export directly from an import.
 
   > Why? Although the one-liner is concise, having one clear way to import and one clear way to export makes things consistent.
 
@@ -784,7 +784,7 @@
 
 ## Iterators and Generators
 
-  - Don't use iterators. Prefer JavaScript's higher-order functions like `map()` and `reduce()` instead of loops like `for-of`.
+  - [11.1](#11.1) <a id='11.1'></a> Don't use iterators. Prefer JavaScript's higher-order functions like `map()` and `reduce()` instead of loops like `for-of`.
 
   > Why? This enforces our immutable rule. Dealing with pure functions that return values is easier to reason about than side-effects.
 
@@ -809,7 +809,7 @@
     sum === 15;
     ```
 
-  - Don't use generators for now.
+  - [11.2](#11.2) <a id='11.2'></a> Don't use generators for now.
 
   > Why? They don't transpile well to ES5.
 
@@ -818,7 +818,7 @@
 
 ## Properties
 
-  - Use dot notation when accessing properties.
+  - [12.1](#12.1) <a id='12.1'></a> Use dot notation when accessing properties.
 
     ```javascript
     const luke = {
@@ -833,7 +833,7 @@
     const isJedi = luke.jedi;
     ```
 
-  - Use subscript notation `[]` when accessing properties with a variable.
+  - [12.2](#12.2) <a id='12.2'></a> Use subscript notation `[]` when accessing properties with a variable.
 
     ```javascript
     const luke = {
@@ -853,7 +853,7 @@
 
 ## Variables
 
-  - Always use `const` to declare variables. Not doing so will result in global variables. We want to avoid polluting the global namespace. Captain Planet warned us of that.
+  - [13.1](#13.1) <a id='13.1'></a> Always use `const` to declare variables. Not doing so will result in global variables. We want to avoid polluting the global namespace. Captain Planet warned us of that.
 
     ```javascript
     // bad
@@ -863,7 +863,7 @@
     const superPower = new SuperPower();
     ```
 
-  - Use one `const` declaration per variable.
+  - [13.2](#13.2) <a id='13.2'></a> Use one `const` declaration per variable.
 
     > Why? It's easier to add new variable declarations this way, and you never have to worry about swapping out a `;` for a `,` or introducing punctuation-only diffs.
 
@@ -885,7 +885,7 @@
     const dragonball = 'z';
     ```
 
-  - Group all your `const`s and then group all your `let`s.
+  - [13.3](#13.3) <a id='13.3'></a> Group all your `const`s and then group all your `let`s.
 
   > Why? This is helpful when later on you might need to assign a variable depending on one of the previous assigned variables.
 
@@ -910,7 +910,7 @@
     let length;
     ```
 
-  - Assign variables where you need them, but place them in a reasonable place.
+  - [13.4](#13.4) <a id='13.4'></a> Assign variables where you need them, but place them in a reasonable place.
 
   > Why? `let` and `const` are block scoped and not function scoped.
 
@@ -962,7 +962,7 @@
 
 ## Hoisting
 
-  - `var` declarations get hoisted to the top of their scope, their assignment does not. `const` and `let` declarations are blessed with a new concept called [Temporal Dead Zones (TDZ)](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/let#Temporal_dead_zone_and_errors_with_let). It's important to know why [typeof is no longer safe](http://es-discourse.com/t/why-typeof-is-no-longer-safe/15).
+  - [14.1](#14.1) <a id='14.1'></a> `var` declarations get hoisted to the top of their scope, their assignment does not. `const` and `let` declarations are blessed with a new concept called [Temporal Dead Zones (TDZ)](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/let#Temporal_dead_zone_and_errors_with_let). It's important to know why [typeof is no longer safe](http://es-discourse.com/t/why-typeof-is-no-longer-safe/15).
 
     ```javascript
     // we know this wouldn't work (assuming there
@@ -997,7 +997,7 @@
     }
     ```
 
-  - Anonymous function expressions hoist their variable name, but not the function assignment.
+  - [14.2](#14.2) <a id='14.2'></a> Anonymous function expressions hoist their variable name, but not the function assignment.
 
     ```javascript
     function example() {
@@ -1011,7 +1011,7 @@
     }
     ```
 
-  - Named function expressions hoist the variable name, not the function name or the function body.
+  - [14.3](#14.3) <a id='14.3'></a> Named function expressions hoist the variable name, not the function name or the function body.
 
     ```javascript
     function example() {
@@ -1039,7 +1039,7 @@
     }
     ```
 
-  - Function declarations hoist their name and the function body.
+  - [14.4](#14.4) <a id='14.4'></a> Function declarations hoist their name and the function body.
 
     ```javascript
     function example() {
@@ -1058,8 +1058,8 @@
 
 ## Comparison Operators & Equality
 
-  - Use `===` and `!==` over `==` and `!=`.
-  - Conditional statements such as the `if` statement evaulate their expression using coercion with the `ToBoolean` abstract method and always follow these simple rules:
+  - [15.1](#15.1) <a id='15.1'></a> Use `===` and `!==` over `==` and `!=`.
+  - [15.2](#15.2) <a id='15.2'></a> Conditional statements such as the `if` statement evaulate their expression using coercion with the `ToBoolean` abstract method and always follow these simple rules:
 
     + **Objects** evaluate to **true**
     + **Undefined** evaluates to **false**
@@ -1075,7 +1075,7 @@
     }
     ```
 
-  - Use shortcuts.
+  - [15.3](#15.3) <a id='15.3'></a> Use shortcuts.
 
     ```javascript
     // bad
@@ -1099,14 +1099,14 @@
     }
     ```
 
-  - For more information see [Truth Equality and JavaScript](http://javascriptweblog.wordpress.com/2011/02/07/truth-equality-and-javascript/#more-2108) by Angus Croll.
+  - [15.4](#15.4) <a id='15.4'></a> For more information see [Truth Equality and JavaScript](http://javascriptweblog.wordpress.com/2011/02/07/truth-equality-and-javascript/#more-2108) by Angus Croll.
 
 **[⬆ back to top](#table-of-contents)**
 
 
 ## Blocks
 
-  - Use braces with all multi-line blocks.
+  - [16.1](#16.1) <a id='16.1'></a> Use braces with all multi-line blocks.
 
     ```javascript
     // bad
@@ -1130,7 +1130,7 @@
     }
     ```
 
-  - If you're using multi-line blocks with `if` and `else`, put `else` on the same line as your
+  - [16.2](#16.2) <a id='16.2'></a> If you're using multi-line blocks with `if` and `else`, put `else` on the same line as your
     `if` block's closing brace.
 
     ```javascript
@@ -1158,7 +1158,7 @@
 
 ## Comments
 
-  - Use `/** ... */` for multi-line comments. Include a description, specify types and values for all parameters and return values.
+  - [17.1](#17.1) <a id='17.1'></a> Use `/** ... */` for multi-line comments. Include a description, specify types and values for all parameters and return values.
 
     ```javascript
     // bad
@@ -1190,7 +1190,7 @@
     }
     ```
 
-  - Use `//` for single line comments. Place single line comments on a newline above the subject of the comment. Put an empty line before the comment.
+  - [17.2](#17.2) <a id='17.2'></a> Use `//` for single line comments. Place single line comments on a newline above the subject of the comment. Put an empty line before the comment.
 
     ```javascript
     // bad
@@ -1220,9 +1220,9 @@
     }
     ```
 
-  - Prefixing your comments with `FIXME` or `TODO` helps other developers quickly understand if you're pointing out a problem that needs to be revisited, or if you're suggesting a solution to the problem that needs to be implemented. These are different than regular comments because they are actionable. The actions are `FIXME -- need to figure this out` or `TODO -- need to implement`.
+  - [17.3](#17.3) <a id='17.3'></a> Prefixing your comments with `FIXME` or `TODO` helps other developers quickly understand if you're pointing out a problem that needs to be revisited, or if you're suggesting a solution to the problem that needs to be implemented. These are different than regular comments because they are actionable. The actions are `FIXME -- need to figure this out` or `TODO -- need to implement`.
 
-  - Use `// FIXME:` to annotate problems.
+  - [17.4](#17.4) <a id='17.4'></a> Use `// FIXME:` to annotate problems.
 
     ```javascript
     class Calculator {
@@ -1233,7 +1233,7 @@
     }
     ```
 
-  - Use `// TODO:` to annotate solutions to problems.
+  - [17.5](#17.5) <a id='17.5'></a> Use `// TODO:` to annotate solutions to problems.
 
     ```javascript
     class Calculator {
@@ -1249,7 +1249,7 @@
 
 ## Whitespace
 
-  - Use soft tabs set to 2 spaces.
+  - [18.1](#18.1) <a id='18.1'></a> Use soft tabs set to 2 spaces.
 
     ```javascript
     // bad
@@ -1268,7 +1268,7 @@
     }
     ```
 
-  - Place 1 space before the leading brace.
+  - [18.2](#18.2) <a id='18.2'></a> Place 1 space before the leading brace.
 
     ```javascript
     // bad
@@ -1294,7 +1294,7 @@
     });
     ```
 
-  - Place 1 space before the opening parenthesis in control statements (`if`, `while` etc.). Place no space before the argument list in function calls and declarations.
+  - [18.3](#18.3) <a id='18.3'></a> Place 1 space before the opening parenthesis in control statements (`if`, `while` etc.). Place no space before the argument list in function calls and declarations.
 
     ```javascript
     // bad
@@ -1318,7 +1318,7 @@
     }
     ```
 
-  - Set off operators with spaces.
+  - [18.4](#18.4) <a id='18.4'></a> Set off operators with spaces.
 
     ```javascript
     // bad
@@ -1328,7 +1328,7 @@
     const x = y + 5;
     ```
 
-  - End files with a single newline character.
+  - [18.5](#18.5) <a id='18.5'></a> End files with a single newline character.
 
     ```javascript
     // bad
@@ -1352,7 +1352,7 @@
     })(this);↵
     ```
 
-  - Use indentation when making long method chains. Use a leading dot, which
+  - [18.5](#18.5) <a id='18.5'></a> Use indentation when making long method chains. Use a leading dot, which
     emphasizes that the line is a method call, not a new statement.
 
     ```javascript
@@ -1392,7 +1392,7 @@
         .call(tron.led);
     ```
 
-  - Leave a blank line after blocks and before the next statement
+  - [18.6](#18.6) <a id='18.6'></a> Leave a blank line after blocks and before the next statement
 
     ```javascript
     // bad
@@ -1434,7 +1434,7 @@
 
 ## Commas
 
-  - Leading commas: **Nope.**
+  - [19.1](#19.1) <a id='19.1'></a> Leading commas: **Nope.**
 
     ```javascript
     // bad
@@ -1468,7 +1468,7 @@
     };
     ```
 
-  - Additional trailing comma: **Yup.**
+  - [19.2](#19.2) <a id='19.2'></a> Additional trailing comma: **Yup.**
 
   > Why? This leads to cleaner git diffs. Also, transpilers like Babel will remove the additional trailing comma in the transpiled code which means you don't have to worry about the [trailing comma problem](es5/README.md#commas) in legacy browsers.
 
@@ -1516,7 +1516,7 @@
 
 ## Semicolons
 
-  - **Yup.**
+  - [20.1](#20.1) <a id='20.1'></a> **Yup.**
 
     ```javascript
     // bad
@@ -1545,8 +1545,8 @@
 
 ## Type Casting & Coercion
 
-  - Perform type coercion at the beginning of the statement.
-  - Strings:
+  - [21.1](#21.1) <a id='21.1'></a> Perform type coercion at the beginning of the statement.
+  - [21.2](#21.2) <a id='21.2'></a> Strings:
 
     ```javascript
     //  => this.reviewScore = 9;
@@ -1558,7 +1558,7 @@
     const totalScore = String(this.reviewScore);
     ```
 
-  - Use `parseInt` for Numbers and always with a radix for type casting.
+  - [21.3](#21.3) <a id='21.3'></a> Use `parseInt` for Numbers and always with a radix for type casting.
 
     ```javascript
     const inputValue = '4';
@@ -1582,7 +1582,7 @@
     const val = parseInt(inputValue, 10);
     ```
 
-  - If for whatever reason you are doing something wild and `parseInt` is your bottleneck and need to use Bitshift for [performance reasons](http://jsperf.com/coercion-vs-casting/3), leave a comment explaining why and what you're doing.
+  - [21.4](#21.4) <a id='21.4'></a> If for whatever reason you are doing something wild and `parseInt` is your bottleneck and need to use Bitshift for [performance reasons](http://jsperf.com/coercion-vs-casting/3), leave a comment explaining why and what you're doing.
 
     ```javascript
     // good
@@ -1594,7 +1594,7 @@
     const val = inputValue >> 0;
     ```
 
-  - **Note:** Be careful when using bitshift operations. Numbers are represented as [64-bit values](http://es5.github.io/#x4.3.19), but Bitshift operations always return a 32-bit integer ([source](http://es5.github.io/#x11.7)). Bitshift can lead to unexpected behavior for integer values larger than 32 bits. [Discussion](https://github.com/airbnb/javascript/issues/109). Largest signed 32-bit Int is 2,147,483,647:
+  - [21.5](#21.5) <a id='21.5'></a> **Note:** Be careful when using bitshift operations. Numbers are represented as [64-bit values](http://es5.github.io/#x4.3.19), but Bitshift operations always return a 32-bit integer ([source](http://es5.github.io/#x11.7)). Bitshift can lead to unexpected behavior for integer values larger than 32 bits. [Discussion](https://github.com/airbnb/javascript/issues/109). Largest signed 32-bit Int is 2,147,483,647:
 
     ```javascript
     2147483647 >> 0 //=> 2147483647
@@ -1602,7 +1602,7 @@
     2147483649 >> 0 //=> -2147483647
     ```
 
-  - Booleans:
+  - [21.6](#21.6) <a id='21.6'></a> Booleans:
 
     ```javascript
     const age = 0;
@@ -1622,7 +1622,7 @@
 
 ## Naming Conventions
 
-  - Avoid single letter names. Be descriptive with your naming.
+  - [22.1](#22.1) <a id='22.1'></a> Avoid single letter names. Be descriptive with your naming.
 
     ```javascript
     // bad
@@ -1636,7 +1636,7 @@
     }
     ```
 
-  - Use camelCase when naming objects, functions, and instances.
+  - [22.2](#22.2) <a id='22.2'></a> Use camelCase when naming objects, functions, and instances.
 
     ```javascript
     // bad
@@ -1649,7 +1649,7 @@
     function thisIsMyFunction() {}
     ```
 
-  - Use PascalCase when naming constructors or classes.
+  - [22.3](#22.3) <a id='22.3'></a> Use PascalCase when naming constructors or classes.
 
     ```javascript
     // bad
@@ -1673,7 +1673,7 @@
     });
     ```
 
-  - Use a leading underscore `_` when naming private properties.
+  - [22.4](#22.4) <a id='22.4'></a> Use a leading underscore `_` when naming private properties.
 
     ```javascript
     // bad
@@ -1684,7 +1684,7 @@
     this._firstName = 'Panda';
     ```
 
-  - Don't save references to `this`. Use arrow functions or Function#bind.
+  - [22.5](#22.5) <a id='22.5'></a> Don't save references to `this`. Use arrow functions or Function#bind.
 
     ```javascript
     // bad
@@ -1711,7 +1711,7 @@
     }
     ```
 
-  - If your file exports a single class, your filename should be exactly the name of the class.
+  - [22.6](#22.6) <a id='22.6'></a> If your file exports a single class, your filename should be exactly the name of the class.
     ```javascript
     // file contents
     class CheckBox {
@@ -1730,7 +1730,7 @@
     import CheckBox from './CheckBox';
     ```
 
-  - Use camelCase when you export-default a function. Your filename should be identical to your function's name.
+  - [22.7](#22.7) <a id='22.7'></a> Use camelCase when you export-default a function. Your filename should be identical to your function's name.
 
     ```javascript
     function makeStyleGuide() {
@@ -1739,7 +1739,7 @@
     export default makeStyleGuide;
     ```
 
-  - Use PascalCase when you export a singleton / function library / bare object.
+  - [22.8](#22.8) <a id='22.8'></a> Use PascalCase when you export a singleton / function library / bare object.
 
     ```javascript
     const AirbnbStyleGuide = {
@@ -1756,8 +1756,8 @@
 
 ## Accessors
 
-  - Accessor functions for properties are not required.
-  - If you do make accessor functions use getVal() and setVal('hello').
+  - [23.1](#23.1) <a id='23.1'></a> Accessor functions for properties are not required.
+  - [23.2](#23.2) <a id='23.2'></a> If you do make accessor functions use getVal() and setVal('hello').
 
     ```javascript
     // bad
@@ -1773,7 +1773,7 @@
     dragon.setAge(25);
     ```
 
-  - If the property is a boolean, use isVal() or hasVal().
+  - [23.3](#23.3) <a id='23.3'></a> If the property is a boolean, use isVal() or hasVal().
 
     ```javascript
     // bad
@@ -1787,7 +1787,7 @@
     }
     ```
 
-  - It's okay to create get() and set() functions, but be consistent.
+  - [23.4](#23.4) <a id='23.4'></a> It's okay to create get() and set() functions, but be consistent.
 
     ```javascript
     class Jedi {
@@ -1811,7 +1811,7 @@
 
 ## Events
 
-  - When attaching data payloads to events (whether DOM events or something more proprietary like Backbone events), pass a hash instead of a raw value. This allows a subsequent contributor to add more data to the event payload without finding and updating every handler for the event. For example, instead of:
+  - [24.1](#24.1) <a id='24.1'></a> When attaching data payloads to events (whether DOM events or something more proprietary like Backbone events), pass a hash instead of a raw value. This allows a subsequent contributor to add more data to the event payload without finding and updating every handler for the event. For example, instead of:
 
     ```javascript
     // bad
@@ -1842,7 +1842,7 @@
 
 ## jQuery
 
-  - Prefix jQuery object variables with a `$`.
+  - [25.1](#25.1) <a id='25.1'></a> Prefix jQuery object variables with a `$`.
 
     ```javascript
     // bad
@@ -1852,7 +1852,7 @@
     const $sidebar = $('.sidebar');
     ```
 
-  - Cache jQuery lookups.
+  - [25.2](#25.2) <a id='25.2'></a> Cache jQuery lookups.
 
     ```javascript
     // bad
@@ -1879,8 +1879,8 @@
     }
     ```
 
-  - For DOM queries use Cascading `$('.sidebar ul')` or parent > child `$('.sidebar > ul')`. [jsPerf](http://jsperf.com/jquery-find-vs-context-sel/16)
-  - Use `find` with scoped jQuery object queries.
+  - [25.3](#25.3) <a id='25.3'></a> For DOM queries use Cascading `$('.sidebar ul')` or parent > child `$('.sidebar > ul')`. [jsPerf](http://jsperf.com/jquery-find-vs-context-sel/16)
+  - [25.4](#25.4) <a id='25.4'></a> Use `find` with scoped jQuery object queries.
 
     ```javascript
     // bad
@@ -1904,13 +1904,13 @@
 
 ## ECMAScript 5 Compatibility
 
-  - Refer to [Kangax](https://twitter.com/kangax/)'s ES5 [compatibility table](http://kangax.github.com/es5-compat-table/).
+  - [26.1](#26.1) <a id='26.1'></a> Refer to [Kangax](https://twitter.com/kangax/)'s ES5 [compatibility table](http://kangax.github.com/es5-compat-table/).
 
 **[⬆ back to top](#table-of-contents)**
 
 ## ECMAScript 6 Styles
 
-This is a collection of links to the various es6 features.
+[27.1](#27.1) <a id='27.1'></a> This is a collection of links to the various es6 features.
 
 1. [Arrow Functions](#arrow-functions)
 1. [Classes](#constructors)
@@ -1930,7 +1930,7 @@ This is a collection of links to the various es6 features.
 
 ## Testing
 
-  - **Yup.**
+  - [28.1](#28.1) <a id='28.1'></a> **Yup.**
 
     ```javascript
     function() {

From 43a5f8446250e67337aed48a44660dc16382082d Mon Sep 17 00:00:00 2001
From: Harrison Shoff <hi@hshoff.com>
Date: Wed, 13 May 2015 18:01:20 -0700
Subject: [PATCH 0213/1591] [links] id => name

---
 README.md | 200 +++++++++++++++++++++++++++---------------------------
 1 file changed, 100 insertions(+), 100 deletions(-)

diff --git a/README.md b/README.md
index 8c1a265ad3..0f0e5c908f 100644
--- a/README.md
+++ b/README.md
@@ -47,7 +47,7 @@
 
 ## Types
 
-  - [1.1](#1.1) <a id='1.1'></a> **Primitives**: When you access a primitive type you work directly on its value.
+  - [1.1](#1.1) <a name='1.1'></a> **Primitives**: When you access a primitive type you work directly on its value.
 
     + `string`
     + `number`
@@ -63,7 +63,7 @@
 
     console.log(foo, bar); // => 1, 9
     ```
-  - [1.2](#1.2) <a id='1.2'></a> **Complex**: When you access a complex type you work on a reference to its value.
+  - [1.2](#1.2) <a name='1.2'></a> **Complex**: When you access a complex type you work on a reference to its value.
 
     + `object`
     + `array`
@@ -82,7 +82,7 @@
 
 ## References
 
-  - [2.1](#2.1) <a id='2.1'></a> Use `const` for all of your references; avoid using `var`.
+  - [2.1](#2.1) <a name='2.1'></a> Use `const` for all of your references; avoid using `var`.
 
   > Why? This ensures that you can't reassign your references (mutation), which can lead to bugs and difficult to comprehend code.
 
@@ -96,7 +96,7 @@
     const b = 2;
     ```
 
-  - [2.2](#2.2) <a id='2.2'></a> If you must mutate references, use `let` instead of `var`.
+  - [2.2](#2.2) <a name='2.2'></a> If you must mutate references, use `let` instead of `var`.
 
   > Why? `let` is block-scoped rather than function-scoped like `var`.
 
@@ -114,7 +114,7 @@
     }
     ```
 
-  - [2.3](#2.3) <a id='2.3'></a> Note that both `let` and `const` are block-scoped.
+  - [2.3](#2.3) <a name='2.3'></a> Note that both `let` and `const` are block-scoped.
 
     ```javascript
     // const and let only exist in the blocks they are defined in.
@@ -130,7 +130,7 @@
 
 ## Objects
 
-  - [3.1](#3.1) <a id='3.1'></a> Use the literal syntax for object creation.
+  - [3.1](#3.1) <a name='3.1'></a> Use the literal syntax for object creation.
 
     ```javascript
     // bad
@@ -140,7 +140,7 @@
     const item = {};
     ```
 
-  - [3.2](#3.2) <a id='3.2'></a> Don't use [reserved words](http://es5.github.io/#x7.6.1) as keys. It won't work in IE8. [More info](https://github.com/airbnb/javascript/issues/61).
+  - [3.2](#3.2) <a name='3.2'></a> Don't use [reserved words](http://es5.github.io/#x7.6.1) as keys. It won't work in IE8. [More info](https://github.com/airbnb/javascript/issues/61).
 
     ```javascript
     // bad
@@ -156,7 +156,7 @@
     };
     ```
 
-  - [3.3](#3.3) <a id='3.3'></a> Use readable synonyms in place of reserved words.
+  - [3.3](#3.3) <a name='3.3'></a> Use readable synonyms in place of reserved words.
 
     ```javascript
     // bad
@@ -176,7 +176,7 @@
     ```
 
   <a name="es6-computed-properties"></a>
-  - [3.4](#3.4) <a id='3.4'></a> Use computed property names when creating objects with dynamic property names.
+  - [3.4](#3.4) <a name='3.4'></a> Use computed property names when creating objects with dynamic property names.
 
   > Why? They allow you to define all the properties of an object in one place.
 
@@ -202,7 +202,7 @@
     ```
 
   <a name="es6-object-shorthand"></a>
-  - [3.5](#3.5) <a id='3.5'></a> Use object method shorthand.
+  - [3.5](#3.5) <a name='3.5'></a> Use object method shorthand.
 
     ```javascript
     // bad
@@ -225,7 +225,7 @@
     ```
 
   <a name="es6-object-concise"></a>
-  - [3.6](#3.6) <a id='3.6'></a> Use property value shorthand.
+  - [3.6](#3.6) <a name='3.6'></a> Use property value shorthand.
 
   > Why? It is shorter to write and descriptive.
 
@@ -243,7 +243,7 @@
     };
     ```
 
-  - [3.7](#3.7) <a id='3.7'></a> Group your shorthand properties at the beginning of your object declaration.
+  - [3.7](#3.7) <a name='3.7'></a> Group your shorthand properties at the beginning of your object declaration.
 
   > Why? It's easier to tell which properties are using the shorthand.
 
@@ -276,7 +276,7 @@
 
 ## Arrays
 
-  - [4.1](#4.1) <a id='4.1'></a> Use the literal syntax for array creation.
+  - [4.1](#4.1) <a name='4.1'></a> Use the literal syntax for array creation.
 
     ```javascript
     // bad
@@ -286,7 +286,7 @@
     const items = [];
     ```
 
-  - [4.2](#4.2) <a id='4.2'></a> Use Array#push instead of direct assignment to add items to an array.
+  - [4.2](#4.2) <a name='4.2'></a> Use Array#push instead of direct assignment to add items to an array.
 
     ```javascript
     const someStack = [];
@@ -300,7 +300,7 @@
     ```
 
   <a name="es6-array-spreads"></a>
-  - [4.3](#4.3) <a id='4.3'></a> Use array spreads `...` to copy arrays.
+  - [4.3](#4.3) <a name='4.3'></a> Use array spreads `...` to copy arrays.
 
     ```javascript
     // bad
@@ -315,7 +315,7 @@
     // good
     const itemsCopy = [...items];
     ```
-  - [4.4](#4.4) <a id='4.4'></a> To convert an array-like object to an array, use Array#from.
+  - [4.4](#4.4) <a name='4.4'></a> To convert an array-like object to an array, use Array#from.
 
     ```javascript
     const foo = document.querySelectorAll('.foo');
@@ -326,7 +326,7 @@
 
 ## Destructuring
 
-  - [5.1](#5.1) <a id='5.1'></a> Use object destructuring when accessing and using multiple properties of an object.
+  - [5.1](#5.1) <a name='5.1'></a> Use object destructuring when accessing and using multiple properties of an object.
 
   > Why? Destructuring saves you from creating temporary references for those properties.
 
@@ -351,7 +351,7 @@
     }
     ```
 
-  - [5.2](#5.2) <a id='5.2'></a> Use array destructuring.
+  - [5.2](#5.2) <a name='5.2'></a> Use array destructuring.
 
     ```javascript
     const arr = [1, 2, 3, 4];
@@ -364,7 +364,7 @@
     const [first, second] = arr;
     ```
 
-  - [5.3](#5.3) <a id='5.3'></a> Use object destructuring for multiple return values, not array destructuring.
+  - [5.3](#5.3) <a name='5.3'></a> Use object destructuring for multiple return values, not array destructuring.
 
   > Why? You can add new properties over time or change the order of things without breaking call sites.
 
@@ -393,7 +393,7 @@
 
 ## Strings
 
-  - [6.1](#6.1) <a id='6.1'></a> Use single quotes `''` for strings.
+  - [6.1](#6.1) <a name='6.1'></a> Use single quotes `''` for strings.
 
     ```javascript
     // bad
@@ -403,8 +403,8 @@
     const name = 'Capt. Janeway';
     ```
 
-  - [6.2](#6.2) <a id='6.2'></a> Strings longer than 80 characters should be written across multiple lines using string concatenation.
-  - [6.3](#6.3) <a id='6.3'></a> Note: If overused, long strings with concatenation could impact performance. [jsPerf](http://jsperf.com/ya-string-concat) & [Discussion](https://github.com/airbnb/javascript/issues/40).
+  - [6.2](#6.2) <a name='6.2'></a> Strings longer than 80 characters should be written across multiple lines using string concatenation.
+  - [6.3](#6.3) <a name='6.3'></a> Note: If overused, long strings with concatenation could impact performance. [jsPerf](http://jsperf.com/ya-string-concat) & [Discussion](https://github.com/airbnb/javascript/issues/40).
 
     ```javascript
     // bad
@@ -423,7 +423,7 @@
     ```
 
   <a name="es6-template-literals"></a>
-  - [6.4](#6.4) <a id='6.4'></a> When programmatically building up strings, use template strings instead of concatenation.
+  - [6.4](#6.4) <a name='6.4'></a> When programmatically building up strings, use template strings instead of concatenation.
 
   > Why? Template strings give you a readable, concise syntax with proper newlines and string interpolation features.
 
@@ -449,7 +449,7 @@
 
 ## Functions
 
-  - [7.1](#7.1) <a id='7.1'></a> Use function declarations instead of function expressions.
+  - [7.1](#7.1) <a name='7.1'></a> Use function declarations instead of function expressions.
 
   > Why? Function declarations are named, so they're easier to identify in call stacks. Also, the whole body of a function declaration is hoisted, whereas only the reference of a function expression is hoisted. This rule makes it possible to always use [Arrow Functions](#arrow-functions) in place of function expressions.
 
@@ -463,7 +463,7 @@
     }
     ```
 
-  - [7.2](#7.2) <a id='7.2'></a> Function expressions:
+  - [7.2](#7.2) <a name='7.2'></a> Function expressions:
 
     ```javascript
     // immediately-invoked function expression (IIFE)
@@ -472,8 +472,8 @@
     })();
     ```
 
-  - [7.3](#7.3) <a id='7.3'></a> Never declare a function in a non-function block (if, while, etc). Assign the function to a variable instead. Browsers will allow you to do it, but they all interpret it differently, which is bad news bears.
-  - [7.4](#7.4) <a id='7.4'></a> **Note:** ECMA-262 defines a `block` as a list of statements. A function declaration is not a statement. [Read ECMA-262's note on this issue](http://www.ecma-international.org/publications/files/ECMA-ST/Ecma-262.pdf#page=97).
+  - [7.3](#7.3) <a name='7.3'></a> Never declare a function in a non-function block (if, while, etc). Assign the function to a variable instead. Browsers will allow you to do it, but they all interpret it differently, which is bad news bears.
+  - [7.4](#7.4) <a name='7.4'></a> **Note:** ECMA-262 defines a `block` as a list of statements. A function declaration is not a statement. [Read ECMA-262's note on this issue](http://www.ecma-international.org/publications/files/ECMA-ST/Ecma-262.pdf#page=97).
 
     ```javascript
     // bad
@@ -492,7 +492,7 @@
     }
     ```
 
-  - [7.5](#7.5) <a id='7.5'></a> Never name a parameter `arguments`. This will take precedence over the `arguments` object that is given to every function scope.
+  - [7.5](#7.5) <a name='7.5'></a> Never name a parameter `arguments`. This will take precedence over the `arguments` object that is given to every function scope.
 
     ```javascript
     // bad
@@ -507,7 +507,7 @@
     ```
 
   <a name="es6-rest"></a>
-  - [7.6](#7.6) <a id='7.6'></a> Never use `arguments`, opt to use rest syntax `...` instead.
+  - [7.6](#7.6) <a name='7.6'></a> Never use `arguments`, opt to use rest syntax `...` instead.
 
   > Why? `...` is explicit about which arguments you want pulled. Plus rest arguments are a real Array and not Array-like like `arguments`.
 
@@ -525,7 +525,7 @@
     ```
 
   <a name="es6-default-parameters"></a>
-  - [7.7](#7.7) <a id='7.7'></a> Use default parameter syntax rather than mutating function arguments.
+  - [7.7](#7.7) <a name='7.7'></a> Use default parameter syntax rather than mutating function arguments.
 
     ```javascript
     // really bad
@@ -551,7 +551,7 @@
     }
     ```
 
-  - [7.8](#7.8) <a id='7.8'></a> Avoid side effects with default parameters
+  - [7.8](#7.8) <a name='7.8'></a> Avoid side effects with default parameters
 
   > Why? They are confusing to reason about.
 
@@ -572,7 +572,7 @@
 
 ## Arrow Functions
 
-  - [8.1](#8.1) <a id='8.1'></a> When you must use function expressions (as when passing an anonymous function), use arrow function notation.
+  - [8.1](#8.1) <a name='8.1'></a> When you must use function expressions (as when passing an anonymous function), use arrow function notation.
 
   > Why? It creates a version of the function that executes in the context of `this`, which is usually what you want, and is a more concise syntax.
 
@@ -590,7 +590,7 @@
     });
     ```
 
-  - [8.2](#8.2) <a id='8.2'></a> If the function body fits on one line, feel free to omit the braces and use implicit return. Otherwise, add the braces and use a `return` statement.
+  - [8.2](#8.2) <a name='8.2'></a> If the function body fits on one line, feel free to omit the braces and use implicit return. Otherwise, add the braces and use a `return` statement.
 
   > Why? Syntactic sugar. It reads well when multiple functions are chained together.
 
@@ -606,7 +606,7 @@
     });
     ```
 
-  - [8.3](#8.3) <a id='8.3'></a> Always use parentheses around the arguments. Omitting the parentheses makes the functions less readable and only works for single arguments.
+  - [8.3](#8.3) <a name='8.3'></a> Always use parentheses around the arguments. Omitting the parentheses makes the functions less readable and only works for single arguments.
 
   > Why? These declarations read better with parentheses. They are also required when you have multiple parameters so this enforces consistency.
 
@@ -623,7 +623,7 @@
 
 ## Constructors
 
-  - [9.1](#9.1) <a id='9.1'></a> Always use `class`. Avoid manipulating `prototype` directly.
+  - [9.1](#9.1) <a name='9.1'></a> Always use `class`. Avoid manipulating `prototype` directly.
 
   > Why? `class` syntax is more concise and easier to reason about.
 
@@ -652,7 +652,7 @@
     }
     ```
 
-  - [9.2](#9.2) <a id='9.2'></a> Use `extends` for inheritance.
+  - [9.2](#9.2) <a name='9.2'></a> Use `extends` for inheritance.
 
   > Why? It is a built-in way to inherit prototype functionality without breaking `instanceof`.
 
@@ -675,7 +675,7 @@
     }
     ```
 
-  - [9.3](#9.3) <a id='9.3'></a> Methods can return `this` to help with method chaining.
+  - [9.3](#9.3) <a name='9.3'></a> Methods can return `this` to help with method chaining.
 
     ```javascript
     // bad
@@ -712,7 +712,7 @@
     ```
 
 
-  - [9.4](#9.4) <a id='9.4'></a> It's okay to write a custom toString() method, just make sure it works successfully and causes no side effects.
+  - [9.4](#9.4) <a name='9.4'></a> It's okay to write a custom toString() method, just make sure it works successfully and causes no side effects.
 
     ```javascript
     class Jedi {
@@ -735,7 +735,7 @@
 
 ## Modules
 
-  - [10.1](#10.1) <a id='10.1'></a> Always use modules (`import`/`export`) over a non-standard module system. You can always transpile to your preferred module system.
+  - [10.1](#10.1) <a name='10.1'></a> Always use modules (`import`/`export`) over a non-standard module system. You can always transpile to your preferred module system.
 
   > Why? Modules are the future, let's start using the future now.
 
@@ -753,7 +753,7 @@
     export default es6;
     ```
 
-  - [10.2](#10.2) <a id='10.2'></a> Do not use wildcard imports.
+  - [10.2](#10.2) <a name='10.2'></a> Do not use wildcard imports.
 
   > Why? This makes sure you have a single default export.
 
@@ -765,7 +765,7 @@
     import AirbnbStyleGuide from './AirbnbStyleGuide';
     ```
 
-  - [10.3](#10.3) <a id='10.3'></a>And do not export directly from an import.
+  - [10.3](#10.3) <a name='10.3'></a>And do not export directly from an import.
 
   > Why? Although the one-liner is concise, having one clear way to import and one clear way to export makes things consistent.
 
@@ -784,7 +784,7 @@
 
 ## Iterators and Generators
 
-  - [11.1](#11.1) <a id='11.1'></a> Don't use iterators. Prefer JavaScript's higher-order functions like `map()` and `reduce()` instead of loops like `for-of`.
+  - [11.1](#11.1) <a name='11.1'></a> Don't use iterators. Prefer JavaScript's higher-order functions like `map()` and `reduce()` instead of loops like `for-of`.
 
   > Why? This enforces our immutable rule. Dealing with pure functions that return values is easier to reason about than side-effects.
 
@@ -809,7 +809,7 @@
     sum === 15;
     ```
 
-  - [11.2](#11.2) <a id='11.2'></a> Don't use generators for now.
+  - [11.2](#11.2) <a name='11.2'></a> Don't use generators for now.
 
   > Why? They don't transpile well to ES5.
 
@@ -818,7 +818,7 @@
 
 ## Properties
 
-  - [12.1](#12.1) <a id='12.1'></a> Use dot notation when accessing properties.
+  - [12.1](#12.1) <a name='12.1'></a> Use dot notation when accessing properties.
 
     ```javascript
     const luke = {
@@ -833,7 +833,7 @@
     const isJedi = luke.jedi;
     ```
 
-  - [12.2](#12.2) <a id='12.2'></a> Use subscript notation `[]` when accessing properties with a variable.
+  - [12.2](#12.2) <a name='12.2'></a> Use subscript notation `[]` when accessing properties with a variable.
 
     ```javascript
     const luke = {
@@ -853,7 +853,7 @@
 
 ## Variables
 
-  - [13.1](#13.1) <a id='13.1'></a> Always use `const` to declare variables. Not doing so will result in global variables. We want to avoid polluting the global namespace. Captain Planet warned us of that.
+  - [13.1](#13.1) <a name='13.1'></a> Always use `const` to declare variables. Not doing so will result in global variables. We want to avoid polluting the global namespace. Captain Planet warned us of that.
 
     ```javascript
     // bad
@@ -863,7 +863,7 @@
     const superPower = new SuperPower();
     ```
 
-  - [13.2](#13.2) <a id='13.2'></a> Use one `const` declaration per variable.
+  - [13.2](#13.2) <a name='13.2'></a> Use one `const` declaration per variable.
 
     > Why? It's easier to add new variable declarations this way, and you never have to worry about swapping out a `;` for a `,` or introducing punctuation-only diffs.
 
@@ -885,7 +885,7 @@
     const dragonball = 'z';
     ```
 
-  - [13.3](#13.3) <a id='13.3'></a> Group all your `const`s and then group all your `let`s.
+  - [13.3](#13.3) <a name='13.3'></a> Group all your `const`s and then group all your `let`s.
 
   > Why? This is helpful when later on you might need to assign a variable depending on one of the previous assigned variables.
 
@@ -910,7 +910,7 @@
     let length;
     ```
 
-  - [13.4](#13.4) <a id='13.4'></a> Assign variables where you need them, but place them in a reasonable place.
+  - [13.4](#13.4) <a name='13.4'></a> Assign variables where you need them, but place them in a reasonable place.
 
   > Why? `let` and `const` are block scoped and not function scoped.
 
@@ -962,7 +962,7 @@
 
 ## Hoisting
 
-  - [14.1](#14.1) <a id='14.1'></a> `var` declarations get hoisted to the top of their scope, their assignment does not. `const` and `let` declarations are blessed with a new concept called [Temporal Dead Zones (TDZ)](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/let#Temporal_dead_zone_and_errors_with_let). It's important to know why [typeof is no longer safe](http://es-discourse.com/t/why-typeof-is-no-longer-safe/15).
+  - [14.1](#14.1) <a name='14.1'></a> `var` declarations get hoisted to the top of their scope, their assignment does not. `const` and `let` declarations are blessed with a new concept called [Temporal Dead Zones (TDZ)](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/let#Temporal_dead_zone_and_errors_with_let). It's important to know why [typeof is no longer safe](http://es-discourse.com/t/why-typeof-is-no-longer-safe/15).
 
     ```javascript
     // we know this wouldn't work (assuming there
@@ -997,7 +997,7 @@
     }
     ```
 
-  - [14.2](#14.2) <a id='14.2'></a> Anonymous function expressions hoist their variable name, but not the function assignment.
+  - [14.2](#14.2) <a name='14.2'></a> Anonymous function expressions hoist their variable name, but not the function assignment.
 
     ```javascript
     function example() {
@@ -1011,7 +1011,7 @@
     }
     ```
 
-  - [14.3](#14.3) <a id='14.3'></a> Named function expressions hoist the variable name, not the function name or the function body.
+  - [14.3](#14.3) <a name='14.3'></a> Named function expressions hoist the variable name, not the function name or the function body.
 
     ```javascript
     function example() {
@@ -1039,7 +1039,7 @@
     }
     ```
 
-  - [14.4](#14.4) <a id='14.4'></a> Function declarations hoist their name and the function body.
+  - [14.4](#14.4) <a name='14.4'></a> Function declarations hoist their name and the function body.
 
     ```javascript
     function example() {
@@ -1058,8 +1058,8 @@
 
 ## Comparison Operators & Equality
 
-  - [15.1](#15.1) <a id='15.1'></a> Use `===` and `!==` over `==` and `!=`.
-  - [15.2](#15.2) <a id='15.2'></a> Conditional statements such as the `if` statement evaulate their expression using coercion with the `ToBoolean` abstract method and always follow these simple rules:
+  - [15.1](#15.1) <a name='15.1'></a> Use `===` and `!==` over `==` and `!=`.
+  - [15.2](#15.2) <a name='15.2'></a> Conditional statements such as the `if` statement evaulate their expression using coercion with the `ToBoolean` abstract method and always follow these simple rules:
 
     + **Objects** evaluate to **true**
     + **Undefined** evaluates to **false**
@@ -1075,7 +1075,7 @@
     }
     ```
 
-  - [15.3](#15.3) <a id='15.3'></a> Use shortcuts.
+  - [15.3](#15.3) <a name='15.3'></a> Use shortcuts.
 
     ```javascript
     // bad
@@ -1099,14 +1099,14 @@
     }
     ```
 
-  - [15.4](#15.4) <a id='15.4'></a> For more information see [Truth Equality and JavaScript](http://javascriptweblog.wordpress.com/2011/02/07/truth-equality-and-javascript/#more-2108) by Angus Croll.
+  - [15.4](#15.4) <a name='15.4'></a> For more information see [Truth Equality and JavaScript](http://javascriptweblog.wordpress.com/2011/02/07/truth-equality-and-javascript/#more-2108) by Angus Croll.
 
 **[⬆ back to top](#table-of-contents)**
 
 
 ## Blocks
 
-  - [16.1](#16.1) <a id='16.1'></a> Use braces with all multi-line blocks.
+  - [16.1](#16.1) <a name='16.1'></a> Use braces with all multi-line blocks.
 
     ```javascript
     // bad
@@ -1130,7 +1130,7 @@
     }
     ```
 
-  - [16.2](#16.2) <a id='16.2'></a> If you're using multi-line blocks with `if` and `else`, put `else` on the same line as your
+  - [16.2](#16.2) <a name='16.2'></a> If you're using multi-line blocks with `if` and `else`, put `else` on the same line as your
     `if` block's closing brace.
 
     ```javascript
@@ -1158,7 +1158,7 @@
 
 ## Comments
 
-  - [17.1](#17.1) <a id='17.1'></a> Use `/** ... */` for multi-line comments. Include a description, specify types and values for all parameters and return values.
+  - [17.1](#17.1) <a name='17.1'></a> Use `/** ... */` for multi-line comments. Include a description, specify types and values for all parameters and return values.
 
     ```javascript
     // bad
@@ -1190,7 +1190,7 @@
     }
     ```
 
-  - [17.2](#17.2) <a id='17.2'></a> Use `//` for single line comments. Place single line comments on a newline above the subject of the comment. Put an empty line before the comment.
+  - [17.2](#17.2) <a name='17.2'></a> Use `//` for single line comments. Place single line comments on a newline above the subject of the comment. Put an empty line before the comment.
 
     ```javascript
     // bad
@@ -1220,9 +1220,9 @@
     }
     ```
 
-  - [17.3](#17.3) <a id='17.3'></a> Prefixing your comments with `FIXME` or `TODO` helps other developers quickly understand if you're pointing out a problem that needs to be revisited, or if you're suggesting a solution to the problem that needs to be implemented. These are different than regular comments because they are actionable. The actions are `FIXME -- need to figure this out` or `TODO -- need to implement`.
+  - [17.3](#17.3) <a name='17.3'></a> Prefixing your comments with `FIXME` or `TODO` helps other developers quickly understand if you're pointing out a problem that needs to be revisited, or if you're suggesting a solution to the problem that needs to be implemented. These are different than regular comments because they are actionable. The actions are `FIXME -- need to figure this out` or `TODO -- need to implement`.
 
-  - [17.4](#17.4) <a id='17.4'></a> Use `// FIXME:` to annotate problems.
+  - [17.4](#17.4) <a name='17.4'></a> Use `// FIXME:` to annotate problems.
 
     ```javascript
     class Calculator {
@@ -1233,7 +1233,7 @@
     }
     ```
 
-  - [17.5](#17.5) <a id='17.5'></a> Use `// TODO:` to annotate solutions to problems.
+  - [17.5](#17.5) <a name='17.5'></a> Use `// TODO:` to annotate solutions to problems.
 
     ```javascript
     class Calculator {
@@ -1249,7 +1249,7 @@
 
 ## Whitespace
 
-  - [18.1](#18.1) <a id='18.1'></a> Use soft tabs set to 2 spaces.
+  - [18.1](#18.1) <a name='18.1'></a> Use soft tabs set to 2 spaces.
 
     ```javascript
     // bad
@@ -1268,7 +1268,7 @@
     }
     ```
 
-  - [18.2](#18.2) <a id='18.2'></a> Place 1 space before the leading brace.
+  - [18.2](#18.2) <a name='18.2'></a> Place 1 space before the leading brace.
 
     ```javascript
     // bad
@@ -1294,7 +1294,7 @@
     });
     ```
 
-  - [18.3](#18.3) <a id='18.3'></a> Place 1 space before the opening parenthesis in control statements (`if`, `while` etc.). Place no space before the argument list in function calls and declarations.
+  - [18.3](#18.3) <a name='18.3'></a> Place 1 space before the opening parenthesis in control statements (`if`, `while` etc.). Place no space before the argument list in function calls and declarations.
 
     ```javascript
     // bad
@@ -1318,7 +1318,7 @@
     }
     ```
 
-  - [18.4](#18.4) <a id='18.4'></a> Set off operators with spaces.
+  - [18.4](#18.4) <a name='18.4'></a> Set off operators with spaces.
 
     ```javascript
     // bad
@@ -1328,7 +1328,7 @@
     const x = y + 5;
     ```
 
-  - [18.5](#18.5) <a id='18.5'></a> End files with a single newline character.
+  - [18.5](#18.5) <a name='18.5'></a> End files with a single newline character.
 
     ```javascript
     // bad
@@ -1352,7 +1352,7 @@
     })(this);↵
     ```
 
-  - [18.5](#18.5) <a id='18.5'></a> Use indentation when making long method chains. Use a leading dot, which
+  - [18.5](#18.5) <a name='18.5'></a> Use indentation when making long method chains. Use a leading dot, which
     emphasizes that the line is a method call, not a new statement.
 
     ```javascript
@@ -1392,7 +1392,7 @@
         .call(tron.led);
     ```
 
-  - [18.6](#18.6) <a id='18.6'></a> Leave a blank line after blocks and before the next statement
+  - [18.6](#18.6) <a name='18.6'></a> Leave a blank line after blocks and before the next statement
 
     ```javascript
     // bad
@@ -1434,7 +1434,7 @@
 
 ## Commas
 
-  - [19.1](#19.1) <a id='19.1'></a> Leading commas: **Nope.**
+  - [19.1](#19.1) <a name='19.1'></a> Leading commas: **Nope.**
 
     ```javascript
     // bad
@@ -1468,7 +1468,7 @@
     };
     ```
 
-  - [19.2](#19.2) <a id='19.2'></a> Additional trailing comma: **Yup.**
+  - [19.2](#19.2) <a name='19.2'></a> Additional trailing comma: **Yup.**
 
   > Why? This leads to cleaner git diffs. Also, transpilers like Babel will remove the additional trailing comma in the transpiled code which means you don't have to worry about the [trailing comma problem](es5/README.md#commas) in legacy browsers.
 
@@ -1516,7 +1516,7 @@
 
 ## Semicolons
 
-  - [20.1](#20.1) <a id='20.1'></a> **Yup.**
+  - [20.1](#20.1) <a name='20.1'></a> **Yup.**
 
     ```javascript
     // bad
@@ -1545,8 +1545,8 @@
 
 ## Type Casting & Coercion
 
-  - [21.1](#21.1) <a id='21.1'></a> Perform type coercion at the beginning of the statement.
-  - [21.2](#21.2) <a id='21.2'></a> Strings:
+  - [21.1](#21.1) <a name='21.1'></a> Perform type coercion at the beginning of the statement.
+  - [21.2](#21.2) <a name='21.2'></a> Strings:
 
     ```javascript
     //  => this.reviewScore = 9;
@@ -1558,7 +1558,7 @@
     const totalScore = String(this.reviewScore);
     ```
 
-  - [21.3](#21.3) <a id='21.3'></a> Use `parseInt` for Numbers and always with a radix for type casting.
+  - [21.3](#21.3) <a name='21.3'></a> Use `parseInt` for Numbers and always with a radix for type casting.
 
     ```javascript
     const inputValue = '4';
@@ -1582,7 +1582,7 @@
     const val = parseInt(inputValue, 10);
     ```
 
-  - [21.4](#21.4) <a id='21.4'></a> If for whatever reason you are doing something wild and `parseInt` is your bottleneck and need to use Bitshift for [performance reasons](http://jsperf.com/coercion-vs-casting/3), leave a comment explaining why and what you're doing.
+  - [21.4](#21.4) <a name='21.4'></a> If for whatever reason you are doing something wild and `parseInt` is your bottleneck and need to use Bitshift for [performance reasons](http://jsperf.com/coercion-vs-casting/3), leave a comment explaining why and what you're doing.
 
     ```javascript
     // good
@@ -1594,7 +1594,7 @@
     const val = inputValue >> 0;
     ```
 
-  - [21.5](#21.5) <a id='21.5'></a> **Note:** Be careful when using bitshift operations. Numbers are represented as [64-bit values](http://es5.github.io/#x4.3.19), but Bitshift operations always return a 32-bit integer ([source](http://es5.github.io/#x11.7)). Bitshift can lead to unexpected behavior for integer values larger than 32 bits. [Discussion](https://github.com/airbnb/javascript/issues/109). Largest signed 32-bit Int is 2,147,483,647:
+  - [21.5](#21.5) <a name='21.5'></a> **Note:** Be careful when using bitshift operations. Numbers are represented as [64-bit values](http://es5.github.io/#x4.3.19), but Bitshift operations always return a 32-bit integer ([source](http://es5.github.io/#x11.7)). Bitshift can lead to unexpected behavior for integer values larger than 32 bits. [Discussion](https://github.com/airbnb/javascript/issues/109). Largest signed 32-bit Int is 2,147,483,647:
 
     ```javascript
     2147483647 >> 0 //=> 2147483647
@@ -1602,7 +1602,7 @@
     2147483649 >> 0 //=> -2147483647
     ```
 
-  - [21.6](#21.6) <a id='21.6'></a> Booleans:
+  - [21.6](#21.6) <a name='21.6'></a> Booleans:
 
     ```javascript
     const age = 0;
@@ -1622,7 +1622,7 @@
 
 ## Naming Conventions
 
-  - [22.1](#22.1) <a id='22.1'></a> Avoid single letter names. Be descriptive with your naming.
+  - [22.1](#22.1) <a name='22.1'></a> Avoid single letter names. Be descriptive with your naming.
 
     ```javascript
     // bad
@@ -1636,7 +1636,7 @@
     }
     ```
 
-  - [22.2](#22.2) <a id='22.2'></a> Use camelCase when naming objects, functions, and instances.
+  - [22.2](#22.2) <a name='22.2'></a> Use camelCase when naming objects, functions, and instances.
 
     ```javascript
     // bad
@@ -1649,7 +1649,7 @@
     function thisIsMyFunction() {}
     ```
 
-  - [22.3](#22.3) <a id='22.3'></a> Use PascalCase when naming constructors or classes.
+  - [22.3](#22.3) <a name='22.3'></a> Use PascalCase when naming constructors or classes.
 
     ```javascript
     // bad
@@ -1673,7 +1673,7 @@
     });
     ```
 
-  - [22.4](#22.4) <a id='22.4'></a> Use a leading underscore `_` when naming private properties.
+  - [22.4](#22.4) <a name='22.4'></a> Use a leading underscore `_` when naming private properties.
 
     ```javascript
     // bad
@@ -1684,7 +1684,7 @@
     this._firstName = 'Panda';
     ```
 
-  - [22.5](#22.5) <a id='22.5'></a> Don't save references to `this`. Use arrow functions or Function#bind.
+  - [22.5](#22.5) <a name='22.5'></a> Don't save references to `this`. Use arrow functions or Function#bind.
 
     ```javascript
     // bad
@@ -1711,7 +1711,7 @@
     }
     ```
 
-  - [22.6](#22.6) <a id='22.6'></a> If your file exports a single class, your filename should be exactly the name of the class.
+  - [22.6](#22.6) <a name='22.6'></a> If your file exports a single class, your filename should be exactly the name of the class.
     ```javascript
     // file contents
     class CheckBox {
@@ -1730,7 +1730,7 @@
     import CheckBox from './CheckBox';
     ```
 
-  - [22.7](#22.7) <a id='22.7'></a> Use camelCase when you export-default a function. Your filename should be identical to your function's name.
+  - [22.7](#22.7) <a name='22.7'></a> Use camelCase when you export-default a function. Your filename should be identical to your function's name.
 
     ```javascript
     function makeStyleGuide() {
@@ -1739,7 +1739,7 @@
     export default makeStyleGuide;
     ```
 
-  - [22.8](#22.8) <a id='22.8'></a> Use PascalCase when you export a singleton / function library / bare object.
+  - [22.8](#22.8) <a name='22.8'></a> Use PascalCase when you export a singleton / function library / bare object.
 
     ```javascript
     const AirbnbStyleGuide = {
@@ -1756,8 +1756,8 @@
 
 ## Accessors
 
-  - [23.1](#23.1) <a id='23.1'></a> Accessor functions for properties are not required.
-  - [23.2](#23.2) <a id='23.2'></a> If you do make accessor functions use getVal() and setVal('hello').
+  - [23.1](#23.1) <a name='23.1'></a> Accessor functions for properties are not required.
+  - [23.2](#23.2) <a name='23.2'></a> If you do make accessor functions use getVal() and setVal('hello').
 
     ```javascript
     // bad
@@ -1773,7 +1773,7 @@
     dragon.setAge(25);
     ```
 
-  - [23.3](#23.3) <a id='23.3'></a> If the property is a boolean, use isVal() or hasVal().
+  - [23.3](#23.3) <a name='23.3'></a> If the property is a boolean, use isVal() or hasVal().
 
     ```javascript
     // bad
@@ -1787,7 +1787,7 @@
     }
     ```
 
-  - [23.4](#23.4) <a id='23.4'></a> It's okay to create get() and set() functions, but be consistent.
+  - [23.4](#23.4) <a name='23.4'></a> It's okay to create get() and set() functions, but be consistent.
 
     ```javascript
     class Jedi {
@@ -1811,7 +1811,7 @@
 
 ## Events
 
-  - [24.1](#24.1) <a id='24.1'></a> When attaching data payloads to events (whether DOM events or something more proprietary like Backbone events), pass a hash instead of a raw value. This allows a subsequent contributor to add more data to the event payload without finding and updating every handler for the event. For example, instead of:
+  - [24.1](#24.1) <a name='24.1'></a> When attaching data payloads to events (whether DOM events or something more proprietary like Backbone events), pass a hash instead of a raw value. This allows a subsequent contributor to add more data to the event payload without finding and updating every handler for the event. For example, instead of:
 
     ```javascript
     // bad
@@ -1842,7 +1842,7 @@
 
 ## jQuery
 
-  - [25.1](#25.1) <a id='25.1'></a> Prefix jQuery object variables with a `$`.
+  - [25.1](#25.1) <a name='25.1'></a> Prefix jQuery object variables with a `$`.
 
     ```javascript
     // bad
@@ -1852,7 +1852,7 @@
     const $sidebar = $('.sidebar');
     ```
 
-  - [25.2](#25.2) <a id='25.2'></a> Cache jQuery lookups.
+  - [25.2](#25.2) <a name='25.2'></a> Cache jQuery lookups.
 
     ```javascript
     // bad
@@ -1879,8 +1879,8 @@
     }
     ```
 
-  - [25.3](#25.3) <a id='25.3'></a> For DOM queries use Cascading `$('.sidebar ul')` or parent > child `$('.sidebar > ul')`. [jsPerf](http://jsperf.com/jquery-find-vs-context-sel/16)
-  - [25.4](#25.4) <a id='25.4'></a> Use `find` with scoped jQuery object queries.
+  - [25.3](#25.3) <a name='25.3'></a> For DOM queries use Cascading `$('.sidebar ul')` or parent > child `$('.sidebar > ul')`. [jsPerf](http://jsperf.com/jquery-find-vs-context-sel/16)
+  - [25.4](#25.4) <a name='25.4'></a> Use `find` with scoped jQuery object queries.
 
     ```javascript
     // bad
@@ -1904,13 +1904,13 @@
 
 ## ECMAScript 5 Compatibility
 
-  - [26.1](#26.1) <a id='26.1'></a> Refer to [Kangax](https://twitter.com/kangax/)'s ES5 [compatibility table](http://kangax.github.com/es5-compat-table/).
+  - [26.1](#26.1) <a name='26.1'></a> Refer to [Kangax](https://twitter.com/kangax/)'s ES5 [compatibility table](http://kangax.github.com/es5-compat-table/).
 
 **[⬆ back to top](#table-of-contents)**
 
 ## ECMAScript 6 Styles
 
-[27.1](#27.1) <a id='27.1'></a> This is a collection of links to the various es6 features.
+[27.1](#27.1) <a name='27.1'></a> This is a collection of links to the various es6 features.
 
 1. [Arrow Functions](#arrow-functions)
 1. [Classes](#constructors)
@@ -1930,7 +1930,7 @@
 
 ## Testing
 
-  - [28.1](#28.1) <a id='28.1'></a> **Yup.**
+  - [28.1](#28.1) <a name='28.1'></a> **Yup.**
 
     ```javascript
     function() {

From 20c4d37b335384c86241c3e2578688374432a910 Mon Sep 17 00:00:00 2001
From: Jake Teton-Landis <jake.tl@airbnb.com>
Date: Mon, 18 May 2015 11:55:36 -0700
Subject: [PATCH 0214/1591] add eslint rules for JSX style from issue #345

---
 linters/.eslintrc | 45 ++++++++++++++++++++++++++++++++++++++++++++-
 1 file changed, 44 insertions(+), 1 deletion(-)

diff --git a/linters/.eslintrc b/linters/.eslintrc
index 32eecff357..3b842c8538 100644
--- a/linters/.eslintrc
+++ b/linters/.eslintrc
@@ -1,5 +1,8 @@
 {
   "parser": "babel-eslint",
+  "plugins": [
+    "react"
+  ],
   "env": {
     "browser": true,
     "node": true
@@ -164,6 +167,46 @@
     "space-before-function-paren": [2, "never"], // http://eslint.org/docs/rules/space-before-function-paren
     "space-infix-ops": 2,            // http://eslint.org/docs/rules/space-infix-ops
     "space-return-throw-case": 2,    // http://eslint.org/docs/rules/space-return-throw-case
-    "spaced-line-comment": 2         // http://eslint.org/docs/rules/spaced-line-comment
+    "spaced-line-comment": 2,        // http://eslint.org/docs/rules/spaced-line-comment
+
+/**
+ * JSX style
+ */
+    "react/display-name": 0,
+    "react/jsx-boolean-value": 2,
+    "react/jsx-quotes": [2, "double"],
+    "react/jsx-no-undef": 2,
+    "react/jsx-sort-props": 0,
+    "react/jsx-sort-prop-types": 0,
+    "react/jsx-uses-react": 2,
+    "react/jsx-uses-vars": 2,
+    "react/no-did-mount-set-state": [2, "allow-in-func"],
+    "react/no-did-update-set-state": 2,
+    "react/no-multi-comp": 2,
+    "react/no-unknown-property": 2,
+    "react/prop-types": 2,
+    "react/react-in-jsx-scope": 2,
+    "react/self-closing-comp": 2,
+    "react/wrap-multilines": 2,
+    "react/sort-comp": [2, {
+      "order": [
+        "displayName",
+        "mixins",
+        "statics",
+        "propTypes",
+        "getDefaultProps",
+        "getInitialState",
+        "componentWillMount",
+        "componentDidMount",
+        "componentWillReceiveProps",
+        "shouldComponentUpdate",
+        "componentWillUpdate",
+        "componentWillUnmount",
+        "/^on.+$/",
+        "/^get.+$/",
+        "/^render.+$/",
+        "render"
+      ]
+    }]
   }
 }

From f87ddc012f12dac91f28b5be0fa6d2d522e2e2bb Mon Sep 17 00:00:00 2001
From: Jake Teton-Landis <jake.tl@airbnb.com>
Date: Mon, 18 May 2015 12:02:48 -0700
Subject: [PATCH 0215/1591] add README describing eslintrc requirements

---
 linters/README.md | 7 +++++++
 1 file changed, 7 insertions(+)
 create mode 100644 linters/README.md

diff --git a/linters/README.md b/linters/README.md
new file mode 100644
index 0000000000..6da3dcd984
--- /dev/null
+++ b/linters/README.md
@@ -0,0 +1,7 @@
+## `.eslintrc`
+
+Our `.eslintrc` requires the following NPM packages packages:
+
+- `eslint`
+- `babel-eslint`
+- `eslint-plugin-react`

From a5704787e4695d128d59d83bf15a1e7a836c4d99 Mon Sep 17 00:00:00 2001
From: Josh Perez <josh@goatslacker.com>
Date: Mon, 18 May 2015 14:09:46 -0700
Subject: [PATCH 0216/1591] Amend the arrow function rules

This allows one to omit parens whenever it fits into a single line, which is similar to our if statement rules.
---
 README.md | 20 ++++----------------
 1 file changed, 4 insertions(+), 16 deletions(-)

diff --git a/README.md b/README.md
index 0f0e5c908f..2a1209b04e 100644
--- a/README.md
+++ b/README.md
@@ -590,7 +590,7 @@
     });
     ```
 
-  - [8.2](#8.2) <a name='8.2'></a> If the function body fits on one line, feel free to omit the braces and use implicit return. Otherwise, add the braces and use a `return` statement.
+  - [8.2](#8.2) <a name='8.2'></a> If the function body fits on one line and there is only a single argument, feel free to omit the braces and parenthesis, and use the implicit return. Otherwise, add the parenthesis, braces, and use a `return` statement.
 
   > Why? Syntactic sugar. It reads well when multiple functions are chained together.
 
@@ -598,24 +598,12 @@
 
     ```javascript
     // good
-    [1, 2, 3].map((x) => x * x);
-
-    // good
-    [1, 2, 3].map((x) => {
-      return { number: x };
-    });
-    ```
-
-  - [8.3](#8.3) <a name='8.3'></a> Always use parentheses around the arguments. Omitting the parentheses makes the functions less readable and only works for single arguments.
-
-  > Why? These declarations read better with parentheses. They are also required when you have multiple parameters so this enforces consistency.
-
-    ```javascript
-    // bad
     [1, 2, 3].map(x => x * x);
 
     // good
-    [1, 2, 3].map((x) => x * x);
+    [1, 2, 3].reduce((total, n) => {
+      return total + n;
+    }, 0);
     ```
 
 **[⬆ back to top](#table-of-contents)**

From cbcb09f99041ca3244735ea81fdea1f4a21d5958 Mon Sep 17 00:00:00 2001
From: Josh Perez <josh@goatslacker.com>
Date: Mon, 18 May 2015 14:40:41 -0700
Subject: [PATCH 0217/1591] Update README.md

---
 README.md | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/README.md b/README.md
index 2a1209b04e..5a11988c6f 100644
--- a/README.md
+++ b/README.md
@@ -590,7 +590,7 @@
     });
     ```
 
-  - [8.2](#8.2) <a name='8.2'></a> If the function body fits on one line and there is only a single argument, feel free to omit the braces and parenthesis, and use the implicit return. Otherwise, add the parenthesis, braces, and use a `return` statement.
+  - [8.2](#8.2) <a name='8.2'></a> If the function body fits on one line and there is only a single argument, feel free to omit the braces and parentheses, and use the implicit return. Otherwise, add the parentheses, braces, and use a `return` statement.
 
   > Why? Syntactic sugar. It reads well when multiple functions are chained together.
 

From 6b40c838fbf7154bc038835c5aaf6ae3b0b44047 Mon Sep 17 00:00:00 2001
From: Jake Teton-Landis <jake.tl@airbnb.com>
Date: Fri, 22 May 2015 10:38:21 -0700
Subject: [PATCH 0218/1591] create package eslint-config-airbnb

---
 .gitignore                                 |  1 +
 package.json                               |  3 +-
 packages/eslint-config-airbnb/index.js     |  1 +
 packages/eslint-config-airbnb/package.json | 32 ++++++++++++++++++++++
 4 files changed, 36 insertions(+), 1 deletion(-)
 create mode 100644 .gitignore
 create mode 100644 packages/eslint-config-airbnb/index.js
 create mode 100644 packages/eslint-config-airbnb/package.json

diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000000..3c3629e647
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1 @@
+node_modules
diff --git a/package.json b/package.json
index ff8167fad5..dc0225dc08 100644
--- a/package.json
+++ b/package.json
@@ -3,7 +3,8 @@
   "version": "2.0.0",
   "description": "A mostly reasonable approach to JavaScript.",
   "scripts": {
-    "test": "echo \"Error: no test specified\" && exit 1"
+    "test": "echo \"Error: no test specified\" && exit 1",
+    "publish-all": "npm publish && cd ./packages/eslint-config-airbnb && npm publish"
   },
   "repository": {
     "type": "git",
diff --git a/packages/eslint-config-airbnb/index.js b/packages/eslint-config-airbnb/index.js
new file mode 100644
index 0000000000..8203f1e70d
--- /dev/null
+++ b/packages/eslint-config-airbnb/index.js
@@ -0,0 +1 @@
+module.exports = require('airbnb-style/linters/.eslintrc');
diff --git a/packages/eslint-config-airbnb/package.json b/packages/eslint-config-airbnb/package.json
new file mode 100644
index 0000000000..3412d98d33
--- /dev/null
+++ b/packages/eslint-config-airbnb/package.json
@@ -0,0 +1,32 @@
+{
+  "name": "eslint-config-airbnb",
+  "version": "0.0.1",
+  "description": "Airbnb's ESLint config, following our styleguide",
+  "main": "index.js",
+  "scripts": {
+    "test": "echo \"Error: no test specified\" && exit 1"
+  },
+  "repository": {
+    "type": "git",
+    "url": "https://github.com/airbnb/javascript"
+  },
+  "keywords": [
+    "eslint",
+    "config",
+    "airbnb",
+    "javascript",
+    "styleguide"
+  ],
+  "author": "Jake Teton-Landis (https://twitter.com/@jitl)",
+  "license": "MIT",
+  "bugs": {
+    "url": "https://github.com/airbnb/javascript/issues"
+  },
+  "homepage": "https://github.com/airbnb/javascript",
+  "dependencies": {
+    "airbnb-style": "2.0.0",
+    "babel-eslint": "3.1.7",
+    "eslint": "0.21.2",
+    "eslint-plugin-react": "2.3.0"
+  }
+}

From f2da99e0584f67dc5794c25f2b12bc7e25692d1e Mon Sep 17 00:00:00 2001
From: Jake Teton-Landis <jake.tl@airbnb.com>
Date: Fri, 22 May 2015 11:06:16 -0700
Subject: [PATCH 0219/1591] manually load commented JSON

---
 packages/eslint-config-airbnb/index.js     | 12 +++++++++++-
 packages/eslint-config-airbnb/package.json |  4 +++-
 2 files changed, 14 insertions(+), 2 deletions(-)

diff --git a/packages/eslint-config-airbnb/index.js b/packages/eslint-config-airbnb/index.js
index 8203f1e70d..9c29ea31bd 100644
--- a/packages/eslint-config-airbnb/index.js
+++ b/packages/eslint-config-airbnb/index.js
@@ -1 +1,11 @@
-module.exports = require('airbnb-style/linters/.eslintrc');
+var resolve = require('resolve');
+var stripComments = require('strip-json-comments');
+var fs = require('fs');
+
+// you could do this all at once if you wanted to look cool
+var filename = resolve.sync('airbnb-style/linters/.eslintrc');
+var data = fs.readFileSync(filename, {encoding: 'utf-8'});
+var dataWithoutComments = stripComments(data);
+var parsed = JSON.parse(dataWithoutComments);
+
+module.exports = parsed;
diff --git a/packages/eslint-config-airbnb/package.json b/packages/eslint-config-airbnb/package.json
index 3412d98d33..4f0d4024ee 100644
--- a/packages/eslint-config-airbnb/package.json
+++ b/packages/eslint-config-airbnb/package.json
@@ -27,6 +27,8 @@
     "airbnb-style": "2.0.0",
     "babel-eslint": "3.1.7",
     "eslint": "0.21.2",
-    "eslint-plugin-react": "2.3.0"
+    "eslint-plugin-react": "2.3.0",
+    "resolve": "1.1.6",
+    "strip-json-comments": "1.0.2"
   }
 }

From 1676f2b1dc1a924e104ed7df0f2092fc9176269d Mon Sep 17 00:00:00 2001
From: Jake Teton-Landis <jake.tl@airbnb.com>
Date: Fri, 22 May 2015 11:06:37 -0700
Subject: [PATCH 0220/1591] bump eslint-config-airbnb version to 0.0.2

---
 packages/eslint-config-airbnb/package.json | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/packages/eslint-config-airbnb/package.json b/packages/eslint-config-airbnb/package.json
index 4f0d4024ee..3f76ac271a 100644
--- a/packages/eslint-config-airbnb/package.json
+++ b/packages/eslint-config-airbnb/package.json
@@ -1,6 +1,6 @@
 {
   "name": "eslint-config-airbnb",
-  "version": "0.0.1",
+  "version": "0.0.2",
   "description": "Airbnb's ESLint config, following our styleguide",
   "main": "index.js",
   "scripts": {

From c3a94c15fd5385828f47e45b1e329a810d0ecfc3 Mon Sep 17 00:00:00 2001
From: Jake Teton-Landis <jake.tl@airbnb.com>
Date: Sat, 23 May 2015 18:53:27 -0700
Subject: [PATCH 0221/1591] add keyword "eslintconfig" to eslint-config-airbnb

---
 packages/eslint-config-airbnb/package.json | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/packages/eslint-config-airbnb/package.json b/packages/eslint-config-airbnb/package.json
index 3f76ac271a..0625134b82 100644
--- a/packages/eslint-config-airbnb/package.json
+++ b/packages/eslint-config-airbnb/package.json
@@ -1,6 +1,6 @@
 {
   "name": "eslint-config-airbnb",
-  "version": "0.0.2",
+  "version": "0.0.6",
   "description": "Airbnb's ESLint config, following our styleguide",
   "main": "index.js",
   "scripts": {
@@ -12,6 +12,7 @@
   },
   "keywords": [
     "eslint",
+    "eslintconfig",
     "config",
     "airbnb",
     "javascript",

From 2539557e98f802a00513719ed9dd87891c7cde4f Mon Sep 17 00:00:00 2001
From: Sun Xingfan <sunxingfan@xiaomi.com>
Date: Mon, 25 May 2015 22:15:38 +0800
Subject: [PATCH 0222/1591] Change Chinese Translation to a more official like
 version The current Chinese version translated by adamlu is a modified
 version which as he said change/delete some rules from the original and it's
 base on the version 2 years ago. I transalte a new version base on current
 style guide of es5 version.

---
 README.md     | 2 +-
 es5/README.md | 2 +-
 2 files changed, 2 insertions(+), 2 deletions(-)

diff --git a/README.md b/README.md
index 5a11988c6f..cad368e92d 100644
--- a/README.md
+++ b/README.md
@@ -2082,7 +2082,7 @@
   - ![bg](https://raw.githubusercontent.com/gosquared/flags/master/flags/flags/shiny/24/Bulgaria.png) **Bulgarian**: [borislavvv/javascript](https://github.com/borislavvv/javascript)
   - ![ca](https://raw.githubusercontent.com/fpmweb/javascript-style-guide/master/img/catala.png) **Catalan**: [fpmweb/javascript-style-guide](https://github.com/fpmweb/javascript-style-guide)
   - ![tw](https://raw.githubusercontent.com/gosquared/flags/master/flags/flags/shiny/24/Taiwan.png) **Chinese(Traditional)**: [jigsawye/javascript](https://github.com/jigsawye/javascript)
-  - ![cn](https://raw.githubusercontent.com/gosquared/flags/master/flags/flags/shiny/24/China.png) **Chinese(Simplified)**: [adamlu/javascript-style-guide](https://github.com/adamlu/javascript-style-guide)
+  - ![cn](https://raw.githubusercontent.com/gosquared/flags/master/flags/flags/shiny/24/China.png) **Chinese(Simplified)**: [sivan/javascript-style-guide](https://github.com/sivan/javascript-style-guide)
   - ![fr](https://raw.githubusercontent.com/gosquared/flags/master/flags/flags/shiny/24/France.png) **French**: [nmussy/javascript-style-guide](https://github.com/nmussy/javascript-style-guide)
   - ![de](https://raw.githubusercontent.com/gosquared/flags/master/flags/flags/shiny/24/Germany.png) **German**: [timofurrer/javascript-style-guide](https://github.com/timofurrer/javascript-style-guide)
   - ![it](https://raw.githubusercontent.com/gosquared/flags/master/flags/flags/shiny/24/Italy.png) **Italian**: [sinkswim/javascript-style-guide](https://github.com/sinkswim/javascript-style-guide)
diff --git a/es5/README.md b/es5/README.md
index 7626d0b9ea..b2b99f0947 100644
--- a/es5/README.md
+++ b/es5/README.md
@@ -1689,7 +1689,7 @@
   - ![bg](https://raw.githubusercontent.com/gosquared/flags/master/flags/flags/shiny/24/Bulgaria.png) **Bulgarian**: [borislavvv/javascript](https://github.com/borislavvv/javascript)
   - ![ca](https://raw.githubusercontent.com/fpmweb/javascript-style-guide/master/img/catala.png) **Catalan**: [fpmweb/javascript-style-guide](https://github.com/fpmweb/javascript-style-guide)
   - ![tw](https://raw.githubusercontent.com/gosquared/flags/master/flags/flags/shiny/24/Taiwan.png) **Chinese(Traditional)**: [jigsawye/javascript](https://github.com/jigsawye/javascript)
-  - ![cn](https://raw.githubusercontent.com/gosquared/flags/master/flags/flags/shiny/24/China.png) **Chinese(Simplified)**: [adamlu/javascript-style-guide](https://github.com/adamlu/javascript-style-guide)
+  - ![cn](https://raw.githubusercontent.com/gosquared/flags/master/flags/flags/shiny/24/China.png) **Chinese(Simplified)**: [sivan/javascript-style-guide](https://github.com/sivan/javascript-style-guide)
   - ![fr](https://raw.githubusercontent.com/gosquared/flags/master/flags/flags/shiny/24/France.png) **French**: [nmussy/javascript-style-guide](https://github.com/nmussy/javascript-style-guide)
   - ![de](https://raw.githubusercontent.com/gosquared/flags/master/flags/flags/shiny/24/Germany.png) **German**: [timofurrer/javascript-style-guide](https://github.com/timofurrer/javascript-style-guide)
   - ![it](https://raw.githubusercontent.com/gosquared/flags/master/flags/flags/shiny/24/Italy.png) **Italian**: [sinkswim/javascript-style-guide](https://github.com/sinkswim/javascript-style-guide)

From a6796f00981bc32685cb4eeb4fa2e89e90716c90 Mon Sep 17 00:00:00 2001
From: Baraa Hamodi <bhamodi@uwaterloo.ca>
Date: Wed, 27 May 2015 23:58:29 -0700
Subject: [PATCH 0223/1591] Update .eslintrc

Just a consistency thing. :)
---
 linters/.eslintrc | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/linters/.eslintrc b/linters/.eslintrc
index 3b842c8538..93b84a54fe 100644
--- a/linters/.eslintrc
+++ b/linters/.eslintrc
@@ -53,7 +53,7 @@
  * Possible errors
  */
     "comma-dangle": [2, "never"],    // http://eslint.org/docs/rules/comma-dangle
-    "no-cond-assign": [2, "always"],  // http://eslint.org/docs/rules/no-cond-assign
+    "no-cond-assign": [2, "always"], // http://eslint.org/docs/rules/no-cond-assign
     "no-console": 1,                 // http://eslint.org/docs/rules/no-console
     "no-debugger": 1,                // http://eslint.org/docs/rules/no-debugger
     "no-alert": 1,                   // http://eslint.org/docs/rules/no-alert

From 394648033490fd8eaa18f08fe544a56cf165fbfd Mon Sep 17 00:00:00 2001
From: Arian Faurtosh <arian@icloud.com>
Date: Sun, 31 May 2015 20:16:39 -0700
Subject: [PATCH 0224/1591] added trailing comma

---
 README.md | 18 +++++++++---------
 1 file changed, 9 insertions(+), 9 deletions(-)

diff --git a/README.md b/README.md
index 5a11988c6f..544112f71f 100644
--- a/README.md
+++ b/README.md
@@ -146,13 +146,13 @@
     // bad
     const superman = {
       default: { clark: 'kent' },
-      private: true
+      private: true,
     };
 
     // good
     const superman = {
       defaults: { clark: 'kent' },
-      hidden: true
+      hidden: true,
     };
     ```
 
@@ -161,17 +161,17 @@
     ```javascript
     // bad
     const superman = {
-      class: 'alien'
+      class: 'alien',
     };
 
     // bad
     const superman = {
-      klass: 'alien'
+      klass: 'alien',
     };
 
     // good
     const superman = {
-      type: 'alien'
+      type: 'alien',
     };
     ```
 
@@ -234,12 +234,12 @@
 
     // bad
     const obj = {
-      lukeSkywalker: lukeSkywalker
+      lukeSkywalker: lukeSkywalker,
     };
 
     // good
     const obj = {
-      lukeSkywalker
+      lukeSkywalker,
     };
     ```
 
@@ -1272,13 +1272,13 @@
     // bad
     dog.set('attr',{
       age: '1 year',
-      breed: 'Bernese Mountain Dog'
+      breed: 'Bernese Mountain Dog',
     });
 
     // good
     dog.set('attr', {
       age: '1 year',
-      breed: 'Bernese Mountain Dog'
+      breed: 'Bernese Mountain Dog',
     });
     ```
 

From 7a7bec17f3f1953ad93c16e1eb761cc40f5df30a Mon Sep 17 00:00:00 2001
From: ycavatars <sychewo@gmail.com>
Date: Mon, 8 Jun 2015 12:56:32 +0800
Subject: [PATCH 0225/1591] add missing componentDidUpdate

---
 react/README.md | 11 ++++++-----
 1 file changed, 6 insertions(+), 5 deletions(-)

diff --git a/react/README.md b/react/README.md
index 6d9eb16921..3ff7bb9f37 100644
--- a/react/README.md
+++ b/react/README.md
@@ -232,10 +232,11 @@
   9. componentWillReceiveProps
   10. shouldComponentUpdate
   11. componentWillUpdate
-  12. componentWillUnmount
-  13. *clickHandlers or eventHandlers* like onClickSubmit() or onChangeDescription()
-  14. *getter methods for render* like getSelectReason() or getFooterContent()
-  15. *Optional render methods* like renderNavigation() or renderProfilePicture()
-  16. render
+  12. componentDidUpdate
+  13. componentWillUnmount
+  14. *clickHandlers or eventHandlers* like onClickSubmit() or onChangeDescription()
+  15. *getter methods for render* like getSelectReason() or getFooterContent()
+  16. *Optional render methods* like renderNavigation() or renderProfilePicture()
+  17. render
 
 **[⬆ back to top](#table-of-contents)**

From fb45e22b0e044eac25dd0f84d80d886260c4d953 Mon Sep 17 00:00:00 2001
From: Carter Chung <carterchung@users.noreply.github.com>
Date: Sat, 13 Jun 2015 21:54:29 -0700
Subject: [PATCH 0226/1591] Added missing period

---
 README.md | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/README.md b/README.md
index 5a11988c6f..1f7b4f2e35 100644
--- a/README.md
+++ b/README.md
@@ -1380,7 +1380,7 @@
         .call(tron.led);
     ```
 
-  - [18.6](#18.6) <a name='18.6'></a> Leave a blank line after blocks and before the next statement
+  - [18.6](#18.6) <a name='18.6'></a> Leave a blank line after blocks and before the next statement.
 
     ```javascript
     // bad

From a2e235608c01ef9015b4d530b998b7c6be8366ae Mon Sep 17 00:00:00 2001
From: Carter Chung <carterchung@users.noreply.github.com>
Date: Sat, 13 Jun 2015 21:56:21 -0700
Subject: [PATCH 0227/1591] Added bullet/indentation

for consistency
---
 README.md | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/README.md b/README.md
index 5a11988c6f..12cc02e8bf 100644
--- a/README.md
+++ b/README.md
@@ -1898,7 +1898,7 @@
 
 ## ECMAScript 6 Styles
 
-[27.1](#27.1) <a name='27.1'></a> This is a collection of links to the various es6 features.
+  - [27.1](#27.1) <a name='27.1'></a> This is a collection of links to the various es6 features.
 
 1. [Arrow Functions](#arrow-functions)
 1. [Classes](#constructors)

From 1429a20c9734b7096fd091546b467f7837f8945a Mon Sep 17 00:00:00 2001
From: Aniss Bouraba <anis.bouraba@appsbroker.com>
Date: Wed, 17 Jun 2015 12:29:48 +0100
Subject: [PATCH 0228/1591] update(README.md): added Airbnb Style .eslintrc
 link

---
 README.md | 1 +
 1 file changed, 1 insertion(+)

diff --git a/README.md b/README.md
index 04162dcaf9..ff03a1bbf2 100644
--- a/README.md
+++ b/README.md
@@ -1959,6 +1959,7 @@
 **Tools**
 
   - Code Style Linters
+    + [ESlint](http://eslint.org/) - [Airbnb Style .eslintrc](https://github.com/airbnb/javascript/blob/master/linters/.eslintrc)
     + [JSHint](http://www.jshint.com/) - [Airbnb Style .jshintrc](https://github.com/airbnb/javascript/blob/master/linters/jshintrc)
     + [JSCS](https://github.com/jscs-dev/node-jscs) - [Airbnb Style Preset](https://github.com/jscs-dev/node-jscs/blob/master/presets/airbnb.json)
 

From 25a2430dc654b063d92c1935b1a685158af37c71 Mon Sep 17 00:00:00 2001
From: Tim Golen <tim@golen.net>
Date: Wed, 17 Jun 2015 13:30:29 -0600
Subject: [PATCH 0229/1591] Add Expensify to the list of organizations using
 this style guide

---
 README.md | 1 +
 1 file changed, 1 insertion(+)

diff --git a/README.md b/README.md
index 683a2f0d75..4a0280d15b 100644
--- a/README.md
+++ b/README.md
@@ -2038,6 +2038,7 @@
   - **Digitpaint** [digitpaint/javascript](https://github.com/digitpaint/javascript)
   - **Evernote**: [evernote/javascript-style-guide](https://github.com/evernote/javascript-style-guide)
   - **ExactTarget**: [ExactTarget/javascript](https://github.com/ExactTarget/javascript)
+  - **Expensify** [Expensify/Style-Guide](https://github.com/Expensify/Style-Guide/blob/master/javascript.md)
   - **Flexberry**: [Flexberry/javascript-style-guide](https://github.com/Flexberry/javascript-style-guide)
   - **Gawker Media**: [gawkermedia/javascript](https://github.com/gawkermedia/javascript)
   - **GeneralElectric**: [GeneralElectric/javascript](https://github.com/GeneralElectric/javascript)

From 53ac64adf5d52e89b34e01a2befe8fa9e990662f Mon Sep 17 00:00:00 2001
From: Christophe Hurpeau <christophe@hurpeau.com>
Date: Tue, 23 Jun 2015 18:00:55 +0200
Subject: [PATCH 0230/1591] 18.6: blocks and blank line: add example with array

---
 README.md | 20 ++++++++++++++++++++
 1 file changed, 20 insertions(+)

diff --git a/README.md b/README.md
index 0c94d2dd7a..0485737255 100644
--- a/README.md
+++ b/README.md
@@ -1415,6 +1415,26 @@
     };
 
     return obj;
+
+    // bad
+    const arr = [
+      function foo() {
+      },
+      function bar() {
+      },
+    ];
+    return arr;
+
+    // good
+    const arr = [
+      function foo() {
+      },
+
+      function bar() {
+      },
+    ];
+
+    return arr;
     ```
 
 

From 26dd0434141938a3e03ef4b37c38765f4c030137 Mon Sep 17 00:00:00 2001
From: Manoj Kumar <me@manojkr.com>
Date: Tue, 23 Jun 2015 22:13:05 +0530
Subject: [PATCH 0231/1591] Update README.md

---
 README.md | 1 +
 1 file changed, 1 insertion(+)

diff --git a/README.md b/README.md
index 0c94d2dd7a..43244dc2d7 100644
--- a/README.md
+++ b/README.md
@@ -2000,6 +2000,7 @@
   - [JSBooks](http://jsbooks.revolunet.com/) - Julien Bouquillon
   - [Third Party JavaScript](http://manning.com/vinegar/) - Ben Vinegar and Anton Kovalyov
   - [Effective JavaScript: 68 Specific Ways to Harness the Power of JavaScript](http://amzn.com/0321812182) - David Herman
+  - [Eloquent JavaScript](http://eloquentjavascript.net/) - Marijn Haverbeke
 
 **Blogs**
 

From e9b59b76a5287a4aed3df94ed8b06ff0ad5fbd35 Mon Sep 17 00:00:00 2001
From: Chris Portela <cp@cmp.is>
Date: Wed, 24 Jun 2015 15:51:25 -0400
Subject: [PATCH 0232/1591] Update .eslintrc with other react class properties

In `eslint-plugin-react`'s page on their sorting rules they show the order I showed here. https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/sort-comp.md#rule-options

I noticed because according to the current rules `contextTypes` goes below `render` and I also noticed other methods were missing from the list. Since we're being specific we should also include the other methods and properties that `eslint-plugin-react` handles by default.
---
 linters/.eslintrc | 29 +++++++++++++++++------------
 1 file changed, 17 insertions(+), 12 deletions(-)

diff --git a/linters/.eslintrc b/linters/.eslintrc
index 93b84a54fe..c99a626e71 100644
--- a/linters/.eslintrc
+++ b/linters/.eslintrc
@@ -190,18 +190,23 @@
     "react/wrap-multilines": 2,
     "react/sort-comp": [2, {
       "order": [
-        "displayName",
-        "mixins",
-        "statics",
-        "propTypes",
-        "getDefaultProps",
-        "getInitialState",
-        "componentWillMount",
-        "componentDidMount",
-        "componentWillReceiveProps",
-        "shouldComponentUpdate",
-        "componentWillUpdate",
-        "componentWillUnmount",
+        'displayName',
+        'propTypes',
+        'contextTypes',
+        'childContextTypes',
+        'mixins',
+        'statics',
+        'defaultProps',
+        'getDefaultProps',
+        'getInitialState',
+        'getChildContext',
+        'componentWillMount',
+        'componentDidMount',
+        'componentWillReceiveProps',
+        'shouldComponentUpdate',
+        'componentWillUpdate',
+        'componentDidUpdate',
+        'componentWillUnmount',
         "/^on.+$/",
         "/^get.+$/",
         "/^render.+$/",

From fe42d0bfa3290efbeb3360e0f0b1e8c69c3ca3fd Mon Sep 17 00:00:00 2001
From: Chris Portela <cp@cmp.is>
Date: Wed, 24 Jun 2015 16:02:21 -0400
Subject: [PATCH 0233/1591] Made single quotes to double quotes

---
 linters/.eslintrc | 34 +++++++++++++++++-----------------
 1 file changed, 17 insertions(+), 17 deletions(-)

diff --git a/linters/.eslintrc b/linters/.eslintrc
index c99a626e71..b904f3ec6e 100644
--- a/linters/.eslintrc
+++ b/linters/.eslintrc
@@ -190,23 +190,23 @@
     "react/wrap-multilines": 2,
     "react/sort-comp": [2, {
       "order": [
-        'displayName',
-        'propTypes',
-        'contextTypes',
-        'childContextTypes',
-        'mixins',
-        'statics',
-        'defaultProps',
-        'getDefaultProps',
-        'getInitialState',
-        'getChildContext',
-        'componentWillMount',
-        'componentDidMount',
-        'componentWillReceiveProps',
-        'shouldComponentUpdate',
-        'componentWillUpdate',
-        'componentDidUpdate',
-        'componentWillUnmount',
+        "displayName",
+        "propTypes",
+        "contextTypes",
+        "childContextTypes",
+        "mixins",
+        "statics",
+        "defaultProps",
+        "getDefaultProps",
+        "getInitialState",
+        "getChildContext",
+        "componentWillMount",
+        "componentDidMount",
+        "componentWillReceiveProps",
+        "shouldComponentUpdate",
+        "componentWillUpdate",
+        "componentDidUpdate",
+        "componentWillUnmount",
         "/^on.+$/",
         "/^get.+$/",
         "/^render.+$/",

From b020a431b0ffff92b37e3016cbd8fb7e9575fe77 Mon Sep 17 00:00:00 2001
From: Nikita Gusakov <dev@nkt.me>
Date: Thu, 25 Jun 2015 16:31:27 +0300
Subject: [PATCH 0234/1591] Added "prefer-const" rule

Added new ES6 rule, introduced in eslint 0.23.0
 > This rule is aimed to flag variables that are declared using let keyword, but never modified after initial assignment.
---
 linters/.eslintrc | 1 +
 1 file changed, 1 insertion(+)

diff --git a/linters/.eslintrc b/linters/.eslintrc
index b904f3ec6e..6ff0fa3b07 100644
--- a/linters/.eslintrc
+++ b/linters/.eslintrc
@@ -37,6 +37,7 @@
  * ES6
  */
     "no-var": 2,                     // http://eslint.org/docs/rules/no-var
+    "prefer-const": 2,               // http://eslint.org/docs/rules/prefer-const
 
 /**
  * Variables

From d2792f27cbb91905a55b943edef68667c840ee66 Mon Sep 17 00:00:00 2001
From: Horace Ko <horace@airbnb.com>
Date: Thu, 25 Jun 2015 11:54:22 -0700
Subject: [PATCH 0235/1591] Recommend using .jsx extension for React
 components, rather than .js.

---
 react/README.md | 22 +++++++++++-----------
 1 file changed, 11 insertions(+), 11 deletions(-)

diff --git a/react/README.md b/react/README.md
index 3ff7bb9f37..afcf1020ad 100644
--- a/react/README.md
+++ b/react/README.md
@@ -24,8 +24,8 @@
 
 ## Naming
 
-  - **Extensions**: Use `.js` extension for React components.
-  - **Filename**: Use PascalCase for filenames. E.g., `ReservationCard.js`.
+  - **Extensions**: Use `.jsx` extension for React components.
+  - **Filename**: Use PascalCase for filenames. E.g., `ReservationCard.jsx`.
   - **Reference Naming**: Use PascalCase for React components and camelCase for their instances:
     ```javascript
     // bad
@@ -41,13 +41,13 @@
     const reservationItem = <ReservationCard />;
     ```
 
-    **Component Naming**: Use the filename as the component name. So `ReservationCard.js` should have a reference name of ReservationCard. However, for root components of a directory, use index.js as the filename and use the directory name as the component name:
+    **Component Naming**: Use the filename as the component name. For example, `ReservationCard.jsx` should have a reference name of `ReservationCard`. However, for root components of a directory, use `index.jsx` as the filename and use the directory name as the component name:
     ```javascript
     // bad
-    const Footer = require('./Footer/Footer.js')
+    const Footer = require('./Footer/Footer.jsx')
 
     // bad
-    const Footer = require('./Footer/index.js')
+    const Footer = require('./Footer/index.jsx')
 
     // good
     const Footer = require('./Footer')
@@ -55,7 +55,7 @@
 
 
 ## Declaration
-  - Do not use displayName for naming components, instead name the component by reference.
+  - Do not use displayName for naming components. Instead, name the component by reference.
 
     ```javascript
     // bad
@@ -72,7 +72,7 @@
     ```
 
 ## Alignment
-  - Follow these alignment styles for js syntax
+  - Follow these alignment styles for JS syntax
 
     ```javascript
     // bad
@@ -98,7 +98,7 @@
     ```
 
 ## Quotes
-  - Always use double quotes (`"`) for JSX attributes, but single quotes for all other JavaScript.
+  - Always use double quotes (`"`) for JSX attributes, but single quotes for all other JS.
     ```javascript
     // bad
     <Foo bar='bar' />
@@ -197,7 +197,7 @@
     ```
 
 ## Methods
-  - Do not use underscore prefix for internal methods of a react component.
+  - Do not use underscore prefix for internal methods of a React component.
     ```javascript
     // bad
     React.createClass({
@@ -219,10 +219,10 @@
     ```
 
 ## Ordering
-  - Always follow the following order for methods in a react component:
+  - Always follow the following order for methods in a React component:
 
   1. displayName
-  2. mixins (as of React v0.13 mixins are deprecated)
+  2. mixins (as of React v0.13, mixins are deprecated)
   3. statics
   4. propTypes
   5. getDefaultProps

From ee899996b6b6e3b2d098ee71725aef9d8b368ec8 Mon Sep 17 00:00:00 2001
From: Tomek Wiszniewski <t.wiszniewski@gmail.com>
Date: Sat, 2 May 2015 00:14:17 +0200
Subject: [PATCH 0236/1591] Allow reserved words as keys in ES6 module context
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

`<script type="module">` and *node*/*iojs* code imply full support of ES5.

Code transpiled by *babel* is also perfecly safe:

```js
$ cat <<––– | babel
const superman = {
  default: { clark: 'kent' },
  private: true
};
–––
"use strict";

var superman = {
   "default": { clark: "kent" },
   "private": true
};
```
---
 README.md | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/README.md b/README.md
index 43244dc2d7..bbd8fbb1bc 100644
--- a/README.md
+++ b/README.md
@@ -140,7 +140,7 @@
     const item = {};
     ```
 
-  - [3.2](#3.2) <a name='3.2'></a> Don't use [reserved words](http://es5.github.io/#x7.6.1) as keys. It won't work in IE8. [More info](https://github.com/airbnb/javascript/issues/61).
+  - [3.2](#3.2) <a name='3.2'></a> If your code will be executed in browsers in script context, don't use [reserved words](http://es5.github.io/#x7.6.1) as keys. It won't work in IE8. [More info](https://github.com/airbnb/javascript/issues/61). It’s OK to use them in ES6 modules and server-side code.
 
     ```javascript
     // bad

From ae84fbe0076119dbcdaac3d400510b4e4c2e9eb8 Mon Sep 17 00:00:00 2001
From: Mathieu Darse <mattdarse@gmail.com>
Date: Tue, 30 Jun 2015 12:40:05 +0200
Subject: [PATCH 0237/1591] Fix typo

---
 README.md | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/README.md b/README.md
index bbd8fbb1bc..4c00b0690a 100644
--- a/README.md
+++ b/README.md
@@ -1047,7 +1047,7 @@
 ## Comparison Operators & Equality
 
   - [15.1](#15.1) <a name='15.1'></a> Use `===` and `!==` over `==` and `!=`.
-  - [15.2](#15.2) <a name='15.2'></a> Conditional statements such as the `if` statement evaulate their expression using coercion with the `ToBoolean` abstract method and always follow these simple rules:
+  - [15.2](#15.2) <a name='15.2'></a> Conditional statements such as the `if` statement evaluate their expression using coercion with the `ToBoolean` abstract method and always follow these simple rules:
 
     + **Objects** evaluate to **true**
     + **Undefined** evaluates to **false**

From 0627472f55c406f87c534a4b9f515a416b496c1d Mon Sep 17 00:00:00 2001
From: Rodolfo Yabut <rodolfoyabut@gmail.com>
Date: Wed, 1 Jul 2015 06:17:56 -0700
Subject: [PATCH 0238/1591] Add Back to Top link

---
 README.md | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/README.md b/README.md
index 4c00b0690a..52ba41933e 100644
--- a/README.md
+++ b/README.md
@@ -2077,6 +2077,8 @@
   - **Zillow**: [zillow/javascript](https://github.com/zillow/javascript)
   - **ZocDoc**: [ZocDoc/javascript](https://github.com/ZocDoc/javascript)
 
+  **[⬆ back to top](#table-of-contents)**
+
 ## Translation
 
   This style guide is also available in other languages:

From 4a19aa8575e45e838f63097e0fed3f4e056a0d29 Mon Sep 17 00:00:00 2001
From: Rodolfo Yabut <rodolfoyabut@gmail.com>
Date: Wed, 1 Jul 2015 06:20:05 -0700
Subject: [PATCH 0239/1591] Fix Back to Top link spacing

---
 README.md | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/README.md b/README.md
index 52ba41933e..9206dfeb3c 100644
--- a/README.md
+++ b/README.md
@@ -2077,7 +2077,7 @@
   - **Zillow**: [zillow/javascript](https://github.com/zillow/javascript)
   - **ZocDoc**: [ZocDoc/javascript](https://github.com/ZocDoc/javascript)
 
-  **[⬆ back to top](#table-of-contents)**
+**[⬆ back to top](#table-of-contents)**
 
 ## Translation
 

From 592223611f4582194512fef7c54e6282f8cd1b39 Mon Sep 17 00:00:00 2001
From: Dimitar Danailov <dimityr.danailov@gmail.com>
Date: Wed, 1 Jul 2015 16:22:55 +0300
Subject: [PATCH 0240/1591] Change style guide of point 23.3

---
 README.md | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/README.md b/README.md
index 4c00b0690a..5df648c09e 100644
--- a/README.md
+++ b/README.md
@@ -1761,7 +1761,7 @@
     dragon.setAge(25);
     ```
 
-  - [23.3](#23.3) <a name='23.3'></a> If the property is a boolean, use isVal() or hasVal().
+  - [23.3](#23.3) <a name='23.3'></a> If the property is a `boolean`, use `isVal()` or `hasVal()`.
 
     ```javascript
     // bad

From 7b64a9dc1c0e9b2b0a1fa127127005f1a858c180 Mon Sep 17 00:00:00 2001
From: Francisco Ramini <framini@gmail.com>
Date: Wed, 1 Jul 2015 17:27:20 -0300
Subject: [PATCH 0241/1591] fix doc url and little typo

---
 es5/README.md     | 2 +-
 linters/.eslintrc | 2 +-
 2 files changed, 2 insertions(+), 2 deletions(-)

diff --git a/es5/README.md b/es5/README.md
index b2b99f0947..08db3ee6ce 100644
--- a/es5/README.md
+++ b/es5/README.md
@@ -572,7 +572,7 @@
 ## Comparison Operators & Equality
 
   - Use `===` and `!==` over `==` and `!=`.
-  - Conditional statements such as the `if` statement evaulate their expression using coercion with the `ToBoolean` abstract method and always follow these simple rules:
+  - Conditional statements such as the `if` statement evaluate their expression using coercion with the `ToBoolean` abstract method and always follow these simple rules:
 
     + **Objects** evaluate to **true**
     + **Undefined** evaluates to **false**
diff --git a/linters/.eslintrc b/linters/.eslintrc
index 93b84a54fe..a795406bac 100644
--- a/linters/.eslintrc
+++ b/linters/.eslintrc
@@ -121,7 +121,7 @@
 /**
  * Style
  */
-    "indent": [2, 2],                // http://eslint.org/docs/rules/
+    "indent": [2, 2],                // http://eslint.org/docs/rules/indent
     "brace-style": [2,               // http://eslint.org/docs/rules/brace-style
       "1tbs", {
       "allowSingleLine": true

From 383b6a67cf9881ad7404cf63c2c61aa0eeda8827 Mon Sep 17 00:00:00 2001
From: Marco Bettiolo <marco@bettiolo.it>
Date: Thu, 2 Jul 2015 15:55:04 +0100
Subject: [PATCH 0242/1591] Added links to JSX plugin's documentation and some
 links to `env` documentation and  plugins repositories

---
 linters/.eslintrc | 47 +++++++++++++++++++++++------------------------
 1 file changed, 23 insertions(+), 24 deletions(-)

diff --git a/linters/.eslintrc b/linters/.eslintrc
index 0ee7a48a42..de8255c4fc 100644
--- a/linters/.eslintrc
+++ b/linters/.eslintrc
@@ -1,11 +1,11 @@
 {
-  "parser": "babel-eslint",
+  "parser": "babel-eslint",          // https://github.com/babel/babel-eslint
   "plugins": [
-    "react"
+    "react"                          // https://github.com/yannickcr/eslint-plugin-react
   ],
-  "env": {
-    "browser": true,
-    "node": true
+  "env": {                           // http://eslint.org/docs/user-guide/configuring.html#specifying-environments
+    "browser": true,                 // browser global variables
+    "node": true                     // Node.js global variables and Node.js-specific rules
   },
   "ecmaFeatures": {
     "arrowFunctions": true,
@@ -30,8 +30,7 @@
  * Strict mode
  */
     // babel inserts "use strict"; for us
-    // http://eslint.org/docs/rules/strict
-    "strict": [2, "never"],
+    "strict": [2, "never"],          // http://eslint.org/docs/rules/strict
 
 /**
  * ES6
@@ -173,23 +172,23 @@
 /**
  * JSX style
  */
-    "react/display-name": 0,
-    "react/jsx-boolean-value": 2,
-    "react/jsx-quotes": [2, "double"],
-    "react/jsx-no-undef": 2,
-    "react/jsx-sort-props": 0,
-    "react/jsx-sort-prop-types": 0,
-    "react/jsx-uses-react": 2,
-    "react/jsx-uses-vars": 2,
-    "react/no-did-mount-set-state": [2, "allow-in-func"],
-    "react/no-did-update-set-state": 2,
-    "react/no-multi-comp": 2,
-    "react/no-unknown-property": 2,
-    "react/prop-types": 2,
-    "react/react-in-jsx-scope": 2,
-    "react/self-closing-comp": 2,
-    "react/wrap-multilines": 2,
-    "react/sort-comp": [2, {
+    "react/display-name": 0,         // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/display-name.md
+    "react/jsx-boolean-value": 2,    // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/jsx-boolean-value.md
+    "react/jsx-quotes": [2, "double"], // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/jsx-quotes.md
+    "react/jsx-no-undef": 2,         // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/jsx-no-undef.md
+    "react/jsx-sort-props": 0,       // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/jsx-sort-props.md
+    "react/jsx-sort-prop-types": 0,  // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/jsx-sort-prop-types.md
+    "react/jsx-uses-react": 2,       // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/jsx-uses-react.md
+    "react/jsx-uses-vars": 2,        // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/jsx-uses-vars.md
+    "react/no-did-mount-set-state": [2, "allow-in-func"], // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/no-did-mount-set-state.md
+    "react/no-did-update-set-state": 2, // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/no-did-update-set-state.md
+    "react/no-multi-comp": 2,        // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/no-multi-comp.md
+    "react/no-unknown-property": 2,  // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/no-unknown-property.md
+    "react/prop-types": 2,           // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/prop-types.md
+    "react/react-in-jsx-scope": 2,   // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/react-in-jsx-scope.md
+    "react/self-closing-comp": 2,    // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/self-closing-comp.md
+    "react/wrap-multilines": 2,      // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/wrap-multilines.md
+    "react/sort-comp": [2, {         // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/sort-comp.md
       "order": [
         "displayName",
         "propTypes",

From a513163d466a9c72825898108cc655874f7afb10 Mon Sep 17 00:00:00 2001
From: Ryan McBride <mcbrideryan89@gmail.com>
Date: Fri, 3 Jul 2015 19:50:52 -0700
Subject: [PATCH 0243/1591] Update to include warning against using eval.

Added 6.5 to strings section of Readme in order to explicitly warn against using eval(). Listed in ticket #118.
---
 README.md | 1 +
 1 file changed, 1 insertion(+)

diff --git a/README.md b/README.md
index 38aefa5572..c41a42a015 100644
--- a/README.md
+++ b/README.md
@@ -443,6 +443,7 @@
       return `How are you, ${name}?`;
     }
     ```
+  - [6.5](#6.5) <a name='6.5'></a> Never use eval() on a string, it opens too many vulnerabilities.
 
 **[⬆ back to top](#table-of-contents)**
 

From 27d388d9469128c5ed44164a100d92fd25aa5c98 Mon Sep 17 00:00:00 2001
From: Ryan McBride <mcbrideryan89@gmail.com>
Date: Sat, 4 Jul 2015 10:19:14 -0700
Subject: [PATCH 0244/1591] Update to warn against Function constructor

Added section 7.9 to warn against using the Function creator, as it opens similar vulnerabilities as eval.
Originally suggested in pull request #395.

No other lines were edited or removed.
---
 README.md | 8 ++++++++
 1 file changed, 8 insertions(+)

diff --git a/README.md b/README.md
index 38aefa5572..f75a3020c9 100644
--- a/README.md
+++ b/README.md
@@ -567,6 +567,14 @@
   count();  // 3
   ```
 
+- [7.9](#7.9) <a name='7.9'></a> Never use the Function constructor to create a new function.
+
+  > Why? Creating a function in this way evaluates a string similarly to eval(), which opens vulnerabilities.
+
+  ```javascript
+  // bad
+  var add = new Function("a", "b", "return a + b");
+  ```
 
 **[⬆ back to top](#table-of-contents)**
 

From 4eea06235bec6698efceb431ba00b0a7927af69d Mon Sep 17 00:00:00 2001
From: Ryan McBride <mcbrideryan89@gmail.com>
Date: Sat, 4 Jul 2015 10:36:18 -0700
Subject: [PATCH 0245/1591] Fixed typo in 9.4

Line read `contructor(options = {}) {`

Edited to `constructor(options = {}) {`

No other lines were edited or changed.
---
 README.md | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/README.md b/README.md
index 38aefa5572..122e9ecde6 100644
--- a/README.md
+++ b/README.md
@@ -704,7 +704,7 @@
 
     ```javascript
     class Jedi {
-      contructor(options = {}) {
+      constructor(options = {}) {
         this.name = options.name || 'no name';
       }
 

From 13fe13bb3729cebb4c41606bda4b50050089cdb6 Mon Sep 17 00:00:00 2001
From: Ryan McBride <mcbrideryan89@gmail.com>
Date: Sat, 4 Jul 2015 10:48:44 -0700
Subject: [PATCH 0246/1591] Fixed typo in 13.4

A comment in the example of section 13.4 had 'unnecessary' spelled as 'unnessary'
---
 README.md | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/README.md b/README.md
index 122e9ecde6..6899af5b04 100644
--- a/README.md
+++ b/README.md
@@ -919,7 +919,7 @@
       return name;
     }
 
-    // bad - unnessary function call
+    // bad - unnecessary function call
     function(hasName) {
       const name = getName();
 

From 23b3f4b8f9b92e0430968c0d43574af76b8c2f8f Mon Sep 17 00:00:00 2001
From: Ryan McBride <mcbrideryan89@gmail.com>
Date: Sat, 4 Jul 2015 10:56:16 -0700
Subject: [PATCH 0247/1591] Fixed typo in 19.2

'modern' was spelled as 'mordern' in both the good and bad examples of section 19.2
---
 README.md | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/README.md b/README.md
index 122e9ecde6..cce1b04a7e 100644
--- a/README.md
+++ b/README.md
@@ -1466,14 +1466,14 @@
          firstName: 'Florence',
     -    lastName: 'Nightingale'
     +    lastName: 'Nightingale',
-    +    inventorOf: ['coxcomb graph', 'mordern nursing']
+    +    inventorOf: ['coxcomb graph', 'modern nursing']
     }
 
     // good - git diff with trailing comma
     const hero = {
          firstName: 'Florence',
          lastName: 'Nightingale',
-    +    inventorOf: ['coxcomb chart', 'mordern nursing'],
+    +    inventorOf: ['coxcomb chart', 'modern nursing'],
     }
 
     // bad

From 81f5d8d489780f8f1d5bc098d1b71b7b8a353f92 Mon Sep 17 00:00:00 2001
From: Jon Chretien <jchretien@spotify.com>
Date: Mon, 6 Jul 2015 10:56:06 -0400
Subject: [PATCH 0248/1591] fixed typos & removed dead link

---
 README.md     | 6 ++----
 es5/README.md | 8 +++-----
 2 files changed, 5 insertions(+), 9 deletions(-)

diff --git a/README.md b/README.md
index 682b6f3425..38af769ad6 100644
--- a/README.md
+++ b/README.md
@@ -1963,7 +1963,7 @@
     + [JSHint](http://www.jshint.com/) - [Airbnb Style .jshintrc](https://github.com/airbnb/javascript/blob/master/linters/jshintrc)
     + [JSCS](https://github.com/jscs-dev/node-jscs) - [Airbnb Style Preset](https://github.com/jscs-dev/node-jscs/blob/master/presets/airbnb.json)
 
-**Other Styleguides**
+**Other Style Guides**
 
   - [Google JavaScript Style Guide](http://google-styleguide.googlecode.com/svn/trunk/javascriptguide.xml)
   - [jQuery Core Style Guidelines](http://docs.jquery.com/JQuery_Core_Style_Guidelines)
@@ -2030,7 +2030,6 @@
   - **Aan Zee**: [AanZee/javascript](https://github.com/AanZee/javascript)
   - **Adult Swim**: [adult-swim/javascript](https://github.com/adult-swim/javascript)
   - **Airbnb**: [airbnb/javascript](https://github.com/airbnb/javascript)
-  - **American Insitutes for Research**: [AIRAST/javascript](https://github.com/AIRAST/javascript)
   - **Apartmint**: [apartmint/javascript](https://github.com/apartmint/javascript)
   - **Avalara**: [avalara/javascript](https://github.com/avalara/javascript)
   - **Billabong**: [billabong/javascript](https://github.com/billabong/javascript)
@@ -2042,7 +2041,7 @@
   - **Expensify** [Expensify/Style-Guide](https://github.com/Expensify/Style-Guide/blob/master/javascript.md)
   - **Flexberry**: [Flexberry/javascript-style-guide](https://github.com/Flexberry/javascript-style-guide)
   - **Gawker Media**: [gawkermedia/javascript](https://github.com/gawkermedia/javascript)
-  - **GeneralElectric**: [GeneralElectric/javascript](https://github.com/GeneralElectric/javascript)
+  - **General Electric**: [GeneralElectric/javascript](https://github.com/GeneralElectric/javascript)
   - **GoodData**: [gooddata/gdc-js-style](https://github.com/gooddata/gdc-js-style)
   - **Grooveshark**: [grooveshark/javascript](https://github.com/grooveshark/javascript)
   - **How About We**: [howaboutwe/javascript](https://github.com/howaboutwe/javascript)
@@ -2071,7 +2070,6 @@
   - **Target**: [target/javascript](https://github.com/target/javascript)
   - **TheLadders**: [TheLadders/javascript](https://github.com/TheLadders/javascript)
   - **T4R Technology**: [T4R-Technology/javascript](https://github.com/T4R-Technology/javascript)
-  - **Userify**: [userify/javascript](https://github.com/userify/javascript)
   - **VoxFeed**: [VoxFeed/javascript-style-guide](https://github.com/VoxFeed/javascript-style-guide)
   - **Weggo**: [Weggo/javascript](https://github.com/Weggo/javascript)
   - **Zillow**: [zillow/javascript](https://github.com/zillow/javascript)
diff --git a/es5/README.md b/es5/README.md
index 08db3ee6ce..fcab603590 100644
--- a/es5/README.md
+++ b/es5/README.md
@@ -448,7 +448,7 @@
       return name;
     }
 
-    // bad - unnessary function call
+    // bad - unnecessary function call
     function() {
       var name = getName();
 
@@ -1565,7 +1565,7 @@
     + [JSHint](http://www.jshint.com/) - [Airbnb Style .jshintrc](https://github.com/airbnb/javascript/blob/master/linters/jshintrc)
     + [JSCS](https://github.com/jscs-dev/node-jscs) - [Airbnb Style Preset](https://github.com/jscs-dev/node-jscs/blob/master/presets/airbnb.json)
 
-**Other Styleguides**
+**Other Style Guides**
 
   - [Google JavaScript Style Guide](http://google-styleguide.googlecode.com/svn/trunk/javascriptguide.xml)
   - [jQuery Core Style Guidelines](http://docs.jquery.com/JQuery_Core_Style_Guidelines)
@@ -1634,7 +1634,6 @@
   - **Aan Zee**: [AanZee/javascript](https://github.com/AanZee/javascript)
   - **Adult Swim**: [adult-swim/javascript](https://github.com/adult-swim/javascript)
   - **Airbnb**: [airbnb/javascript](https://github.com/airbnb/javascript)
-  - **American Insitutes for Research**: [AIRAST/javascript](https://github.com/AIRAST/javascript)
   - **Apartmint**: [apartmint/javascript](https://github.com/apartmint/javascript)
   - **Avalara**: [avalara/javascript](https://github.com/avalara/javascript)
   - **Billabong**: [billabong/javascript](https://github.com/billabong/javascript)
@@ -1645,7 +1644,7 @@
   - **ExactTarget**: [ExactTarget/javascript](https://github.com/ExactTarget/javascript)
   - **Flexberry**: [Flexberry/javascript-style-guide](https://github.com/Flexberry/javascript-style-guide)
   - **Gawker Media**: [gawkermedia/javascript](https://github.com/gawkermedia/javascript)
-  - **GeneralElectric**: [GeneralElectric/javascript](https://github.com/GeneralElectric/javascript)
+  - **General Electric**: [GeneralElectric/javascript](https://github.com/GeneralElectric/javascript)
   - **GoodData**: [gooddata/gdc-js-style](https://github.com/gooddata/gdc-js-style)
   - **Grooveshark**: [grooveshark/javascript](https://github.com/grooveshark/javascript)
   - **How About We**: [howaboutwe/javascript](https://github.com/howaboutwe/javascript)
@@ -1675,7 +1674,6 @@
   - **Target**: [target/javascript](https://github.com/target/javascript)
   - **TheLadders**: [TheLadders/javascript](https://github.com/TheLadders/javascript)
   - **T4R Technology**: [T4R-Technology/javascript](https://github.com/T4R-Technology/javascript)
-  - **Userify**: [userify/javascript](https://github.com/userify/javascript)
   - **VoxFeed**: [VoxFeed/javascript-style-guide](https://github.com/VoxFeed/javascript-style-guide)
   - **Weggo**: [Weggo/javascript](https://github.com/Weggo/javascript)
   - **Zillow**: [zillow/javascript](https://github.com/zillow/javascript)

From eba9dbdeac3df91b7419d187835eee62fb0b5ab9 Mon Sep 17 00:00:00 2001
From: Harrison Shoff <hi@hshoff.com>
Date: Mon, 6 Jul 2015 09:17:11 -0700
Subject: [PATCH 0249/1591] [strings] 80 char => 100 char

---
 README.md     | 2 +-
 es5/README.md | 2 +-
 2 files changed, 2 insertions(+), 2 deletions(-)

diff --git a/README.md b/README.md
index 38af769ad6..aa3d7878b7 100644
--- a/README.md
+++ b/README.md
@@ -403,7 +403,7 @@
     const name = 'Capt. Janeway';
     ```
 
-  - [6.2](#6.2) <a name='6.2'></a> Strings longer than 80 characters should be written across multiple lines using string concatenation.
+  - [6.2](#6.2) <a name='6.2'></a> Strings longer than 100 characters should be written across multiple lines using string concatenation.
   - [6.3](#6.3) <a name='6.3'></a> Note: If overused, long strings with concatenation could impact performance. [jsPerf](http://jsperf.com/ya-string-concat) & [Discussion](https://github.com/airbnb/javascript/issues/40).
 
     ```javascript
diff --git a/es5/README.md b/es5/README.md
index fcab603590..f961d8e0d6 100644
--- a/es5/README.md
+++ b/es5/README.md
@@ -194,7 +194,7 @@
     var fullName = 'Bob ' + this.lastName;
     ```
 
-  - Strings longer than 80 characters should be written across multiple lines using string concatenation.
+  - Strings longer than 100 characters should be written across multiple lines using string concatenation.
   - Note: If overused, long strings with concatenation could impact performance. [jsPerf](http://jsperf.com/ya-string-concat) & [Discussion](https://github.com/airbnb/javascript/issues/40).
 
     ```javascript

From 8370c039029100d7ba1076575c0ac3c9362d450d Mon Sep 17 00:00:00 2001
From: Frederick Silva <frederick.silva@ciss.com.br>
Date: Mon, 6 Jul 2015 15:13:47 -0300
Subject: [PATCH 0250/1591]  fixed additional trailing comma - close #393

---
 linters/.eslintrc | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/linters/.eslintrc b/linters/.eslintrc
index de8255c4fc..346e3b4d2e 100644
--- a/linters/.eslintrc
+++ b/linters/.eslintrc
@@ -52,7 +52,7 @@
 /**
  * Possible errors
  */
-    "comma-dangle": [2, "never"],    // http://eslint.org/docs/rules/comma-dangle
+    "comma-dangle": [2, "always-multiline"],    // http://eslint.org/docs/rules/comma-dangle
     "no-cond-assign": [2, "always"], // http://eslint.org/docs/rules/no-cond-assign
     "no-console": 1,                 // http://eslint.org/docs/rules/no-console
     "no-debugger": 1,                // http://eslint.org/docs/rules/no-debugger

From 89d75d9f708f640b0d99ebdd640d1a9627d9ce55 Mon Sep 17 00:00:00 2001
From: benjaminapetersen <admin@benjaminapetersen.me>
Date: Tue, 7 Jul 2015 11:56:58 -0400
Subject: [PATCH 0251/1591] Plural Jedi is Jedi.  Sorry, had to do it.  :)

---
 README.md | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/README.md b/README.md
index 38af769ad6..75753b57df 100644
--- a/README.md
+++ b/README.md
@@ -254,7 +254,7 @@
     // bad
     const obj = {
       episodeOne: 1,
-      twoJedisWalkIntoACantina: 2,
+      twoJediWalkIntoACantina: 2,
       lukeSkywalker,
       episodeThree: 3,
       mayTheFourth: 4,
@@ -266,7 +266,7 @@
       lukeSkywalker,
       anakinSkywalker,
       episodeOne: 1,
-      twoJedisWalkIntoACantina: 2,
+      twoJediWalkIntoACantina: 2,
       episodeThree: 3,
       mayTheFourth: 4,
     };

From 232054a26f960927544c9f7d16cc099767995b9a Mon Sep 17 00:00:00 2001
From: Deniz Ozger <denizozger@gmail.com>
Date: Wed, 8 Jul 2015 10:23:16 +0100
Subject: [PATCH 0252/1591] Fixed a typo on README

---
 linters/README.md | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/linters/README.md b/linters/README.md
index 6da3dcd984..8fa6d19ad8 100644
--- a/linters/README.md
+++ b/linters/README.md
@@ -1,6 +1,6 @@
 ## `.eslintrc`
 
-Our `.eslintrc` requires the following NPM packages packages:
+Our `.eslintrc` requires the following NPM packages:
 
 - `eslint`
 - `babel-eslint`

From a67ee27d09ef80f3e79f8489068a9d87ef6634f1 Mon Sep 17 00:00:00 2001
From: Bram Schulting <bramschulting@me.com>
Date: Thu, 9 Jul 2015 17:30:05 +0200
Subject: [PATCH 0253/1591] Add Blendle to list of organizations

---
 README.md | 1 +
 1 file changed, 1 insertion(+)

diff --git a/README.md b/README.md
index 75753b57df..683362e881 100644
--- a/README.md
+++ b/README.md
@@ -2033,6 +2033,7 @@
   - **Apartmint**: [apartmint/javascript](https://github.com/apartmint/javascript)
   - **Avalara**: [avalara/javascript](https://github.com/avalara/javascript)
   - **Billabong**: [billabong/javascript](https://github.com/billabong/javascript)
+  - **Blendle**: [blendle/javascript](https://github.com/blendle/javascript)
   - **Compass Learning**: [compasslearning/javascript-style-guide](https://github.com/compasslearning/javascript-style-guide)
   - **DailyMotion**: [dailymotion/javascript](https://github.com/dailymotion/javascript)
   - **Digitpaint** [digitpaint/javascript](https://github.com/digitpaint/javascript)

From f1d524369113e40e9f023c5e17a6f6f8baf7861d Mon Sep 17 00:00:00 2001
From: Ryan McBride <mcbrideryan89@gmail.com>
Date: Tue, 14 Jul 2015 15:26:17 -0700
Subject: [PATCH 0254/1591] changed to single quotes to match style

---
 README.md | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/README.md b/README.md
index f75a3020c9..f014e19218 100644
--- a/README.md
+++ b/README.md
@@ -573,7 +573,7 @@
 
   ```javascript
   // bad
-  var add = new Function("a", "b", "return a + b");
+  var add = new Function('a', 'b', 'return a + b');
   ```
 
 **[⬆ back to top](#table-of-contents)**

From a048ebf22ec02415d2ce3dc6baf761afc3dc093d Mon Sep 17 00:00:00 2001
From: Ryan McBride <mcbrideryan89@gmail.com>
Date: Tue, 14 Jul 2015 20:17:00 -0700
Subject: [PATCH 0255/1591] Added info on other implementation of Function
 constructor

Added per comment in PR #396
---
 README.md | 3 +++
 1 file changed, 3 insertions(+)

diff --git a/README.md b/README.md
index f014e19218..9d9dccdc6a 100644
--- a/README.md
+++ b/README.md
@@ -574,6 +574,9 @@
   ```javascript
   // bad
   var add = new Function('a', 'b', 'return a + b');
+  
+  // still bad
+  var subtract = Function('a', 'b', 'return a - b');
   ```
 
 **[⬆ back to top](#table-of-contents)**

From 77c586be0410639b19fd4f9e071c6a58087fc0d6 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Rub=C3=A9n=20Sospedra?= <sospedra.r@gmail.com>
Date: Wed, 15 Jul 2015 19:13:05 +0200
Subject: [PATCH 0256/1591] Here's some of love :) Nice document we're really
 happy to implement this

---
 README.md | 1 +
 1 file changed, 1 insertion(+)

diff --git a/README.md b/README.md
index 683362e881..5ffc6c9b06 100644
--- a/README.md
+++ b/README.md
@@ -2046,6 +2046,7 @@
   - **GoodData**: [gooddata/gdc-js-style](https://github.com/gooddata/gdc-js-style)
   - **Grooveshark**: [grooveshark/javascript](https://github.com/grooveshark/javascript)
   - **How About We**: [howaboutwe/javascript](https://github.com/howaboutwe/javascript)
+  - **Huballin**: [huballin/javascript](https://github.com/huballin/javascript)
   - **InfoJobs**: [InfoJobs/JavaScript-Style-Guide](https://github.com/InfoJobs/JavaScript-Style-Guide)
   - **Intent Media**: [intentmedia/javascript](https://github.com/intentmedia/javascript)
   - **Jam3**: [Jam3/Javascript-Code-Conventions](https://github.com/Jam3/Javascript-Code-Conventions)

From 2ee0ff315941bf948a41e364162c666e18c6b2f5 Mon Sep 17 00:00:00 2001
From: Eugene <eistrati@users.noreply.github.com>
Date: Wed, 15 Jul 2015 15:58:43 -0400
Subject: [PATCH 0257/1591] Adding MitocGroup fork

---
 README.md | 1 +
 1 file changed, 1 insertion(+)

diff --git a/README.md b/README.md
index 5ffc6c9b06..d2b9ea3216 100644
--- a/README.md
+++ b/README.md
@@ -2054,6 +2054,7 @@
   - **Kinetica Solutions**: [kinetica/javascript](https://github.com/kinetica/javascript)
   - **Mighty Spring**: [mightyspring/javascript](https://github.com/mightyspring/javascript)
   - **MinnPost**: [MinnPost/javascript](https://github.com/MinnPost/javascript)
+  - **MitocGroup**: [MitocGroup/javascript](https://github.com/MitocGroup/javascript)
   - **ModCloth**: [modcloth/javascript](https://github.com/modcloth/javascript)
   - **Money Advice Service**: [moneyadviceservice/javascript](https://github.com/moneyadviceservice/javascript)
   - **Muber**: [muber/javascript](https://github.com/muber/javascript)

From ac8ff6539f2e61936fe8e72a13c187b9426e7189 Mon Sep 17 00:00:00 2001
From: Vladimir Starkov <iamstarkov@users.noreply.github.com>
Date: Wed, 15 Jul 2015 17:58:37 +0200
Subject: [PATCH 0258/1591] add constructor

See details here http://babeljs.io/blog/2015/06/07/react-on-es6-plus/
---
 linters/.eslintrc | 1 +
 1 file changed, 1 insertion(+)

diff --git a/linters/.eslintrc b/linters/.eslintrc
index 346e3b4d2e..29e0ab3eb2 100644
--- a/linters/.eslintrc
+++ b/linters/.eslintrc
@@ -197,6 +197,7 @@
         "mixins",
         "statics",
         "defaultProps",
+        "constructor",
         "getDefaultProps",
         "getInitialState",
         "getChildContext",

From 4b70374b9c19ee87426f8e028baa88283e4cad22 Mon Sep 17 00:00:00 2001
From: Josh Perez <josh@goatslacker.com>
Date: Thu, 16 Jul 2015 10:42:26 -0700
Subject: [PATCH 0259/1591] Update React style guide with new rules

This formalizes the rules that we've been following for class extends React.Component and also updates our ordering with whats in the eslintrc file.
---
 react/README.md | 117 +++++++++++++++++++++++++++++++++++++++---------
 1 file changed, 95 insertions(+), 22 deletions(-)

diff --git a/react/README.md b/react/README.md
index afcf1020ad..3c01981f8c 100644
--- a/react/README.md
+++ b/react/README.md
@@ -20,7 +20,27 @@
 
   - Only include one React component per file.
   - Always use JSX syntax.
-  - Do not use `React.createElement` unless you're initializing the app from a file that does not transform JSX.
+  - Do not use `React.createElement` unless you're initializing the app from a file that is not JSX.
+
+## Class vs React.createClass
+
+  - Use class extends React.Component unless you have a very good reason to use mixins.
+
+  ```javascript
+  // bad
+  const Listing = React.createClass({
+    render() {
+      return <div />;
+    }
+  });
+  
+  // good
+  class Listing extends React.Component {
+    render() {
+      return <div />;
+    }
+  }
+  ```
 
 ## Naming
 
@@ -65,9 +85,9 @@
     });
 
     // good
-    const ReservationCard = React.createClass({
-      // stuff goes here
-    });
+    class ReservationCard extends React.Component {
+    }
+ 
     export default ReservationCard;
     ```
 
@@ -209,7 +229,7 @@
     });
 
     // good
-    React.createClass({
+    class extends React.Component {
       onClickSubmit() {
         // do stuff
       }
@@ -219,24 +239,77 @@
     ```
 
 ## Ordering
-  - Always follow the following order for methods in a React component:
+
+  - Ordering for class extends React.Component:
+  
+  1. constructor
+  1. optional static methods
+  1. getChildContext
+  1. componentWillMount
+  1. componentDidMount
+  1. componentWillReceiveProps
+  1. shouldComponentUpdate
+  1. componentWillUpdate
+  1. componentDidUpdate
+  1. componentWillUnmount
+  1. *clickHandlers or eventHandlers* like onClickSubmit() or onChangeDescription()
+  1. *getter methods for render* like getSelectReason() or getFooterContent()
+  1. *Optional render methods* like renderNavigation() or renderProfilePicture()
+  1. render
+
+  - How to define propTypes, defaultProps, contextTypes, etc...  
+
+  ```javascript
+  import React, { Component, PropTypes } from 'react';
+  
+  const propTypes = {
+    id: PropTypes.number.isRequired,
+    url: PropTypes.string.isRequired,
+    text: PropTypes.string,
+  };
+  
+  const defaultProps = {
+    text: 'Hello World',
+  };
+  
+  class Link extends Component {
+    static methodsAreOk() {
+      return true;
+    }
+  
+    render() {
+      return <a href={this.props.url} data-id={this.props.id}>{this.props.text}</a>
+    }
+  }
+  
+  Link.propTypes = propTypes;
+  Link.defaultProps = defaultProps;
+  
+  export default Link;
+  ```
+
+  - Ordering for React.createClass:
 
   1. displayName
-  2. mixins (as of React v0.13, mixins are deprecated)
-  3. statics
-  4. propTypes
-  5. getDefaultProps
-  6. getInitialState
-  7. componentWillMount
-  8. componentDidMount
-  9. componentWillReceiveProps
-  10. shouldComponentUpdate
-  11. componentWillUpdate
-  12. componentDidUpdate
-  13. componentWillUnmount
-  14. *clickHandlers or eventHandlers* like onClickSubmit() or onChangeDescription()
-  15. *getter methods for render* like getSelectReason() or getFooterContent()
-  16. *Optional render methods* like renderNavigation() or renderProfilePicture()
-  17. render
+  1. propTypes
+  1. contextTypes
+  1. childContextTypes
+  1. mixins
+  1. statics
+  1. defaultProps
+  1. getDefaultProps
+  1. getInitialState
+  1. getChildContext
+  1. componentWillMount
+  1. componentDidMount
+  1. componentWillReceiveProps
+  1. shouldComponentUpdate
+  1. componentWillUpdate
+  1. componentDidUpdate
+  1. componentWillUnmount
+  1. *clickHandlers or eventHandlers* like onClickSubmit() or onChangeDescription()
+  1. *getter methods for render* like getSelectReason() or getFooterContent()
+  1. *Optional render methods* like renderNavigation() or renderProfilePicture()
+  1. render
 
 **[⬆ back to top](#table-of-contents)**

From 2af7a5607edd4e33da633139f1239b744c81b3cd Mon Sep 17 00:00:00 2001
From: Pascal Duez <pascal.duez@gandi.net>
Date: Mon, 20 Jul 2015 12:05:58 +0200
Subject: [PATCH 0260/1591] Update deprecatd rules - no-wrap-func ->
 no-extra-parens - spaced-line-comment -> spaced-comment

---
 linters/.eslintrc | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/linters/.eslintrc b/linters/.eslintrc
index 346e3b4d2e..e37d18cef1 100644
--- a/linters/.eslintrc
+++ b/linters/.eslintrc
@@ -153,7 +153,7 @@
     "no-new-object": 2,              // http://eslint.org/docs/rules/no-new-object
     "no-spaced-func": 2,             // http://eslint.org/docs/rules/no-spaced-func
     "no-trailing-spaces": 2,         // http://eslint.org/docs/rules/no-trailing-spaces
-    "no-wrap-func": 2,               // http://eslint.org/docs/rules/no-wrap-func
+    "no-extra-parens": [2, "functions"], // http://eslint.org/docs/rules/no-extra-parens
     "no-underscore-dangle": 0,       // http://eslint.org/docs/rules/no-underscore-dangle
     "one-var": [2, "never"],         // http://eslint.org/docs/rules/one-var
     "padded-blocks": [2, "never"],   // http://eslint.org/docs/rules/padded-blocks
@@ -167,7 +167,7 @@
     "space-before-function-paren": [2, "never"], // http://eslint.org/docs/rules/space-before-function-paren
     "space-infix-ops": 2,            // http://eslint.org/docs/rules/space-infix-ops
     "space-return-throw-case": 2,    // http://eslint.org/docs/rules/space-return-throw-case
-    "spaced-line-comment": 2,        // http://eslint.org/docs/rules/spaced-line-comment
+    "spaced-comment": 2,             // http://eslint.org/docs/rules/spaced-comment
 
 /**
  * JSX style

From fcbaa4dd57fa315f437a5670fe1e46d4d2583cca Mon Sep 17 00:00:00 2001
From: Varayut Lerdkanlayanawat <l.varayut@gmail.com>
Date: Wed, 22 Jul 2015 10:23:07 +0700
Subject: [PATCH 0261/1591] Replace Annotated ECMAScript 5.1 with Standard
 ECMA-262 for ES6

---
 README.md | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/README.md b/README.md
index b4f9b6d49e..5516115b5a 100644
--- a/README.md
+++ b/README.md
@@ -1984,7 +1984,7 @@
 
 **Read This**
 
-  - [Annotated ECMAScript 5.1](http://es5.github.com/)
+  - [Standard ECMA-262](http://www.ecma-international.org/ecma-262/6.0/index.html)
 
 **Tools**
 

From 8b8b9b8d40e01660e7fb5473331a426ead0f4735 Mon Sep 17 00:00:00 2001
From: Varayut Lerdkanlayanawat <l.varayut@gmail.com>
Date: Wed, 22 Jul 2015 10:25:18 +0700
Subject: [PATCH 0262/1591] Add You Don't Know JS: ES6 & Beyond book

---
 README.md | 1 +
 1 file changed, 1 insertion(+)

diff --git a/README.md b/README.md
index 5516115b5a..bd472845b0 100644
--- a/README.md
+++ b/README.md
@@ -2031,6 +2031,7 @@
   - [Third Party JavaScript](http://manning.com/vinegar/) - Ben Vinegar and Anton Kovalyov
   - [Effective JavaScript: 68 Specific Ways to Harness the Power of JavaScript](http://amzn.com/0321812182) - David Herman
   - [Eloquent JavaScript](http://eloquentjavascript.net/) - Marijn Haverbeke
+  - [You Don't Know JS: ES6 & Beyond](http://shop.oreilly.com/product/0636920033769.do) - Kyle Simpson
 
 **Blogs**
 

From 63bf905ed6ab4d33f75ee4147d9e38745aba4cf3 Mon Sep 17 00:00:00 2001
From: Harrison Shoff <hi@hshoff.com>
Date: Thu, 23 Jul 2015 10:28:28 -0700
Subject: [PATCH 0263/1591] [comments] update 17.4, 17.5 examples to follow
 17.2. fixes #430

---
 README.md | 10 +++++++---
 1 file changed, 7 insertions(+), 3 deletions(-)

diff --git a/README.md b/README.md
index bd472845b0..7dff467585 100644
--- a/README.md
+++ b/README.md
@@ -573,7 +573,7 @@
   ```javascript
   // bad
   var add = new Function('a', 'b', 'return a + b');
-  
+
   // still bad
   var subtract = Function('a', 'b', 'return a - b');
   ```
@@ -1223,8 +1223,10 @@
   - [17.4](#17.4) <a name='17.4'></a> Use `// FIXME:` to annotate problems.
 
     ```javascript
-    class Calculator {
+    class Calculator extends Abacus {
       constructor() {
+        super();
+
         // FIXME: shouldn't use a global here
         total = 0;
       }
@@ -1234,8 +1236,10 @@
   - [17.5](#17.5) <a name='17.5'></a> Use `// TODO:` to annotate solutions to problems.
 
     ```javascript
-    class Calculator {
+    class Calculator extends Abacus {
       constructor() {
+        super();
+
         // TODO: total should be configurable by an options param
         this.total = 0;
       }

From 3c260d8e8abf4b0653dbbb4e1ade6c8bf1ea64c6 Mon Sep 17 00:00:00 2001
From: Tomek Wiszniewski <t.wiszniewski@gmail.com>
Date: Wed, 29 Jul 2015 20:32:19 +0200
Subject: [PATCH 0264/1591] Get rid of `no-reserved-keys` in the .eslintrc

After all [point 8.2](https://github.com/airbnb/javascript/tree/63bece1#3.2) allows them in an ES 2015+ environment.
---
 linters/.eslintrc | 1 -
 1 file changed, 1 deletion(-)

diff --git a/linters/.eslintrc b/linters/.eslintrc
index 29e0ab3eb2..fccfea1bba 100644
--- a/linters/.eslintrc
+++ b/linters/.eslintrc
@@ -69,7 +69,6 @@
     "no-invalid-regexp": 2,          // http://eslint.org/docs/rules/no-invalid-regexp
     "no-irregular-whitespace": 2,    // http://eslint.org/docs/rules/no-irregular-whitespace
     "no-obj-calls": 2,               // http://eslint.org/docs/rules/no-obj-calls
-    "no-reserved-keys": 2,           // http://eslint.org/docs/rules/no-reserved-keys
     "no-sparse-arrays": 2,           // http://eslint.org/docs/rules/no-sparse-arrays
     "no-unreachable": 2,             // http://eslint.org/docs/rules/no-unreachable
     "use-isnan": 2,                  // http://eslint.org/docs/rules/use-isnan

From d2db3b6290da2c3d5f035a7245607c75aa7cc0c2 Mon Sep 17 00:00:00 2001
From: Evan Tschuy <tschuy@osuosl.org>
Date: Thu, 30 Jul 2015 10:02:18 -0700
Subject: [PATCH 0265/1591] change duplicate 18.5 to 18.6

---
 README.md | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/README.md b/README.md
index ab521d38a7..bcec5e6d54 100644
--- a/README.md
+++ b/README.md
@@ -1355,7 +1355,7 @@
     })(this);↵
     ```
 
-  - [18.5](#18.5) <a name='18.5'></a> Use indentation when making long method chains. Use a leading dot, which
+  - [18.6](#18.6) <a name='18.6'></a> Use indentation when making long method chains. Use a leading dot, which
     emphasizes that the line is a method call, not a new statement.
 
     ```javascript
@@ -1395,7 +1395,7 @@
         .call(tron.led);
     ```
 
-  - [18.6](#18.6) <a name='18.6'></a> Leave a blank line after blocks and before the next statement.
+  - [18.7](#18.7) <a name='18.7'></a> Leave a blank line after blocks and before the next statement.
 
     ```javascript
     // bad

From 2f55be7cc3525d20812918b0c2dc5a59f6504d0c Mon Sep 17 00:00:00 2001
From: Jake Teton-Landis <jake.tl@airbnb.com>
Date: Thu, 30 Jul 2015 14:47:42 -0700
Subject: [PATCH 0266/1591] [eslint] move .eslintrc into
 packages/eslint-config-airbnb

---
 linters/.eslintrc                       | 218 +-----------------------
 packages/eslint-config-airbnb/.eslintrc | 217 +++++++++++++++++++++++
 packages/eslint-config-airbnb/index.js  |   4 +-
 3 files changed, 220 insertions(+), 219 deletions(-)
 mode change 100644 => 120000 linters/.eslintrc
 create mode 100644 packages/eslint-config-airbnb/.eslintrc

diff --git a/linters/.eslintrc b/linters/.eslintrc
deleted file mode 100644
index 57173bca97..0000000000
--- a/linters/.eslintrc
+++ /dev/null
@@ -1,217 +0,0 @@
-{
-  "parser": "babel-eslint",          // https://github.com/babel/babel-eslint
-  "plugins": [
-    "react"                          // https://github.com/yannickcr/eslint-plugin-react
-  ],
-  "env": {                           // http://eslint.org/docs/user-guide/configuring.html#specifying-environments
-    "browser": true,                 // browser global variables
-    "node": true                     // Node.js global variables and Node.js-specific rules
-  },
-  "ecmaFeatures": {
-    "arrowFunctions": true,
-    "blockBindings": true,
-    "classes": true,
-    "defaultParams": true,
-    "destructuring": true,
-    "forOf": true,
-    "generators": false,
-    "modules": true,
-    "objectLiteralComputedProperties": true,
-    "objectLiteralDuplicateProperties": false,
-    "objectLiteralShorthandMethods": true,
-    "objectLiteralShorthandProperties": true,
-    "spread": true,
-    "superInFunctions": true,
-    "templateStrings": true,
-    "jsx": true
-  },
-  "rules": {
-/**
- * Strict mode
- */
-    // babel inserts "use strict"; for us
-    "strict": [2, "never"],          // http://eslint.org/docs/rules/strict
-
-/**
- * ES6
- */
-    "no-var": 2,                     // http://eslint.org/docs/rules/no-var
-    "prefer-const": 2,               // http://eslint.org/docs/rules/prefer-const
-
-/**
- * Variables
- */
-    "no-shadow": 2,                  // http://eslint.org/docs/rules/no-shadow
-    "no-shadow-restricted-names": 2, // http://eslint.org/docs/rules/no-shadow-restricted-names
-    "no-unused-vars": [2, {          // http://eslint.org/docs/rules/no-unused-vars
-      "vars": "local",
-      "args": "after-used"
-    }],
-    "no-use-before-define": 2,       // http://eslint.org/docs/rules/no-use-before-define
-
-/**
- * Possible errors
- */
-    "comma-dangle": [2, "always-multiline"],    // http://eslint.org/docs/rules/comma-dangle
-    "no-cond-assign": [2, "always"], // http://eslint.org/docs/rules/no-cond-assign
-    "no-console": 1,                 // http://eslint.org/docs/rules/no-console
-    "no-debugger": 1,                // http://eslint.org/docs/rules/no-debugger
-    "no-alert": 1,                   // http://eslint.org/docs/rules/no-alert
-    "no-constant-condition": 1,      // http://eslint.org/docs/rules/no-constant-condition
-    "no-dupe-keys": 2,               // http://eslint.org/docs/rules/no-dupe-keys
-    "no-duplicate-case": 2,          // http://eslint.org/docs/rules/no-duplicate-case
-    "no-empty": 2,                   // http://eslint.org/docs/rules/no-empty
-    "no-ex-assign": 2,               // http://eslint.org/docs/rules/no-ex-assign
-    "no-extra-boolean-cast": 0,      // http://eslint.org/docs/rules/no-extra-boolean-cast
-    "no-extra-semi": 2,              // http://eslint.org/docs/rules/no-extra-semi
-    "no-func-assign": 2,             // http://eslint.org/docs/rules/no-func-assign
-    "no-inner-declarations": 2,      // http://eslint.org/docs/rules/no-inner-declarations
-    "no-invalid-regexp": 2,          // http://eslint.org/docs/rules/no-invalid-regexp
-    "no-irregular-whitespace": 2,    // http://eslint.org/docs/rules/no-irregular-whitespace
-    "no-obj-calls": 2,               // http://eslint.org/docs/rules/no-obj-calls
-    "no-sparse-arrays": 2,           // http://eslint.org/docs/rules/no-sparse-arrays
-    "no-unreachable": 2,             // http://eslint.org/docs/rules/no-unreachable
-    "use-isnan": 2,                  // http://eslint.org/docs/rules/use-isnan
-    "block-scoped-var": 2,           // http://eslint.org/docs/rules/block-scoped-var
-
-/**
- * Best practices
- */
-    "consistent-return": 2,          // http://eslint.org/docs/rules/consistent-return
-    "curly": [2, "multi-line"],      // http://eslint.org/docs/rules/curly
-    "default-case": 2,               // http://eslint.org/docs/rules/default-case
-    "dot-notation": [2, {            // http://eslint.org/docs/rules/dot-notation
-      "allowKeywords": true
-    }],
-    "eqeqeq": 2,                     // http://eslint.org/docs/rules/eqeqeq
-    "guard-for-in": 2,               // http://eslint.org/docs/rules/guard-for-in
-    "no-caller": 2,                  // http://eslint.org/docs/rules/no-caller
-    "no-else-return": 2,             // http://eslint.org/docs/rules/no-else-return
-    "no-eq-null": 2,                 // http://eslint.org/docs/rules/no-eq-null
-    "no-eval": 2,                    // http://eslint.org/docs/rules/no-eval
-    "no-extend-native": 2,           // http://eslint.org/docs/rules/no-extend-native
-    "no-extra-bind": 2,              // http://eslint.org/docs/rules/no-extra-bind
-    "no-fallthrough": 2,             // http://eslint.org/docs/rules/no-fallthrough
-    "no-floating-decimal": 2,        // http://eslint.org/docs/rules/no-floating-decimal
-    "no-implied-eval": 2,            // http://eslint.org/docs/rules/no-implied-eval
-    "no-lone-blocks": 2,             // http://eslint.org/docs/rules/no-lone-blocks
-    "no-loop-func": 2,               // http://eslint.org/docs/rules/no-loop-func
-    "no-multi-str": 2,               // http://eslint.org/docs/rules/no-multi-str
-    "no-native-reassign": 2,         // http://eslint.org/docs/rules/no-native-reassign
-    "no-new": 2,                     // http://eslint.org/docs/rules/no-new
-    "no-new-func": 2,                // http://eslint.org/docs/rules/no-new-func
-    "no-new-wrappers": 2,            // http://eslint.org/docs/rules/no-new-wrappers
-    "no-octal": 2,                   // http://eslint.org/docs/rules/no-octal
-    "no-octal-escape": 2,            // http://eslint.org/docs/rules/no-octal-escape
-    "no-param-reassign": 2,          // http://eslint.org/docs/rules/no-param-reassign
-    "no-proto": 2,                   // http://eslint.org/docs/rules/no-proto
-    "no-redeclare": 2,               // http://eslint.org/docs/rules/no-redeclare
-    "no-return-assign": 2,           // http://eslint.org/docs/rules/no-return-assign
-    "no-script-url": 2,              // http://eslint.org/docs/rules/no-script-url
-    "no-self-compare": 2,            // http://eslint.org/docs/rules/no-self-compare
-    "no-sequences": 2,               // http://eslint.org/docs/rules/no-sequences
-    "no-throw-literal": 2,           // http://eslint.org/docs/rules/no-throw-literal
-    "no-with": 2,                    // http://eslint.org/docs/rules/no-with
-    "radix": 2,                      // http://eslint.org/docs/rules/radix
-    "vars-on-top": 2,                // http://eslint.org/docs/rules/vars-on-top
-    "wrap-iife": [2, "any"],         // http://eslint.org/docs/rules/wrap-iife
-    "yoda": 2,                       // http://eslint.org/docs/rules/yoda
-
-/**
- * Style
- */
-    "indent": [2, 2],                // http://eslint.org/docs/rules/indent
-    "brace-style": [2,               // http://eslint.org/docs/rules/brace-style
-      "1tbs", {
-      "allowSingleLine": true
-    }],
-    "quotes": [
-      2, "single", "avoid-escape"    // http://eslint.org/docs/rules/quotes
-    ],
-    "camelcase": [2, {               // http://eslint.org/docs/rules/camelcase
-      "properties": "never"
-    }],
-    "comma-spacing": [2, {           // http://eslint.org/docs/rules/comma-spacing
-      "before": false,
-      "after": true
-    }],
-    "comma-style": [2, "last"],      // http://eslint.org/docs/rules/comma-style
-    "eol-last": 2,                   // http://eslint.org/docs/rules/eol-last
-    "func-names": 1,                 // http://eslint.org/docs/rules/func-names
-    "key-spacing": [2, {             // http://eslint.org/docs/rules/key-spacing
-        "beforeColon": false,
-        "afterColon": true
-    }],
-    "new-cap": [2, {                 // http://eslint.org/docs/rules/new-cap
-      "newIsCap": true
-    }],
-    "no-multiple-empty-lines": [2, { // http://eslint.org/docs/rules/no-multiple-empty-lines
-      "max": 2
-    }],
-    "no-nested-ternary": 2,          // http://eslint.org/docs/rules/no-nested-ternary
-    "no-new-object": 2,              // http://eslint.org/docs/rules/no-new-object
-    "no-spaced-func": 2,             // http://eslint.org/docs/rules/no-spaced-func
-    "no-trailing-spaces": 2,         // http://eslint.org/docs/rules/no-trailing-spaces
-    "no-extra-parens": [2, "functions"], // http://eslint.org/docs/rules/no-extra-parens
-    "no-underscore-dangle": 0,       // http://eslint.org/docs/rules/no-underscore-dangle
-    "one-var": [2, "never"],         // http://eslint.org/docs/rules/one-var
-    "padded-blocks": [2, "never"],   // http://eslint.org/docs/rules/padded-blocks
-    "semi": [2, "always"],           // http://eslint.org/docs/rules/semi
-    "semi-spacing": [2, {            // http://eslint.org/docs/rules/semi-spacing
-      "before": false,
-      "after": true
-    }],
-    "space-after-keywords": 2,       // http://eslint.org/docs/rules/space-after-keywords
-    "space-before-blocks": 2,        // http://eslint.org/docs/rules/space-before-blocks
-    "space-before-function-paren": [2, "never"], // http://eslint.org/docs/rules/space-before-function-paren
-    "space-infix-ops": 2,            // http://eslint.org/docs/rules/space-infix-ops
-    "space-return-throw-case": 2,    // http://eslint.org/docs/rules/space-return-throw-case
-    "spaced-comment": 2,             // http://eslint.org/docs/rules/spaced-comment
-
-/**
- * JSX style
- */
-    "react/display-name": 0,         // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/display-name.md
-    "react/jsx-boolean-value": 2,    // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/jsx-boolean-value.md
-    "react/jsx-quotes": [2, "double"], // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/jsx-quotes.md
-    "react/jsx-no-undef": 2,         // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/jsx-no-undef.md
-    "react/jsx-sort-props": 0,       // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/jsx-sort-props.md
-    "react/jsx-sort-prop-types": 0,  // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/jsx-sort-prop-types.md
-    "react/jsx-uses-react": 2,       // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/jsx-uses-react.md
-    "react/jsx-uses-vars": 2,        // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/jsx-uses-vars.md
-    "react/no-did-mount-set-state": [2, "allow-in-func"], // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/no-did-mount-set-state.md
-    "react/no-did-update-set-state": 2, // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/no-did-update-set-state.md
-    "react/no-multi-comp": 2,        // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/no-multi-comp.md
-    "react/no-unknown-property": 2,  // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/no-unknown-property.md
-    "react/prop-types": 2,           // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/prop-types.md
-    "react/react-in-jsx-scope": 2,   // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/react-in-jsx-scope.md
-    "react/self-closing-comp": 2,    // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/self-closing-comp.md
-    "react/wrap-multilines": 2,      // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/wrap-multilines.md
-    "react/sort-comp": [2, {         // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/sort-comp.md
-      "order": [
-        "displayName",
-        "propTypes",
-        "contextTypes",
-        "childContextTypes",
-        "mixins",
-        "statics",
-        "defaultProps",
-        "constructor",
-        "getDefaultProps",
-        "getInitialState",
-        "getChildContext",
-        "componentWillMount",
-        "componentDidMount",
-        "componentWillReceiveProps",
-        "shouldComponentUpdate",
-        "componentWillUpdate",
-        "componentDidUpdate",
-        "componentWillUnmount",
-        "/^on.+$/",
-        "/^get.+$/",
-        "/^render.+$/",
-        "render"
-      ]
-    }]
-  }
-}
diff --git a/linters/.eslintrc b/linters/.eslintrc
new file mode 120000
index 0000000000..6fe6a12ade
--- /dev/null
+++ b/linters/.eslintrc
@@ -0,0 +1 @@
+../packages/eslint-config-airbnb/.eslintrc
\ No newline at end of file
diff --git a/packages/eslint-config-airbnb/.eslintrc b/packages/eslint-config-airbnb/.eslintrc
new file mode 100644
index 0000000000..57173bca97
--- /dev/null
+++ b/packages/eslint-config-airbnb/.eslintrc
@@ -0,0 +1,217 @@
+{
+  "parser": "babel-eslint",          // https://github.com/babel/babel-eslint
+  "plugins": [
+    "react"                          // https://github.com/yannickcr/eslint-plugin-react
+  ],
+  "env": {                           // http://eslint.org/docs/user-guide/configuring.html#specifying-environments
+    "browser": true,                 // browser global variables
+    "node": true                     // Node.js global variables and Node.js-specific rules
+  },
+  "ecmaFeatures": {
+    "arrowFunctions": true,
+    "blockBindings": true,
+    "classes": true,
+    "defaultParams": true,
+    "destructuring": true,
+    "forOf": true,
+    "generators": false,
+    "modules": true,
+    "objectLiteralComputedProperties": true,
+    "objectLiteralDuplicateProperties": false,
+    "objectLiteralShorthandMethods": true,
+    "objectLiteralShorthandProperties": true,
+    "spread": true,
+    "superInFunctions": true,
+    "templateStrings": true,
+    "jsx": true
+  },
+  "rules": {
+/**
+ * Strict mode
+ */
+    // babel inserts "use strict"; for us
+    "strict": [2, "never"],          // http://eslint.org/docs/rules/strict
+
+/**
+ * ES6
+ */
+    "no-var": 2,                     // http://eslint.org/docs/rules/no-var
+    "prefer-const": 2,               // http://eslint.org/docs/rules/prefer-const
+
+/**
+ * Variables
+ */
+    "no-shadow": 2,                  // http://eslint.org/docs/rules/no-shadow
+    "no-shadow-restricted-names": 2, // http://eslint.org/docs/rules/no-shadow-restricted-names
+    "no-unused-vars": [2, {          // http://eslint.org/docs/rules/no-unused-vars
+      "vars": "local",
+      "args": "after-used"
+    }],
+    "no-use-before-define": 2,       // http://eslint.org/docs/rules/no-use-before-define
+
+/**
+ * Possible errors
+ */
+    "comma-dangle": [2, "always-multiline"],    // http://eslint.org/docs/rules/comma-dangle
+    "no-cond-assign": [2, "always"], // http://eslint.org/docs/rules/no-cond-assign
+    "no-console": 1,                 // http://eslint.org/docs/rules/no-console
+    "no-debugger": 1,                // http://eslint.org/docs/rules/no-debugger
+    "no-alert": 1,                   // http://eslint.org/docs/rules/no-alert
+    "no-constant-condition": 1,      // http://eslint.org/docs/rules/no-constant-condition
+    "no-dupe-keys": 2,               // http://eslint.org/docs/rules/no-dupe-keys
+    "no-duplicate-case": 2,          // http://eslint.org/docs/rules/no-duplicate-case
+    "no-empty": 2,                   // http://eslint.org/docs/rules/no-empty
+    "no-ex-assign": 2,               // http://eslint.org/docs/rules/no-ex-assign
+    "no-extra-boolean-cast": 0,      // http://eslint.org/docs/rules/no-extra-boolean-cast
+    "no-extra-semi": 2,              // http://eslint.org/docs/rules/no-extra-semi
+    "no-func-assign": 2,             // http://eslint.org/docs/rules/no-func-assign
+    "no-inner-declarations": 2,      // http://eslint.org/docs/rules/no-inner-declarations
+    "no-invalid-regexp": 2,          // http://eslint.org/docs/rules/no-invalid-regexp
+    "no-irregular-whitespace": 2,    // http://eslint.org/docs/rules/no-irregular-whitespace
+    "no-obj-calls": 2,               // http://eslint.org/docs/rules/no-obj-calls
+    "no-sparse-arrays": 2,           // http://eslint.org/docs/rules/no-sparse-arrays
+    "no-unreachable": 2,             // http://eslint.org/docs/rules/no-unreachable
+    "use-isnan": 2,                  // http://eslint.org/docs/rules/use-isnan
+    "block-scoped-var": 2,           // http://eslint.org/docs/rules/block-scoped-var
+
+/**
+ * Best practices
+ */
+    "consistent-return": 2,          // http://eslint.org/docs/rules/consistent-return
+    "curly": [2, "multi-line"],      // http://eslint.org/docs/rules/curly
+    "default-case": 2,               // http://eslint.org/docs/rules/default-case
+    "dot-notation": [2, {            // http://eslint.org/docs/rules/dot-notation
+      "allowKeywords": true
+    }],
+    "eqeqeq": 2,                     // http://eslint.org/docs/rules/eqeqeq
+    "guard-for-in": 2,               // http://eslint.org/docs/rules/guard-for-in
+    "no-caller": 2,                  // http://eslint.org/docs/rules/no-caller
+    "no-else-return": 2,             // http://eslint.org/docs/rules/no-else-return
+    "no-eq-null": 2,                 // http://eslint.org/docs/rules/no-eq-null
+    "no-eval": 2,                    // http://eslint.org/docs/rules/no-eval
+    "no-extend-native": 2,           // http://eslint.org/docs/rules/no-extend-native
+    "no-extra-bind": 2,              // http://eslint.org/docs/rules/no-extra-bind
+    "no-fallthrough": 2,             // http://eslint.org/docs/rules/no-fallthrough
+    "no-floating-decimal": 2,        // http://eslint.org/docs/rules/no-floating-decimal
+    "no-implied-eval": 2,            // http://eslint.org/docs/rules/no-implied-eval
+    "no-lone-blocks": 2,             // http://eslint.org/docs/rules/no-lone-blocks
+    "no-loop-func": 2,               // http://eslint.org/docs/rules/no-loop-func
+    "no-multi-str": 2,               // http://eslint.org/docs/rules/no-multi-str
+    "no-native-reassign": 2,         // http://eslint.org/docs/rules/no-native-reassign
+    "no-new": 2,                     // http://eslint.org/docs/rules/no-new
+    "no-new-func": 2,                // http://eslint.org/docs/rules/no-new-func
+    "no-new-wrappers": 2,            // http://eslint.org/docs/rules/no-new-wrappers
+    "no-octal": 2,                   // http://eslint.org/docs/rules/no-octal
+    "no-octal-escape": 2,            // http://eslint.org/docs/rules/no-octal-escape
+    "no-param-reassign": 2,          // http://eslint.org/docs/rules/no-param-reassign
+    "no-proto": 2,                   // http://eslint.org/docs/rules/no-proto
+    "no-redeclare": 2,               // http://eslint.org/docs/rules/no-redeclare
+    "no-return-assign": 2,           // http://eslint.org/docs/rules/no-return-assign
+    "no-script-url": 2,              // http://eslint.org/docs/rules/no-script-url
+    "no-self-compare": 2,            // http://eslint.org/docs/rules/no-self-compare
+    "no-sequences": 2,               // http://eslint.org/docs/rules/no-sequences
+    "no-throw-literal": 2,           // http://eslint.org/docs/rules/no-throw-literal
+    "no-with": 2,                    // http://eslint.org/docs/rules/no-with
+    "radix": 2,                      // http://eslint.org/docs/rules/radix
+    "vars-on-top": 2,                // http://eslint.org/docs/rules/vars-on-top
+    "wrap-iife": [2, "any"],         // http://eslint.org/docs/rules/wrap-iife
+    "yoda": 2,                       // http://eslint.org/docs/rules/yoda
+
+/**
+ * Style
+ */
+    "indent": [2, 2],                // http://eslint.org/docs/rules/indent
+    "brace-style": [2,               // http://eslint.org/docs/rules/brace-style
+      "1tbs", {
+      "allowSingleLine": true
+    }],
+    "quotes": [
+      2, "single", "avoid-escape"    // http://eslint.org/docs/rules/quotes
+    ],
+    "camelcase": [2, {               // http://eslint.org/docs/rules/camelcase
+      "properties": "never"
+    }],
+    "comma-spacing": [2, {           // http://eslint.org/docs/rules/comma-spacing
+      "before": false,
+      "after": true
+    }],
+    "comma-style": [2, "last"],      // http://eslint.org/docs/rules/comma-style
+    "eol-last": 2,                   // http://eslint.org/docs/rules/eol-last
+    "func-names": 1,                 // http://eslint.org/docs/rules/func-names
+    "key-spacing": [2, {             // http://eslint.org/docs/rules/key-spacing
+        "beforeColon": false,
+        "afterColon": true
+    }],
+    "new-cap": [2, {                 // http://eslint.org/docs/rules/new-cap
+      "newIsCap": true
+    }],
+    "no-multiple-empty-lines": [2, { // http://eslint.org/docs/rules/no-multiple-empty-lines
+      "max": 2
+    }],
+    "no-nested-ternary": 2,          // http://eslint.org/docs/rules/no-nested-ternary
+    "no-new-object": 2,              // http://eslint.org/docs/rules/no-new-object
+    "no-spaced-func": 2,             // http://eslint.org/docs/rules/no-spaced-func
+    "no-trailing-spaces": 2,         // http://eslint.org/docs/rules/no-trailing-spaces
+    "no-extra-parens": [2, "functions"], // http://eslint.org/docs/rules/no-extra-parens
+    "no-underscore-dangle": 0,       // http://eslint.org/docs/rules/no-underscore-dangle
+    "one-var": [2, "never"],         // http://eslint.org/docs/rules/one-var
+    "padded-blocks": [2, "never"],   // http://eslint.org/docs/rules/padded-blocks
+    "semi": [2, "always"],           // http://eslint.org/docs/rules/semi
+    "semi-spacing": [2, {            // http://eslint.org/docs/rules/semi-spacing
+      "before": false,
+      "after": true
+    }],
+    "space-after-keywords": 2,       // http://eslint.org/docs/rules/space-after-keywords
+    "space-before-blocks": 2,        // http://eslint.org/docs/rules/space-before-blocks
+    "space-before-function-paren": [2, "never"], // http://eslint.org/docs/rules/space-before-function-paren
+    "space-infix-ops": 2,            // http://eslint.org/docs/rules/space-infix-ops
+    "space-return-throw-case": 2,    // http://eslint.org/docs/rules/space-return-throw-case
+    "spaced-comment": 2,             // http://eslint.org/docs/rules/spaced-comment
+
+/**
+ * JSX style
+ */
+    "react/display-name": 0,         // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/display-name.md
+    "react/jsx-boolean-value": 2,    // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/jsx-boolean-value.md
+    "react/jsx-quotes": [2, "double"], // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/jsx-quotes.md
+    "react/jsx-no-undef": 2,         // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/jsx-no-undef.md
+    "react/jsx-sort-props": 0,       // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/jsx-sort-props.md
+    "react/jsx-sort-prop-types": 0,  // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/jsx-sort-prop-types.md
+    "react/jsx-uses-react": 2,       // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/jsx-uses-react.md
+    "react/jsx-uses-vars": 2,        // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/jsx-uses-vars.md
+    "react/no-did-mount-set-state": [2, "allow-in-func"], // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/no-did-mount-set-state.md
+    "react/no-did-update-set-state": 2, // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/no-did-update-set-state.md
+    "react/no-multi-comp": 2,        // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/no-multi-comp.md
+    "react/no-unknown-property": 2,  // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/no-unknown-property.md
+    "react/prop-types": 2,           // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/prop-types.md
+    "react/react-in-jsx-scope": 2,   // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/react-in-jsx-scope.md
+    "react/self-closing-comp": 2,    // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/self-closing-comp.md
+    "react/wrap-multilines": 2,      // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/wrap-multilines.md
+    "react/sort-comp": [2, {         // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/sort-comp.md
+      "order": [
+        "displayName",
+        "propTypes",
+        "contextTypes",
+        "childContextTypes",
+        "mixins",
+        "statics",
+        "defaultProps",
+        "constructor",
+        "getDefaultProps",
+        "getInitialState",
+        "getChildContext",
+        "componentWillMount",
+        "componentDidMount",
+        "componentWillReceiveProps",
+        "shouldComponentUpdate",
+        "componentWillUpdate",
+        "componentDidUpdate",
+        "componentWillUnmount",
+        "/^on.+$/",
+        "/^get.+$/",
+        "/^render.+$/",
+        "render"
+      ]
+    }]
+  }
+}
diff --git a/packages/eslint-config-airbnb/index.js b/packages/eslint-config-airbnb/index.js
index 9c29ea31bd..e69410e3c7 100644
--- a/packages/eslint-config-airbnb/index.js
+++ b/packages/eslint-config-airbnb/index.js
@@ -1,9 +1,9 @@
-var resolve = require('resolve');
+var path = require('path');
 var stripComments = require('strip-json-comments');
 var fs = require('fs');
 
 // you could do this all at once if you wanted to look cool
-var filename = resolve.sync('airbnb-style/linters/.eslintrc');
+var filename = path.join(__dirname, '.eslintrc');
 var data = fs.readFileSync(filename, {encoding: 'utf-8'});
 var dataWithoutComments = stripComments(data);
 var parsed = JSON.parse(dataWithoutComments);

From f5cac3cc5c1deae3912cc5f1d04712298a8dff19 Mon Sep 17 00:00:00 2001
From: Jake Teton-Landis <jake.tl@airbnb.com>
Date: Thu, 30 Jul 2015 14:48:32 -0700
Subject: [PATCH 0267/1591] [eslint] remove most dependencies

---
 packages/eslint-config-airbnb/package.json | 11 +++++------
 1 file changed, 5 insertions(+), 6 deletions(-)

diff --git a/packages/eslint-config-airbnb/package.json b/packages/eslint-config-airbnb/package.json
index 0625134b82..9b1bd5f3c8 100644
--- a/packages/eslint-config-airbnb/package.json
+++ b/packages/eslint-config-airbnb/package.json
@@ -1,6 +1,6 @@
 {
   "name": "eslint-config-airbnb",
-  "version": "0.0.6",
+  "version": "0.0.7",
   "description": "Airbnb's ESLint config, following our styleguide",
   "main": "index.js",
   "scripts": {
@@ -25,11 +25,10 @@
   },
   "homepage": "https://github.com/airbnb/javascript",
   "dependencies": {
-    "airbnb-style": "2.0.0",
-    "babel-eslint": "3.1.7",
-    "eslint": "0.21.2",
-    "eslint-plugin-react": "2.3.0",
-    "resolve": "1.1.6",
     "strip-json-comments": "1.0.2"
+  },
+  "peerDependencies": {
+    "babel-eslint": ">= 3.0",
+    "eslint-plugin-react": ">= 2.3.0"
   }
 }

From abc85310b95dbe4b71573deefcf6998f86076ed4 Mon Sep 17 00:00:00 2001
From: Jake Teton-Landis <jake.tl@airbnb.com>
Date: Thu, 30 Jul 2015 14:49:34 -0700
Subject: [PATCH 0268/1591] [eslint] add readme to eslint-config-airbnb

---
 packages/eslint-config-airbnb/README.md | 12 ++++++++++++
 1 file changed, 12 insertions(+)
 create mode 100644 packages/eslint-config-airbnb/README.md

diff --git a/packages/eslint-config-airbnb/README.md b/packages/eslint-config-airbnb/README.md
new file mode 100644
index 0000000000..d21a1c90e6
--- /dev/null
+++ b/packages/eslint-config-airbnb/README.md
@@ -0,0 +1,12 @@
+# eslint-config-airbnb
+
+This package provides Airbnb's .eslintrc as an extensible shared config.
+
+## Usage
+
+1. `npm install --save-dev eslint-config-airbnb`
+2. add `"extends": "eslint-config-airbnb"` to your .eslintrc
+
+See [Airbnb's Javascript styleguide](https://github.com/airbnb/javascript) and
+the [ESlint config docs](http://eslint.org/docs/user-guide/configuring#extending-configuration-files)
+for more information.

From a45dfe359b886452752c7c69afdc6543feb89ff2 Mon Sep 17 00:00:00 2001
From: Jake Teton-Landis <jake.tl@airbnb.com>
Date: Thu, 30 Jul 2015 14:59:19 -0700
Subject: [PATCH 0269/1591] [eslint] remove peerDependencies

---
 packages/eslint-config-airbnb/package.json | 4 ----
 1 file changed, 4 deletions(-)

diff --git a/packages/eslint-config-airbnb/package.json b/packages/eslint-config-airbnb/package.json
index 9b1bd5f3c8..bc9071dcc5 100644
--- a/packages/eslint-config-airbnb/package.json
+++ b/packages/eslint-config-airbnb/package.json
@@ -26,9 +26,5 @@
   "homepage": "https://github.com/airbnb/javascript",
   "dependencies": {
     "strip-json-comments": "1.0.2"
-  },
-  "peerDependencies": {
-    "babel-eslint": ">= 3.0",
-    "eslint-plugin-react": ">= 2.3.0"
   }
 }

From cf5266bc5201ca08a729fdf514d9123c390514b3 Mon Sep 17 00:00:00 2001
From: Jake Teton-Landis <jake.tl@airbnb.com>
Date: Thu, 30 Jul 2015 15:01:17 -0700
Subject: [PATCH 0270/1591] [eslint] document dependences in README

---
 packages/eslint-config-airbnb/README.md | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/packages/eslint-config-airbnb/README.md b/packages/eslint-config-airbnb/README.md
index d21a1c90e6..6edb34f355 100644
--- a/packages/eslint-config-airbnb/README.md
+++ b/packages/eslint-config-airbnb/README.md
@@ -4,7 +4,7 @@ This package provides Airbnb's .eslintrc as an extensible shared config.
 
 ## Usage
 
-1. `npm install --save-dev eslint-config-airbnb`
+1. `npm install --save-dev eslint-config-airbnb babel-eslint eslint-plugin-react`
 2. add `"extends": "eslint-config-airbnb"` to your .eslintrc
 
 See [Airbnb's Javascript styleguide](https://github.com/airbnb/javascript) and

From dbbf71bd7118926e6591991827a74d076cbd9a46 Mon Sep 17 00:00:00 2001
From: Jake Teton-Landis <jake.tl@airbnb.com>
Date: Thu, 30 Jul 2015 15:08:47 -0700
Subject: [PATCH 0271/1591] eslintrc extends eslint-config-airbnb

---
 linters/.eslintrc | 6 +++++-
 1 file changed, 5 insertions(+), 1 deletion(-)
 mode change 120000 => 100644 linters/.eslintrc

diff --git a/linters/.eslintrc b/linters/.eslintrc
deleted file mode 120000
index 6fe6a12ade..0000000000
--- a/linters/.eslintrc
+++ /dev/null
@@ -1 +0,0 @@
-../packages/eslint-config-airbnb/.eslintrc
\ No newline at end of file
diff --git a/linters/.eslintrc b/linters/.eslintrc
new file mode 100644
index 0000000000..9e203a5473
--- /dev/null
+++ b/linters/.eslintrc
@@ -0,0 +1,5 @@
+// Use this file as a starting point for your project's .eslintrc.
+// Copy this file, and add rule overrides as needed.
+{
+  "extends": "airbnb"
+}

From ff4dc46d0559c0ace26760e84a6f6067d41f3688 Mon Sep 17 00:00:00 2001
From: Jake Teton-Landis <jake.tl@airbnb.com>
Date: Thu, 30 Jul 2015 17:49:47 -0700
Subject: [PATCH 0272/1591] [eslint] allow +, -, =, ! in comments without a
 space

---
 packages/eslint-config-airbnb/.eslintrc | 5 ++++-
 1 file changed, 4 insertions(+), 1 deletion(-)

diff --git a/packages/eslint-config-airbnb/.eslintrc b/packages/eslint-config-airbnb/.eslintrc
index 57173bca97..638bbacf4d 100644
--- a/packages/eslint-config-airbnb/.eslintrc
+++ b/packages/eslint-config-airbnb/.eslintrc
@@ -166,7 +166,10 @@
     "space-before-function-paren": [2, "never"], // http://eslint.org/docs/rules/space-before-function-paren
     "space-infix-ops": 2,            // http://eslint.org/docs/rules/space-infix-ops
     "space-return-throw-case": 2,    // http://eslint.org/docs/rules/space-return-throw-case
-    "spaced-comment": 2,             // http://eslint.org/docs/rules/spaced-comment
+    "spaced-comment": [2, "always",  {// http://eslint.org/docs/rules/spaced-comment
+      "exceptions": ["-", "+"],
+      "markers": ["=", "!"]           // space here to support sprockets directives
+    }],
 
 /**
  * JSX style

From b3357f5b88f82a731ad954561ca194faa7c5a1c0 Mon Sep 17 00:00:00 2001
From: Thibaud Colas <thibaudcolas@gmail.com>
Date: Mon, 3 Aug 2015 22:39:23 +1200
Subject: [PATCH 0273/1591] Add Springload to "In the Wild" list

Springload loves the Airbnb style guide!
---
 README.md | 1 +
 1 file changed, 1 insertion(+)

diff --git a/README.md b/README.md
index ab521d38a7..b47783dd0b 100644
--- a/README.md
+++ b/README.md
@@ -2105,6 +2105,7 @@
   - **Ripple**: [ripple/javascript-style-guide](https://github.com/ripple/javascript-style-guide)
   - **SeekingAlpha**: [seekingalpha/javascript-style-guide](https://github.com/seekingalpha/javascript-style-guide)
   - **Shutterfly**: [shutterfly/javascript](https://github.com/shutterfly/javascript)
+  - **Springload**: [springload/javascript](https://github.com/springload/javascript)
   - **StudentSphere**: [studentsphere/javascript](https://github.com/studentsphere/javascript)
   - **Target**: [target/javascript](https://github.com/target/javascript)
   - **TheLadders**: [TheLadders/javascript](https://github.com/TheLadders/javascript)

From d4e64139f5950720e2fe0be663354ec295111e99 Mon Sep 17 00:00:00 2001
From: Harrison Shoff <hi@hshoff.com>
Date: Tue, 4 Aug 2015 09:59:28 -0700
Subject: [PATCH 0274/1591] [readme] add downloads badge

---
 README.md | 5 +++--
 1 file changed, 3 insertions(+), 2 deletions(-)

diff --git a/README.md b/README.md
index b47783dd0b..461abe1857 100644
--- a/README.md
+++ b/README.md
@@ -1,9 +1,10 @@
-[![Gitter](https://badges.gitter.im/Join Chat.svg)](https://gitter.im/airbnb/javascript?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge)
-
 # Airbnb JavaScript Style Guide() {
 
 *A mostly reasonable approach to JavaScript*
 
+[![Downloads](https://img.shields.io/npm/dm/eslint-config-airbnb.svg)](https://www.npmjs.com/package/eslint-config-airbnb)
+[![Gitter](https://badges.gitter.im/Join Chat.svg)](https://gitter.im/airbnb/javascript?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge)
+
 [For the ES5-only guide click here](es5/).
 
 ## Table of Contents

From d874a94a0ab5a21bd48bcc90b6ad68016c8a57cd Mon Sep 17 00:00:00 2001
From: Tomek Wiszniewski <t.wiszniewski@gmail.com>
Date: Wed, 5 Aug 2015 19:45:08 +0200
Subject: [PATCH 0275/1591] Mention eslint-config-airbnb
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

Actually, if we want to make the thing more convenient, we could go as far as saying: “

Before using our `.eslintrc` install these dependencies:

```sh
npm install --save-dev eslint-config-airbnb eslint babel-eslint eslint-plugin-react
```

”. I want to leave the decision up to you though.
---
 linters/README.md | 1 +
 1 file changed, 1 insertion(+)

diff --git a/linters/README.md b/linters/README.md
index 8fa6d19ad8..b027a5dcd2 100644
--- a/linters/README.md
+++ b/linters/README.md
@@ -2,6 +2,7 @@
 
 Our `.eslintrc` requires the following NPM packages:
 
+- `eslint-config-airbnb`
 - `eslint`
 - `babel-eslint`
 - `eslint-plugin-react`

From d455d6af9e07e3ee46d4070753a54ef0590975f1 Mon Sep 17 00:00:00 2001
From: Josh Perez <josh@goatslacker.com>
Date: Thu, 6 Aug 2015 13:01:40 -0700
Subject: [PATCH 0276/1591] Amendments section to encourage forking

Amendments alter what the style guide says but can be contained in a single section thus allowing you to periodically update or cherry pick from the style guide from master without having to deal with annoying merge conflicts.
---
 README.md | 4 ++++
 1 file changed, 4 insertions(+)

diff --git a/README.md b/README.md
index 461abe1857..0e909159da 100644
--- a/README.md
+++ b/README.md
@@ -2177,4 +2177,8 @@ SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 
 **[⬆ back to top](#table-of-contents)**
 
+## Amendments
+
+We encourage you to fork this guide and change the rules to fit your team's style guide. Below, you may list some amendments to the style guide. This allows you to periodically update your style guide without having to deal with merge conflicts.
+
 # };

From 20b6913202bdc9e394b6f9a4475dd9a46b1dc704 Mon Sep 17 00:00:00 2001
From: Nikita Gusakov <dev@nkt.me>
Date: Sat, 8 Aug 2015 17:46:56 +0300
Subject: [PATCH 0277/1591] Simplify ESLint config package.

This patch moves `.eslintrc` contents into `index.js` directly.
This allows us to drop external dependencies and using javascript
comments instead of not valid JSON.
---
 packages/eslint-config-airbnb/.eslintrc    | 220 --------------------
 packages/eslint-config-airbnb/index.js     | 227 ++++++++++++++++++++-
 packages/eslint-config-airbnb/package.json |   5 +-
 3 files changed, 219 insertions(+), 233 deletions(-)
 delete mode 100644 packages/eslint-config-airbnb/.eslintrc

diff --git a/packages/eslint-config-airbnb/.eslintrc b/packages/eslint-config-airbnb/.eslintrc
deleted file mode 100644
index 638bbacf4d..0000000000
--- a/packages/eslint-config-airbnb/.eslintrc
+++ /dev/null
@@ -1,220 +0,0 @@
-{
-  "parser": "babel-eslint",          // https://github.com/babel/babel-eslint
-  "plugins": [
-    "react"                          // https://github.com/yannickcr/eslint-plugin-react
-  ],
-  "env": {                           // http://eslint.org/docs/user-guide/configuring.html#specifying-environments
-    "browser": true,                 // browser global variables
-    "node": true                     // Node.js global variables and Node.js-specific rules
-  },
-  "ecmaFeatures": {
-    "arrowFunctions": true,
-    "blockBindings": true,
-    "classes": true,
-    "defaultParams": true,
-    "destructuring": true,
-    "forOf": true,
-    "generators": false,
-    "modules": true,
-    "objectLiteralComputedProperties": true,
-    "objectLiteralDuplicateProperties": false,
-    "objectLiteralShorthandMethods": true,
-    "objectLiteralShorthandProperties": true,
-    "spread": true,
-    "superInFunctions": true,
-    "templateStrings": true,
-    "jsx": true
-  },
-  "rules": {
-/**
- * Strict mode
- */
-    // babel inserts "use strict"; for us
-    "strict": [2, "never"],          // http://eslint.org/docs/rules/strict
-
-/**
- * ES6
- */
-    "no-var": 2,                     // http://eslint.org/docs/rules/no-var
-    "prefer-const": 2,               // http://eslint.org/docs/rules/prefer-const
-
-/**
- * Variables
- */
-    "no-shadow": 2,                  // http://eslint.org/docs/rules/no-shadow
-    "no-shadow-restricted-names": 2, // http://eslint.org/docs/rules/no-shadow-restricted-names
-    "no-unused-vars": [2, {          // http://eslint.org/docs/rules/no-unused-vars
-      "vars": "local",
-      "args": "after-used"
-    }],
-    "no-use-before-define": 2,       // http://eslint.org/docs/rules/no-use-before-define
-
-/**
- * Possible errors
- */
-    "comma-dangle": [2, "always-multiline"],    // http://eslint.org/docs/rules/comma-dangle
-    "no-cond-assign": [2, "always"], // http://eslint.org/docs/rules/no-cond-assign
-    "no-console": 1,                 // http://eslint.org/docs/rules/no-console
-    "no-debugger": 1,                // http://eslint.org/docs/rules/no-debugger
-    "no-alert": 1,                   // http://eslint.org/docs/rules/no-alert
-    "no-constant-condition": 1,      // http://eslint.org/docs/rules/no-constant-condition
-    "no-dupe-keys": 2,               // http://eslint.org/docs/rules/no-dupe-keys
-    "no-duplicate-case": 2,          // http://eslint.org/docs/rules/no-duplicate-case
-    "no-empty": 2,                   // http://eslint.org/docs/rules/no-empty
-    "no-ex-assign": 2,               // http://eslint.org/docs/rules/no-ex-assign
-    "no-extra-boolean-cast": 0,      // http://eslint.org/docs/rules/no-extra-boolean-cast
-    "no-extra-semi": 2,              // http://eslint.org/docs/rules/no-extra-semi
-    "no-func-assign": 2,             // http://eslint.org/docs/rules/no-func-assign
-    "no-inner-declarations": 2,      // http://eslint.org/docs/rules/no-inner-declarations
-    "no-invalid-regexp": 2,          // http://eslint.org/docs/rules/no-invalid-regexp
-    "no-irregular-whitespace": 2,    // http://eslint.org/docs/rules/no-irregular-whitespace
-    "no-obj-calls": 2,               // http://eslint.org/docs/rules/no-obj-calls
-    "no-sparse-arrays": 2,           // http://eslint.org/docs/rules/no-sparse-arrays
-    "no-unreachable": 2,             // http://eslint.org/docs/rules/no-unreachable
-    "use-isnan": 2,                  // http://eslint.org/docs/rules/use-isnan
-    "block-scoped-var": 2,           // http://eslint.org/docs/rules/block-scoped-var
-
-/**
- * Best practices
- */
-    "consistent-return": 2,          // http://eslint.org/docs/rules/consistent-return
-    "curly": [2, "multi-line"],      // http://eslint.org/docs/rules/curly
-    "default-case": 2,               // http://eslint.org/docs/rules/default-case
-    "dot-notation": [2, {            // http://eslint.org/docs/rules/dot-notation
-      "allowKeywords": true
-    }],
-    "eqeqeq": 2,                     // http://eslint.org/docs/rules/eqeqeq
-    "guard-for-in": 2,               // http://eslint.org/docs/rules/guard-for-in
-    "no-caller": 2,                  // http://eslint.org/docs/rules/no-caller
-    "no-else-return": 2,             // http://eslint.org/docs/rules/no-else-return
-    "no-eq-null": 2,                 // http://eslint.org/docs/rules/no-eq-null
-    "no-eval": 2,                    // http://eslint.org/docs/rules/no-eval
-    "no-extend-native": 2,           // http://eslint.org/docs/rules/no-extend-native
-    "no-extra-bind": 2,              // http://eslint.org/docs/rules/no-extra-bind
-    "no-fallthrough": 2,             // http://eslint.org/docs/rules/no-fallthrough
-    "no-floating-decimal": 2,        // http://eslint.org/docs/rules/no-floating-decimal
-    "no-implied-eval": 2,            // http://eslint.org/docs/rules/no-implied-eval
-    "no-lone-blocks": 2,             // http://eslint.org/docs/rules/no-lone-blocks
-    "no-loop-func": 2,               // http://eslint.org/docs/rules/no-loop-func
-    "no-multi-str": 2,               // http://eslint.org/docs/rules/no-multi-str
-    "no-native-reassign": 2,         // http://eslint.org/docs/rules/no-native-reassign
-    "no-new": 2,                     // http://eslint.org/docs/rules/no-new
-    "no-new-func": 2,                // http://eslint.org/docs/rules/no-new-func
-    "no-new-wrappers": 2,            // http://eslint.org/docs/rules/no-new-wrappers
-    "no-octal": 2,                   // http://eslint.org/docs/rules/no-octal
-    "no-octal-escape": 2,            // http://eslint.org/docs/rules/no-octal-escape
-    "no-param-reassign": 2,          // http://eslint.org/docs/rules/no-param-reassign
-    "no-proto": 2,                   // http://eslint.org/docs/rules/no-proto
-    "no-redeclare": 2,               // http://eslint.org/docs/rules/no-redeclare
-    "no-return-assign": 2,           // http://eslint.org/docs/rules/no-return-assign
-    "no-script-url": 2,              // http://eslint.org/docs/rules/no-script-url
-    "no-self-compare": 2,            // http://eslint.org/docs/rules/no-self-compare
-    "no-sequences": 2,               // http://eslint.org/docs/rules/no-sequences
-    "no-throw-literal": 2,           // http://eslint.org/docs/rules/no-throw-literal
-    "no-with": 2,                    // http://eslint.org/docs/rules/no-with
-    "radix": 2,                      // http://eslint.org/docs/rules/radix
-    "vars-on-top": 2,                // http://eslint.org/docs/rules/vars-on-top
-    "wrap-iife": [2, "any"],         // http://eslint.org/docs/rules/wrap-iife
-    "yoda": 2,                       // http://eslint.org/docs/rules/yoda
-
-/**
- * Style
- */
-    "indent": [2, 2],                // http://eslint.org/docs/rules/indent
-    "brace-style": [2,               // http://eslint.org/docs/rules/brace-style
-      "1tbs", {
-      "allowSingleLine": true
-    }],
-    "quotes": [
-      2, "single", "avoid-escape"    // http://eslint.org/docs/rules/quotes
-    ],
-    "camelcase": [2, {               // http://eslint.org/docs/rules/camelcase
-      "properties": "never"
-    }],
-    "comma-spacing": [2, {           // http://eslint.org/docs/rules/comma-spacing
-      "before": false,
-      "after": true
-    }],
-    "comma-style": [2, "last"],      // http://eslint.org/docs/rules/comma-style
-    "eol-last": 2,                   // http://eslint.org/docs/rules/eol-last
-    "func-names": 1,                 // http://eslint.org/docs/rules/func-names
-    "key-spacing": [2, {             // http://eslint.org/docs/rules/key-spacing
-        "beforeColon": false,
-        "afterColon": true
-    }],
-    "new-cap": [2, {                 // http://eslint.org/docs/rules/new-cap
-      "newIsCap": true
-    }],
-    "no-multiple-empty-lines": [2, { // http://eslint.org/docs/rules/no-multiple-empty-lines
-      "max": 2
-    }],
-    "no-nested-ternary": 2,          // http://eslint.org/docs/rules/no-nested-ternary
-    "no-new-object": 2,              // http://eslint.org/docs/rules/no-new-object
-    "no-spaced-func": 2,             // http://eslint.org/docs/rules/no-spaced-func
-    "no-trailing-spaces": 2,         // http://eslint.org/docs/rules/no-trailing-spaces
-    "no-extra-parens": [2, "functions"], // http://eslint.org/docs/rules/no-extra-parens
-    "no-underscore-dangle": 0,       // http://eslint.org/docs/rules/no-underscore-dangle
-    "one-var": [2, "never"],         // http://eslint.org/docs/rules/one-var
-    "padded-blocks": [2, "never"],   // http://eslint.org/docs/rules/padded-blocks
-    "semi": [2, "always"],           // http://eslint.org/docs/rules/semi
-    "semi-spacing": [2, {            // http://eslint.org/docs/rules/semi-spacing
-      "before": false,
-      "after": true
-    }],
-    "space-after-keywords": 2,       // http://eslint.org/docs/rules/space-after-keywords
-    "space-before-blocks": 2,        // http://eslint.org/docs/rules/space-before-blocks
-    "space-before-function-paren": [2, "never"], // http://eslint.org/docs/rules/space-before-function-paren
-    "space-infix-ops": 2,            // http://eslint.org/docs/rules/space-infix-ops
-    "space-return-throw-case": 2,    // http://eslint.org/docs/rules/space-return-throw-case
-    "spaced-comment": [2, "always",  {// http://eslint.org/docs/rules/spaced-comment
-      "exceptions": ["-", "+"],
-      "markers": ["=", "!"]           // space here to support sprockets directives
-    }],
-
-/**
- * JSX style
- */
-    "react/display-name": 0,         // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/display-name.md
-    "react/jsx-boolean-value": 2,    // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/jsx-boolean-value.md
-    "react/jsx-quotes": [2, "double"], // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/jsx-quotes.md
-    "react/jsx-no-undef": 2,         // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/jsx-no-undef.md
-    "react/jsx-sort-props": 0,       // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/jsx-sort-props.md
-    "react/jsx-sort-prop-types": 0,  // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/jsx-sort-prop-types.md
-    "react/jsx-uses-react": 2,       // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/jsx-uses-react.md
-    "react/jsx-uses-vars": 2,        // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/jsx-uses-vars.md
-    "react/no-did-mount-set-state": [2, "allow-in-func"], // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/no-did-mount-set-state.md
-    "react/no-did-update-set-state": 2, // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/no-did-update-set-state.md
-    "react/no-multi-comp": 2,        // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/no-multi-comp.md
-    "react/no-unknown-property": 2,  // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/no-unknown-property.md
-    "react/prop-types": 2,           // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/prop-types.md
-    "react/react-in-jsx-scope": 2,   // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/react-in-jsx-scope.md
-    "react/self-closing-comp": 2,    // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/self-closing-comp.md
-    "react/wrap-multilines": 2,      // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/wrap-multilines.md
-    "react/sort-comp": [2, {         // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/sort-comp.md
-      "order": [
-        "displayName",
-        "propTypes",
-        "contextTypes",
-        "childContextTypes",
-        "mixins",
-        "statics",
-        "defaultProps",
-        "constructor",
-        "getDefaultProps",
-        "getInitialState",
-        "getChildContext",
-        "componentWillMount",
-        "componentDidMount",
-        "componentWillReceiveProps",
-        "shouldComponentUpdate",
-        "componentWillUpdate",
-        "componentDidUpdate",
-        "componentWillUnmount",
-        "/^on.+$/",
-        "/^get.+$/",
-        "/^render.+$/",
-        "render"
-      ]
-    }]
-  }
-}
diff --git a/packages/eslint-config-airbnb/index.js b/packages/eslint-config-airbnb/index.js
index e69410e3c7..35bc6b07d2 100644
--- a/packages/eslint-config-airbnb/index.js
+++ b/packages/eslint-config-airbnb/index.js
@@ -1,11 +1,220 @@
-var path = require('path');
-var stripComments = require('strip-json-comments');
-var fs = require('fs');
+module.exports = {
+  'parser': 'babel-eslint',          // https://github.com/babel/babel-eslint
+  'plugins': [
+    'react'                          // https://github.com/yannickcr/eslint-plugin-react
+  ],
+  'env': {                           // http://eslint.org/docs/user-guide/configuring.html#specifying-environments
+    'browser': true,                 // browser global variables
+    'node': true                     // Node.js global variables and Node.js-specific rules
+  },
+  'ecmaFeatures': {
+    'arrowFunctions': true,
+    'blockBindings': true,
+    'classes': true,
+    'defaultParams': true,
+    'destructuring': true,
+    'forOf': true,
+    'generators': false,
+    'modules': true,
+    'objectLiteralComputedProperties': true,
+    'objectLiteralDuplicateProperties': false,
+    'objectLiteralShorthandMethods': true,
+    'objectLiteralShorthandProperties': true,
+    'spread': true,
+    'superInFunctions': true,
+    'templateStrings': true,
+    'jsx': true
+  },
+  'rules': {
+/**
+ * Strict mode
+ */
+    // babel inserts 'use strict'; for us
+    'strict': [2, 'never'],          // http://eslint.org/docs/rules/strict
 
-// you could do this all at once if you wanted to look cool
-var filename = path.join(__dirname, '.eslintrc');
-var data = fs.readFileSync(filename, {encoding: 'utf-8'});
-var dataWithoutComments = stripComments(data);
-var parsed = JSON.parse(dataWithoutComments);
+/**
+ * ES6
+ */
+    'no-var': 2,                     // http://eslint.org/docs/rules/no-var
+    'prefer-const': 2,               // http://eslint.org/docs/rules/prefer-const
 
-module.exports = parsed;
+/**
+ * Variables
+ */
+    'no-shadow': 2,                  // http://eslint.org/docs/rules/no-shadow
+    'no-shadow-restricted-names': 2, // http://eslint.org/docs/rules/no-shadow-restricted-names
+    'no-unused-vars': [2, {          // http://eslint.org/docs/rules/no-unused-vars
+      'vars': 'local',
+      'args': 'after-used'
+    }],
+    'no-use-before-define': 2,       // http://eslint.org/docs/rules/no-use-before-define
+
+/**
+ * Possible errors
+ */
+    'comma-dangle': [2, 'always-multiline'],    // http://eslint.org/docs/rules/comma-dangle
+    'no-cond-assign': [2, 'always'], // http://eslint.org/docs/rules/no-cond-assign
+    'no-console': 1,                 // http://eslint.org/docs/rules/no-console
+    'no-debugger': 1,                // http://eslint.org/docs/rules/no-debugger
+    'no-alert': 1,                   // http://eslint.org/docs/rules/no-alert
+    'no-constant-condition': 1,      // http://eslint.org/docs/rules/no-constant-condition
+    'no-dupe-keys': 2,               // http://eslint.org/docs/rules/no-dupe-keys
+    'no-duplicate-case': 2,          // http://eslint.org/docs/rules/no-duplicate-case
+    'no-empty': 2,                   // http://eslint.org/docs/rules/no-empty
+    'no-ex-assign': 2,               // http://eslint.org/docs/rules/no-ex-assign
+    'no-extra-boolean-cast': 0,      // http://eslint.org/docs/rules/no-extra-boolean-cast
+    'no-extra-semi': 2,              // http://eslint.org/docs/rules/no-extra-semi
+    'no-func-assign': 2,             // http://eslint.org/docs/rules/no-func-assign
+    'no-inner-declarations': 2,      // http://eslint.org/docs/rules/no-inner-declarations
+    'no-invalid-regexp': 2,          // http://eslint.org/docs/rules/no-invalid-regexp
+    'no-irregular-whitespace': 2,    // http://eslint.org/docs/rules/no-irregular-whitespace
+    'no-obj-calls': 2,               // http://eslint.org/docs/rules/no-obj-calls
+    'no-sparse-arrays': 2,           // http://eslint.org/docs/rules/no-sparse-arrays
+    'no-unreachable': 2,             // http://eslint.org/docs/rules/no-unreachable
+    'use-isnan': 2,                  // http://eslint.org/docs/rules/use-isnan
+    'block-scoped-var': 2,           // http://eslint.org/docs/rules/block-scoped-var
+
+/**
+ * Best practices
+ */
+    'consistent-return': 2,          // http://eslint.org/docs/rules/consistent-return
+    'curly': [2, 'multi-line'],      // http://eslint.org/docs/rules/curly
+    'default-case': 2,               // http://eslint.org/docs/rules/default-case
+    'dot-notation': [2, {            // http://eslint.org/docs/rules/dot-notation
+      'allowKeywords': true
+    }],
+    'eqeqeq': 2,                     // http://eslint.org/docs/rules/eqeqeq
+    'guard-for-in': 2,               // http://eslint.org/docs/rules/guard-for-in
+    'no-caller': 2,                  // http://eslint.org/docs/rules/no-caller
+    'no-else-return': 2,             // http://eslint.org/docs/rules/no-else-return
+    'no-eq-null': 2,                 // http://eslint.org/docs/rules/no-eq-null
+    'no-eval': 2,                    // http://eslint.org/docs/rules/no-eval
+    'no-extend-native': 2,           // http://eslint.org/docs/rules/no-extend-native
+    'no-extra-bind': 2,              // http://eslint.org/docs/rules/no-extra-bind
+    'no-fallthrough': 2,             // http://eslint.org/docs/rules/no-fallthrough
+    'no-floating-decimal': 2,        // http://eslint.org/docs/rules/no-floating-decimal
+    'no-implied-eval': 2,            // http://eslint.org/docs/rules/no-implied-eval
+    'no-lone-blocks': 2,             // http://eslint.org/docs/rules/no-lone-blocks
+    'no-loop-func': 2,               // http://eslint.org/docs/rules/no-loop-func
+    'no-multi-str': 2,               // http://eslint.org/docs/rules/no-multi-str
+    'no-native-reassign': 2,         // http://eslint.org/docs/rules/no-native-reassign
+    'no-new': 2,                     // http://eslint.org/docs/rules/no-new
+    'no-new-func': 2,                // http://eslint.org/docs/rules/no-new-func
+    'no-new-wrappers': 2,            // http://eslint.org/docs/rules/no-new-wrappers
+    'no-octal': 2,                   // http://eslint.org/docs/rules/no-octal
+    'no-octal-escape': 2,            // http://eslint.org/docs/rules/no-octal-escape
+    'no-param-reassign': 2,          // http://eslint.org/docs/rules/no-param-reassign
+    'no-proto': 2,                   // http://eslint.org/docs/rules/no-proto
+    'no-redeclare': 2,               // http://eslint.org/docs/rules/no-redeclare
+    'no-return-assign': 2,           // http://eslint.org/docs/rules/no-return-assign
+    'no-script-url': 2,              // http://eslint.org/docs/rules/no-script-url
+    'no-self-compare': 2,            // http://eslint.org/docs/rules/no-self-compare
+    'no-sequences': 2,               // http://eslint.org/docs/rules/no-sequences
+    'no-throw-literal': 2,           // http://eslint.org/docs/rules/no-throw-literal
+    'no-with': 2,                    // http://eslint.org/docs/rules/no-with
+    'radix': 2,                      // http://eslint.org/docs/rules/radix
+    'vars-on-top': 2,                // http://eslint.org/docs/rules/vars-on-top
+    'wrap-iife': [2, 'any'],         // http://eslint.org/docs/rules/wrap-iife
+    'yoda': 2,                       // http://eslint.org/docs/rules/yoda
+
+/**
+ * Style
+ */
+    'indent': [2, 2],                // http://eslint.org/docs/rules/indent
+    'brace-style': [2,               // http://eslint.org/docs/rules/brace-style
+      '1tbs', {
+      'allowSingleLine': true
+    }],
+    'quotes': [
+      2, 'single', 'avoid-escape'    // http://eslint.org/docs/rules/quotes
+    ],
+    'camelcase': [2, {               // http://eslint.org/docs/rules/camelcase
+      'properties': 'never'
+    }],
+    'comma-spacing': [2, {           // http://eslint.org/docs/rules/comma-spacing
+      'before': false,
+      'after': true
+    }],
+    'comma-style': [2, 'last'],      // http://eslint.org/docs/rules/comma-style
+    'eol-last': 2,                   // http://eslint.org/docs/rules/eol-last
+    'func-names': 1,                 // http://eslint.org/docs/rules/func-names
+    'key-spacing': [2, {             // http://eslint.org/docs/rules/key-spacing
+        'beforeColon': false,
+        'afterColon': true
+    }],
+    'new-cap': [2, {                 // http://eslint.org/docs/rules/new-cap
+      'newIsCap': true
+    }],
+    'no-multiple-empty-lines': [2, { // http://eslint.org/docs/rules/no-multiple-empty-lines
+      'max': 2
+    }],
+    'no-nested-ternary': 2,          // http://eslint.org/docs/rules/no-nested-ternary
+    'no-new-object': 2,              // http://eslint.org/docs/rules/no-new-object
+    'no-spaced-func': 2,             // http://eslint.org/docs/rules/no-spaced-func
+    'no-trailing-spaces': 2,         // http://eslint.org/docs/rules/no-trailing-spaces
+    'no-extra-parens': [2, 'functions'], // http://eslint.org/docs/rules/no-extra-parens
+    'no-underscore-dangle': 0,       // http://eslint.org/docs/rules/no-underscore-dangle
+    'one-var': [2, 'never'],         // http://eslint.org/docs/rules/one-var
+    'padded-blocks': [2, 'never'],   // http://eslint.org/docs/rules/padded-blocks
+    'semi': [2, 'always'],           // http://eslint.org/docs/rules/semi
+    'semi-spacing': [2, {            // http://eslint.org/docs/rules/semi-spacing
+      'before': false,
+      'after': true
+    }],
+    'space-after-keywords': 2,       // http://eslint.org/docs/rules/space-after-keywords
+    'space-before-blocks': 2,        // http://eslint.org/docs/rules/space-before-blocks
+    'space-before-function-paren': [2, 'never'], // http://eslint.org/docs/rules/space-before-function-paren
+    'space-infix-ops': 2,            // http://eslint.org/docs/rules/space-infix-ops
+    'space-return-throw-case': 2,    // http://eslint.org/docs/rules/space-return-throw-case
+    'spaced-comment': [2, 'always',  {// http://eslint.org/docs/rules/spaced-comment
+      'exceptions': ['-', '+'],
+      'markers': ['=', '!']           // space here to support sprockets directives
+    }],
+
+/**
+ * JSX style
+ */
+    'react/display-name': 0,         // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/display-name.md
+    'react/jsx-boolean-value': 2,    // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/jsx-boolean-value.md
+    'react/jsx-quotes': [2, 'double'], // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/jsx-quotes.md
+    'react/jsx-no-undef': 2,         // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/jsx-no-undef.md
+    'react/jsx-sort-props': 0,       // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/jsx-sort-props.md
+    'react/jsx-sort-prop-types': 0,  // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/jsx-sort-prop-types.md
+    'react/jsx-uses-react': 2,       // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/jsx-uses-react.md
+    'react/jsx-uses-vars': 2,        // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/jsx-uses-vars.md
+    'react/no-did-mount-set-state': [2, 'allow-in-func'], // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/no-did-mount-set-state.md
+    'react/no-did-update-set-state': 2, // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/no-did-update-set-state.md
+    'react/no-multi-comp': 2,        // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/no-multi-comp.md
+    'react/no-unknown-property': 2,  // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/no-unknown-property.md
+    'react/prop-types': 2,           // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/prop-types.md
+    'react/react-in-jsx-scope': 2,   // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/react-in-jsx-scope.md
+    'react/self-closing-comp': 2,    // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/self-closing-comp.md
+    'react/wrap-multilines': 2,      // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/wrap-multilines.md
+    'react/sort-comp': [2, {         // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/sort-comp.md
+      'order': [
+        'displayName',
+        'propTypes',
+        'contextTypes',
+        'childContextTypes',
+        'mixins',
+        'statics',
+        'defaultProps',
+        'constructor',
+        'getDefaultProps',
+        'getInitialState',
+        'getChildContext',
+        'componentWillMount',
+        'componentDidMount',
+        'componentWillReceiveProps',
+        'shouldComponentUpdate',
+        'componentWillUpdate',
+        'componentDidUpdate',
+        'componentWillUnmount',
+        '/^on.+$/',
+        '/^get.+$/',
+        '/^render.+$/',
+        'render'
+      ]
+    }]
+  }
+};
diff --git a/packages/eslint-config-airbnb/package.json b/packages/eslint-config-airbnb/package.json
index bc9071dcc5..a082518584 100644
--- a/packages/eslint-config-airbnb/package.json
+++ b/packages/eslint-config-airbnb/package.json
@@ -23,8 +23,5 @@
   "bugs": {
     "url": "https://github.com/airbnb/javascript/issues"
   },
-  "homepage": "https://github.com/airbnb/javascript",
-  "dependencies": {
-    "strip-json-comments": "1.0.2"
-  }
+  "homepage": "https://github.com/airbnb/javascript"
 }

From e8b87a5e2164b77ca12d5a534e45d15551fbef25 Mon Sep 17 00:00:00 2001
From: Christopher Banh <chrisngobanh@gmail.com>
Date: Sun, 9 Aug 2015 19:49:34 -0700
Subject: [PATCH 0278/1591] Updated 25.1 to include a case with a hyphen in the
 classname

---
 README.md | 3 +++
 1 file changed, 3 insertions(+)

diff --git a/README.md b/README.md
index 0e909159da..6c43b2d12c 100644
--- a/README.md
+++ b/README.md
@@ -1874,6 +1874,9 @@
 
     // good
     const $sidebar = $('.sidebar');
+
+    // good
+    const $sidebarBtn = $('.sidebar-btn');
     ```
 
   - [25.2](#25.2) <a name='25.2'></a> Cache jQuery lookups.

From 1e2ed0b0699e1cbe1a203b7cd955795ce0992ebe Mon Sep 17 00:00:00 2001
From: allx <alexey@udivankin.ru>
Date: Mon, 10 Aug 2015 14:26:43 +0300
Subject: [PATCH 0279/1591] Update README.md

deleted unnecessary whitespace after property key
---
 README.md | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/README.md b/README.md
index 0e909159da..268e78701e 100644
--- a/README.md
+++ b/README.md
@@ -1852,7 +1852,7 @@
 
     ```javascript
     // good
-    $(this).trigger('listingUpdated', { listingId : listing.id });
+    $(this).trigger('listingUpdated', { listingId: listing.id });
 
     ...
 

From 52a334404390f8648e21015e409aefe1f983e5db Mon Sep 17 00:00:00 2001
From: Choon-ho Yoon <choonho.yoon.b@gmail.com>
Date: Tue, 11 Aug 2015 17:27:02 -0300
Subject: [PATCH 0280/1591] Add ComparaOnline to 'In The Wild' List

---
 README.md | 1 +
 1 file changed, 1 insertion(+)

diff --git a/README.md b/README.md
index 461abe1857..5c8e653f36 100644
--- a/README.md
+++ b/README.md
@@ -2071,6 +2071,7 @@
   - **Avalara**: [avalara/javascript](https://github.com/avalara/javascript)
   - **Billabong**: [billabong/javascript](https://github.com/billabong/javascript)
   - **Blendle**: [blendle/javascript](https://github.com/blendle/javascript)
+  - **ComparaOnline**: [comparaonline/javascript](https://github.com/comparaonline/javascript)
   - **Compass Learning**: [compasslearning/javascript-style-guide](https://github.com/compasslearning/javascript-style-guide)
   - **DailyMotion**: [dailymotion/javascript](https://github.com/dailymotion/javascript)
   - **Digitpaint** [digitpaint/javascript](https://github.com/digitpaint/javascript)

From 4957071107a26a4f950c6d180188e5d000d67836 Mon Sep 17 00:00:00 2001
From: Tomek Wiszniewski <t.wiszniewski@gmail.com>
Date: Wed, 12 Aug 2015 11:04:27 +0200
Subject: [PATCH 0281/1591] Allow implicit return + one multiline expression

---
 README.md | 25 ++++++++++++++++++++-----
 1 file changed, 20 insertions(+), 5 deletions(-)

diff --git a/README.md b/README.md
index 0ec7fec17e..48bb3b2fcd 100644
--- a/README.md
+++ b/README.md
@@ -602,7 +602,9 @@
     });
     ```
 
-  - [8.2](#8.2) <a name='8.2'></a> If the function body fits on one line and there is only a single argument, feel free to omit the braces and parentheses, and use the implicit return. Otherwise, add the parentheses, braces, and use a `return` statement.
+  - [8.2](#8.2) <a name='8.2'></a> If the function body consists of a single expression, feel free to omit the braces and use the implicit return. Otherwise use a `return` statement.
+
+    In case the expression spans over multiple lines, wrap it in parentheses for better readability.
 
   > Why? Syntactic sugar. It reads well when multiple functions are chained together.
 
@@ -610,12 +612,25 @@
 
     ```javascript
     // good
-    [1, 2, 3].map(x => x * x);
+    [1, 2, 3].map(number => `A string containing the ${number}.`);
 
     // good
-    [1, 2, 3].reduce((total, n) => {
-      return total + n;
-    }, 0);
+    [1, 2, 3].map(number => (
+      `As time went by, the string containing the ${number} became much ` +
+      'longer. So we needed to break it over multiple lines.'
+    ));
+
+    // bad
+    [1, 2, 3].map(number => {
+      let nextNumber = number + 1;
+      `A string containing the ${nextNumber}.`;
+    });
+
+    // good
+    [1, 2, 3].map(number => {
+      let nextNumber = number + 1;
+      return `A string containing the ${nextNumber}.`;
+    });
     ```
 
 **[⬆ back to top](#table-of-contents)**

From 5634c4c88e5293e83cccf5dd9055666e9400c1de Mon Sep 17 00:00:00 2001
From: Tomek Wiszniewski <t.wiszniewski@gmail.com>
Date: Wed, 12 Aug 2015 11:04:50 +0200
Subject: [PATCH 0282/1591] Update existing example

---
 README.md | 4 +---
 1 file changed, 1 insertion(+), 3 deletions(-)

diff --git a/README.md b/README.md
index 48bb3b2fcd..9b362d9737 100644
--- a/README.md
+++ b/README.md
@@ -597,9 +597,7 @@
     });
 
     // good
-    [1, 2, 3].map((x) => {
-      return x * x;
-    });
+    [1, 2, 3].map(x => x * x);
     ```
 
   - [8.2](#8.2) <a name='8.2'></a> If the function body consists of a single expression, feel free to omit the braces and use the implicit return. Otherwise use a `return` statement.

From 5b8b56ece733543787c07d60c5f93efc5bbb2b6f Mon Sep 17 00:00:00 2001
From: Tomek Wiszniewski <t.wiszniewski@gmail.com>
Date: Wed, 12 Aug 2015 11:09:14 +0200
Subject: [PATCH 0283/1591] Upgrade a note about parens to another rule

---
 README.md | 12 ++++++++++++
 1 file changed, 12 insertions(+)

diff --git a/README.md b/README.md
index 9b362d9737..fb9020ca72 100644
--- a/README.md
+++ b/README.md
@@ -631,6 +631,18 @@
     });
     ```
 
+  - [8.3](#8.3) <a name='8.3'></a> If your function only takes a single argument, feel free to omit the parentheses.
+
+    > Why? Less visual clutter.
+
+    ```js
+    // good
+    [1, 2, 3].map(x => x * x);
+
+    // good
+    [1, 2, 3].reduce((y, x) => x + y);
+    ```
+
 **[⬆ back to top](#table-of-contents)**
 
 

From 3aabe2c6934a2fef474cde5f0e48172b45979fc5 Mon Sep 17 00:00:00 2001
From: Tomek Wiszniewski <t.wiszniewski@gmail.com>
Date: Thu, 13 Aug 2015 08:43:33 +0200
Subject: [PATCH 0284/1591] Upgrade half of 8.2 to another rule

---
 README.md | 29 ++++++++++++++++++++---------
 1 file changed, 20 insertions(+), 9 deletions(-)

diff --git a/README.md b/README.md
index fb9020ca72..8e0863ca51 100644
--- a/README.md
+++ b/README.md
@@ -602,8 +602,6 @@
 
   - [8.2](#8.2) <a name='8.2'></a> If the function body consists of a single expression, feel free to omit the braces and use the implicit return. Otherwise use a `return` statement.
 
-    In case the expression spans over multiple lines, wrap it in parentheses for better readability.
-
   > Why? Syntactic sugar. It reads well when multiple functions are chained together.
 
   > Why not? If you plan on returning an object.
@@ -612,12 +610,6 @@
     // good
     [1, 2, 3].map(number => `A string containing the ${number}.`);
 
-    // good
-    [1, 2, 3].map(number => (
-      `As time went by, the string containing the ${number} became much ` +
-      'longer. So we needed to break it over multiple lines.'
-    ));
-
     // bad
     [1, 2, 3].map(number => {
       let nextNumber = number + 1;
@@ -631,7 +623,26 @@
     });
     ```
 
-  - [8.3](#8.3) <a name='8.3'></a> If your function only takes a single argument, feel free to omit the parentheses.
+  - [8.3](#8.3) <a name='8.3'></a> In case the expression spans over multiple lines, wrap it in parentheses for better readability.
+
+  > Why? It shows clearly where the function starts and ends.
+
+    ```js
+    // bad
+    [1, 2, 3].map(number => 'As time went by, the string containing the ' +
+      `${number} became much longer. So we needed to break it over multiple ` +
+      'lines.'
+    );
+
+    // good
+    [1, 2, 3].map(number => (
+      `As time went by, the string containing the ${number} became much ` +
+      'longer. So we needed to break it over multiple lines.'
+    ));
+    ```
+
+
+  - [8.4](#8.4) <a name='8.4'></a> If your function only takes a single argument, feel free to omit the parentheses.
 
     > Why? Less visual clutter.
 

From 60360bdedd1c282502af0264130cfde9d5666c17 Mon Sep 17 00:00:00 2001
From: Tomek Wiszniewski <t.wiszniewski@gmail.com>
Date: Thu, 13 Aug 2015 08:43:59 +0200
Subject: [PATCH 0285/1591] Match 8.4 indentation to other rules

---
 README.md | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/README.md b/README.md
index 8e0863ca51..3b1bba8503 100644
--- a/README.md
+++ b/README.md
@@ -644,7 +644,7 @@
 
   - [8.4](#8.4) <a name='8.4'></a> If your function only takes a single argument, feel free to omit the parentheses.
 
-    > Why? Less visual clutter.
+  > Why? Less visual clutter.
 
     ```js
     // good

From 417f9896d0ae1088aafbc5c223ca3596cb9f4811 Mon Sep 17 00:00:00 2001
From: Tomek Wiszniewski <t.wiszniewski@gmail.com>
Date: Thu, 13 Aug 2015 08:47:48 +0200
Subject: [PATCH 0286/1591] Bring back explicit return in 8.1 example

---
 README.md | 8 ++++++--
 1 file changed, 6 insertions(+), 2 deletions(-)

diff --git a/README.md b/README.md
index 3b1bba8503..724a4deab9 100644
--- a/README.md
+++ b/README.md
@@ -593,11 +593,15 @@
     ```javascript
     // bad
     [1, 2, 3].map(function (x) {
-      return x * x;
+      const y = x + 1;
+      return x * y;
     });
 
     // good
-    [1, 2, 3].map(x => x * x);
+    [1, 2, 3].map((x) => {
+      const y = x + 1;
+      return x * y;
+    });
     ```
 
   - [8.2](#8.2) <a name='8.2'></a> If the function body consists of a single expression, feel free to omit the braces and use the implicit return. Otherwise use a `return` statement.

From bfbb074ac95e3b277cda3b6a168d6f2c73d845b5 Mon Sep 17 00:00:00 2001
From: Tomek Wiszniewski <t.wiszniewski@gmail.com>
Date: Thu, 13 Aug 2015 08:51:04 +0200
Subject: [PATCH 0287/1591] Oops, keep to 13.1!

---
 README.md | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/README.md b/README.md
index 724a4deab9..75aff34270 100644
--- a/README.md
+++ b/README.md
@@ -616,13 +616,13 @@
 
     // bad
     [1, 2, 3].map(number => {
-      let nextNumber = number + 1;
+      const nextNumber = number + 1;
       `A string containing the ${nextNumber}.`;
     });
 
     // good
     [1, 2, 3].map(number => {
-      let nextNumber = number + 1;
+      const nextNumber = number + 1;
       return `A string containing the ${nextNumber}.`;
     });
     ```

From c4fdbc2742367ac33d4297de525f8fa246f5dae6 Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Mon, 17 Aug 2015 20:42:58 -0700
Subject: [PATCH 0288/1591] Recommend exporting `propTypes` as a named export

By exporting `propTypes` as a named export *as well* as attaching them to the "class", they can be explicitly imported by tests and other components in a way that aligns with the future ES6 module dependency graph, rather than as an arbitrary property that isn't statically verifiable. Doing both is great imo.

Thoughts?
---
 react/README.md | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/react/README.md b/react/README.md
index 3c01981f8c..8d02bcca7a 100644
--- a/react/README.md
+++ b/react/README.md
@@ -262,7 +262,7 @@
   ```javascript
   import React, { Component, PropTypes } from 'react';
   
-  const propTypes = {
+  export const propTypes = {
     id: PropTypes.number.isRequired,
     url: PropTypes.string.isRequired,
     text: PropTypes.string,

From 0068cc1d6ef086e605e0421de09d9af7540a0b17 Mon Sep 17 00:00:00 2001
From: Slava Shklyaev <shk.slava@gmail.com>
Date: Tue, 18 Aug 2015 20:14:24 +0300
Subject: [PATCH 0289/1591] Put custom component methods before render methods

---
 packages/eslint-config-airbnb/index.js | 1 +
 1 file changed, 1 insertion(+)

diff --git a/packages/eslint-config-airbnb/index.js b/packages/eslint-config-airbnb/index.js
index 35bc6b07d2..0d87e4ad25 100644
--- a/packages/eslint-config-airbnb/index.js
+++ b/packages/eslint-config-airbnb/index.js
@@ -211,6 +211,7 @@ module.exports = {
         'componentDidUpdate',
         'componentWillUnmount',
         '/^on.+$/',
+        'everything-else',
         '/^get.+$/',
         '/^render.+$/',
         'render'

From 6175c67a79af6fab46898b0cef16e474ec40aa1d Mon Sep 17 00:00:00 2001
From: Tom <tayre@blackberry.com>
Date: Tue, 18 Aug 2015 14:54:29 -0400
Subject: [PATCH 0290/1591] s/Javascript/JavaScript

---
 README.md | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/README.md b/README.md
index 6b0ffdda6c..b5ff9eb737 100644
--- a/README.md
+++ b/README.md
@@ -42,7 +42,7 @@
   1. [In the Wild](#in-the-wild)
   1. [Translation](#translation)
   1. [The JavaScript Style Guide Guide](#the-javascript-style-guide-guide)
-  1. [Chat With Us About Javascript](#chat-with-us-about-javascript)
+  1. [Chat With Us About JavaScript](#chat-with-us-about-javascript)
   1. [Contributors](#contributors)
   1. [License](#license)
 

From 048e22ea989120dc9b6afe715dc24e7762504aa8 Mon Sep 17 00:00:00 2001
From: Jake Teton-Landis <jake.tl@airbnb.com>
Date: Tue, 18 Aug 2015 18:02:31 -0700
Subject: [PATCH 0291/1591] somewhat modularize eslint-config-airbnb; add some
 tests

---
 packages/eslint-config-airbnb/base/index.js   | 171 +++++++++++++
 packages/eslint-config-airbnb/index.js        | 228 +-----------------
 packages/eslint-config-airbnb/package.json    |  12 +-
 packages/eslint-config-airbnb/react.js        |  36 +++
 .../eslint-config-airbnb/test/test-base.js    |  13 +
 .../test/test-react-order.js                  |  83 +++++++
 6 files changed, 323 insertions(+), 220 deletions(-)
 create mode 100644 packages/eslint-config-airbnb/base/index.js
 create mode 100644 packages/eslint-config-airbnb/react.js
 create mode 100644 packages/eslint-config-airbnb/test/test-base.js
 create mode 100644 packages/eslint-config-airbnb/test/test-react-order.js

diff --git a/packages/eslint-config-airbnb/base/index.js b/packages/eslint-config-airbnb/base/index.js
new file mode 100644
index 0000000000..c47c2c45dd
--- /dev/null
+++ b/packages/eslint-config-airbnb/base/index.js
@@ -0,0 +1,171 @@
+module.exports = {
+  'parser': 'babel-eslint',          // https://github.com/babel/babel-eslint
+  'env': {                           // http://eslint.org/docs/user-guide/configuring.html#specifying-environments
+    'browser': true,                 // browser global variables
+    'node': true                     // Node.js global variables and Node.js-specific rules
+  },
+  'ecmaFeatures': {
+    'arrowFunctions': true,
+    'blockBindings': true,
+    'classes': true,
+    'defaultParams': true,
+    'destructuring': true,
+    'forOf': true,
+    'generators': false,
+    'modules': true,
+    'objectLiteralComputedProperties': true,
+    'objectLiteralDuplicateProperties': false,
+    'objectLiteralShorthandMethods': true,
+    'objectLiteralShorthandProperties': true,
+    'spread': true,
+    'superInFunctions': true,
+    'templateStrings': true,
+    'jsx': true
+  },
+  'rules': {
+/**
+ * Strict mode
+ */
+    // babel inserts 'use strict'; for us
+    'strict': [2, 'never'],          // http://eslint.org/docs/rules/strict
+
+/**
+ * ES6
+ */
+    'no-var': 2,                     // http://eslint.org/docs/rules/no-var
+    'prefer-const': 2,               // http://eslint.org/docs/rules/prefer-const
+
+/**
+ * Variables
+ */
+    'no-shadow': 2,                  // http://eslint.org/docs/rules/no-shadow
+    'no-shadow-restricted-names': 2, // http://eslint.org/docs/rules/no-shadow-restricted-names
+    'no-unused-vars': [2, {          // http://eslint.org/docs/rules/no-unused-vars
+      'vars': 'local',
+      'args': 'after-used'
+    }],
+    'no-use-before-define': 2,       // http://eslint.org/docs/rules/no-use-before-define
+
+/**
+ * Possible errors
+ */
+    'comma-dangle': [2, 'always-multiline'],    // http://eslint.org/docs/rules/comma-dangle
+    'no-cond-assign': [2, 'always'], // http://eslint.org/docs/rules/no-cond-assign
+    'no-console': 1,                 // http://eslint.org/docs/rules/no-console
+    'no-debugger': 1,                // http://eslint.org/docs/rules/no-debugger
+    'no-alert': 1,                   // http://eslint.org/docs/rules/no-alert
+    'no-constant-condition': 1,      // http://eslint.org/docs/rules/no-constant-condition
+    'no-dupe-keys': 2,               // http://eslint.org/docs/rules/no-dupe-keys
+    'no-duplicate-case': 2,          // http://eslint.org/docs/rules/no-duplicate-case
+    'no-empty': 2,                   // http://eslint.org/docs/rules/no-empty
+    'no-ex-assign': 2,               // http://eslint.org/docs/rules/no-ex-assign
+    'no-extra-boolean-cast': 0,      // http://eslint.org/docs/rules/no-extra-boolean-cast
+    'no-extra-semi': 2,              // http://eslint.org/docs/rules/no-extra-semi
+    'no-func-assign': 2,             // http://eslint.org/docs/rules/no-func-assign
+    'no-inner-declarations': 2,      // http://eslint.org/docs/rules/no-inner-declarations
+    'no-invalid-regexp': 2,          // http://eslint.org/docs/rules/no-invalid-regexp
+    'no-irregular-whitespace': 2,    // http://eslint.org/docs/rules/no-irregular-whitespace
+    'no-obj-calls': 2,               // http://eslint.org/docs/rules/no-obj-calls
+    'no-sparse-arrays': 2,           // http://eslint.org/docs/rules/no-sparse-arrays
+    'no-unreachable': 2,             // http://eslint.org/docs/rules/no-unreachable
+    'use-isnan': 2,                  // http://eslint.org/docs/rules/use-isnan
+    'block-scoped-var': 2,           // http://eslint.org/docs/rules/block-scoped-var
+
+/**
+ * Best practices
+ */
+    'consistent-return': 2,          // http://eslint.org/docs/rules/consistent-return
+    'curly': [2, 'multi-line'],      // http://eslint.org/docs/rules/curly
+    'default-case': 2,               // http://eslint.org/docs/rules/default-case
+    'dot-notation': [2, {            // http://eslint.org/docs/rules/dot-notation
+      'allowKeywords': true
+    }],
+    'eqeqeq': 2,                     // http://eslint.org/docs/rules/eqeqeq
+    'guard-for-in': 2,               // http://eslint.org/docs/rules/guard-for-in
+    'no-caller': 2,                  // http://eslint.org/docs/rules/no-caller
+    'no-else-return': 2,             // http://eslint.org/docs/rules/no-else-return
+    'no-eq-null': 2,                 // http://eslint.org/docs/rules/no-eq-null
+    'no-eval': 2,                    // http://eslint.org/docs/rules/no-eval
+    'no-extend-native': 2,           // http://eslint.org/docs/rules/no-extend-native
+    'no-extra-bind': 2,              // http://eslint.org/docs/rules/no-extra-bind
+    'no-fallthrough': 2,             // http://eslint.org/docs/rules/no-fallthrough
+    'no-floating-decimal': 2,        // http://eslint.org/docs/rules/no-floating-decimal
+    'no-implied-eval': 2,            // http://eslint.org/docs/rules/no-implied-eval
+    'no-lone-blocks': 2,             // http://eslint.org/docs/rules/no-lone-blocks
+    'no-loop-func': 2,               // http://eslint.org/docs/rules/no-loop-func
+    'no-multi-str': 2,               // http://eslint.org/docs/rules/no-multi-str
+    'no-native-reassign': 2,         // http://eslint.org/docs/rules/no-native-reassign
+    'no-new': 2,                     // http://eslint.org/docs/rules/no-new
+    'no-new-func': 2,                // http://eslint.org/docs/rules/no-new-func
+    'no-new-wrappers': 2,            // http://eslint.org/docs/rules/no-new-wrappers
+    'no-octal': 2,                   // http://eslint.org/docs/rules/no-octal
+    'no-octal-escape': 2,            // http://eslint.org/docs/rules/no-octal-escape
+    'no-param-reassign': 2,          // http://eslint.org/docs/rules/no-param-reassign
+    'no-proto': 2,                   // http://eslint.org/docs/rules/no-proto
+    'no-redeclare': 2,               // http://eslint.org/docs/rules/no-redeclare
+    'no-return-assign': 2,           // http://eslint.org/docs/rules/no-return-assign
+    'no-script-url': 2,              // http://eslint.org/docs/rules/no-script-url
+    'no-self-compare': 2,            // http://eslint.org/docs/rules/no-self-compare
+    'no-sequences': 2,               // http://eslint.org/docs/rules/no-sequences
+    'no-throw-literal': 2,           // http://eslint.org/docs/rules/no-throw-literal
+    'no-with': 2,                    // http://eslint.org/docs/rules/no-with
+    'radix': 2,                      // http://eslint.org/docs/rules/radix
+    'vars-on-top': 2,                // http://eslint.org/docs/rules/vars-on-top
+    'wrap-iife': [2, 'any'],         // http://eslint.org/docs/rules/wrap-iife
+    'yoda': 2,                       // http://eslint.org/docs/rules/yoda
+
+/**
+ * Style
+ */
+    'indent': [2, 2],                // http://eslint.org/docs/rules/indent
+    'brace-style': [2,               // http://eslint.org/docs/rules/brace-style
+      '1tbs', {
+      'allowSingleLine': true
+    }],
+    'quotes': [
+      2, 'single', 'avoid-escape'    // http://eslint.org/docs/rules/quotes
+    ],
+    'camelcase': [2, {               // http://eslint.org/docs/rules/camelcase
+      'properties': 'never'
+    }],
+    'comma-spacing': [2, {           // http://eslint.org/docs/rules/comma-spacing
+      'before': false,
+      'after': true
+    }],
+    'comma-style': [2, 'last'],      // http://eslint.org/docs/rules/comma-style
+    'eol-last': 2,                   // http://eslint.org/docs/rules/eol-last
+    'func-names': 1,                 // http://eslint.org/docs/rules/func-names
+    'key-spacing': [2, {             // http://eslint.org/docs/rules/key-spacing
+        'beforeColon': false,
+        'afterColon': true
+    }],
+    'new-cap': [2, {                 // http://eslint.org/docs/rules/new-cap
+      'newIsCap': true
+    }],
+    'no-multiple-empty-lines': [2, { // http://eslint.org/docs/rules/no-multiple-empty-lines
+      'max': 2
+    }],
+    'no-nested-ternary': 2,          // http://eslint.org/docs/rules/no-nested-ternary
+    'no-new-object': 2,              // http://eslint.org/docs/rules/no-new-object
+    'no-spaced-func': 2,             // http://eslint.org/docs/rules/no-spaced-func
+    'no-trailing-spaces': 2,         // http://eslint.org/docs/rules/no-trailing-spaces
+    'no-extra-parens': [2, 'functions'], // http://eslint.org/docs/rules/no-extra-parens
+    'no-underscore-dangle': 0,       // http://eslint.org/docs/rules/no-underscore-dangle
+    'one-var': [2, 'never'],         // http://eslint.org/docs/rules/one-var
+    'padded-blocks': [2, 'never'],   // http://eslint.org/docs/rules/padded-blocks
+    'semi': [2, 'always'],           // http://eslint.org/docs/rules/semi
+    'semi-spacing': [2, {            // http://eslint.org/docs/rules/semi-spacing
+      'before': false,
+      'after': true
+    }],
+    'space-after-keywords': 2,       // http://eslint.org/docs/rules/space-after-keywords
+    'space-before-blocks': 2,        // http://eslint.org/docs/rules/space-before-blocks
+    'space-before-function-paren': [2, 'never'], // http://eslint.org/docs/rules/space-before-function-paren
+    'space-infix-ops': 2,            // http://eslint.org/docs/rules/space-infix-ops
+    'space-return-throw-case': 2,    // http://eslint.org/docs/rules/space-return-throw-case
+    'spaced-comment': [2, 'always',  {// http://eslint.org/docs/rules/spaced-comment
+      'exceptions': ['-', '+'],
+      'markers': ['=', '!']           // space here to support sprockets directives
+    }],
+  }
+};
diff --git a/packages/eslint-config-airbnb/index.js b/packages/eslint-config-airbnb/index.js
index 0d87e4ad25..e74501fcd0 100644
--- a/packages/eslint-config-airbnb/index.js
+++ b/packages/eslint-config-airbnb/index.js
@@ -1,221 +1,13 @@
-module.exports = {
-  'parser': 'babel-eslint',          // https://github.com/babel/babel-eslint
-  'plugins': [
-    'react'                          // https://github.com/yannickcr/eslint-plugin-react
-  ],
-  'env': {                           // http://eslint.org/docs/user-guide/configuring.html#specifying-environments
-    'browser': true,                 // browser global variables
-    'node': true                     // Node.js global variables and Node.js-specific rules
-  },
-  'ecmaFeatures': {
-    'arrowFunctions': true,
-    'blockBindings': true,
-    'classes': true,
-    'defaultParams': true,
-    'destructuring': true,
-    'forOf': true,
-    'generators': false,
-    'modules': true,
-    'objectLiteralComputedProperties': true,
-    'objectLiteralDuplicateProperties': false,
-    'objectLiteralShorthandMethods': true,
-    'objectLiteralShorthandProperties': true,
-    'spread': true,
-    'superInFunctions': true,
-    'templateStrings': true,
-    'jsx': true
-  },
-  'rules': {
-/**
- * Strict mode
- */
-    // babel inserts 'use strict'; for us
-    'strict': [2, 'never'],          // http://eslint.org/docs/rules/strict
+var reactRules = require('./react');
+var base = require('./base');
 
-/**
- * ES6
- */
-    'no-var': 2,                     // http://eslint.org/docs/rules/no-var
-    'prefer-const': 2,               // http://eslint.org/docs/rules/prefer-const
+// clone this so we aren't mutating a module
+var eslintrc = JSON.parse(JSON.stringify(base));
 
-/**
- * Variables
- */
-    'no-shadow': 2,                  // http://eslint.org/docs/rules/no-shadow
-    'no-shadow-restricted-names': 2, // http://eslint.org/docs/rules/no-shadow-restricted-names
-    'no-unused-vars': [2, {          // http://eslint.org/docs/rules/no-unused-vars
-      'vars': 'local',
-      'args': 'after-used'
-    }],
-    'no-use-before-define': 2,       // http://eslint.org/docs/rules/no-use-before-define
+// manually merge in React rules
+eslintrc.plugins = reactRules.plugins;
+Object.keys(reactRules.rules).forEach(function(ruleId) {
+  eslintrc.rules[ruleId] = reactRules.rules[ruleId];
+});
 
-/**
- * Possible errors
- */
-    'comma-dangle': [2, 'always-multiline'],    // http://eslint.org/docs/rules/comma-dangle
-    'no-cond-assign': [2, 'always'], // http://eslint.org/docs/rules/no-cond-assign
-    'no-console': 1,                 // http://eslint.org/docs/rules/no-console
-    'no-debugger': 1,                // http://eslint.org/docs/rules/no-debugger
-    'no-alert': 1,                   // http://eslint.org/docs/rules/no-alert
-    'no-constant-condition': 1,      // http://eslint.org/docs/rules/no-constant-condition
-    'no-dupe-keys': 2,               // http://eslint.org/docs/rules/no-dupe-keys
-    'no-duplicate-case': 2,          // http://eslint.org/docs/rules/no-duplicate-case
-    'no-empty': 2,                   // http://eslint.org/docs/rules/no-empty
-    'no-ex-assign': 2,               // http://eslint.org/docs/rules/no-ex-assign
-    'no-extra-boolean-cast': 0,      // http://eslint.org/docs/rules/no-extra-boolean-cast
-    'no-extra-semi': 2,              // http://eslint.org/docs/rules/no-extra-semi
-    'no-func-assign': 2,             // http://eslint.org/docs/rules/no-func-assign
-    'no-inner-declarations': 2,      // http://eslint.org/docs/rules/no-inner-declarations
-    'no-invalid-regexp': 2,          // http://eslint.org/docs/rules/no-invalid-regexp
-    'no-irregular-whitespace': 2,    // http://eslint.org/docs/rules/no-irregular-whitespace
-    'no-obj-calls': 2,               // http://eslint.org/docs/rules/no-obj-calls
-    'no-sparse-arrays': 2,           // http://eslint.org/docs/rules/no-sparse-arrays
-    'no-unreachable': 2,             // http://eslint.org/docs/rules/no-unreachable
-    'use-isnan': 2,                  // http://eslint.org/docs/rules/use-isnan
-    'block-scoped-var': 2,           // http://eslint.org/docs/rules/block-scoped-var
-
-/**
- * Best practices
- */
-    'consistent-return': 2,          // http://eslint.org/docs/rules/consistent-return
-    'curly': [2, 'multi-line'],      // http://eslint.org/docs/rules/curly
-    'default-case': 2,               // http://eslint.org/docs/rules/default-case
-    'dot-notation': [2, {            // http://eslint.org/docs/rules/dot-notation
-      'allowKeywords': true
-    }],
-    'eqeqeq': 2,                     // http://eslint.org/docs/rules/eqeqeq
-    'guard-for-in': 2,               // http://eslint.org/docs/rules/guard-for-in
-    'no-caller': 2,                  // http://eslint.org/docs/rules/no-caller
-    'no-else-return': 2,             // http://eslint.org/docs/rules/no-else-return
-    'no-eq-null': 2,                 // http://eslint.org/docs/rules/no-eq-null
-    'no-eval': 2,                    // http://eslint.org/docs/rules/no-eval
-    'no-extend-native': 2,           // http://eslint.org/docs/rules/no-extend-native
-    'no-extra-bind': 2,              // http://eslint.org/docs/rules/no-extra-bind
-    'no-fallthrough': 2,             // http://eslint.org/docs/rules/no-fallthrough
-    'no-floating-decimal': 2,        // http://eslint.org/docs/rules/no-floating-decimal
-    'no-implied-eval': 2,            // http://eslint.org/docs/rules/no-implied-eval
-    'no-lone-blocks': 2,             // http://eslint.org/docs/rules/no-lone-blocks
-    'no-loop-func': 2,               // http://eslint.org/docs/rules/no-loop-func
-    'no-multi-str': 2,               // http://eslint.org/docs/rules/no-multi-str
-    'no-native-reassign': 2,         // http://eslint.org/docs/rules/no-native-reassign
-    'no-new': 2,                     // http://eslint.org/docs/rules/no-new
-    'no-new-func': 2,                // http://eslint.org/docs/rules/no-new-func
-    'no-new-wrappers': 2,            // http://eslint.org/docs/rules/no-new-wrappers
-    'no-octal': 2,                   // http://eslint.org/docs/rules/no-octal
-    'no-octal-escape': 2,            // http://eslint.org/docs/rules/no-octal-escape
-    'no-param-reassign': 2,          // http://eslint.org/docs/rules/no-param-reassign
-    'no-proto': 2,                   // http://eslint.org/docs/rules/no-proto
-    'no-redeclare': 2,               // http://eslint.org/docs/rules/no-redeclare
-    'no-return-assign': 2,           // http://eslint.org/docs/rules/no-return-assign
-    'no-script-url': 2,              // http://eslint.org/docs/rules/no-script-url
-    'no-self-compare': 2,            // http://eslint.org/docs/rules/no-self-compare
-    'no-sequences': 2,               // http://eslint.org/docs/rules/no-sequences
-    'no-throw-literal': 2,           // http://eslint.org/docs/rules/no-throw-literal
-    'no-with': 2,                    // http://eslint.org/docs/rules/no-with
-    'radix': 2,                      // http://eslint.org/docs/rules/radix
-    'vars-on-top': 2,                // http://eslint.org/docs/rules/vars-on-top
-    'wrap-iife': [2, 'any'],         // http://eslint.org/docs/rules/wrap-iife
-    'yoda': 2,                       // http://eslint.org/docs/rules/yoda
-
-/**
- * Style
- */
-    'indent': [2, 2],                // http://eslint.org/docs/rules/indent
-    'brace-style': [2,               // http://eslint.org/docs/rules/brace-style
-      '1tbs', {
-      'allowSingleLine': true
-    }],
-    'quotes': [
-      2, 'single', 'avoid-escape'    // http://eslint.org/docs/rules/quotes
-    ],
-    'camelcase': [2, {               // http://eslint.org/docs/rules/camelcase
-      'properties': 'never'
-    }],
-    'comma-spacing': [2, {           // http://eslint.org/docs/rules/comma-spacing
-      'before': false,
-      'after': true
-    }],
-    'comma-style': [2, 'last'],      // http://eslint.org/docs/rules/comma-style
-    'eol-last': 2,                   // http://eslint.org/docs/rules/eol-last
-    'func-names': 1,                 // http://eslint.org/docs/rules/func-names
-    'key-spacing': [2, {             // http://eslint.org/docs/rules/key-spacing
-        'beforeColon': false,
-        'afterColon': true
-    }],
-    'new-cap': [2, {                 // http://eslint.org/docs/rules/new-cap
-      'newIsCap': true
-    }],
-    'no-multiple-empty-lines': [2, { // http://eslint.org/docs/rules/no-multiple-empty-lines
-      'max': 2
-    }],
-    'no-nested-ternary': 2,          // http://eslint.org/docs/rules/no-nested-ternary
-    'no-new-object': 2,              // http://eslint.org/docs/rules/no-new-object
-    'no-spaced-func': 2,             // http://eslint.org/docs/rules/no-spaced-func
-    'no-trailing-spaces': 2,         // http://eslint.org/docs/rules/no-trailing-spaces
-    'no-extra-parens': [2, 'functions'], // http://eslint.org/docs/rules/no-extra-parens
-    'no-underscore-dangle': 0,       // http://eslint.org/docs/rules/no-underscore-dangle
-    'one-var': [2, 'never'],         // http://eslint.org/docs/rules/one-var
-    'padded-blocks': [2, 'never'],   // http://eslint.org/docs/rules/padded-blocks
-    'semi': [2, 'always'],           // http://eslint.org/docs/rules/semi
-    'semi-spacing': [2, {            // http://eslint.org/docs/rules/semi-spacing
-      'before': false,
-      'after': true
-    }],
-    'space-after-keywords': 2,       // http://eslint.org/docs/rules/space-after-keywords
-    'space-before-blocks': 2,        // http://eslint.org/docs/rules/space-before-blocks
-    'space-before-function-paren': [2, 'never'], // http://eslint.org/docs/rules/space-before-function-paren
-    'space-infix-ops': 2,            // http://eslint.org/docs/rules/space-infix-ops
-    'space-return-throw-case': 2,    // http://eslint.org/docs/rules/space-return-throw-case
-    'spaced-comment': [2, 'always',  {// http://eslint.org/docs/rules/spaced-comment
-      'exceptions': ['-', '+'],
-      'markers': ['=', '!']           // space here to support sprockets directives
-    }],
-
-/**
- * JSX style
- */
-    'react/display-name': 0,         // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/display-name.md
-    'react/jsx-boolean-value': 2,    // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/jsx-boolean-value.md
-    'react/jsx-quotes': [2, 'double'], // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/jsx-quotes.md
-    'react/jsx-no-undef': 2,         // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/jsx-no-undef.md
-    'react/jsx-sort-props': 0,       // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/jsx-sort-props.md
-    'react/jsx-sort-prop-types': 0,  // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/jsx-sort-prop-types.md
-    'react/jsx-uses-react': 2,       // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/jsx-uses-react.md
-    'react/jsx-uses-vars': 2,        // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/jsx-uses-vars.md
-    'react/no-did-mount-set-state': [2, 'allow-in-func'], // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/no-did-mount-set-state.md
-    'react/no-did-update-set-state': 2, // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/no-did-update-set-state.md
-    'react/no-multi-comp': 2,        // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/no-multi-comp.md
-    'react/no-unknown-property': 2,  // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/no-unknown-property.md
-    'react/prop-types': 2,           // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/prop-types.md
-    'react/react-in-jsx-scope': 2,   // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/react-in-jsx-scope.md
-    'react/self-closing-comp': 2,    // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/self-closing-comp.md
-    'react/wrap-multilines': 2,      // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/wrap-multilines.md
-    'react/sort-comp': [2, {         // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/sort-comp.md
-      'order': [
-        'displayName',
-        'propTypes',
-        'contextTypes',
-        'childContextTypes',
-        'mixins',
-        'statics',
-        'defaultProps',
-        'constructor',
-        'getDefaultProps',
-        'getInitialState',
-        'getChildContext',
-        'componentWillMount',
-        'componentDidMount',
-        'componentWillReceiveProps',
-        'shouldComponentUpdate',
-        'componentWillUpdate',
-        'componentDidUpdate',
-        'componentWillUnmount',
-        '/^on.+$/',
-        'everything-else',
-        '/^get.+$/',
-        '/^render.+$/',
-        'render'
-      ]
-    }]
-  }
-};
+module.exports = eslintrc;
diff --git a/packages/eslint-config-airbnb/package.json b/packages/eslint-config-airbnb/package.json
index a082518584..3af4564f9b 100644
--- a/packages/eslint-config-airbnb/package.json
+++ b/packages/eslint-config-airbnb/package.json
@@ -4,7 +4,7 @@
   "description": "Airbnb's ESLint config, following our styleguide",
   "main": "index.js",
   "scripts": {
-    "test": "echo \"Error: no test specified\" && exit 1"
+    "test": "./node_modules/.bin/babel-tape-runner ./test/test-*.js"
   },
   "repository": {
     "type": "git",
@@ -23,5 +23,13 @@
   "bugs": {
     "url": "https://github.com/airbnb/javascript/issues"
   },
-  "homepage": "https://github.com/airbnb/javascript"
+  "homepage": "https://github.com/airbnb/javascript",
+  "devDependencies": {
+    "babel-eslint": "4.0.10",
+    "babel-tape-runner": "1.2.0",
+    "eslint": "1.1.0",
+    "eslint-plugin-react": "3.2.3",
+    "react": "0.13.3",
+    "tape": "4.2.0"
+  }
 }
diff --git a/packages/eslint-config-airbnb/react.js b/packages/eslint-config-airbnb/react.js
new file mode 100644
index 0000000000..a0ab17f396
--- /dev/null
+++ b/packages/eslint-config-airbnb/react.js
@@ -0,0 +1,36 @@
+module.exports = {
+  'plugins': [
+    'react'                          // https://github.com/yannickcr/eslint-plugin-react
+  ],
+  rules: {
+    /**
+     * JSX style
+     */
+    'react/display-name': 0,         // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/display-name.md
+    'react/jsx-boolean-value': 2,    // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/jsx-boolean-value.md
+    'react/jsx-quotes': [2, 'double'], // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/jsx-quotes.md
+    'react/jsx-no-undef': 2,         // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/jsx-no-undef.md
+    'react/jsx-sort-props': 0,       // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/jsx-sort-props.md
+    'react/jsx-sort-prop-types': 0,  // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/jsx-sort-prop-types.md
+    'react/jsx-uses-react': 2,       // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/jsx-uses-react.md
+    'react/jsx-uses-vars': 2,        // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/jsx-uses-vars.md
+    'react/no-did-mount-set-state': [2, 'allow-in-func'], // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/no-did-mount-set-state.md
+    'react/no-did-update-set-state': 2, // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/no-did-update-set-state.md
+    'react/no-multi-comp': 2,        // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/no-multi-comp.md
+    'react/no-unknown-property': 2,  // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/no-unknown-property.md
+    'react/prop-types': 2,           // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/prop-types.md
+    'react/react-in-jsx-scope': 2,   // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/react-in-jsx-scope.md
+    'react/self-closing-comp': 2,    // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/self-closing-comp.md
+    'react/wrap-multilines': 2,      // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/wrap-multilines.md
+    'react/sort-comp': [2, {         // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/sort-comp.md
+      'order': [
+        'lifecycle',
+        '/^on.+$/',
+        '/^(get|set)(?!(InitialState$|DefaultProps$|ChildContext$)).+$/',
+        'everything-else',
+        '/^render.+$/',
+        'render'
+      ]
+    }]
+  }
+};
diff --git a/packages/eslint-config-airbnb/test/test-base.js b/packages/eslint-config-airbnb/test/test-base.js
new file mode 100644
index 0000000000..ecf06cdf58
--- /dev/null
+++ b/packages/eslint-config-airbnb/test/test-base.js
@@ -0,0 +1,13 @@
+import test from 'tape';
+import base from '../base';
+
+test('base: does not reference react', t => {
+  t.plan(2);
+
+  t.notOk(base.plugins, 'plugins is unspecified');
+
+  // scan rules for react/ and fail if any exist
+  const reactRuleIds = Object.keys(base.rules)
+    .filter(ruleId => ruleId.indexOf('react/') === 0);
+  t.deepEquals(reactRuleIds, [], 'there are no react/ rules');
+});
diff --git a/packages/eslint-config-airbnb/test/test-react-order.js b/packages/eslint-config-airbnb/test/test-react-order.js
new file mode 100644
index 0000000000..83df3b1b70
--- /dev/null
+++ b/packages/eslint-config-airbnb/test/test-react-order.js
@@ -0,0 +1,83 @@
+import test from 'tape';
+import { CLIEngine, linter } from 'eslint';
+import eslintrc from '../';
+
+const cli = new CLIEngine({
+  useEslintrc: false,
+  baseConfig: eslintrc,
+});
+
+function lint(text) {
+  // @see http://eslint.org/docs/developer-guide/nodejs-api.html#executeonfiles
+  // @see http://eslint.org/docs/developer-guide/nodejs-api.html#executeontext
+  return cli.executeOnText(text).results[0];
+}
+
+function wrapComponent(body) {
+  return `
+import React from 'react';
+export default class MyComponent extends React.Component {
+${body}
+}
+`;
+}
+
+test('validate react prop order', t => {
+  t.test('make sure our eslintrc has React linting dependencies', t => {
+    t.plan(2);
+    t.equal(eslintrc.parser, 'babel-eslint', 'uses babel-eslint');
+    t.equal(eslintrc.plugins[0], 'react', 'uses eslint-plugin-react');
+  });
+
+  t.test('passes a good component', t => {
+    t.plan(3);
+    const result = lint(wrapComponent(`
+  componentWillMount() {  }
+  componentDidMount() {  }
+  setFoo() {  }
+  getFoo() {  }
+  setBar() {  }
+  someMethod() {  }
+  renderDogs() {  }
+  render() { return <div />; }
+`));
+
+    t.notOk(result.warningCount, 'no warnings');
+    t.notOk(result.errorCount, 'no errors');
+    t.deepEquals(result.messages, [], 'no messages in results');
+  });
+
+  t.test('order: when random method is first', t => {
+    t.plan(2);
+    const result = lint(wrapComponent(`
+  someMethod() {  }
+  componentWillMount() {  }
+  componentDidMount() {  }
+  setFoo() {  }
+  getFoo() {  }
+  setBar() {  }
+  renderDogs() {  }
+  render() { return <div />; }
+`));
+
+    t.ok(result.errorCount, 'fails');
+    t.equal(result.messages[0].ruleId, 'react/sort-comp', 'fails due to sort');
+  });
+
+  t.test('order: when random method after lifecycle methods', t => {
+    t.plan(2);
+    const result = lint(wrapComponent(`
+  componentWillMount() {  }
+  componentDidMount() {  }
+  someMethod() {  }
+  setFoo() {  }
+  getFoo() {  }
+  setBar() {  }
+  renderDogs() {  }
+  render() { return <div />; }
+`));
+
+    t.ok(result.errorCount, 'fails');
+    t.equal(result.messages[0].ruleId, 'react/sort-comp', 'fails due to sort');
+  });
+});

From 7646a8619bf7546a05a33556404060869e64ac16 Mon Sep 17 00:00:00 2001
From: Jake Teton-Landis <jake.tl@airbnb.com>
Date: Wed, 19 Aug 2015 13:42:10 -0700
Subject: [PATCH 0292/1591] lint eslint-config-airbnb with
 eslint-config-airbnb/base

---
 packages/eslint-config-airbnb/.eslintrc       | 11 +++++
 packages/eslint-config-airbnb/base/index.js   | 48 ++++++++++---------
 packages/eslint-config-airbnb/index.js        |  8 ++--
 .../node_modules/eslint-config-airbnb         |  1 +
 packages/eslint-config-airbnb/package.json    |  1 +
 .../test/test-react-order.js                  |  2 +-
 6 files changed, 43 insertions(+), 28 deletions(-)
 create mode 100644 packages/eslint-config-airbnb/.eslintrc
 create mode 120000 packages/eslint-config-airbnb/node_modules/eslint-config-airbnb

diff --git a/packages/eslint-config-airbnb/.eslintrc b/packages/eslint-config-airbnb/.eslintrc
new file mode 100644
index 0000000000..cbf450f01f
--- /dev/null
+++ b/packages/eslint-config-airbnb/.eslintrc
@@ -0,0 +1,11 @@
+{
+  "extends": "airbnb",
+  "rules": {
+    // disable requiring trailing commas because it might be nice to revert to
+    // being JSON at some point, and I don't want to make big changes now.
+    "comma-dangle": 0,
+    // disabled because I find it tedious to write tests while following this
+    // rule
+    "no-shadow": 0
+  }
+}
diff --git a/packages/eslint-config-airbnb/base/index.js b/packages/eslint-config-airbnb/base/index.js
index c47c2c45dd..65174d856e 100644
--- a/packages/eslint-config-airbnb/base/index.js
+++ b/packages/eslint-config-airbnb/base/index.js
@@ -23,21 +23,21 @@ module.exports = {
     'jsx': true
   },
   'rules': {
-/**
- * Strict mode
- */
+    /**
+     * Strict mode
+     */
     // babel inserts 'use strict'; for us
     'strict': [2, 'never'],          // http://eslint.org/docs/rules/strict
 
-/**
- * ES6
- */
+    /**
+     * ES6
+     */
     'no-var': 2,                     // http://eslint.org/docs/rules/no-var
     'prefer-const': 2,               // http://eslint.org/docs/rules/prefer-const
 
-/**
- * Variables
- */
+    /**
+     * Variables
+     */
     'no-shadow': 2,                  // http://eslint.org/docs/rules/no-shadow
     'no-shadow-restricted-names': 2, // http://eslint.org/docs/rules/no-shadow-restricted-names
     'no-unused-vars': [2, {          // http://eslint.org/docs/rules/no-unused-vars
@@ -46,9 +46,9 @@ module.exports = {
     }],
     'no-use-before-define': 2,       // http://eslint.org/docs/rules/no-use-before-define
 
-/**
- * Possible errors
- */
+    /**
+     * Possible errors
+     */
     'comma-dangle': [2, 'always-multiline'],    // http://eslint.org/docs/rules/comma-dangle
     'no-cond-assign': [2, 'always'], // http://eslint.org/docs/rules/no-cond-assign
     'no-console': 1,                 // http://eslint.org/docs/rules/no-console
@@ -71,9 +71,9 @@ module.exports = {
     'use-isnan': 2,                  // http://eslint.org/docs/rules/use-isnan
     'block-scoped-var': 2,           // http://eslint.org/docs/rules/block-scoped-var
 
-/**
- * Best practices
- */
+    /**
+     * Best practices
+     */
     'consistent-return': 2,          // http://eslint.org/docs/rules/consistent-return
     'curly': [2, 'multi-line'],      // http://eslint.org/docs/rules/curly
     'default-case': 2,               // http://eslint.org/docs/rules/default-case
@@ -114,14 +114,16 @@ module.exports = {
     'wrap-iife': [2, 'any'],         // http://eslint.org/docs/rules/wrap-iife
     'yoda': 2,                       // http://eslint.org/docs/rules/yoda
 
-/**
- * Style
- */
+    /**
+     * Style
+     */
     'indent': [2, 2],                // http://eslint.org/docs/rules/indent
-    'brace-style': [2,               // http://eslint.org/docs/rules/brace-style
+    'brace-style': [
+      2,               // http://eslint.org/docs/rules/brace-style
       '1tbs', {
-      'allowSingleLine': true
-    }],
+        'allowSingleLine': true
+      }
+    ],
     'quotes': [
       2, 'single', 'avoid-escape'    // http://eslint.org/docs/rules/quotes
     ],
@@ -136,8 +138,8 @@ module.exports = {
     'eol-last': 2,                   // http://eslint.org/docs/rules/eol-last
     'func-names': 1,                 // http://eslint.org/docs/rules/func-names
     'key-spacing': [2, {             // http://eslint.org/docs/rules/key-spacing
-        'beforeColon': false,
-        'afterColon': true
+      'beforeColon': false,
+      'afterColon': true
     }],
     'new-cap': [2, {                 // http://eslint.org/docs/rules/new-cap
       'newIsCap': true
diff --git a/packages/eslint-config-airbnb/index.js b/packages/eslint-config-airbnb/index.js
index e74501fcd0..3cda9b0f9c 100644
--- a/packages/eslint-config-airbnb/index.js
+++ b/packages/eslint-config-airbnb/index.js
@@ -1,12 +1,12 @@
-var reactRules = require('./react');
-var base = require('./base');
+const reactRules = require('./react');
+const base = require('./base');
 
 // clone this so we aren't mutating a module
-var eslintrc = JSON.parse(JSON.stringify(base));
+const eslintrc = JSON.parse(JSON.stringify(base));
 
 // manually merge in React rules
 eslintrc.plugins = reactRules.plugins;
-Object.keys(reactRules.rules).forEach(function(ruleId) {
+Object.keys(reactRules.rules).forEach(function assignRule(ruleId) {
   eslintrc.rules[ruleId] = reactRules.rules[ruleId];
 });
 
diff --git a/packages/eslint-config-airbnb/node_modules/eslint-config-airbnb b/packages/eslint-config-airbnb/node_modules/eslint-config-airbnb
new file mode 120000
index 0000000000..a96aa0ea9d
--- /dev/null
+++ b/packages/eslint-config-airbnb/node_modules/eslint-config-airbnb
@@ -0,0 +1 @@
+..
\ No newline at end of file
diff --git a/packages/eslint-config-airbnb/package.json b/packages/eslint-config-airbnb/package.json
index 3af4564f9b..f277fa248f 100644
--- a/packages/eslint-config-airbnb/package.json
+++ b/packages/eslint-config-airbnb/package.json
@@ -4,6 +4,7 @@
   "description": "Airbnb's ESLint config, following our styleguide",
   "main": "index.js",
   "scripts": {
+    "lint": "./node_modules/.bin/eslint .",
     "test": "./node_modules/.bin/babel-tape-runner ./test/test-*.js"
   },
   "repository": {
diff --git a/packages/eslint-config-airbnb/test/test-react-order.js b/packages/eslint-config-airbnb/test/test-react-order.js
index 83df3b1b70..9ef23f6737 100644
--- a/packages/eslint-config-airbnb/test/test-react-order.js
+++ b/packages/eslint-config-airbnb/test/test-react-order.js
@@ -1,5 +1,5 @@
 import test from 'tape';
-import { CLIEngine, linter } from 'eslint';
+import { CLIEngine } from 'eslint';
 import eslintrc from '../';
 
 const cli = new CLIEngine({

From 2d90ebf11b06788f7d686a183182eeacaa767a5c Mon Sep 17 00:00:00 2001
From: Jake Teton-Landis <jake.tl@airbnb.com>
Date: Wed, 19 Aug 2015 14:01:14 -0700
Subject: [PATCH 0293/1591] update README with new package structure

---
 packages/eslint-config-airbnb/README.md | 19 ++++++++++++++++++-
 1 file changed, 18 insertions(+), 1 deletion(-)

diff --git a/packages/eslint-config-airbnb/README.md b/packages/eslint-config-airbnb/README.md
index 6edb34f355..3bc20dc4f0 100644
--- a/packages/eslint-config-airbnb/README.md
+++ b/packages/eslint-config-airbnb/README.md
@@ -4,9 +4,26 @@ This package provides Airbnb's .eslintrc as an extensible shared config.
 
 ## Usage
 
+### With React Style
+
 1. `npm install --save-dev eslint-config-airbnb babel-eslint eslint-plugin-react`
-2. add `"extends": "eslint-config-airbnb"` to your .eslintrc
+2. add `"extends": "airbnb"` to your .eslintrc
+
+### Without React Style
+
+1. `npm install --save-dev eslint-config-airbnb babel-eslint `
+2. add `"extends": "airbnb/base"` to your .eslintrc
 
 See [Airbnb's Javascript styleguide](https://github.com/airbnb/javascript) and
 the [ESlint config docs](http://eslint.org/docs/user-guide/configuring#extending-configuration-files)
 for more information.
+
+## Improving this config
+
+Consider adding test cases if you're making complicated rules changes, like
+anything involving regexes. Perhaps in a distant future, we could use literate
+programming to structure our README as test cases for our .eslintrc?
+
+You can run tests with `npm test`.
+
+You can make sure this module lints with itself using `npm run lint`.

From 64e13a20df2cc5bc91e5f99e7afaeedd629ceb97 Mon Sep 17 00:00:00 2001
From: Jake Teton-Landis <jake.tl@airbnb.com>
Date: Fri, 21 Aug 2015 14:22:03 -0700
Subject: [PATCH 0294/1591] eslint-config-airbnb 0.0.8

---
 packages/eslint-config-airbnb/README.md    | 6 ++++++
 packages/eslint-config-airbnb/package.json | 2 +-
 2 files changed, 7 insertions(+), 1 deletion(-)

diff --git a/packages/eslint-config-airbnb/README.md b/packages/eslint-config-airbnb/README.md
index 3bc20dc4f0..ac184f1adb 100644
--- a/packages/eslint-config-airbnb/README.md
+++ b/packages/eslint-config-airbnb/README.md
@@ -27,3 +27,9 @@ programming to structure our README as test cases for our .eslintrc?
 You can run tests with `npm test`.
 
 You can make sure this module lints with itself using `npm run lint`.
+
+## Changelog
+
+### 0.0.8
+ - now has a changelog
+ - now is modular (see instructions above for with react and without react versions)
diff --git a/packages/eslint-config-airbnb/package.json b/packages/eslint-config-airbnb/package.json
index f277fa248f..050567251f 100644
--- a/packages/eslint-config-airbnb/package.json
+++ b/packages/eslint-config-airbnb/package.json
@@ -1,6 +1,6 @@
 {
   "name": "eslint-config-airbnb",
-  "version": "0.0.7",
+  "version": "0.0.8",
   "description": "Airbnb's ESLint config, following our styleguide",
   "main": "index.js",
   "scripts": {

From 761bac606a0d7308c2d8bc843472fa65845b0fce Mon Sep 17 00:00:00 2001
From: Harrison Shoff <hi@hshoff.com>
Date: Fri, 21 Aug 2015 15:08:09 -0700
Subject: [PATCH 0295/1591] [other] add links to other style guides

---
 README.md | 6 +++++-
 1 file changed, 5 insertions(+), 1 deletion(-)

diff --git a/README.md b/README.md
index b5ff9eb737..df006d0323 100644
--- a/README.md
+++ b/README.md
@@ -5,7 +5,11 @@
 [![Downloads](https://img.shields.io/npm/dm/eslint-config-airbnb.svg)](https://www.npmjs.com/package/eslint-config-airbnb)
 [![Gitter](https://badges.gitter.im/Join Chat.svg)](https://gitter.im/airbnb/javascript?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge)
 
-[For the ES5-only guide click here](es5/).
+Other Style Guides
+ - [ES5](es5/)
+ - [React](react/)
+ - [css/scss](https://github.com/airbnb/css)
+ - [Ruby](https://github.com/airbnb/ruby)
 
 ## Table of Contents
 

From 844d3cf38a5a057fe0a3dbf10de99ab8ff9121de Mon Sep 17 00:00:00 2001
From: Harrison Shoff <hi@hshoff.com>
Date: Fri, 21 Aug 2015 15:27:10 -0700
Subject: [PATCH 0296/1591] [other] css/scss => CSS & Sass

---
 README.md | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/README.md b/README.md
index df006d0323..73f3dbfdb8 100644
--- a/README.md
+++ b/README.md
@@ -8,7 +8,7 @@
 Other Style Guides
  - [ES5](es5/)
  - [React](react/)
- - [css/scss](https://github.com/airbnb/css)
+ - [CSS & Sass](https://github.com/airbnb/css)
  - [Ruby](https://github.com/airbnb/ruby)
 
 ## Table of Contents

From c95af97e612db57a242c7c1de29fd4a9754211d4 Mon Sep 17 00:00:00 2001
From: Aaron Jensen <aaronjensen@gmail.com>
Date: Sat, 22 Aug 2015 23:59:50 -0700
Subject: [PATCH 0297/1591] Add no-undef

Fixes #454
Fixes #473
---
 packages/eslint-config-airbnb/base/index.js | 1 +
 1 file changed, 1 insertion(+)

diff --git a/packages/eslint-config-airbnb/base/index.js b/packages/eslint-config-airbnb/base/index.js
index 65174d856e..ee578638f0 100644
--- a/packages/eslint-config-airbnb/base/index.js
+++ b/packages/eslint-config-airbnb/base/index.js
@@ -40,6 +40,7 @@ module.exports = {
      */
     'no-shadow': 2,                  // http://eslint.org/docs/rules/no-shadow
     'no-shadow-restricted-names': 2, // http://eslint.org/docs/rules/no-shadow-restricted-names
+    'no-undef': 2,                   // http://eslint.org/docs/rules/no-undef
     'no-unused-vars': [2, {          // http://eslint.org/docs/rules/no-unused-vars
       'vars': 'local',
       'args': 'after-used'

From 933b367e6ccec48b13096b243980f2497516e653 Mon Sep 17 00:00:00 2001
From: Dace Willmott <willmott@brooklynunited.com>
Date: Thu, 27 Aug 2015 14:51:24 -0400
Subject: [PATCH 0298/1591] update spelling to clarify JSX rather than JS

---
 react/README.md | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/react/README.md b/react/README.md
index 8d02bcca7a..b09e8473fe 100644
--- a/react/README.md
+++ b/react/README.md
@@ -92,7 +92,7 @@
     ```
 
 ## Alignment
-  - Follow these alignment styles for JS syntax
+  - Follow these alignment styles for JSX syntax
 
     ```javascript
     // bad

From 1733557ac4c175da6eccba0535fb342e7345c22a Mon Sep 17 00:00:00 2001
From: Gil Birman <gil.birman@airbnb.com>
Date: Fri, 28 Aug 2015 11:15:32 -0700
Subject: [PATCH 0299/1591] [react] inline export syntax

---
 react/README.md | 8 ++------
 1 file changed, 2 insertions(+), 6 deletions(-)

diff --git a/react/README.md b/react/README.md
index b09e8473fe..43c9baf2c5 100644
--- a/react/README.md
+++ b/react/README.md
@@ -85,10 +85,8 @@
     });
 
     // good
-    class ReservationCard extends React.Component {
+    export default class ReservationCard extends React.Component {
     }
- 
-    export default ReservationCard;
     ```
 
 ## Alignment
@@ -272,7 +270,7 @@
     text: 'Hello World',
   };
   
-  class Link extends Component {
+  export default class Link extends Component {
     static methodsAreOk() {
       return true;
     }
@@ -284,8 +282,6 @@
   
   Link.propTypes = propTypes;
   Link.defaultProps = defaultProps;
-  
-  export default Link;
   ```
 
   - Ordering for React.createClass:

From 3307caf5a091d2cb4f68e8b31fd6cc027b96a321 Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Fri, 28 Aug 2015 13:57:30 -0700
Subject: [PATCH 0300/1591] do not export propTypes

We decided to stick with the decision to not export `propTypes`, and leave them as only a static property on the default export.

/@josh-perez @gilbox
---
 react/README.md | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/react/README.md b/react/README.md
index b09e8473fe..f1ea8fb34f 100644
--- a/react/README.md
+++ b/react/README.md
@@ -262,7 +262,7 @@
   ```javascript
   import React, { Component, PropTypes } from 'react';
   
-  export const propTypes = {
+  const propTypes = {
     id: PropTypes.number.isRequired,
     url: PropTypes.string.isRequired,
     text: PropTypes.string,

From 701cbb954d75a9d99f15c9cf8cbc4e75b9e678ca Mon Sep 17 00:00:00 2001
From: johnmanong <johnmanong@gmail.com>
Date: Sun, 30 Aug 2015 14:19:20 -0400
Subject: [PATCH 0301/1591] [ong] Default parameters go last.

---
 README.md | 18 ++++++++++++++++--
 1 file changed, 16 insertions(+), 2 deletions(-)

diff --git a/README.md b/README.md
index 73f3dbfdb8..c41183af21 100644
--- a/README.md
+++ b/README.md
@@ -556,7 +556,21 @@ Other Style Guides
     }
     ```
 
-  - [7.8](#7.8) <a name='7.8'></a> Avoid side effects with default parameters
+  - [7.8](#7.8) <a name='7.8'></a> Always put default parameters last.
+
+    ```javascript
+    // bad
+    function handleThings(opts = {}, name) {
+      // ...
+    }
+
+    // good
+    function handleThings(name, opts = {}) {
+      // ...
+    }
+    ```
+
+  - [7.9](#7.9) <a name='7.9'></a> Avoid side effects with default parameters.
 
   > Why? They are confusing to reason about.
 
@@ -572,7 +586,7 @@ Other Style Guides
   count();  // 3
   ```
 
-- [7.9](#7.9) <a name='7.9'></a> Never use the Function constructor to create a new function.
+- [7.10](#7.10) <a name='7.10'></a> Never use the Function constructor to create a new function.
 
   > Why? Creating a function in this way evaluates a string similarly to eval(), which opens vulnerabilities.
 

From eeed55c1545e0794fbbbf3496cd9f7c865c9eb02 Mon Sep 17 00:00:00 2001
From: johnmanong <johnmanong@gmail.com>
Date: Mon, 31 Aug 2015 18:29:35 -0400
Subject: [PATCH 0302/1591] [ong] swap order of new entry

---
 README.md | 30 +++++++++++++++---------------
 1 file changed, 15 insertions(+), 15 deletions(-)

diff --git a/README.md b/README.md
index c41183af21..43ce70db83 100644
--- a/README.md
+++ b/README.md
@@ -556,21 +556,7 @@ Other Style Guides
     }
     ```
 
-  - [7.8](#7.8) <a name='7.8'></a> Always put default parameters last.
-
-    ```javascript
-    // bad
-    function handleThings(opts = {}, name) {
-      // ...
-    }
-
-    // good
-    function handleThings(name, opts = {}) {
-      // ...
-    }
-    ```
-
-  - [7.9](#7.9) <a name='7.9'></a> Avoid side effects with default parameters.
+  - [7.8](#7.8) <a name='7.8'></a> Avoid side effects with default parameters.
 
   > Why? They are confusing to reason about.
 
@@ -586,6 +572,20 @@ Other Style Guides
   count();  // 3
   ```
 
+  - [7.9](#7.9) <a name='7.9'></a> Always put default parameters last.
+
+    ```javascript
+    // bad
+    function handleThings(opts = {}, name) {
+      // ...
+    }
+
+    // good
+    function handleThings(name, opts = {}) {
+      // ...
+    }
+    ```
+
 - [7.10](#7.10) <a name='7.10'></a> Never use the Function constructor to create a new function.
 
   > Why? Creating a function in this way evaluates a string similarly to eval(), which opens vulnerabilities.

From 5695dc12df1d6292e7e93027d46e43f6aa3c4369 Mon Sep 17 00:00:00 2001
From: Andreas Brekken <a@abrkn.com>
Date: Fri, 4 Sep 2015 09:35:23 -0700
Subject: [PATCH 0303/1591] Make eslintrc dependencies copy-pasteable

---
 linters/README.md | 11 +++++++----
 1 file changed, 7 insertions(+), 4 deletions(-)

diff --git a/linters/README.md b/linters/README.md
index b027a5dcd2..1deac701c7 100644
--- a/linters/README.md
+++ b/linters/README.md
@@ -2,7 +2,10 @@
 
 Our `.eslintrc` requires the following NPM packages:
 
-- `eslint-config-airbnb`
-- `eslint`
-- `babel-eslint`
-- `eslint-plugin-react`
+```
+npm install --save-dev \
+  eslint-config-airbnb \
+  eslint \
+  babel-eslint \
+  eslint-plugin-react
+```

From 2aaaa3ddff84b8fc83fac3077b4c90daa44b9ba9 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Jan=20Ho=C5=99ava?= <czechinthemail@gmail.com>
Date: Tue, 8 Sep 2015 20:21:38 -0700
Subject: [PATCH 0304/1591] improve formatting of Chinese language links

---
 README.md | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/README.md b/README.md
index 43ce70db83..f5e1de1edd 100644
--- a/README.md
+++ b/README.md
@@ -2187,8 +2187,8 @@ Other Style Guides
   - ![br](https://raw.githubusercontent.com/gosquared/flags/master/flags/flags/shiny/24/Brazil.png) **Brazilian Portuguese**: [armoucar/javascript-style-guide](https://github.com/armoucar/javascript-style-guide)
   - ![bg](https://raw.githubusercontent.com/gosquared/flags/master/flags/flags/shiny/24/Bulgaria.png) **Bulgarian**: [borislavvv/javascript](https://github.com/borislavvv/javascript)
   - ![ca](https://raw.githubusercontent.com/fpmweb/javascript-style-guide/master/img/catala.png) **Catalan**: [fpmweb/javascript-style-guide](https://github.com/fpmweb/javascript-style-guide)
-  - ![tw](https://raw.githubusercontent.com/gosquared/flags/master/flags/flags/shiny/24/Taiwan.png) **Chinese(Traditional)**: [jigsawye/javascript](https://github.com/jigsawye/javascript)
-  - ![cn](https://raw.githubusercontent.com/gosquared/flags/master/flags/flags/shiny/24/China.png) **Chinese(Simplified)**: [sivan/javascript-style-guide](https://github.com/sivan/javascript-style-guide)
+  - ![cn](https://raw.githubusercontent.com/gosquared/flags/master/flags/flags/shiny/24/China.png) **Chinese (Simplified)**: [sivan/javascript-style-guide](https://github.com/sivan/javascript-style-guide)
+  - ![tw](https://raw.githubusercontent.com/gosquared/flags/master/flags/flags/shiny/24/Taiwan.png) **Chinese (Traditional)**: [jigsawye/javascript](https://github.com/jigsawye/javascript)
   - ![fr](https://raw.githubusercontent.com/gosquared/flags/master/flags/flags/shiny/24/France.png) **French**: [nmussy/javascript-style-guide](https://github.com/nmussy/javascript-style-guide)
   - ![de](https://raw.githubusercontent.com/gosquared/flags/master/flags/flags/shiny/24/Germany.png) **German**: [timofurrer/javascript-style-guide](https://github.com/timofurrer/javascript-style-guide)
   - ![it](https://raw.githubusercontent.com/gosquared/flags/master/flags/flags/shiny/24/Italy.png) **Italian**: [sinkswim/javascript-style-guide](https://github.com/sinkswim/javascript-style-guide)

From b043025bf69586743f316051fd2c3399746756da Mon Sep 17 00:00:00 2001
From: Weblors <shaun@getsuperapp.com>
Date: Wed, 9 Sep 2015 12:33:18 +0530
Subject: [PATCH 0305/1591] Add to list of In the Wild organizations

Added Super as one of the organizations using the styleguide.
---
 es5/README.md | 1 +
 1 file changed, 1 insertion(+)

diff --git a/es5/README.md b/es5/README.md
index f961d8e0d6..2d24f1a4a2 100644
--- a/es5/README.md
+++ b/es5/README.md
@@ -1671,6 +1671,7 @@
   - **SeekingAlpha**: [seekingalpha/javascript-style-guide](https://github.com/seekingalpha/javascript-style-guide)
   - **Shutterfly**: [shutterfly/javascript](https://github.com/shutterfly/javascript)
   - **StudentSphere**: [studentsphere/javascript](https://github.com/studentsphere/javascript)
+  - **Super**: [SuperJobs/javascript](https://github.com/SuperJobs/javascript)
   - **Target**: [target/javascript](https://github.com/target/javascript)
   - **TheLadders**: [TheLadders/javascript](https://github.com/TheLadders/javascript)
   - **T4R Technology**: [T4R-Technology/javascript](https://github.com/T4R-Technology/javascript)

From 9405b1d396bd7c0158a214336004c66f88a00eb3 Mon Sep 17 00:00:00 2001
From: Al Pal <againer@users.noreply.github.com>
Date: Wed, 9 Sep 2015 20:38:43 -0700
Subject: [PATCH 0306/1591] add semicolons to const declarations in 19.2

---
 README.md | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/README.md b/README.md
index 43ce70db83..ab8b9b28ae 100644
--- a/README.md
+++ b/README.md
@@ -1561,14 +1561,14 @@ Other Style Guides
     -    lastName: 'Nightingale'
     +    lastName: 'Nightingale',
     +    inventorOf: ['coxcomb graph', 'modern nursing']
-    }
+    };
 
     // good - git diff with trailing comma
     const hero = {
          firstName: 'Florence',
          lastName: 'Nightingale',
     +    inventorOf: ['coxcomb chart', 'modern nursing'],
-    }
+    };
 
     // bad
     const hero = {

From 867bfdeace20e93c0730349ba6042c4609979731 Mon Sep 17 00:00:00 2001
From: Ankit Sardesai <amsardesai@gmail.com>
Date: Sat, 12 Sep 2015 21:05:50 -0400
Subject: [PATCH 0307/1591] Added id-length rule to style guide

---
 packages/eslint-config-airbnb/base/index.js | 4 ++++
 1 file changed, 4 insertions(+)

diff --git a/packages/eslint-config-airbnb/base/index.js b/packages/eslint-config-airbnb/base/index.js
index ee578638f0..ce6bd481b5 100644
--- a/packages/eslint-config-airbnb/base/index.js
+++ b/packages/eslint-config-airbnb/base/index.js
@@ -128,6 +128,10 @@ module.exports = {
     'quotes': [
       2, 'single', 'avoid-escape'    // http://eslint.org/docs/rules/quotes
     ],
+    'id-length': [2, {
+      'min': 2,
+      'properties': 'never'
+    }],
     'camelcase': [2, {               // http://eslint.org/docs/rules/camelcase
       'properties': 'never'
     }],

From 15780d52843a6dd6f51f69768f0ed0f228ee2d13 Mon Sep 17 00:00:00 2001
From: Ankit Sardesai <amsardesai@gmail.com>
Date: Mon, 14 Sep 2015 17:26:16 -0400
Subject: [PATCH 0308/1591] Added id-length documentation url

---
 packages/eslint-config-airbnb/base/index.js | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/packages/eslint-config-airbnb/base/index.js b/packages/eslint-config-airbnb/base/index.js
index ce6bd481b5..dad7ce9e01 100644
--- a/packages/eslint-config-airbnb/base/index.js
+++ b/packages/eslint-config-airbnb/base/index.js
@@ -128,7 +128,7 @@ module.exports = {
     'quotes': [
       2, 'single', 'avoid-escape'    // http://eslint.org/docs/rules/quotes
     ],
-    'id-length': [2, {
+    'id-length': [2, {               // http://eslint.org/docs/rules/id-length
       'min': 2,
       'properties': 'never'
     }],

From af180978bf8c56135c7cc8d694ed7c6b0b40b77b Mon Sep 17 00:00:00 2001
From: Sindre Moen <sindrenm@gmail.com>
Date: Thu, 17 Sep 2015 11:21:37 +0200
Subject: [PATCH 0309/1591] =?UTF-8?q?Add=20Hyper=20to=20the=20=E2=80=9Cin?=
 =?UTF-8?q?=20the=20wild=E2=80=9D=20list=20in=20README?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 README.md | 1 +
 1 file changed, 1 insertion(+)

diff --git a/README.md b/README.md
index d06edd70ac..04157e0c9f 100644
--- a/README.md
+++ b/README.md
@@ -2146,6 +2146,7 @@ Other Style Guides
   - **Grooveshark**: [grooveshark/javascript](https://github.com/grooveshark/javascript)
   - **How About We**: [howaboutwe/javascript](https://github.com/howaboutwe/javascript)
   - **Huballin**: [huballin/javascript](https://github.com/huballin/javascript)
+  - **Hyper**: [hyperoslo/javascript-playbook](https://github.com/hyperoslo/javascript-playbook/blob/master/style.md)
   - **InfoJobs**: [InfoJobs/JavaScript-Style-Guide](https://github.com/InfoJobs/JavaScript-Style-Guide)
   - **Intent Media**: [intentmedia/javascript](https://github.com/intentmedia/javascript)
   - **Jam3**: [Jam3/Javascript-Code-Conventions](https://github.com/Jam3/Javascript-Code-Conventions)

From 7619b854b21c6ffdb14ae7d2294f23cb79e0259f Mon Sep 17 00:00:00 2001
From: Sindre Moen <sindrenm@gmail.com>
Date: Thu, 17 Sep 2015 11:40:43 +0200
Subject: [PATCH 0310/1591] =?UTF-8?q?Remove=20issues=20from=20how=20to=20a?=
 =?UTF-8?q?dd=20to=20=E2=80=9Cin=20the=20wild=E2=80=9D?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 README.md | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/README.md b/README.md
index d06edd70ac..104c3596fd 100644
--- a/README.md
+++ b/README.md
@@ -2123,7 +2123,7 @@ Other Style Guides
 
 ## In the Wild
 
-  This is a list of organizations that are using this style guide. Send us a pull request or open an issue and we'll add you to the list.
+  This is a list of organizations that are using this style guide. Send us a pull request and we'll add you to the list.
 
   - **Aan Zee**: [AanZee/javascript](https://github.com/AanZee/javascript)
   - **Adult Swim**: [adult-swim/javascript](https://github.com/adult-swim/javascript)

From f25c85ef2e827f3d3892a0831775807e4bfc727f Mon Sep 17 00:00:00 2001
From: Jake Teton-Landis <jake.tl@airbnb.com>
Date: Thu, 24 Sep 2015 12:12:32 -0700
Subject: [PATCH 0311/1591] eslint-config-airbnb 0.0.9

---
 packages/eslint-config-airbnb/package.json | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/packages/eslint-config-airbnb/package.json b/packages/eslint-config-airbnb/package.json
index 050567251f..3325b424cf 100644
--- a/packages/eslint-config-airbnb/package.json
+++ b/packages/eslint-config-airbnb/package.json
@@ -1,6 +1,6 @@
 {
   "name": "eslint-config-airbnb",
-  "version": "0.0.8",
+  "version": "0.0.9",
   "description": "Airbnb's ESLint config, following our styleguide",
   "main": "index.js",
   "scripts": {

From e40ea1c24e09c9fba1b4d95b63ab6283dabd4ef6 Mon Sep 17 00:00:00 2001
From: Jake Teton-Landis <jake.tl@airbnb.com>
Date: Thu, 24 Sep 2015 12:18:34 -0700
Subject: [PATCH 0312/1591] update readme for eslint-config-airbnb 0.0.9

---
 packages/eslint-config-airbnb/README.md | 5 +++++
 1 file changed, 5 insertions(+)

diff --git a/packages/eslint-config-airbnb/README.md b/packages/eslint-config-airbnb/README.md
index ac184f1adb..1a8be54427 100644
--- a/packages/eslint-config-airbnb/README.md
+++ b/packages/eslint-config-airbnb/README.md
@@ -30,6 +30,11 @@ You can make sure this module lints with itself using `npm run lint`.
 
 ## Changelog
 
+### 0.0.9
+
+- add rule no-undef
+- add rule id-length
+
 ### 0.0.8
  - now has a changelog
  - now is modular (see instructions above for with react and without react versions)

From 58c901c3303610639327a6525613c5c8dfb8f949 Mon Sep 17 00:00:00 2001
From: Jake Teton-Landis <jake.tl@airbnb.com>
Date: Thu, 24 Sep 2015 12:25:34 -0700
Subject: [PATCH 0313/1591] use eslint 1.3.0 (fixes #515)

---
 packages/eslint-config-airbnb/package.json | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/packages/eslint-config-airbnb/package.json b/packages/eslint-config-airbnb/package.json
index 3325b424cf..c59c9e4cbe 100644
--- a/packages/eslint-config-airbnb/package.json
+++ b/packages/eslint-config-airbnb/package.json
@@ -28,7 +28,7 @@
   "devDependencies": {
     "babel-eslint": "4.0.10",
     "babel-tape-runner": "1.2.0",
-    "eslint": "1.1.0",
+    "eslint": "1.3.0",
     "eslint-plugin-react": "3.2.3",
     "react": "0.13.3",
     "tape": "4.2.0"

From 7d0e236b596e85ec42a8747913b0cf57c113522b Mon Sep 17 00:00:00 2001
From: Danny Nemer <DannyNemer@users.noreply.github.com>
Date: Fri, 25 Sep 2015 09:59:08 -0400
Subject: [PATCH 0314/1591] Clarify proper type casting for Numbers

Clarifies when to use `Number` vs. `parseInt` for Number type casting.

Fixes: #523
---
 README.md | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/README.md b/README.md
index 6c3762839a..243311b703 100644
--- a/README.md
+++ b/README.md
@@ -1640,7 +1640,7 @@ Other Style Guides
     const totalScore = String(this.reviewScore);
     ```
 
-  - [21.3](#21.3) <a name='21.3'></a> Use `parseInt` for Numbers and always with a radix for type casting.
+  - [21.3](#21.3) <a name='21.3'></a> Numbers: Use `Number` for type casting and `parseInt` always with a radix for parsing strings.
 
     ```javascript
     const inputValue = '4';

From daea8a638f1f42cd609f1b68b748ad323be31c10 Mon Sep 17 00:00:00 2001
From: Jimmy Jia <tesrin@gmail.com>
Date: Fri, 25 Sep 2015 16:15:38 -0400
Subject: [PATCH 0315/1591] Use rules from eslint-config-defaults

---
 packages/eslint-config-airbnb/.eslintrc       |   5 +-
 packages/eslint-config-airbnb/base.js         |  23 +++
 packages/eslint-config-airbnb/base/index.js   | 178 ------------------
 packages/eslint-config-airbnb/index.js        |  20 +-
 packages/eslint-config-airbnb/package.json    |   4 +-
 packages/eslint-config-airbnb/react.js        |  36 ----
 .../rules/best-practices.js                   | 113 +++++++++++
 packages/eslint-config-airbnb/rules/errors.js |  60 ++++++
 packages/eslint-config-airbnb/rules/es6.js    |  51 +++++
 packages/eslint-config-airbnb/rules/legacy.js |  16 ++
 packages/eslint-config-airbnb/rules/node.js   |  23 +++
 packages/eslint-config-airbnb/rules/react.js  |  78 ++++++++
 packages/eslint-config-airbnb/rules/strict.js |   6 +
 packages/eslint-config-airbnb/rules/style.js  | 111 +++++++++++
 .../eslint-config-airbnb/rules/variables.js   |  26 +++
 packages/eslint-config-airbnb/test/.eslintrc  |   7 +
 .../eslint-config-airbnb/test/test-base.js    |  33 +++-
 .../test/test-react-order.js                  |   9 +-
 18 files changed, 556 insertions(+), 243 deletions(-)
 create mode 100644 packages/eslint-config-airbnb/base.js
 delete mode 100644 packages/eslint-config-airbnb/base/index.js
 delete mode 100644 packages/eslint-config-airbnb/react.js
 create mode 100644 packages/eslint-config-airbnb/rules/best-practices.js
 create mode 100644 packages/eslint-config-airbnb/rules/errors.js
 create mode 100644 packages/eslint-config-airbnb/rules/es6.js
 create mode 100644 packages/eslint-config-airbnb/rules/legacy.js
 create mode 100644 packages/eslint-config-airbnb/rules/node.js
 create mode 100644 packages/eslint-config-airbnb/rules/react.js
 create mode 100644 packages/eslint-config-airbnb/rules/strict.js
 create mode 100644 packages/eslint-config-airbnb/rules/style.js
 create mode 100644 packages/eslint-config-airbnb/rules/variables.js
 create mode 100644 packages/eslint-config-airbnb/test/.eslintrc

diff --git a/packages/eslint-config-airbnb/.eslintrc b/packages/eslint-config-airbnb/.eslintrc
index cbf450f01f..4b3b1fa429 100644
--- a/packages/eslint-config-airbnb/.eslintrc
+++ b/packages/eslint-config-airbnb/.eslintrc
@@ -3,9 +3,6 @@
   "rules": {
     // disable requiring trailing commas because it might be nice to revert to
     // being JSON at some point, and I don't want to make big changes now.
-    "comma-dangle": 0,
-    // disabled because I find it tedious to write tests while following this
-    // rule
-    "no-shadow": 0
+    "comma-dangle": 0
   }
 }
diff --git a/packages/eslint-config-airbnb/base.js b/packages/eslint-config-airbnb/base.js
new file mode 100644
index 0000000000..f3cbf295ac
--- /dev/null
+++ b/packages/eslint-config-airbnb/base.js
@@ -0,0 +1,23 @@
+module.exports = {
+  'extends': [
+    './rules/best-practices.js',
+    './rules/errors.js',
+    './rules/es6.js',
+    './rules/legacy.js',
+    './rules/node.js',
+    './rules/strict.js',
+    './rules/style.js',
+    './rules/variables.js'
+  ],
+  'parser': 'babel-eslint',
+  'env': {
+    'browser': true,
+    'node': true,
+    'amd': false,
+    'mocha': false,
+    'jasmine': false
+  },
+  'ecmaFeatures': {},
+  'globals': {},
+  'rules': {}
+};
diff --git a/packages/eslint-config-airbnb/base/index.js b/packages/eslint-config-airbnb/base/index.js
deleted file mode 100644
index dad7ce9e01..0000000000
--- a/packages/eslint-config-airbnb/base/index.js
+++ /dev/null
@@ -1,178 +0,0 @@
-module.exports = {
-  'parser': 'babel-eslint',          // https://github.com/babel/babel-eslint
-  'env': {                           // http://eslint.org/docs/user-guide/configuring.html#specifying-environments
-    'browser': true,                 // browser global variables
-    'node': true                     // Node.js global variables and Node.js-specific rules
-  },
-  'ecmaFeatures': {
-    'arrowFunctions': true,
-    'blockBindings': true,
-    'classes': true,
-    'defaultParams': true,
-    'destructuring': true,
-    'forOf': true,
-    'generators': false,
-    'modules': true,
-    'objectLiteralComputedProperties': true,
-    'objectLiteralDuplicateProperties': false,
-    'objectLiteralShorthandMethods': true,
-    'objectLiteralShorthandProperties': true,
-    'spread': true,
-    'superInFunctions': true,
-    'templateStrings': true,
-    'jsx': true
-  },
-  'rules': {
-    /**
-     * Strict mode
-     */
-    // babel inserts 'use strict'; for us
-    'strict': [2, 'never'],          // http://eslint.org/docs/rules/strict
-
-    /**
-     * ES6
-     */
-    'no-var': 2,                     // http://eslint.org/docs/rules/no-var
-    'prefer-const': 2,               // http://eslint.org/docs/rules/prefer-const
-
-    /**
-     * Variables
-     */
-    'no-shadow': 2,                  // http://eslint.org/docs/rules/no-shadow
-    'no-shadow-restricted-names': 2, // http://eslint.org/docs/rules/no-shadow-restricted-names
-    'no-undef': 2,                   // http://eslint.org/docs/rules/no-undef
-    'no-unused-vars': [2, {          // http://eslint.org/docs/rules/no-unused-vars
-      'vars': 'local',
-      'args': 'after-used'
-    }],
-    'no-use-before-define': 2,       // http://eslint.org/docs/rules/no-use-before-define
-
-    /**
-     * Possible errors
-     */
-    'comma-dangle': [2, 'always-multiline'],    // http://eslint.org/docs/rules/comma-dangle
-    'no-cond-assign': [2, 'always'], // http://eslint.org/docs/rules/no-cond-assign
-    'no-console': 1,                 // http://eslint.org/docs/rules/no-console
-    'no-debugger': 1,                // http://eslint.org/docs/rules/no-debugger
-    'no-alert': 1,                   // http://eslint.org/docs/rules/no-alert
-    'no-constant-condition': 1,      // http://eslint.org/docs/rules/no-constant-condition
-    'no-dupe-keys': 2,               // http://eslint.org/docs/rules/no-dupe-keys
-    'no-duplicate-case': 2,          // http://eslint.org/docs/rules/no-duplicate-case
-    'no-empty': 2,                   // http://eslint.org/docs/rules/no-empty
-    'no-ex-assign': 2,               // http://eslint.org/docs/rules/no-ex-assign
-    'no-extra-boolean-cast': 0,      // http://eslint.org/docs/rules/no-extra-boolean-cast
-    'no-extra-semi': 2,              // http://eslint.org/docs/rules/no-extra-semi
-    'no-func-assign': 2,             // http://eslint.org/docs/rules/no-func-assign
-    'no-inner-declarations': 2,      // http://eslint.org/docs/rules/no-inner-declarations
-    'no-invalid-regexp': 2,          // http://eslint.org/docs/rules/no-invalid-regexp
-    'no-irregular-whitespace': 2,    // http://eslint.org/docs/rules/no-irregular-whitespace
-    'no-obj-calls': 2,               // http://eslint.org/docs/rules/no-obj-calls
-    'no-sparse-arrays': 2,           // http://eslint.org/docs/rules/no-sparse-arrays
-    'no-unreachable': 2,             // http://eslint.org/docs/rules/no-unreachable
-    'use-isnan': 2,                  // http://eslint.org/docs/rules/use-isnan
-    'block-scoped-var': 2,           // http://eslint.org/docs/rules/block-scoped-var
-
-    /**
-     * Best practices
-     */
-    'consistent-return': 2,          // http://eslint.org/docs/rules/consistent-return
-    'curly': [2, 'multi-line'],      // http://eslint.org/docs/rules/curly
-    'default-case': 2,               // http://eslint.org/docs/rules/default-case
-    'dot-notation': [2, {            // http://eslint.org/docs/rules/dot-notation
-      'allowKeywords': true
-    }],
-    'eqeqeq': 2,                     // http://eslint.org/docs/rules/eqeqeq
-    'guard-for-in': 2,               // http://eslint.org/docs/rules/guard-for-in
-    'no-caller': 2,                  // http://eslint.org/docs/rules/no-caller
-    'no-else-return': 2,             // http://eslint.org/docs/rules/no-else-return
-    'no-eq-null': 2,                 // http://eslint.org/docs/rules/no-eq-null
-    'no-eval': 2,                    // http://eslint.org/docs/rules/no-eval
-    'no-extend-native': 2,           // http://eslint.org/docs/rules/no-extend-native
-    'no-extra-bind': 2,              // http://eslint.org/docs/rules/no-extra-bind
-    'no-fallthrough': 2,             // http://eslint.org/docs/rules/no-fallthrough
-    'no-floating-decimal': 2,        // http://eslint.org/docs/rules/no-floating-decimal
-    'no-implied-eval': 2,            // http://eslint.org/docs/rules/no-implied-eval
-    'no-lone-blocks': 2,             // http://eslint.org/docs/rules/no-lone-blocks
-    'no-loop-func': 2,               // http://eslint.org/docs/rules/no-loop-func
-    'no-multi-str': 2,               // http://eslint.org/docs/rules/no-multi-str
-    'no-native-reassign': 2,         // http://eslint.org/docs/rules/no-native-reassign
-    'no-new': 2,                     // http://eslint.org/docs/rules/no-new
-    'no-new-func': 2,                // http://eslint.org/docs/rules/no-new-func
-    'no-new-wrappers': 2,            // http://eslint.org/docs/rules/no-new-wrappers
-    'no-octal': 2,                   // http://eslint.org/docs/rules/no-octal
-    'no-octal-escape': 2,            // http://eslint.org/docs/rules/no-octal-escape
-    'no-param-reassign': 2,          // http://eslint.org/docs/rules/no-param-reassign
-    'no-proto': 2,                   // http://eslint.org/docs/rules/no-proto
-    'no-redeclare': 2,               // http://eslint.org/docs/rules/no-redeclare
-    'no-return-assign': 2,           // http://eslint.org/docs/rules/no-return-assign
-    'no-script-url': 2,              // http://eslint.org/docs/rules/no-script-url
-    'no-self-compare': 2,            // http://eslint.org/docs/rules/no-self-compare
-    'no-sequences': 2,               // http://eslint.org/docs/rules/no-sequences
-    'no-throw-literal': 2,           // http://eslint.org/docs/rules/no-throw-literal
-    'no-with': 2,                    // http://eslint.org/docs/rules/no-with
-    'radix': 2,                      // http://eslint.org/docs/rules/radix
-    'vars-on-top': 2,                // http://eslint.org/docs/rules/vars-on-top
-    'wrap-iife': [2, 'any'],         // http://eslint.org/docs/rules/wrap-iife
-    'yoda': 2,                       // http://eslint.org/docs/rules/yoda
-
-    /**
-     * Style
-     */
-    'indent': [2, 2],                // http://eslint.org/docs/rules/indent
-    'brace-style': [
-      2,               // http://eslint.org/docs/rules/brace-style
-      '1tbs', {
-        'allowSingleLine': true
-      }
-    ],
-    'quotes': [
-      2, 'single', 'avoid-escape'    // http://eslint.org/docs/rules/quotes
-    ],
-    'id-length': [2, {               // http://eslint.org/docs/rules/id-length
-      'min': 2,
-      'properties': 'never'
-    }],
-    'camelcase': [2, {               // http://eslint.org/docs/rules/camelcase
-      'properties': 'never'
-    }],
-    'comma-spacing': [2, {           // http://eslint.org/docs/rules/comma-spacing
-      'before': false,
-      'after': true
-    }],
-    'comma-style': [2, 'last'],      // http://eslint.org/docs/rules/comma-style
-    'eol-last': 2,                   // http://eslint.org/docs/rules/eol-last
-    'func-names': 1,                 // http://eslint.org/docs/rules/func-names
-    'key-spacing': [2, {             // http://eslint.org/docs/rules/key-spacing
-      'beforeColon': false,
-      'afterColon': true
-    }],
-    'new-cap': [2, {                 // http://eslint.org/docs/rules/new-cap
-      'newIsCap': true
-    }],
-    'no-multiple-empty-lines': [2, { // http://eslint.org/docs/rules/no-multiple-empty-lines
-      'max': 2
-    }],
-    'no-nested-ternary': 2,          // http://eslint.org/docs/rules/no-nested-ternary
-    'no-new-object': 2,              // http://eslint.org/docs/rules/no-new-object
-    'no-spaced-func': 2,             // http://eslint.org/docs/rules/no-spaced-func
-    'no-trailing-spaces': 2,         // http://eslint.org/docs/rules/no-trailing-spaces
-    'no-extra-parens': [2, 'functions'], // http://eslint.org/docs/rules/no-extra-parens
-    'no-underscore-dangle': 0,       // http://eslint.org/docs/rules/no-underscore-dangle
-    'one-var': [2, 'never'],         // http://eslint.org/docs/rules/one-var
-    'padded-blocks': [2, 'never'],   // http://eslint.org/docs/rules/padded-blocks
-    'semi': [2, 'always'],           // http://eslint.org/docs/rules/semi
-    'semi-spacing': [2, {            // http://eslint.org/docs/rules/semi-spacing
-      'before': false,
-      'after': true
-    }],
-    'space-after-keywords': 2,       // http://eslint.org/docs/rules/space-after-keywords
-    'space-before-blocks': 2,        // http://eslint.org/docs/rules/space-before-blocks
-    'space-before-function-paren': [2, 'never'], // http://eslint.org/docs/rules/space-before-function-paren
-    'space-infix-ops': 2,            // http://eslint.org/docs/rules/space-infix-ops
-    'space-return-throw-case': 2,    // http://eslint.org/docs/rules/space-return-throw-case
-    'spaced-comment': [2, 'always',  {// http://eslint.org/docs/rules/spaced-comment
-      'exceptions': ['-', '+'],
-      'markers': ['=', '!']           // space here to support sprockets directives
-    }],
-  }
-};
diff --git a/packages/eslint-config-airbnb/index.js b/packages/eslint-config-airbnb/index.js
index 3cda9b0f9c..74d6f3455e 100644
--- a/packages/eslint-config-airbnb/index.js
+++ b/packages/eslint-config-airbnb/index.js
@@ -1,13 +1,7 @@
-const reactRules = require('./react');
-const base = require('./base');
-
-// clone this so we aren't mutating a module
-const eslintrc = JSON.parse(JSON.stringify(base));
-
-// manually merge in React rules
-eslintrc.plugins = reactRules.plugins;
-Object.keys(reactRules.rules).forEach(function assignRule(ruleId) {
-  eslintrc.rules[ruleId] = reactRules.rules[ruleId];
-});
-
-module.exports = eslintrc;
+module.exports = {
+  'extends': [
+    // Need to qualify these here for ESLint to resolve them properly.
+    'airbnb/base',
+    'airbnb/rules/react.js'
+  ]
+};
diff --git a/packages/eslint-config-airbnb/package.json b/packages/eslint-config-airbnb/package.json
index c59c9e4cbe..87c9da2e9e 100644
--- a/packages/eslint-config-airbnb/package.json
+++ b/packages/eslint-config-airbnb/package.json
@@ -4,8 +4,8 @@
   "description": "Airbnb's ESLint config, following our styleguide",
   "main": "index.js",
   "scripts": {
-    "lint": "./node_modules/.bin/eslint .",
-    "test": "./node_modules/.bin/babel-tape-runner ./test/test-*.js"
+    "lint": "eslint .",
+    "test": "babel-tape-runner ./test/test-*.js"
   },
   "repository": {
     "type": "git",
diff --git a/packages/eslint-config-airbnb/react.js b/packages/eslint-config-airbnb/react.js
deleted file mode 100644
index a0ab17f396..0000000000
--- a/packages/eslint-config-airbnb/react.js
+++ /dev/null
@@ -1,36 +0,0 @@
-module.exports = {
-  'plugins': [
-    'react'                          // https://github.com/yannickcr/eslint-plugin-react
-  ],
-  rules: {
-    /**
-     * JSX style
-     */
-    'react/display-name': 0,         // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/display-name.md
-    'react/jsx-boolean-value': 2,    // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/jsx-boolean-value.md
-    'react/jsx-quotes': [2, 'double'], // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/jsx-quotes.md
-    'react/jsx-no-undef': 2,         // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/jsx-no-undef.md
-    'react/jsx-sort-props': 0,       // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/jsx-sort-props.md
-    'react/jsx-sort-prop-types': 0,  // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/jsx-sort-prop-types.md
-    'react/jsx-uses-react': 2,       // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/jsx-uses-react.md
-    'react/jsx-uses-vars': 2,        // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/jsx-uses-vars.md
-    'react/no-did-mount-set-state': [2, 'allow-in-func'], // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/no-did-mount-set-state.md
-    'react/no-did-update-set-state': 2, // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/no-did-update-set-state.md
-    'react/no-multi-comp': 2,        // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/no-multi-comp.md
-    'react/no-unknown-property': 2,  // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/no-unknown-property.md
-    'react/prop-types': 2,           // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/prop-types.md
-    'react/react-in-jsx-scope': 2,   // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/react-in-jsx-scope.md
-    'react/self-closing-comp': 2,    // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/self-closing-comp.md
-    'react/wrap-multilines': 2,      // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/wrap-multilines.md
-    'react/sort-comp': [2, {         // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/sort-comp.md
-      'order': [
-        'lifecycle',
-        '/^on.+$/',
-        '/^(get|set)(?!(InitialState$|DefaultProps$|ChildContext$)).+$/',
-        'everything-else',
-        '/^render.+$/',
-        'render'
-      ]
-    }]
-  }
-};
diff --git a/packages/eslint-config-airbnb/rules/best-practices.js b/packages/eslint-config-airbnb/rules/best-practices.js
new file mode 100644
index 0000000000..dfb50473b1
--- /dev/null
+++ b/packages/eslint-config-airbnb/rules/best-practices.js
@@ -0,0 +1,113 @@
+module.exports = {
+  'rules': {
+    // Enforces getter/setter pairs in objects
+    'accessor-pairs': 0,
+    // treat var statements as if they were block scoped
+    'block-scoped-var': 2,
+    // specify the maximum cyclomatic complexity allowed in a program
+    'complexity': [0, 11],
+    // require return statements to either always or never specify values
+    'consistent-return': 2,
+    // specify curly brace conventions for all control statements
+    'curly': [2, 'multi-line'],
+    // require default case in switch statements
+    'default-case': 2,
+    // encourages use of dot notation whenever possible
+    'dot-notation': [2, { 'allowKeywords': true}],
+    // enforces consistent newlines before or after dots
+    'dot-location': 0,
+    // require the use of === and !==
+    'eqeqeq': 2,
+    // make sure for-in loops have an if statement
+    'guard-for-in': 2,
+    // disallow the use of alert, confirm, and prompt
+    'no-alert': 1,
+    // disallow use of arguments.caller or arguments.callee
+    'no-caller': 2,
+    // disallow division operators explicitly at beginning of regular expression
+    'no-div-regex': 0,
+    // disallow else after a return in an if
+    'no-else-return': 2,
+    // disallow use of labels for anything other then loops and switches
+    'no-empty-label': 2,
+    // disallow comparisons to null without a type-checking operator
+    'no-eq-null': 2,
+    // disallow use of eval()
+    'no-eval': 2,
+    // disallow adding to native types
+    'no-extend-native': 2,
+    // disallow unnecessary function binding
+    'no-extra-bind': 2,
+    // disallow fallthrough of case statements
+    'no-fallthrough': 2,
+    // disallow the use of leading or trailing decimal points in numeric literals
+    'no-floating-decimal': 2,
+    // disallow the type conversions with shorter notations
+    'no-implicit-coercion': 0,
+    // disallow use of eval()-like methods
+    'no-implied-eval': 2,
+    // disallow this keywords outside of classes or class-like objects
+    'no-invalid-this': 0,
+    // disallow usage of __iterator__ property
+    'no-iterator': 2,
+    // disallow use of labeled statements
+    'no-labels': 2,
+    // disallow unnecessary nested blocks
+    'no-lone-blocks': 2,
+    // disallow creation of functions within loops
+    'no-loop-func': 2,
+    // disallow use of multiple spaces
+    'no-multi-spaces': 2,
+    // disallow use of multiline strings
+    'no-multi-str': 2,
+    // disallow reassignments of native objects
+    'no-native-reassign': 2,
+    // disallow use of new operator when not part of the assignment or comparison
+    'no-new': 2,
+    // disallow use of new operator for Function object
+    'no-new-func': 2,
+    // disallows creating new instances of String,Number, and Boolean
+    'no-new-wrappers': 2,
+    // disallow use of (old style) octal literals
+    'no-octal': 2,
+    // disallow use of octal escape sequences in string literals, such as
+    // var foo = 'Copyright \251';
+    'no-octal-escape': 2,
+    // disallow reassignment of function parameters
+    'no-param-reassign': 2,
+    // disallow use of process.env
+    'no-process-env': 0,
+    // disallow usage of __proto__ property
+    'no-proto': 2,
+    // disallow declaring the same variable more then once
+    'no-redeclare': 2,
+    // disallow use of assignment in return statement
+    'no-return-assign': 2,
+    // disallow use of `javascript:` urls.
+    'no-script-url': 2,
+    // disallow comparisons where both sides are exactly the same
+    'no-self-compare': 2,
+    // disallow use of comma operator
+    'no-sequences': 2,
+    // restrict what can be thrown as an exception
+    'no-throw-literal': 2,
+    // disallow usage of expressions in statement position
+    'no-unused-expressions': 2,
+    // disallow unnecessary .call() and .apply()
+    'no-useless-call': 0,
+    // disallow use of void operator
+    'no-void': 0,
+    // disallow usage of configurable warning terms in comments: e.g. todo
+    'no-warning-comments': [0, { 'terms': ['todo', 'fixme', 'xxx'], 'location': 'start' }],
+    // disallow use of the with statement
+    'no-with': 2,
+    // require use of the second argument for parseInt()
+    'radix': 2,
+    // requires to declare all vars on top of their containing scope
+    'vars-on-top': 2,
+    // require immediate function invocation to be wrapped in parentheses
+    'wrap-iife': [2, 'any'],
+    // require or disallow Yoda conditions
+    'yoda': 2
+  }
+};
diff --git a/packages/eslint-config-airbnb/rules/errors.js b/packages/eslint-config-airbnb/rules/errors.js
new file mode 100644
index 0000000000..ec1b1aab0e
--- /dev/null
+++ b/packages/eslint-config-airbnb/rules/errors.js
@@ -0,0 +1,60 @@
+module.exports = {
+  'rules': {
+    // disallow trailing commas in object literals
+    'comma-dangle': [2, 'always-multiline'],
+    // disallow assignment in conditional expressions
+    'no-cond-assign': [2, 'always'],
+    // disallow use of console
+    'no-console': 1,
+    // disallow use of constant expressions in conditions
+    'no-constant-condition': 1,
+    // disallow control characters in regular expressions
+    'no-control-regex': 2,
+    // disallow use of debugger
+    'no-debugger': 1,
+    // disallow duplicate arguments in functions
+    'no-dupe-args': 2,
+    // disallow duplicate keys when creating object literals
+    'no-dupe-keys': 2,
+    // disallow a duplicate case label.
+    'no-duplicate-case': 2,
+    // disallow the use of empty character classes in regular expressions
+    'no-empty-character-class': 2,
+    // disallow empty statements
+    'no-empty': 2,
+    // disallow assigning to the exception in a catch block
+    'no-ex-assign': 2,
+    // disallow double-negation boolean casts in a boolean context
+    'no-extra-boolean-cast': 0,
+    // disallow unnecessary parentheses
+    'no-extra-parens': [2, 'functions'],
+    // disallow unnecessary semicolons
+    'no-extra-semi': 2,
+    // disallow overwriting functions written as function declarations
+    'no-func-assign': 2,
+    // disallow function or variable declarations in nested blocks
+    'no-inner-declarations': 2,
+    // disallow invalid regular expression strings in the RegExp constructor
+    'no-invalid-regexp': 2,
+    // disallow irregular whitespace outside of strings and comments
+    'no-irregular-whitespace': 2,
+    // disallow negation of the left operand of an in expression
+    'no-negated-in-lhs': 2,
+    // disallow the use of object properties of the global object (Math and JSON) as functions
+    'no-obj-calls': 2,
+    // disallow multiple spaces in a regular expression literal
+    'no-regex-spaces': 2,
+    // disallow sparse arrays
+    'no-sparse-arrays': 2,
+    // disallow unreachable statements after a return, throw, continue, or break statement
+    'no-unreachable': 2,
+    // disallow comparisons with the value NaN
+    'use-isnan': 2,
+    // ensure JSDoc comments are valid
+    'valid-jsdoc': 0,
+    // ensure that the results of typeof are compared against a valid string
+    'valid-typeof': 2,
+    // Avoid code that looks like two expressions but is actually one
+    'no-unexpected-multiline': 0
+  }
+};
diff --git a/packages/eslint-config-airbnb/rules/es6.js b/packages/eslint-config-airbnb/rules/es6.js
new file mode 100644
index 0000000000..b672d4aae1
--- /dev/null
+++ b/packages/eslint-config-airbnb/rules/es6.js
@@ -0,0 +1,51 @@
+module.exports = {
+  'env': {
+    'es6': false
+  },
+  'ecmaFeatures': {
+    'arrowFunctions': true,
+    'blockBindings': true,
+    'classes': true,
+    'defaultParams': true,
+    'destructuring': true,
+    'forOf': true,
+    'generators': false,
+    'modules': true,
+    'objectLiteralComputedProperties': true,
+    'objectLiteralDuplicateProperties': false,
+    'objectLiteralShorthandMethods': true,
+    'objectLiteralShorthandProperties': true,
+    'spread': true,
+    'superInFunctions': true,
+    'templateStrings': true,
+    'jsx': true
+  },
+  'rules': {
+    // require parens in arrow function arguments
+    'arrow-parens': 0,
+    // require space before/after arrow function's arrow
+    'arrow-spacing': 0,
+    // verify super() callings in constructors
+    'constructor-super': 0,
+    // enforce the spacing around the * in generator functions
+    'generator-star-spacing': 0,
+    // disallow modifying variables of class declarations
+    'no-class-assign': 0,
+    // disallow modifying variables that are declared using const
+    'no-const-assign': 0,
+    // disallow to use this/super before super() calling in constructors.
+    'no-this-before-super': 0,
+    // require let or const instead of var
+    'no-var': 2,
+    // require method and property shorthand syntax for object literals
+    'object-shorthand': 0,
+    // suggest using of const declaration for variables that are never modified after declared
+    'prefer-const': 2,
+    // suggest using the spread operator instead of .apply()
+    'prefer-spread': 0,
+    // suggest using Reflect methods where applicable
+    'prefer-reflect': 0,
+    // disallow generator functions that do not have yield
+    'require-yield': 0
+  }
+};
diff --git a/packages/eslint-config-airbnb/rules/legacy.js b/packages/eslint-config-airbnb/rules/legacy.js
new file mode 100644
index 0000000000..1d0c518316
--- /dev/null
+++ b/packages/eslint-config-airbnb/rules/legacy.js
@@ -0,0 +1,16 @@
+module.exports = {
+  'rules': {
+    // specify the maximum depth that blocks can be nested
+    'max-depth': [0, 4],
+    // specify the maximum length of a line in your program
+    'max-len': [0, 80, 4],
+    // limits the number of parameters that can be used in the function declaration.
+    'max-params': [0, 3],
+    // specify the maximum number of statement allowed in a function
+    'max-statements': [0, 10],
+    // disallow use of bitwise operators
+    'no-bitwise': 0,
+    // disallow use of unary operators, ++ and --
+    'no-plusplus': 0
+  }
+};
diff --git a/packages/eslint-config-airbnb/rules/node.js b/packages/eslint-config-airbnb/rules/node.js
new file mode 100644
index 0000000000..16b6f20d45
--- /dev/null
+++ b/packages/eslint-config-airbnb/rules/node.js
@@ -0,0 +1,23 @@
+module.exports = {
+  'env': {
+    'node': true
+  },
+  'rules': {
+    // enforce return after a callback
+    'callback-return': 0,
+    // enforces error handling in callbacks (node environment)
+    'handle-callback-err': 0,
+    // disallow mixing regular variable and require declarations
+    'no-mixed-requires': [0, false],
+    // disallow use of new operator with the require function
+    'no-new-require': 0,
+    // disallow string concatenation with __dirname and __filename
+    'no-path-concat': 0,
+    // disallow process.exit()
+    'no-process-exit': 0,
+    // restrict usage of specified node modules
+    'no-restricted-modules': 0,
+    // disallow use of synchronous methods (off by default)
+    'no-sync': 0
+  }
+};
diff --git a/packages/eslint-config-airbnb/rules/react.js b/packages/eslint-config-airbnb/rules/react.js
new file mode 100644
index 0000000000..30783f0e12
--- /dev/null
+++ b/packages/eslint-config-airbnb/rules/react.js
@@ -0,0 +1,78 @@
+module.exports = {
+  'parser': 'babel-eslint',
+  'plugins': [
+    'react'
+  ],
+  'ecmaFeatures': {
+    'jsx': false
+  },
+  'rules': {
+    // Prevent missing displayName in a React component definition
+    'react/display-name': 0,
+    // Enforce boolean attributes notation in JSX
+    'react/jsx-boolean-value': 2,
+    // Enforce or disallow spaces inside of curly braces in JSX attributes
+    'react/jsx-curly-spacing': 0,
+    // Prevent duplicate props in JSX
+    'react/jsx-no-duplicate-props': 0,
+    // Disallow undeclared variables in JSX
+    'react/jsx-no-undef': 2,
+    // Enforce quote style for JSX attributes
+    'react/jsx-quotes': [2, 'double'],
+    // Enforce propTypes declarations alphabetical sorting
+    'react/jsx-sort-prop-types': 0,
+    // Enforce props alphabetical sorting
+    'react/jsx-sort-props': 0,
+    // Prevent React to be incorrectly marked as unused
+    'react/jsx-uses-react': 2,
+    // Prevent variables used in JSX to be incorrectly marked as unused
+    'react/jsx-uses-vars': 2,
+    // Prevent usage of dangerous JSX properties
+    'react/no-danger': 0,
+    // Prevent usage of setState in componentDidMount
+    'react/no-did-mount-set-state': [2, 'allow-in-func'],
+    // Prevent usage of setState in componentDidUpdate
+    'react/no-did-update-set-state': 2,
+    // Prevent multiple component definition per file
+    'react/no-multi-comp': 2,
+    // Prevent usage of unknown DOM property
+    'react/no-unknown-property': 2,
+    // Prevent missing props validation in a React component definition
+    'react/prop-types': 2,
+    // Prevent missing React when using JSX
+    'react/react-in-jsx-scope': 2,
+    // Restrict file extensions that may be required
+    'react/require-extension': 0,
+    // Prevent extra closing tags for components without children
+    'react/self-closing-comp': 2,
+    // Enforce component methods order
+    'react/sort-comp': [2, {
+      'order': [
+        'displayName',
+        'propTypes',
+        'contextTypes',
+        'childContextTypes',
+        'mixins',
+        'statics',
+        'defaultProps',
+        'constructor',
+        'getDefaultProps',
+        'getInitialState',
+        'getChildContext',
+        'componentWillMount',
+        'componentDidMount',
+        'componentWillReceiveProps',
+        'shouldComponentUpdate',
+        'componentWillUpdate',
+        'componentDidUpdate',
+        'componentWillUnmount',
+        '/^on.+$/',
+        '/^get.+$/',
+        '/^render.+$/',
+        'render'
+      ]
+    }],
+    // Prevent missing parentheses around multilines JSX
+    'react/wrap-multilines': 2
+  }
+};
diff --git a/packages/eslint-config-airbnb/rules/strict.js b/packages/eslint-config-airbnb/rules/strict.js
new file mode 100644
index 0000000000..90ac43608c
--- /dev/null
+++ b/packages/eslint-config-airbnb/rules/strict.js
@@ -0,0 +1,6 @@
+module.exports = {
+  'rules': {
+    // require that all functions are run in strict mode
+    'strict': [2, 'never']
+  }
+};
diff --git a/packages/eslint-config-airbnb/rules/style.js b/packages/eslint-config-airbnb/rules/style.js
new file mode 100644
index 0000000000..107b940ba9
--- /dev/null
+++ b/packages/eslint-config-airbnb/rules/style.js
@@ -0,0 +1,111 @@
+module.exports = {
+  'rules': {
+    // enforce spacing inside array brackets
+    'array-bracket-spacing': 0,
+    // enforce one true brace style
+    'brace-style': [2, '1tbs', {'allowSingleLine': true }],
+    // require camel case names
+    'camelcase': [2, {'properties': 'never'}],
+    // enforce spacing before and after comma
+    'comma-spacing': [2, {'before': false, 'after': true}],
+    // enforce one true comma style
+    'comma-style': [2, 'last'],
+    // require or disallow padding inside computed properties
+    'computed-property-spacing': 0,
+    // enforces consistent naming when capturing the current execution context
+    'consistent-this': 0,
+    // enforce newline at the end of file, with no multiple empty lines
+    'eol-last': 2,
+    // require function expressions to have a name
+    'func-names': 1,
+    // enforces use of function declarations or expressions
+    'func-style': 0,
+    // this option enforces minimum and maximum identifier lengths (variable names, property names etc.)
+    'id-length': 0,
+    // this option sets a specific tab width for your code
+    'indent': [2, 2],
+    // enforces spacing between keys and values in object literal properties
+    'key-spacing': [2, {'beforeColon': false, 'afterColon': true}],
+    // enforces empty lines around comments
+    'lines-around-comment': 0,
+    // disallow mixed 'LF' and 'CRLF' as linebreaks
+    'linebreak-style': 0,
+    // specify the maximum depth callbacks can be nested
+    'max-nested-callbacks': 0,
+    // require a capital letter for constructors
+    'new-cap': [2, {'newIsCap': true}],
+    // disallow the omission of parentheses when invoking a constructor with no arguments
+    'new-parens': 0,
+    // allow/disallow an empty newline after var statement
+    'newline-after-var': 0,
+    // disallow use of the Array constructor
+    'no-array-constructor': 0,
+    // disallow use of the continue statement
+    'no-continue': 0,
+    // disallow comments inline after code
+    'no-inline-comments': 0,
+    // disallow if as the only statement in an else block
+    'no-lonely-if': 0,
+    // disallow mixed spaces and tabs for indentation
+    'no-mixed-spaces-and-tabs': 0,
+    // disallow multiple empty lines
+    'no-multiple-empty-lines': [2, {'max': 2}],
+    // disallow nested ternary expressions
+    'no-nested-ternary': 2,
+    // disallow use of the Object constructor
+    'no-new-object': 2,
+    // disallow space between function identifier and application
+    'no-spaced-func': 2,
+    // disallow the use of ternary operators
+    'no-ternary': 0,
+    // disallow trailing whitespace at the end of lines
+    'no-trailing-spaces': 2,
+    // disallow dangling underscores in identifiers
+    'no-underscore-dangle': 0,
+    // disallow the use of Boolean literals in conditional expressions
+    'no-unneeded-ternary': 0,
+    // require or disallow padding inside curly braces
+    'object-curly-spacing': 0,
+    // allow just one var statement per function
+    'one-var': [2, 'never'],
+    // require assignment operator shorthand where possible or prohibit it entirely
+    'operator-assignment': 0,
+    // enforce operators to be placed before or after line breaks
+    'operator-linebreak': 0,
+    // enforce padding within blocks
+    'padded-blocks': [2, 'never'],
+    // require quotes around object literal property names
+    'quote-props': 0,
+    // specify whether double or single quotes should be used
+    'quotes': [2, 'single', 'avoid-escape'],
+    // require identifiers to match the provided regular expression
+    'id-match': 0,
+    // enforce spacing before and after semicolons
+    'semi-spacing': [2, {'before': false, 'after': true}],
+    // require or disallow use of semicolons instead of ASI
+    'semi': [2, 'always'],
+    // sort variables within the same declaration block
+    'sort-vars': 0,
+    // require a space after certain keywords
+    'space-after-keywords': 2,
+    // require or disallow space before blocks
+    'space-before-blocks': 2,
+    // require or disallow space before function opening parenthesis
+    'space-before-function-paren': [2, 'never'],
+    // require or disallow spaces inside parentheses
+    'space-in-parens': 0,
+    // require spaces around operators
+    'space-infix-ops': 2,
+    // require a space after return, throw, and case
+    'space-return-throw-case': 2,
+    // Require or disallow spaces before/after unary operators
+    'space-unary-ops': 0,
+    // require or disallow a space immediately following the // or /* in a comment
+    'spaced-comment': [2, 'always', {
+      'exceptions': ['-', '+'],
+      'markers': ['=', '!']           // space here to support sprockets directives
+    }],
+    // require regex literals to be wrapped in parentheses
+    'wrap-regex': 0
+  }
+};
diff --git a/packages/eslint-config-airbnb/rules/variables.js b/packages/eslint-config-airbnb/rules/variables.js
new file mode 100644
index 0000000000..3da93fe826
--- /dev/null
+++ b/packages/eslint-config-airbnb/rules/variables.js
@@ -0,0 +1,26 @@
+module.exports = {
+  'rules': {
+    // enforce or disallow variable initializations at definition
+    'init-declarations': 0,
+    // disallow the catch clause parameter name being the same as a variable in the outer scope
+    'no-catch-shadow': 0,
+    // disallow deletion of variables
+    'no-delete-var': 2,
+    // disallow labels that share a name with a variable
+    'no-label-var': 0,
+    // disallow shadowing of names such as arguments
+    'no-shadow-restricted-names': 2,
+    // disallow declaration of variables already declared in the outer scope
+    'no-shadow': 2,
+    // disallow use of undefined when initializing variables
+    'no-undef-init': 0,
+    // disallow use of undeclared variables unless mentioned in a /*global */ block
+    'no-undef': 2,
+    // disallow use of undefined variable
+    'no-undefined': 0,
+    // disallow declaration of variables that are not used in the code
+    'no-unused-vars': [2, {'vars': 'local', 'args': 'after-used'}],
+    // disallow use of variables before they are defined
+    'no-use-before-define': 2
+  }
+};
diff --git a/packages/eslint-config-airbnb/test/.eslintrc b/packages/eslint-config-airbnb/test/.eslintrc
new file mode 100644
index 0000000000..bb9f4d60bf
--- /dev/null
+++ b/packages/eslint-config-airbnb/test/.eslintrc
@@ -0,0 +1,7 @@
+{
+  "rules": {
+    // disabled because I find it tedious to write tests while following this
+    // rule
+    "no-shadow": 0
+  }
+}
diff --git a/packages/eslint-config-airbnb/test/test-base.js b/packages/eslint-config-airbnb/test/test-base.js
index ecf06cdf58..24aa884cd0 100644
--- a/packages/eslint-config-airbnb/test/test-base.js
+++ b/packages/eslint-config-airbnb/test/test-base.js
@@ -1,13 +1,30 @@
+import fs from 'fs';
+import path from 'path';
 import test from 'tape';
-import base from '../base';
 
-test('base: does not reference react', t => {
-  t.plan(2);
+const files = {
+  base: require('../base')
+};
 
-  t.notOk(base.plugins, 'plugins is unspecified');
+fs.readdirSync(path.join(__dirname, '../rules')).forEach(name => {
+  if (name === 'react.js') {
+    return;
+  }
 
-  // scan rules for react/ and fail if any exist
-  const reactRuleIds = Object.keys(base.rules)
-    .filter(ruleId => ruleId.indexOf('react/') === 0);
-  t.deepEquals(reactRuleIds, [], 'there are no react/ rules');
+  files[name] = require(`../rules/${name}`);
+});
+
+Object.keys(files).forEach(name => {
+  const config = files[name];
+
+  test(`${name}: does not reference react`, t => {
+    t.plan(2);
+
+    t.notOk(config.plugins, 'plugins is unspecified');
+
+    // scan rules for react/ and fail if any exist
+    const reactRuleIds = Object.keys(config.rules)
+      .filter(ruleId => ruleId.indexOf('react/') === 0);
+    t.deepEquals(reactRuleIds, [], 'there are no react/ rules');
+  });
 });
diff --git a/packages/eslint-config-airbnb/test/test-react-order.js b/packages/eslint-config-airbnb/test/test-react-order.js
index 9ef23f6737..2778b2dbc4 100644
--- a/packages/eslint-config-airbnb/test/test-react-order.js
+++ b/packages/eslint-config-airbnb/test/test-react-order.js
@@ -1,10 +1,15 @@
 import test from 'tape';
 import { CLIEngine } from 'eslint';
 import eslintrc from '../';
+import baseConfig from '../base';
+import reactRules from '../rules/react';
 
 const cli = new CLIEngine({
   useEslintrc: false,
   baseConfig: eslintrc,
+
+  // This rule fails when executing on text.
+  rules: {indent: 0},
 });
 
 function lint(text) {
@@ -25,8 +30,8 @@ ${body}
 test('validate react prop order', t => {
   t.test('make sure our eslintrc has React linting dependencies', t => {
     t.plan(2);
-    t.equal(eslintrc.parser, 'babel-eslint', 'uses babel-eslint');
-    t.equal(eslintrc.plugins[0], 'react', 'uses eslint-plugin-react');
+    t.equal(baseConfig.parser, 'babel-eslint', 'uses babel-eslint');
+    t.equal(reactRules.plugins[0], 'react', 'uses eslint-plugin-react');
   });
 
   t.test('passes a good component', t => {

From db6c4a8b4e7153f6df84e84eb82204c7e41e0c78 Mon Sep 17 00:00:00 2001
From: Jimmy Jia <tesrin@gmail.com>
Date: Fri, 25 Sep 2015 16:22:22 -0400
Subject: [PATCH 0316/1591] Remove differences from eslint-config-defaults

---
 packages/eslint-config-airbnb/rules/react.js  | 24 ++---------
 packages/eslint-config-airbnb/rules/style.js  |  2 +-
 packages/eslint-config-airbnb/test/.eslintrc  |  4 +-
 .../test/test-react-order.js                  | 42 +++++++++----------
 4 files changed, 29 insertions(+), 43 deletions(-)

diff --git a/packages/eslint-config-airbnb/rules/react.js b/packages/eslint-config-airbnb/rules/react.js
index 30783f0e12..0091c3023b 100644
--- a/packages/eslint-config-airbnb/rules/react.js
+++ b/packages/eslint-config-airbnb/rules/react.js
@@ -4,7 +4,7 @@ module.exports = {
     'react'
   ],
   'ecmaFeatures': {
-    'jsx': false
+    'jsx': true
   },
   'rules': {
     // Prevent missing displayName in a React component definition
@@ -48,26 +48,10 @@ module.exports = {
     // Enforce component methods order
     'react/sort-comp': [2, {
       'order': [
-        'displayName',
-        'propTypes',
-        'contextTypes',
-        'childContextTypes',
-        'mixins',
-        'statics',
-        'defaultProps',
-        'constructor',
-        'getDefaultProps',
-        'getInitialState',
-        'getChildContext',
-        'componentWillMount',
-        'componentDidMount',
-        'componentWillReceiveProps',
-        'shouldComponentUpdate',
-        'componentWillUpdate',
-        'componentDidUpdate',
-        'componentWillUnmount',
+        'lifecycle',
         '/^on.+$/',
-        '/^get.+$/',
+        '/^(get|set)(?!(InitialState$|DefaultProps$|ChildContext$)).+$/',
+        'everything-else',
         '/^render.+$/',
         'render'
       ]
diff --git a/packages/eslint-config-airbnb/rules/style.js b/packages/eslint-config-airbnb/rules/style.js
index 107b940ba9..519227eeef 100644
--- a/packages/eslint-config-airbnb/rules/style.js
+++ b/packages/eslint-config-airbnb/rules/style.js
@@ -21,7 +21,7 @@ module.exports = {
     // enforces use of function declarations or expressions
     'func-style': 0,
     // this option enforces minimum and maximum identifier lengths (variable names, property names etc.)
-    'id-length': 0,
+    'id-length': [2, {'min': 2, 'properties': 'never'}],
     // this option sets a specific tab width for your code
     'indent': [2, 2],
     // enforces spacing between keys and values in object literal properties
diff --git a/packages/eslint-config-airbnb/test/.eslintrc b/packages/eslint-config-airbnb/test/.eslintrc
index bb9f4d60bf..7f79874e41 100644
--- a/packages/eslint-config-airbnb/test/.eslintrc
+++ b/packages/eslint-config-airbnb/test/.eslintrc
@@ -2,6 +2,8 @@
   "rules": {
     // disabled because I find it tedious to write tests while following this
     // rule
-    "no-shadow": 0
+    "no-shadow": 0,
+    // tests uses `t` for tape
+    "id-length": [2, {"min": 2, "properties": "never", "exceptions": ["t"]}]
   }
 }
diff --git a/packages/eslint-config-airbnb/test/test-react-order.js b/packages/eslint-config-airbnb/test/test-react-order.js
index 2778b2dbc4..606f723671 100644
--- a/packages/eslint-config-airbnb/test/test-react-order.js
+++ b/packages/eslint-config-airbnb/test/test-react-order.js
@@ -37,13 +37,13 @@ test('validate react prop order', t => {
   t.test('passes a good component', t => {
     t.plan(3);
     const result = lint(wrapComponent(`
-  componentWillMount() {  }
-  componentDidMount() {  }
-  setFoo() {  }
-  getFoo() {  }
-  setBar() {  }
-  someMethod() {  }
-  renderDogs() {  }
+  componentWillMount() {}
+  componentDidMount() {}
+  setFoo() {}
+  getFoo() {}
+  setBar() {}
+  someMethod() {}
+  renderDogs() {}
   render() { return <div />; }
 `));
 
@@ -55,13 +55,13 @@ test('validate react prop order', t => {
   t.test('order: when random method is first', t => {
     t.plan(2);
     const result = lint(wrapComponent(`
-  someMethod() {  }
-  componentWillMount() {  }
-  componentDidMount() {  }
-  setFoo() {  }
-  getFoo() {  }
-  setBar() {  }
-  renderDogs() {  }
+  someMethod() {}
+  componentWillMount() {}
+  componentDidMount() {}
+  setFoo() {}
+  getFoo() {}
+  setBar() {}
+  renderDogs() {}
   render() { return <div />; }
 `));
 
@@ -72,13 +72,13 @@ test('validate react prop order', t => {
   t.test('order: when random method after lifecycle methods', t => {
     t.plan(2);
     const result = lint(wrapComponent(`
-  componentWillMount() {  }
-  componentDidMount() {  }
-  someMethod() {  }
-  setFoo() {  }
-  getFoo() {  }
-  setBar() {  }
-  renderDogs() {  }
+  componentWillMount() {}
+  componentDidMount() {}
+  someMethod() {}
+  setFoo() {}
+  getFoo() {}
+  setBar() {}
+  renderDogs() {}
   render() { return <div />; }
 `));
 

From 9c7674a7b3daad3f26e4a0bb6cf6d8fbec6789be Mon Sep 17 00:00:00 2001
From: Jimmy Jia <tesrin@gmail.com>
Date: Fri, 25 Sep 2015 16:27:48 -0400
Subject: [PATCH 0317/1591] Update for upstream dependencies

- react/jsx-quotes has been superseded by jsx-quotes
- eqeqeq now covers comparisons to null
---
 packages/eslint-config-airbnb/package.json            | 6 +++---
 packages/eslint-config-airbnb/rules/best-practices.js | 2 +-
 packages/eslint-config-airbnb/rules/react.js          | 2 +-
 packages/eslint-config-airbnb/rules/style.js          | 2 ++
 4 files changed, 7 insertions(+), 5 deletions(-)

diff --git a/packages/eslint-config-airbnb/package.json b/packages/eslint-config-airbnb/package.json
index 87c9da2e9e..39f5126288 100644
--- a/packages/eslint-config-airbnb/package.json
+++ b/packages/eslint-config-airbnb/package.json
@@ -26,10 +26,10 @@
   },
   "homepage": "https://github.com/airbnb/javascript",
   "devDependencies": {
-    "babel-eslint": "4.0.10",
+    "babel-eslint": "4.1.3",
     "babel-tape-runner": "1.2.0",
-    "eslint": "1.3.0",
-    "eslint-plugin-react": "3.2.3",
+    "eslint": "1.5.1",
+    "eslint-plugin-react": "3.4.2",
     "react": "0.13.3",
     "tape": "4.2.0"
   }
diff --git a/packages/eslint-config-airbnb/rules/best-practices.js b/packages/eslint-config-airbnb/rules/best-practices.js
index dfb50473b1..9d8199eb77 100644
--- a/packages/eslint-config-airbnb/rules/best-practices.js
+++ b/packages/eslint-config-airbnb/rules/best-practices.js
@@ -31,7 +31,7 @@ module.exports = {
     // disallow use of labels for anything other then loops and switches
     'no-empty-label': 2,
     // disallow comparisons to null without a type-checking operator
-    'no-eq-null': 2,
+    'no-eq-null': 0,
     // disallow use of eval()
     'no-eval': 2,
     // disallow adding to native types
diff --git a/packages/eslint-config-airbnb/rules/react.js b/packages/eslint-config-airbnb/rules/react.js
index 0091c3023b..01aa64c30a 100644
--- a/packages/eslint-config-airbnb/rules/react.js
+++ b/packages/eslint-config-airbnb/rules/react.js
@@ -18,7 +18,7 @@ module.exports = {
     // Disallow undeclared variables in JSX
     'react/jsx-no-undef': 2,
     // Enforce quote style for JSX attributes
-    'react/jsx-quotes': [2, 'double'],
+    'react/jsx-quotes': 0,
     // Enforce propTypes declarations alphabetical sorting
     'react/jsx-sort-prop-types': 0,
     // Enforce props alphabetical sorting
diff --git a/packages/eslint-config-airbnb/rules/style.js b/packages/eslint-config-airbnb/rules/style.js
index 519227eeef..fa22403d8b 100644
--- a/packages/eslint-config-airbnb/rules/style.js
+++ b/packages/eslint-config-airbnb/rules/style.js
@@ -24,6 +24,8 @@ module.exports = {
     'id-length': [2, {'min': 2, 'properties': 'never'}],
     // this option sets a specific tab width for your code
     'indent': [2, 2],
+    // specify whether double or single quotes should be used in JSX attributes
+    'jsx-quotes': 2,
     // enforces spacing between keys and values in object literal properties
     'key-spacing': [2, {'beforeColon': false, 'afterColon': true}],
     // enforces empty lines around comments

From de90317a6dd027cdc7a2300687a0c7b2dc533037 Mon Sep 17 00:00:00 2001
From: Jake Teton-Landis <jake.tl@airbnb.com>
Date: Sun, 27 Sep 2015 18:47:13 -0700
Subject: [PATCH 0318/1591] create legacy.js to export es5 rules

---
 packages/eslint-config-airbnb/base.js   | 18 +-----------------
 packages/eslint-config-airbnb/index.js  |  5 ++---
 packages/eslint-config-airbnb/legacy.js | 21 +++++++++++++++++++++
 3 files changed, 24 insertions(+), 20 deletions(-)
 create mode 100644 packages/eslint-config-airbnb/legacy.js

diff --git a/packages/eslint-config-airbnb/base.js b/packages/eslint-config-airbnb/base.js
index f3cbf295ac..cc30af4a8d 100644
--- a/packages/eslint-config-airbnb/base.js
+++ b/packages/eslint-config-airbnb/base.js
@@ -1,23 +1,7 @@
 module.exports = {
   'extends': [
-    './rules/best-practices.js',
-    './rules/errors.js',
+    './legacy.js',
     './rules/es6.js',
-    './rules/legacy.js',
-    './rules/node.js',
-    './rules/strict.js',
-    './rules/style.js',
-    './rules/variables.js'
   ],
   'parser': 'babel-eslint',
-  'env': {
-    'browser': true,
-    'node': true,
-    'amd': false,
-    'mocha': false,
-    'jasmine': false
-  },
-  'ecmaFeatures': {},
-  'globals': {},
-  'rules': {}
 };
diff --git a/packages/eslint-config-airbnb/index.js b/packages/eslint-config-airbnb/index.js
index 74d6f3455e..aa13a960ad 100644
--- a/packages/eslint-config-airbnb/index.js
+++ b/packages/eslint-config-airbnb/index.js
@@ -1,7 +1,6 @@
 module.exports = {
   'extends': [
-    // Need to qualify these here for ESLint to resolve them properly.
-    'airbnb/base',
-    'airbnb/rules/react.js'
+    './base.js',
+    './rules/react.js',
   ]
 };
diff --git a/packages/eslint-config-airbnb/legacy.js b/packages/eslint-config-airbnb/legacy.js
new file mode 100644
index 0000000000..e85d6a5088
--- /dev/null
+++ b/packages/eslint-config-airbnb/legacy.js
@@ -0,0 +1,21 @@
+module.exports = {
+  'extends': [
+    './rules/best-practices.js',
+    './rules/errors.js',
+    './rules/legacy.js',
+    './rules/node.js',
+    './rules/strict.js',
+    './rules/style.js',
+    './rules/variables.js'
+  ],
+  'env': {
+    'browser': true,
+    'node': true,
+    'amd': false,
+    'mocha': false,
+    'jasmine': false
+  },
+  'ecmaFeatures': {},
+  'globals': {},
+  'rules': {}
+};

From 170dbeb5d45e2fb226efdad9f04bd939e6756393 Mon Sep 17 00:00:00 2001
From: Jake Teton-Landis <jake.tl@airbnb.com>
Date: Sun, 27 Sep 2015 19:32:34 -0700
Subject: [PATCH 0319/1591] make exported rulesets extend relative to
 eslint-config-airbnb

---
 packages/eslint-config-airbnb/base.js   |  5 +++--
 packages/eslint-config-airbnb/index.js  |  7 ++++---
 packages/eslint-config-airbnb/legacy.js | 14 +++++++-------
 3 files changed, 14 insertions(+), 12 deletions(-)

diff --git a/packages/eslint-config-airbnb/base.js b/packages/eslint-config-airbnb/base.js
index cc30af4a8d..ff9904e775 100644
--- a/packages/eslint-config-airbnb/base.js
+++ b/packages/eslint-config-airbnb/base.js
@@ -1,7 +1,8 @@
 module.exports = {
   'extends': [
-    './legacy.js',
-    './rules/es6.js',
+    'eslint-config-airbnb/legacy',
+    'eslint-config-airbnb/rules/es6',
   ],
   'parser': 'babel-eslint',
+  'rules': {}
 };
diff --git a/packages/eslint-config-airbnb/index.js b/packages/eslint-config-airbnb/index.js
index aa13a960ad..46d601fe3f 100644
--- a/packages/eslint-config-airbnb/index.js
+++ b/packages/eslint-config-airbnb/index.js
@@ -1,6 +1,7 @@
 module.exports = {
   'extends': [
-    './base.js',
-    './rules/react.js',
-  ]
+    'eslint-config-airbnb/base',
+    'eslint-config-airbnb/rules/react',
+  ],
+  rules: {}
 };
diff --git a/packages/eslint-config-airbnb/legacy.js b/packages/eslint-config-airbnb/legacy.js
index e85d6a5088..83a4931e84 100644
--- a/packages/eslint-config-airbnb/legacy.js
+++ b/packages/eslint-config-airbnb/legacy.js
@@ -1,12 +1,12 @@
 module.exports = {
   'extends': [
-    './rules/best-practices.js',
-    './rules/errors.js',
-    './rules/legacy.js',
-    './rules/node.js',
-    './rules/strict.js',
-    './rules/style.js',
-    './rules/variables.js'
+    'eslint-config-airbnb/rules/best-practices',
+    'eslint-config-airbnb/rules/errors',
+    'eslint-config-airbnb/rules/legacy',
+    'eslint-config-airbnb/rules/node',
+    'eslint-config-airbnb/rules/strict',
+    'eslint-config-airbnb/rules/style',
+    'eslint-config-airbnb/rules/variables'
   ],
   'env': {
     'browser': true,

From b42e9b82dd33649a6a9b839d727ae287afc2f145 Mon Sep 17 00:00:00 2001
From: Jake Teton-Landis <jake.tl@airbnb.com>
Date: Sun, 27 Sep 2015 19:45:52 -0700
Subject: [PATCH 0320/1591] explain eslint-config-airbnb rule choices

---
 packages/eslint-config-airbnb/README.md | 22 ++++++++++++++++++----
 1 file changed, 18 insertions(+), 4 deletions(-)

diff --git a/packages/eslint-config-airbnb/README.md b/packages/eslint-config-airbnb/README.md
index 1a8be54427..d8af31f6a4 100644
--- a/packages/eslint-config-airbnb/README.md
+++ b/packages/eslint-config-airbnb/README.md
@@ -4,16 +4,30 @@ This package provides Airbnb's .eslintrc as an extensible shared config.
 
 ## Usage
 
-### With React Style
+We export three ESLint configurations for your usage.
 
-1. `npm install --save-dev eslint-config-airbnb babel-eslint eslint-plugin-react`
+### eslint-config-airbnb
+
+Our default export contains all of our ESLint rules, including EcmaScript 6+
+and React. It requires `eslint`, `babel-eslint`, and `eslint-plugin-react`.
+
+1. `npm install --save-dev eslint-config-airbnb babel-eslint eslint-plugin-react eslint`
 2. add `"extends": "airbnb"` to your .eslintrc
 
-### Without React Style
+### eslint-config-airbnb/base
+
+Lints ES6+ but does not lint React. Requires `eslint` and `babel-eslint`.
 
-1. `npm install --save-dev eslint-config-airbnb babel-eslint `
+1. `npm install --save-dev eslint-config-airbnb babel-eslint eslint`
 2. add `"extends": "airbnb/base"` to your .eslintrc
 
+### eslint-config-airbnb/legacy
+
+Lints ES5 and below. Only requires `eslint`.
+
+1. `npm install --save-dev eslint-config-airbnb eslint`
+2. add `"extends": "airbnb/legacy"` to your .eslintrc
+
 See [Airbnb's Javascript styleguide](https://github.com/airbnb/javascript) and
 the [ESlint config docs](http://eslint.org/docs/user-guide/configuring#extending-configuration-files)
 for more information.

From e65c6afe443b1d6f761d7ffda9c90e90b9b1a94c Mon Sep 17 00:00:00 2001
From: Jake Teton-Landis <jake.tl@airbnb.com>
Date: Sun, 27 Sep 2015 20:00:06 -0700
Subject: [PATCH 0321/1591] eslint-config-airbnb v0.1.0

---
 packages/eslint-config-airbnb/README.md    | 13 +++++++++++++
 packages/eslint-config-airbnb/package.json |  2 +-
 2 files changed, 14 insertions(+), 1 deletion(-)

diff --git a/packages/eslint-config-airbnb/README.md b/packages/eslint-config-airbnb/README.md
index d8af31f6a4..f142c5a894 100644
--- a/packages/eslint-config-airbnb/README.md
+++ b/packages/eslint-config-airbnb/README.md
@@ -44,6 +44,19 @@ You can make sure this module lints with itself using `npm run lint`.
 
 ## Changelog
 
+### 0.1.0
+
+- switch to modular rules files courtesy the [eslint-config-default][ecd]
+  project and [@taion][taion]. [PR][pr-modular]
+- export `eslint-config-airbnb/legacy` for ES5-only users.
+  `eslint-config-airbnb/legacy` does not require the `babel-eslint` parser.
+  [PR][pr-legacy]
+
+[ecd]: https://github.com/walmartlabs/eslint-config-defaults
+[taion]: https://github.com/taion
+[pr-modular]: https://github.com/airbnb/javascript/pull/526
+[pr-legacy]: https://github.com/airbnb/javascript/pull/527
+
 ### 0.0.9
 
 - add rule no-undef
diff --git a/packages/eslint-config-airbnb/package.json b/packages/eslint-config-airbnb/package.json
index 39f5126288..e7cd1bcc3c 100644
--- a/packages/eslint-config-airbnb/package.json
+++ b/packages/eslint-config-airbnb/package.json
@@ -1,6 +1,6 @@
 {
   "name": "eslint-config-airbnb",
-  "version": "0.0.9",
+  "version": "0.1.0",
   "description": "Airbnb's ESLint config, following our styleguide",
   "main": "index.js",
   "scripts": {

From 8da7adbdd422530ebbd84b2974076ea594ef249c Mon Sep 17 00:00:00 2001
From: Jimmy Jia <tesrin@gmail.com>
Date: Tue, 29 Sep 2015 12:19:49 -0400
Subject: [PATCH 0322/1591] Clarify strict ESLint rule

---
 packages/eslint-config-airbnb/rules/strict.js | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/packages/eslint-config-airbnb/rules/strict.js b/packages/eslint-config-airbnb/rules/strict.js
index 90ac43608c..6d32f8ca59 100644
--- a/packages/eslint-config-airbnb/rules/strict.js
+++ b/packages/eslint-config-airbnb/rules/strict.js
@@ -1,6 +1,6 @@
 module.exports = {
   'rules': {
-    // require that all functions are run in strict mode
+    // babel inserts `'use strict';` for us
     'strict': [2, 'never']
   }
 };

From be61bbd53c93b4937be7c313c87a0a24c6f64be5 Mon Sep 17 00:00:00 2001
From: Gregory McCue <gsmccue@gmail.com>
Date: Thu, 1 Oct 2015 11:35:30 +0200
Subject: [PATCH 0323/1591] Add Ecosia to "In the Wild" section.

---
 README.md | 1 +
 1 file changed, 1 insertion(+)

diff --git a/README.md b/README.md
index 243311b703..55da2887d9 100644
--- a/README.md
+++ b/README.md
@@ -2136,6 +2136,7 @@ Other Style Guides
   - **Compass Learning**: [compasslearning/javascript-style-guide](https://github.com/compasslearning/javascript-style-guide)
   - **DailyMotion**: [dailymotion/javascript](https://github.com/dailymotion/javascript)
   - **Digitpaint** [digitpaint/javascript](https://github.com/digitpaint/javascript)
+  - **Ecosia**: [evernote/javascript](https://github.com/ecosia/javascript)
   - **Evernote**: [evernote/javascript-style-guide](https://github.com/evernote/javascript-style-guide)
   - **ExactTarget**: [ExactTarget/javascript](https://github.com/ExactTarget/javascript)
   - **Expensify** [Expensify/Style-Guide](https://github.com/Expensify/Style-Guide/blob/master/javascript.md)

From 3c3c9a299d8986819af2387e5a4766196480f1e7 Mon Sep 17 00:00:00 2001
From: Gregory McCue <gsmccue@gmail.com>
Date: Thu, 1 Oct 2015 19:08:05 +0200
Subject: [PATCH 0324/1591] Fix link text.

---
 README.md | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/README.md b/README.md
index 55da2887d9..731c54f810 100644
--- a/README.md
+++ b/README.md
@@ -2136,7 +2136,7 @@ Other Style Guides
   - **Compass Learning**: [compasslearning/javascript-style-guide](https://github.com/compasslearning/javascript-style-guide)
   - **DailyMotion**: [dailymotion/javascript](https://github.com/dailymotion/javascript)
   - **Digitpaint** [digitpaint/javascript](https://github.com/digitpaint/javascript)
-  - **Ecosia**: [evernote/javascript](https://github.com/ecosia/javascript)
+  - **Ecosia**: [ecosia/javascript](https://github.com/ecosia/javascript)
   - **Evernote**: [evernote/javascript-style-guide](https://github.com/evernote/javascript-style-guide)
   - **ExactTarget**: [ExactTarget/javascript](https://github.com/ExactTarget/javascript)
   - **Expensify** [Expensify/Style-Guide](https://github.com/Expensify/Style-Guide/blob/master/javascript.md)

From d4f69efeecc81b1d7a99725d6c6c8e4f494dd738 Mon Sep 17 00:00:00 2001
From: Kevin Cooper <cooperka92@gmail.com>
Date: Thu, 1 Oct 2015 14:56:39 -0700
Subject: [PATCH 0325/1591] Add reasoning for using double quotes in JSX

---
 react/README.md | 3 +++
 1 file changed, 3 insertions(+)

diff --git a/react/README.md b/react/README.md
index d1ce8c73da..b261d8cd89 100644
--- a/react/README.md
+++ b/react/README.md
@@ -117,6 +117,9 @@
 
 ## Quotes
   - Always use double quotes (`"`) for JSX attributes, but single quotes for all other JS.
+
+  > Why? JSX attributes [can't contain escaped quotes](http://eslint.org/docs/rules/jsx-quotes), so double quotes make conjunctions like `"don't"` easier to type.
+
     ```javascript
     // bad
     <Foo bar='bar' />

From ef7fbea3d94bc01907aedf26c686d00383d2201a Mon Sep 17 00:00:00 2001
From: Kevin Cooper <kcooper@yahoo-inc.com>
Date: Thu, 1 Oct 2015 16:53:49 -0700
Subject: [PATCH 0326/1591] Add further reasoning for using double quotes in
 JSX

---
 react/README.md | 1 +
 1 file changed, 1 insertion(+)

diff --git a/react/README.md b/react/README.md
index b261d8cd89..dd5592f4ed 100644
--- a/react/README.md
+++ b/react/README.md
@@ -119,6 +119,7 @@
   - Always use double quotes (`"`) for JSX attributes, but single quotes for all other JS.
 
   > Why? JSX attributes [can't contain escaped quotes](http://eslint.org/docs/rules/jsx-quotes), so double quotes make conjunctions like `"don't"` easier to type.
+  > Regular HTML attributes also typically use double quotes instead of single, so JSX attributes mirror this convention.
 
     ```javascript
     // bad

From 1b46be032edcd1dd3a6f993df2a886cbd83a0bdd Mon Sep 17 00:00:00 2001
From: Ankit Sardesai <amsardesai@gmail.com>
Date: Sun, 4 Oct 2015 03:15:09 -0400
Subject: [PATCH 0327/1591] Added version badge to eslint-config-airbnb

---
 packages/eslint-config-airbnb/README.md | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/packages/eslint-config-airbnb/README.md b/packages/eslint-config-airbnb/README.md
index f142c5a894..2eedfb5e97 100644
--- a/packages/eslint-config-airbnb/README.md
+++ b/packages/eslint-config-airbnb/README.md
@@ -1,5 +1,7 @@
 # eslint-config-airbnb
 
+[![npm version](https://badge.fury.io/js/eslint-config-airbnb.svg)](http://badge.fury.io/js/eslint-config-airbnb)
+
 This package provides Airbnb's .eslintrc as an extensible shared config.
 
 ## Usage

From 8dd0b758f3d0f1a5b3643d6c45bc4ba5c5d0a985 Mon Sep 17 00:00:00 2001
From: Nick Hwang <nhwang@hubspot.com>
Date: Tue, 13 Oct 2015 23:21:02 -0400
Subject: [PATCH 0328/1591] Add HubSpot to 'In The Wild' section

---
 README.md | 1 +
 1 file changed, 1 insertion(+)

diff --git a/README.md b/README.md
index 731c54f810..fdcdccae2b 100644
--- a/README.md
+++ b/README.md
@@ -2147,6 +2147,7 @@ Other Style Guides
   - **Grooveshark**: [grooveshark/javascript](https://github.com/grooveshark/javascript)
   - **How About We**: [howaboutwe/javascript](https://github.com/howaboutwe/javascript)
   - **Huballin**: [huballin/javascript](https://github.com/huballin/javascript)
+  - **HubSpot**: [HubSpot/javascript](https://github.com/HubSpot/javascript)
   - **Hyper**: [hyperoslo/javascript-playbook](https://github.com/hyperoslo/javascript-playbook/blob/master/style.md)
   - **InfoJobs**: [InfoJobs/JavaScript-Style-Guide](https://github.com/InfoJobs/JavaScript-Style-Guide)
   - **Intent Media**: [intentmedia/javascript](https://github.com/intentmedia/javascript)

From 9897e7d8d1d90d5aed622dc52326eb7af3ab0ba0 Mon Sep 17 00:00:00 2001
From: Christopher Banh <chrisngobanh@gmail.com>
Date: Thu, 15 Oct 2015 18:10:25 -0700
Subject: [PATCH 0329/1591] Add Section 18.8 - No padded blocks

This addresses #483
---
 README.md | 28 ++++++++++++++++++++++++++++
 1 file changed, 28 insertions(+)

diff --git a/README.md b/README.md
index fdcdccae2b..f91884f9b5 100644
--- a/README.md
+++ b/README.md
@@ -1511,6 +1511,34 @@ Other Style Guides
     return arr;
     ```
 
+  - [18.8](#18.8) <a name='18.8'></a> Do not pad your blocks with blank lines.
+
+    ```javascript
+    // bad
+    function bar() {
+
+      console.log(foo);
+
+    }
+
+    // also bad
+    function bar() {
+
+      console.log(foo);
+    }
+
+    // still bad
+    function bar() {
+      console.log(foo);
+
+    }
+
+    // good
+    function bar() {
+      console.log(foo);
+    }
+    ```
+
 
 **[⬆ back to top](#table-of-contents)**
 

From d276b0c3890e3c6523d91a919b311679800a1a74 Mon Sep 17 00:00:00 2001
From: Christopher Banh <chrisngobanh@gmail.com>
Date: Thu, 15 Oct 2015 18:15:54 -0700
Subject: [PATCH 0330/1591] Update 17.2 to allow comments in the first line of
 a block

In #483, justjake said that we should update the style guide to allow
single line comments in the first line of a block.
---
 README.md | 10 +++++++++-
 1 file changed, 9 insertions(+), 1 deletion(-)

diff --git a/README.md b/README.md
index f91884f9b5..c199359500 100644
--- a/README.md
+++ b/README.md
@@ -1248,7 +1248,7 @@ Other Style Guides
     }
     ```
 
-  - [17.2](#17.2) <a name='17.2'></a> Use `//` for single line comments. Place single line comments on a newline above the subject of the comment. Put an empty line before the comment.
+  - [17.2](#17.2) <a name='17.2'></a> Use `//` for single line comments. Place single line comments on a newline above the subject of the comment. Put an empty line before the comment unless it's on the first line of a block.
 
     ```javascript
     // bad
@@ -1276,6 +1276,14 @@ Other Style Guides
 
       return type;
     }
+
+    // also good
+    function getType() {
+      // set the default type to 'no type'
+      const type = this._type || 'no type';
+
+      return type;
+    }
     ```
 
   - [17.3](#17.3) <a name='17.3'></a> Prefixing your comments with `FIXME` or `TODO` helps other developers quickly understand if you're pointing out a problem that needs to be revisited, or if you're suggesting a solution to the problem that needs to be implemented. These are different than regular comments because they are actionable. The actions are `FIXME -- need to figure this out` or `TODO -- need to implement`.

From 4b5348a5fc597e2f6084aaec76f346e48d957fd2 Mon Sep 17 00:00:00 2001
From: Christopher Banh <chrisngobanh@gmail.com>
Date: Fri, 16 Oct 2015 10:35:14 -0700
Subject: [PATCH 0331/1591] Add examples with if statements to 18.8

---
 README.md | 12 ++++++++----
 1 file changed, 8 insertions(+), 4 deletions(-)

diff --git a/README.md b/README.md
index c199359500..028f7295ca 100644
--- a/README.md
+++ b/README.md
@@ -1530,19 +1530,23 @@ Other Style Guides
     }
 
     // also bad
-    function bar() {
+    if (baz) {
 
+      console.log(qux);
+    } else {
       console.log(foo);
+
     }
 
-    // still bad
+    // good
     function bar() {
       console.log(foo);
-
     }
 
     // good
-    function bar() {
+    if (baz) {
+      console.log(qux);
+    } else {
       console.log(foo);
     }
     ```

From efe7507e65a6ef95f04ffa33297ae397e8b63399 Mon Sep 17 00:00:00 2001
From: Maja Wichrowska <majapw@gmail.com>
Date: Tue, 20 Oct 2015 17:31:01 -0700
Subject: [PATCH 0332/1591] export default should not be inline with the class
 declaration

When there are static variables like `propTypes` and `defaultProps`, we shouldn't export them until we have actually set them onto the `Component`. This may change if the current ES7 proposal for static class properties gets accepts, and we update to support it.
---
 react/README.md | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

diff --git a/react/README.md b/react/README.md
index dd5592f4ed..6b0a8e13e9 100644
--- a/react/README.md
+++ b/react/README.md
@@ -274,7 +274,7 @@
     text: 'Hello World',
   };
   
-  export default class Link extends Component {
+  class Link extends Component {
     static methodsAreOk() {
       return true;
     }
@@ -286,6 +286,8 @@
   
   Link.propTypes = propTypes;
   Link.defaultProps = defaultProps;
+  
+  export default Link;
   ```
 
   - Ordering for React.createClass:

From ab0a6ca92ba7c43bcb7abb96b6630c46e3a0b2e1 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Adrien=20Verg=C3=A9?= <adrienverge@gmail.com>
Date: Fri, 23 Oct 2015 10:32:16 +0200
Subject: [PATCH 0333/1591] eslint: Add missing `space-before-keywords` rule

All examples in README.md seem to agree on avoiding missing whitespaces
before keywords such as:

    if (cond) {
    }else {       // no space before 'else'
    }

    try {
    }catch (e) {  // no space before 'catch'
    }

This patchs adds the `space-before-keywords` rule as an error (as is
`space-after-keywords` already).
---
 packages/eslint-config-airbnb/rules/style.js | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

diff --git a/packages/eslint-config-airbnb/rules/style.js b/packages/eslint-config-airbnb/rules/style.js
index fa22403d8b..68d76d4c9d 100644
--- a/packages/eslint-config-airbnb/rules/style.js
+++ b/packages/eslint-config-airbnb/rules/style.js
@@ -88,8 +88,10 @@ module.exports = {
     'semi': [2, 'always'],
     // sort variables within the same declaration block
     'sort-vars': 0,
+    // require a space before certain keywords
+    'space-before-keywords': [2, 'always'],
     // require a space after certain keywords
-    'space-after-keywords': 2,
+    'space-after-keywords': [2, 'always'],
     // require or disallow space before blocks
     'space-before-blocks': 2,
     // require or disallow space before function opening parenthesis

From b056ad09bb321169729ce1c6487056716154fe2e Mon Sep 17 00:00:00 2001
From: RH Becker <dev@rhbecker.info>
Date: Thu, 29 Oct 2015 22:43:33 -0700
Subject: [PATCH 0334/1591] Flag modification of variables that are declared
 using `const` keyword as an error.

---
 packages/eslint-config-airbnb/rules/es6.js | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/packages/eslint-config-airbnb/rules/es6.js b/packages/eslint-config-airbnb/rules/es6.js
index b672d4aae1..f192556a33 100644
--- a/packages/eslint-config-airbnb/rules/es6.js
+++ b/packages/eslint-config-airbnb/rules/es6.js
@@ -32,7 +32,7 @@ module.exports = {
     // disallow modifying variables of class declarations
     'no-class-assign': 0,
     // disallow modifying variables that are declared using const
-    'no-const-assign': 0,
+    'no-const-assign': 2,
     // disallow to use this/super before super() calling in constructors.
     'no-this-before-super': 0,
     // require let or const instead of var

From 7b834b989c9829ba0693ff7e3c74eb5ec058c18e Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Adrien=20Verg=C3=A9?= <adrienverge@gmail.com>
Date: Fri, 30 Oct 2015 17:00:14 +0100
Subject: [PATCH 0335/1591] eslint: Fix `no-mixed-spaces-and-tabs` turn off

Currently the way the rule is defined, mixing spaces and tabulations in
indentation is allowed. However, the comments and documents seems to say
the opposite.

This patchs turns the rule on so mixing spaces and tabs is NOT allowed.

Fixes: #539
---
 packages/eslint-config-airbnb/rules/style.js | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/packages/eslint-config-airbnb/rules/style.js b/packages/eslint-config-airbnb/rules/style.js
index 68d76d4c9d..6fce467280 100644
--- a/packages/eslint-config-airbnb/rules/style.js
+++ b/packages/eslint-config-airbnb/rules/style.js
@@ -49,7 +49,7 @@ module.exports = {
     // disallow if as the only statement in an else block
     'no-lonely-if': 0,
     // disallow mixed spaces and tabs for indentation
-    'no-mixed-spaces-and-tabs': 0,
+    'no-mixed-spaces-and-tabs': 2,
     // disallow multiple empty lines
     'no-multiple-empty-lines': [2, {'max': 2}],
     // disallow nested ternary expressions

From f2f8186d0f878c29209430dd0860745728ee4b53 Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Wed, 7 Oct 2015 18:18:04 -0700
Subject: [PATCH 0336/1591] Start to write a realistic "testing" section

---
 README.md | 12 ++++++++++--
 1 file changed, 10 insertions(+), 2 deletions(-)

diff --git a/README.md b/README.md
index fdcdccae2b..278cd1963e 100644
--- a/README.md
+++ b/README.md
@@ -2015,14 +2015,22 @@ Other Style Guides
 
 ## Testing
 
-  - [28.1](#28.1) <a name='28.1'></a> **Yup.**
+  - [28.1](#28.1) <a name="28.1"></a> **Yup.**
 
     ```javascript
-    function() {
+    function () {
       return true;
     }
     ```
 
+  - [28.2](#28.2) <a name="28.2"></a> **No, but seriously**:
+   - Whichever testing framework you use, you should be writing tests!
+   - Strive to write many small pure functions, and minimize where mutations occur.
+   - Be cautious about stubs and mocks - they can make your tests more brittle.
+   - We primarily use [`mocha`](https://www.npmjs.com/package/mocha) at Airbnb. [`tape`](https://www.npmjs.com/package/tape) is also used occasionally for small, separate modules.
+   - 100% test coverage is a good goal to strive for, even if it's not always practical to reach it.
+   - Whenever you fix a bug, _write a regression test_. A bug fixed without a regression test is almost certainly going to break again in the future.
+
 **[⬆ back to top](#table-of-contents)**
 
 

From 49293bbf8c589966a28298fe4845ad50f9ee39a4 Mon Sep 17 00:00:00 2001
From: frankenbot <frankensteinbot@gmail.com>
Date: Mon, 2 Nov 2015 20:11:56 -0800
Subject: [PATCH 0337/1591] Update redirects

---
 README.md | 34 +++++++++++++++++-----------------
 1 file changed, 17 insertions(+), 17 deletions(-)

diff --git a/README.md b/README.md
index fdcdccae2b..1a5e54116a 100644
--- a/README.md
+++ b/README.md
@@ -1109,7 +1109,7 @@ Other Style Guides
     }
     ```
 
-  - For more information refer to [JavaScript Scoping & Hoisting](http://www.adequatelygood.com/2010/2/JavaScript-Scoping-and-Hoisting) by [Ben Cherry](http://www.adequatelygood.com/).
+  - For more information refer to [JavaScript Scoping & Hoisting](http://www.adequatelygood.com/2010/2/JavaScript-Scoping-and-Hoisting/) by [Ben Cherry](http://www.adequatelygood.com/).
 
 **[⬆ back to top](#table-of-contents)**
 
@@ -1620,7 +1620,7 @@ Other Style Guides
     })();
     ```
 
-    [Read more](http://stackoverflow.com/a/7365214/1712802).
+    [Read more](http://stackoverflow.com/questions/7365172/semicolon-before-self-invoking-function/7365214%237365214).
 
 **[⬆ back to top](#table-of-contents)**
 
@@ -1989,7 +1989,7 @@ Other Style Guides
 
 ## ECMAScript 5 Compatibility
 
-  - [26.1](#26.1) <a name='26.1'></a> Refer to [Kangax](https://twitter.com/kangax/)'s ES5 [compatibility table](http://kangax.github.com/es5-compat-table/).
+  - [26.1](#26.1) <a name='26.1'></a> Refer to [Kangax](https://twitter.com/kangax/)'s ES5 [compatibility table](http://kangax.github.io/es5-compat-table/).
 
 **[⬆ back to top](#table-of-contents)**
 
@@ -2028,7 +2028,7 @@ Other Style Guides
 
 ## Performance
 
-  - [On Layout & Web Performance](http://kellegous.com/j/2013/01/26/layout-performance/)
+  - [On Layout & Web Performance](http://www.kellegous.com/j/2013/01/26/layout-performance/)
   - [String vs Array Concat](http://jsperf.com/string-vs-array-concat/2)
   - [Try/Catch Cost In a Loop](http://jsperf.com/try-catch-in-loop-cost)
   - [Bang Function](http://jsperf.com/bang-function)
@@ -2057,18 +2057,18 @@ Other Style Guides
 
   - Code Style Linters
     + [ESlint](http://eslint.org/) - [Airbnb Style .eslintrc](https://github.com/airbnb/javascript/blob/master/linters/.eslintrc)
-    + [JSHint](http://www.jshint.com/) - [Airbnb Style .jshintrc](https://github.com/airbnb/javascript/blob/master/linters/jshintrc)
+    + [JSHint](http://jshint.com/) - [Airbnb Style .jshintrc](https://github.com/airbnb/javascript/blob/master/linters/jshintrc)
     + [JSCS](https://github.com/jscs-dev/node-jscs) - [Airbnb Style Preset](https://github.com/jscs-dev/node-jscs/blob/master/presets/airbnb.json)
 
 **Other Style Guides**
 
   - [Google JavaScript Style Guide](http://google-styleguide.googlecode.com/svn/trunk/javascriptguide.xml)
-  - [jQuery Core Style Guidelines](http://docs.jquery.com/JQuery_Core_Style_Guidelines)
-  - [Principles of Writing Consistent, Idiomatic JavaScript](https://github.com/rwldrn/idiomatic.js/)
+  - [jQuery Core Style Guidelines](http://contribute.jquery.org/style-guide/js/)
+  - [Principles of Writing Consistent, Idiomatic JavaScript](https://github.com/rwaldron/idiomatic.js)
 
 **Other Styles**
 
-  - [Naming this in nested functions](https://gist.github.com/4135065) - Christian Johansen
+  - [Naming this in nested functions](https://gist.github.com/cjohansen/4135065) - Christian Johansen
   - [Conditional Callbacks](https://github.com/airbnb/javascript/issues/52) - Ross Allen
   - [Popular JavaScript Coding Conventions on Github](http://sideeffect.kr/popularconvention/#javascript) - JeongHoon Byun
   - [Multiple var statements in JavaScript, not superfluous](http://benalman.com/news/2012/05/multiple-var-statements-javascript/) - Ben Alman
@@ -2095,7 +2095,7 @@ Other Style Guides
   - [Human JavaScript](http://humanjavascript.com/) - Henrik Joreteg
   - [Superhero.js](http://superherojs.com/) - Kim Joar Bekkelund, Mads Mobæk, & Olav Bjorkoy
   - [JSBooks](http://jsbooks.revolunet.com/) - Julien Bouquillon
-  - [Third Party JavaScript](http://manning.com/vinegar/) - Ben Vinegar and Anton Kovalyov
+  - [Third Party JavaScript](https://www.manning.com/books/third-party-javascript) - Ben Vinegar and Anton Kovalyov
   - [Effective JavaScript: 68 Specific Ways to Harness the Power of JavaScript](http://amzn.com/0321812182) - David Herman
   - [Eloquent JavaScript](http://eloquentjavascript.net/) - Marijn Haverbeke
   - [You Don't Know JS: ES6 & Beyond](http://shop.oreilly.com/product/0636920033769.do) - Kyle Simpson
@@ -2105,18 +2105,18 @@ Other Style Guides
   - [DailyJS](http://dailyjs.com/)
   - [JavaScript Weekly](http://javascriptweekly.com/)
   - [JavaScript, JavaScript...](http://javascriptweblog.wordpress.com/)
-  - [Bocoup Weblog](http://weblog.bocoup.com/)
+  - [Bocoup Weblog](https://bocoup.com/weblog)
   - [Adequately Good](http://www.adequatelygood.com/)
-  - [NCZOnline](http://www.nczonline.net/)
+  - [NCZOnline](https://www.nczonline.net/)
   - [Perfection Kills](http://perfectionkills.com/)
   - [Ben Alman](http://benalman.com/)
   - [Dmitry Baranovskiy](http://dmitry.baranovskiy.com/)
   - [Dustin Diaz](http://dustindiaz.com/)
-  - [nettuts](http://net.tutsplus.com/?s=javascript)
+  - [nettuts](http://code.tutsplus.com/?s=javascript)
 
 **Podcasts**
 
-  - [JavaScript Jabber](http://devchat.tv/js-jabber/)
+  - [JavaScript Jabber](https://devchat.tv/js-jabber/)
 
 
 **[⬆ back to top](#table-of-contents)**
@@ -2132,7 +2132,7 @@ Other Style Guides
   - **Avalara**: [avalara/javascript](https://github.com/avalara/javascript)
   - **Billabong**: [billabong/javascript](https://github.com/billabong/javascript)
   - **Blendle**: [blendle/javascript](https://github.com/blendle/javascript)
-  - **ComparaOnline**: [comparaonline/javascript](https://github.com/comparaonline/javascript)
+  - **ComparaOnline**: [comparaonline/javascript](https://github.com/comparaonline/javascript-style-guide)
   - **Compass Learning**: [compasslearning/javascript-style-guide](https://github.com/compasslearning/javascript-style-guide)
   - **DailyMotion**: [dailymotion/javascript](https://github.com/dailymotion/javascript)
   - **Digitpaint** [digitpaint/javascript](https://github.com/digitpaint/javascript)
@@ -2145,7 +2145,7 @@ Other Style Guides
   - **General Electric**: [GeneralElectric/javascript](https://github.com/GeneralElectric/javascript)
   - **GoodData**: [gooddata/gdc-js-style](https://github.com/gooddata/gdc-js-style)
   - **Grooveshark**: [grooveshark/javascript](https://github.com/grooveshark/javascript)
-  - **How About We**: [howaboutwe/javascript](https://github.com/howaboutwe/javascript)
+  - **How About We**: [howaboutwe/javascript](https://github.com/howaboutwe/javascript-style-guide)
   - **Huballin**: [huballin/javascript](https://github.com/huballin/javascript)
   - **HubSpot**: [HubSpot/javascript](https://github.com/HubSpot/javascript)
   - **Hyper**: [hyperoslo/javascript-playbook](https://github.com/hyperoslo/javascript-playbook/blob/master/style.md)
@@ -2153,7 +2153,7 @@ Other Style Guides
   - **Intent Media**: [intentmedia/javascript](https://github.com/intentmedia/javascript)
   - **Jam3**: [Jam3/Javascript-Code-Conventions](https://github.com/Jam3/Javascript-Code-Conventions)
   - **JSSolutions**: [JSSolutions/javascript](https://github.com/JSSolutions/javascript)
-  - **Kinetica Solutions**: [kinetica/javascript](https://github.com/kinetica/javascript)
+  - **Kinetica Solutions**: [kinetica/javascript](https://github.com/kinetica/Javascript-style-guide)
   - **Mighty Spring**: [mightyspring/javascript](https://github.com/mightyspring/javascript)
   - **MinnPost**: [MinnPost/javascript](https://github.com/MinnPost/javascript)
   - **MitocGroup**: [MitocGroup/javascript](https://github.com/MitocGroup/javascript)
@@ -2172,7 +2172,7 @@ Other Style Guides
   - **SeekingAlpha**: [seekingalpha/javascript-style-guide](https://github.com/seekingalpha/javascript-style-guide)
   - **Shutterfly**: [shutterfly/javascript](https://github.com/shutterfly/javascript)
   - **Springload**: [springload/javascript](https://github.com/springload/javascript)
-  - **StudentSphere**: [studentsphere/javascript](https://github.com/studentsphere/javascript)
+  - **StudentSphere**: [studentsphere/javascript](https://github.com/studentsphere/guide-javascript)
   - **Target**: [target/javascript](https://github.com/target/javascript)
   - **TheLadders**: [TheLadders/javascript](https://github.com/TheLadders/javascript)
   - **T4R Technology**: [T4R-Technology/javascript](https://github.com/T4R-Technology/javascript)

From f130c0ffa26ae24f2e18bac33bc5cf7f62a2d938 Mon Sep 17 00:00:00 2001
From: Harrison Shoff <hi@hshoff.com>
Date: Wed, 4 Nov 2015 11:12:45 +0100
Subject: [PATCH 0338/1591] [6.5] add backticks around stray eval. fixes #556

---
 README.md | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/README.md b/README.md
index 2639e44172..5014f94097 100644
--- a/README.md
+++ b/README.md
@@ -447,7 +447,7 @@ Other Style Guides
       return `How are you, ${name}?`;
     }
     ```
-  - [6.5](#6.5) <a name='6.5'></a> Never use eval() on a string, it opens too many vulnerabilities.
+  - [6.5](#6.5) <a name='6.5'></a> Never use `eval()` on a string, it opens too many vulnerabilities.
 
 **[⬆ back to top](#table-of-contents)**
 

From 06ed38d57f70df7aeb7514672a9c205a4eae77d9 Mon Sep 17 00:00:00 2001
From: Jake Teton-Landis <jake.tl@airbnb.com>
Date: Thu, 5 Nov 2015 15:18:59 -0800
Subject: [PATCH 0339/1591] [eslint] remove id length rule (too much nutrage)

---
 packages/eslint-config-airbnb/rules/style.js | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/packages/eslint-config-airbnb/rules/style.js b/packages/eslint-config-airbnb/rules/style.js
index 6fce467280..c1d9ab9df8 100644
--- a/packages/eslint-config-airbnb/rules/style.js
+++ b/packages/eslint-config-airbnb/rules/style.js
@@ -21,7 +21,7 @@ module.exports = {
     // enforces use of function declarations or expressions
     'func-style': 0,
     // this option enforces minimum and maximum identifier lengths (variable names, property names etc.)
-    'id-length': [2, {'min': 2, 'properties': 'never'}],
+    'id-length': 0,
     // this option sets a specific tab width for your code
     'indent': [2, 2],
     // specify whether double or single quotes should be used in JSX attributes

From 7b0ff1246ee209f45e1d35068eb5817116a421de Mon Sep 17 00:00:00 2001
From: Jake Teton-Landis <jake.tl@airbnb.com>
Date: Thu, 5 Nov 2015 15:36:01 -0800
Subject: [PATCH 0340/1591] eslint-config-airbnb 0.1.1

---
 packages/eslint-config-airbnb/package.json | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/packages/eslint-config-airbnb/package.json b/packages/eslint-config-airbnb/package.json
index e7cd1bcc3c..f29f4c2255 100644
--- a/packages/eslint-config-airbnb/package.json
+++ b/packages/eslint-config-airbnb/package.json
@@ -1,6 +1,6 @@
 {
   "name": "eslint-config-airbnb",
-  "version": "0.1.0",
+  "version": "0.1.1",
   "description": "Airbnb's ESLint config, following our styleguide",
   "main": "index.js",
   "scripts": {

From 88603b84452ade320f5db09b9971b729ec53d490 Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Fri, 6 Nov 2015 13:09:34 -0800
Subject: [PATCH 0341/1591] [eslint] update `eslint`, `eslint-plugin-react`,
 `react`, `tape`.

---
 packages/eslint-config-airbnb/package.json | 8 ++++----
 1 file changed, 4 insertions(+), 4 deletions(-)

diff --git a/packages/eslint-config-airbnb/package.json b/packages/eslint-config-airbnb/package.json
index f29f4c2255..87b117d44d 100644
--- a/packages/eslint-config-airbnb/package.json
+++ b/packages/eslint-config-airbnb/package.json
@@ -28,9 +28,9 @@
   "devDependencies": {
     "babel-eslint": "4.1.3",
     "babel-tape-runner": "1.2.0",
-    "eslint": "1.5.1",
-    "eslint-plugin-react": "3.4.2",
-    "react": "0.13.3",
-    "tape": "4.2.0"
+    "eslint": "^1.8.0",
+    "eslint-plugin-react": "^3.7.1",
+    "react": "^0.13.3",
+    "tape": "^4.2.2"
   }
 }

From 0b7c979d82797c0ef54faa63e0a24ca596328c4f Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Fri, 6 Nov 2015 15:16:49 -0800
Subject: [PATCH 0342/1591] [eslint] Remove `babel-eslint` dependency.

---
 packages/eslint-config-airbnb/base.js                  | 1 -
 packages/eslint-config-airbnb/package.json             | 1 -
 packages/eslint-config-airbnb/rules/react.js           | 1 -
 packages/eslint-config-airbnb/test/test-react-order.js | 3 +--
 4 files changed, 1 insertion(+), 5 deletions(-)

diff --git a/packages/eslint-config-airbnb/base.js b/packages/eslint-config-airbnb/base.js
index ff9904e775..db661c5d1a 100644
--- a/packages/eslint-config-airbnb/base.js
+++ b/packages/eslint-config-airbnb/base.js
@@ -3,6 +3,5 @@ module.exports = {
     'eslint-config-airbnb/legacy',
     'eslint-config-airbnb/rules/es6',
   ],
-  'parser': 'babel-eslint',
   'rules': {}
 };
diff --git a/packages/eslint-config-airbnb/package.json b/packages/eslint-config-airbnb/package.json
index 87b117d44d..6236383673 100644
--- a/packages/eslint-config-airbnb/package.json
+++ b/packages/eslint-config-airbnb/package.json
@@ -26,7 +26,6 @@
   },
   "homepage": "https://github.com/airbnb/javascript",
   "devDependencies": {
-    "babel-eslint": "4.1.3",
     "babel-tape-runner": "1.2.0",
     "eslint": "^1.8.0",
     "eslint-plugin-react": "^3.7.1",
diff --git a/packages/eslint-config-airbnb/rules/react.js b/packages/eslint-config-airbnb/rules/react.js
index 01aa64c30a..6e18e1c252 100644
--- a/packages/eslint-config-airbnb/rules/react.js
+++ b/packages/eslint-config-airbnb/rules/react.js
@@ -1,5 +1,4 @@
 module.exports = {
-  'parser': 'babel-eslint',
   'plugins': [
     'react'
   ],
diff --git a/packages/eslint-config-airbnb/test/test-react-order.js b/packages/eslint-config-airbnb/test/test-react-order.js
index 606f723671..1a84b59230 100644
--- a/packages/eslint-config-airbnb/test/test-react-order.js
+++ b/packages/eslint-config-airbnb/test/test-react-order.js
@@ -29,8 +29,7 @@ ${body}
 
 test('validate react prop order', t => {
   t.test('make sure our eslintrc has React linting dependencies', t => {
-    t.plan(2);
-    t.equal(baseConfig.parser, 'babel-eslint', 'uses babel-eslint');
+    t.plan(1);
     t.equal(reactRules.plugins[0], 'react', 'uses eslint-plugin-react');
   });
 

From d432f58655bc28d79ffab591b7d03e37d19823d6 Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Fri, 6 Nov 2015 16:32:28 -0800
Subject: [PATCH 0343/1591] Add `eslint` as a peer dep, 1.0 or greater

---
 packages/eslint-config-airbnb/package.json | 3 +++
 1 file changed, 3 insertions(+)

diff --git a/packages/eslint-config-airbnb/package.json b/packages/eslint-config-airbnb/package.json
index 6236383673..a62acf3d26 100644
--- a/packages/eslint-config-airbnb/package.json
+++ b/packages/eslint-config-airbnb/package.json
@@ -31,5 +31,8 @@
     "eslint-plugin-react": "^3.7.1",
     "react": "^0.13.3",
     "tape": "^4.2.2"
+  },
+  "peerDependencies": {
+    "eslint": ">=1.0.0"
   }
 }

From d9b5585be4cf3f3c0627b4daab47388f46a1c571 Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Fri, 6 Nov 2015 16:53:10 -0800
Subject: [PATCH 0344/1591] [eslint config] v1.0.0

---
 packages/eslint-config-airbnb/README.md    | 10 ++++++++++
 packages/eslint-config-airbnb/package.json | 13 ++++++++++++-
 2 files changed, 22 insertions(+), 1 deletion(-)

diff --git a/packages/eslint-config-airbnb/README.md b/packages/eslint-config-airbnb/README.md
index f142c5a894..cde6950b4d 100644
--- a/packages/eslint-config-airbnb/README.md
+++ b/packages/eslint-config-airbnb/README.md
@@ -44,6 +44,16 @@ You can make sure this module lints with itself using `npm run lint`.
 
 ## Changelog
 
+### 1.0.0
+- require `eslint` `v1.0.0` or higher
+- removes `babel-eslint` dependency
+
+### 0.1.1
+- remove id-length rule (#569)
+- enable `no-mixed-spaces-and-tabs` (#539)
+- enable `no-const-assign` (#560)
+- enable `space-before-keywords` (#554)
+
 ### 0.1.0
 
 - switch to modular rules files courtesy the [eslint-config-default][ecd]
diff --git a/packages/eslint-config-airbnb/package.json b/packages/eslint-config-airbnb/package.json
index a62acf3d26..7eaca47e71 100644
--- a/packages/eslint-config-airbnb/package.json
+++ b/packages/eslint-config-airbnb/package.json
@@ -1,6 +1,6 @@
 {
   "name": "eslint-config-airbnb",
-  "version": "0.1.1",
+  "version": "1.0.0",
   "description": "Airbnb's ESLint config, following our styleguide",
   "main": "index.js",
   "scripts": {
@@ -20,6 +20,17 @@
     "styleguide"
   ],
   "author": "Jake Teton-Landis (https://twitter.com/@jitl)",
+  "contributors": [
+    {
+      "name": "Jake Teton-Landis",
+      "url": "https://twitter.com/jitl"
+    },
+    {
+      "name": "Jordan Harband",
+      "email": "ljharb@gmail.com",
+      "url": "http://ljharb.codes"
+    }
+  ],
   "license": "MIT",
   "bugs": {
     "url": "https://github.com/airbnb/javascript/issues"

From aa6ca6ff68a893b57573709b893ace911cc426ec Mon Sep 17 00:00:00 2001
From: Joscha Feth <joscha@feth.com>
Date: Mon, 9 Nov 2015 14:44:17 +1100
Subject: [PATCH 0345/1591] docs: babel-eslint not neede since 1.0.0 any more

---
 packages/eslint-config-airbnb/README.md | 8 ++++----
 1 file changed, 4 insertions(+), 4 deletions(-)

diff --git a/packages/eslint-config-airbnb/README.md b/packages/eslint-config-airbnb/README.md
index cde6950b4d..b328aa9eb6 100644
--- a/packages/eslint-config-airbnb/README.md
+++ b/packages/eslint-config-airbnb/README.md
@@ -9,16 +9,16 @@ We export three ESLint configurations for your usage.
 ### eslint-config-airbnb
 
 Our default export contains all of our ESLint rules, including EcmaScript 6+
-and React. It requires `eslint`, `babel-eslint`, and `eslint-plugin-react`.
+and React. It requires `eslint` and `eslint-plugin-react`.
 
-1. `npm install --save-dev eslint-config-airbnb babel-eslint eslint-plugin-react eslint`
+1. `npm install --save-dev eslint-config-airbnb eslint-plugin-react eslint`
 2. add `"extends": "airbnb"` to your .eslintrc
 
 ### eslint-config-airbnb/base
 
-Lints ES6+ but does not lint React. Requires `eslint` and `babel-eslint`.
+Lints ES6+ but does not lint React. Requires `eslint`.
 
-1. `npm install --save-dev eslint-config-airbnb babel-eslint eslint`
+1. `npm install --save-dev eslint-config-airbnb eslint`
 2. add `"extends": "airbnb/base"` to your .eslintrc
 
 ### eslint-config-airbnb/legacy

From 4c1fbf2bec202f22eed3de6c99de17dc6bab447a Mon Sep 17 00:00:00 2001
From: Janis Zarzeckis <jzarzeckis@evolutiongaming.com>
Date: Wed, 11 Nov 2015 14:14:18 +0200
Subject: [PATCH 0346/1591] Add Evolution Gaming to 'In The Wild' section

---
 README.md | 1 +
 1 file changed, 1 insertion(+)

diff --git a/README.md b/README.md
index faadf80e4e..e120e5ed55 100644
--- a/README.md
+++ b/README.md
@@ -2186,6 +2186,7 @@ Other Style Guides
   - **Digitpaint** [digitpaint/javascript](https://github.com/digitpaint/javascript)
   - **Ecosia**: [ecosia/javascript](https://github.com/ecosia/javascript)
   - **Evernote**: [evernote/javascript-style-guide](https://github.com/evernote/javascript-style-guide)
+  - **Evolution Gaming**: [Evolution-Gaming/javascript](https://github.com/Evolution-Gaming/javascript)
   - **ExactTarget**: [ExactTarget/javascript](https://github.com/ExactTarget/javascript)
   - **Expensify** [Expensify/Style-Guide](https://github.com/Expensify/Style-Guide/blob/master/javascript.md)
   - **Flexberry**: [Flexberry/javascript-style-guide](https://github.com/Flexberry/javascript-style-guide)

From 96b0057b30eaead919e076b25e299f4f68c10ac9 Mon Sep 17 00:00:00 2001
From: Janis Zarzeckis <jzarzeckis@evolutiongaming.com>
Date: Wed, 11 Nov 2015 17:48:50 +0200
Subject: [PATCH 0347/1591] Organisation renamed

---
 README.md | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/README.md b/README.md
index e120e5ed55..a13640cbb9 100644
--- a/README.md
+++ b/README.md
@@ -2186,7 +2186,7 @@ Other Style Guides
   - **Digitpaint** [digitpaint/javascript](https://github.com/digitpaint/javascript)
   - **Ecosia**: [ecosia/javascript](https://github.com/ecosia/javascript)
   - **Evernote**: [evernote/javascript-style-guide](https://github.com/evernote/javascript-style-guide)
-  - **Evolution Gaming**: [Evolution-Gaming/javascript](https://github.com/Evolution-Gaming/javascript)
+  - **Evolution Gaming**: [evolution-gaming/javascript](https://github.com/evolution-gaming/javascript)
   - **ExactTarget**: [ExactTarget/javascript](https://github.com/ExactTarget/javascript)
   - **Expensify** [Expensify/Style-Guide](https://github.com/Expensify/Style-Guide/blob/master/javascript.md)
   - **Flexberry**: [Flexberry/javascript-style-guide](https://github.com/Flexberry/javascript-style-guide)

From 09c8589e440f841690eb95c0787ed1d5ebf96f94 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Adrien=20Verg=C3=A9?= <adrienverge@gmail.com>
Date: Wed, 11 Nov 2015 10:24:34 -0800
Subject: [PATCH 0348/1591] [eslint] Enforce rule 18.5

Rule 18.5 [1] states that files shall end with a single newline
character. Until now, this was not checked because there was no such
option in eslint.

Since version 1.8.0, eslint provides the ability to do that. See pull
request on eslint [2] for details on implementation and usage. Let's use
it in airbnb eslint plugin now!

[1]: https://github.com/airbnb/javascript#18.5
[2]: https://github.com/eslint/eslint/pull/4266
---
 packages/eslint-config-airbnb/rules/style.js | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/packages/eslint-config-airbnb/rules/style.js b/packages/eslint-config-airbnb/rules/style.js
index c1d9ab9df8..c9df867f37 100644
--- a/packages/eslint-config-airbnb/rules/style.js
+++ b/packages/eslint-config-airbnb/rules/style.js
@@ -50,8 +50,8 @@ module.exports = {
     'no-lonely-if': 0,
     // disallow mixed spaces and tabs for indentation
     'no-mixed-spaces-and-tabs': 2,
-    // disallow multiple empty lines
-    'no-multiple-empty-lines': [2, {'max': 2}],
+    // disallow multiple empty lines and only one newline at the end
+    'no-multiple-empty-lines': [2, {'max': 2, 'maxEOF': 1}],
     // disallow nested ternary expressions
     'no-nested-ternary': 2,
     // disallow use of the Object constructor

From c501e0d5a667045635938b5ba433eee340b6ffff Mon Sep 17 00:00:00 2001
From: Jan Krems <jan.krems@groupon.com>
Date: Mon, 16 Nov 2015 13:40:38 -0800
Subject: [PATCH 0349/1591] Use require.resolve to allow nested extend

---
 packages/eslint-config-airbnb/base.js   | 2 +-
 packages/eslint-config-airbnb/index.js  | 2 +-
 packages/eslint-config-airbnb/legacy.js | 2 +-
 3 files changed, 3 insertions(+), 3 deletions(-)

diff --git a/packages/eslint-config-airbnb/base.js b/packages/eslint-config-airbnb/base.js
index db661c5d1a..093bd541be 100644
--- a/packages/eslint-config-airbnb/base.js
+++ b/packages/eslint-config-airbnb/base.js
@@ -2,6 +2,6 @@ module.exports = {
   'extends': [
     'eslint-config-airbnb/legacy',
     'eslint-config-airbnb/rules/es6',
-  ],
+  ].map(require.resolve),
   'rules': {}
 };
diff --git a/packages/eslint-config-airbnb/index.js b/packages/eslint-config-airbnb/index.js
index 46d601fe3f..a5a6c5e287 100644
--- a/packages/eslint-config-airbnb/index.js
+++ b/packages/eslint-config-airbnb/index.js
@@ -2,6 +2,6 @@ module.exports = {
   'extends': [
     'eslint-config-airbnb/base',
     'eslint-config-airbnb/rules/react',
-  ],
+  ].map(require.resolve),
   rules: {}
 };
diff --git a/packages/eslint-config-airbnb/legacy.js b/packages/eslint-config-airbnb/legacy.js
index 83a4931e84..d01122bc8d 100644
--- a/packages/eslint-config-airbnb/legacy.js
+++ b/packages/eslint-config-airbnb/legacy.js
@@ -7,7 +7,7 @@ module.exports = {
     'eslint-config-airbnb/rules/strict',
     'eslint-config-airbnb/rules/style',
     'eslint-config-airbnb/rules/variables'
-  ],
+  ].map(require.resolve),
   'env': {
     'browser': true,
     'node': true,

From a3495e07f484513db203e5d5654e47b221c19f4a Mon Sep 17 00:00:00 2001
From: jpersson <jonathan.persson@creuna.se>
Date: Tue, 17 Nov 2015 13:12:02 -0500
Subject: [PATCH 0350/1591] Avoid the word "mutate" while explaining `const`

---
 README.md | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/README.md b/README.md
index faadf80e4e..9f895b9a55 100644
--- a/README.md
+++ b/README.md
@@ -89,7 +89,7 @@ Other Style Guides
 
   - [2.1](#2.1) <a name='2.1'></a> Use `const` for all of your references; avoid using `var`.
 
-  > Why? This ensures that you can't reassign your references (mutation), which can lead to bugs and difficult to comprehend code.
+  > Why? This ensures that you can't reassign your references, which can lead to bugs and difficult to comprehend code.
 
     ```javascript
     // bad
@@ -101,7 +101,7 @@ Other Style Guides
     const b = 2;
     ```
 
-  - [2.2](#2.2) <a name='2.2'></a> If you must mutate references, use `let` instead of `var`.
+  - [2.2](#2.2) <a name='2.2'></a> If you must reassign references, use `let` instead of `var`.
 
   > Why? `let` is block-scoped rather than function-scoped like `var`.
 

From e424a249e31cee495ac4583871856db6e4b4d7c3 Mon Sep 17 00:00:00 2001
From: Ari Porad <ariporad@users.noreply.github.com>
Date: Wed, 25 Nov 2015 20:48:48 -0800
Subject: [PATCH 0351/1591] Enable rest params!

---
 packages/eslint-config-airbnb/rules/es6.js | 1 +
 1 file changed, 1 insertion(+)

diff --git a/packages/eslint-config-airbnb/rules/es6.js b/packages/eslint-config-airbnb/rules/es6.js
index f192556a33..b7fde7bf44 100644
--- a/packages/eslint-config-airbnb/rules/es6.js
+++ b/packages/eslint-config-airbnb/rules/es6.js
@@ -15,6 +15,7 @@ module.exports = {
     'objectLiteralDuplicateProperties': false,
     'objectLiteralShorthandMethods': true,
     'objectLiteralShorthandProperties': true,
+    'restParams': true,
     'spread': true,
     'superInFunctions': true,
     'templateStrings': true,

From e0326137d40437a5f727a8e86bab2b97a691b7de Mon Sep 17 00:00:00 2001
From: Jake Teton-Landis <jake.tl@airbnb.com>
Date: Thu, 26 Nov 2015 15:26:17 -0800
Subject: [PATCH 0352/1591] [eslint config] v1.0.2

---
 packages/eslint-config-airbnb/README.md    | 8 ++++++++
 packages/eslint-config-airbnb/package.json | 2 +-
 2 files changed, 9 insertions(+), 1 deletion(-)

diff --git a/packages/eslint-config-airbnb/README.md b/packages/eslint-config-airbnb/README.md
index b328aa9eb6..1466cf5b99 100644
--- a/packages/eslint-config-airbnb/README.md
+++ b/packages/eslint-config-airbnb/README.md
@@ -44,6 +44,14 @@ You can make sure this module lints with itself using `npm run lint`.
 
 ## Changelog
 
+### 1.0.2
+- enable rest params in linter, derp. (#592)
+- enforce rule 18.5, ensuring files end with a single newline character. (#578)
+
+### 1.0.1
+
+oops
+
 ### 1.0.0
 - require `eslint` `v1.0.0` or higher
 - removes `babel-eslint` dependency
diff --git a/packages/eslint-config-airbnb/package.json b/packages/eslint-config-airbnb/package.json
index 7eaca47e71..764e648a8f 100644
--- a/packages/eslint-config-airbnb/package.json
+++ b/packages/eslint-config-airbnb/package.json
@@ -1,6 +1,6 @@
 {
   "name": "eslint-config-airbnb",
-  "version": "1.0.0",
+  "version": "1.0.2",
   "description": "Airbnb's ESLint config, following our styleguide",
   "main": "index.js",
   "scripts": {

From 2557a5bca6b66108d27684ae25c6471e899b0cd7 Mon Sep 17 00:00:00 2001
From: Stefano Pigozzi <stefano.pigozzi@gmail.com>
Date: Sat, 28 Nov 2015 13:25:49 +0100
Subject: [PATCH 0353/1591] Add Section 18.9 - No spaces inside parentheses

See #593
---
 README.md                                    | 23 ++++++++++++++++++++
 packages/eslint-config-airbnb/rules/style.js |  4 ++--
 2 files changed, 25 insertions(+), 2 deletions(-)

diff --git a/README.md b/README.md
index 9f895b9a55..0c0822d024 100644
--- a/README.md
+++ b/README.md
@@ -1551,6 +1551,29 @@ Other Style Guides
     }
     ```
 
+  - [18.9](#18.9) <a name='18.9'></a> Do not add spaces inside parentheses.
+
+    ```javascript
+    // bad
+    function bar( foo ) {
+      return foo;
+    }
+
+    // good
+    function bar(foo) {
+      return foo;
+    }
+
+    // bad
+    if ( foo ) {
+      console.log(foo);
+    }
+
+    // good
+    if (foo) {
+      console.log(foo);
+    }
+    ```
 
 **[⬆ back to top](#table-of-contents)**
 
diff --git a/packages/eslint-config-airbnb/rules/style.js b/packages/eslint-config-airbnb/rules/style.js
index c9df867f37..54a9e2fef4 100644
--- a/packages/eslint-config-airbnb/rules/style.js
+++ b/packages/eslint-config-airbnb/rules/style.js
@@ -96,8 +96,8 @@ module.exports = {
     'space-before-blocks': 2,
     // require or disallow space before function opening parenthesis
     'space-before-function-paren': [2, 'never'],
-    // require or disallow spaces inside parentheses
-    'space-in-parens': 0,
+    // disallow spaces inside parentheses
+    'space-in-parens': [2, 'never'],
     // require spaces around operators
     'space-infix-ops': 2,
     // require a space after return, throw, and case

From ee3759a7eddd2ba96210c90b0d2ff87d9ba6d209 Mon Sep 17 00:00:00 2001
From: Stefano Pigozzi <stefano.pigozzi@gmail.com>
Date: Sat, 28 Nov 2015 13:28:28 +0100
Subject: [PATCH 0354/1591] Add Section 18.10 - No spaces inside brackets

See #593
---
 README.md                                    | 12 ++++++++++++
 packages/eslint-config-airbnb/rules/style.js |  6 +++---
 2 files changed, 15 insertions(+), 3 deletions(-)

diff --git a/README.md b/README.md
index 0c0822d024..c5d42505e3 100644
--- a/README.md
+++ b/README.md
@@ -1575,6 +1575,18 @@ Other Style Guides
     }
     ```
 
+  - [18.10](#18.10) <a name='18.10'></a> Do not add spaces inside brackets.
+
+    ```javascript
+    // bad
+    const foo = [ 1, 2, 3 ];
+    console.log(foo[ 0 ]);
+
+    // good
+    const foo = [1, 2, 3];
+    console.log(foo[0]);
+    ```
+
 **[⬆ back to top](#table-of-contents)**
 
 ## Commas
diff --git a/packages/eslint-config-airbnb/rules/style.js b/packages/eslint-config-airbnb/rules/style.js
index 54a9e2fef4..0b6fad09c4 100644
--- a/packages/eslint-config-airbnb/rules/style.js
+++ b/packages/eslint-config-airbnb/rules/style.js
@@ -1,7 +1,7 @@
 module.exports = {
   'rules': {
     // enforce spacing inside array brackets
-    'array-bracket-spacing': 0,
+    'array-bracket-spacing': [2, 'never'],
     // enforce one true brace style
     'brace-style': [2, '1tbs', {'allowSingleLine': true }],
     // require camel case names
@@ -10,8 +10,8 @@ module.exports = {
     'comma-spacing': [2, {'before': false, 'after': true}],
     // enforce one true comma style
     'comma-style': [2, 'last'],
-    // require or disallow padding inside computed properties
-    'computed-property-spacing': 0,
+    // disallow padding inside computed properties
+    'computed-property-spacing': [2, 'never'],
     // enforces consistent naming when capturing the current execution context
     'consistent-this': 0,
     // enforce newline at the end of file, with no multiple empty lines

From 6debbcdd733bd00fb7c7f155d86e130337f9709b Mon Sep 17 00:00:00 2001
From: Stefano Pigozzi <stefano.pigozzi@gmail.com>
Date: Sat, 28 Nov 2015 13:29:12 +0100
Subject: [PATCH 0355/1591] Add Section 18.11 - Add spaces inside curly braces

Fixes #593
---
 README.md                                    | 10 ++++++++++
 packages/eslint-config-airbnb/rules/style.js |  4 ++--
 2 files changed, 12 insertions(+), 2 deletions(-)

diff --git a/README.md b/README.md
index c5d42505e3..a953188d0a 100644
--- a/README.md
+++ b/README.md
@@ -1587,6 +1587,16 @@ Other Style Guides
     console.log(foo[0]);
     ```
 
+  - [18.11](#18.11) <a name='18.11'></a> Add spaces inside curly braces.
+
+    ```javascript
+    // bad
+    const foo = {clark: 'kent'};
+
+    // good
+    const foo = { clark: 'kent' };
+    ```
+
 **[⬆ back to top](#table-of-contents)**
 
 ## Commas
diff --git a/packages/eslint-config-airbnb/rules/style.js b/packages/eslint-config-airbnb/rules/style.js
index 0b6fad09c4..90e5aae3b9 100644
--- a/packages/eslint-config-airbnb/rules/style.js
+++ b/packages/eslint-config-airbnb/rules/style.js
@@ -66,8 +66,8 @@ module.exports = {
     'no-underscore-dangle': 0,
     // disallow the use of Boolean literals in conditional expressions
     'no-unneeded-ternary': 0,
-    // require or disallow padding inside curly braces
-    'object-curly-spacing': 0,
+    // require padding inside curly braces
+    'object-curly-spacing': [2, 'always'],
     // allow just one var statement per function
     'one-var': [2, 'never'],
     // require assignment operator shorthand where possible or prohibit it entirely

From 287dee40e5a2fd4ede4ba5b3db380a34d723809e Mon Sep 17 00:00:00 2001
From: zwhitchcox <zwhitchcox@gmail.com>
Date: Wed, 2 Dec 2015 12:48:46 -0500
Subject: [PATCH 0356/1591] Add facebook's react to "In the Wild"

I can't believe you guys didn't have that one! That's probably your best one.
---
 README.md | 1 +
 1 file changed, 1 insertion(+)

diff --git a/README.md b/README.md
index a953188d0a..2784631227 100644
--- a/README.md
+++ b/README.md
@@ -2260,6 +2260,7 @@ Other Style Guides
   - **Peerby**: [Peerby/javascript](https://github.com/Peerby/javascript)
   - **Razorfish**: [razorfish/javascript-style-guide](https://github.com/razorfish/javascript-style-guide)
   - **reddit**: [reddit/styleguide/javascript](https://github.com/reddit/styleguide/tree/master/javascript)
+  - **React**: [/facebook/react/blob/master/CONTRIBUTING.md#style-guide](https://github.com/facebook/react/blob/master/CONTRIBUTING.md#style-guide)
   - **REI**: [reidev/js-style-guide](https://github.com/reidev/js-style-guide)
   - **Ripple**: [ripple/javascript-style-guide](https://github.com/ripple/javascript-style-guide)
   - **SeekingAlpha**: [seekingalpha/javascript-style-guide](https://github.com/seekingalpha/javascript-style-guide)

From 2944b9b47b453220b709d2235c63b52addf76a15 Mon Sep 17 00:00:00 2001
From: Jordan Gensler <jordan.gensler@airbnb.com>
Date: Wed, 2 Dec 2015 12:24:01 -0800
Subject: [PATCH 0357/1591] Adding jeopardybot to styleguide users.

---
 README.md | 1 +
 1 file changed, 1 insertion(+)

diff --git a/README.md b/README.md
index a953188d0a..ea1dfe78d3 100644
--- a/README.md
+++ b/README.md
@@ -2245,6 +2245,7 @@ Other Style Guides
   - **InfoJobs**: [InfoJobs/JavaScript-Style-Guide](https://github.com/InfoJobs/JavaScript-Style-Guide)
   - **Intent Media**: [intentmedia/javascript](https://github.com/intentmedia/javascript)
   - **Jam3**: [Jam3/Javascript-Code-Conventions](https://github.com/Jam3/Javascript-Code-Conventions)
+  - **JeopardyBot**: [kesne/jeopardy-bot](https://github.com/kesne/jeopardy-bot/blob/master/STYLEGUIDE.md)
   - **JSSolutions**: [JSSolutions/javascript](https://github.com/JSSolutions/javascript)
   - **Kinetica Solutions**: [kinetica/javascript](https://github.com/kinetica/Javascript-style-guide)
   - **Mighty Spring**: [mightyspring/javascript](https://github.com/mightyspring/javascript)

From e754dcc7cf29b767f1aae615bdc99b78b54b044b Mon Sep 17 00:00:00 2001
From: Gerardo Renovales <camazorro@users.noreply.github.com>
Date: Wed, 2 Dec 2015 16:40:41 -0500
Subject: [PATCH 0358/1591] Update README.md

Adding Bisk to the list of organizations
---
 README.md | 1 +
 1 file changed, 1 insertion(+)

diff --git a/README.md b/README.md
index ea1dfe78d3..8b2ed0c2b2 100644
--- a/README.md
+++ b/README.md
@@ -2224,6 +2224,7 @@ Other Style Guides
   - **Apartmint**: [apartmint/javascript](https://github.com/apartmint/javascript)
   - **Avalara**: [avalara/javascript](https://github.com/avalara/javascript)
   - **Billabong**: [billabong/javascript](https://github.com/billabong/javascript)
+  - **Bisk**: [bisk/javascript](https://github.com/Bisk/javascript/)
   - **Blendle**: [blendle/javascript](https://github.com/blendle/javascript)
   - **ComparaOnline**: [comparaonline/javascript](https://github.com/comparaonline/javascript-style-guide)
   - **Compass Learning**: [compasslearning/javascript-style-guide](https://github.com/compasslearning/javascript-style-guide)

From 599ca4f1238ed3b57f4f5b721f253d2d1b75cda2 Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Wed, 2 Dec 2015 22:58:11 -0800
Subject: [PATCH 0359/1591] Require a space between `function` and `(`, and
 `function` and the function's name, and disallow spaces between the
 function's name and `(`.

---
 README.md                                    | 56 ++++++++++++--------
 packages/eslint-config-airbnb/rules/style.js |  5 +-
 2 files changed, 38 insertions(+), 23 deletions(-)

diff --git a/README.md b/README.md
index 0ed984acf5..a6158c41b3 100644
--- a/README.md
+++ b/README.md
@@ -598,6 +598,20 @@ Other Style Guides
   var subtract = Function('a', 'b', 'return a - b');
   ```
 
+- [7.11](#7.11) <a name="7.11"></a> Spacing in a function signature.
+
+  > Why? Consistency is good, and you shouldn’t have to add or remove a space when adding or removing a name.
+  ```javascript
+  // bad
+  const f = function(){};
+  const g = function (){};
+  const h = function() {};
+
+  // good
+  const x = function () {};
+  const y = function a() {};
+  ```
+
 **[⬆ back to top](#table-of-contents)**
 
 ## Arrow Functions
@@ -690,7 +704,7 @@ Other Style Guides
     function Queue(contents = []) {
       this._queue = [...contents];
     }
-    Queue.prototype.pop = function() {
+    Queue.prototype.pop = function () {
       const value = this._queue[0];
       this._queue.splice(0, 1);
       return value;
@@ -721,7 +735,7 @@ Other Style Guides
       Queue.apply(this, contents);
     }
     inherits(PeekableQueue, Queue);
-    PeekableQueue.prototype.peek = function() {
+    PeekableQueue.prototype.peek = function () {
       return this._queue[0];
     }
 
@@ -737,12 +751,12 @@ Other Style Guides
 
     ```javascript
     // bad
-    Jedi.prototype.jump = function() {
+    Jedi.prototype.jump = function () {
       this.jumping = true;
       return true;
     };
 
-    Jedi.prototype.setHeight = function(height) {
+    Jedi.prototype.setHeight = function (height) {
       this.height = height;
     };
 
@@ -974,7 +988,7 @@ Other Style Guides
 
     ```javascript
     // good
-    function() {
+    function () {
       test();
       console.log('doing stuff..');
 
@@ -990,7 +1004,7 @@ Other Style Guides
     }
 
     // bad - unnecessary function call
-    function(hasName) {
+    function (hasName) {
       const name = getName();
 
       if (!hasName) {
@@ -1003,7 +1017,7 @@ Other Style Guides
     }
 
     // good
-    function(hasName) {
+    function (hasName) {
       if (!hasName) {
         return false;
       }
@@ -1063,7 +1077,7 @@ Other Style Guides
 
       anonymous(); // => TypeError anonymous is not a function
 
-      var anonymous = function() {
+      var anonymous = function () {
         console.log('anonymous function expression');
       };
     }
@@ -1180,10 +1194,10 @@ Other Style Guides
     }
 
     // bad
-    function() { return false; }
+    function () { return false; }
 
     // good
-    function() {
+    function () {
       return false;
     }
     ```
@@ -1323,17 +1337,17 @@ Other Style Guides
 
     ```javascript
     // bad
-    function() {
+    function () {
     ∙∙∙∙const name;
     }
 
     // bad
-    function() {
+    function () {
     ∙const name;
     }
 
     // good
-    function() {
+    function () {
     ∙∙const name;
     }
     ```
@@ -1402,14 +1416,14 @@ Other Style Guides
 
     ```javascript
     // bad
-    (function(global) {
+    (function (global) {
       // ...stuff...
     })(this);
     ```
 
     ```javascript
     // bad
-    (function(global) {
+    (function (global) {
       // ...stuff...
     })(this);↵
     ↵
@@ -1417,7 +1431,7 @@ Other Style Guides
 
     ```javascript
     // good
-    (function(global) {
+    (function (global) {
       // ...stuff...
     })(this);↵
     ```
@@ -1687,7 +1701,7 @@ Other Style Guides
 
     ```javascript
     // bad
-    (function() {
+    (function () {
       const name = 'Skywalker'
       return name
     })()
@@ -1857,7 +1871,7 @@ Other Style Guides
     // bad
     function foo() {
       const self = this;
-      return function() {
+      return function () {
         console.log(self);
       };
     }
@@ -1865,7 +1879,7 @@ Other Style Guides
     // bad
     function foo() {
       const that = this;
-      return function() {
+      return function () {
         console.log(that);
       };
     }
@@ -1986,7 +2000,7 @@ Other Style Guides
 
     ...
 
-    $(this).on('listingUpdated', function(e, listingId) {
+    $(this).on('listingUpdated', function (e, listingId) {
       // do something with listingId
     });
     ```
@@ -1999,7 +2013,7 @@ Other Style Guides
 
     ...
 
-    $(this).on('listingUpdated', function(e, data) {
+    $(this).on('listingUpdated', function (e, data) {
       // do something with data.listingId
     });
     ```
diff --git a/packages/eslint-config-airbnb/rules/style.js b/packages/eslint-config-airbnb/rules/style.js
index 90e5aae3b9..54449e9c2c 100644
--- a/packages/eslint-config-airbnb/rules/style.js
+++ b/packages/eslint-config-airbnb/rules/style.js
@@ -95,8 +95,9 @@ module.exports = {
     // require or disallow space before blocks
     'space-before-blocks': 2,
     // require or disallow space before function opening parenthesis
-    'space-before-function-paren': [2, 'never'],
-    // disallow spaces inside parentheses
+    // https://github.com/eslint/eslint/blob/master/docs/rules/space-before-function-paren.md
+    'space-before-function-paren': [2, { 'anonymous': 'always', 'named': 'never' }],
+    // require or disallow spaces inside parentheses
     'space-in-parens': [2, 'never'],
     // require spaces around operators
     'space-infix-ops': 2,

From 4ccd04b69a8ca915b9637ac63e6f792f73f57553 Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Thu, 3 Dec 2015 00:09:12 -0800
Subject: [PATCH 0360/1591] I abhor switch statements, but their indentation
 should be:

```js
switch (foo) {
  case 'bar':
    break;
}
```

not what the plugin currently requires:
```js
switch (foo) {
case: 'bar':
  break;
}
```
---
 packages/eslint-config-airbnb/rules/style.js | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/packages/eslint-config-airbnb/rules/style.js b/packages/eslint-config-airbnb/rules/style.js
index 90e5aae3b9..b24943750e 100644
--- a/packages/eslint-config-airbnb/rules/style.js
+++ b/packages/eslint-config-airbnb/rules/style.js
@@ -23,7 +23,8 @@ module.exports = {
     // this option enforces minimum and maximum identifier lengths (variable names, property names etc.)
     'id-length': 0,
     // this option sets a specific tab width for your code
-    'indent': [2, 2],
+    // https://github.com/eslint/eslint/blob/master/docs/rules/indent.md
+    'indent': [2, 2, { "SwitchCase": 1, "VariableDeclarator": 1 }],
     // specify whether double or single quotes should be used in JSX attributes
     'jsx-quotes': 2,
     // enforces spacing between keys and values in object literal properties

From 4c0a70e4358704f4eb39a287bc8a3106825db19c Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Thu, 3 Dec 2015 13:55:09 -0800
Subject: [PATCH 0361/1591] [eslint config] v2.0.0

 - separate changelog
---
 packages/eslint-config-airbnb/CHANGELOG.md | 52 ++++++++++++++++++++++
 packages/eslint-config-airbnb/README.md    | 42 -----------------
 packages/eslint-config-airbnb/package.json |  2 +-
 3 files changed, 53 insertions(+), 43 deletions(-)
 create mode 100644 packages/eslint-config-airbnb/CHANGELOG.md

diff --git a/packages/eslint-config-airbnb/CHANGELOG.md b/packages/eslint-config-airbnb/CHANGELOG.md
new file mode 100644
index 0000000000..c6504072bf
--- /dev/null
+++ b/packages/eslint-config-airbnb/CHANGELOG.md
@@ -0,0 +1,52 @@
+2.0.0 / 2015-12-03
+==================
+ - [breaking] `space-before-function-paren`: require function spacing: `function <optional name>(` (#605)
+ - [breaking] `indent`: Fix switch statement indentation rule (#606)
+ - [breaking] `array-bracket-spacing`, `computed-property-spacing`: disallow spacing inside brackets (#594)
+ - [breaking] `object-curly-spacing`: require padding inside curly braces (#594)
+ - [breaking] `space-in-parens`: disallow spaces in parens (#594)
+
+1.0.2 / 2015-11-25
+==================
+ - [breaking] `no-multiple-empty-lines`: only allow 1 blank line at EOF (#578)
+ - [new] `restParams`: enable rest params (#592)
+
+1.0.1 / 2015-11-25
+==================
+ - *erroneous publish*
+
+1.0.0 / 2015-11-08
+==================
+ - require `eslint` `v1.0.0` or higher
+ - remove `babel-eslint` dependency
+
+0.1.1 / 2015-11-05
+==================
+ - remove id-length rule (#569)
+ - enable `no-mixed-spaces-and-tabs` (#539)
+ - enable `no-const-assign` (#560)
+ - enable `space-before-keywords` (#554)
+
+0.1.0 / 2015-11-05
+==================
+ - switch to modular rules files courtesy the [eslint-config-default][ecd] project and [@taion][taion]. [PR][pr-modular]
+ - export `eslint-config-airbnb/legacy` for ES5-only users. `eslint-config-airbnb/legacy` does not require the `babel-eslint` parser. [PR][pr-legacy]
+
+0.0.9 / 2015-09-24
+==================
+- add rule `no-undef`
+- add rule `id-length`
+
+0.0.8 / 2015-08-21
+==================
+ - now has a changelog
+ - now is modular (see instructions above for with react and without react versions)
+
+0.0.7 / 2015-07-30
+==================
+ - TODO: fill in
+
+[ecd]: https://github.com/walmartlabs/eslint-config-defaults
+[taion]: https://github.com/taion
+[pr-modular]: https://github.com/airbnb/javascript/pull/526
+[pr-legacy]: https://github.com/airbnb/javascript/pull/527
diff --git a/packages/eslint-config-airbnb/README.md b/packages/eslint-config-airbnb/README.md
index 1466cf5b99..f795c86bea 100644
--- a/packages/eslint-config-airbnb/README.md
+++ b/packages/eslint-config-airbnb/README.md
@@ -41,45 +41,3 @@ programming to structure our README as test cases for our .eslintrc?
 You can run tests with `npm test`.
 
 You can make sure this module lints with itself using `npm run lint`.
-
-## Changelog
-
-### 1.0.2
-- enable rest params in linter, derp. (#592)
-- enforce rule 18.5, ensuring files end with a single newline character. (#578)
-
-### 1.0.1
-
-oops
-
-### 1.0.0
-- require `eslint` `v1.0.0` or higher
-- removes `babel-eslint` dependency
-
-### 0.1.1
-- remove id-length rule (#569)
-- enable `no-mixed-spaces-and-tabs` (#539)
-- enable `no-const-assign` (#560)
-- enable `space-before-keywords` (#554)
-
-### 0.1.0
-
-- switch to modular rules files courtesy the [eslint-config-default][ecd]
-  project and [@taion][taion]. [PR][pr-modular]
-- export `eslint-config-airbnb/legacy` for ES5-only users.
-  `eslint-config-airbnb/legacy` does not require the `babel-eslint` parser.
-  [PR][pr-legacy]
-
-[ecd]: https://github.com/walmartlabs/eslint-config-defaults
-[taion]: https://github.com/taion
-[pr-modular]: https://github.com/airbnb/javascript/pull/526
-[pr-legacy]: https://github.com/airbnb/javascript/pull/527
-
-### 0.0.9
-
-- add rule no-undef
-- add rule id-length
-
-### 0.0.8
- - now has a changelog
- - now is modular (see instructions above for with react and without react versions)
diff --git a/packages/eslint-config-airbnb/package.json b/packages/eslint-config-airbnb/package.json
index 764e648a8f..6e4d1b64a2 100644
--- a/packages/eslint-config-airbnb/package.json
+++ b/packages/eslint-config-airbnb/package.json
@@ -1,6 +1,6 @@
 {
   "name": "eslint-config-airbnb",
-  "version": "1.0.2",
+  "version": "2.0.0",
   "description": "Airbnb's ESLint config, following our styleguide",
   "main": "index.js",
   "scripts": {

From a31c72a1e5fa56891b35bf63741b34868a66a9b3 Mon Sep 17 00:00:00 2001
From: Jon Abrams <jon@jonabrams.com>
Date: Thu, 3 Dec 2015 14:37:52 -0800
Subject: [PATCH 0362/1591] Fix example for section 7.11

The missing newline caused the markdown parser to misinterpret the beginning and end of the code block.
---
 README.md | 1 +
 1 file changed, 1 insertion(+)

diff --git a/README.md b/README.md
index a6158c41b3..cce04248be 100644
--- a/README.md
+++ b/README.md
@@ -601,6 +601,7 @@ Other Style Guides
 - [7.11](#7.11) <a name="7.11"></a> Spacing in a function signature.
 
   > Why? Consistency is good, and you shouldn’t have to add or remove a space when adding or removing a name.
+  
   ```javascript
   // bad
   const f = function(){};

From a1efff9f6de3adca4ffac49e521f596cc24e7df8 Mon Sep 17 00:00:00 2001
From: Josh Perez <josh.perez@airbnb.com>
Date: Thu, 3 Dec 2015 15:39:49 -0800
Subject: [PATCH 0363/1591] Documents corresponding eslint rules

---
 README.md | 61 ++++++++++++++++++++++++++++++++++++++++++++++++++++++-
 1 file changed, 60 insertions(+), 1 deletion(-)

diff --git a/README.md b/README.md
index cce04248be..f854fed8e7 100644
--- a/README.md
+++ b/README.md
@@ -91,6 +91,8 @@ Other Style Guides
 
   > Why? This ensures that you can't reassign your references, which can lead to bugs and difficult to comprehend code.
 
+  eslint rules: [`prefer-const`](http://eslint.org/docs/rules/prefer-const.html), [`no-const-assign`](http://eslint.org/docs/rules/no-const-assign.html).
+
     ```javascript
     // bad
     var a = 1;
@@ -105,6 +107,8 @@ Other Style Guides
 
   > Why? `let` is block-scoped rather than function-scoped like `var`.
 
+  eslint rules: [`no-var`](http://eslint.org/docs/rules/no-var.html).
+
     ```javascript
     // bad
     var count = 1;
@@ -137,6 +141,8 @@ Other Style Guides
 
   - [3.1](#3.1) <a name='3.1'></a> Use the literal syntax for object creation.
 
+  eslint rules: [`no-new-object`](http://eslint.org/docs/rules/no-new-object.html).
+
     ```javascript
     // bad
     const item = new Object();
@@ -209,6 +215,8 @@ Other Style Guides
   <a name="es6-object-shorthand"></a>
   - [3.5](#3.5) <a name='3.5'></a> Use object method shorthand.
 
+  eslint rules: [`object-shorthand`](http://eslint.org/docs/rules/object-shorthand.html).
+
     ```javascript
     // bad
     const atom = {
@@ -234,6 +242,8 @@ Other Style Guides
 
   > Why? It is shorter to write and descriptive.
 
+  eslint rules: [`object-shorthand`](http://eslint.org/docs/rules/object-shorthand.html).
+
     ```javascript
     const lukeSkywalker = 'Luke Skywalker';
 
@@ -283,6 +293,8 @@ Other Style Guides
 
   - [4.1](#4.1) <a name='4.1'></a> Use the literal syntax for array creation.
 
+  eslint rules: [`no-array-constructor`](http://eslint.org/docs/rules/no-array-constructor.html).
+
     ```javascript
     // bad
     const items = new Array();
@@ -399,6 +411,8 @@ Other Style Guides
 
   - [6.1](#6.1) <a name='6.1'></a> Use single quotes `''` for strings.
 
+  eslint rules: [`quotes`](http://eslint.org/docs/rules/quotes.html).
+
     ```javascript
     // bad
     const name = "Capt. Janeway";
@@ -431,6 +445,8 @@ Other Style Guides
 
   > Why? Template strings give you a readable, concise syntax with proper newlines and string interpolation features.
 
+  eslint rules: [`prefer-template`](http://eslint.org/docs/rules/prefer-template.html).
+
     ```javascript
     // bad
     function sayHi(name) {
@@ -601,7 +617,7 @@ Other Style Guides
 - [7.11](#7.11) <a name="7.11"></a> Spacing in a function signature.
 
   > Why? Consistency is good, and you shouldn’t have to add or remove a space when adding or removing a name.
-  
+
   ```javascript
   // bad
   const f = function(){};
@@ -623,6 +639,8 @@ Other Style Guides
 
   > Why not? If you have a fairly complicated function, you might move that logic out into its own function declaration.
 
+  eslint rules: [`prefer-arrow-callback`](http://eslint.org/docs/rules/prefer-arrow-callback.html), [`arrow-spacing`](http://eslint.org/docs/rules/arrow-spacing.html).
+
     ```javascript
     // bad
     [1, 2, 3].map(function (x) {
@@ -643,6 +661,8 @@ Other Style Guides
 
   > Why not? If you plan on returning an object.
 
+  eslint rules: [`arrow-parens`](http://eslint.org/docs/rules/arrow-parens.html), [`arrow-body-style`](http://eslint.org/docs/rules/arrow-body-style.html).
+
     ```javascript
     // good
     [1, 2, 3].map(number => `A string containing the ${number}.`);
@@ -683,6 +703,8 @@ Other Style Guides
 
   > Why? Less visual clutter.
 
+  eslint rules: [`arrow-parens`](http://eslint.org/docs/rules/arrow-parens.html).
+
     ```js
     // good
     [1, 2, 3].map(x => x * x);
@@ -861,6 +883,8 @@ Other Style Guides
 
   > Why? This enforces our immutable rule. Dealing with pure functions that return values is easier to reason about than side-effects.
 
+  eslint rules: [`no-iterator`](http://eslint.org/docs/rules/no-iterator.html).
+
     ```javascript
     const numbers = [1, 2, 3, 4, 5];
 
@@ -893,6 +917,8 @@ Other Style Guides
 
   - [12.1](#12.1) <a name='12.1'></a> Use dot notation when accessing properties.
 
+  eslint rules: [`dot-notation`](http://eslint.org/docs/rules/dot-notation.html).
+
     ```javascript
     const luke = {
       jedi: true,
@@ -940,6 +966,8 @@ Other Style Guides
 
     > Why? It's easier to add new variable declarations this way, and you never have to worry about swapping out a `;` for a `,` or introducing punctuation-only diffs.
 
+  eslint rules: [`one-var`](http://eslint.org/docs/rules/one-var.html).
+
     ```javascript
     // bad
     const items = getItems(),
@@ -1134,6 +1162,8 @@ Other Style Guides
   - [15.1](#15.1) <a name='15.1'></a> Use `===` and `!==` over `==` and `!=`.
   - [15.2](#15.2) <a name='15.2'></a> Conditional statements such as the `if` statement evaluate their expression using coercion with the `ToBoolean` abstract method and always follow these simple rules:
 
+  eslint rules: [`eqeqeq`](http://eslint.org/docs/rules/eqeqeq.html).
+
     + **Objects** evaluate to **true**
     + **Undefined** evaluates to **false**
     + **Null** evaluates to **false**
@@ -1206,6 +1236,8 @@ Other Style Guides
   - [16.2](#16.2) <a name='16.2'></a> If you're using multi-line blocks with `if` and `else`, put `else` on the same line as your
     `if` block's closing brace.
 
+    eslint rules: [`brace-style`](http://eslint.org/docs/rules/brace-style.html).
+
     ```javascript
     // bad
     if (test) {
@@ -1336,6 +1368,8 @@ Other Style Guides
 
   - [18.1](#18.1) <a name='18.1'></a> Use soft tabs set to 2 spaces.
 
+  eslint rules: [`indent`](http://eslint.org/docs/rules/indent.html).
+
     ```javascript
     // bad
     function () {
@@ -1355,6 +1389,8 @@ Other Style Guides
 
   - [18.2](#18.2) <a name='18.2'></a> Place 1 space before the leading brace.
 
+  eslint rules: [`space-before-blocks`](http://eslint.org/docs/rules/space-before-blocks.html).
+
     ```javascript
     // bad
     function test(){
@@ -1381,6 +1417,8 @@ Other Style Guides
 
   - [18.3](#18.3) <a name='18.3'></a> Place 1 space before the opening parenthesis in control statements (`if`, `while` etc.). Place no space before the argument list in function calls and declarations.
 
+  eslint rules: [`space-after-keywords`](http://eslint.org/docs/rules/space-after-keywords.html), [`space-before-keywords`](http://eslint.org/docs/rules/space-before-keywords.html).
+
     ```javascript
     // bad
     if(isJedi) {
@@ -1405,6 +1443,8 @@ Other Style Guides
 
   - [18.4](#18.4) <a name='18.4'></a> Set off operators with spaces.
 
+  eslint rules: [`space-infix-ops`](http://eslint.org/docs/rules/space-infix-ops.html).
+
     ```javascript
     // bad
     const x=y+5;
@@ -1536,6 +1576,8 @@ Other Style Guides
 
   - [18.8](#18.8) <a name='18.8'></a> Do not pad your blocks with blank lines.
 
+  eslint rules: [`padded-blocks`](http://eslint.org/docs/rules/padded-blocks.html).
+
     ```javascript
     // bad
     function bar() {
@@ -1568,6 +1610,8 @@ Other Style Guides
 
   - [18.9](#18.9) <a name='18.9'></a> Do not add spaces inside parentheses.
 
+  eslint rules: [`space-in-parens`](http://eslint.org/docs/rules/space-in-parens.html).
+
     ```javascript
     // bad
     function bar( foo ) {
@@ -1592,6 +1636,8 @@ Other Style Guides
 
   - [18.10](#18.10) <a name='18.10'></a> Do not add spaces inside brackets.
 
+  eslint rules: [`array-bracket-spacing`](http://eslint.org/docs/rules/array-bracket-spacing.html).
+
     ```javascript
     // bad
     const foo = [ 1, 2, 3 ];
@@ -1604,6 +1650,8 @@ Other Style Guides
 
   - [18.11](#18.11) <a name='18.11'></a> Add spaces inside curly braces.
 
+  eslint rules: [`object-curly-spacing`](http://eslint.org/docs/rules/object-curly-spacing.html).
+
     ```javascript
     // bad
     const foo = {clark: 'kent'};
@@ -1618,6 +1666,8 @@ Other Style Guides
 
   - [19.1](#19.1) <a name='19.1'></a> Leading commas: **Nope.**
 
+  eslint rules: [`comma-style`](http://eslint.org/docs/rules/comma-style.html).
+
     ```javascript
     // bad
     const story = [
@@ -1652,6 +1702,8 @@ Other Style Guides
 
   - [19.2](#19.2) <a name='19.2'></a> Additional trailing comma: **Yup.**
 
+  eslint rules: [`no-comma-dangle`](http://eslint.org/docs/rules/no-comma-dangle.html).
+
   > Why? This leads to cleaner git diffs. Also, transpilers like Babel will remove the additional trailing comma in the transpiled code which means you don't have to worry about the [trailing comma problem](es5/README.md#commas) in legacy browsers.
 
     ```javascript
@@ -1700,6 +1752,8 @@ Other Style Guides
 
   - [20.1](#20.1) <a name='20.1'></a> **Yup.**
 
+  eslint rules: [`semi`](http://eslint.org/docs/rules/semi.html).
+
     ```javascript
     // bad
     (function () {
@@ -1820,6 +1874,8 @@ Other Style Guides
 
   - [22.2](#22.2) <a name='22.2'></a> Use camelCase when naming objects, functions, and instances.
 
+  eslint rules: [`camelcase`](http://eslint.org/docs/rules/camelcase.html).
+
     ```javascript
     // bad
     const OBJEcttsssss = {};
@@ -1857,6 +1913,8 @@ Other Style Guides
 
   - [22.4](#22.4) <a name='22.4'></a> Use a leading underscore `_` when naming private properties.
 
+  eslint rules: [`no-underscore-dangle`](http://eslint.org/docs/rules/no-underscore-dangle.html).
+
     ```javascript
     // bad
     this.__firstName__ = 'Panda';
@@ -1894,6 +1952,7 @@ Other Style Guides
     ```
 
   - [22.6](#22.6) <a name='22.6'></a> If your file exports a single class, your filename should be exactly the name of the class.
+
     ```javascript
     // file contents
     class CheckBox {

From 721b8cd01fe44aa9167699a041dd7695b38aa64a Mon Sep 17 00:00:00 2001
From: Benjamin Winterberg <winterbe@gmail.com>
Date: Wed, 9 Dec 2015 10:51:49 +0100
Subject: [PATCH 0364/1591] Fix syntax highlighting in section 15

---
 README.md | 12 ++++++------
 1 file changed, 6 insertions(+), 6 deletions(-)

diff --git a/README.md b/README.md
index f854fed8e7..5276f4a932 100644
--- a/README.md
+++ b/README.md
@@ -1164,12 +1164,12 @@ Other Style Guides
 
   eslint rules: [`eqeqeq`](http://eslint.org/docs/rules/eqeqeq.html).
 
-    + **Objects** evaluate to **true**
-    + **Undefined** evaluates to **false**
-    + **Null** evaluates to **false**
-    + **Booleans** evaluate to **the value of the boolean**
-    + **Numbers** evaluate to **false** if **+0, -0, or NaN**, otherwise **true**
-    + **Strings** evaluate to **false** if an empty string `''`, otherwise **true**
+  + **Objects** evaluate to **true**
+  + **Undefined** evaluates to **false**
+  + **Null** evaluates to **false**
+  + **Booleans** evaluate to **the value of the boolean**
+  + **Numbers** evaluate to **false** if **+0, -0, or NaN**, otherwise **true**
+  + **Strings** evaluate to **false** if an empty string `''`, otherwise **true**
 
     ```javascript
     if ([0]) {

From 514bd87d1a8d96f7259ed4d1bcc9eb64618811a0 Mon Sep 17 00:00:00 2001
From: Vladimir Kutepov <frenzzy.man@gmail.com>
Date: Fri, 11 Dec 2015 13:39:03 +0500
Subject: [PATCH 0365/1591] Require space before/after arrow function's arrow
 (arrow-spacing)

Enable [arrow-spacing](http://eslint.org/docs/rules/arrow-spacing.html) rule, code with space before/after arrow function's arrow is easier to read.
```js
() => {};
(a) => {};
a => a;
() => {'\n'};
()=> {};     /*error Missing space before =>*/
() =>{};     /*error Missing space after =>*/
(a)=> {};    /*error Missing space before =>*/
(a) =>{};    /*error Missing space after =>*/
a =>a;       /*error Missing space after =>*/
a=> a;       /*error Missing space before =>*/
()=> {'\n'}; /*error Missing space before =>*/
() =>{'\n'}; /*error Missing space after =>*/
```
---
 packages/eslint-config-airbnb/rules/es6.js | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/packages/eslint-config-airbnb/rules/es6.js b/packages/eslint-config-airbnb/rules/es6.js
index b7fde7bf44..fde86e8f0f 100644
--- a/packages/eslint-config-airbnb/rules/es6.js
+++ b/packages/eslint-config-airbnb/rules/es6.js
@@ -25,7 +25,8 @@ module.exports = {
     // require parens in arrow function arguments
     'arrow-parens': 0,
     // require space before/after arrow function's arrow
-    'arrow-spacing': 0,
+    // https://github.com/eslint/eslint/blob/master/docs/rules/arrow-spacing.md
+    'arrow-spacing': [2, { 'before': true, 'after': true }],
     // verify super() callings in constructors
     'constructor-super': 0,
     // enforce the spacing around the * in generator functions

From d5a636f298c89c5e70dd45ff964505a03e31b92e Mon Sep 17 00:00:00 2001
From: Jordan Gensler <jordan.gensler@airbnb.com>
Date: Fri, 11 Dec 2015 18:47:48 -0800
Subject: [PATCH 0366/1591] [react] Including missing defaults to the react
 eslint

---
 packages/eslint-config-airbnb/rules/react.js | 10 +++++++---
 1 file changed, 7 insertions(+), 3 deletions(-)

diff --git a/packages/eslint-config-airbnb/rules/react.js b/packages/eslint-config-airbnb/rules/react.js
index 6e18e1c252..fc40ef908a 100644
--- a/packages/eslint-config-airbnb/rules/react.js
+++ b/packages/eslint-config-airbnb/rules/react.js
@@ -9,7 +9,7 @@ module.exports = {
     // Prevent missing displayName in a React component definition
     'react/display-name': 0,
     // Enforce boolean attributes notation in JSX
-    'react/jsx-boolean-value': 2,
+    'react/jsx-boolean-value': [2, 'never'],
     // Enforce or disallow spaces inside of curly braces in JSX attributes
     'react/jsx-curly-spacing': 0,
     // Prevent duplicate props in JSX
@@ -31,7 +31,7 @@ module.exports = {
     // Prevent usage of setState in componentDidMount
     'react/no-did-mount-set-state': [2, 'allow-in-func'],
     // Prevent usage of setState in componentDidUpdate
-    'react/no-did-update-set-state': 2,
+    'react/no-did-update-set-state': [2, 'allow-in-func'],
     // Prevent multiple component definition per file
     'react/no-multi-comp': 2,
     // Prevent usage of unknown DOM property
@@ -56,6 +56,10 @@ module.exports = {
       ]
     }],
     // Prevent missing parentheses around multilines JSX
-    'react/wrap-multilines': 2
+    'react/wrap-multilines': [2, {
+      declaration: true,
+      assignment: true,
+      return: true
+    }]
   }
 };

From e9b1ef92bf956e8359305039721950863abdf81b Mon Sep 17 00:00:00 2001
From: Jordan Gensler <jordan.gensler@airbnb.com>
Date: Fri, 11 Dec 2015 23:00:10 -0800
Subject: [PATCH 0367/1591] Adding links to lint rules in react styleguide.

---
 packages/eslint-config-airbnb/package.json   |  2 +-
 packages/eslint-config-airbnb/rules/react.js |  6 ++-
 react/README.md                              | 44 ++++++++++++++------
 3 files changed, 38 insertions(+), 14 deletions(-)

diff --git a/packages/eslint-config-airbnb/package.json b/packages/eslint-config-airbnb/package.json
index 6e4d1b64a2..eb501f9651 100644
--- a/packages/eslint-config-airbnb/package.json
+++ b/packages/eslint-config-airbnb/package.json
@@ -39,7 +39,7 @@
   "devDependencies": {
     "babel-tape-runner": "1.2.0",
     "eslint": "^1.8.0",
-    "eslint-plugin-react": "^3.7.1",
+    "eslint-plugin-react": "^3.11.3",
     "react": "^0.13.3",
     "tape": "^4.2.2"
   },
diff --git a/packages/eslint-config-airbnb/rules/react.js b/packages/eslint-config-airbnb/rules/react.js
index fc40ef908a..7246087ec8 100644
--- a/packages/eslint-config-airbnb/rules/react.js
+++ b/packages/eslint-config-airbnb/rules/react.js
@@ -10,14 +10,18 @@ module.exports = {
     'react/display-name': 0,
     // Enforce boolean attributes notation in JSX
     'react/jsx-boolean-value': [2, 'never'],
+    // Validate closing bracket location in JSX
+    'react/jsx-closing-bracket-location': [2, 'line-aligned'],
     // Enforce or disallow spaces inside of curly braces in JSX attributes
     'react/jsx-curly-spacing': 0,
+    // Validate props indentation in JSX
+    'react/jsx-indent-props': [2, 2],
     // Prevent duplicate props in JSX
     'react/jsx-no-duplicate-props': 0,
     // Disallow undeclared variables in JSX
     'react/jsx-no-undef': 2,
     // Enforce quote style for JSX attributes
-    'react/jsx-quotes': 0,
+    'react/jsx-quotes': [2, 'double'],
     // Enforce propTypes declarations alphabetical sorting
     'react/jsx-sort-prop-types': 0,
     // Enforce props alphabetical sorting
diff --git a/react/README.md b/react/README.md
index 6b0a8e13e9..dde064c58c 100644
--- a/react/README.md
+++ b/react/README.md
@@ -26,6 +26,8 @@
 
   - Use class extends React.Component unless you have a very good reason to use mixins.
 
+  eslint rules: [`react/prefer-es6-class`](https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/prefer-es6-class.md).
+
   ```javascript
   // bad
   const Listing = React.createClass({
@@ -33,7 +35,7 @@
       return <div />;
     }
   });
-  
+
   // good
   class Listing extends React.Component {
     render() {
@@ -46,7 +48,10 @@
 
   - **Extensions**: Use `.jsx` extension for React components.
   - **Filename**: Use PascalCase for filenames. E.g., `ReservationCard.jsx`.
-  - **Reference Naming**: Use PascalCase for React components and camelCase for their instances:
+  - **Reference Naming**: Use PascalCase for React components and camelCase for their instances.
+
+    eslint rules: [`react/jsx-pascal-case`](https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/jsx-pascal-case.md).
+
     ```javascript
     // bad
     const reservationCard = require('./ReservationCard');
@@ -92,6 +97,8 @@
 ## Alignment
   - Follow these alignment styles for JSX syntax
 
+  eslint rules: [`react/jsx-closing-bracket-location`](https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/jsx-closing-bracket-location.md).
+
     ```javascript
     // bad
     <Foo superLongParam="bar"
@@ -121,6 +128,8 @@
   > Why? JSX attributes [can't contain escaped quotes](http://eslint.org/docs/rules/jsx-quotes), so double quotes make conjunctions like `"don't"` easier to type.
   > Regular HTML attributes also typically use double quotes instead of single, so JSX attributes mirror this convention.
 
+  eslint rules: [`react/jsx-quotes`](https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/jsx-quotes.md).
+
     ```javascript
     // bad
     <Foo bar='bar' />
@@ -169,7 +178,10 @@
     ```
 
 ## Parentheses
-  - Wrap JSX tags in parentheses when they span more than one line:
+  - Wrap JSX tags in parentheses when they span more than one line.
+
+  eslint rules: [`react/wrap-multilines`](https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/wrap-multilines.md).
+
     ```javascript
     /// bad
     render() {
@@ -196,6 +208,9 @@
 
 ## Tags
   - Always self-close tags that have no children.
+
+  eslint rules: [`react/self-closing-comp`](https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/self-closing-comp.md).
+
     ```javascript
     // bad
     <Foo className="stuff"></Foo>
@@ -205,6 +220,9 @@
     ```
 
   - If your component has multi-line properties, close its tag on a new line.
+
+  eslint rules: [`react/jsx-closing-bracket-location`](https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/jsx-closing-bracket-location.md).
+
     ```javascript
     // bad
     <Foo
@@ -243,7 +261,7 @@
 ## Ordering
 
   - Ordering for class extends React.Component:
-  
+
   1. constructor
   1. optional static methods
   1. getChildContext
@@ -262,31 +280,31 @@
   - How to define propTypes, defaultProps, contextTypes, etc...  
 
   ```javascript
-  import React, { Component, PropTypes } from 'react';
-  
+  import React, { PropTypes } from 'react';
+
   const propTypes = {
     id: PropTypes.number.isRequired,
     url: PropTypes.string.isRequired,
     text: PropTypes.string,
   };
-  
+
   const defaultProps = {
     text: 'Hello World',
   };
-  
-  class Link extends Component {
+
+  class Link extends React.Component {
     static methodsAreOk() {
       return true;
     }
-  
+
     render() {
       return <a href={this.props.url} data-id={this.props.id}>{this.props.text}</a>
     }
   }
-  
+
   Link.propTypes = propTypes;
   Link.defaultProps = defaultProps;
-  
+
   export default Link;
   ```
 
@@ -314,4 +332,6 @@
   1. *Optional render methods* like renderNavigation() or renderProfilePicture()
   1. render
 
+  eslint rules: [`react/sort-comp`](https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/sort-comp.md).
+
 **[⬆ back to top](#table-of-contents)**

From d02a50637763c40dc50af2c033f288f4c7643b41 Mon Sep 17 00:00:00 2001
From: Jordan Gensler <jordan.gensler@airbnb.com>
Date: Fri, 11 Dec 2015 23:13:30 -0800
Subject: [PATCH 0368/1591] Adding links to react rules for quick reference.

---
 packages/eslint-config-airbnb/rules/react.js | 23 ++++++++++++++++++++
 1 file changed, 23 insertions(+)

diff --git a/packages/eslint-config-airbnb/rules/react.js b/packages/eslint-config-airbnb/rules/react.js
index 7246087ec8..d5c82c7949 100644
--- a/packages/eslint-config-airbnb/rules/react.js
+++ b/packages/eslint-config-airbnb/rules/react.js
@@ -7,48 +7,70 @@ module.exports = {
   },
   'rules': {
     // Prevent missing displayName in a React component definition
+    // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/display-name.md
     'react/display-name': 0,
     // Enforce boolean attributes notation in JSX
+    // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/jsx-boolean-value.md
     'react/jsx-boolean-value': [2, 'never'],
     // Validate closing bracket location in JSX
+    // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/jsx-closing-bracket-location.md
     'react/jsx-closing-bracket-location': [2, 'line-aligned'],
     // Enforce or disallow spaces inside of curly braces in JSX attributes
+    // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/jsx-curly-spacing.md
     'react/jsx-curly-spacing': 0,
     // Validate props indentation in JSX
+    // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/jsx-indent-props.md
     'react/jsx-indent-props': [2, 2],
     // Prevent duplicate props in JSX
+    // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/jsx-no-duplicate-props.md
     'react/jsx-no-duplicate-props': 0,
     // Disallow undeclared variables in JSX
+    // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/jsx-no-undef.md
     'react/jsx-no-undef': 2,
     // Enforce quote style for JSX attributes
+    // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/jsx-quote.md
     'react/jsx-quotes': [2, 'double'],
     // Enforce propTypes declarations alphabetical sorting
+    // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/jsx-sort-prop-types.md
     'react/jsx-sort-prop-types': 0,
     // Enforce props alphabetical sorting
+    // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/jsx-sort-props.md
     'react/jsx-sort-props': 0,
     // Prevent React to be incorrectly marked as unused
+    // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/jsx-uses-react.md
     'react/jsx-uses-react': 2,
     // Prevent variables used in JSX to be incorrectly marked as unused
+    // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/jsx-uses-vars.md
     'react/jsx-uses-vars': 2,
     // Prevent usage of dangerous JSX properties
+    // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/no-danger.md
     'react/no-danger': 0,
     // Prevent usage of setState in componentDidMount
+    // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/no-did-mount-set-state.md
     'react/no-did-mount-set-state': [2, 'allow-in-func'],
     // Prevent usage of setState in componentDidUpdate
+    // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/no-did-update-set-state.md
     'react/no-did-update-set-state': [2, 'allow-in-func'],
     // Prevent multiple component definition per file
+    // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/no-multi-comp.md
     'react/no-multi-comp': 2,
     // Prevent usage of unknown DOM property
+    // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/no-unknown-property.md
     'react/no-unknown-property': 2,
     // Prevent missing props validation in a React component definition
+    // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/prop-types.md
     'react/prop-types': 2,
     // Prevent missing React when using JSX
+    // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/react-in-jsx-scope.md
     'react/react-in-jsx-scope': 2,
     // Restrict file extensions that may be required
+    // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/require-extension.md
     'react/require-extension': 0,
     // Prevent extra closing tags for components without children
+    // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/self-closing-comp.md
     'react/self-closing-comp': 2,
     // Enforce component methods order
+    // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/sort-comp.md
     'react/sort-comp': [2, {
       'order': [
         'lifecycle',
@@ -60,6 +82,7 @@ module.exports = {
       ]
     }],
     // Prevent missing parentheses around multilines JSX
+    // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/wrap-multilines.md
     'react/wrap-multilines': [2, {
       declaration: true,
       assignment: true,

From 2ab6253f85cb40f799da7c003e13c18ecf6775f8 Mon Sep 17 00:00:00 2001
From: Gerardo Renovales <camazorro@users.noreply.github.com>
Date: Mon, 14 Dec 2015 15:06:57 -0500
Subject: [PATCH 0369/1591] Update README.md

Add OutBoxSoft to the list of organizations
---
 README.md | 1 +
 1 file changed, 1 insertion(+)

diff --git a/README.md b/README.md
index 5276f4a932..2b860dae56 100644
--- a/README.md
+++ b/README.md
@@ -2333,6 +2333,7 @@ Other Style Guides
   - **National Park Service**: [nationalparkservice/javascript](https://github.com/nationalparkservice/javascript)
   - **Nimbl3**: [nimbl3/javascript](https://github.com/nimbl3/javascript)
   - **Orion Health**: [orionhealth/javascript](https://github.com/orionhealth/javascript)
+  - **OutBoxSoft**: [OutBoxSoft/javascript](https://github.com/OutBoxSoft/javascript)
   - **Peerby**: [Peerby/javascript](https://github.com/Peerby/javascript)
   - **Razorfish**: [razorfish/javascript-style-guide](https://github.com/razorfish/javascript-style-guide)
   - **reddit**: [reddit/styleguide/javascript](https://github.com/reddit/styleguide/tree/master/javascript)

From b1500397e1bba4120b10b850038bfff3177fda42 Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Mon, 14 Dec 2015 22:21:52 -0800
Subject: [PATCH 0370/1591] [eslint config] enable `object-shorthand` rule.

Fixes #621.
---
 packages/eslint-config-airbnb/rules/es6.js | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/packages/eslint-config-airbnb/rules/es6.js b/packages/eslint-config-airbnb/rules/es6.js
index fde86e8f0f..e1102f259f 100644
--- a/packages/eslint-config-airbnb/rules/es6.js
+++ b/packages/eslint-config-airbnb/rules/es6.js
@@ -40,7 +40,8 @@ module.exports = {
     // require let or const instead of var
     'no-var': 2,
     // require method and property shorthand syntax for object literals
-    'object-shorthand': 0,
+    // https://github.com/eslint/eslint/blob/master/docs/rules/object-shorthand.md
+    'object-shorthand': [2, "always", { "ignoreConstructors": true }],
     // suggest using of const declaration for variables that are never modified after declared
     'prefer-const': 2,
     // suggest using the spread operator instead of .apply()

From 4ab41ede1bb800fc50defa357a889d3a9aa0667a Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Mon, 14 Dec 2015 23:55:21 -0800
Subject: [PATCH 0371/1591] [eslint config] [Dev Deps] update `eslint`

---
 packages/eslint-config-airbnb/package.json | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/packages/eslint-config-airbnb/package.json b/packages/eslint-config-airbnb/package.json
index eb501f9651..fb4e8cbbd1 100644
--- a/packages/eslint-config-airbnb/package.json
+++ b/packages/eslint-config-airbnb/package.json
@@ -38,7 +38,7 @@
   "homepage": "https://github.com/airbnb/javascript",
   "devDependencies": {
     "babel-tape-runner": "1.2.0",
-    "eslint": "^1.8.0",
+    "eslint": "^1.10.3",
     "eslint-plugin-react": "^3.11.3",
     "react": "^0.13.3",
     "tape": "^4.2.2"

From 0fc31eaf1cd554bb8a0118168c761ace0ad788e0 Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Tue, 15 Dec 2015 01:19:32 -0800
Subject: [PATCH 0372/1591] [eslint config] fix
 b1500397e1bba4120b10b850038bfff3177fda42

---
 packages/eslint-config-airbnb/rules/es6.js | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/packages/eslint-config-airbnb/rules/es6.js b/packages/eslint-config-airbnb/rules/es6.js
index e1102f259f..3c277064b6 100644
--- a/packages/eslint-config-airbnb/rules/es6.js
+++ b/packages/eslint-config-airbnb/rules/es6.js
@@ -41,7 +41,7 @@ module.exports = {
     'no-var': 2,
     // require method and property shorthand syntax for object literals
     // https://github.com/eslint/eslint/blob/master/docs/rules/object-shorthand.md
-    'object-shorthand': [2, "always", { "ignoreConstructors": true }],
+    'object-shorthand': [2, 'always'],
     // suggest using of const declaration for variables that are never modified after declared
     'prefer-const': 2,
     // suggest using the spread operator instead of .apply()

From 60b01bdfb9de42be2032f14bc3fd41b5f6da61a7 Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Tue, 15 Dec 2015 01:22:30 -0800
Subject: [PATCH 0373/1591] [eslint config] v2.1.0

---
 packages/eslint-config-airbnb/CHANGELOG.md | 7 +++++++
 packages/eslint-config-airbnb/package.json | 2 +-
 2 files changed, 8 insertions(+), 1 deletion(-)

diff --git a/packages/eslint-config-airbnb/CHANGELOG.md b/packages/eslint-config-airbnb/CHANGELOG.md
index c6504072bf..0017832ca2 100644
--- a/packages/eslint-config-airbnb/CHANGELOG.md
+++ b/packages/eslint-config-airbnb/CHANGELOG.md
@@ -1,3 +1,10 @@
+2.1.0 / 2015-12-03
+==================
+ - [fix] use `require.resolve` to allow nested `extend`s (#582)
+ - [new] enable `object-shorthand` rule (#621)
+ - [new] enable `arrow-spacing` rule (#517)
+ - [docs] flesh out react rule defaults (#618)
+
 2.0.0 / 2015-12-03
 ==================
  - [breaking] `space-before-function-paren`: require function spacing: `function <optional name>(` (#605)
diff --git a/packages/eslint-config-airbnb/package.json b/packages/eslint-config-airbnb/package.json
index fb4e8cbbd1..b61d4ee5c8 100644
--- a/packages/eslint-config-airbnb/package.json
+++ b/packages/eslint-config-airbnb/package.json
@@ -1,6 +1,6 @@
 {
   "name": "eslint-config-airbnb",
-  "version": "2.0.0",
+  "version": "2.1.0",
   "description": "Airbnb's ESLint config, following our styleguide",
   "main": "index.js",
   "scripts": {

From bbcb1371e57b926f25324d4ea0d24b446f164aa1 Mon Sep 17 00:00:00 2001
From: Billy Janitsch <billy@kensho.com>
Date: Tue, 15 Dec 2015 15:59:40 -0500
Subject: [PATCH 0374/1591] Remove deprecated react/jsx-quotes

---
 packages/eslint-config-airbnb/rules/react.js | 3 ---
 react/README.md                              | 2 +-
 2 files changed, 1 insertion(+), 4 deletions(-)

diff --git a/packages/eslint-config-airbnb/rules/react.js b/packages/eslint-config-airbnb/rules/react.js
index d5c82c7949..ffff4a2c15 100644
--- a/packages/eslint-config-airbnb/rules/react.js
+++ b/packages/eslint-config-airbnb/rules/react.js
@@ -27,9 +27,6 @@ module.exports = {
     // Disallow undeclared variables in JSX
     // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/jsx-no-undef.md
     'react/jsx-no-undef': 2,
-    // Enforce quote style for JSX attributes
-    // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/jsx-quote.md
-    'react/jsx-quotes': [2, 'double'],
     // Enforce propTypes declarations alphabetical sorting
     // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/jsx-sort-prop-types.md
     'react/jsx-sort-prop-types': 0,
diff --git a/react/README.md b/react/README.md
index dde064c58c..3b53d2c0f4 100644
--- a/react/README.md
+++ b/react/README.md
@@ -128,7 +128,7 @@
   > Why? JSX attributes [can't contain escaped quotes](http://eslint.org/docs/rules/jsx-quotes), so double quotes make conjunctions like `"don't"` easier to type.
   > Regular HTML attributes also typically use double quotes instead of single, so JSX attributes mirror this convention.
 
-  eslint rules: [`react/jsx-quotes`](https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/jsx-quotes.md).
+  eslint rules: [`jsx-quotes`](http://eslint.org/docs/rules/jsx-quotes).
 
     ```javascript
     // bad

From 28476a25d8609d3a80d130b8a4dadc4d0a84ca47 Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Tue, 15 Dec 2015 13:06:28 -0800
Subject: [PATCH 0375/1591] [eslint config] add rule link and defaults to
 `jsx-quotes` rule

---
 packages/eslint-config-airbnb/rules/style.js | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/packages/eslint-config-airbnb/rules/style.js b/packages/eslint-config-airbnb/rules/style.js
index 204d69c5b3..e65e0f3e08 100644
--- a/packages/eslint-config-airbnb/rules/style.js
+++ b/packages/eslint-config-airbnb/rules/style.js
@@ -26,7 +26,8 @@ module.exports = {
     // https://github.com/eslint/eslint/blob/master/docs/rules/indent.md
     'indent': [2, 2, { "SwitchCase": 1, "VariableDeclarator": 1 }],
     // specify whether double or single quotes should be used in JSX attributes
-    'jsx-quotes': 2,
+    // http://eslint.org/docs/rules/jsx-quotes
+    'jsx-quotes': [2, 'prefer-double'],
     // enforces spacing between keys and values in object literal properties
     'key-spacing': [2, {'beforeColon': false, 'afterColon': true}],
     // enforces empty lines around comments

From fcc41eecd76480f34f7bb9084d8cdfcf71528625 Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Tue, 15 Dec 2015 13:07:24 -0800
Subject: [PATCH 0376/1591] v2.1.1

---
 packages/eslint-config-airbnb/CHANGELOG.md | 6 +++++-
 packages/eslint-config-airbnb/package.json | 2 +-
 2 files changed, 6 insertions(+), 2 deletions(-)

diff --git a/packages/eslint-config-airbnb/CHANGELOG.md b/packages/eslint-config-airbnb/CHANGELOG.md
index 0017832ca2..bc269e9222 100644
--- a/packages/eslint-config-airbnb/CHANGELOG.md
+++ b/packages/eslint-config-airbnb/CHANGELOG.md
@@ -1,4 +1,8 @@
-2.1.0 / 2015-12-03
+2.1.1 / 2015-12-15
+==================
+ - [fix] Remove deprecated react/jsx-quotes (#622)
+
+2.1.0 / 2015-12-15
 ==================
  - [fix] use `require.resolve` to allow nested `extend`s (#582)
  - [new] enable `object-shorthand` rule (#621)
diff --git a/packages/eslint-config-airbnb/package.json b/packages/eslint-config-airbnb/package.json
index b61d4ee5c8..4a22d6d021 100644
--- a/packages/eslint-config-airbnb/package.json
+++ b/packages/eslint-config-airbnb/package.json
@@ -1,6 +1,6 @@
 {
   "name": "eslint-config-airbnb",
-  "version": "2.1.0",
+  "version": "2.1.1",
   "description": "Airbnb's ESLint config, following our styleguide",
   "main": "index.js",
   "scripts": {

From 2589c67b0c392a118aba3e3938856ddfead26baa Mon Sep 17 00:00:00 2001
From: Thomas Shafer <thomasjshafer@gmail.com>
Date: Wed, 16 Dec 2015 15:40:26 -0800
Subject: [PATCH 0377/1591] update best-practices config to prevent parameter
 object manipulation added good/bad examples of parameter mutation to the
 readme

---
 README.md                                     | 29 +++++++++++++++++++
 .../rules/best-practices.js                   |  3 +-
 2 files changed, 31 insertions(+), 1 deletion(-)

diff --git a/README.md b/README.md
index 2b860dae56..f64fe911a0 100644
--- a/README.md
+++ b/README.md
@@ -629,6 +629,35 @@ Other Style Guides
   const y = function a() {};
   ```
 
+- [7.12](#7.12) <a name="7.12"></a> Never mutate parameters.
+
+  > Why? Overwriting parameters can lead to unexpected behavior, especially when accessing the `arguments` object. Manipulating objects passed in as parameters can cause unwanted variable side effects in the original caller.
+
+  eslint rules: [`no-param-reassign`](http://eslint.org/docs/rules/no-param-reassign.html).
+
+  ```javascript
+  // bad
+  function f(a){
+    a = 1;
+  }
+  function f(a){
+    if (!a) { a = 1; }
+  }
+  function f(obj){
+    obj.key = 1;
+  };
+
+  // good
+  function f(a){
+    const b = (a || 1);
+  }
+  function f(a = 1){
+  }
+  function f(obj){
+    const key = obj.hasOwnProperty('key') ? obj.key ? 1;
+  };
+  ```
+
 **[⬆ back to top](#table-of-contents)**
 
 ## Arrow Functions
diff --git a/packages/eslint-config-airbnb/rules/best-practices.js b/packages/eslint-config-airbnb/rules/best-practices.js
index 9d8199eb77..e511f9b15e 100644
--- a/packages/eslint-config-airbnb/rules/best-practices.js
+++ b/packages/eslint-config-airbnb/rules/best-practices.js
@@ -74,7 +74,8 @@ module.exports = {
     // var foo = 'Copyright \251';
     'no-octal-escape': 2,
     // disallow reassignment of function parameters
-    'no-param-reassign': 2,
+    // disallow parameter object manipulation
+    'no-param-reassign': [2, { 'props': true }],
     // disallow use of process.env
     'no-process-env': 0,
     // disallow usage of __proto__ property

From f7971301b08d8fc870a127167804059ab2b7c71b Mon Sep 17 00:00:00 2001
From: Thomas Shafer <thomasjshafer@gmail.com>
Date: Wed, 16 Dec 2015 20:21:38 -0800
Subject: [PATCH 0378/1591] update examples for style add link to
 no-param-reassign rule documentation

---
 README.md                                        | 16 ++++++++--------
 .../eslint-config-airbnb/rules/best-practices.js |  1 +
 2 files changed, 9 insertions(+), 8 deletions(-)

diff --git a/README.md b/README.md
index f64fe911a0..ba2bcd0aed 100644
--- a/README.md
+++ b/README.md
@@ -637,24 +637,24 @@ Other Style Guides
 
   ```javascript
   // bad
-  function f(a){
+  function f1(a) {
     a = 1;
   }
-  function f(a){
+  function f2(a) {
     if (!a) { a = 1; }
   }
-  function f(obj){
+  function f3(obj) {
     obj.key = 1;
   };
 
   // good
-  function f(a){
-    const b = (a || 1);
+  function f4(a) {
+    const b = a || 1;
   }
-  function f(a = 1){
+  function f5(a = 1) {
   }
-  function f(obj){
-    const key = obj.hasOwnProperty('key') ? obj.key ? 1;
+  function f6(obj) {
+    const key = Object.prototype.hasOwnProperty.call(obj, 'key') ? obj.key : 1;
   };
   ```
 
diff --git a/packages/eslint-config-airbnb/rules/best-practices.js b/packages/eslint-config-airbnb/rules/best-practices.js
index e511f9b15e..82e5f9e289 100644
--- a/packages/eslint-config-airbnb/rules/best-practices.js
+++ b/packages/eslint-config-airbnb/rules/best-practices.js
@@ -75,6 +75,7 @@ module.exports = {
     'no-octal-escape': 2,
     // disallow reassignment of function parameters
     // disallow parameter object manipulation
+    // rule: http://eslint.org/docs/rules/no-param-reassign.html
     'no-param-reassign': [2, { 'props': true }],
     // disallow use of process.env
     'no-process-env': 0,

From a533a4fb93c6f1385c2e3ede07a922df6a50dc6a Mon Sep 17 00:00:00 2001
From: Thomas Shafer <thomasjshafer@gmail.com>
Date: Thu, 17 Dec 2015 11:18:36 -0800
Subject: [PATCH 0379/1591] added newlines after each function

---
 README.md | 4 ++++
 1 file changed, 4 insertions(+)

diff --git a/README.md b/README.md
index ba2bcd0aed..98b0bee495 100644
--- a/README.md
+++ b/README.md
@@ -640,9 +640,11 @@ Other Style Guides
   function f1(a) {
     a = 1;
   }
+
   function f2(a) {
     if (!a) { a = 1; }
   }
+
   function f3(obj) {
     obj.key = 1;
   };
@@ -651,8 +653,10 @@ Other Style Guides
   function f4(a) {
     const b = a || 1;
   }
+
   function f5(a = 1) {
   }
+
   function f6(obj) {
     const key = Object.prototype.hasOwnProperty.call(obj, 'key') ? obj.key : 1;
   };

From c584319df8de09ff458adb24103dc0b3bcc4adbf Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Tue, 22 Dec 2015 09:44:07 -0800
Subject: [PATCH 0380/1591] [eslint config] [Dev Deps] update
 `eslint-plugin-react`

---
 packages/eslint-config-airbnb/package.json | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/packages/eslint-config-airbnb/package.json b/packages/eslint-config-airbnb/package.json
index 4a22d6d021..89e745b44f 100644
--- a/packages/eslint-config-airbnb/package.json
+++ b/packages/eslint-config-airbnb/package.json
@@ -39,7 +39,7 @@
   "devDependencies": {
     "babel-tape-runner": "1.2.0",
     "eslint": "^1.10.3",
-    "eslint-plugin-react": "^3.11.3",
+    "eslint-plugin-react": "^3.12.0",
     "react": "^0.13.3",
     "tape": "^4.2.2"
   },

From c98990c0f957edeb943a992e3dda4e755004d57b Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Tue, 22 Dec 2015 09:44:26 -0800
Subject: [PATCH 0381/1591] [eslint config] [minor] enable
 react/prefer-es6-class rule

---
 packages/eslint-config-airbnb/rules/react.js | 5 ++++-
 1 file changed, 4 insertions(+), 1 deletion(-)

diff --git a/packages/eslint-config-airbnb/rules/react.js b/packages/eslint-config-airbnb/rules/react.js
index ffff4a2c15..4cc9e0d1ad 100644
--- a/packages/eslint-config-airbnb/rules/react.js
+++ b/packages/eslint-config-airbnb/rules/react.js
@@ -84,6 +84,9 @@ module.exports = {
       declaration: true,
       assignment: true,
       return: true
-    }]
+    }],
+    // Require ES6 class declarations over React.createClass
+    // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/prefer-es6-class.md
+    'react/prefer-es6-class': [2, 'always'],
   }
 };

From 4cdc3fe4831c57b0eadd8127ab03a4753382ff78 Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Tue, 22 Dec 2015 09:49:25 -0800
Subject: [PATCH 0382/1591] [eslint config] [breaking] enable `quote-props`
 rule.

---
 README.md                                    | 22 ++++++++++++++++++++
 packages/eslint-config-airbnb/rules/style.js |  3 ++-
 2 files changed, 24 insertions(+), 1 deletion(-)

diff --git a/README.md b/README.md
index cebc053bcc..d2378926d9 100644
--- a/README.md
+++ b/README.md
@@ -287,6 +287,28 @@ Other Style Guides
     };
     ```
 
+  - [3.8](#3.8) <a name="3.8"></a> Only quote properties that are invalid identifiers.
+
+  > Why? In general we consider it subjectively easier to read. It improves syntax highlighting, and is also more easily optimized by many JS engines.
+
+  eslint rules: [`quote-props`](http://eslint.org/docs/rules/quote-props.html).
+
+  ```javascript
+  // bad
+  const bad = {
+    'foo': 3,
+    'bar': 4,
+    'data-blah': 5,
+  };
+
+  // good
+  const good = {
+    foo: 3,
+    bar: 4,
+    'data-blah': 5,
+  };
+  ```
+
 **[⬆ back to top](#table-of-contents)**
 
 ## Arrays
diff --git a/packages/eslint-config-airbnb/rules/style.js b/packages/eslint-config-airbnb/rules/style.js
index 284aac483f..66e3a3f7a9 100644
--- a/packages/eslint-config-airbnb/rules/style.js
+++ b/packages/eslint-config-airbnb/rules/style.js
@@ -85,7 +85,8 @@ module.exports = {
     // enforce padding within blocks
     'padded-blocks': [2, 'never'],
     // require quotes around object literal property names
-    'quote-props': 0,
+    // http://eslint.org/docs/rules/quote-props.html
+    'quote-props': [2, 'as-needed', { 'keywords': true, 'unnecessary': true, 'numbers': false }],
     // specify whether double or single quotes should be used
     'quotes': [2, 'single', 'avoid-escape'],
     // require identifiers to match the provided regular expression

From 6602586a20868ca1eab2e5ca38c715e69136c455 Mon Sep 17 00:00:00 2001
From: Joe Lencioni <joe.lencioni@gmail.com>
Date: Tue, 22 Dec 2015 11:42:24 -0800
Subject: [PATCH 0383/1591] [eslint config] [minor] Sort react/prefer-es6-class
 alphabetically

All of the other rules in this file are in alphabetical order, but this
one was added by c98990c0f out of order at the end. Keeping these in
alphabetical order will help developers find the rules that they are
looking for.
---
 packages/eslint-config-airbnb/rules/react.js | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/packages/eslint-config-airbnb/rules/react.js b/packages/eslint-config-airbnb/rules/react.js
index 4cc9e0d1ad..9722b67869 100644
--- a/packages/eslint-config-airbnb/rules/react.js
+++ b/packages/eslint-config-airbnb/rules/react.js
@@ -54,6 +54,9 @@ module.exports = {
     // Prevent usage of unknown DOM property
     // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/no-unknown-property.md
     'react/no-unknown-property': 2,
+    // Require ES6 class declarations over React.createClass
+    // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/prefer-es6-class.md
+    'react/prefer-es6-class': [2, 'always'],
     // Prevent missing props validation in a React component definition
     // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/prop-types.md
     'react/prop-types': 2,
@@ -85,8 +88,5 @@ module.exports = {
       assignment: true,
       return: true
     }],
-    // Require ES6 class declarations over React.createClass
-    // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/prefer-es6-class.md
-    'react/prefer-es6-class': [2, 'always'],
   }
 };

From f2dc5043a1038a2db58c3e9c59102f96c960d8f2 Mon Sep 17 00:00:00 2001
From: Joe Lencioni <joe.lencioni@gmail.com>
Date: Tue, 22 Dec 2015 11:46:17 -0800
Subject: [PATCH 0384/1591] [eslint-config] [minor] Enable react/no-is-mounted
 rule

isMounted is an anti-pattern [0], is not available when using ES6
classes, and is on its way to being officially deprecated.
eslint-plugin-react recently added the react/no-is-mounted rule in
3.12.0 that prevents its use.

[0]: https://facebook.github.io/react/blog/2015/12/16/ismounted-antipattern.html

Finishes #633
---
 packages/eslint-config-airbnb/rules/react.js | 3 +++
 react/README.md                              | 9 +++++++++
 2 files changed, 12 insertions(+)

diff --git a/packages/eslint-config-airbnb/rules/react.js b/packages/eslint-config-airbnb/rules/react.js
index 4cc9e0d1ad..bc71327c0a 100644
--- a/packages/eslint-config-airbnb/rules/react.js
+++ b/packages/eslint-config-airbnb/rules/react.js
@@ -48,6 +48,9 @@ module.exports = {
     // Prevent usage of setState in componentDidUpdate
     // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/no-did-update-set-state.md
     'react/no-did-update-set-state': [2, 'allow-in-func'],
+    // Prevent usage of isMounted
+    // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/no-is-mounted.md
+    'react/no-is-mounted': 2,
     // Prevent multiple component definition per file
     // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/no-multi-comp.md
     'react/no-multi-comp': 2,
diff --git a/react/README.md b/react/README.md
index 3b53d2c0f4..549e853db0 100644
--- a/react/README.md
+++ b/react/README.md
@@ -15,6 +15,7 @@
   1. [Tags](#tags)
   1. [Methods](#methods)
   1. [Ordering](#ordering)
+  1. [`isMounted`](#ismounted)
 
 ## Basic Rules
 
@@ -334,4 +335,12 @@
 
   eslint rules: [`react/sort-comp`](https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/sort-comp.md).
 
+## `isMounted`
+
+  [`isMounted` is an anti-pattern][anti-pattern], is not available when using ES6 classes, and is on its way to being officially deprecated. Its use should be avoided.
+
+  [anti-pattern]: https://facebook.github.io/react/blog/2015/12/16/ismounted-antipattern.html
+
+  eslint rules: [`react/no-is-mounted`](https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/no-is-mounted.md).
+
 **[⬆ back to top](#table-of-contents)**

From 055aa14518bd7c31cd54b633bf58c63ec3d962f7 Mon Sep 17 00:00:00 2001
From: Joe Lencioni <joe.lencioni@gmail.com>
Date: Tue, 22 Dec 2015 22:28:09 -0800
Subject: [PATCH 0385/1591] [readme] Clean up isMounted section in react readme

When I added this section in f2dc5043a I didn't do a very good job of
following the style used in other parts of this repo. This commit
remedies that.
---
 react/README.md | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

diff --git a/react/README.md b/react/README.md
index 549e853db0..7491c46be3 100644
--- a/react/README.md
+++ b/react/README.md
@@ -337,7 +337,9 @@
 
 ## `isMounted`
 
-  [`isMounted` is an anti-pattern][anti-pattern], is not available when using ES6 classes, and is on its way to being officially deprecated. Its use should be avoided.
+  - Do not use `isMounted`.
+
+  > Why? [`isMounted` is an anti-pattern][anti-pattern], is not available when using ES6 classes, and is on its way to being officially deprecated.
 
   [anti-pattern]: https://facebook.github.io/react/blog/2015/12/16/ismounted-antipattern.html
 

From 76ff913d2648d3613fcdd6438a18886bedf2bf06 Mon Sep 17 00:00:00 2001
From: Aleksey Kislov <evenfrosty@gmail.com>
Date: Wed, 23 Dec 2015 17:34:31 +0300
Subject: [PATCH 0386/1591] Permit strict mode

Permit strict mode for legacy configuration as it is not intended to be used with Babel.
---
 packages/eslint-config-airbnb/legacy.js | 1 -
 1 file changed, 1 deletion(-)

diff --git a/packages/eslint-config-airbnb/legacy.js b/packages/eslint-config-airbnb/legacy.js
index d01122bc8d..257b9dd868 100644
--- a/packages/eslint-config-airbnb/legacy.js
+++ b/packages/eslint-config-airbnb/legacy.js
@@ -4,7 +4,6 @@ module.exports = {
     'eslint-config-airbnb/rules/errors',
     'eslint-config-airbnb/rules/legacy',
     'eslint-config-airbnb/rules/node',
-    'eslint-config-airbnb/rules/strict',
     'eslint-config-airbnb/rules/style',
     'eslint-config-airbnb/rules/variables'
   ].map(require.resolve),

From 450e64c9d217ca731561a7d890f1210da82dcef7 Mon Sep 17 00:00:00 2001
From: Joe Lencioni <joe.lencioni@gmail.com>
Date: Tue, 22 Dec 2015 22:35:11 -0800
Subject: [PATCH 0387/1591] [readme] Add backticks around code items in react
 readme

I noticed a number of places in this document where code was being
referenced but it was not marked as such. Adding backticks will instruct
the markdown parser to format these bits as code, which should improve
the readability of this document.
---
 react/README.md | 88 ++++++++++++++++++++++++-------------------------
 1 file changed, 44 insertions(+), 44 deletions(-)

diff --git a/react/README.md b/react/README.md
index 7491c46be3..12260155b9 100644
--- a/react/README.md
+++ b/react/README.md
@@ -23,9 +23,9 @@
   - Always use JSX syntax.
   - Do not use `React.createElement` unless you're initializing the app from a file that is not JSX.
 
-## Class vs React.createClass
+## Class vs `React.createClass`
 
-  - Use class extends React.Component unless you have a very good reason to use mixins.
+  - Use `class extends React.Component` unless you have a very good reason to use mixins.
 
   eslint rules: [`react/prefer-es6-class`](https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/prefer-es6-class.md).
 
@@ -81,7 +81,7 @@
 
 
 ## Declaration
-  - Do not use displayName for naming components. Instead, name the component by reference.
+  - Do not use `displayName` for naming components. Instead, name the component by reference.
 
     ```javascript
     // bad
@@ -261,24 +261,24 @@
 
 ## Ordering
 
-  - Ordering for class extends React.Component:
-
-  1. constructor
-  1. optional static methods
-  1. getChildContext
-  1. componentWillMount
-  1. componentDidMount
-  1. componentWillReceiveProps
-  1. shouldComponentUpdate
-  1. componentWillUpdate
-  1. componentDidUpdate
-  1. componentWillUnmount
-  1. *clickHandlers or eventHandlers* like onClickSubmit() or onChangeDescription()
-  1. *getter methods for render* like getSelectReason() or getFooterContent()
-  1. *Optional render methods* like renderNavigation() or renderProfilePicture()
-  1. render
-
-  - How to define propTypes, defaultProps, contextTypes, etc...  
+  - Ordering for `class extends React.Component`:
+
+  1. `constructor`
+  1. optional `static` methods
+  1. `getChildContext`
+  1. `componentWillMount`
+  1. `componentDidMount`
+  1. `componentWillReceiveProps`
+  1. `shouldComponentUpdate`
+  1. `componentWillUpdate`
+  1. `componentDidUpdate`
+  1. `componentWillUnmount`
+  1. *clickHandlers or eventHandlers* like `onClickSubmit()` or `onChangeDescription()`
+  1. *getter methods for `render`* like `getSelectReason() or `getFooterContent()`
+  1. *Optional render methods* like `renderNavigation()` or `renderProfilePicture()`
+  1. `render`
+
+  - How to define `propTypes`, `defaultProps`, `contextTypes`, etc...
 
   ```javascript
   import React, { PropTypes } from 'react';
@@ -309,29 +309,29 @@
   export default Link;
   ```
 
-  - Ordering for React.createClass:
-
-  1. displayName
-  1. propTypes
-  1. contextTypes
-  1. childContextTypes
-  1. mixins
-  1. statics
-  1. defaultProps
-  1. getDefaultProps
-  1. getInitialState
-  1. getChildContext
-  1. componentWillMount
-  1. componentDidMount
-  1. componentWillReceiveProps
-  1. shouldComponentUpdate
-  1. componentWillUpdate
-  1. componentDidUpdate
-  1. componentWillUnmount
-  1. *clickHandlers or eventHandlers* like onClickSubmit() or onChangeDescription()
-  1. *getter methods for render* like getSelectReason() or getFooterContent()
-  1. *Optional render methods* like renderNavigation() or renderProfilePicture()
-  1. render
+  - Ordering for `React.createClass`:
+
+  1. `displayName`
+  1. `propTypes`
+  1. `contextTypes`
+  1. `childContextTypes`
+  1. `mixins`
+  1. `statics`
+  1. `defaultProps`
+  1. `getDefaultProps`
+  1. `getInitialState`
+  1. `getChildContext`
+  1. `componentWillMount`
+  1. `componentDidMount`
+  1. `componentWillReceiveProps`
+  1. `shouldComponentUpdate`
+  1. `componentWillUpdate`
+  1. `componentDidUpdate`
+  1. `componentWillUnmount`
+  1. *clickHandlers or eventHandlers* like `onClickSubmit()` or `onChangeDescription()`
+  1. *getter methods for `render`* like `getSelectReason()` or `getFooterContent()`
+  1. *Optional render methods* like `renderNavigation()` or `renderProfilePicture()`
+  1. `render`
 
   eslint rules: [`react/sort-comp`](https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/sort-comp.md).
 

From a7d3e02a7744068b211d884c3299841767a23b78 Mon Sep 17 00:00:00 2001
From: Joe Lencioni <joe.lencioni@gmail.com>
Date: Tue, 22 Dec 2015 22:38:02 -0800
Subject: [PATCH 0388/1591] [readme] Add missing heading to react TOC

I noticed that this heading wasn't listed in the table of contents.
Adding it will help people see at-a-glance what they might find in this
document.
---
 react/README.md | 1 +
 1 file changed, 1 insertion(+)

diff --git a/react/README.md b/react/README.md
index 12260155b9..d6f858e10a 100644
--- a/react/README.md
+++ b/react/README.md
@@ -5,6 +5,7 @@
 ## Table of Contents
 
   1. [Basic Rules](#basic-rules)
+  1. [Class vs `React.createClass`](#class-vs-reactcreateclass)
   1. [Naming](#naming)
   1. [Declaration](#declaration)
   1. [Alignment](#alignment)

From 474087c4269a534d9b57b1bc8e323a4295f0b429 Mon Sep 17 00:00:00 2001
From: Joe Lencioni <joe.lencioni@gmail.com>
Date: Tue, 22 Dec 2015 22:40:43 -0800
Subject: [PATCH 0389/1591] [readme] Use consistent whitespace in react readme

I noticed that some newlines and indentation were a little inconsistent
in this file, so I decided to smooth things out a bit. This should help
people who decide to modify this document in the future. When
determining which is the "right" way to format these things, I decided
to use the style used by base readme as a guide.
---
 react/README.md | 85 ++++++++++++++++++++++++++++---------------------
 1 file changed, 48 insertions(+), 37 deletions(-)

diff --git a/react/README.md b/react/README.md
index d6f858e10a..48a50b8378 100644
--- a/react/README.md
+++ b/react/README.md
@@ -30,21 +30,21 @@
 
   eslint rules: [`react/prefer-es6-class`](https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/prefer-es6-class.md).
 
-  ```javascript
-  // bad
-  const Listing = React.createClass({
-    render() {
-      return <div />;
-    }
-  });
+    ```javascript
+    // bad
+    const Listing = React.createClass({
+      render() {
+        return <div />;
+      }
+    });
 
-  // good
-  class Listing extends React.Component {
-    render() {
-      return <div />;
+    // good
+    class Listing extends React.Component {
+      render() {
+        return <div />;
+      }
     }
-  }
-  ```
+    ```
 
 ## Naming
 
@@ -52,7 +52,7 @@
   - **Filename**: Use PascalCase for filenames. E.g., `ReservationCard.jsx`.
   - **Reference Naming**: Use PascalCase for React components and camelCase for their instances.
 
-    eslint rules: [`react/jsx-pascal-case`](https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/jsx-pascal-case.md).
+  eslint rules: [`react/jsx-pascal-case`](https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/jsx-pascal-case.md).
 
     ```javascript
     // bad
@@ -68,7 +68,8 @@
     const reservationItem = <ReservationCard />;
     ```
 
-    **Component Naming**: Use the filename as the component name. For example, `ReservationCard.jsx` should have a reference name of `ReservationCard`. However, for root components of a directory, use `index.jsx` as the filename and use the directory name as the component name:
+  **Component Naming**: Use the filename as the component name. For example, `ReservationCard.jsx` should have a reference name of `ReservationCard`. However, for root components of a directory, use `index.jsx` as the filename and use the directory name as the component name:
+
     ```javascript
     // bad
     const Footer = require('./Footer/Footer.jsx')
@@ -80,8 +81,8 @@
     const Footer = require('./Footer')
     ```
 
-
 ## Declaration
+
   - Do not use `displayName` for naming components. Instead, name the component by reference.
 
     ```javascript
@@ -97,6 +98,7 @@
     ```
 
 ## Alignment
+
   - Follow these alignment styles for JSX syntax
 
   eslint rules: [`react/jsx-closing-bracket-location`](https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/jsx-closing-bracket-location.md).
@@ -125,6 +127,7 @@
     ```
 
 ## Quotes
+
   - Always use double quotes (`"`) for JSX attributes, but single quotes for all other JS.
 
   > Why? JSX attributes [can't contain escaped quotes](http://eslint.org/docs/rules/jsx-quotes), so double quotes make conjunctions like `"don't"` easier to type.
@@ -147,7 +150,9 @@
     ```
 
 ## Spacing
+
   - Always include a single space in your self-closing tag.
+
     ```javascript
     // bad
     <Foo/>
@@ -164,7 +169,9 @@
     ```
 
 ## Props
+
   - Always use camelCase for prop names.
+
     ```javascript
     // bad
     <Foo
@@ -180,6 +187,7 @@
     ```
 
 ## Parentheses
+
   - Wrap JSX tags in parentheses when they span more than one line.
 
   eslint rules: [`react/wrap-multilines`](https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/wrap-multilines.md).
@@ -209,6 +217,7 @@
     ```
 
 ## Tags
+
   - Always self-close tags that have no children.
 
   eslint rules: [`react/self-closing-comp`](https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/self-closing-comp.md).
@@ -239,7 +248,9 @@
     ```
 
 ## Methods
+
   - Do not use underscore prefix for internal methods of a React component.
+
     ```javascript
     // bad
     React.createClass({
@@ -281,34 +292,34 @@
 
   - How to define `propTypes`, `defaultProps`, `contextTypes`, etc...
 
-  ```javascript
-  import React, { PropTypes } from 'react';
+    ```javascript
+    import React, { PropTypes } from 'react';
 
-  const propTypes = {
-    id: PropTypes.number.isRequired,
-    url: PropTypes.string.isRequired,
-    text: PropTypes.string,
-  };
+    const propTypes = {
+      id: PropTypes.number.isRequired,
+      url: PropTypes.string.isRequired,
+      text: PropTypes.string,
+    };
 
-  const defaultProps = {
-    text: 'Hello World',
-  };
+    const defaultProps = {
+      text: 'Hello World',
+    };
 
-  class Link extends React.Component {
-    static methodsAreOk() {
-      return true;
-    }
+    class Link extends React.Component {
+      static methodsAreOk() {
+        return true;
+      }
 
-    render() {
-      return <a href={this.props.url} data-id={this.props.id}>{this.props.text}</a>
+      render() {
+        return <a href={this.props.url} data-id={this.props.id}>{this.props.text}</a>
+      }
     }
-  }
 
-  Link.propTypes = propTypes;
-  Link.defaultProps = defaultProps;
+    Link.propTypes = propTypes;
+    Link.defaultProps = defaultProps;
 
-  export default Link;
-  ```
+    export default Link;
+    ```
 
   - Ordering for `React.createClass`:
 

From 8989a8a51389562e0440af0546b5b284e0e26bda Mon Sep 17 00:00:00 2001
From: Christopher Banh <chrisngobanh@gmail.com>
Date: Wed, 15 Jul 2015 09:17:04 -0700
Subject: [PATCH 0390/1591] Rename jshintrc to .jshintrc

According to http://jshint.com/docs/, the "special file" to configure JSHint is named `.jshintrc`, not `jshintrc`.
---
 linters/{jshintrc => .jshintrc} | 0
 1 file changed, 0 insertions(+), 0 deletions(-)
 rename linters/{jshintrc => .jshintrc} (100%)

diff --git a/linters/jshintrc b/linters/.jshintrc
similarity index 100%
rename from linters/jshintrc
rename to linters/.jshintrc

From 5c3137d7364b65c9e3300682dd53a68fd595bda2 Mon Sep 17 00:00:00 2001
From: Jordan Gensler <jordan.gensler@airbnb.com>
Date: Sun, 13 Dec 2015 18:36:25 -0800
Subject: [PATCH 0391/1591] Cleaning up the react styleguide. Adding additional
 info in props.

---
 packages/eslint-config-airbnb/rules/react.js |   3 +
 react/README.md                              | 115 +++++++++++++++++--
 2 files changed, 109 insertions(+), 9 deletions(-)

diff --git a/packages/eslint-config-airbnb/rules/react.js b/packages/eslint-config-airbnb/rules/react.js
index 758f4e65f4..7f69354521 100644
--- a/packages/eslint-config-airbnb/rules/react.js
+++ b/packages/eslint-config-airbnb/rules/react.js
@@ -21,6 +21,9 @@ module.exports = {
     // Validate props indentation in JSX
     // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/jsx-indent-props.md
     'react/jsx-indent-props': [2, 2],
+    // Prevent usage of .bind() and arrow functions in JSX props
+    // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/jsx-no-bind.md
+    'react/jsx-no-bind': 2,
     // Prevent duplicate props in JSX
     // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/jsx-no-duplicate-props.md
     'react/jsx-no-duplicate-props': 0,
diff --git a/react/README.md b/react/README.md
index 48a50b8378..052949876c 100644
--- a/react/README.md
+++ b/react/README.md
@@ -56,10 +56,10 @@
 
     ```javascript
     // bad
-    const reservationCard = require('./ReservationCard');
+    import reservationCard from './ReservationCard';
 
     // good
-    const ReservationCard = require('./ReservationCard');
+    import ReservationCard from './ReservationCard';
 
     // bad
     const ReservationItem = <ReservationCard />;
@@ -72,13 +72,13 @@
 
     ```javascript
     // bad
-    const Footer = require('./Footer/Footer.jsx')
+    import Footer from './Footer/Footer.jsx';
 
     // bad
-    const Footer = require('./Footer/index.jsx')
+    import Footer from './Footer/index.jsx';
 
     // good
-    const Footer = require('./Footer')
+    import Footer from './Footer';
     ```
 
 ## Declaration
@@ -186,6 +186,22 @@
     />
     ```
 
+  - Omit the value of the prop when it is explicitly `true`.
+
+  eslint rules: [`react/jsx-boolean-value`](https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/jsx-boolean-value.md).
+
+    ```javascript
+    // bad
+    <Foo
+      hidden={true}
+    />
+
+    // good
+    <Foo
+      hidden
+    />
+    ```
+
 ## Parentheses
 
   - Wrap JSX tags in parentheses when they span more than one line.
@@ -193,7 +209,7 @@
   eslint rules: [`react/wrap-multilines`](https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/wrap-multilines.md).
 
     ```javascript
-    /// bad
+    // bad
     render() {
       return <MyComponent className="long body" foo="bar">
                <MyChild />
@@ -249,17 +265,53 @@
 
 ## Methods
 
+  - Bind event handlers for the render method in the constructor.
+
+  > Why? A bind call in a prop will create a brand new function on every single render.
+
+  eslint rules: [`react/jsx-no-bind`](https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/jsx-no-bind.md).
+
+    ```javascript
+    // bad
+    class extends React.Component {
+      onClickDiv() {
+        // do stuff
+      }
+
+      render() {
+        return <div onClick={this.onClickDiv.bind(this)} />
+      }
+    }
+
+    // good
+    class extends React.Component {
+      constructor(props) {
+        super(props);
+
+        this.onClickDiv = this.onClickDiv.bind(this);
+      }
+
+      onClickDiv() {
+        // do stuff
+      }
+
+      render() {
+        return <div onClick={this.onClickDiv} />
+      }
+    }
+    ```
+
   - Do not use underscore prefix for internal methods of a React component.
 
     ```javascript
     // bad
-    React.createClass({
+    class extends React.Component {
       _onClickSubmit() {
         // do stuff
       }
 
       // other stuff
-    });
+    }
 
     // good
     class extends React.Component {
@@ -268,7 +320,52 @@
       }
 
       // other stuff
-    });
+    }
+    ```
+
+  - Prefix the name of event handlers with `on`.
+    ```javascript
+    // bad
+    class extends React.Component {
+      handleClickDiv() {
+        // do stuff
+      }
+
+      // other stuff
+    }
+
+    // good
+    class extends React.Component {
+      onClickDiv() {
+        // do stuff
+      }
+
+      // other stuff
+    }
+    ```
+
+  - Prefix the name of additional render methods with `render`.
+
+    ```javascript
+    // bad
+    class extends React.Component {
+      createNavigation(){
+        // render stuff
+      }
+      render() {
+        {this.createNavigation()}
+      }
+    }
+
+    // good
+    class extends React.Component {
+      renderNavigation(){
+        // render stuff
+      }
+      render() {
+        {this.renderNavigation()}
+      }
+    }
     ```
 
 ## Ordering

From ae691883043ed06c32e94e50d3dc5d201190ba79 Mon Sep 17 00:00:00 2001
From: Jordan Gensler <jordan.gensler@airbnb.com>
Date: Sun, 13 Dec 2015 21:21:23 -0800
Subject: [PATCH 0392/1591] Removing file extensions. Fixing typos.

---
 react/README.md | 18 +++++++++---------
 1 file changed, 9 insertions(+), 9 deletions(-)

diff --git a/react/README.md b/react/README.md
index 052949876c..42ab6abc2a 100644
--- a/react/README.md
+++ b/react/README.md
@@ -68,14 +68,14 @@
     const reservationItem = <ReservationCard />;
     ```
 
-  **Component Naming**: Use the filename as the component name. For example, `ReservationCard.jsx` should have a reference name of `ReservationCard`. However, for root components of a directory, use `index.jsx` as the filename and use the directory name as the component name:
+  - **Component Naming**: Use the filename as the component name. For example, `ReservationCard.jsx` should have a reference name of `ReservationCard`. However, for root components of a directory, use `index.jsx` as the filename and use the directory name as the component name:
 
     ```javascript
     // bad
-    import Footer from './Footer/Footer.jsx';
+    import Footer from './Footer/Footer';
 
     // bad
-    import Footer from './Footer/index.jsx';
+    import Footer from './Footer/index';
 
     // good
     import Footer from './Footer';
@@ -267,7 +267,7 @@
 
   - Bind event handlers for the render method in the constructor.
 
-  > Why? A bind call in a prop will create a brand new function on every single render.
+  > Why? A bind call in a the render path create a brand new function on every single render.
 
   eslint rules: [`react/jsx-no-bind`](https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/jsx-no-bind.md).
 
@@ -305,13 +305,13 @@
 
     ```javascript
     // bad
-    class extends React.Component {
+    React.createClass({
       _onClickSubmit() {
         // do stuff
-      }
+      },
 
       // other stuff
-    }
+    });
 
     // good
     class extends React.Component {
@@ -349,7 +349,7 @@
     ```javascript
     // bad
     class extends React.Component {
-      createNavigation(){
+      createNavigation() {
         // render stuff
       }
       render() {
@@ -359,7 +359,7 @@
 
     // good
     class extends React.Component {
-      renderNavigation(){
+      renderNavigation() {
         // render stuff
       }
       render() {

From e12e5f0480c958dabd2476aac8fe1890b3185a9b Mon Sep 17 00:00:00 2001
From: Jordan Gensler <jordan.gensler@airbnb.com>
Date: Wed, 23 Dec 2015 12:16:15 -0800
Subject: [PATCH 0393/1591] Removing name prefix rules.

---
 react/README.md | 45 ---------------------------------------------
 1 file changed, 45 deletions(-)

diff --git a/react/README.md b/react/README.md
index 42ab6abc2a..e6b4a331bc 100644
--- a/react/README.md
+++ b/react/README.md
@@ -323,51 +323,6 @@
     }
     ```
 
-  - Prefix the name of event handlers with `on`.
-    ```javascript
-    // bad
-    class extends React.Component {
-      handleClickDiv() {
-        // do stuff
-      }
-
-      // other stuff
-    }
-
-    // good
-    class extends React.Component {
-      onClickDiv() {
-        // do stuff
-      }
-
-      // other stuff
-    }
-    ```
-
-  - Prefix the name of additional render methods with `render`.
-
-    ```javascript
-    // bad
-    class extends React.Component {
-      createNavigation() {
-        // render stuff
-      }
-      render() {
-        {this.createNavigation()}
-      }
-    }
-
-    // good
-    class extends React.Component {
-      renderNavigation() {
-        // render stuff
-      }
-      render() {
-        {this.renderNavigation()}
-      }
-    }
-    ```
-
 ## Ordering
 
   - Ordering for `class extends React.Component`:

From b294e7cbf2b2f242b01aa1e438b757bbbd990317 Mon Sep 17 00:00:00 2001
From: Mordy Tikotzky <mordytk@gmail.com>
Date: Wed, 23 Dec 2015 21:38:53 -0500
Subject: [PATCH 0394/1591] add missing rules from eslint-plugin-react

---
 packages/eslint-config-airbnb/rules/react.js | 35 ++++++++++++++++++++
 1 file changed, 35 insertions(+)

diff --git a/packages/eslint-config-airbnb/rules/react.js b/packages/eslint-config-airbnb/rules/react.js
index 7f69354521..fa32e189bf 100644
--- a/packages/eslint-config-airbnb/rules/react.js
+++ b/packages/eslint-config-airbnb/rules/react.js
@@ -5,10 +5,15 @@ module.exports = {
   'ecmaFeatures': {
     'jsx': true
   },
+  // View link below for react rules documentation
+  // https://github.com/yannickcr/eslint-plugin-react#list-of-supported-rules
   'rules': {
     // Prevent missing displayName in a React component definition
     // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/display-name.md
     'react/display-name': 0,
+    // Forbid certain propTypes (any, array, object)
+    // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/forbid-prop-types.md
+    'react/forbid-prop-types': [0, {'forbid': ['any', 'array', 'object']}],
     // Enforce boolean attributes notation in JSX
     // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/jsx-boolean-value.md
     'react/jsx-boolean-value': [2, 'never'],
@@ -18,18 +23,36 @@ module.exports = {
     // Enforce or disallow spaces inside of curly braces in JSX attributes
     // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/jsx-curly-spacing.md
     'react/jsx-curly-spacing': 0,
+    // Enforce event handler naming conventions in JSX
+    // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/jsx-handler-names.md
+    'react/jsx-handler-names': [0, {
+      'eventHandlerPrefix': 'handle',
+      'eventHandlerPropPrefix': 'on',
+    }],
     // Validate props indentation in JSX
     // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/jsx-indent-props.md
     'react/jsx-indent-props': [2, 2],
+    // Validate JSX has key prop when in array or iterator
+    // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/jsx-key.md
+    'react/jsx-key': 0,
+    // Limit maximum of props on a single line in JSX
+    // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/jsx-max-props-per-line.md
+    'react/jsx-max-props-per-line': [0, {'maximum': 1}],
     // Prevent usage of .bind() and arrow functions in JSX props
     // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/jsx-no-bind.md
     'react/jsx-no-bind': 2,
     // Prevent duplicate props in JSX
     // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/jsx-no-duplicate-props.md
     'react/jsx-no-duplicate-props': 0,
+    // Prevent usage of unwrapped JSX strings
+    // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/jsx-no-literals.md
+    'react/jsx-no-literals': 0,
     // Disallow undeclared variables in JSX
     // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/jsx-no-undef.md
     'react/jsx-no-undef': 2,
+    // Enforce PascalCase for user-defined JSX components
+    // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/jsx-pascal-case.md
+    'react/jsx-pascal-case': 0,
     // Enforce propTypes declarations alphabetical sorting
     // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/jsx-sort-prop-types.md
     'react/jsx-sort-prop-types': 0,
@@ -45,18 +68,30 @@ module.exports = {
     // Prevent usage of dangerous JSX properties
     // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/no-danger.md
     'react/no-danger': 0,
+    // Prevent usage of deprecated methods
+    // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/no-deprecated.md
+    'react/no-deprecated': [1, {"react": "0.14.0"}],
     // Prevent usage of setState in componentDidMount
     // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/no-did-mount-set-state.md
     'react/no-did-mount-set-state': [2, 'allow-in-func'],
     // Prevent usage of setState in componentDidUpdate
     // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/no-did-update-set-state.md
     'react/no-did-update-set-state': [2, 'allow-in-func'],
+    // Prevent direct mutation of this.state
+    // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/no-direct-mutation-state.md
+    'react/no-direct-mutation-state': 0,
     // Prevent usage of isMounted
     // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/no-is-mounted.md
     'react/no-is-mounted': 2,
     // Prevent multiple component definition per file
     // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/no-multi-comp.md
     'react/no-multi-comp': 2,
+    // Prevent usage of setState
+    // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/no-set-state.md
+    'react/no-set-state': 0,
+    // Prevent using string references
+    // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/no-string-refs.md
+    'react/no-string-refs': 0,
     // Prevent usage of unknown DOM property
     // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/no-unknown-property.md
     'react/no-unknown-property': 2,

From f2afce75e949eacd1ba64e89b863105828976f20 Mon Sep 17 00:00:00 2001
From: Mordy Tikotzky <mordytk@gmail.com>
Date: Wed, 23 Dec 2015 21:39:31 -0500
Subject: [PATCH 0395/1591] add default config to all rules which take a config

---
 packages/eslint-config-airbnb/rules/react.js | 24 ++++++++++++--------
 1 file changed, 15 insertions(+), 9 deletions(-)

diff --git a/packages/eslint-config-airbnb/rules/react.js b/packages/eslint-config-airbnb/rules/react.js
index fa32e189bf..f170689600 100644
--- a/packages/eslint-config-airbnb/rules/react.js
+++ b/packages/eslint-config-airbnb/rules/react.js
@@ -10,7 +10,7 @@ module.exports = {
   'rules': {
     // Prevent missing displayName in a React component definition
     // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/display-name.md
-    'react/display-name': 0,
+    'react/display-name': [0, {'acceptTranspilerName', false}],
     // Forbid certain propTypes (any, array, object)
     // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/forbid-prop-types.md
     'react/forbid-prop-types': [0, {'forbid': ['any', 'array', 'object']}],
@@ -22,7 +22,7 @@ module.exports = {
     'react/jsx-closing-bracket-location': [2, 'line-aligned'],
     // Enforce or disallow spaces inside of curly braces in JSX attributes
     // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/jsx-curly-spacing.md
-    'react/jsx-curly-spacing': 0,
+    'react/jsx-curly-spacing': [0, 'never', {'allowMultiline': true}],
     // Enforce event handler naming conventions in JSX
     // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/jsx-handler-names.md
     'react/jsx-handler-names': [0, {
@@ -43,7 +43,7 @@ module.exports = {
     'react/jsx-no-bind': 2,
     // Prevent duplicate props in JSX
     // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/jsx-no-duplicate-props.md
-    'react/jsx-no-duplicate-props': 0,
+    'react/jsx-no-duplicate-props': [0, {'ignoreCase': false}],
     // Prevent usage of unwrapped JSX strings
     // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/jsx-no-literals.md
     'react/jsx-no-literals': 0,
@@ -55,13 +55,19 @@ module.exports = {
     'react/jsx-pascal-case': 0,
     // Enforce propTypes declarations alphabetical sorting
     // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/jsx-sort-prop-types.md
-    'react/jsx-sort-prop-types': 0,
+    'react/jsx-sort-prop-types': [0, {
+      'ignoreCase': false,
+      'callbacksLast': false,
+    }],
     // Enforce props alphabetical sorting
     // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/jsx-sort-props.md
-    'react/jsx-sort-props': 0,
+    'react/jsx-sort-props': [0, {
+      'ignoreCase': false,
+      'callbacksLast': false,
+    }],
     // Prevent React to be incorrectly marked as unused
     // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/jsx-uses-react.md
-    'react/jsx-uses-react': 2,
+    'react/jsx-uses-react': [2, {'pragma': 'React'}],
     // Prevent variables used in JSX to be incorrectly marked as unused
     // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/jsx-uses-vars.md
     'react/jsx-uses-vars': 2,
@@ -85,7 +91,7 @@ module.exports = {
     'react/no-is-mounted': 2,
     // Prevent multiple component definition per file
     // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/no-multi-comp.md
-    'react/no-multi-comp': 2,
+    'react/no-multi-comp': [2, {'ignoreStateless': false}],
     // Prevent usage of setState
     // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/no-set-state.md
     'react/no-set-state': 0,
@@ -100,13 +106,13 @@ module.exports = {
     'react/prefer-es6-class': [2, 'always'],
     // Prevent missing props validation in a React component definition
     // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/prop-types.md
-    'react/prop-types': 2,
+    'react/prop-types': [2, {'ignore': [], customValidators: []}],
     // Prevent missing React when using JSX
     // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/react-in-jsx-scope.md
     'react/react-in-jsx-scope': 2,
     // Restrict file extensions that may be required
     // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/require-extension.md
-    'react/require-extension': 0,
+    'react/require-extension': [0, {'extensions': ['.jsx']}],
     // Prevent extra closing tags for components without children
     // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/self-closing-comp.md
     'react/self-closing-comp': 2,

From c9a919424304dafbfaa469fac6ae3606bc3acacd Mon Sep 17 00:00:00 2001
From: Aleksey Kislov <evenfrosty@gmail.com>
Date: Thu, 24 Dec 2015 11:31:33 +0300
Subject: [PATCH 0396/1591] Preserve strict rule for default export

---
 packages/eslint-config-airbnb/index.js | 1 +
 1 file changed, 1 insertion(+)

diff --git a/packages/eslint-config-airbnb/index.js b/packages/eslint-config-airbnb/index.js
index a5a6c5e287..5a5c535e74 100644
--- a/packages/eslint-config-airbnb/index.js
+++ b/packages/eslint-config-airbnb/index.js
@@ -1,6 +1,7 @@
 module.exports = {
   'extends': [
     'eslint-config-airbnb/base',
+    'eslint-config-airbnb/rules/strict',
     'eslint-config-airbnb/rules/react',
   ].map(require.resolve),
   rules: {}

From b7fbc7b6dfcc8a7acd02f717b935430ee26a3f4f Mon Sep 17 00:00:00 2001
From: Christopher Banh <chrisngobanh@gmail.com>
Date: Wed, 23 Dec 2015 17:13:55 -0800
Subject: [PATCH 0397/1591] Add section 18.12 on line length

---
 README.md | 25 +++++++++++++++++++++++++
 1 file changed, 25 insertions(+)

diff --git a/README.md b/README.md
index 778749e388..e6280b8ba6 100644
--- a/README.md
+++ b/README.md
@@ -1692,6 +1692,31 @@ Other Style Guides
     // good
     const foo = { clark: 'kent' };
     ```
+  - [18.12](#18.12) <a name='18.12'></a> Avoid having lines of code that are longer than 100 characters (including whitespace).
+  > Why? This ensures readability and maintainability.
+
+  eslint rules: [`max-len`](http://eslint.org/docs/rules/max-len.html).
+
+    ```javascript
+  // bad
+  const foo = 'Whatever national crop flips the window. The cartoon reverts within the screw. Whatever wizard constrains a helpful ally. The counterpart ascends!';
+
+  // bad
+  $.ajax({ method: 'POST', url: 'https://airbnb.com/', data: { name: 'John' } }).done(() => console.log('Congratulations!')).fail(() => console.log('You have failed this city.'));
+
+  // good
+  const foo = 'Whatever national crop flips the window. The cartoon reverts within the screw. ' +
+    'Whatever wizard constrains a helpful ally. The counterpart ascends!';
+
+  // good
+  $.ajax({
+    method: 'POST',
+    url: 'https://airbnb.com/',
+    data: { name: 'John' },
+  })
+    .done(() => console.log('Congratulations!'))
+    .fail(() => console.log('You have failed this city.'));
+    ```
 
 **[⬆ back to top](#table-of-contents)**
 

From d11f2663c53b5250499975b8c9d18666425de19f Mon Sep 17 00:00:00 2001
From: Christopher Banh <chrisngobanh@gmail.com>
Date: Wed, 23 Dec 2015 17:34:18 -0800
Subject: [PATCH 0398/1591] Update .jshintrc with new line length

---
 linters/.jshintrc | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/linters/.jshintrc b/linters/.jshintrc
index 141067fd23..4d3468cb21 100644
--- a/linters/.jshintrc
+++ b/linters/.jshintrc
@@ -34,8 +34,8 @@
   // Prohibit use of a variable before it is defined.
   "latedef": true,
 
-  // Enforce line length to 80 characters
-  "maxlen": 80,
+  // Enforce line length to 100 characters
+  "maxlen": 100,
 
   // Require capitalized names for constructor functions.
   "newcap": true,

From 69d3327362ae504e8535fa1019f760d532a9e8a0 Mon Sep 17 00:00:00 2001
From: Christopher Banh <chrisngobanh@gmail.com>
Date: Wed, 23 Dec 2015 17:39:05 -0800
Subject: [PATCH 0399/1591] Enable ESLint rule on limiting maxiumum length of
 line (max-len)

I moved the rule from legacy.js to style.js and enabled it
---
 packages/eslint-config-airbnb/rules/legacy.js | 2 --
 packages/eslint-config-airbnb/rules/style.js  | 2 ++
 2 files changed, 2 insertions(+), 2 deletions(-)

diff --git a/packages/eslint-config-airbnb/rules/legacy.js b/packages/eslint-config-airbnb/rules/legacy.js
index 1d0c518316..e94c774f26 100644
--- a/packages/eslint-config-airbnb/rules/legacy.js
+++ b/packages/eslint-config-airbnb/rules/legacy.js
@@ -2,8 +2,6 @@ module.exports = {
   'rules': {
     // specify the maximum depth that blocks can be nested
     'max-depth': [0, 4],
-    // specify the maximum length of a line in your program
-    'max-len': [0, 80, 4],
     // limits the number of parameters that can be used in the function declaration.
     'max-params': [0, 3],
     // specify the maximum number of statement allowed in a function
diff --git a/packages/eslint-config-airbnb/rules/style.js b/packages/eslint-config-airbnb/rules/style.js
index e65e0f3e08..928dac8266 100644
--- a/packages/eslint-config-airbnb/rules/style.js
+++ b/packages/eslint-config-airbnb/rules/style.js
@@ -34,6 +34,8 @@ module.exports = {
     'lines-around-comment': 0,
     // disallow mixed 'LF' and 'CRLF' as linebreaks
     'linebreak-style': 0,
+    // specify the maximum length of a line in your program
+    "max-len": [2, 100, 4],
     // specify the maximum depth callbacks can be nested
     'max-nested-callbacks': 0,
     // require a capital letter for constructors

From f1c249bcd35141f72b3b4e72dae0df210119e9fe Mon Sep 17 00:00:00 2001
From: Christopher Banh <chrisngobanh@gmail.com>
Date: Wed, 23 Dec 2015 17:44:57 -0800
Subject: [PATCH 0400/1591] Reword section 6.2 to recognize the line length

---
 README.md | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/README.md b/README.md
index e6280b8ba6..ccffd213e4 100644
--- a/README.md
+++ b/README.md
@@ -421,7 +421,7 @@ Other Style Guides
     const name = 'Capt. Janeway';
     ```
 
-  - [6.2](#6.2) <a name='6.2'></a> Strings longer than 100 characters should be written across multiple lines using string concatenation.
+  - [6.2](#6.2) <a name='6.2'></a> Strings that cause the line to go over 100 characters should be written across multiple lines using string concatenation.
   - [6.3](#6.3) <a name='6.3'></a> Note: If overused, long strings with concatenation could impact performance. [jsPerf](http://jsperf.com/ya-string-concat) & [Discussion](https://github.com/airbnb/javascript/issues/40).
 
     ```javascript

From e2e4724fbb079c0dc18481bd10443323df2838c1 Mon Sep 17 00:00:00 2001
From: Christopher Banh <chrisngobanh@gmail.com>
Date: Thu, 24 Dec 2015 02:01:51 -0800
Subject: [PATCH 0401/1591] Address comments in #639

[eslint] Add comment above `max-len` rule with link to its docs
[eslint] Change tab width for `max-len` rule from 4 to 2
[eslint] Replace double quotes around `max-len` with single quotes
[eslint] Use object form of `max-len` and include all of the options
---
 packages/eslint-config-airbnb/rules/style.js | 12 +++++++++++-
 1 file changed, 11 insertions(+), 1 deletion(-)

diff --git a/packages/eslint-config-airbnb/rules/style.js b/packages/eslint-config-airbnb/rules/style.js
index 928dac8266..46bd38a62b 100644
--- a/packages/eslint-config-airbnb/rules/style.js
+++ b/packages/eslint-config-airbnb/rules/style.js
@@ -35,7 +35,17 @@ module.exports = {
     // disallow mixed 'LF' and 'CRLF' as linebreaks
     'linebreak-style': 0,
     // specify the maximum length of a line in your program
-    "max-len": [2, 100, 4],
+    // https://github.com/eslint/eslint/blob/master/docs/rules/max-len.md
+    'max-len': [2, {
+      'code': 100,
+      'comments': 100,
+      'commentLength': 100,
+      'tabWidth': 2,
+      'ignoreUrls': false,
+      'ignorePattern': null,
+      'ignoreTrailingComments': false,
+      'ignoreComments': false
+    }],
     // specify the maximum depth callbacks can be nested
     'max-nested-callbacks': 0,
     // require a capital letter for constructors

From 6d9a787ae2b238aadd9f44b093d3d5970fc9a1a7 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Alican=20=C3=87ubuk=C3=A7uo=C4=9Flu?=
 <alicancubukcuoglu@gmail.com>
Date: Tue, 29 Dec 2015 19:11:52 +0200
Subject: [PATCH 0402/1591] Make reassigning a separate rule.

---
 README.md | 30 +++++++++++++++++++-----------
 1 file changed, 19 insertions(+), 11 deletions(-)

diff --git a/README.md b/README.md
index ccffd213e4..b3d0630d3f 100644
--- a/README.md
+++ b/README.md
@@ -631,7 +631,23 @@ Other Style Guides
 
 - [7.12](#7.12) <a name="7.12"></a> Never mutate parameters.
 
-  > Why? Overwriting parameters can lead to unexpected behavior, especially when accessing the `arguments` object. Manipulating objects passed in as parameters can cause unwanted variable side effects in the original caller.
+  > Why? Manipulating objects passed in as parameters can cause unwanted variable side effects in the original caller.
+
+  ```javascript
+  // bad
+  function f1(obj) {
+    obj.key = 1;
+  };
+
+  // good
+  function f2(obj) {
+    const key = Object.prototype.hasOwnProperty.call(obj, 'key') ? obj.key : 1;
+  };
+  ```
+
+- [7.13](#7.13) <a name="7.13"></a> Never reassign parameters.
+
+  > Why? Reassigning parameters can lead to unexpected behavior, especially when accessing the `arguments` object. It can also cause optimization issues, especially in V8.
 
   eslint rules: [`no-param-reassign`](http://eslint.org/docs/rules/no-param-reassign.html).
 
@@ -645,21 +661,13 @@ Other Style Guides
     if (!a) { a = 1; }
   }
 
-  function f3(obj) {
-    obj.key = 1;
-  };
-
   // good
-  function f4(a) {
+  function f3(a) {
     const b = a || 1;
   }
 
-  function f5(a = 1) {
+  function f4(a = 1) {
   }
-
-  function f6(obj) {
-    const key = Object.prototype.hasOwnProperty.call(obj, 'key') ? obj.key : 1;
-  };
   ```
 
 **[⬆ back to top](#table-of-contents)**

From 3869c21182e05cc6bc754d077364d41eef6189a5 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Alican=20=C3=87ubuk=C3=A7uo=C4=9Flu?=
 <alicancubukcuoglu@gmail.com>
Date: Tue, 29 Dec 2015 19:48:16 +0200
Subject: [PATCH 0403/1591] Fix indentation and spacing.

---
 README.md | 280 +++++++++++++++++++++++++++---------------------------
 1 file changed, 142 insertions(+), 138 deletions(-)

diff --git a/README.md b/README.md
index b3d0630d3f..1da599969b 100644
--- a/README.md
+++ b/README.md
@@ -89,9 +89,9 @@ Other Style Guides
 
   - [2.1](#2.1) <a name='2.1'></a> Use `const` for all of your references; avoid using `var`.
 
-  > Why? This ensures that you can't reassign your references, which can lead to bugs and difficult to comprehend code.
+    > Why? This ensures that you can't reassign your references, which can lead to bugs and difficult to comprehend code.
 
-  eslint rules: [`prefer-const`](http://eslint.org/docs/rules/prefer-const.html), [`no-const-assign`](http://eslint.org/docs/rules/no-const-assign.html).
+    eslint rules: [`prefer-const`](http://eslint.org/docs/rules/prefer-const.html), [`no-const-assign`](http://eslint.org/docs/rules/no-const-assign.html).
 
     ```javascript
     // bad
@@ -105,9 +105,9 @@ Other Style Guides
 
   - [2.2](#2.2) <a name='2.2'></a> If you must reassign references, use `let` instead of `var`.
 
-  > Why? `let` is block-scoped rather than function-scoped like `var`.
+    > Why? `let` is block-scoped rather than function-scoped like `var`.
 
-  eslint rules: [`no-var`](http://eslint.org/docs/rules/no-var.html).
+    eslint rules: [`no-var`](http://eslint.org/docs/rules/no-var.html).
 
     ```javascript
     // bad
@@ -141,7 +141,7 @@ Other Style Guides
 
   - [3.1](#3.1) <a name='3.1'></a> Use the literal syntax for object creation.
 
-  eslint rules: [`no-new-object`](http://eslint.org/docs/rules/no-new-object.html).
+    eslint rules: [`no-new-object`](http://eslint.org/docs/rules/no-new-object.html).
 
     ```javascript
     // bad
@@ -189,7 +189,7 @@ Other Style Guides
   <a name="es6-computed-properties"></a>
   - [3.4](#3.4) <a name='3.4'></a> Use computed property names when creating objects with dynamic property names.
 
-  > Why? They allow you to define all the properties of an object in one place.
+    > Why? They allow you to define all the properties of an object in one place.
 
     ```javascript
 
@@ -215,7 +215,7 @@ Other Style Guides
   <a name="es6-object-shorthand"></a>
   - [3.5](#3.5) <a name='3.5'></a> Use object method shorthand.
 
-  eslint rules: [`object-shorthand`](http://eslint.org/docs/rules/object-shorthand.html).
+    eslint rules: [`object-shorthand`](http://eslint.org/docs/rules/object-shorthand.html).
 
     ```javascript
     // bad
@@ -240,9 +240,9 @@ Other Style Guides
   <a name="es6-object-concise"></a>
   - [3.6](#3.6) <a name='3.6'></a> Use property value shorthand.
 
-  > Why? It is shorter to write and descriptive.
+    > Why? It is shorter to write and descriptive.
 
-  eslint rules: [`object-shorthand`](http://eslint.org/docs/rules/object-shorthand.html).
+    eslint rules: [`object-shorthand`](http://eslint.org/docs/rules/object-shorthand.html).
 
     ```javascript
     const lukeSkywalker = 'Luke Skywalker';
@@ -260,7 +260,7 @@ Other Style Guides
 
   - [3.7](#3.7) <a name='3.7'></a> Group your shorthand properties at the beginning of your object declaration.
 
-  > Why? It's easier to tell which properties are using the shorthand.
+    > Why? It's easier to tell which properties are using the shorthand.
 
     ```javascript
     const anakinSkywalker = 'Anakin Skywalker';
@@ -293,7 +293,7 @@ Other Style Guides
 
   - [4.1](#4.1) <a name='4.1'></a> Use the literal syntax for array creation.
 
-  eslint rules: [`no-array-constructor`](http://eslint.org/docs/rules/no-array-constructor.html).
+    eslint rules: [`no-array-constructor`](http://eslint.org/docs/rules/no-array-constructor.html).
 
     ```javascript
     // bad
@@ -344,7 +344,7 @@ Other Style Guides
 
   - [5.1](#5.1) <a name='5.1'></a> Use object destructuring when accessing and using multiple properties of an object.
 
-  > Why? Destructuring saves you from creating temporary references for those properties.
+    > Why? Destructuring saves you from creating temporary references for those properties.
 
     ```javascript
     // bad
@@ -382,7 +382,7 @@ Other Style Guides
 
   - [5.3](#5.3) <a name='5.3'></a> Use object destructuring for multiple return values, not array destructuring.
 
-  > Why? You can add new properties over time or change the order of things without breaking call sites.
+    > Why? You can add new properties over time or change the order of things without breaking call sites.
 
     ```javascript
     // bad
@@ -411,7 +411,7 @@ Other Style Guides
 
   - [6.1](#6.1) <a name='6.1'></a> Use single quotes `''` for strings.
 
-  eslint rules: [`quotes`](http://eslint.org/docs/rules/quotes.html).
+    eslint rules: [`quotes`](http://eslint.org/docs/rules/quotes.html).
 
     ```javascript
     // bad
@@ -443,9 +443,9 @@ Other Style Guides
   <a name="es6-template-literals"></a>
   - [6.4](#6.4) <a name='6.4'></a> When programmatically building up strings, use template strings instead of concatenation.
 
-  > Why? Template strings give you a readable, concise syntax with proper newlines and string interpolation features.
+    > Why? Template strings give you a readable, concise syntax with proper newlines and string interpolation features.
 
-  eslint rules: [`prefer-template`](http://eslint.org/docs/rules/prefer-template.html).
+    eslint rules: [`prefer-template`](http://eslint.org/docs/rules/prefer-template.html).
 
     ```javascript
     // bad
@@ -472,7 +472,7 @@ Other Style Guides
 
   - [7.1](#7.1) <a name='7.1'></a> Use function declarations instead of function expressions.
 
-  > Why? Function declarations are named, so they're easier to identify in call stacks. Also, the whole body of a function declaration is hoisted, whereas only the reference of a function expression is hoisted. This rule makes it possible to always use [Arrow Functions](#arrow-functions) in place of function expressions.
+    > Why? Function declarations are named, so they're easier to identify in call stacks. Also, the whole body of a function declaration is hoisted, whereas only the reference of a function expression is hoisted. This rule makes it possible to always use [Arrow Functions](#arrow-functions) in place of function expressions.
 
     ```javascript
     // bad
@@ -494,6 +494,7 @@ Other Style Guides
     ```
 
   - [7.3](#7.3) <a name='7.3'></a> Never declare a function in a non-function block (if, while, etc). Assign the function to a variable instead. Browsers will allow you to do it, but they all interpret it differently, which is bad news bears.
+
   - [7.4](#7.4) <a name='7.4'></a> **Note:** ECMA-262 defines a `block` as a list of statements. A function declaration is not a statement. [Read ECMA-262's note on this issue](http://www.ecma-international.org/publications/files/ECMA-ST/Ecma-262.pdf#page=97).
 
     ```javascript
@@ -530,7 +531,7 @@ Other Style Guides
   <a name="es6-rest"></a>
   - [7.6](#7.6) <a name='7.6'></a> Never use `arguments`, opt to use rest syntax `...` instead.
 
-  > Why? `...` is explicit about which arguments you want pulled. Plus rest arguments are a real Array and not Array-like like `arguments`.
+    > Why? `...` is explicit about which arguments you want pulled. Plus rest arguments are a real Array and not Array-like like `arguments`.
 
     ```javascript
     // bad
@@ -574,19 +575,19 @@ Other Style Guides
 
   - [7.8](#7.8) <a name='7.8'></a> Avoid side effects with default parameters.
 
-  > Why? They are confusing to reason about.
+    > Why? They are confusing to reason about.
 
-  ```javascript
-  var b = 1;
-  // bad
-  function count(a = b++) {
-    console.log(a);
-  }
-  count();  // 1
-  count();  // 2
-  count(3); // 3
-  count();  // 3
-  ```
+    ```javascript
+    var b = 1;
+    // bad
+    function count(a = b++) {
+      console.log(a);
+    }
+    count();  // 1
+    count();  // 2
+    count(3); // 3
+    count();  // 3
+    ```
 
   - [7.9](#7.9) <a name='7.9'></a> Always put default parameters last.
 
@@ -602,73 +603,73 @@ Other Style Guides
     }
     ```
 
-- [7.10](#7.10) <a name='7.10'></a> Never use the Function constructor to create a new function.
+  - [7.10](#7.10) <a name='7.10'></a> Never use the Function constructor to create a new function.
 
-  > Why? Creating a function in this way evaluates a string similarly to eval(), which opens vulnerabilities.
+    > Why? Creating a function in this way evaluates a string similarly to eval(), which opens vulnerabilities.
 
-  ```javascript
-  // bad
-  var add = new Function('a', 'b', 'return a + b');
+    ```javascript
+    // bad
+    var add = new Function('a', 'b', 'return a + b');
 
-  // still bad
-  var subtract = Function('a', 'b', 'return a - b');
-  ```
+    // still bad
+    var subtract = Function('a', 'b', 'return a - b');
+    ```
 
-- [7.11](#7.11) <a name="7.11"></a> Spacing in a function signature.
+  - [7.11](#7.11) <a name="7.11"></a> Spacing in a function signature.
 
-  > Why? Consistency is good, and you shouldn’t have to add or remove a space when adding or removing a name.
+    > Why? Consistency is good, and you shouldn’t have to add or remove a space when adding or removing a name.
 
-  ```javascript
-  // bad
-  const f = function(){};
-  const g = function (){};
-  const h = function() {};
+    ```javascript
+    // bad
+    const f = function(){};
+    const g = function (){};
+    const h = function() {};
 
-  // good
-  const x = function () {};
-  const y = function a() {};
-  ```
+    // good
+    const x = function () {};
+    const y = function a() {};
+    ```
 
-- [7.12](#7.12) <a name="7.12"></a> Never mutate parameters.
+  - [7.12](#7.12) <a name="7.12"></a> Never mutate parameters.
 
-  > Why? Manipulating objects passed in as parameters can cause unwanted variable side effects in the original caller.
+    > Why? Manipulating objects passed in as parameters can cause unwanted variable side effects in the original caller.
 
-  ```javascript
-  // bad
-  function f1(obj) {
-    obj.key = 1;
-  };
+    ```javascript
+    // bad
+    function f1(obj) {
+      obj.key = 1;
+    };
 
-  // good
-  function f2(obj) {
-    const key = Object.prototype.hasOwnProperty.call(obj, 'key') ? obj.key : 1;
-  };
-  ```
+    // good
+    function f2(obj) {
+      const key = Object.prototype.hasOwnProperty.call(obj, 'key') ? obj.key : 1;
+    };
+    ```
 
-- [7.13](#7.13) <a name="7.13"></a> Never reassign parameters.
+  - [7.13](#7.13) <a name="7.13"></a> Never reassign parameters.
 
-  > Why? Reassigning parameters can lead to unexpected behavior, especially when accessing the `arguments` object. It can also cause optimization issues, especially in V8.
+    > Why? Reassigning parameters can lead to unexpected behavior, especially when accessing the `arguments` object. It can also cause optimization issues, especially in V8.
 
-  eslint rules: [`no-param-reassign`](http://eslint.org/docs/rules/no-param-reassign.html).
+    eslint rules: [`no-param-reassign`](http://eslint.org/docs/rules/no-param-reassign.html).
 
-  ```javascript
-  // bad
-  function f1(a) {
-    a = 1;
-  }
+    ```javascript
+    // bad
+    function f1(a) {
+      a = 1;
+    }
 
-  function f2(a) {
-    if (!a) { a = 1; }
-  }
+    function f2(a) {
+      if (!a) { a = 1; }
+    }
 
-  // good
-  function f3(a) {
-    const b = a || 1;
-  }
+    // good
+    function f3(a) {
+      const b = a || 1;
+    }
 
-  function f4(a = 1) {
-  }
-  ```
+    function f4(a = 1) {
+    }
+    ```
 
 **[⬆ back to top](#table-of-contents)**
 
@@ -676,11 +677,11 @@ Other Style Guides
 
   - [8.1](#8.1) <a name='8.1'></a> When you must use function expressions (as when passing an anonymous function), use arrow function notation.
 
-  > Why? It creates a version of the function that executes in the context of `this`, which is usually what you want, and is a more concise syntax.
+    > Why? It creates a version of the function that executes in the context of `this`, which is usually what you want, and is a more concise syntax.
 
-  > Why not? If you have a fairly complicated function, you might move that logic out into its own function declaration.
+    > Why not? If you have a fairly complicated function, you might move that logic out into its own function declaration.
 
-  eslint rules: [`prefer-arrow-callback`](http://eslint.org/docs/rules/prefer-arrow-callback.html), [`arrow-spacing`](http://eslint.org/docs/rules/arrow-spacing.html).
+    eslint rules: [`prefer-arrow-callback`](http://eslint.org/docs/rules/prefer-arrow-callback.html), [`arrow-spacing`](http://eslint.org/docs/rules/arrow-spacing.html).
 
     ```javascript
     // bad
@@ -698,11 +699,11 @@ Other Style Guides
 
   - [8.2](#8.2) <a name='8.2'></a> If the function body consists of a single expression, feel free to omit the braces and use the implicit return. Otherwise use a `return` statement.
 
-  > Why? Syntactic sugar. It reads well when multiple functions are chained together.
+    > Why? Syntactic sugar. It reads well when multiple functions are chained together.
 
-  > Why not? If you plan on returning an object.
+    > Why not? If you plan on returning an object.
 
-  eslint rules: [`arrow-parens`](http://eslint.org/docs/rules/arrow-parens.html), [`arrow-body-style`](http://eslint.org/docs/rules/arrow-body-style.html).
+    eslint rules: [`arrow-parens`](http://eslint.org/docs/rules/arrow-parens.html), [`arrow-body-style`](http://eslint.org/docs/rules/arrow-body-style.html).
 
     ```javascript
     // good
@@ -723,7 +724,7 @@ Other Style Guides
 
   - [8.3](#8.3) <a name='8.3'></a> In case the expression spans over multiple lines, wrap it in parentheses for better readability.
 
-  > Why? It shows clearly where the function starts and ends.
+    > Why? It shows clearly where the function starts and ends.
 
     ```js
     // bad
@@ -742,9 +743,9 @@ Other Style Guides
 
   - [8.4](#8.4) <a name='8.4'></a> If your function only takes a single argument, feel free to omit the parentheses.
 
-  > Why? Less visual clutter.
+    > Why? Less visual clutter.
 
-  eslint rules: [`arrow-parens`](http://eslint.org/docs/rules/arrow-parens.html).
+    eslint rules: [`arrow-parens`](http://eslint.org/docs/rules/arrow-parens.html).
 
     ```js
     // good
@@ -761,7 +762,7 @@ Other Style Guides
 
   - [9.1](#9.1) <a name='9.1'></a> Always use `class`. Avoid manipulating `prototype` directly.
 
-  > Why? `class` syntax is more concise and easier to reason about.
+    > Why? `class` syntax is more concise and easier to reason about.
 
     ```javascript
     // bad
@@ -790,7 +791,7 @@ Other Style Guides
 
   - [9.2](#9.2) <a name='9.2'></a> Use `extends` for inheritance.
 
-  > Why? It is a built-in way to inherit prototype functionality without breaking `instanceof`.
+    > Why? It is a built-in way to inherit prototype functionality without breaking `instanceof`.
 
     ```javascript
     // bad
@@ -873,7 +874,7 @@ Other Style Guides
 
   - [10.1](#10.1) <a name='10.1'></a> Always use modules (`import`/`export`) over a non-standard module system. You can always transpile to your preferred module system.
 
-  > Why? Modules are the future, let's start using the future now.
+    > Why? Modules are the future, let's start using the future now.
 
     ```javascript
     // bad
@@ -891,7 +892,7 @@ Other Style Guides
 
   - [10.2](#10.2) <a name='10.2'></a> Do not use wildcard imports.
 
-  > Why? This makes sure you have a single default export.
+    > Why? This makes sure you have a single default export.
 
     ```javascript
     // bad
@@ -903,7 +904,7 @@ Other Style Guides
 
   - [10.3](#10.3) <a name='10.3'></a>And do not export directly from an import.
 
-  > Why? Although the one-liner is concise, having one clear way to import and one clear way to export makes things consistent.
+    > Why? Although the one-liner is concise, having one clear way to import and one clear way to export makes things consistent.
 
     ```javascript
     // bad
@@ -922,9 +923,9 @@ Other Style Guides
 
   - [11.1](#11.1) <a name='11.1'></a> Don't use iterators. Prefer JavaScript's higher-order functions like `map()` and `reduce()` instead of loops like `for-of`.
 
-  > Why? This enforces our immutable rule. Dealing with pure functions that return values is easier to reason about than side-effects.
+    > Why? This enforces our immutable rule. Dealing with pure functions that return values is easier to reason about than side-effects.
 
-  eslint rules: [`no-iterator`](http://eslint.org/docs/rules/no-iterator.html).
+    eslint rules: [`no-iterator`](http://eslint.org/docs/rules/no-iterator.html).
 
     ```javascript
     const numbers = [1, 2, 3, 4, 5];
@@ -949,7 +950,7 @@ Other Style Guides
 
   - [11.2](#11.2) <a name='11.2'></a> Don't use generators for now.
 
-  > Why? They don't transpile well to ES5.
+    > Why? They don't transpile well to ES5.
 
 **[⬆ back to top](#table-of-contents)**
 
@@ -958,7 +959,7 @@ Other Style Guides
 
   - [12.1](#12.1) <a name='12.1'></a> Use dot notation when accessing properties.
 
-  eslint rules: [`dot-notation`](http://eslint.org/docs/rules/dot-notation.html).
+    eslint rules: [`dot-notation`](http://eslint.org/docs/rules/dot-notation.html).
 
     ```javascript
     const luke = {
@@ -1007,7 +1008,7 @@ Other Style Guides
 
     > Why? It's easier to add new variable declarations this way, and you never have to worry about swapping out a `;` for a `,` or introducing punctuation-only diffs.
 
-  eslint rules: [`one-var`](http://eslint.org/docs/rules/one-var.html).
+    eslint rules: [`one-var`](http://eslint.org/docs/rules/one-var.html).
 
     ```javascript
     // bad
@@ -1029,7 +1030,7 @@ Other Style Guides
 
   - [13.3](#13.3) <a name='13.3'></a> Group all your `const`s and then group all your `let`s.
 
-  > Why? This is helpful when later on you might need to assign a variable depending on one of the previous assigned variables.
+    > Why? This is helpful when later on you might need to assign a variable depending on one of the previous assigned variables.
 
     ```javascript
     // bad
@@ -1054,7 +1055,7 @@ Other Style Guides
 
   - [13.4](#13.4) <a name='13.4'></a> Assign variables where you need them, but place them in a reasonable place.
 
-  > Why? `let` and `const` are block scoped and not function scoped.
+    > Why? `let` and `const` are block scoped and not function scoped.
 
     ```javascript
     // good
@@ -1201,16 +1202,17 @@ Other Style Guides
 ## Comparison Operators & Equality
 
   - [15.1](#15.1) <a name='15.1'></a> Use `===` and `!==` over `==` and `!=`.
+
   - [15.2](#15.2) <a name='15.2'></a> Conditional statements such as the `if` statement evaluate their expression using coercion with the `ToBoolean` abstract method and always follow these simple rules:
 
-  eslint rules: [`eqeqeq`](http://eslint.org/docs/rules/eqeqeq.html).
+    eslint rules: [`eqeqeq`](http://eslint.org/docs/rules/eqeqeq.html).
 
-  + **Objects** evaluate to **true**
-  + **Undefined** evaluates to **false**
-  + **Null** evaluates to **false**
-  + **Booleans** evaluate to **the value of the boolean**
-  + **Numbers** evaluate to **false** if **+0, -0, or NaN**, otherwise **true**
-  + **Strings** evaluate to **false** if an empty string `''`, otherwise **true**
+    + **Objects** evaluate to **true**
+    + **Undefined** evaluates to **false**
+    + **Null** evaluates to **false**
+    + **Booleans** evaluate to **the value of the boolean**
+    + **Numbers** evaluate to **false** if **+0, -0, or NaN**, otherwise **true**
+    + **Strings** evaluate to **false** if an empty string `''`, otherwise **true**
 
     ```javascript
     if ([0]) {
@@ -1409,7 +1411,7 @@ Other Style Guides
 
   - [18.1](#18.1) <a name='18.1'></a> Use soft tabs set to 2 spaces.
 
-  eslint rules: [`indent`](http://eslint.org/docs/rules/indent.html).
+    eslint rules: [`indent`](http://eslint.org/docs/rules/indent.html).
 
     ```javascript
     // bad
@@ -1430,7 +1432,7 @@ Other Style Guides
 
   - [18.2](#18.2) <a name='18.2'></a> Place 1 space before the leading brace.
 
-  eslint rules: [`space-before-blocks`](http://eslint.org/docs/rules/space-before-blocks.html).
+    eslint rules: [`space-before-blocks`](http://eslint.org/docs/rules/space-before-blocks.html).
 
     ```javascript
     // bad
@@ -1458,7 +1460,7 @@ Other Style Guides
 
   - [18.3](#18.3) <a name='18.3'></a> Place 1 space before the opening parenthesis in control statements (`if`, `while` etc.). Place no space before the argument list in function calls and declarations.
 
-  eslint rules: [`space-after-keywords`](http://eslint.org/docs/rules/space-after-keywords.html), [`space-before-keywords`](http://eslint.org/docs/rules/space-before-keywords.html).
+    eslint rules: [`space-after-keywords`](http://eslint.org/docs/rules/space-after-keywords.html), [`space-before-keywords`](http://eslint.org/docs/rules/space-before-keywords.html).
 
     ```javascript
     // bad
@@ -1484,7 +1486,7 @@ Other Style Guides
 
   - [18.4](#18.4) <a name='18.4'></a> Set off operators with spaces.
 
-  eslint rules: [`space-infix-ops`](http://eslint.org/docs/rules/space-infix-ops.html).
+    eslint rules: [`space-infix-ops`](http://eslint.org/docs/rules/space-infix-ops.html).
 
     ```javascript
     // bad
@@ -1617,7 +1619,7 @@ Other Style Guides
 
   - [18.8](#18.8) <a name='18.8'></a> Do not pad your blocks with blank lines.
 
-  eslint rules: [`padded-blocks`](http://eslint.org/docs/rules/padded-blocks.html).
+    eslint rules: [`padded-blocks`](http://eslint.org/docs/rules/padded-blocks.html).
 
     ```javascript
     // bad
@@ -1651,7 +1653,7 @@ Other Style Guides
 
   - [18.9](#18.9) <a name='18.9'></a> Do not add spaces inside parentheses.
 
-  eslint rules: [`space-in-parens`](http://eslint.org/docs/rules/space-in-parens.html).
+    eslint rules: [`space-in-parens`](http://eslint.org/docs/rules/space-in-parens.html).
 
     ```javascript
     // bad
@@ -1677,7 +1679,7 @@ Other Style Guides
 
   - [18.10](#18.10) <a name='18.10'></a> Do not add spaces inside brackets.
 
-  eslint rules: [`array-bracket-spacing`](http://eslint.org/docs/rules/array-bracket-spacing.html).
+    eslint rules: [`array-bracket-spacing`](http://eslint.org/docs/rules/array-bracket-spacing.html).
 
     ```javascript
     // bad
@@ -1691,7 +1693,7 @@ Other Style Guides
 
   - [18.11](#18.11) <a name='18.11'></a> Add spaces inside curly braces.
 
-  eslint rules: [`object-curly-spacing`](http://eslint.org/docs/rules/object-curly-spacing.html).
+    eslint rules: [`object-curly-spacing`](http://eslint.org/docs/rules/object-curly-spacing.html).
 
     ```javascript
     // bad
@@ -1700,30 +1702,32 @@ Other Style Guides
     // good
     const foo = { clark: 'kent' };
     ```
+
   - [18.12](#18.12) <a name='18.12'></a> Avoid having lines of code that are longer than 100 characters (including whitespace).
-  > Why? This ensures readability and maintainability.
 
-  eslint rules: [`max-len`](http://eslint.org/docs/rules/max-len.html).
+    > Why? This ensures readability and maintainability.
+
+    eslint rules: [`max-len`](http://eslint.org/docs/rules/max-len.html).
 
     ```javascript
-  // bad
-  const foo = 'Whatever national crop flips the window. The cartoon reverts within the screw. Whatever wizard constrains a helpful ally. The counterpart ascends!';
+    // bad
+    const foo = 'Whatever national crop flips the window. The cartoon reverts within the screw. Whatever wizard constrains a helpful ally. The counterpart ascends!';
 
-  // bad
-  $.ajax({ method: 'POST', url: 'https://airbnb.com/', data: { name: 'John' } }).done(() => console.log('Congratulations!')).fail(() => console.log('You have failed this city.'));
+    // bad
+    $.ajax({ method: 'POST', url: 'https://airbnb.com/', data: { name: 'John' } }).done(() => console.log('Congratulations!')).fail(() => console.log('You have failed this city.'));
 
-  // good
-  const foo = 'Whatever national crop flips the window. The cartoon reverts within the screw. ' +
-    'Whatever wizard constrains a helpful ally. The counterpart ascends!';
+    // good
+    const foo = 'Whatever national crop flips the window. The cartoon reverts within the screw. ' +
+      'Whatever wizard constrains a helpful ally. The counterpart ascends!';
 
-  // good
-  $.ajax({
-    method: 'POST',
-    url: 'https://airbnb.com/',
-    data: { name: 'John' },
-  })
-    .done(() => console.log('Congratulations!'))
-    .fail(() => console.log('You have failed this city.'));
+    // good
+    $.ajax({
+      method: 'POST',
+      url: 'https://airbnb.com/',
+      data: { name: 'John' },
+    })
+      .done(() => console.log('Congratulations!'))
+      .fail(() => console.log('You have failed this city.'));
     ```
 
 **[⬆ back to top](#table-of-contents)**
@@ -1732,7 +1736,7 @@ Other Style Guides
 
   - [19.1](#19.1) <a name='19.1'></a> Leading commas: **Nope.**
 
-  eslint rules: [`comma-style`](http://eslint.org/docs/rules/comma-style.html).
+    eslint rules: [`comma-style`](http://eslint.org/docs/rules/comma-style.html).
 
     ```javascript
     // bad
@@ -1768,9 +1772,9 @@ Other Style Guides
 
   - [19.2](#19.2) <a name='19.2'></a> Additional trailing comma: **Yup.**
 
-  eslint rules: [`no-comma-dangle`](http://eslint.org/docs/rules/no-comma-dangle.html).
+    eslint rules: [`no-comma-dangle`](http://eslint.org/docs/rules/no-comma-dangle.html).
 
-  > Why? This leads to cleaner git diffs. Also, transpilers like Babel will remove the additional trailing comma in the transpiled code which means you don't have to worry about the [trailing comma problem](es5/README.md#commas) in legacy browsers.
+    > Why? This leads to cleaner git diffs. Also, transpilers like Babel will remove the additional trailing comma in the transpiled code which means you don't have to worry about the [trailing comma problem](es5/README.md#commas) in legacy browsers.
 
     ```javascript
     // bad - git diff without trailing comma
@@ -1818,7 +1822,7 @@ Other Style Guides
 
   - [20.1](#20.1) <a name='20.1'></a> **Yup.**
 
-  eslint rules: [`semi`](http://eslint.org/docs/rules/semi.html).
+    eslint rules: [`semi`](http://eslint.org/docs/rules/semi.html).
 
     ```javascript
     // bad
@@ -1940,7 +1944,7 @@ Other Style Guides
 
   - [22.2](#22.2) <a name='22.2'></a> Use camelCase when naming objects, functions, and instances.
 
-  eslint rules: [`camelcase`](http://eslint.org/docs/rules/camelcase.html).
+    eslint rules: [`camelcase`](http://eslint.org/docs/rules/camelcase.html).
 
     ```javascript
     // bad
@@ -1979,7 +1983,7 @@ Other Style Guides
 
   - [22.4](#22.4) <a name='22.4'></a> Use a leading underscore `_` when naming private properties.
 
-  eslint rules: [`no-underscore-dangle`](http://eslint.org/docs/rules/no-underscore-dangle.html).
+    eslint rules: [`no-underscore-dangle`](http://eslint.org/docs/rules/no-underscore-dangle.html).
 
     ```javascript
     // bad

From bbaaf746db194e32bbb2b75745f0b9aa716c4bf4 Mon Sep 17 00:00:00 2001
From: Iurii Kucherov <yuyokk@gmail.com>
Date: Tue, 29 Dec 2015 22:54:02 +0100
Subject: [PATCH 0404/1591] Add missing back tick

---
 react/README.md | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/react/README.md b/react/README.md
index e6b4a331bc..1338ed3e02 100644
--- a/react/README.md
+++ b/react/README.md
@@ -338,7 +338,7 @@
   1. `componentDidUpdate`
   1. `componentWillUnmount`
   1. *clickHandlers or eventHandlers* like `onClickSubmit()` or `onChangeDescription()`
-  1. *getter methods for `render`* like `getSelectReason() or `getFooterContent()`
+  1. *getter methods for `render`* like `getSelectReason()` or `getFooterContent()`
   1. *Optional render methods* like `renderNavigation()` or `renderProfilePicture()`
   1. `render`
 

From f4b4ff6e1ed457f064b4b95da48c2ac4c4c1a435 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Alican=20=C3=87ubuk=C3=A7uo=C4=9Flu?=
 <alicancubukcuoglu@gmail.com>
Date: Wed, 30 Dec 2015 01:54:16 +0200
Subject: [PATCH 0405/1591] Add ESLint link for "Never mutate parameters."
 rule.

---
 README.md | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/README.md b/README.md
index 1da599969b..eadbe2d8a6 100644
--- a/README.md
+++ b/README.md
@@ -634,6 +634,8 @@ Other Style Guides
 
     > Why? Manipulating objects passed in as parameters can cause unwanted variable side effects in the original caller.
 
+    eslint rules: [`no-param-reassign`](http://eslint.org/docs/rules/no-param-reassign.html).
+
     ```javascript
     // bad
     function f1(obj) {

From 8e54961aeb4008a297559663c4ccdeb760090b1e Mon Sep 17 00:00:00 2001
From: Gergo Erdosi <gergo@gergoerdosi.com>
Date: Thu, 31 Dec 2015 01:39:07 +0100
Subject: [PATCH 0406/1591] Fix max-len rule definition

The current definition is valid only in eslint@2.x.x, but this package has a dependency on eslint@1.10.3 which doesn't have all those options yet.
---
 packages/eslint-config-airbnb/rules/style.js | 8 +-------
 1 file changed, 1 insertion(+), 7 deletions(-)

diff --git a/packages/eslint-config-airbnb/rules/style.js b/packages/eslint-config-airbnb/rules/style.js
index 46bd38a62b..284aac483f 100644
--- a/packages/eslint-config-airbnb/rules/style.js
+++ b/packages/eslint-config-airbnb/rules/style.js
@@ -36,14 +36,8 @@ module.exports = {
     'linebreak-style': 0,
     // specify the maximum length of a line in your program
     // https://github.com/eslint/eslint/blob/master/docs/rules/max-len.md
-    'max-len': [2, {
-      'code': 100,
-      'comments': 100,
-      'commentLength': 100,
-      'tabWidth': 2,
+    'max-len': [2, 100, 2, {
       'ignoreUrls': false,
-      'ignorePattern': null,
-      'ignoreTrailingComments': false,
       'ignoreComments': false
     }],
     // specify the maximum depth callbacks can be nested

From 896783d20c5ba3510bd5abf989fb553ed36a2542 Mon Sep 17 00:00:00 2001
From: Allen Zheng <strburst@users.noreply.github.com>
Date: Thu, 31 Dec 2015 20:23:35 -0500
Subject: [PATCH 0407/1591] Link newer ESLint rule (namely comma-dangle)

The "no-comma-dangle" rule was deprecated in favor or "comma-dangle" in
ESLint v1.0.

See http://eslint.org/docs/rules/no-comma-dangle.html,
http://eslint.org/docs/rules/comma-dangle, and line 4 of
packages/eslint-config-airbnb/rules/errors.js.
---
 README.md | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/README.md b/README.md
index eadbe2d8a6..7aa0062a7e 100644
--- a/README.md
+++ b/README.md
@@ -1774,7 +1774,7 @@ Other Style Guides
 
   - [19.2](#19.2) <a name='19.2'></a> Additional trailing comma: **Yup.**
 
-    eslint rules: [`no-comma-dangle`](http://eslint.org/docs/rules/no-comma-dangle.html).
+    eslint rules: [`comma-dangle`](http://eslint.org/docs/rules/comma-dangle.html).
 
     > Why? This leads to cleaner git diffs. Also, transpilers like Babel will remove the additional trailing comma in the transpiled code which means you don't have to worry about the [trailing comma problem](es5/README.md#commas) in legacy browsers.
 

From fd6867d964178a1ff7c2a798a3c8151f5b48ddf1 Mon Sep 17 00:00:00 2001
From: Austin Witherow <401174@CDU-MAC-0015.aida.de>
Date: Mon, 4 Jan 2016 16:19:24 +0100
Subject: [PATCH 0408/1591] missing 's', create(s) under Method

---
 react/README.md | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/react/README.md b/react/README.md
index 1338ed3e02..3a43194163 100644
--- a/react/README.md
+++ b/react/README.md
@@ -267,7 +267,7 @@
 
   - Bind event handlers for the render method in the constructor.
 
-  > Why? A bind call in a the render path create a brand new function on every single render.
+  > Why? A bind call in a the render path creates a brand new function on every single render.
 
   eslint rules: [`react/jsx-no-bind`](https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/jsx-no-bind.md).
 

From bc9faf6fec80e7f4cfac347c433aad44991ecd74 Mon Sep 17 00:00:00 2001
From: Tomek Wiszniewski <t.wiszniewski@gmail.com>
Date: Thu, 12 Nov 2015 08:14:26 +0100
Subject: [PATCH 0409/1591] Bring back note about braces

---
 README.md | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/README.md b/README.md
index 7aa0062a7e..a8c2eafa86 100644
--- a/README.md
+++ b/README.md
@@ -699,7 +699,7 @@ Other Style Guides
     });
     ```
 
-  - [8.2](#8.2) <a name='8.2'></a> If the function body consists of a single expression, feel free to omit the braces and use the implicit return. Otherwise use a `return` statement.
+  - [8.2](#8.2) <a name='8.2'></a> If the function body consists of a single expression, feel free to omit the braces and use the implicit return. Otherwise add the parentheses, braces, and use a `return` statement.
 
     > Why? Syntactic sugar. It reads well when multiple functions are chained together.
 

From 32ec9dd03a62b520292486d21b247f7ef03950aa Mon Sep 17 00:00:00 2001
From: Tomek Wiszniewski <t.wiszniewski@gmail.com>
Date: Wed, 2 Dec 2015 11:52:08 +0100
Subject: [PATCH 0410/1591] Make 8.2 and 8.4 simpler and more explicit

---
 README.md | 18 +++++++++++++++---
 1 file changed, 15 insertions(+), 3 deletions(-)

diff --git a/README.md b/README.md
index a8c2eafa86..a99558ec96 100644
--- a/README.md
+++ b/README.md
@@ -699,7 +699,7 @@ Other Style Guides
     });
     ```
 
-  - [8.2](#8.2) <a name='8.2'></a> If the function body consists of a single expression, feel free to omit the braces and use the implicit return. Otherwise add the parentheses, braces, and use a `return` statement.
+  - [8.2](#8.2) <a name='8.2'></a> If the function body consists of a single expression, omit the braces and use the implicit return. Otherwise, keep the braces and use a `return` statement.
 
     > Why? Syntactic sugar. It reads well when multiple functions are chained together.
 
@@ -743,18 +743,30 @@ Other Style Guides
     ```
 
 
-  - [8.4](#8.4) <a name='8.4'></a> If your function only takes a single argument, feel free to omit the parentheses.
+  - [8.4](#8.4) <a name='8.4'></a> If your function takes a single argument and consists of a single expression, omit the parentheses.
 
     > Why? Less visual clutter.
 
     eslint rules: [`arrow-parens`](http://eslint.org/docs/rules/arrow-parens.html).
 
     ```js
+    // bad
+    [1, 2, 3].map((x) => x * x);
+
     // good
     [1, 2, 3].map(x => x * x);
 
+    // bad
+    [1, 2, 3].reduce(x => {
+      const y = x + 1;
+      return x * y;
+    });
+
     // good
-    [1, 2, 3].reduce((y, x) => x + y);
+    [1, 2, 3].reduce((x) => {
+      const y = x + 1;
+      return x * y;
+    });
     ```
 
 **[⬆ back to top](#table-of-contents)**

From b54ce438c8e590ae25154277d69a802d247a28d1 Mon Sep 17 00:00:00 2001
From: Tomek Wiszniewski <t.wiszniewski@gmail.com>
Date: Wed, 2 Dec 2015 11:58:01 +0100
Subject: [PATCH 0411/1591] Clarify 8.4

---
 README.md | 8 +++++++-
 1 file changed, 7 insertions(+), 1 deletion(-)

diff --git a/README.md b/README.md
index a99558ec96..73ed24fc8b 100644
--- a/README.md
+++ b/README.md
@@ -743,7 +743,7 @@ Other Style Guides
     ```
 
 
-  - [8.4](#8.4) <a name='8.4'></a> If your function takes a single argument and consists of a single expression, omit the parentheses.
+  - [8.4](#8.4) <a name='8.4'></a> If your function takes a single argument and doesn’t use braces, omit the parentheses.
 
     > Why? Less visual clutter.
 
@@ -756,6 +756,12 @@ Other Style Guides
     // good
     [1, 2, 3].map(x => x * x);
 
+    // good
+    [1, 2, 3].map(number => (
+      `A long string with the ${number}. It’s so long that we’ve broken it ` +
+      'over multiple lines!'
+    ));
+
     // bad
     [1, 2, 3].reduce(x => {
       const y = x + 1;

From 766f3585db359b93e77d441a5a1a2deddfbef506 Mon Sep 17 00:00:00 2001
From: Tomek Wiszniewski <t.wiszniewski@gmail.com>
Date: Wed, 2 Dec 2015 11:58:26 +0100
Subject: [PATCH 0412/1591] Fix typo

---
 README.md | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/README.md b/README.md
index 73ed24fc8b..94a1ec9a7d 100644
--- a/README.md
+++ b/README.md
@@ -763,13 +763,13 @@ Other Style Guides
     ));
 
     // bad
-    [1, 2, 3].reduce(x => {
+    [1, 2, 3].map(x => {
       const y = x + 1;
       return x * y;
     });
 
     // good
-    [1, 2, 3].reduce((x) => {
+    [1, 2, 3].map((x) => {
       const y = x + 1;
       return x * y;
     });

From 4ca5764a306365a11a83e8dfd533b754ed9f65b0 Mon Sep 17 00:00:00 2001
From: Tomek Wiszniewski <t.wiszniewski@gmail.com>
Date: Mon, 4 Jan 2016 20:35:37 +0100
Subject: [PATCH 0413/1591] Require parentheses

As suggested by @ljharb in https://github.com/airbnb/javascript/pull/579#issuecomment-166981740
---
 README.md | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/README.md b/README.md
index 94a1ec9a7d..cebc053bcc 100644
--- a/README.md
+++ b/README.md
@@ -743,7 +743,7 @@ Other Style Guides
     ```
 
 
-  - [8.4](#8.4) <a name='8.4'></a> If your function takes a single argument and doesn’t use braces, omit the parentheses.
+  - [8.4](#8.4) <a name='8.4'></a> If your function takes a single argument and doesn’t use braces, omit the parentheses. Otherwise, always include parentheses around arguments.
 
     > Why? Less visual clutter.
 

From 81c58472b6cf6ea486365faf257e97100d85fa7f Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Mon, 4 Jan 2016 14:33:45 -0800
Subject: [PATCH 0414/1591] Fix a bug introduced in
 f2afce75e949eacd1ba64e89b863105828976f20 / #581

---
 packages/eslint-config-airbnb/rules/react.js | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/packages/eslint-config-airbnb/rules/react.js b/packages/eslint-config-airbnb/rules/react.js
index f170689600..7ba1a35c7e 100644
--- a/packages/eslint-config-airbnb/rules/react.js
+++ b/packages/eslint-config-airbnb/rules/react.js
@@ -10,7 +10,7 @@ module.exports = {
   'rules': {
     // Prevent missing displayName in a React component definition
     // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/display-name.md
-    'react/display-name': [0, {'acceptTranspilerName', false}],
+    'react/display-name': [0, {'acceptTranspilerName': false}],
     // Forbid certain propTypes (any, array, object)
     // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/forbid-prop-types.md
     'react/forbid-prop-types': [0, {'forbid': ['any', 'array', 'object']}],

From 286e845b53a80f5e8ff50bbb395722df3d67afbd Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Mon, 4 Jan 2016 14:32:40 -0800
Subject: [PATCH 0415/1591] v3.0.0

---
 packages/eslint-config-airbnb/CHANGELOG.md | 13 +++++++++++++
 packages/eslint-config-airbnb/package.json |  2 +-
 2 files changed, 14 insertions(+), 1 deletion(-)

diff --git a/packages/eslint-config-airbnb/CHANGELOG.md b/packages/eslint-config-airbnb/CHANGELOG.md
index bc269e9222..cb48349261 100644
--- a/packages/eslint-config-airbnb/CHANGELOG.md
+++ b/packages/eslint-config-airbnb/CHANGELOG.md
@@ -1,3 +1,16 @@
+3.0.0 / 2016-01-04
+==================
+ - [breaking] enable `quote-props` rule (#632)
+ - [breaking] Define a max line length of 100 characters (#639)
+ - [breaking] [react] Minor cleanup for the React styleguide, add `react/jsx-no-bind` (#619)
+ - [breaking] update best-practices config to prevent parameter object manipulation (#627)
+ - [minor] Enable react/no-is-mounted rule (#635, #633)
+ - [minor] Sort react/prefer-es6-class alphabetically (#634)
+ - [minor] enable react/prefer-es6-class rule
+ - Permit strict mode in "legacy" config
+ - [react] add missing rules from eslint-plugin-react (enforcing where necessary) (#581)
+ - [dev deps] update `eslint-plugin-react`
+
 2.1.1 / 2015-12-15
 ==================
  - [fix] Remove deprecated react/jsx-quotes (#622)
diff --git a/packages/eslint-config-airbnb/package.json b/packages/eslint-config-airbnb/package.json
index 89e745b44f..021a3c3b25 100644
--- a/packages/eslint-config-airbnb/package.json
+++ b/packages/eslint-config-airbnb/package.json
@@ -1,6 +1,6 @@
 {
   "name": "eslint-config-airbnb",
-  "version": "2.1.1",
+  "version": "3.0.0",
   "description": "Airbnb's ESLint config, following our styleguide",
   "main": "index.js",
   "scripts": {

From 52047535bd95dee256328813004c105d36a68879 Mon Sep 17 00:00:00 2001
From: Sean McCambridge <seanmccambridgedesign@gmail.com>
Date: Tue, 5 Jan 2016 17:11:48 -0500
Subject: [PATCH 0416/1591] clarity in destructuring code example

readme
---
 README.md | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/README.md b/README.md
index d2378926d9..63c8d9e22b 100644
--- a/README.md
+++ b/README.md
@@ -378,8 +378,8 @@ Other Style Guides
     }
 
     // good
-    function getFullName(obj) {
-      const { firstName, lastName } = obj;
+    function getFullName(user) {
+      const { firstName, lastName } = user;
       return `${firstName} ${lastName}`;
     }
 

From 6120656fd236c7076b3ebee007e3e59973435199 Mon Sep 17 00:00:00 2001
From: Jonny Schmid <hi@jonathanschmid.de>
Date: Wed, 6 Jan 2016 11:15:35 +0000
Subject: [PATCH 0417/1591] Fixed typo in URL

---
 README.md | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/README.md b/README.md
index 63c8d9e22b..ef29094a58 100644
--- a/README.md
+++ b/README.md
@@ -2336,7 +2336,7 @@ Other Style Guides
 
   - Code Style Linters
     + [ESlint](http://eslint.org/) - [Airbnb Style .eslintrc](https://github.com/airbnb/javascript/blob/master/linters/.eslintrc)
-    + [JSHint](http://jshint.com/) - [Airbnb Style .jshintrc](https://github.com/airbnb/javascript/blob/master/linters/jshintrc)
+    + [JSHint](http://jshint.com/) - [Airbnb Style .jshintrc](https://github.com/airbnb/javascript/blob/master/linters/.jshintrc)
     + [JSCS](https://github.com/jscs-dev/node-jscs) - [Airbnb Style Preset](https://github.com/jscs-dev/node-jscs/blob/master/presets/airbnb.json)
 
 **Other Style Guides**

From 9af944dd0513b95b910cd69371c2d0f2c38f87b3 Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Wed, 6 Jan 2016 09:06:57 -0800
Subject: [PATCH 0418/1591] [eslint config] [fix] because we use babel,
 keywords should not be quoted.

---
 packages/eslint-config-airbnb/rules/style.js | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/packages/eslint-config-airbnb/rules/style.js b/packages/eslint-config-airbnb/rules/style.js
index 66e3a3f7a9..d2c9cedf57 100644
--- a/packages/eslint-config-airbnb/rules/style.js
+++ b/packages/eslint-config-airbnb/rules/style.js
@@ -86,7 +86,7 @@ module.exports = {
     'padded-blocks': [2, 'never'],
     // require quotes around object literal property names
     // http://eslint.org/docs/rules/quote-props.html
-    'quote-props': [2, 'as-needed', { 'keywords': true, 'unnecessary': true, 'numbers': false }],
+    'quote-props': [2, 'as-needed', { 'keywords': false, 'unnecessary': true, 'numbers': false }],
     // specify whether double or single quotes should be used
     'quotes': [2, 'single', 'avoid-escape'],
     // require identifiers to match the provided regular expression

From ed1f484e1ffbdf14d59c15dede524ae705db7ab8 Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Wed, 6 Jan 2016 11:24:10 -0800
Subject: [PATCH 0419/1591] v3.0.1

---
 packages/eslint-config-airbnb/CHANGELOG.md | 4 ++++
 packages/eslint-config-airbnb/package.json | 2 +-
 2 files changed, 5 insertions(+), 1 deletion(-)

diff --git a/packages/eslint-config-airbnb/CHANGELOG.md b/packages/eslint-config-airbnb/CHANGELOG.md
index cb48349261..5877ff5092 100644
--- a/packages/eslint-config-airbnb/CHANGELOG.md
+++ b/packages/eslint-config-airbnb/CHANGELOG.md
@@ -1,3 +1,7 @@
+3.0.1 / 2016-01-06
+==================
+ - [fix] because we use babel, keywords should not be quoted
+
 3.0.0 / 2016-01-04
 ==================
  - [breaking] enable `quote-props` rule (#632)
diff --git a/packages/eslint-config-airbnb/package.json b/packages/eslint-config-airbnb/package.json
index 021a3c3b25..cf6b714c55 100644
--- a/packages/eslint-config-airbnb/package.json
+++ b/packages/eslint-config-airbnb/package.json
@@ -1,6 +1,6 @@
 {
   "name": "eslint-config-airbnb",
-  "version": "3.0.0",
+  "version": "3.0.1",
   "description": "Airbnb's ESLint config, following our styleguide",
   "main": "index.js",
   "scripts": {

From 557b4dacd7edf6311ecd6e43b78abf46b7be13a3 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Matija=20Marohni=C4=87?= <matija.marohnic@gmail.com>
Date: Thu, 7 Jan 2016 00:19:06 +0100
Subject: [PATCH 0420/1591] Link to the eslint rule for radix in parseInt

---
 README.md | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/README.md b/README.md
index ef29094a58..ea0c66bd7f 100644
--- a/README.md
+++ b/README.md
@@ -1908,6 +1908,8 @@ Other Style Guides
 
   - [21.3](#21.3) <a name='21.3'></a> Numbers: Use `Number` for type casting and `parseInt` always with a radix for parsing strings.
 
+    eslint rules: [`radix`](http://eslint.org/docs/rules/radix).
+
     ```javascript
     const inputValue = '4';
 

From 8c70a8bc6d8a877e1abc8323512efad00ea7cc83 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Matija=20Marohni=C4=87?= <matija.marohnic@gmail.com>
Date: Thu, 7 Jan 2016 01:11:00 +0100
Subject: [PATCH 0421/1591] Ignore URLs in max-len

---
 packages/eslint-config-airbnb/rules/style.js | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/packages/eslint-config-airbnb/rules/style.js b/packages/eslint-config-airbnb/rules/style.js
index d2c9cedf57..ec68b16e5d 100644
--- a/packages/eslint-config-airbnb/rules/style.js
+++ b/packages/eslint-config-airbnb/rules/style.js
@@ -37,7 +37,7 @@ module.exports = {
     // specify the maximum length of a line in your program
     // https://github.com/eslint/eslint/blob/master/docs/rules/max-len.md
     'max-len': [2, 100, 2, {
-      'ignoreUrls': false,
+      'ignoreUrls': true,
       'ignoreComments': false
     }],
     // specify the maximum depth callbacks can be nested

From 74561b64497c24c654e7c6f36ae2b9cfb1a937fc Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Wed, 6 Jan 2016 17:06:42 -0800
Subject: [PATCH 0422/1591] v3.0.2

---
 packages/eslint-config-airbnb/CHANGELOG.md | 4 ++++
 packages/eslint-config-airbnb/package.json | 2 +-
 2 files changed, 5 insertions(+), 1 deletion(-)

diff --git a/packages/eslint-config-airbnb/CHANGELOG.md b/packages/eslint-config-airbnb/CHANGELOG.md
index 5877ff5092..6a241140a4 100644
--- a/packages/eslint-config-airbnb/CHANGELOG.md
+++ b/packages/eslint-config-airbnb/CHANGELOG.md
@@ -1,3 +1,7 @@
+3.0.2 / 2016-01-06
+==================
+ - [fix] Ignore URLs in `max-len` (#664)
+
 3.0.1 / 2016-01-06
 ==================
  - [fix] because we use babel, keywords should not be quoted
diff --git a/packages/eslint-config-airbnb/package.json b/packages/eslint-config-airbnb/package.json
index cf6b714c55..6baad937e0 100644
--- a/packages/eslint-config-airbnb/package.json
+++ b/packages/eslint-config-airbnb/package.json
@@ -1,6 +1,6 @@
 {
   "name": "eslint-config-airbnb",
-  "version": "3.0.1",
+  "version": "3.0.2",
   "description": "Airbnb's ESLint config, following our styleguide",
   "main": "index.js",
   "scripts": {

From 96ef087bdf4443fca81f54903c23261d2dfa1f28 Mon Sep 17 00:00:00 2001
From: Simen Bekkhus <sbekkhus91@gmail.com>
Date: Sun, 27 Dec 2015 12:49:53 +0100
Subject: [PATCH 0423/1591] Allow multiple stateless components in a single
 file

---
 packages/eslint-config-airbnb/rules/react.js | 2 +-
 react/README.md                              | 1 +
 2 files changed, 2 insertions(+), 1 deletion(-)

diff --git a/packages/eslint-config-airbnb/rules/react.js b/packages/eslint-config-airbnb/rules/react.js
index 7ba1a35c7e..c17328ebe8 100644
--- a/packages/eslint-config-airbnb/rules/react.js
+++ b/packages/eslint-config-airbnb/rules/react.js
@@ -91,7 +91,7 @@ module.exports = {
     'react/no-is-mounted': 2,
     // Prevent multiple component definition per file
     // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/no-multi-comp.md
-    'react/no-multi-comp': [2, {'ignoreStateless': false}],
+    'react/no-multi-comp': [2, {'ignoreStateless': true}],
     // Prevent usage of setState
     // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/no-set-state.md
     'react/no-set-state': 0,
diff --git a/react/README.md b/react/README.md
index 3a43194163..ba23784e1a 100644
--- a/react/README.md
+++ b/react/README.md
@@ -21,6 +21,7 @@
 ## Basic Rules
 
   - Only include one React component per file.
+    - However, multiple [Stateless, or Pure, Components](https://facebook.github.io/react/docs/reusable-components.html#stateless-functions) are allowed per file. eslint rule: [`react/no-multi-comp`](https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/no-multi-comp.md#ignorestateless).
   - Always use JSX syntax.
   - Do not use `React.createElement` unless you're initializing the app from a file that is not JSX.
 

From 7f62252e7fdfb394cb515959b39175d55e22f7c6 Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Thu, 7 Jan 2016 22:15:46 -0800
Subject: [PATCH 0424/1591] [guide] clarify function spacing in 18.3

Per #668.
---
 README.md | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/README.md b/README.md
index ea0c66bd7f..390343fb9f 100644
--- a/README.md
+++ b/README.md
@@ -1500,7 +1500,7 @@ Other Style Guides
     });
     ```
 
-  - [18.3](#18.3) <a name='18.3'></a> Place 1 space before the opening parenthesis in control statements (`if`, `while` etc.). Place no space before the argument list in function calls and declarations.
+  - [18.3](#18.3) <a name='18.3'></a> Place 1 space before the opening parenthesis in control statements (`if`, `while` etc.). Place no space between the argument list and the function name in function calls and declarations.
 
     eslint rules: [`space-after-keywords`](http://eslint.org/docs/rules/space-after-keywords.html), [`space-before-keywords`](http://eslint.org/docs/rules/space-before-keywords.html).
 

From af81beb6b8c2cacbe27af406327eee98065d37d3 Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Thu, 7 Jan 2016 22:21:21 -0800
Subject: [PATCH 0425/1591] v3.1.0

---
 packages/eslint-config-airbnb/CHANGELOG.md | 4 ++++
 packages/eslint-config-airbnb/package.json | 2 +-
 2 files changed, 5 insertions(+), 1 deletion(-)

diff --git a/packages/eslint-config-airbnb/CHANGELOG.md b/packages/eslint-config-airbnb/CHANGELOG.md
index 6a241140a4..0cbe0e1357 100644
--- a/packages/eslint-config-airbnb/CHANGELOG.md
+++ b/packages/eslint-config-airbnb/CHANGELOG.md
@@ -1,3 +1,7 @@
+3.1.0 / 2016-01-07
+==================
+ - [minor] Allow multiple stateless components in a single file
+
 3.0.2 / 2016-01-06
 ==================
  - [fix] Ignore URLs in `max-len` (#664)
diff --git a/packages/eslint-config-airbnb/package.json b/packages/eslint-config-airbnb/package.json
index 6baad937e0..016b02098a 100644
--- a/packages/eslint-config-airbnb/package.json
+++ b/packages/eslint-config-airbnb/package.json
@@ -1,6 +1,6 @@
 {
   "name": "eslint-config-airbnb",
-  "version": "3.0.2",
+  "version": "3.1.0",
   "description": "Airbnb's ESLint config, following our styleguide",
   "main": "index.js",
   "scripts": {

From c2fd8fbbd6cf058244024db3ab791ddba15567a1 Mon Sep 17 00:00:00 2001
From: Simon Olofsson <simon@olofsson.de>
Date: Thu, 14 Jan 2016 17:01:31 +0100
Subject: [PATCH 0426/1591] Add missing ES6 rules to ESLint config.

`arrow-body-style` (8.2) and `prefer-template` (6.4) are described in
the Style Guide.
---
 packages/eslint-config-airbnb/rules/es6.js | 6 ++++++
 1 file changed, 6 insertions(+)

diff --git a/packages/eslint-config-airbnb/rules/es6.js b/packages/eslint-config-airbnb/rules/es6.js
index b913fb281c..e34684346d 100644
--- a/packages/eslint-config-airbnb/rules/es6.js
+++ b/packages/eslint-config-airbnb/rules/es6.js
@@ -22,6 +22,9 @@ module.exports = {
     'jsx': true
   },
   'rules': {
+    // enforces no braces where they can be omitted
+    // http://eslint.org/docs/rules/arrow-body-style
+    'arrow-body-style': [2, 'as-needed'],
     // require parens in arrow function arguments
     'arrow-parens': 0,
     // require space before/after arrow function's arrow
@@ -50,6 +53,9 @@ module.exports = {
     'prefer-spread': 0,
     // suggest using Reflect methods where applicable
     'prefer-reflect': 0,
+    // suggest using template literals instead of string concatenation
+    // http://eslint.org/docs/rules/prefer-template
+    'prefer-template': 2,
     // disallow generator functions that do not have yield
     'require-yield': 0
   }

From 4ef335e24276a6c2a46fe7a0674f49cfcff79796 Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Sun, 10 Jan 2016 15:11:05 -0800
Subject: [PATCH 0427/1591] [eslint config] [breaking] require outer IIFE
 wrapping; flesh out guide section.
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

There was lots of discussion [here](https://github.com/airbnb/javascript/issues/21#issuecomment-10203921), but now that we have both a modern build system and an eslint rule requiring terminating semicolons, the concerns with the “crockford” style no longer apply.
---
 README.md                                             | 10 +++++++---
 packages/eslint-config-airbnb/rules/best-practices.js |  3 ++-
 2 files changed, 9 insertions(+), 4 deletions(-)

diff --git a/README.md b/README.md
index b465162e05..8654faf1c3 100644
--- a/README.md
+++ b/README.md
@@ -506,13 +506,17 @@ Other Style Guides
     }
     ```
 
-  - [7.2](#7.2) <a name='7.2'></a> Function expressions:
+  - [7.2](#7.2) <a name='7.2'></a> Immediately invoked function expressions:
+
+    > Why? An immediately invoked function expression is a single unit - wrapping both it, and its invocation parens, in parens, cleanly expresses this. Note that in a world with modules everywhere, you almost never need an IIFE.
+
+    eslint rules: [`wrap-iife`](http://eslint.org/docs/rules/wrap-iife.html).
 
     ```javascript
     // immediately-invoked function expression (IIFE)
-    (() => {
+    (function () {
       console.log('Welcome to the Internet. Please follow me.');
-    })();
+    }());
     ```
 
   - [7.3](#7.3) <a name='7.3'></a> Never declare a function in a non-function block (if, while, etc). Assign the function to a variable instead. Browsers will allow you to do it, but they all interpret it differently, which is bad news bears.
diff --git a/packages/eslint-config-airbnb/rules/best-practices.js b/packages/eslint-config-airbnb/rules/best-practices.js
index 82e5f9e289..1b64cdeb8e 100644
--- a/packages/eslint-config-airbnb/rules/best-practices.js
+++ b/packages/eslint-config-airbnb/rules/best-practices.js
@@ -108,7 +108,8 @@ module.exports = {
     // requires to declare all vars on top of their containing scope
     'vars-on-top': 2,
     // require immediate function invocation to be wrapped in parentheses
-    'wrap-iife': [2, 'any'],
+    // http://eslint.org/docs/rules/wrap-iife.html
+    'wrap-iife': [2, 'outside'],
     // require or disallow Yoda conditions
     'yoda': 2
   }

From 59a0bccd9248b5fb20a88b0306cc33f9e8e37a26 Mon Sep 17 00:00:00 2001
From: Simon Olofsson <simon@olofsson.de>
Date: Wed, 13 Jan 2016 12:25:32 +0100
Subject: [PATCH 0428/1591] 7.3: Add Link to eslint rule.

---
 README.md | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/README.md b/README.md
index 390343fb9f..acedcd720c 100644
--- a/README.md
+++ b/README.md
@@ -517,6 +517,8 @@ Other Style Guides
 
   - [7.3](#7.3) <a name='7.3'></a> Never declare a function in a non-function block (if, while, etc). Assign the function to a variable instead. Browsers will allow you to do it, but they all interpret it differently, which is bad news bears.
 
+   eslint rules: [`no-loop-func`](http://eslint.org/docs/rules/no-loop-func.html).
+
   - [7.4](#7.4) <a name='7.4'></a> **Note:** ECMA-262 defines a `block` as a list of statements. A function declaration is not a statement. [Read ECMA-262's note on this issue](http://www.ecma-international.org/publications/files/ECMA-ST/Ecma-262.pdf#page=97).
 
     ```javascript

From 54b4dea0f94e5b647ec36ef4f6feba5bc383fc1b Mon Sep 17 00:00:00 2001
From: Simon Olofsson <simon@olofsson.de>
Date: Wed, 13 Jan 2016 17:32:30 +0100
Subject: [PATCH 0429/1591] Add `prefer-arrow-callback` to ES6 Rules.

This prefers arrow functions as described in https://github.com/airbnb/javascript#8.1
---
 packages/eslint-config-airbnb/rules/es6.js | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/packages/eslint-config-airbnb/rules/es6.js b/packages/eslint-config-airbnb/rules/es6.js
index 3c277064b6..b913fb281c 100644
--- a/packages/eslint-config-airbnb/rules/es6.js
+++ b/packages/eslint-config-airbnb/rules/es6.js
@@ -42,6 +42,8 @@ module.exports = {
     // require method and property shorthand syntax for object literals
     // https://github.com/eslint/eslint/blob/master/docs/rules/object-shorthand.md
     'object-shorthand': [2, 'always'],
+    // suggest using arrow functions as callbacks
+    'prefer-arrow-callback': 2,
     // suggest using of const declaration for variables that are never modified after declared
     'prefer-const': 2,
     // suggest using the spread operator instead of .apply()

From 90e6cd1c987e308e4b60f97483ae92dfeabe717f Mon Sep 17 00:00:00 2001
From: Simon Olofsson <simon@olofsson.de>
Date: Wed, 13 Jan 2016 13:02:08 +0100
Subject: [PATCH 0430/1591] 22.3: Add Link to eslint rule.

---
 README.md | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/README.md b/README.md
index acedcd720c..7bcf0ef8d7 100644
--- a/README.md
+++ b/README.md
@@ -2004,6 +2004,8 @@ Other Style Guides
     ```
 
   - [22.3](#22.3) <a name='22.3'></a> Use PascalCase when naming constructors or classes.
+  
+    eslint rules: [`new-cap`](http://eslint.org/docs/rules/new-cap.html).
 
     ```javascript
     // bad

From 397f5bbd14d2118c0183b6a3fe5ceda6b1c81832 Mon Sep 17 00:00:00 2001
From: Eddie Monge <eddie@eddiemonge.com>
Date: Mon, 4 Jan 2016 14:10:48 -0800
Subject: [PATCH 0431/1591] assign variables: give a reason for the assignment

The variable assignment wasn't necessary. This gives a reason to have it there
---
 README.md | 37 ++++++++++++++-----------------------
 1 file changed, 14 insertions(+), 23 deletions(-)

diff --git a/README.md b/README.md
index 7bcf0ef8d7..e7b3e37227 100644
--- a/README.md
+++ b/README.md
@@ -1102,45 +1102,36 @@ Other Style Guides
     > Why? `let` and `const` are block scoped and not function scoped.
 
     ```javascript
-    // good
-    function () {
-      test();
-      console.log('doing stuff..');
-
-      //..other stuff..
-
+    // bad - unnecessary function call
+    function checkName(hasName) {
       const name = getName();
 
-      if (name === 'test') {
+      if (hasName === 'test') {
         return false;
       }
 
-      return name;
-    }
-
-    // bad - unnecessary function call
-    function (hasName) {
-      const name = getName();
-
-      if (!hasName) {
+      if (name === 'test') {
+        this.setName('');
         return false;
       }
 
-      this.setFirstName(name);
-
-      return true;
+      return name;
     }
 
     // good
-    function (hasName) {
-      if (!hasName) {
+    function checkName(hasName) {
+      if (hasName === 'test') {
         return false;
       }
 
       const name = getName();
-      this.setFirstName(name);
 
-      return true;
+      if (name === 'test') {
+        this.setName('');
+        return false;
+      }
+
+      return name;
     }
     ```
 

From 9498b3f7c485f56aa22549b95428aea5d2aa53fd Mon Sep 17 00:00:00 2001
From: Peter Geiss <peter.w.geiss@gmail.com>
Date: Wed, 13 Jan 2016 23:12:06 -0500
Subject: [PATCH 0432/1591] Clearly show that [] is truthy

---
 README.md | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/README.md b/README.md
index e7b3e37227..b465162e05 100644
--- a/README.md
+++ b/README.md
@@ -1250,9 +1250,9 @@ Other Style Guides
     + **Strings** evaluate to **false** if an empty string `''`, otherwise **true**
 
     ```javascript
-    if ([0]) {
+    if ([0] && []) {
       // true
-      // An array is an object, objects evaluate to true
+      // An array (even an empty one) is an object, objects will evaluate to true
     }
     ```
 

From c778ade84166ab8061d408696f2ce8614491545f Mon Sep 17 00:00:00 2001
From: Jeff Shen <jeffshen86@gmail.com>
Date: Thu, 14 Jan 2016 23:30:08 -0800
Subject: [PATCH 0433/1591] Fix case type on line 3 comment

Update case type to resemble other comments
---
 packages/eslint-config-airbnb/rules/best-practices.js | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/packages/eslint-config-airbnb/rules/best-practices.js b/packages/eslint-config-airbnb/rules/best-practices.js
index 82e5f9e289..d394f67d1a 100644
--- a/packages/eslint-config-airbnb/rules/best-practices.js
+++ b/packages/eslint-config-airbnb/rules/best-practices.js
@@ -1,6 +1,6 @@
 module.exports = {
   'rules': {
-    // Enforces getter/setter pairs in objects
+    // enforces getter/setter pairs in objects
     'accessor-pairs': 0,
     // treat var statements as if they were block scoped
     'block-scoped-var': 2,

From a4845a82cf41d8589bb28283761ea096346c621c Mon Sep 17 00:00:00 2001
From: Prayag Verma <prayag.verma@gmail.com>
Date: Sat, 16 Jan 2016 17:33:50 +0530
Subject: [PATCH 0434/1591] Update license year range to 2016

---
 README.md | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/README.md b/README.md
index 8654faf1c3..ab5f428cbd 100644
--- a/README.md
+++ b/README.md
@@ -2504,7 +2504,7 @@ Other Style Guides
 
 (The MIT License)
 
-Copyright (c) 2014 Airbnb
+Copyright (c) 2014-2016 Airbnb
 
 Permission is hereby granted, free of charge, to any person obtaining
 a copy of this software and associated documentation files (the

From ab58d3b68eff9fd45db9bc8c78b99e61016e39f9 Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Fri, 15 Jan 2016 10:31:00 -0800
Subject: [PATCH 0435/1591] [Tests] run `npm run lint` as part of tests; fix
 errors.

hat tip to https://github.com/airbnb/javascript/pull/678#issuecomment-172017623
---
 packages/eslint-config-airbnb/base.js         |  4 ++--
 packages/eslint-config-airbnb/index.js        |  2 +-
 packages/eslint-config-airbnb/legacy.js       | 20 +++++++++----------
 packages/eslint-config-airbnb/package.json    |  3 ++-
 .../eslint-config-airbnb/rules/.eslintrc.json |  5 +++++
 .../rules/best-practices.js                   |  2 +-
 packages/eslint-config-airbnb/rules/react.js  | 20 +++++++++----------
 packages/eslint-config-airbnb/rules/style.js  | 19 +++++++++---------
 .../eslint-config-airbnb/rules/variables.js   |  2 +-
 .../test/test-react-order.js                  |  3 +--
 10 files changed, 43 insertions(+), 37 deletions(-)
 create mode 100644 packages/eslint-config-airbnb/rules/.eslintrc.json

diff --git a/packages/eslint-config-airbnb/base.js b/packages/eslint-config-airbnb/base.js
index 093bd541be..1cfea52161 100644
--- a/packages/eslint-config-airbnb/base.js
+++ b/packages/eslint-config-airbnb/base.js
@@ -1,7 +1,7 @@
 module.exports = {
-  'extends': [
+  extends: [
     'eslint-config-airbnb/legacy',
     'eslint-config-airbnb/rules/es6',
   ].map(require.resolve),
-  'rules': {}
+  rules: {}
 };
diff --git a/packages/eslint-config-airbnb/index.js b/packages/eslint-config-airbnb/index.js
index 5a5c535e74..e9ce995ae5 100644
--- a/packages/eslint-config-airbnb/index.js
+++ b/packages/eslint-config-airbnb/index.js
@@ -1,5 +1,5 @@
 module.exports = {
-  'extends': [
+  extends: [
     'eslint-config-airbnb/base',
     'eslint-config-airbnb/rules/strict',
     'eslint-config-airbnb/rules/react',
diff --git a/packages/eslint-config-airbnb/legacy.js b/packages/eslint-config-airbnb/legacy.js
index 257b9dd868..b404cf7c88 100644
--- a/packages/eslint-config-airbnb/legacy.js
+++ b/packages/eslint-config-airbnb/legacy.js
@@ -1,5 +1,5 @@
 module.exports = {
-  'extends': [
+  extends: [
     'eslint-config-airbnb/rules/best-practices',
     'eslint-config-airbnb/rules/errors',
     'eslint-config-airbnb/rules/legacy',
@@ -7,14 +7,14 @@ module.exports = {
     'eslint-config-airbnb/rules/style',
     'eslint-config-airbnb/rules/variables'
   ].map(require.resolve),
-  'env': {
-    'browser': true,
-    'node': true,
-    'amd': false,
-    'mocha': false,
-    'jasmine': false
+  env: {
+    browser: true,
+    node: true,
+    amd: false,
+    mocha: false,
+    jasmine: false
   },
-  'ecmaFeatures': {},
-  'globals': {},
-  'rules': {}
+  ecmaFeatures: {},
+  globals: {},
+  rules: {}
 };
diff --git a/packages/eslint-config-airbnb/package.json b/packages/eslint-config-airbnb/package.json
index 016b02098a..eb3eaa8fe5 100644
--- a/packages/eslint-config-airbnb/package.json
+++ b/packages/eslint-config-airbnb/package.json
@@ -5,7 +5,8 @@
   "main": "index.js",
   "scripts": {
     "lint": "eslint .",
-    "test": "babel-tape-runner ./test/test-*.js"
+    "tests-only": "babel-tape-runner ./test/test-*.js",
+    "test": "npm run lint && npm run tests-only"
   },
   "repository": {
     "type": "git",
diff --git a/packages/eslint-config-airbnb/rules/.eslintrc.json b/packages/eslint-config-airbnb/rules/.eslintrc.json
new file mode 100644
index 0000000000..de68aa25ca
--- /dev/null
+++ b/packages/eslint-config-airbnb/rules/.eslintrc.json
@@ -0,0 +1,5 @@
+{
+  "rules": {
+    "quote-props": 0
+  }
+}
diff --git a/packages/eslint-config-airbnb/rules/best-practices.js b/packages/eslint-config-airbnb/rules/best-practices.js
index 1b64cdeb8e..dfc5ff5622 100644
--- a/packages/eslint-config-airbnb/rules/best-practices.js
+++ b/packages/eslint-config-airbnb/rules/best-practices.js
@@ -13,7 +13,7 @@ module.exports = {
     // require default case in switch statements
     'default-case': 2,
     // encourages use of dot notation whenever possible
-    'dot-notation': [2, { 'allowKeywords': true}],
+    'dot-notation': [2, { 'allowKeywords': true }],
     // enforces consistent newlines before or after dots
     'dot-location': 0,
     // require the use of === and !==
diff --git a/packages/eslint-config-airbnb/rules/react.js b/packages/eslint-config-airbnb/rules/react.js
index c17328ebe8..e1e1c25993 100644
--- a/packages/eslint-config-airbnb/rules/react.js
+++ b/packages/eslint-config-airbnb/rules/react.js
@@ -10,10 +10,10 @@ module.exports = {
   'rules': {
     // Prevent missing displayName in a React component definition
     // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/display-name.md
-    'react/display-name': [0, {'acceptTranspilerName': false}],
+    'react/display-name': [0, { 'acceptTranspilerName': false }],
     // Forbid certain propTypes (any, array, object)
     // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/forbid-prop-types.md
-    'react/forbid-prop-types': [0, {'forbid': ['any', 'array', 'object']}],
+    'react/forbid-prop-types': [0, { 'forbid': ['any', 'array', 'object'] }],
     // Enforce boolean attributes notation in JSX
     // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/jsx-boolean-value.md
     'react/jsx-boolean-value': [2, 'never'],
@@ -22,7 +22,7 @@ module.exports = {
     'react/jsx-closing-bracket-location': [2, 'line-aligned'],
     // Enforce or disallow spaces inside of curly braces in JSX attributes
     // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/jsx-curly-spacing.md
-    'react/jsx-curly-spacing': [0, 'never', {'allowMultiline': true}],
+    'react/jsx-curly-spacing': [0, 'never', { 'allowMultiline': true }],
     // Enforce event handler naming conventions in JSX
     // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/jsx-handler-names.md
     'react/jsx-handler-names': [0, {
@@ -37,13 +37,13 @@ module.exports = {
     'react/jsx-key': 0,
     // Limit maximum of props on a single line in JSX
     // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/jsx-max-props-per-line.md
-    'react/jsx-max-props-per-line': [0, {'maximum': 1}],
+    'react/jsx-max-props-per-line': [0, { 'maximum': 1 }],
     // Prevent usage of .bind() and arrow functions in JSX props
     // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/jsx-no-bind.md
     'react/jsx-no-bind': 2,
     // Prevent duplicate props in JSX
     // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/jsx-no-duplicate-props.md
-    'react/jsx-no-duplicate-props': [0, {'ignoreCase': false}],
+    'react/jsx-no-duplicate-props': [0, { 'ignoreCase': false }],
     // Prevent usage of unwrapped JSX strings
     // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/jsx-no-literals.md
     'react/jsx-no-literals': 0,
@@ -67,7 +67,7 @@ module.exports = {
     }],
     // Prevent React to be incorrectly marked as unused
     // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/jsx-uses-react.md
-    'react/jsx-uses-react': [2, {'pragma': 'React'}],
+    'react/jsx-uses-react': [2, { 'pragma': 'React' }],
     // Prevent variables used in JSX to be incorrectly marked as unused
     // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/jsx-uses-vars.md
     'react/jsx-uses-vars': 2,
@@ -76,7 +76,7 @@ module.exports = {
     'react/no-danger': 0,
     // Prevent usage of deprecated methods
     // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/no-deprecated.md
-    'react/no-deprecated': [1, {"react": "0.14.0"}],
+    'react/no-deprecated': [1, { 'react': '0.14.0' }],
     // Prevent usage of setState in componentDidMount
     // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/no-did-mount-set-state.md
     'react/no-did-mount-set-state': [2, 'allow-in-func'],
@@ -91,7 +91,7 @@ module.exports = {
     'react/no-is-mounted': 2,
     // Prevent multiple component definition per file
     // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/no-multi-comp.md
-    'react/no-multi-comp': [2, {'ignoreStateless': true}],
+    'react/no-multi-comp': [2, { 'ignoreStateless': true }],
     // Prevent usage of setState
     // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/no-set-state.md
     'react/no-set-state': 0,
@@ -106,13 +106,13 @@ module.exports = {
     'react/prefer-es6-class': [2, 'always'],
     // Prevent missing props validation in a React component definition
     // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/prop-types.md
-    'react/prop-types': [2, {'ignore': [], customValidators: []}],
+    'react/prop-types': [2, { 'ignore': [], customValidators: [] }],
     // Prevent missing React when using JSX
     // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/react-in-jsx-scope.md
     'react/react-in-jsx-scope': 2,
     // Restrict file extensions that may be required
     // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/require-extension.md
-    'react/require-extension': [0, {'extensions': ['.jsx']}],
+    'react/require-extension': [0, { 'extensions': ['.jsx'] }],
     // Prevent extra closing tags for components without children
     // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/self-closing-comp.md
     'react/self-closing-comp': 2,
diff --git a/packages/eslint-config-airbnb/rules/style.js b/packages/eslint-config-airbnb/rules/style.js
index ec68b16e5d..2e3e3cae1b 100644
--- a/packages/eslint-config-airbnb/rules/style.js
+++ b/packages/eslint-config-airbnb/rules/style.js
@@ -3,11 +3,11 @@ module.exports = {
     // enforce spacing inside array brackets
     'array-bracket-spacing': [2, 'never'],
     // enforce one true brace style
-    'brace-style': [2, '1tbs', {'allowSingleLine': true }],
+    'brace-style': [2, '1tbs', { 'allowSingleLine': true }],
     // require camel case names
-    'camelcase': [2, {'properties': 'never'}],
+    'camelcase': [2, { 'properties': 'never' }],
     // enforce spacing before and after comma
-    'comma-spacing': [2, {'before': false, 'after': true}],
+    'comma-spacing': [2, { 'before': false, 'after': true }],
     // enforce one true comma style
     'comma-style': [2, 'last'],
     // disallow padding inside computed properties
@@ -20,16 +20,17 @@ module.exports = {
     'func-names': 1,
     // enforces use of function declarations or expressions
     'func-style': 0,
-    // this option enforces minimum and maximum identifier lengths (variable names, property names etc.)
+    // this option enforces minimum and maximum identifier lengths
+    // (variable names, property names etc.)
     'id-length': 0,
     // this option sets a specific tab width for your code
     // https://github.com/eslint/eslint/blob/master/docs/rules/indent.md
-    'indent': [2, 2, { "SwitchCase": 1, "VariableDeclarator": 1 }],
+    'indent': [2, 2, { 'SwitchCase': 1, 'VariableDeclarator': 1 }],
     // specify whether double or single quotes should be used in JSX attributes
     // http://eslint.org/docs/rules/jsx-quotes
     'jsx-quotes': [2, 'prefer-double'],
     // enforces spacing between keys and values in object literal properties
-    'key-spacing': [2, {'beforeColon': false, 'afterColon': true}],
+    'key-spacing': [2, { 'beforeColon': false, 'afterColon': true }],
     // enforces empty lines around comments
     'lines-around-comment': 0,
     // disallow mixed 'LF' and 'CRLF' as linebreaks
@@ -43,7 +44,7 @@ module.exports = {
     // specify the maximum depth callbacks can be nested
     'max-nested-callbacks': 0,
     // require a capital letter for constructors
-    'new-cap': [2, {'newIsCap': true}],
+    'new-cap': [2, { 'newIsCap': true }],
     // disallow the omission of parentheses when invoking a constructor with no arguments
     'new-parens': 0,
     // allow/disallow an empty newline after var statement
@@ -59,7 +60,7 @@ module.exports = {
     // disallow mixed spaces and tabs for indentation
     'no-mixed-spaces-and-tabs': 2,
     // disallow multiple empty lines and only one newline at the end
-    'no-multiple-empty-lines': [2, {'max': 2, 'maxEOF': 1}],
+    'no-multiple-empty-lines': [2, { 'max': 2, 'maxEOF': 1 }],
     // disallow nested ternary expressions
     'no-nested-ternary': 2,
     // disallow use of the Object constructor
@@ -92,7 +93,7 @@ module.exports = {
     // require identifiers to match the provided regular expression
     'id-match': 0,
     // enforce spacing before and after semicolons
-    'semi-spacing': [2, {'before': false, 'after': true}],
+    'semi-spacing': [2, { 'before': false, 'after': true }],
     // require or disallow use of semicolons instead of ASI
     'semi': [2, 'always'],
     // sort variables within the same declaration block
diff --git a/packages/eslint-config-airbnb/rules/variables.js b/packages/eslint-config-airbnb/rules/variables.js
index 3da93fe826..59914313f9 100644
--- a/packages/eslint-config-airbnb/rules/variables.js
+++ b/packages/eslint-config-airbnb/rules/variables.js
@@ -19,7 +19,7 @@ module.exports = {
     // disallow use of undefined variable
     'no-undefined': 0,
     // disallow declaration of variables that are not used in the code
-    'no-unused-vars': [2, {'vars': 'local', 'args': 'after-used'}],
+    'no-unused-vars': [2, { 'vars': 'local', 'args': 'after-used' }],
     // disallow use of variables before they are defined
     'no-use-before-define': 2
   }
diff --git a/packages/eslint-config-airbnb/test/test-react-order.js b/packages/eslint-config-airbnb/test/test-react-order.js
index 1a84b59230..77448cf86a 100644
--- a/packages/eslint-config-airbnb/test/test-react-order.js
+++ b/packages/eslint-config-airbnb/test/test-react-order.js
@@ -1,7 +1,6 @@
 import test from 'tape';
 import { CLIEngine } from 'eslint';
 import eslintrc from '../';
-import baseConfig from '../base';
 import reactRules from '../rules/react';
 
 const cli = new CLIEngine({
@@ -9,7 +8,7 @@ const cli = new CLIEngine({
   baseConfig: eslintrc,
 
   // This rule fails when executing on text.
-  rules: {indent: 0},
+  rules: { indent: 0 },
 });
 
 function lint(text) {

From 396e4611c42416aa3b2af6ed193c3684251d9f68 Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Sat, 16 Jan 2016 11:02:04 -0800
Subject: [PATCH 0436/1591] [Tests] use `parallelshell` to parallelize npm
 run-scripts

---
 packages/eslint-config-airbnb/package.json | 5 +++--
 1 file changed, 3 insertions(+), 2 deletions(-)

diff --git a/packages/eslint-config-airbnb/package.json b/packages/eslint-config-airbnb/package.json
index eb3eaa8fe5..56b15f54f5 100644
--- a/packages/eslint-config-airbnb/package.json
+++ b/packages/eslint-config-airbnb/package.json
@@ -6,7 +6,7 @@
   "scripts": {
     "lint": "eslint .",
     "tests-only": "babel-tape-runner ./test/test-*.js",
-    "test": "npm run lint && npm run tests-only"
+    "test": "parallelshell 'npm run lint' 'npm run tests-only'"
   },
   "repository": {
     "type": "git",
@@ -42,7 +42,8 @@
     "eslint": "^1.10.3",
     "eslint-plugin-react": "^3.12.0",
     "react": "^0.13.3",
-    "tape": "^4.2.2"
+    "tape": "^4.2.2",
+    "parallelshell": "^2.0.0"
   },
   "peerDependencies": {
     "eslint": ">=1.0.0"

From 2bd22f0475b0f3617e4df5d5bf93af72e592717a Mon Sep 17 00:00:00 2001
From: Henry Zhu <hi@henryzoo.com>
Date: Sat, 16 Jan 2016 21:46:35 -0500
Subject: [PATCH 0437/1591] Document corresponding jscs rules

---
 README.md | 82 +++++++++++++++++++++++++++++++++++++++++++++++++++----
 1 file changed, 77 insertions(+), 5 deletions(-)

diff --git a/README.md b/README.md
index ab5f428cbd..209840be36 100644
--- a/README.md
+++ b/README.md
@@ -108,7 +108,9 @@ Other Style Guides
     > Why? `let` is block-scoped rather than function-scoped like `var`.
 
     eslint rules: [`no-var`](http://eslint.org/docs/rules/no-var.html).
-
+    
+    jscs rules: [`disallowVar`](http://jscs.info/rule/disallowVar).
+    
     ```javascript
     // bad
     var count = 1;
@@ -153,6 +155,8 @@ Other Style Guides
 
   - [3.2](#3.2) <a name='3.2'></a> If your code will be executed in browsers in script context, don't use [reserved words](http://es5.github.io/#x7.6.1) as keys. It won't work in IE8. [More info](https://github.com/airbnb/javascript/issues/61). It’s OK to use them in ES6 modules and server-side code.
 
+   jscs rules: [`disallowIdentiferNames`](http://jscs.info/rule/disallowIdentifierNames).
+
     ```javascript
     // bad
     const superman = {
@@ -169,6 +173,8 @@ Other Style Guides
 
   - [3.3](#3.3) <a name='3.3'></a> Use readable synonyms in place of reserved words.
 
+   jscs rules: [`disallowIdentiferNames`](http://jscs.info/rule/disallowIdentifierNames).
+
     ```javascript
     // bad
     const superman = {
@@ -216,6 +222,8 @@ Other Style Guides
   - [3.5](#3.5) <a name='3.5'></a> Use object method shorthand.
 
     eslint rules: [`object-shorthand`](http://eslint.org/docs/rules/object-shorthand.html).
+    
+    jscs rules: [`requireEnhancedObjectLiterals`](http://jscs.info/rule/requireEnhancedObjectLiterals).
 
     ```javascript
     // bad
@@ -243,7 +251,9 @@ Other Style Guides
     > Why? It is shorter to write and descriptive.
 
     eslint rules: [`object-shorthand`](http://eslint.org/docs/rules/object-shorthand.html).
-
+    
+    jscs rules: [`requireEnhancedObjectLiterals`](http://jscs.info/rule/requireEnhancedObjectLiterals).
+    
     ```javascript
     const lukeSkywalker = 'Luke Skywalker';
 
@@ -292,7 +302,9 @@ Other Style Guides
   > Why? In general we consider it subjectively easier to read. It improves syntax highlighting, and is also more easily optimized by many JS engines.
 
   eslint rules: [`quote-props`](http://eslint.org/docs/rules/quote-props.html).
-
+  
+  jscs rules: [`disallowQuotedKeysInObjects: "allExcept": ["reserved"]`](http://jscs.info/rule/disallowQuotedKeysInObjects).
+  
   ```javascript
   // bad
   const bad = {
@@ -367,6 +379,8 @@ Other Style Guides
   - [5.1](#5.1) <a name='5.1'></a> Use object destructuring when accessing and using multiple properties of an object.
 
     > Why? Destructuring saves you from creating temporary references for those properties.
+    
+    jscs rules: [`requireObjectDestructuring`](http://jscs.info/rule/requireObjectDestructuring).
 
     ```javascript
     // bad
@@ -391,6 +405,8 @@ Other Style Guides
 
   - [5.2](#5.2) <a name='5.2'></a> Use array destructuring.
 
+   jscs rules: [`requireArrayDestructuring`](http://jscs.info/rule/requireArrayDestructuring).
+   
     ```javascript
     const arr = [1, 2, 3, 4];
 
@@ -434,7 +450,9 @@ Other Style Guides
   - [6.1](#6.1) <a name='6.1'></a> Use single quotes `''` for strings.
 
     eslint rules: [`quotes`](http://eslint.org/docs/rules/quotes.html).
-
+    
+    jscs rules: [`validateQuoteMarks: "'"`](http://jscs.info/rule/validateQuoteMarks).
+    
     ```javascript
     // bad
     const name = "Capt. Janeway";
@@ -468,6 +486,8 @@ Other Style Guides
     > Why? Template strings give you a readable, concise syntax with proper newlines and string interpolation features.
 
     eslint rules: [`prefer-template`](http://eslint.org/docs/rules/prefer-template.html).
+    
+    jscs rules: [`requireTemplateStrings`](http://jscs.info/rule/requireTemplateStrings).
 
     ```javascript
     // bad
@@ -495,6 +515,8 @@ Other Style Guides
   - [7.1](#7.1) <a name='7.1'></a> Use function declarations instead of function expressions.
 
     > Why? Function declarations are named, so they're easier to identify in call stacks. Also, the whole body of a function declaration is hoisted, whereas only the reference of a function expression is hoisted. This rule makes it possible to always use [Arrow Functions](#arrow-functions) in place of function expressions.
+    
+    jscs rules: [`requireFunctionDeclarations`](http://jscs.info/rule/requireFunctionDeclarations).
 
     ```javascript
     // bad
@@ -512,6 +534,8 @@ Other Style Guides
 
     eslint rules: [`wrap-iife`](http://eslint.org/docs/rules/wrap-iife.html).
 
+    jscs rules: [`requireParenthesesAroundIIFE`](http://jscs.info/rule/requireParenthesesAroundIIFE).
+    
     ```javascript
     // immediately-invoked function expression (IIFE)
     (function () {
@@ -712,6 +736,8 @@ Other Style Guides
     > Why not? If you have a fairly complicated function, you might move that logic out into its own function declaration.
 
     eslint rules: [`prefer-arrow-callback`](http://eslint.org/docs/rules/prefer-arrow-callback.html), [`arrow-spacing`](http://eslint.org/docs/rules/arrow-spacing.html).
+    
+    jscs rules: [`requireArrowFunctions`](http://jscs.info/rule/requireArrowFunctions).
 
     ```javascript
     // bad
@@ -734,6 +760,8 @@ Other Style Guides
     > Why not? If you plan on returning an object.
 
     eslint rules: [`arrow-parens`](http://eslint.org/docs/rules/arrow-parens.html), [`arrow-body-style`](http://eslint.org/docs/rules/arrow-body-style.html).
+    
+    jscs rules: [`disallowParenthesesAroundArrowParam`](http://jscs.info/rule/disallowParenthesesAroundArrowParam), [`requireShorthandArrowFunctions`](http://jscs.info/rule/requireShorthandArrowFunctions).
 
     ```javascript
     // good
@@ -776,7 +804,9 @@ Other Style Guides
     > Why? Less visual clutter.
 
     eslint rules: [`arrow-parens`](http://eslint.org/docs/rules/arrow-parens.html).
-
+    
+    jscs rules: [`disallowParenthesesAroundArrowParam`](http://jscs.info/rule/disallowParenthesesAroundArrowParam).
+    
     ```js
     // bad
     [1, 2, 3].map((x) => x * x);
@@ -1008,6 +1038,8 @@ Other Style Guides
   - [12.1](#12.1) <a name='12.1'></a> Use dot notation when accessing properties.
 
     eslint rules: [`dot-notation`](http://eslint.org/docs/rules/dot-notation.html).
+    
+    jscs rules: [`requireDotNotation`](http://jscs.info/rule/requireDotNotation).
 
     ```javascript
     const luke = {
@@ -1057,6 +1089,8 @@ Other Style Guides
     > Why? It's easier to add new variable declarations this way, and you never have to worry about swapping out a `;` for a `,` or introducing punctuation-only diffs.
 
     eslint rules: [`one-var`](http://eslint.org/docs/rules/one-var.html).
+    
+    jscs rules: [`disallowMultipleVarDecl`](http://jscs.info/rule/disallowMultipleVarDecl).
 
     ```javascript
     // bad
@@ -1320,6 +1354,8 @@ Other Style Guides
 
     eslint rules: [`brace-style`](http://eslint.org/docs/rules/brace-style.html).
 
+    jscs rules: [`disallowNewlineBeforeBlockStatements`](http://jscs.info/rule/disallowNewlineBeforeBlockStatements).
+    
     ```javascript
     // bad
     if (test) {
@@ -1451,6 +1487,8 @@ Other Style Guides
   - [18.1](#18.1) <a name='18.1'></a> Use soft tabs set to 2 spaces.
 
     eslint rules: [`indent`](http://eslint.org/docs/rules/indent.html).
+    
+    jscs rules: [`validateIndentation: 2`](http://jscs.info/rule/validateIndentation).
 
     ```javascript
     // bad
@@ -1473,6 +1511,8 @@ Other Style Guides
 
     eslint rules: [`space-before-blocks`](http://eslint.org/docs/rules/space-before-blocks.html).
 
+    jscs rules: [`requireSpaceBeforeBlockStatements`](http://jscs.info/rule/requireSpaceBeforeBlockStatements).
+
     ```javascript
     // bad
     function test(){
@@ -1501,6 +1541,8 @@ Other Style Guides
 
     eslint rules: [`space-after-keywords`](http://eslint.org/docs/rules/space-after-keywords.html), [`space-before-keywords`](http://eslint.org/docs/rules/space-before-keywords.html).
 
+    jscs rules: [`requireSpaceAfterKeywords`](http://jscs.info/rule/requireSpaceAfterKeywords).
+
     ```javascript
     // bad
     if(isJedi) {
@@ -1526,6 +1568,8 @@ Other Style Guides
   - [18.4](#18.4) <a name='18.4'></a> Set off operators with spaces.
 
     eslint rules: [`space-infix-ops`](http://eslint.org/docs/rules/space-infix-ops.html).
+    
+    jscs rules: [`requireSpaceBeforeBinaryOperators`](http://jscs.info/rule/requireSpaceBeforeBinaryOperators), [`requireSpaceAfterBinaryOperators`](http://jscs.info/rule/requireSpaceAfterBinaryOperators).
 
     ```javascript
     // bad
@@ -1601,6 +1645,8 @@ Other Style Guides
 
   - [18.7](#18.7) <a name='18.7'></a> Leave a blank line after blocks and before the next statement.
 
+    jscs rules: [`requirePaddingNewLinesAfterBlocks`](http://jscs.info/rule/requirePaddingNewLinesAfterBlocks).
+
     ```javascript
     // bad
     if (foo) {
@@ -1659,6 +1705,8 @@ Other Style Guides
   - [18.8](#18.8) <a name='18.8'></a> Do not pad your blocks with blank lines.
 
     eslint rules: [`padded-blocks`](http://eslint.org/docs/rules/padded-blocks.html).
+    
+    jscs rules: [`disallowPaddingNewlinesInBlocks`](http://jscs.info/rule/disallowPaddingNewlinesInBlocks).
 
     ```javascript
     // bad
@@ -1693,6 +1741,8 @@ Other Style Guides
   - [18.9](#18.9) <a name='18.9'></a> Do not add spaces inside parentheses.
 
     eslint rules: [`space-in-parens`](http://eslint.org/docs/rules/space-in-parens.html).
+    
+    jscs rules: [`disallowSpacesInsideParentheses`](http://jscs.info/rule/disallowSpacesInsideParentheses).
 
     ```javascript
     // bad
@@ -1719,6 +1769,8 @@ Other Style Guides
   - [18.10](#18.10) <a name='18.10'></a> Do not add spaces inside brackets.
 
     eslint rules: [`array-bracket-spacing`](http://eslint.org/docs/rules/array-bracket-spacing.html).
+    
+    jscs rules: [`disallowSpacesInsideArrayBrackets`](http://jscs.info/rule/disallowSpacesInsideArrayBrackets).
 
     ```javascript
     // bad
@@ -1733,6 +1785,8 @@ Other Style Guides
   - [18.11](#18.11) <a name='18.11'></a> Add spaces inside curly braces.
 
     eslint rules: [`object-curly-spacing`](http://eslint.org/docs/rules/object-curly-spacing.html).
+    
+    jscs rules: [`disallowSpacesInsideObjectBrackets`](http://jscs.info/rule/disallowSpacesInsideObjectBrackets).
 
     ```javascript
     // bad
@@ -1747,6 +1801,8 @@ Other Style Guides
     > Why? This ensures readability and maintainability.
 
     eslint rules: [`max-len`](http://eslint.org/docs/rules/max-len.html).
+    
+    jscs rules: [`maximumLineLength`](http://jscs.info/rule/maximumLineLength).
 
     ```javascript
     // bad
@@ -1776,6 +1832,8 @@ Other Style Guides
   - [19.1](#19.1) <a name='19.1'></a> Leading commas: **Nope.**
 
     eslint rules: [`comma-style`](http://eslint.org/docs/rules/comma-style.html).
+    
+    jscs rules: [`requireCommaBeforeLineBreak`](http://jscs.info/rule/requireCommaBeforeLineBreak).
 
     ```javascript
     // bad
@@ -1812,6 +1870,8 @@ Other Style Guides
   - [19.2](#19.2) <a name='19.2'></a> Additional trailing comma: **Yup.**
 
     eslint rules: [`comma-dangle`](http://eslint.org/docs/rules/comma-dangle.html).
+    
+    jscs rules: [`requireTrailingComma`](http://jscs.info/rule/requireTrailingComma).
 
     > Why? This leads to cleaner git diffs. Also, transpilers like Babel will remove the additional trailing comma in the transpiled code which means you don't have to worry about the [trailing comma problem](es5/README.md#commas) in legacy browsers.
 
@@ -1862,6 +1922,8 @@ Other Style Guides
   - [20.1](#20.1) <a name='20.1'></a> **Yup.**
 
     eslint rules: [`semi`](http://eslint.org/docs/rules/semi.html).
+    
+    jscs rules: [`requireSemicolons`](http://jscs.info/rule/requireSemicolons).
 
     ```javascript
     // bad
@@ -1986,6 +2048,8 @@ Other Style Guides
   - [22.2](#22.2) <a name='22.2'></a> Use camelCase when naming objects, functions, and instances.
 
     eslint rules: [`camelcase`](http://eslint.org/docs/rules/camelcase.html).
+    
+    jscs rules: [`requireCamelCaseOrUpperCaseIdentifiers`](http://jscs.info/rule/requireCamelCaseOrUpperCaseIdentifiers).
 
     ```javascript
     // bad
@@ -2001,6 +2065,8 @@ Other Style Guides
   - [22.3](#22.3) <a name='22.3'></a> Use PascalCase when naming constructors or classes.
   
     eslint rules: [`new-cap`](http://eslint.org/docs/rules/new-cap.html).
+    
+    jscs rules: [`requireCapitalizedConstructors`](http://jscs.info/rule/requireCapitalizedConstructors).
 
     ```javascript
     // bad
@@ -2027,6 +2093,8 @@ Other Style Guides
   - [22.4](#22.4) <a name='22.4'></a> Use a leading underscore `_` when naming private properties.
 
     eslint rules: [`no-underscore-dangle`](http://eslint.org/docs/rules/no-underscore-dangle.html).
+    
+    jscs rules: [`disallowDanglingUnderscores`](http://jscs.info/rule/disallowDanglingUnderscores).
 
     ```javascript
     // bad
@@ -2039,6 +2107,8 @@ Other Style Guides
 
   - [22.5](#22.5) <a name='22.5'></a> Don't save references to `this`. Use arrow functions or Function#bind.
 
+    jscs rules: [`disallowNodeTypes`](http://jscs.info/rule/disallowNodeTypes).
+
     ```javascript
     // bad
     function foo() {
@@ -2197,6 +2267,8 @@ Other Style Guides
 ## jQuery
 
   - [25.1](#25.1) <a name='25.1'></a> Prefix jQuery object variables with a `$`.
+  
+    jscs rules: [`requireDollarBeforejQueryAssignment`](http://jscs.info/rule/requireDollarBeforejQueryAssignment).
 
     ```javascript
     // bad

From 56ea6c7351819e51dfe80c0cbb9e9c2eab093090 Mon Sep 17 00:00:00 2001
From: Henry Zhu <hi@henryzoo.com>
Date: Sat, 16 Jan 2016 22:27:41 -0500
Subject: [PATCH 0438/1591] remove specific rule values in text

---
 README.md | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/README.md b/README.md
index 209840be36..6def9f3adb 100644
--- a/README.md
+++ b/README.md
@@ -303,7 +303,7 @@ Other Style Guides
 
   eslint rules: [`quote-props`](http://eslint.org/docs/rules/quote-props.html).
   
-  jscs rules: [`disallowQuotedKeysInObjects: "allExcept": ["reserved"]`](http://jscs.info/rule/disallowQuotedKeysInObjects).
+  jscs rules: [`disallowQuotedKeysInObjects`](http://jscs.info/rule/disallowQuotedKeysInObjects).
   
   ```javascript
   // bad
@@ -451,7 +451,7 @@ Other Style Guides
 
     eslint rules: [`quotes`](http://eslint.org/docs/rules/quotes.html).
     
-    jscs rules: [`validateQuoteMarks: "'"`](http://jscs.info/rule/validateQuoteMarks).
+    jscs rules: [`validateQuoteMarks`](http://jscs.info/rule/validateQuoteMarks).
     
     ```javascript
     // bad
@@ -1488,7 +1488,7 @@ Other Style Guides
 
     eslint rules: [`indent`](http://eslint.org/docs/rules/indent.html).
     
-    jscs rules: [`validateIndentation: 2`](http://jscs.info/rule/validateIndentation).
+    jscs rules: [`validateIndentation`](http://jscs.info/rule/validateIndentation).
 
     ```javascript
     // bad

From 93a957f4f63c076992c6cc487dcb1cc79c31f79d Mon Sep 17 00:00:00 2001
From: Kevin Ivan <info@kevinivan.com>
Date: Sun, 17 Jan 2016 14:55:16 +0100
Subject: [PATCH 0439/1591] fix typo

---
 react/README.md | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/react/README.md b/react/README.md
index ba23784e1a..eaddfceb2c 100644
--- a/react/README.md
+++ b/react/README.md
@@ -268,7 +268,7 @@
 
   - Bind event handlers for the render method in the constructor.
 
-  > Why? A bind call in a the render path creates a brand new function on every single render.
+  > Why? A bind call in the render path creates a brand new function on every single render.
 
   eslint rules: [`react/jsx-no-bind`](https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/jsx-no-bind.md).
 

From 586b7d9dfa95457da237318e7d83cbfa2d620921 Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Sun, 17 Jan 2016 18:10:42 -0800
Subject: [PATCH 0440/1591] [docs] remove trailing whitespace

---
 README.md | 72 +++++++++++++++++++++++++++----------------------------
 1 file changed, 36 insertions(+), 36 deletions(-)

diff --git a/README.md b/README.md
index 6def9f3adb..8b6feb7f12 100644
--- a/README.md
+++ b/README.md
@@ -108,9 +108,9 @@ Other Style Guides
     > Why? `let` is block-scoped rather than function-scoped like `var`.
 
     eslint rules: [`no-var`](http://eslint.org/docs/rules/no-var.html).
-    
+
     jscs rules: [`disallowVar`](http://jscs.info/rule/disallowVar).
-    
+
     ```javascript
     // bad
     var count = 1;
@@ -222,7 +222,7 @@ Other Style Guides
   - [3.5](#3.5) <a name='3.5'></a> Use object method shorthand.
 
     eslint rules: [`object-shorthand`](http://eslint.org/docs/rules/object-shorthand.html).
-    
+
     jscs rules: [`requireEnhancedObjectLiterals`](http://jscs.info/rule/requireEnhancedObjectLiterals).
 
     ```javascript
@@ -251,9 +251,9 @@ Other Style Guides
     > Why? It is shorter to write and descriptive.
 
     eslint rules: [`object-shorthand`](http://eslint.org/docs/rules/object-shorthand.html).
-    
+
     jscs rules: [`requireEnhancedObjectLiterals`](http://jscs.info/rule/requireEnhancedObjectLiterals).
-    
+
     ```javascript
     const lukeSkywalker = 'Luke Skywalker';
 
@@ -302,9 +302,9 @@ Other Style Guides
   > Why? In general we consider it subjectively easier to read. It improves syntax highlighting, and is also more easily optimized by many JS engines.
 
   eslint rules: [`quote-props`](http://eslint.org/docs/rules/quote-props.html).
-  
+
   jscs rules: [`disallowQuotedKeysInObjects`](http://jscs.info/rule/disallowQuotedKeysInObjects).
-  
+
   ```javascript
   // bad
   const bad = {
@@ -379,7 +379,7 @@ Other Style Guides
   - [5.1](#5.1) <a name='5.1'></a> Use object destructuring when accessing and using multiple properties of an object.
 
     > Why? Destructuring saves you from creating temporary references for those properties.
-    
+
     jscs rules: [`requireObjectDestructuring`](http://jscs.info/rule/requireObjectDestructuring).
 
     ```javascript
@@ -406,7 +406,7 @@ Other Style Guides
   - [5.2](#5.2) <a name='5.2'></a> Use array destructuring.
 
    jscs rules: [`requireArrayDestructuring`](http://jscs.info/rule/requireArrayDestructuring).
-   
+
     ```javascript
     const arr = [1, 2, 3, 4];
 
@@ -450,9 +450,9 @@ Other Style Guides
   - [6.1](#6.1) <a name='6.1'></a> Use single quotes `''` for strings.
 
     eslint rules: [`quotes`](http://eslint.org/docs/rules/quotes.html).
-    
+
     jscs rules: [`validateQuoteMarks`](http://jscs.info/rule/validateQuoteMarks).
-    
+
     ```javascript
     // bad
     const name = "Capt. Janeway";
@@ -486,7 +486,7 @@ Other Style Guides
     > Why? Template strings give you a readable, concise syntax with proper newlines and string interpolation features.
 
     eslint rules: [`prefer-template`](http://eslint.org/docs/rules/prefer-template.html).
-    
+
     jscs rules: [`requireTemplateStrings`](http://jscs.info/rule/requireTemplateStrings).
 
     ```javascript
@@ -515,7 +515,7 @@ Other Style Guides
   - [7.1](#7.1) <a name='7.1'></a> Use function declarations instead of function expressions.
 
     > Why? Function declarations are named, so they're easier to identify in call stacks. Also, the whole body of a function declaration is hoisted, whereas only the reference of a function expression is hoisted. This rule makes it possible to always use [Arrow Functions](#arrow-functions) in place of function expressions.
-    
+
     jscs rules: [`requireFunctionDeclarations`](http://jscs.info/rule/requireFunctionDeclarations).
 
     ```javascript
@@ -535,7 +535,7 @@ Other Style Guides
     eslint rules: [`wrap-iife`](http://eslint.org/docs/rules/wrap-iife.html).
 
     jscs rules: [`requireParenthesesAroundIIFE`](http://jscs.info/rule/requireParenthesesAroundIIFE).
-    
+
     ```javascript
     // immediately-invoked function expression (IIFE)
     (function () {
@@ -736,7 +736,7 @@ Other Style Guides
     > Why not? If you have a fairly complicated function, you might move that logic out into its own function declaration.
 
     eslint rules: [`prefer-arrow-callback`](http://eslint.org/docs/rules/prefer-arrow-callback.html), [`arrow-spacing`](http://eslint.org/docs/rules/arrow-spacing.html).
-    
+
     jscs rules: [`requireArrowFunctions`](http://jscs.info/rule/requireArrowFunctions).
 
     ```javascript
@@ -760,7 +760,7 @@ Other Style Guides
     > Why not? If you plan on returning an object.
 
     eslint rules: [`arrow-parens`](http://eslint.org/docs/rules/arrow-parens.html), [`arrow-body-style`](http://eslint.org/docs/rules/arrow-body-style.html).
-    
+
     jscs rules: [`disallowParenthesesAroundArrowParam`](http://jscs.info/rule/disallowParenthesesAroundArrowParam), [`requireShorthandArrowFunctions`](http://jscs.info/rule/requireShorthandArrowFunctions).
 
     ```javascript
@@ -804,9 +804,9 @@ Other Style Guides
     > Why? Less visual clutter.
 
     eslint rules: [`arrow-parens`](http://eslint.org/docs/rules/arrow-parens.html).
-    
+
     jscs rules: [`disallowParenthesesAroundArrowParam`](http://jscs.info/rule/disallowParenthesesAroundArrowParam).
-    
+
     ```js
     // bad
     [1, 2, 3].map((x) => x * x);
@@ -1038,7 +1038,7 @@ Other Style Guides
   - [12.1](#12.1) <a name='12.1'></a> Use dot notation when accessing properties.
 
     eslint rules: [`dot-notation`](http://eslint.org/docs/rules/dot-notation.html).
-    
+
     jscs rules: [`requireDotNotation`](http://jscs.info/rule/requireDotNotation).
 
     ```javascript
@@ -1089,7 +1089,7 @@ Other Style Guides
     > Why? It's easier to add new variable declarations this way, and you never have to worry about swapping out a `;` for a `,` or introducing punctuation-only diffs.
 
     eslint rules: [`one-var`](http://eslint.org/docs/rules/one-var.html).
-    
+
     jscs rules: [`disallowMultipleVarDecl`](http://jscs.info/rule/disallowMultipleVarDecl).
 
     ```javascript
@@ -1355,7 +1355,7 @@ Other Style Guides
     eslint rules: [`brace-style`](http://eslint.org/docs/rules/brace-style.html).
 
     jscs rules: [`disallowNewlineBeforeBlockStatements`](http://jscs.info/rule/disallowNewlineBeforeBlockStatements).
-    
+
     ```javascript
     // bad
     if (test) {
@@ -1487,7 +1487,7 @@ Other Style Guides
   - [18.1](#18.1) <a name='18.1'></a> Use soft tabs set to 2 spaces.
 
     eslint rules: [`indent`](http://eslint.org/docs/rules/indent.html).
-    
+
     jscs rules: [`validateIndentation`](http://jscs.info/rule/validateIndentation).
 
     ```javascript
@@ -1568,7 +1568,7 @@ Other Style Guides
   - [18.4](#18.4) <a name='18.4'></a> Set off operators with spaces.
 
     eslint rules: [`space-infix-ops`](http://eslint.org/docs/rules/space-infix-ops.html).
-    
+
     jscs rules: [`requireSpaceBeforeBinaryOperators`](http://jscs.info/rule/requireSpaceBeforeBinaryOperators), [`requireSpaceAfterBinaryOperators`](http://jscs.info/rule/requireSpaceAfterBinaryOperators).
 
     ```javascript
@@ -1705,7 +1705,7 @@ Other Style Guides
   - [18.8](#18.8) <a name='18.8'></a> Do not pad your blocks with blank lines.
 
     eslint rules: [`padded-blocks`](http://eslint.org/docs/rules/padded-blocks.html).
-    
+
     jscs rules: [`disallowPaddingNewlinesInBlocks`](http://jscs.info/rule/disallowPaddingNewlinesInBlocks).
 
     ```javascript
@@ -1741,7 +1741,7 @@ Other Style Guides
   - [18.9](#18.9) <a name='18.9'></a> Do not add spaces inside parentheses.
 
     eslint rules: [`space-in-parens`](http://eslint.org/docs/rules/space-in-parens.html).
-    
+
     jscs rules: [`disallowSpacesInsideParentheses`](http://jscs.info/rule/disallowSpacesInsideParentheses).
 
     ```javascript
@@ -1769,7 +1769,7 @@ Other Style Guides
   - [18.10](#18.10) <a name='18.10'></a> Do not add spaces inside brackets.
 
     eslint rules: [`array-bracket-spacing`](http://eslint.org/docs/rules/array-bracket-spacing.html).
-    
+
     jscs rules: [`disallowSpacesInsideArrayBrackets`](http://jscs.info/rule/disallowSpacesInsideArrayBrackets).
 
     ```javascript
@@ -1785,7 +1785,7 @@ Other Style Guides
   - [18.11](#18.11) <a name='18.11'></a> Add spaces inside curly braces.
 
     eslint rules: [`object-curly-spacing`](http://eslint.org/docs/rules/object-curly-spacing.html).
-    
+
     jscs rules: [`disallowSpacesInsideObjectBrackets`](http://jscs.info/rule/disallowSpacesInsideObjectBrackets).
 
     ```javascript
@@ -1801,7 +1801,7 @@ Other Style Guides
     > Why? This ensures readability and maintainability.
 
     eslint rules: [`max-len`](http://eslint.org/docs/rules/max-len.html).
-    
+
     jscs rules: [`maximumLineLength`](http://jscs.info/rule/maximumLineLength).
 
     ```javascript
@@ -1832,7 +1832,7 @@ Other Style Guides
   - [19.1](#19.1) <a name='19.1'></a> Leading commas: **Nope.**
 
     eslint rules: [`comma-style`](http://eslint.org/docs/rules/comma-style.html).
-    
+
     jscs rules: [`requireCommaBeforeLineBreak`](http://jscs.info/rule/requireCommaBeforeLineBreak).
 
     ```javascript
@@ -1870,7 +1870,7 @@ Other Style Guides
   - [19.2](#19.2) <a name='19.2'></a> Additional trailing comma: **Yup.**
 
     eslint rules: [`comma-dangle`](http://eslint.org/docs/rules/comma-dangle.html).
-    
+
     jscs rules: [`requireTrailingComma`](http://jscs.info/rule/requireTrailingComma).
 
     > Why? This leads to cleaner git diffs. Also, transpilers like Babel will remove the additional trailing comma in the transpiled code which means you don't have to worry about the [trailing comma problem](es5/README.md#commas) in legacy browsers.
@@ -1922,7 +1922,7 @@ Other Style Guides
   - [20.1](#20.1) <a name='20.1'></a> **Yup.**
 
     eslint rules: [`semi`](http://eslint.org/docs/rules/semi.html).
-    
+
     jscs rules: [`requireSemicolons`](http://jscs.info/rule/requireSemicolons).
 
     ```javascript
@@ -2048,7 +2048,7 @@ Other Style Guides
   - [22.2](#22.2) <a name='22.2'></a> Use camelCase when naming objects, functions, and instances.
 
     eslint rules: [`camelcase`](http://eslint.org/docs/rules/camelcase.html).
-    
+
     jscs rules: [`requireCamelCaseOrUpperCaseIdentifiers`](http://jscs.info/rule/requireCamelCaseOrUpperCaseIdentifiers).
 
     ```javascript
@@ -2063,9 +2063,9 @@ Other Style Guides
     ```
 
   - [22.3](#22.3) <a name='22.3'></a> Use PascalCase when naming constructors or classes.
-  
+
     eslint rules: [`new-cap`](http://eslint.org/docs/rules/new-cap.html).
-    
+
     jscs rules: [`requireCapitalizedConstructors`](http://jscs.info/rule/requireCapitalizedConstructors).
 
     ```javascript
@@ -2093,7 +2093,7 @@ Other Style Guides
   - [22.4](#22.4) <a name='22.4'></a> Use a leading underscore `_` when naming private properties.
 
     eslint rules: [`no-underscore-dangle`](http://eslint.org/docs/rules/no-underscore-dangle.html).
-    
+
     jscs rules: [`disallowDanglingUnderscores`](http://jscs.info/rule/disallowDanglingUnderscores).
 
     ```javascript
@@ -2267,7 +2267,7 @@ Other Style Guides
 ## jQuery
 
   - [25.1](#25.1) <a name='25.1'></a> Prefix jQuery object variables with a `$`.
-  
+
     jscs rules: [`requireDollarBeforejQueryAssignment`](http://jscs.info/rule/requireDollarBeforejQueryAssignment).
 
     ```javascript

From 018dd6e35940900f277e89008a5c523b7b27f3b3 Mon Sep 17 00:00:00 2001
From: Svein Halvor Halvorsen <github@svein.halvorsen.cc>
Date: Tue, 19 Jan 2016 13:07:37 +0100
Subject: [PATCH 0441/1591] arrow-parens

---
 README.md | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/README.md b/README.md
index 8b6feb7f12..c4e2a278ba 100644
--- a/README.md
+++ b/README.md
@@ -1018,7 +1018,7 @@ Other Style Guides
 
     // good
     let sum = 0;
-    numbers.forEach((num) => sum += num);
+    numbers.forEach(num => sum += num);
     sum === 15;
 
     // best (use the functional force)

From fb65b9ae04d6215db4825fc07e4f90eac07b4ed7 Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Tue, 19 Jan 2016 10:15:36 -0800
Subject: [PATCH 0442/1591] [guide] fix a few IIFE examples

---
 README.md | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/README.md b/README.md
index c4e2a278ba..b5b4494d06 100644
--- a/README.md
+++ b/README.md
@@ -1936,13 +1936,13 @@ Other Style Guides
     (() => {
       const name = 'Skywalker';
       return name;
-    })();
+    }());
 
     // good (guards against the function becoming an argument when two files with IIFEs are concatenated)
     ;(() => {
       const name = 'Skywalker';
       return name;
-    })();
+    }());
     ```
 
     [Read more](http://stackoverflow.com/questions/7365172/semicolon-before-self-invoking-function/7365214%237365214).

From 45834dde1cf87f47759fa1d404b32d174c0d9c0a Mon Sep 17 00:00:00 2001
From: Juan Lulkin <maiz@lulk.in>
Date: Wed, 20 Jan 2016 16:53:59 +0200
Subject: [PATCH 0443/1591] Favour stateless functions over classes when
 there's no state

---
 react/README.md | 29 ++++++++++++++++++++++++-----
 1 file changed, 24 insertions(+), 5 deletions(-)

diff --git a/react/README.md b/react/README.md
index eaddfceb2c..4c48209ae1 100644
--- a/react/README.md
+++ b/react/README.md
@@ -5,7 +5,7 @@
 ## Table of Contents
 
   1. [Basic Rules](#basic-rules)
-  1. [Class vs `React.createClass`](#class-vs-reactcreateclass)
+  1. [Class vs `React.createClass` vs stateless](#class-vs-reactcreateclass-vs-stateless)
   1. [Naming](#naming)
   1. [Declaration](#declaration)
   1. [Alignment](#alignment)
@@ -27,25 +27,44 @@
 
 ## Class vs `React.createClass`
 
-  - Use `class extends React.Component` unless you have a very good reason to use mixins.
+  - If you have internal state and/or refs, prefer `class extends React.Component` over `React.createClass` unless you have a very good reason to use mixins.
 
   eslint rules: [`react/prefer-es6-class`](https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/prefer-es6-class.md).
 
     ```javascript
     // bad
     const Listing = React.createClass({
-      render() {
-        return <div />;
+      // ...
+      render: function() {
+        return <div>{ this.state.hello }</div>;
       }
     });
 
     // good
     class Listing extends React.Component {
+      // ...
       render() {
-        return <div />;
+        return <div>{ this.state.hello }</div>;
       }
     }
     ```
+    
+    And if you don't have state or refs, prefer functions over classes:
+    
+    ```javascript
+
+    // bad
+    class Listing extends React.Component {
+      render() {
+        return <div>{ this.props.hello }</div>;
+      }
+    }
+    
+    // good
+    function Listing({ hello }){
+      return <div>{ hello }</div>;
+    }
+    ```
 
 ## Naming
 

From a568c7cf18f444cc4039fd6866d39b793926e54c Mon Sep 17 00:00:00 2001
From: Juan Lulkin <maiz@lulk.in>
Date: Wed, 20 Jan 2016 19:10:20 +0200
Subject: [PATCH 0444/1591] Remove space from jsx literal and add space to
 function definition

According to PR comments.
---
 react/README.md | 10 +++++-----
 1 file changed, 5 insertions(+), 5 deletions(-)

diff --git a/react/README.md b/react/README.md
index 4c48209ae1..7cc499313e 100644
--- a/react/README.md
+++ b/react/README.md
@@ -36,7 +36,7 @@
     const Listing = React.createClass({
       // ...
       render: function() {
-        return <div>{ this.state.hello }</div>;
+        return <div>{this.state.hello}</div>;
       }
     });
 
@@ -44,7 +44,7 @@
     class Listing extends React.Component {
       // ...
       render() {
-        return <div>{ this.state.hello }</div>;
+        return <div>{this.state.hello}</div>;
       }
     }
     ```
@@ -56,13 +56,13 @@
     // bad
     class Listing extends React.Component {
       render() {
-        return <div>{ this.props.hello }</div>;
+        return <div>{this.props.hello}</div>;
       }
     }
     
     // good
-    function Listing({ hello }){
-      return <div>{ hello }</div>;
+    function Listing ({ hello }) {
+      return <div>{hello}</div>;
     }
     ```
 

From 4d2578cc83affc21fbddfa3c7753b0c05e0205fb Mon Sep 17 00:00:00 2001
From: Juan Lulkin <maiz@lulk.in>
Date: Wed, 20 Jan 2016 22:36:11 +0200
Subject: [PATCH 0445/1591] Fix PR comments

- Space between function name and args;
- use `render(){}` syntax in object literal;
- Fix link to section;
---
 react/README.md | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/react/README.md b/react/README.md
index 7cc499313e..e551172952 100644
--- a/react/README.md
+++ b/react/README.md
@@ -25,7 +25,7 @@
   - Always use JSX syntax.
   - Do not use `React.createElement` unless you're initializing the app from a file that is not JSX.
 
-## Class vs `React.createClass`
+## Class vs `React.createClass` vs stateless
 
   - If you have internal state and/or refs, prefer `class extends React.Component` over `React.createClass` unless you have a very good reason to use mixins.
 
@@ -35,7 +35,7 @@
     // bad
     const Listing = React.createClass({
       // ...
-      render: function() {
+      render() {
         return <div>{this.state.hello}</div>;
       }
     });
@@ -61,7 +61,7 @@
     }
     
     // good
-    function Listing ({ hello }) {
+    function Listing({ hello }) {
       return <div>{hello}</div>;
     }
     ```

From 36765e4d88ca4d20bb614f538f324c1319bc3f56 Mon Sep 17 00:00:00 2001
From: Brett Jurgens <brett@brettjurgens.com>
Date: Wed, 20 Jan 2016 15:13:31 -0600
Subject: [PATCH 0446/1591] add avant to users

---
 README.md | 1 +
 1 file changed, 1 insertion(+)

diff --git a/README.md b/README.md
index b5b4494d06..73c1a73997 100644
--- a/README.md
+++ b/README.md
@@ -2482,6 +2482,7 @@ Other Style Guides
   - **Airbnb**: [airbnb/javascript](https://github.com/airbnb/javascript)
   - **Apartmint**: [apartmint/javascript](https://github.com/apartmint/javascript)
   - **Avalara**: [avalara/javascript](https://github.com/avalara/javascript)
+  - **Avant**: [avantcredit/javascript](https://github.com/avantcredit/javascript)
   - **Billabong**: [billabong/javascript](https://github.com/billabong/javascript)
   - **Bisk**: [bisk/javascript](https://github.com/Bisk/javascript/)
   - **Blendle**: [blendle/javascript](https://github.com/blendle/javascript)

From fb3c4cac200861f2e6dd77e8bf7f29ce9be02d5e Mon Sep 17 00:00:00 2001
From: Rick Yeh <rickyeh@users.noreply.github.com>
Date: Thu, 21 Jan 2016 22:54:27 -0800
Subject: [PATCH 0447/1591] Fixed minor capitalization change in Hoisting

Not sure if it's an actual fix, but just noticed this was the only comment that had capitalization that wasn't a proper noun
---
 README.md | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/README.md b/README.md
index 73c1a73997..5fefffe5b7 100644
--- a/README.md
+++ b/README.md
@@ -1196,7 +1196,7 @@ Other Style Guides
       var declaredButNotAssigned = true;
     }
 
-    // The interpreter is hoisting the variable
+    // the interpreter is hoisting the variable
     // declaration to the top of the scope,
     // which means our example could be rewritten as:
     function example() {

From 2c9833fbc2fdc455bcdd4781de389c03f635d51e Mon Sep 17 00:00:00 2001
From: David Sorrentino <david@weboxstudio.com>
Date: Fri, 22 Jan 2016 11:45:56 +0100
Subject: [PATCH 0448/1591] add WeBox Studio to the organizations list

---
 README.md | 1 +
 1 file changed, 1 insertion(+)

diff --git a/README.md b/README.md
index 5fefffe5b7..1d5e4982ea 100644
--- a/README.md
+++ b/README.md
@@ -2535,6 +2535,7 @@ Other Style Guides
   - **TheLadders**: [TheLadders/javascript](https://github.com/TheLadders/javascript)
   - **T4R Technology**: [T4R-Technology/javascript](https://github.com/T4R-Technology/javascript)
   - **VoxFeed**: [VoxFeed/javascript-style-guide](https://github.com/VoxFeed/javascript-style-guide)
+  - **WeBox Studio**: [weboxstudio/javascript](https://github.com/weboxstudio/javascript)
   - **Weggo**: [Weggo/javascript](https://github.com/Weggo/javascript)
   - **Zillow**: [zillow/javascript](https://github.com/zillow/javascript)
   - **ZocDoc**: [ZocDoc/javascript](https://github.com/ZocDoc/javascript)

From c25dbac620b258c4421251bc403fffa1051de61e Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Fri, 22 Jan 2016 16:27:43 -0800
Subject: [PATCH 0449/1591] v4.0.0

---
 packages/eslint-config-airbnb/CHANGELOG.md | 8 ++++++++
 packages/eslint-config-airbnb/package.json | 2 +-
 2 files changed, 9 insertions(+), 1 deletion(-)

diff --git a/packages/eslint-config-airbnb/CHANGELOG.md b/packages/eslint-config-airbnb/CHANGELOG.md
index 0cbe0e1357..e9d0220666 100644
--- a/packages/eslint-config-airbnb/CHANGELOG.md
+++ b/packages/eslint-config-airbnb/CHANGELOG.md
@@ -1,3 +1,11 @@
+4.0.0 / 2016-01-22
+==================
+ - [breaking] require outer IIFE wrapping; flesh out guide section
+ - [minor] Add missing `arrow-body-style`, `prefer-template` rules (#678)
+ - [minor] Add `prefer-arrow-callback` to ES6 rules (to match the guide) (#677)
+ - [Tests] run `npm run lint` as part of tests; fix errors
+ - [Tests] use `parallelshell` to parallelize npm run-scripts
+
 3.1.0 / 2016-01-07
 ==================
  - [minor] Allow multiple stateless components in a single file
diff --git a/packages/eslint-config-airbnb/package.json b/packages/eslint-config-airbnb/package.json
index 56b15f54f5..63439f6b62 100644
--- a/packages/eslint-config-airbnb/package.json
+++ b/packages/eslint-config-airbnb/package.json
@@ -1,6 +1,6 @@
 {
   "name": "eslint-config-airbnb",
-  "version": "3.1.0",
+  "version": "4.0.0",
   "description": "Airbnb's ESLint config, following our styleguide",
   "main": "index.js",
   "scripts": {

From 02e1b4e3959f0580ef5d1921169f3d2fbfab3c41 Mon Sep 17 00:00:00 2001
From: Daniel Russell <contactdanielrussell@gmail.com>
Date: Sun, 24 Jan 2016 20:52:24 -0800
Subject: [PATCH 0450/1591] Fixed capitalization

Bitshift changed to bitshift
---
 README.md | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/README.md b/README.md
index 1d5e4982ea..e26f871164 100644
--- a/README.md
+++ b/README.md
@@ -2003,7 +2003,7 @@ Other Style Guides
     const val = inputValue >> 0;
     ```
 
-  - [21.5](#21.5) <a name='21.5'></a> **Note:** Be careful when using bitshift operations. Numbers are represented as [64-bit values](http://es5.github.io/#x4.3.19), but Bitshift operations always return a 32-bit integer ([source](http://es5.github.io/#x11.7)). Bitshift can lead to unexpected behavior for integer values larger than 32 bits. [Discussion](https://github.com/airbnb/javascript/issues/109). Largest signed 32-bit Int is 2,147,483,647:
+  - [21.5](#21.5) <a name='21.5'></a> **Note:** Be careful when using bitshift operations. Numbers are represented as [64-bit values](http://es5.github.io/#x4.3.19), but bitshift operations always return a 32-bit integer ([source](http://es5.github.io/#x11.7)). Bitshift can lead to unexpected behavior for integer values larger than 32 bits. [Discussion](https://github.com/airbnb/javascript/issues/109). Largest signed 32-bit Int is 2,147,483,647:
 
     ```javascript
     2147483647 >> 0 //=> 2147483647

From 2c06d87d86d7a52d8807c9fc045f9966ef433cc4 Mon Sep 17 00:00:00 2001
From: Harrison Shoff <hi@hshoff.com>
Date: Mon, 25 Jan 2016 21:46:23 -0800
Subject: [PATCH 0451/1591] [rule links] reduce visual clutter

---
 README.md | 238 +++++++++++-------------------------------------------
 1 file changed, 46 insertions(+), 192 deletions(-)

diff --git a/README.md b/README.md
index e26f871164..bb371499ad 100644
--- a/README.md
+++ b/README.md
@@ -87,12 +87,10 @@ Other Style Guides
 
 ## References
 
-  - [2.1](#2.1) <a name='2.1'></a> Use `const` for all of your references; avoid using `var`.
+  - [2.1](#2.1) <a name='2.1'></a> Use `const` for all of your references; avoid using `var`. [`prefer-const`](http://eslint.org/docs/rules/prefer-const.html), [`no-const-assign`](http://eslint.org/docs/rules/no-const-assign.html)
 
     > Why? This ensures that you can't reassign your references, which can lead to bugs and difficult to comprehend code.
 
-    eslint rules: [`prefer-const`](http://eslint.org/docs/rules/prefer-const.html), [`no-const-assign`](http://eslint.org/docs/rules/no-const-assign.html).
-
     ```javascript
     // bad
     var a = 1;
@@ -103,14 +101,10 @@ Other Style Guides
     const b = 2;
     ```
 
-  - [2.2](#2.2) <a name='2.2'></a> If you must reassign references, use `let` instead of `var`.
+  - [2.2](#2.2) <a name='2.2'></a> If you must reassign references, use `let` instead of `var`. [`no-var`](http://eslint.org/docs/rules/no-var.html), [`disallowVar`](http://jscs.info/rule/disallowVar)
 
     > Why? `let` is block-scoped rather than function-scoped like `var`.
 
-    eslint rules: [`no-var`](http://eslint.org/docs/rules/no-var.html).
-
-    jscs rules: [`disallowVar`](http://jscs.info/rule/disallowVar).
-
     ```javascript
     // bad
     var count = 1;
@@ -141,9 +135,7 @@ Other Style Guides
 
 ## Objects
 
-  - [3.1](#3.1) <a name='3.1'></a> Use the literal syntax for object creation.
-
-    eslint rules: [`no-new-object`](http://eslint.org/docs/rules/no-new-object.html).
+  - [3.1](#3.1) <a name='3.1'></a> Use the literal syntax for object creation. [`no-new-object`](http://eslint.org/docs/rules/no-new-object.html)
 
     ```javascript
     // bad
@@ -153,9 +145,7 @@ Other Style Guides
     const item = {};
     ```
 
-  - [3.2](#3.2) <a name='3.2'></a> If your code will be executed in browsers in script context, don't use [reserved words](http://es5.github.io/#x7.6.1) as keys. It won't work in IE8. [More info](https://github.com/airbnb/javascript/issues/61). It’s OK to use them in ES6 modules and server-side code.
-
-   jscs rules: [`disallowIdentiferNames`](http://jscs.info/rule/disallowIdentifierNames).
+  - [3.2](#3.2) <a name='3.2'></a> If your code will be executed in browsers in script context, don't use [reserved words](http://es5.github.io/#x7.6.1) as keys. It won't work in IE8. [More info](https://github.com/airbnb/javascript/issues/61). It’s OK to use them in ES6 modules and server-side code. [`disallowIdentiferNames`](http://jscs.info/rule/disallowIdentifierNames)
 
     ```javascript
     // bad
@@ -171,9 +161,7 @@ Other Style Guides
     };
     ```
 
-  - [3.3](#3.3) <a name='3.3'></a> Use readable synonyms in place of reserved words.
-
-   jscs rules: [`disallowIdentiferNames`](http://jscs.info/rule/disallowIdentifierNames).
+  - [3.3](#3.3) <a name='3.3'></a> Use readable synonyms in place of reserved words. [`disallowIdentiferNames`](http://jscs.info/rule/disallowIdentifierNames)
 
     ```javascript
     // bad
@@ -219,11 +207,7 @@ Other Style Guides
     ```
 
   <a name="es6-object-shorthand"></a>
-  - [3.5](#3.5) <a name='3.5'></a> Use object method shorthand.
-
-    eslint rules: [`object-shorthand`](http://eslint.org/docs/rules/object-shorthand.html).
-
-    jscs rules: [`requireEnhancedObjectLiterals`](http://jscs.info/rule/requireEnhancedObjectLiterals).
+  - [3.5](#3.5) <a name='3.5'></a> Use object method shorthand. [`object-shorthand`](http://eslint.org/docs/rules/object-shorthand.html), [`requireEnhancedObjectLiterals`](http://jscs.info/rule/requireEnhancedObjectLiterals)
 
     ```javascript
     // bad
@@ -246,14 +230,10 @@ Other Style Guides
     ```
 
   <a name="es6-object-concise"></a>
-  - [3.6](#3.6) <a name='3.6'></a> Use property value shorthand.
+  - [3.6](#3.6) <a name='3.6'></a> Use property value shorthand. [`object-shorthand`](http://eslint.org/docs/rules/object-shorthand.html), [`requireEnhancedObjectLiterals`](http://jscs.info/rule/requireEnhancedObjectLiterals)
 
     > Why? It is shorter to write and descriptive.
 
-    eslint rules: [`object-shorthand`](http://eslint.org/docs/rules/object-shorthand.html).
-
-    jscs rules: [`requireEnhancedObjectLiterals`](http://jscs.info/rule/requireEnhancedObjectLiterals).
-
     ```javascript
     const lukeSkywalker = 'Luke Skywalker';
 
@@ -297,14 +277,10 @@ Other Style Guides
     };
     ```
 
-  - [3.8](#3.8) <a name="3.8"></a> Only quote properties that are invalid identifiers.
+  - [3.8](#3.8) <a name="3.8"></a> Only quote properties that are invalid identifiers. [`quote-props`](http://eslint.org/docs/rules/quote-props.html), [`disallowQuotedKeysInObjects`](http://jscs.info/rule/disallowQuotedKeysInObjects)
 
   > Why? In general we consider it subjectively easier to read. It improves syntax highlighting, and is also more easily optimized by many JS engines.
 
-  eslint rules: [`quote-props`](http://eslint.org/docs/rules/quote-props.html).
-
-  jscs rules: [`disallowQuotedKeysInObjects`](http://jscs.info/rule/disallowQuotedKeysInObjects).
-
   ```javascript
   // bad
   const bad = {
@@ -325,9 +301,7 @@ Other Style Guides
 
 ## Arrays
 
-  - [4.1](#4.1) <a name='4.1'></a> Use the literal syntax for array creation.
-
-    eslint rules: [`no-array-constructor`](http://eslint.org/docs/rules/no-array-constructor.html).
+  - [4.1](#4.1) <a name='4.1'></a> Use the literal syntax for array creation. [`no-array-constructor`](http://eslint.org/docs/rules/no-array-constructor.html)
 
     ```javascript
     // bad
@@ -376,12 +350,10 @@ Other Style Guides
 
 ## Destructuring
 
-  - [5.1](#5.1) <a name='5.1'></a> Use object destructuring when accessing and using multiple properties of an object.
+  - [5.1](#5.1) <a name='5.1'></a> Use object destructuring when accessing and using multiple properties of an object. [`requireObjectDestructuring`](http://jscs.info/rule/requireObjectDestructuring)
 
     > Why? Destructuring saves you from creating temporary references for those properties.
 
-    jscs rules: [`requireObjectDestructuring`](http://jscs.info/rule/requireObjectDestructuring).
-
     ```javascript
     // bad
     function getFullName(user) {
@@ -403,9 +375,7 @@ Other Style Guides
     }
     ```
 
-  - [5.2](#5.2) <a name='5.2'></a> Use array destructuring.
-
-   jscs rules: [`requireArrayDestructuring`](http://jscs.info/rule/requireArrayDestructuring).
+  - [5.2](#5.2) <a name='5.2'></a> Use array destructuring. [`requireArrayDestructuring`](http://jscs.info/rule/requireArrayDestructuring)
 
     ```javascript
     const arr = [1, 2, 3, 4];
@@ -447,11 +417,7 @@ Other Style Guides
 
 ## Strings
 
-  - [6.1](#6.1) <a name='6.1'></a> Use single quotes `''` for strings.
-
-    eslint rules: [`quotes`](http://eslint.org/docs/rules/quotes.html).
-
-    jscs rules: [`validateQuoteMarks`](http://jscs.info/rule/validateQuoteMarks).
+  - [6.1](#6.1) <a name='6.1'></a> Use single quotes `''` for strings. [`quotes`](http://eslint.org/docs/rules/quotes.html), [`validateQuoteMarks`](http://jscs.info/rule/validateQuoteMarks)
 
     ```javascript
     // bad
@@ -481,14 +447,10 @@ Other Style Guides
     ```
 
   <a name="es6-template-literals"></a>
-  - [6.4](#6.4) <a name='6.4'></a> When programmatically building up strings, use template strings instead of concatenation.
+  - [6.4](#6.4) <a name='6.4'></a> When programmatically building up strings, use template strings instead of concatenation. [`prefer-template`](http://eslint.org/docs/rules/prefer-template.html), [`requireTemplateStrings`](http://jscs.info/rule/requireTemplateStrings)
 
     > Why? Template strings give you a readable, concise syntax with proper newlines and string interpolation features.
 
-    eslint rules: [`prefer-template`](http://eslint.org/docs/rules/prefer-template.html).
-
-    jscs rules: [`requireTemplateStrings`](http://jscs.info/rule/requireTemplateStrings).
-
     ```javascript
     // bad
     function sayHi(name) {
@@ -512,12 +474,10 @@ Other Style Guides
 
 ## Functions
 
-  - [7.1](#7.1) <a name='7.1'></a> Use function declarations instead of function expressions.
+  - [7.1](#7.1) <a name='7.1'></a> Use function declarations instead of function expressions. [`requireFunctionDeclarations`](http://jscs.info/rule/requireFunctionDeclarations)
 
     > Why? Function declarations are named, so they're easier to identify in call stacks. Also, the whole body of a function declaration is hoisted, whereas only the reference of a function expression is hoisted. This rule makes it possible to always use [Arrow Functions](#arrow-functions) in place of function expressions.
 
-    jscs rules: [`requireFunctionDeclarations`](http://jscs.info/rule/requireFunctionDeclarations).
-
     ```javascript
     // bad
     const foo = function () {
@@ -528,14 +488,10 @@ Other Style Guides
     }
     ```
 
-  - [7.2](#7.2) <a name='7.2'></a> Immediately invoked function expressions:
+  - [7.2](#7.2) <a name='7.2'></a> Immediately invoked function expressions: [`wrap-iife`](http://eslint.org/docs/rules/wrap-iife.html), [`requireParenthesesAroundIIFE`](http://jscs.info/rule/requireParenthesesAroundIIFE)
 
     > Why? An immediately invoked function expression is a single unit - wrapping both it, and its invocation parens, in parens, cleanly expresses this. Note that in a world with modules everywhere, you almost never need an IIFE.
 
-    eslint rules: [`wrap-iife`](http://eslint.org/docs/rules/wrap-iife.html).
-
-    jscs rules: [`requireParenthesesAroundIIFE`](http://jscs.info/rule/requireParenthesesAroundIIFE).
-
     ```javascript
     // immediately-invoked function expression (IIFE)
     (function () {
@@ -543,9 +499,7 @@ Other Style Guides
     }());
     ```
 
-  - [7.3](#7.3) <a name='7.3'></a> Never declare a function in a non-function block (if, while, etc). Assign the function to a variable instead. Browsers will allow you to do it, but they all interpret it differently, which is bad news bears.
-
-   eslint rules: [`no-loop-func`](http://eslint.org/docs/rules/no-loop-func.html).
+  - [7.3](#7.3) <a name='7.3'></a> Never declare a function in a non-function block (if, while, etc). Assign the function to a variable instead. Browsers will allow you to do it, but they all interpret it differently, which is bad news bears. [`no-loop-func`](http://eslint.org/docs/rules/no-loop-func.html)
 
   - [7.4](#7.4) <a name='7.4'></a> **Note:** ECMA-262 defines a `block` as a list of statements. A function declaration is not a statement. [Read ECMA-262's note on this issue](http://www.ecma-international.org/publications/files/ECMA-ST/Ecma-262.pdf#page=97).
 
@@ -682,12 +636,10 @@ Other Style Guides
     const y = function a() {};
     ```
 
-  - [7.12](#7.12) <a name="7.12"></a> Never mutate parameters.
+  - [7.12](#7.12) <a name="7.12"></a> Never mutate parameters. [`no-param-reassign`](http://eslint.org/docs/rules/no-param-reassign.html)
 
     > Why? Manipulating objects passed in as parameters can cause unwanted variable side effects in the original caller.
 
-    eslint rules: [`no-param-reassign`](http://eslint.org/docs/rules/no-param-reassign.html).
-
     ```javascript
     // bad
     function f1(obj) {
@@ -700,12 +652,10 @@ Other Style Guides
     };
     ```
 
-  - [7.13](#7.13) <a name="7.13"></a> Never reassign parameters.
+  - [7.13](#7.13) <a name="7.13"></a> Never reassign parameters. [`no-param-reassign`](http://eslint.org/docs/rules/no-param-reassign.html)
 
     > Why? Reassigning parameters can lead to unexpected behavior, especially when accessing the `arguments` object. It can also cause optimization issues, especially in V8.
 
-    eslint rules: [`no-param-reassign`](http://eslint.org/docs/rules/no-param-reassign.html).
-
     ```javascript
     // bad
     function f1(a) {
@@ -729,15 +679,11 @@ Other Style Guides
 
 ## Arrow Functions
 
-  - [8.1](#8.1) <a name='8.1'></a> When you must use function expressions (as when passing an anonymous function), use arrow function notation.
+  - [8.1](#8.1) <a name='8.1'></a> When you must use function expressions (as when passing an anonymous function), use arrow function notation. [`prefer-arrow-callback`](http://eslint.org/docs/rules/prefer-arrow-callback.html), [`arrow-spacing`](http://eslint.org/docs/rules/arrow-spacing.html), [`requireArrowFunctions`](http://jscs.info/rule/requireArrowFunctions)
 
     > Why? It creates a version of the function that executes in the context of `this`, which is usually what you want, and is a more concise syntax.
 
-    > Why not? If you have a fairly complicated function, you might move that logic out into its own function declaration.
-
-    eslint rules: [`prefer-arrow-callback`](http://eslint.org/docs/rules/prefer-arrow-callback.html), [`arrow-spacing`](http://eslint.org/docs/rules/arrow-spacing.html).
-
-    jscs rules: [`requireArrowFunctions`](http://jscs.info/rule/requireArrowFunctions).
+    > Why not? If you have a fairly complicated function, you might move that logic out into its own function declaration..
 
     ```javascript
     // bad
@@ -753,16 +699,12 @@ Other Style Guides
     });
     ```
 
-  - [8.2](#8.2) <a name='8.2'></a> If the function body consists of a single expression, omit the braces and use the implicit return. Otherwise, keep the braces and use a `return` statement.
+  - [8.2](#8.2) <a name='8.2'></a> If the function body consists of a single expression, omit the braces and use the implicit return. Otherwise, keep the braces and use a `return` statement. [`arrow-parens`](http://eslint.org/docs/rules/arrow-parens.html), [`arrow-body-style`](http://eslint.org/docs/rules/arrow-body-style.html), [`disallowParenthesesAroundArrowParam`](http://jscs.info/rule/disallowParenthesesAroundArrowParam), [`requireShorthandArrowFunctions`](http://jscs.info/rule/requireShorthandArrowFunctions)
 
     > Why? Syntactic sugar. It reads well when multiple functions are chained together.
 
     > Why not? If you plan on returning an object.
 
-    eslint rules: [`arrow-parens`](http://eslint.org/docs/rules/arrow-parens.html), [`arrow-body-style`](http://eslint.org/docs/rules/arrow-body-style.html).
-
-    jscs rules: [`disallowParenthesesAroundArrowParam`](http://jscs.info/rule/disallowParenthesesAroundArrowParam), [`requireShorthandArrowFunctions`](http://jscs.info/rule/requireShorthandArrowFunctions).
-
     ```javascript
     // good
     [1, 2, 3].map(number => `A string containing the ${number}.`);
@@ -799,14 +741,10 @@ Other Style Guides
     ```
 
 
-  - [8.4](#8.4) <a name='8.4'></a> If your function takes a single argument and doesn’t use braces, omit the parentheses. Otherwise, always include parentheses around arguments.
+  - [8.4](#8.4) <a name='8.4'></a> If your function takes a single argument and doesn’t use braces, omit the parentheses. Otherwise, always include parentheses around arguments. [`arrow-parens`](http://eslint.org/docs/rules/arrow-parens.html), [`disallowParenthesesAroundArrowParam`](http://jscs.info/rule/disallowParenthesesAroundArrowParam)
 
     > Why? Less visual clutter.
 
-    eslint rules: [`arrow-parens`](http://eslint.org/docs/rules/arrow-parens.html).
-
-    jscs rules: [`disallowParenthesesAroundArrowParam`](http://jscs.info/rule/disallowParenthesesAroundArrowParam).
-
     ```js
     // bad
     [1, 2, 3].map((x) => x * x);
@@ -999,12 +937,10 @@ Other Style Guides
 
 ## Iterators and Generators
 
-  - [11.1](#11.1) <a name='11.1'></a> Don't use iterators. Prefer JavaScript's higher-order functions like `map()` and `reduce()` instead of loops like `for-of`.
+  - [11.1](#11.1) <a name='11.1'></a> Don't use iterators. Prefer JavaScript's higher-order functions like `map()` and `reduce()` instead of loops like `for-of`. [`no-iterator`](http://eslint.org/docs/rules/no-iterator.html)
 
     > Why? This enforces our immutable rule. Dealing with pure functions that return values is easier to reason about than side-effects.
 
-    eslint rules: [`no-iterator`](http://eslint.org/docs/rules/no-iterator.html).
-
     ```javascript
     const numbers = [1, 2, 3, 4, 5];
 
@@ -1035,11 +971,7 @@ Other Style Guides
 
 ## Properties
 
-  - [12.1](#12.1) <a name='12.1'></a> Use dot notation when accessing properties.
-
-    eslint rules: [`dot-notation`](http://eslint.org/docs/rules/dot-notation.html).
-
-    jscs rules: [`requireDotNotation`](http://jscs.info/rule/requireDotNotation).
+  - [12.1](#12.1) <a name='12.1'></a> Use dot notation when accessing properties. [`dot-notation`](http://eslint.org/docs/rules/dot-notation.html), [`requireDotNotation`](http://jscs.info/rule/requireDotNotation)
 
     ```javascript
     const luke = {
@@ -1084,14 +1016,10 @@ Other Style Guides
     const superPower = new SuperPower();
     ```
 
-  - [13.2](#13.2) <a name='13.2'></a> Use one `const` declaration per variable.
+  - [13.2](#13.2) <a name='13.2'></a> Use one `const` declaration per variable. [`one-var`](http://eslint.org/docs/rules/one-var.html), [`disallowMultipleVarDecl`](http://jscs.info/rule/disallowMultipleVarDecl)
 
     > Why? It's easier to add new variable declarations this way, and you never have to worry about swapping out a `;` for a `,` or introducing punctuation-only diffs.
 
-    eslint rules: [`one-var`](http://eslint.org/docs/rules/one-var.html).
-
-    jscs rules: [`disallowMultipleVarDecl`](http://jscs.info/rule/disallowMultipleVarDecl).
-
     ```javascript
     // bad
     const items = getItems(),
@@ -1274,12 +1202,10 @@ Other Style Guides
 
 ## Comparison Operators & Equality
 
-  - [15.1](#15.1) <a name='15.1'></a> Use `===` and `!==` over `==` and `!=`.
+  - [15.1](#15.1) <a name='15.1'></a> Use `===` and `!==` over `==` and `!=`. [`eqeqeq`](http://eslint.org/docs/rules/eqeqeq.html)
 
   - [15.2](#15.2) <a name='15.2'></a> Conditional statements such as the `if` statement evaluate their expression using coercion with the `ToBoolean` abstract method and always follow these simple rules:
 
-    eslint rules: [`eqeqeq`](http://eslint.org/docs/rules/eqeqeq.html).
-
     + **Objects** evaluate to **true**
     + **Undefined** evaluates to **false**
     + **Null** evaluates to **false**
@@ -1350,11 +1276,7 @@ Other Style Guides
     ```
 
   - [16.2](#16.2) <a name='16.2'></a> If you're using multi-line blocks with `if` and `else`, put `else` on the same line as your
-    `if` block's closing brace.
-
-    eslint rules: [`brace-style`](http://eslint.org/docs/rules/brace-style.html).
-
-    jscs rules: [`disallowNewlineBeforeBlockStatements`](http://jscs.info/rule/disallowNewlineBeforeBlockStatements).
+    `if` block's closing brace. [`brace-style`](http://eslint.org/docs/rules/brace-style.html), [`disallowNewlineBeforeBlockStatements`](http://jscs.info/rule/disallowNewlineBeforeBlockStatements)
 
     ```javascript
     // bad
@@ -1484,11 +1406,7 @@ Other Style Guides
 
 ## Whitespace
 
-  - [18.1](#18.1) <a name='18.1'></a> Use soft tabs set to 2 spaces.
-
-    eslint rules: [`indent`](http://eslint.org/docs/rules/indent.html).
-
-    jscs rules: [`validateIndentation`](http://jscs.info/rule/validateIndentation).
+  - [18.1](#18.1) <a name='18.1'></a> Use soft tabs set to 2 spaces. [`indent`](http://eslint.org/docs/rules/indent.html), [`validateIndentation`](http://jscs.info/rule/validateIndentation)
 
     ```javascript
     // bad
@@ -1507,11 +1425,7 @@ Other Style Guides
     }
     ```
 
-  - [18.2](#18.2) <a name='18.2'></a> Place 1 space before the leading brace.
-
-    eslint rules: [`space-before-blocks`](http://eslint.org/docs/rules/space-before-blocks.html).
-
-    jscs rules: [`requireSpaceBeforeBlockStatements`](http://jscs.info/rule/requireSpaceBeforeBlockStatements).
+  - [18.2](#18.2) <a name='18.2'></a> Place 1 space before the leading brace. [`space-before-blocks`](http://eslint.org/docs/rules/space-before-blocks.html), [`requireSpaceBeforeBlockStatements`](http://jscs.info/rule/requireSpaceBeforeBlockStatements).
 
     ```javascript
     // bad
@@ -1537,11 +1451,7 @@ Other Style Guides
     });
     ```
 
-  - [18.3](#18.3) <a name='18.3'></a> Place 1 space before the opening parenthesis in control statements (`if`, `while` etc.). Place no space between the argument list and the function name in function calls and declarations.
-
-    eslint rules: [`space-after-keywords`](http://eslint.org/docs/rules/space-after-keywords.html), [`space-before-keywords`](http://eslint.org/docs/rules/space-before-keywords.html).
-
-    jscs rules: [`requireSpaceAfterKeywords`](http://jscs.info/rule/requireSpaceAfterKeywords).
+  - [18.3](#18.3) <a name='18.3'></a> Place 1 space before the opening parenthesis in control statements (`if`, `while` etc.). Place no space between the argument list and the function name in function calls and declarations. [`space-after-keywords`](http://eslint.org/docs/rules/space-after-keywords.html), [`space-before-keywords`](http://eslint.org/docs/rules/space-before-keywords.html), [`requireSpaceAfterKeywords`](http://jscs.info/rule/requireSpaceAfterKeywords)
 
     ```javascript
     // bad
@@ -1565,11 +1475,7 @@ Other Style Guides
     }
     ```
 
-  - [18.4](#18.4) <a name='18.4'></a> Set off operators with spaces.
-
-    eslint rules: [`space-infix-ops`](http://eslint.org/docs/rules/space-infix-ops.html).
-
-    jscs rules: [`requireSpaceBeforeBinaryOperators`](http://jscs.info/rule/requireSpaceBeforeBinaryOperators), [`requireSpaceAfterBinaryOperators`](http://jscs.info/rule/requireSpaceAfterBinaryOperators).
+  - [18.4](#18.4) <a name='18.4'></a> Set off operators with spaces. [`space-infix-ops`](http://eslint.org/docs/rules/space-infix-ops.html), [`requireSpaceBeforeBinaryOperators`](http://jscs.info/rule/requireSpaceBeforeBinaryOperators), [`requireSpaceAfterBinaryOperators`](http://jscs.info/rule/requireSpaceAfterBinaryOperators)
 
     ```javascript
     // bad
@@ -1643,9 +1549,7 @@ Other Style Guides
         .call(tron.led);
     ```
 
-  - [18.7](#18.7) <a name='18.7'></a> Leave a blank line after blocks and before the next statement.
-
-    jscs rules: [`requirePaddingNewLinesAfterBlocks`](http://jscs.info/rule/requirePaddingNewLinesAfterBlocks).
+  - [18.7](#18.7) <a name='18.7'></a> Leave a blank line after blocks and before the next statement. [`requirePaddingNewLinesAfterBlocks`](http://jscs.info/rule/requirePaddingNewLinesAfterBlocks)
 
     ```javascript
     // bad
@@ -1702,11 +1606,7 @@ Other Style Guides
     return arr;
     ```
 
-  - [18.8](#18.8) <a name='18.8'></a> Do not pad your blocks with blank lines.
-
-    eslint rules: [`padded-blocks`](http://eslint.org/docs/rules/padded-blocks.html).
-
-    jscs rules: [`disallowPaddingNewlinesInBlocks`](http://jscs.info/rule/disallowPaddingNewlinesInBlocks).
+  - [18.8](#18.8) <a name='18.8'></a> Do not pad your blocks with blank lines. [`padded-blocks`](http://eslint.org/docs/rules/padded-blocks.html), [`disallowPaddingNewlinesInBlocks`](http://jscs.info/rule/disallowPaddingNewlinesInBlocks)
 
     ```javascript
     // bad
@@ -1738,11 +1638,7 @@ Other Style Guides
     }
     ```
 
-  - [18.9](#18.9) <a name='18.9'></a> Do not add spaces inside parentheses.
-
-    eslint rules: [`space-in-parens`](http://eslint.org/docs/rules/space-in-parens.html).
-
-    jscs rules: [`disallowSpacesInsideParentheses`](http://jscs.info/rule/disallowSpacesInsideParentheses).
+  - [18.9](#18.9) <a name='18.9'></a> Do not add spaces inside parentheses. [`space-in-parens`](http://eslint.org/docs/rules/space-in-parens.html), [`disallowSpacesInsideParentheses`](http://jscs.info/rule/disallowSpacesInsideParentheses)
 
     ```javascript
     // bad
@@ -1766,11 +1662,7 @@ Other Style Guides
     }
     ```
 
-  - [18.10](#18.10) <a name='18.10'></a> Do not add spaces inside brackets.
-
-    eslint rules: [`array-bracket-spacing`](http://eslint.org/docs/rules/array-bracket-spacing.html).
-
-    jscs rules: [`disallowSpacesInsideArrayBrackets`](http://jscs.info/rule/disallowSpacesInsideArrayBrackets).
+  - [18.10](#18.10) <a name='18.10'></a> Do not add spaces inside brackets. [`array-bracket-spacing`](http://eslint.org/docs/rules/array-bracket-spacing.html), [`disallowSpacesInsideArrayBrackets`](http://jscs.info/rule/disallowSpacesInsideArrayBrackets).
 
     ```javascript
     // bad
@@ -1782,11 +1674,7 @@ Other Style Guides
     console.log(foo[0]);
     ```
 
-  - [18.11](#18.11) <a name='18.11'></a> Add spaces inside curly braces.
-
-    eslint rules: [`object-curly-spacing`](http://eslint.org/docs/rules/object-curly-spacing.html).
-
-    jscs rules: [`disallowSpacesInsideObjectBrackets`](http://jscs.info/rule/disallowSpacesInsideObjectBrackets).
+  - [18.11](#18.11) <a name='18.11'></a> Add spaces inside curly braces. [`object-curly-spacing`](http://eslint.org/docs/rules/object-curly-spacing.html), [`disallowSpacesInsideObjectBrackets`](http://jscs.info/rule/disallowSpacesInsideObjectBrackets)
 
     ```javascript
     // bad
@@ -1796,14 +1684,10 @@ Other Style Guides
     const foo = { clark: 'kent' };
     ```
 
-  - [18.12](#18.12) <a name='18.12'></a> Avoid having lines of code that are longer than 100 characters (including whitespace).
+  - [18.12](#18.12) <a name='18.12'></a> Avoid having lines of code that are longer than 100 characters (including whitespace). [`max-len`](http://eslint.org/docs/rules/max-len.html), [`maximumLineLength`](http://jscs.info/rule/maximumLineLength)
 
     > Why? This ensures readability and maintainability.
 
-    eslint rules: [`max-len`](http://eslint.org/docs/rules/max-len.html).
-
-    jscs rules: [`maximumLineLength`](http://jscs.info/rule/maximumLineLength).
-
     ```javascript
     // bad
     const foo = 'Whatever national crop flips the window. The cartoon reverts within the screw. Whatever wizard constrains a helpful ally. The counterpart ascends!';
@@ -1829,11 +1713,7 @@ Other Style Guides
 
 ## Commas
 
-  - [19.1](#19.1) <a name='19.1'></a> Leading commas: **Nope.**
-
-    eslint rules: [`comma-style`](http://eslint.org/docs/rules/comma-style.html).
-
-    jscs rules: [`requireCommaBeforeLineBreak`](http://jscs.info/rule/requireCommaBeforeLineBreak).
+  - [19.1](#19.1) <a name='19.1'></a> Leading commas: **Nope.** [`comma-style`](http://eslint.org/docs/rules/comma-style.html), [`requireCommaBeforeLineBreak`](http://jscs.info/rule/requireCommaBeforeLineBreak)
 
     ```javascript
     // bad
@@ -1867,11 +1747,7 @@ Other Style Guides
     };
     ```
 
-  - [19.2](#19.2) <a name='19.2'></a> Additional trailing comma: **Yup.**
-
-    eslint rules: [`comma-dangle`](http://eslint.org/docs/rules/comma-dangle.html).
-
-    jscs rules: [`requireTrailingComma`](http://jscs.info/rule/requireTrailingComma).
+  - [19.2](#19.2) <a name='19.2'></a> Additional trailing comma: **Yup.** [`comma-dangle`](http://eslint.org/docs/rules/comma-dangle.html), [`requireTrailingComma`](http://jscs.info/rule/requireTrailingComma)
 
     > Why? This leads to cleaner git diffs. Also, transpilers like Babel will remove the additional trailing comma in the transpiled code which means you don't have to worry about the [trailing comma problem](es5/README.md#commas) in legacy browsers.
 
@@ -1919,11 +1795,7 @@ Other Style Guides
 
 ## Semicolons
 
-  - [20.1](#20.1) <a name='20.1'></a> **Yup.**
-
-    eslint rules: [`semi`](http://eslint.org/docs/rules/semi.html).
-
-    jscs rules: [`requireSemicolons`](http://jscs.info/rule/requireSemicolons).
+  - [20.1](#20.1) <a name='20.1'></a> **Yup.** [`semi`](http://eslint.org/docs/rules/semi.html), [`requireSemicolons`](http://jscs.info/rule/requireSemicolons)
 
     ```javascript
     // bad
@@ -1965,9 +1837,7 @@ Other Style Guides
     const totalScore = String(this.reviewScore);
     ```
 
-  - [21.3](#21.3) <a name='21.3'></a> Numbers: Use `Number` for type casting and `parseInt` always with a radix for parsing strings.
-
-    eslint rules: [`radix`](http://eslint.org/docs/rules/radix).
+  - [21.3](#21.3) <a name='21.3'></a> Numbers: Use `Number` for type casting and `parseInt` always with a radix for parsing strings. [`radix`](http://eslint.org/docs/rules/radix)
 
     ```javascript
     const inputValue = '4';
@@ -2045,11 +1915,7 @@ Other Style Guides
     }
     ```
 
-  - [22.2](#22.2) <a name='22.2'></a> Use camelCase when naming objects, functions, and instances.
-
-    eslint rules: [`camelcase`](http://eslint.org/docs/rules/camelcase.html).
-
-    jscs rules: [`requireCamelCaseOrUpperCaseIdentifiers`](http://jscs.info/rule/requireCamelCaseOrUpperCaseIdentifiers).
+  - [22.2](#22.2) <a name='22.2'></a> Use camelCase when naming objects, functions, and instances. [`camelcase`](http://eslint.org/docs/rules/camelcase.html), `requireCamelCaseOrUpperCaseIdentifiers`](http://jscs.info/rule/requireCamelCaseOrUpperCaseIdentifiers)
 
     ```javascript
     // bad
@@ -2062,11 +1928,7 @@ Other Style Guides
     function thisIsMyFunction() {}
     ```
 
-  - [22.3](#22.3) <a name='22.3'></a> Use PascalCase when naming constructors or classes.
-
-    eslint rules: [`new-cap`](http://eslint.org/docs/rules/new-cap.html).
-
-    jscs rules: [`requireCapitalizedConstructors`](http://jscs.info/rule/requireCapitalizedConstructors).
+  - [22.3](#22.3) <a name='22.3'></a> Use PascalCase when naming constructors or classes. [`new-cap`](http://eslint.org/docs/rules/new-cap.html), [`requireCapitalizedConstructors`](http://jscs.info/rule/requireCapitalizedConstructors)
 
     ```javascript
     // bad
@@ -2090,11 +1952,7 @@ Other Style Guides
     });
     ```
 
-  - [22.4](#22.4) <a name='22.4'></a> Use a leading underscore `_` when naming private properties.
-
-    eslint rules: [`no-underscore-dangle`](http://eslint.org/docs/rules/no-underscore-dangle.html).
-
-    jscs rules: [`disallowDanglingUnderscores`](http://jscs.info/rule/disallowDanglingUnderscores).
+  - [22.4](#22.4) <a name='22.4'></a> Use a leading underscore `_` when naming private properties. [`no-underscore-dangle`](http://eslint.org/docs/rules/no-underscore-dangle.html), [`disallowDanglingUnderscores`](http://jscs.info/rule/disallowDanglingUnderscores)
 
     ```javascript
     // bad
@@ -2105,9 +1963,7 @@ Other Style Guides
     this._firstName = 'Panda';
     ```
 
-  - [22.5](#22.5) <a name='22.5'></a> Don't save references to `this`. Use arrow functions or Function#bind.
-
-    jscs rules: [`disallowNodeTypes`](http://jscs.info/rule/disallowNodeTypes).
+  - [22.5](#22.5) <a name='22.5'></a> Don't save references to `this`. Use arrow functions or Function#bind. [`disallowNodeTypes`](http://jscs.info/rule/disallowNodeTypes)
 
     ```javascript
     // bad
@@ -2266,9 +2122,7 @@ Other Style Guides
 
 ## jQuery
 
-  - [25.1](#25.1) <a name='25.1'></a> Prefix jQuery object variables with a `$`.
-
-    jscs rules: [`requireDollarBeforejQueryAssignment`](http://jscs.info/rule/requireDollarBeforejQueryAssignment).
+  - [25.1](#25.1) <a name='25.1'></a> Prefix jQuery object variables with a `$`. [`requireDollarBeforejQueryAssignment`](http://jscs.info/rule/requireDollarBeforejQueryAssignment)
 
     ```javascript
     // bad

From d852f5190eaf9e5a06e5463723249816583511d8 Mon Sep 17 00:00:00 2001
From: Harrison Shoff <hi@hshoff.com>
Date: Mon, 25 Jan 2016 22:19:01 -0800
Subject: [PATCH 0452/1591] [react][rule links] condense lines

---
 react/README.md | 50 ++++++++++++++-----------------------------------
 1 file changed, 14 insertions(+), 36 deletions(-)

diff --git a/react/README.md b/react/README.md
index e551172952..8da5cdc7ce 100644
--- a/react/README.md
+++ b/react/README.md
@@ -27,9 +27,7 @@
 
 ## Class vs `React.createClass` vs stateless
 
-  - If you have internal state and/or refs, prefer `class extends React.Component` over `React.createClass` unless you have a very good reason to use mixins.
-
-  eslint rules: [`react/prefer-es6-class`](https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/prefer-es6-class.md).
+  - If you have internal state and/or refs, prefer `class extends React.Component` over `React.createClass` unless you have a very good reason to use mixins. [`react/prefer-es6-class`](https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/prefer-es6-class.md)
 
     ```javascript
     // bad
@@ -48,9 +46,9 @@
       }
     }
     ```
-    
+
     And if you don't have state or refs, prefer functions over classes:
-    
+
     ```javascript
 
     // bad
@@ -59,7 +57,7 @@
         return <div>{this.props.hello}</div>;
       }
     }
-    
+
     // good
     function Listing({ hello }) {
       return <div>{hello}</div>;
@@ -70,9 +68,7 @@
 
   - **Extensions**: Use `.jsx` extension for React components.
   - **Filename**: Use PascalCase for filenames. E.g., `ReservationCard.jsx`.
-  - **Reference Naming**: Use PascalCase for React components and camelCase for their instances.
-
-  eslint rules: [`react/jsx-pascal-case`](https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/jsx-pascal-case.md).
+  - **Reference Naming**: Use PascalCase for React components and camelCase for their instances. [`react/jsx-pascal-case`](https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/jsx-pascal-case.md)
 
     ```javascript
     // bad
@@ -119,9 +115,7 @@
 
 ## Alignment
 
-  - Follow these alignment styles for JSX syntax
-
-  eslint rules: [`react/jsx-closing-bracket-location`](https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/jsx-closing-bracket-location.md).
+  - Follow these alignment styles for JSX syntax. [`react/jsx-closing-bracket-location`](https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/jsx-closing-bracket-location.md)
 
     ```javascript
     // bad
@@ -148,13 +142,11 @@
 
 ## Quotes
 
-  - Always use double quotes (`"`) for JSX attributes, but single quotes for all other JS.
+  - Always use double quotes (`"`) for JSX attributes, but single quotes for all other JS. [`jsx-quotes`](http://eslint.org/docs/rules/jsx-quotes)
 
   > Why? JSX attributes [can't contain escaped quotes](http://eslint.org/docs/rules/jsx-quotes), so double quotes make conjunctions like `"don't"` easier to type.
   > Regular HTML attributes also typically use double quotes instead of single, so JSX attributes mirror this convention.
 
-  eslint rules: [`jsx-quotes`](http://eslint.org/docs/rules/jsx-quotes).
-
     ```javascript
     // bad
     <Foo bar='bar' />
@@ -206,9 +198,7 @@
     />
     ```
 
-  - Omit the value of the prop when it is explicitly `true`.
-
-  eslint rules: [`react/jsx-boolean-value`](https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/jsx-boolean-value.md).
+  - Omit the value of the prop when it is explicitly `true`. [`react/jsx-boolean-value`](https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/jsx-boolean-value.md)
 
     ```javascript
     // bad
@@ -224,9 +214,7 @@
 
 ## Parentheses
 
-  - Wrap JSX tags in parentheses when they span more than one line.
-
-  eslint rules: [`react/wrap-multilines`](https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/wrap-multilines.md).
+  - Wrap JSX tags in parentheses when they span more than one line. [`react/wrap-multilines`](https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/wrap-multilines.md)
 
     ```javascript
     // bad
@@ -254,9 +242,7 @@
 
 ## Tags
 
-  - Always self-close tags that have no children.
-
-  eslint rules: [`react/self-closing-comp`](https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/self-closing-comp.md).
+  - Always self-close tags that have no children. [`react/self-closing-comp`](https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/self-closing-comp.md)
 
     ```javascript
     // bad
@@ -266,9 +252,7 @@
     <Foo className="stuff" />
     ```
 
-  - If your component has multi-line properties, close its tag on a new line.
-
-  eslint rules: [`react/jsx-closing-bracket-location`](https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/jsx-closing-bracket-location.md).
+  - If your component has multi-line properties, close its tag on a new line. [`react/jsx-closing-bracket-location`](https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/jsx-closing-bracket-location.md)
 
     ```javascript
     // bad
@@ -285,12 +269,10 @@
 
 ## Methods
 
-  - Bind event handlers for the render method in the constructor.
+  - Bind event handlers for the render method in the constructor. [`react/jsx-no-bind`](https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/jsx-no-bind.md)
 
   > Why? A bind call in the render path creates a brand new function on every single render.
 
-  eslint rules: [`react/jsx-no-bind`](https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/jsx-no-bind.md).
-
     ```javascript
     // bad
     class extends React.Component {
@@ -393,7 +375,7 @@
     export default Link;
     ```
 
-  - Ordering for `React.createClass`:
+  - Ordering for `React.createClass`: [`react/sort-comp`](https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/sort-comp.md)
 
   1. `displayName`
   1. `propTypes`
@@ -417,16 +399,12 @@
   1. *Optional render methods* like `renderNavigation()` or `renderProfilePicture()`
   1. `render`
 
-  eslint rules: [`react/sort-comp`](https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/sort-comp.md).
-
 ## `isMounted`
 
-  - Do not use `isMounted`.
+  - Do not use `isMounted`. [`react/no-is-mounted`](https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/no-is-mounted.md)
 
   > Why? [`isMounted` is an anti-pattern][anti-pattern], is not available when using ES6 classes, and is on its way to being officially deprecated.
 
   [anti-pattern]: https://facebook.github.io/react/blog/2015/12/16/ismounted-antipattern.html
 
-  eslint rules: [`react/no-is-mounted`](https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/no-is-mounted.md).
-
 **[⬆ back to top](#table-of-contents)**

From 992a9cea58ddde54354d6e53800de97b93bfe9f4 Mon Sep 17 00:00:00 2001
From: Harrison Shoff <hi@hshoff.com>
Date: Mon, 25 Jan 2016 22:23:16 -0800
Subject: [PATCH 0453/1591] [react][rule links] add eslint labels back

---
 react/README.md | 24 ++++++++++++------------
 1 file changed, 12 insertions(+), 12 deletions(-)

diff --git a/react/README.md b/react/README.md
index 8da5cdc7ce..96edd521e3 100644
--- a/react/README.md
+++ b/react/README.md
@@ -21,13 +21,13 @@
 ## Basic Rules
 
   - Only include one React component per file.
-    - However, multiple [Stateless, or Pure, Components](https://facebook.github.io/react/docs/reusable-components.html#stateless-functions) are allowed per file. eslint rule: [`react/no-multi-comp`](https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/no-multi-comp.md#ignorestateless).
+    - However, multiple [Stateless, or Pure, Components](https://facebook.github.io/react/docs/reusable-components.html#stateless-functions) are allowed per file. eslint: [`react/no-multi-comp`](https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/no-multi-comp.md#ignorestateless).
   - Always use JSX syntax.
   - Do not use `React.createElement` unless you're initializing the app from a file that is not JSX.
 
 ## Class vs `React.createClass` vs stateless
 
-  - If you have internal state and/or refs, prefer `class extends React.Component` over `React.createClass` unless you have a very good reason to use mixins. [`react/prefer-es6-class`](https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/prefer-es6-class.md)
+  - If you have internal state and/or refs, prefer `class extends React.Component` over `React.createClass` unless you have a very good reason to use mixins. eslint: [`react/prefer-es6-class`](https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/prefer-es6-class.md)
 
     ```javascript
     // bad
@@ -68,7 +68,7 @@
 
   - **Extensions**: Use `.jsx` extension for React components.
   - **Filename**: Use PascalCase for filenames. E.g., `ReservationCard.jsx`.
-  - **Reference Naming**: Use PascalCase for React components and camelCase for their instances. [`react/jsx-pascal-case`](https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/jsx-pascal-case.md)
+  - **Reference Naming**: Use PascalCase for React components and camelCase for their instances. eslint: [`react/jsx-pascal-case`](https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/jsx-pascal-case.md)
 
     ```javascript
     // bad
@@ -115,7 +115,7 @@
 
 ## Alignment
 
-  - Follow these alignment styles for JSX syntax. [`react/jsx-closing-bracket-location`](https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/jsx-closing-bracket-location.md)
+  - Follow these alignment styles for JSX syntax. eslint: [`react/jsx-closing-bracket-location`](https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/jsx-closing-bracket-location.md)
 
     ```javascript
     // bad
@@ -142,7 +142,7 @@
 
 ## Quotes
 
-  - Always use double quotes (`"`) for JSX attributes, but single quotes for all other JS. [`jsx-quotes`](http://eslint.org/docs/rules/jsx-quotes)
+  - Always use double quotes (`"`) for JSX attributes, but single quotes for all other JS. eslint: [`jsx-quotes`](http://eslint.org/docs/rules/jsx-quotes)
 
   > Why? JSX attributes [can't contain escaped quotes](http://eslint.org/docs/rules/jsx-quotes), so double quotes make conjunctions like `"don't"` easier to type.
   > Regular HTML attributes also typically use double quotes instead of single, so JSX attributes mirror this convention.
@@ -198,7 +198,7 @@
     />
     ```
 
-  - Omit the value of the prop when it is explicitly `true`. [`react/jsx-boolean-value`](https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/jsx-boolean-value.md)
+  - Omit the value of the prop when it is explicitly `true`. eslint: [`react/jsx-boolean-value`](https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/jsx-boolean-value.md)
 
     ```javascript
     // bad
@@ -214,7 +214,7 @@
 
 ## Parentheses
 
-  - Wrap JSX tags in parentheses when they span more than one line. [`react/wrap-multilines`](https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/wrap-multilines.md)
+  - Wrap JSX tags in parentheses when they span more than one line. eslint: [`react/wrap-multilines`](https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/wrap-multilines.md)
 
     ```javascript
     // bad
@@ -242,7 +242,7 @@
 
 ## Tags
 
-  - Always self-close tags that have no children. [`react/self-closing-comp`](https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/self-closing-comp.md)
+  - Always self-close tags that have no children. eslint: [`react/self-closing-comp`](https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/self-closing-comp.md)
 
     ```javascript
     // bad
@@ -252,7 +252,7 @@
     <Foo className="stuff" />
     ```
 
-  - If your component has multi-line properties, close its tag on a new line. [`react/jsx-closing-bracket-location`](https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/jsx-closing-bracket-location.md)
+  - If your component has multi-line properties, close its tag on a new line. eslint: [`react/jsx-closing-bracket-location`](https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/jsx-closing-bracket-location.md)
 
     ```javascript
     // bad
@@ -269,7 +269,7 @@
 
 ## Methods
 
-  - Bind event handlers for the render method in the constructor. [`react/jsx-no-bind`](https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/jsx-no-bind.md)
+  - Bind event handlers for the render method in the constructor. eslint: [`react/jsx-no-bind`](https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/jsx-no-bind.md)
 
   > Why? A bind call in the render path creates a brand new function on every single render.
 
@@ -375,7 +375,7 @@
     export default Link;
     ```
 
-  - Ordering for `React.createClass`: [`react/sort-comp`](https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/sort-comp.md)
+  - Ordering for `React.createClass`: eslint: [`react/sort-comp`](https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/sort-comp.md)
 
   1. `displayName`
   1. `propTypes`
@@ -401,7 +401,7 @@
 
 ## `isMounted`
 
-  - Do not use `isMounted`. [`react/no-is-mounted`](https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/no-is-mounted.md)
+  - Do not use `isMounted`. eslint: [`react/no-is-mounted`](https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/no-is-mounted.md)
 
   > Why? [`isMounted` is an anti-pattern][anti-pattern], is not available when using ES6 classes, and is on its way to being officially deprecated.
 

From 7293a0f02dd0d9b35e9fb1e927be568157bbf7af Mon Sep 17 00:00:00 2001
From: Harrison Shoff <hi@hshoff.com>
Date: Mon, 25 Jan 2016 22:34:39 -0800
Subject: [PATCH 0454/1591] [rule links] add labels back

---
 README.md | 90 +++++++++++++++++++++++++++----------------------------
 1 file changed, 45 insertions(+), 45 deletions(-)

diff --git a/README.md b/README.md
index bb371499ad..3abec0b1e9 100644
--- a/README.md
+++ b/README.md
@@ -87,7 +87,7 @@ Other Style Guides
 
 ## References
 
-  - [2.1](#2.1) <a name='2.1'></a> Use `const` for all of your references; avoid using `var`. [`prefer-const`](http://eslint.org/docs/rules/prefer-const.html), [`no-const-assign`](http://eslint.org/docs/rules/no-const-assign.html)
+  - [2.1](#2.1) <a name='2.1'></a> Use `const` for all of your references; avoid using `var`. eslint: [`prefer-const`](http://eslint.org/docs/rules/prefer-const.html), [`no-const-assign`](http://eslint.org/docs/rules/no-const-assign.html)
 
     > Why? This ensures that you can't reassign your references, which can lead to bugs and difficult to comprehend code.
 
@@ -101,7 +101,7 @@ Other Style Guides
     const b = 2;
     ```
 
-  - [2.2](#2.2) <a name='2.2'></a> If you must reassign references, use `let` instead of `var`. [`no-var`](http://eslint.org/docs/rules/no-var.html), [`disallowVar`](http://jscs.info/rule/disallowVar)
+  - [2.2](#2.2) <a name='2.2'></a> If you must reassign references, use `let` instead of `var`. eslint: [`no-var`](http://eslint.org/docs/rules/no-var.html) jscs: [`disallowVar`](http://jscs.info/rule/disallowVar)
 
     > Why? `let` is block-scoped rather than function-scoped like `var`.
 
@@ -135,7 +135,7 @@ Other Style Guides
 
 ## Objects
 
-  - [3.1](#3.1) <a name='3.1'></a> Use the literal syntax for object creation. [`no-new-object`](http://eslint.org/docs/rules/no-new-object.html)
+  - [3.1](#3.1) <a name='3.1'></a> Use the literal syntax for object creation. eslint: [`no-new-object`](http://eslint.org/docs/rules/no-new-object.html)
 
     ```javascript
     // bad
@@ -145,7 +145,7 @@ Other Style Guides
     const item = {};
     ```
 
-  - [3.2](#3.2) <a name='3.2'></a> If your code will be executed in browsers in script context, don't use [reserved words](http://es5.github.io/#x7.6.1) as keys. It won't work in IE8. [More info](https://github.com/airbnb/javascript/issues/61). It’s OK to use them in ES6 modules and server-side code. [`disallowIdentiferNames`](http://jscs.info/rule/disallowIdentifierNames)
+  - [3.2](#3.2) <a name='3.2'></a> If your code will be executed in browsers in script context, don't use [reserved words](http://es5.github.io/#x7.6.1) as keys. It won't work in IE8. [More info](https://github.com/airbnb/javascript/issues/61). It’s OK to use them in ES6 modules and server-side code. jscs: [`disallowIdentiferNames`](http://jscs.info/rule/disallowIdentifierNames)
 
     ```javascript
     // bad
@@ -161,7 +161,7 @@ Other Style Guides
     };
     ```
 
-  - [3.3](#3.3) <a name='3.3'></a> Use readable synonyms in place of reserved words. [`disallowIdentiferNames`](http://jscs.info/rule/disallowIdentifierNames)
+  - [3.3](#3.3) <a name='3.3'></a> Use readable synonyms in place of reserved words. jscs: [`disallowIdentiferNames`](http://jscs.info/rule/disallowIdentifierNames)
 
     ```javascript
     // bad
@@ -207,7 +207,7 @@ Other Style Guides
     ```
 
   <a name="es6-object-shorthand"></a>
-  - [3.5](#3.5) <a name='3.5'></a> Use object method shorthand. [`object-shorthand`](http://eslint.org/docs/rules/object-shorthand.html), [`requireEnhancedObjectLiterals`](http://jscs.info/rule/requireEnhancedObjectLiterals)
+  - [3.5](#3.5) <a name='3.5'></a> Use object method shorthand. eslint: [`object-shorthand`](http://eslint.org/docs/rules/object-shorthand.html) jscs: [`requireEnhancedObjectLiterals`](http://jscs.info/rule/requireEnhancedObjectLiterals)
 
     ```javascript
     // bad
@@ -230,7 +230,7 @@ Other Style Guides
     ```
 
   <a name="es6-object-concise"></a>
-  - [3.6](#3.6) <a name='3.6'></a> Use property value shorthand. [`object-shorthand`](http://eslint.org/docs/rules/object-shorthand.html), [`requireEnhancedObjectLiterals`](http://jscs.info/rule/requireEnhancedObjectLiterals)
+  - [3.6](#3.6) <a name='3.6'></a> Use property value shorthand. eslint: [`object-shorthand`](http://eslint.org/docs/rules/object-shorthand.html) jscs: [`requireEnhancedObjectLiterals`](http://jscs.info/rule/requireEnhancedObjectLiterals)
 
     > Why? It is shorter to write and descriptive.
 
@@ -277,7 +277,7 @@ Other Style Guides
     };
     ```
 
-  - [3.8](#3.8) <a name="3.8"></a> Only quote properties that are invalid identifiers. [`quote-props`](http://eslint.org/docs/rules/quote-props.html), [`disallowQuotedKeysInObjects`](http://jscs.info/rule/disallowQuotedKeysInObjects)
+  - [3.8](#3.8) <a name="3.8"></a> Only quote properties that are invalid identifiers. eslint: [`quote-props`](http://eslint.org/docs/rules/quote-props.html) jscs: [`disallowQuotedKeysInObjects`](http://jscs.info/rule/disallowQuotedKeysInObjects)
 
   > Why? In general we consider it subjectively easier to read. It improves syntax highlighting, and is also more easily optimized by many JS engines.
 
@@ -301,7 +301,7 @@ Other Style Guides
 
 ## Arrays
 
-  - [4.1](#4.1) <a name='4.1'></a> Use the literal syntax for array creation. [`no-array-constructor`](http://eslint.org/docs/rules/no-array-constructor.html)
+  - [4.1](#4.1) <a name='4.1'></a> Use the literal syntax for array creation. eslint: [`no-array-constructor`](http://eslint.org/docs/rules/no-array-constructor.html)
 
     ```javascript
     // bad
@@ -350,7 +350,7 @@ Other Style Guides
 
 ## Destructuring
 
-  - [5.1](#5.1) <a name='5.1'></a> Use object destructuring when accessing and using multiple properties of an object. [`requireObjectDestructuring`](http://jscs.info/rule/requireObjectDestructuring)
+  - [5.1](#5.1) <a name='5.1'></a> Use object destructuring when accessing and using multiple properties of an object. jscs: [`requireObjectDestructuring`](http://jscs.info/rule/requireObjectDestructuring)
 
     > Why? Destructuring saves you from creating temporary references for those properties.
 
@@ -375,7 +375,7 @@ Other Style Guides
     }
     ```
 
-  - [5.2](#5.2) <a name='5.2'></a> Use array destructuring. [`requireArrayDestructuring`](http://jscs.info/rule/requireArrayDestructuring)
+  - [5.2](#5.2) <a name='5.2'></a> Use array destructuring. jscs: [`requireArrayDestructuring`](http://jscs.info/rule/requireArrayDestructuring)
 
     ```javascript
     const arr = [1, 2, 3, 4];
@@ -417,7 +417,7 @@ Other Style Guides
 
 ## Strings
 
-  - [6.1](#6.1) <a name='6.1'></a> Use single quotes `''` for strings. [`quotes`](http://eslint.org/docs/rules/quotes.html), [`validateQuoteMarks`](http://jscs.info/rule/validateQuoteMarks)
+  - [6.1](#6.1) <a name='6.1'></a> Use single quotes `''` for strings. eslint: [`quotes`](http://eslint.org/docs/rules/quotes.html) jscs: [`validateQuoteMarks`](http://jscs.info/rule/validateQuoteMarks)
 
     ```javascript
     // bad
@@ -447,7 +447,7 @@ Other Style Guides
     ```
 
   <a name="es6-template-literals"></a>
-  - [6.4](#6.4) <a name='6.4'></a> When programmatically building up strings, use template strings instead of concatenation. [`prefer-template`](http://eslint.org/docs/rules/prefer-template.html), [`requireTemplateStrings`](http://jscs.info/rule/requireTemplateStrings)
+  - [6.4](#6.4) <a name='6.4'></a> When programmatically building up strings, use template strings instead of concatenation. eslint: [`prefer-template`](http://eslint.org/docs/rules/prefer-template.html) jscs: [`requireTemplateStrings`](http://jscs.info/rule/requireTemplateStrings)
 
     > Why? Template strings give you a readable, concise syntax with proper newlines and string interpolation features.
 
@@ -474,7 +474,7 @@ Other Style Guides
 
 ## Functions
 
-  - [7.1](#7.1) <a name='7.1'></a> Use function declarations instead of function expressions. [`requireFunctionDeclarations`](http://jscs.info/rule/requireFunctionDeclarations)
+  - [7.1](#7.1) <a name='7.1'></a> Use function declarations instead of function expressions. jscs: [`requireFunctionDeclarations`](http://jscs.info/rule/requireFunctionDeclarations)
 
     > Why? Function declarations are named, so they're easier to identify in call stacks. Also, the whole body of a function declaration is hoisted, whereas only the reference of a function expression is hoisted. This rule makes it possible to always use [Arrow Functions](#arrow-functions) in place of function expressions.
 
@@ -488,7 +488,7 @@ Other Style Guides
     }
     ```
 
-  - [7.2](#7.2) <a name='7.2'></a> Immediately invoked function expressions: [`wrap-iife`](http://eslint.org/docs/rules/wrap-iife.html), [`requireParenthesesAroundIIFE`](http://jscs.info/rule/requireParenthesesAroundIIFE)
+  - [7.2](#7.2) <a name='7.2'></a> Immediately invoked function expressions: eslint: [`wrap-iife`](http://eslint.org/docs/rules/wrap-iife.html) jscs: [`requireParenthesesAroundIIFE`](http://jscs.info/rule/requireParenthesesAroundIIFE)
 
     > Why? An immediately invoked function expression is a single unit - wrapping both it, and its invocation parens, in parens, cleanly expresses this. Note that in a world with modules everywhere, you almost never need an IIFE.
 
@@ -499,7 +499,7 @@ Other Style Guides
     }());
     ```
 
-  - [7.3](#7.3) <a name='7.3'></a> Never declare a function in a non-function block (if, while, etc). Assign the function to a variable instead. Browsers will allow you to do it, but they all interpret it differently, which is bad news bears. [`no-loop-func`](http://eslint.org/docs/rules/no-loop-func.html)
+  - [7.3](#7.3) <a name='7.3'></a> Never declare a function in a non-function block (if, while, etc). Assign the function to a variable instead. Browsers will allow you to do it, but they all interpret it differently, which is bad news bears. eslint: [`no-loop-func`](http://eslint.org/docs/rules/no-loop-func.html)
 
   - [7.4](#7.4) <a name='7.4'></a> **Note:** ECMA-262 defines a `block` as a list of statements. A function declaration is not a statement. [Read ECMA-262's note on this issue](http://www.ecma-international.org/publications/files/ECMA-ST/Ecma-262.pdf#page=97).
 
@@ -636,7 +636,7 @@ Other Style Guides
     const y = function a() {};
     ```
 
-  - [7.12](#7.12) <a name="7.12"></a> Never mutate parameters. [`no-param-reassign`](http://eslint.org/docs/rules/no-param-reassign.html)
+  - [7.12](#7.12) <a name="7.12"></a> Never mutate parameters. eslint: [`no-param-reassign`](http://eslint.org/docs/rules/no-param-reassign.html)
 
     > Why? Manipulating objects passed in as parameters can cause unwanted variable side effects in the original caller.
 
@@ -652,7 +652,7 @@ Other Style Guides
     };
     ```
 
-  - [7.13](#7.13) <a name="7.13"></a> Never reassign parameters. [`no-param-reassign`](http://eslint.org/docs/rules/no-param-reassign.html)
+  - [7.13](#7.13) <a name="7.13"></a> Never reassign parameters. eslint: [`no-param-reassign`](http://eslint.org/docs/rules/no-param-reassign.html)
 
     > Why? Reassigning parameters can lead to unexpected behavior, especially when accessing the `arguments` object. It can also cause optimization issues, especially in V8.
 
@@ -679,7 +679,7 @@ Other Style Guides
 
 ## Arrow Functions
 
-  - [8.1](#8.1) <a name='8.1'></a> When you must use function expressions (as when passing an anonymous function), use arrow function notation. [`prefer-arrow-callback`](http://eslint.org/docs/rules/prefer-arrow-callback.html), [`arrow-spacing`](http://eslint.org/docs/rules/arrow-spacing.html), [`requireArrowFunctions`](http://jscs.info/rule/requireArrowFunctions)
+  - [8.1](#8.1) <a name='8.1'></a> When you must use function expressions (as when passing an anonymous function), use arrow function notation. eslint: [`prefer-arrow-callback`](http://eslint.org/docs/rules/prefer-arrow-callback.html), [`arrow-spacing`](http://eslint.org/docs/rules/arrow-spacing.html) jscs: [`requireArrowFunctions`](http://jscs.info/rule/requireArrowFunctions)
 
     > Why? It creates a version of the function that executes in the context of `this`, which is usually what you want, and is a more concise syntax.
 
@@ -699,7 +699,7 @@ Other Style Guides
     });
     ```
 
-  - [8.2](#8.2) <a name='8.2'></a> If the function body consists of a single expression, omit the braces and use the implicit return. Otherwise, keep the braces and use a `return` statement. [`arrow-parens`](http://eslint.org/docs/rules/arrow-parens.html), [`arrow-body-style`](http://eslint.org/docs/rules/arrow-body-style.html), [`disallowParenthesesAroundArrowParam`](http://jscs.info/rule/disallowParenthesesAroundArrowParam), [`requireShorthandArrowFunctions`](http://jscs.info/rule/requireShorthandArrowFunctions)
+  - [8.2](#8.2) <a name='8.2'></a> If the function body consists of a single expression, omit the braces and use the implicit return. Otherwise, keep the braces and use a `return` statement. eslint: [`arrow-parens`](http://eslint.org/docs/rules/arrow-parens.html), [`arrow-body-style`](http://eslint.org/docs/rules/arrow-body-style.html) jscs:  [`disallowParenthesesAroundArrowParam`](http://jscs.info/rule/disallowParenthesesAroundArrowParam), [`requireShorthandArrowFunctions`](http://jscs.info/rule/requireShorthandArrowFunctions)
 
     > Why? Syntactic sugar. It reads well when multiple functions are chained together.
 
@@ -741,7 +741,7 @@ Other Style Guides
     ```
 
 
-  - [8.4](#8.4) <a name='8.4'></a> If your function takes a single argument and doesn’t use braces, omit the parentheses. Otherwise, always include parentheses around arguments. [`arrow-parens`](http://eslint.org/docs/rules/arrow-parens.html), [`disallowParenthesesAroundArrowParam`](http://jscs.info/rule/disallowParenthesesAroundArrowParam)
+  - [8.4](#8.4) <a name='8.4'></a> If your function takes a single argument and doesn’t use braces, omit the parentheses. Otherwise, always include parentheses around arguments. eslint: [`arrow-parens`](http://eslint.org/docs/rules/arrow-parens.html) jscs:  [`disallowParenthesesAroundArrowParam`](http://jscs.info/rule/disallowParenthesesAroundArrowParam)
 
     > Why? Less visual clutter.
 
@@ -937,7 +937,7 @@ Other Style Guides
 
 ## Iterators and Generators
 
-  - [11.1](#11.1) <a name='11.1'></a> Don't use iterators. Prefer JavaScript's higher-order functions like `map()` and `reduce()` instead of loops like `for-of`. [`no-iterator`](http://eslint.org/docs/rules/no-iterator.html)
+  - [11.1](#11.1) <a name='11.1'></a> Don't use iterators. Prefer JavaScript's higher-order functions like `map()` and `reduce()` instead of loops like `for-of`. eslint: [`no-iterator`](http://eslint.org/docs/rules/no-iterator.html)
 
     > Why? This enforces our immutable rule. Dealing with pure functions that return values is easier to reason about than side-effects.
 
@@ -971,7 +971,7 @@ Other Style Guides
 
 ## Properties
 
-  - [12.1](#12.1) <a name='12.1'></a> Use dot notation when accessing properties. [`dot-notation`](http://eslint.org/docs/rules/dot-notation.html), [`requireDotNotation`](http://jscs.info/rule/requireDotNotation)
+  - [12.1](#12.1) <a name='12.1'></a> Use dot notation when accessing properties. eslint: [`dot-notation`](http://eslint.org/docs/rules/dot-notation.html) jscs: [`requireDotNotation`](http://jscs.info/rule/requireDotNotation)
 
     ```javascript
     const luke = {
@@ -1016,7 +1016,7 @@ Other Style Guides
     const superPower = new SuperPower();
     ```
 
-  - [13.2](#13.2) <a name='13.2'></a> Use one `const` declaration per variable. [`one-var`](http://eslint.org/docs/rules/one-var.html), [`disallowMultipleVarDecl`](http://jscs.info/rule/disallowMultipleVarDecl)
+  - [13.2](#13.2) <a name='13.2'></a> Use one `const` declaration per variable. eslint: [`one-var`](http://eslint.org/docs/rules/one-var.html) jscs: [`disallowMultipleVarDecl`](http://jscs.info/rule/disallowMultipleVarDecl)
 
     > Why? It's easier to add new variable declarations this way, and you never have to worry about swapping out a `;` for a `,` or introducing punctuation-only diffs.
 
@@ -1202,7 +1202,7 @@ Other Style Guides
 
 ## Comparison Operators & Equality
 
-  - [15.1](#15.1) <a name='15.1'></a> Use `===` and `!==` over `==` and `!=`. [`eqeqeq`](http://eslint.org/docs/rules/eqeqeq.html)
+  - [15.1](#15.1) <a name='15.1'></a> Use `===` and `!==` over `==` and `!=`. eslint: [`eqeqeq`](http://eslint.org/docs/rules/eqeqeq.html)
 
   - [15.2](#15.2) <a name='15.2'></a> Conditional statements such as the `if` statement evaluate their expression using coercion with the `ToBoolean` abstract method and always follow these simple rules:
 
@@ -1276,7 +1276,7 @@ Other Style Guides
     ```
 
   - [16.2](#16.2) <a name='16.2'></a> If you're using multi-line blocks with `if` and `else`, put `else` on the same line as your
-    `if` block's closing brace. [`brace-style`](http://eslint.org/docs/rules/brace-style.html), [`disallowNewlineBeforeBlockStatements`](http://jscs.info/rule/disallowNewlineBeforeBlockStatements)
+    `if` block's closing brace. eslint: [`brace-style`](http://eslint.org/docs/rules/brace-style.html) jscs:  [`disallowNewlineBeforeBlockStatements`](http://jscs.info/rule/disallowNewlineBeforeBlockStatements)
 
     ```javascript
     // bad
@@ -1406,7 +1406,7 @@ Other Style Guides
 
 ## Whitespace
 
-  - [18.1](#18.1) <a name='18.1'></a> Use soft tabs set to 2 spaces. [`indent`](http://eslint.org/docs/rules/indent.html), [`validateIndentation`](http://jscs.info/rule/validateIndentation)
+  - [18.1](#18.1) <a name='18.1'></a> Use soft tabs set to 2 spaces. eslint: [`indent`](http://eslint.org/docs/rules/indent.html) jscs: [`validateIndentation`](http://jscs.info/rule/validateIndentation)
 
     ```javascript
     // bad
@@ -1425,7 +1425,7 @@ Other Style Guides
     }
     ```
 
-  - [18.2](#18.2) <a name='18.2'></a> Place 1 space before the leading brace. [`space-before-blocks`](http://eslint.org/docs/rules/space-before-blocks.html), [`requireSpaceBeforeBlockStatements`](http://jscs.info/rule/requireSpaceBeforeBlockStatements).
+  - [18.2](#18.2) <a name='18.2'></a> Place 1 space before the leading brace. eslint: [`space-before-blocks`](http://eslint.org/docs/rules/space-before-blocks.html) jscs: [`requireSpaceBeforeBlockStatements`](http://jscs.info/rule/requireSpaceBeforeBlockStatements)
 
     ```javascript
     // bad
@@ -1451,7 +1451,7 @@ Other Style Guides
     });
     ```
 
-  - [18.3](#18.3) <a name='18.3'></a> Place 1 space before the opening parenthesis in control statements (`if`, `while` etc.). Place no space between the argument list and the function name in function calls and declarations. [`space-after-keywords`](http://eslint.org/docs/rules/space-after-keywords.html), [`space-before-keywords`](http://eslint.org/docs/rules/space-before-keywords.html), [`requireSpaceAfterKeywords`](http://jscs.info/rule/requireSpaceAfterKeywords)
+  - [18.3](#18.3) <a name='18.3'></a> Place 1 space before the opening parenthesis in control statements (`if`, `while` etc.). Place no space between the argument list and the function name in function calls and declarations. eslint: [`space-after-keywords`](http://eslint.org/docs/rules/space-after-keywords.html), [`space-before-keywords`](http://eslint.org/docs/rules/space-before-keywords.html) jscs:  [`requireSpaceAfterKeywords`](http://jscs.info/rule/requireSpaceAfterKeywords)
 
     ```javascript
     // bad
@@ -1475,7 +1475,7 @@ Other Style Guides
     }
     ```
 
-  - [18.4](#18.4) <a name='18.4'></a> Set off operators with spaces. [`space-infix-ops`](http://eslint.org/docs/rules/space-infix-ops.html), [`requireSpaceBeforeBinaryOperators`](http://jscs.info/rule/requireSpaceBeforeBinaryOperators), [`requireSpaceAfterBinaryOperators`](http://jscs.info/rule/requireSpaceAfterBinaryOperators)
+  - [18.4](#18.4) <a name='18.4'></a> Set off operators with spaces. eslint: [`space-infix-ops`](http://eslint.org/docs/rules/space-infix-ops.html) jscs: [`requireSpaceBeforeBinaryOperators`](http://jscs.info/rule/requireSpaceBeforeBinaryOperators), [`requireSpaceAfterBinaryOperators`](http://jscs.info/rule/requireSpaceAfterBinaryOperators)
 
     ```javascript
     // bad
@@ -1549,7 +1549,7 @@ Other Style Guides
         .call(tron.led);
     ```
 
-  - [18.7](#18.7) <a name='18.7'></a> Leave a blank line after blocks and before the next statement. [`requirePaddingNewLinesAfterBlocks`](http://jscs.info/rule/requirePaddingNewLinesAfterBlocks)
+  - [18.7](#18.7) <a name='18.7'></a> Leave a blank line after blocks and before the next statement. jscs: [`requirePaddingNewLinesAfterBlocks`](http://jscs.info/rule/requirePaddingNewLinesAfterBlocks)
 
     ```javascript
     // bad
@@ -1606,7 +1606,7 @@ Other Style Guides
     return arr;
     ```
 
-  - [18.8](#18.8) <a name='18.8'></a> Do not pad your blocks with blank lines. [`padded-blocks`](http://eslint.org/docs/rules/padded-blocks.html), [`disallowPaddingNewlinesInBlocks`](http://jscs.info/rule/disallowPaddingNewlinesInBlocks)
+  - [18.8](#18.8) <a name='18.8'></a> Do not pad your blocks with blank lines. eslint: [`padded-blocks`](http://eslint.org/docs/rules/padded-blocks.html) jscs:  [`disallowPaddingNewlinesInBlocks`](http://jscs.info/rule/disallowPaddingNewlinesInBlocks)
 
     ```javascript
     // bad
@@ -1638,7 +1638,7 @@ Other Style Guides
     }
     ```
 
-  - [18.9](#18.9) <a name='18.9'></a> Do not add spaces inside parentheses. [`space-in-parens`](http://eslint.org/docs/rules/space-in-parens.html), [`disallowSpacesInsideParentheses`](http://jscs.info/rule/disallowSpacesInsideParentheses)
+  - [18.9](#18.9) <a name='18.9'></a> Do not add spaces inside parentheses. eslint: [`space-in-parens`](http://eslint.org/docs/rules/space-in-parens.html) jscs: [`disallowSpacesInsideParentheses`](http://jscs.info/rule/disallowSpacesInsideParentheses)
 
     ```javascript
     // bad
@@ -1662,7 +1662,7 @@ Other Style Guides
     }
     ```
 
-  - [18.10](#18.10) <a name='18.10'></a> Do not add spaces inside brackets. [`array-bracket-spacing`](http://eslint.org/docs/rules/array-bracket-spacing.html), [`disallowSpacesInsideArrayBrackets`](http://jscs.info/rule/disallowSpacesInsideArrayBrackets).
+  - [18.10](#18.10) <a name='18.10'></a> Do not add spaces inside brackets. eslint: [`array-bracket-spacing`](http://eslint.org/docs/rules/array-bracket-spacing.html) jscs: [`disallowSpacesInsideArrayBrackets`](http://jscs.info/rule/disallowSpacesInsideArrayBrackets)
 
     ```javascript
     // bad
@@ -1674,7 +1674,7 @@ Other Style Guides
     console.log(foo[0]);
     ```
 
-  - [18.11](#18.11) <a name='18.11'></a> Add spaces inside curly braces. [`object-curly-spacing`](http://eslint.org/docs/rules/object-curly-spacing.html), [`disallowSpacesInsideObjectBrackets`](http://jscs.info/rule/disallowSpacesInsideObjectBrackets)
+  - [18.11](#18.11) <a name='18.11'></a> Add spaces inside curly braces. eslint: [`object-curly-spacing`](http://eslint.org/docs/rules/object-curly-spacing.html) jscs: [`disallowSpacesInsideObjectBrackets`](http://jscs.info/rule/disallowSpacesInsideObjectBrackets)
 
     ```javascript
     // bad
@@ -1684,7 +1684,7 @@ Other Style Guides
     const foo = { clark: 'kent' };
     ```
 
-  - [18.12](#18.12) <a name='18.12'></a> Avoid having lines of code that are longer than 100 characters (including whitespace). [`max-len`](http://eslint.org/docs/rules/max-len.html), [`maximumLineLength`](http://jscs.info/rule/maximumLineLength)
+  - [18.12](#18.12) <a name='18.12'></a> Avoid having lines of code that are longer than 100 characters (including whitespace). eslint: [`max-len`](http://eslint.org/docs/rules/max-len.html) jscs: [`maximumLineLength`](http://jscs.info/rule/maximumLineLength)
 
     > Why? This ensures readability and maintainability.
 
@@ -1713,7 +1713,7 @@ Other Style Guides
 
 ## Commas
 
-  - [19.1](#19.1) <a name='19.1'></a> Leading commas: **Nope.** [`comma-style`](http://eslint.org/docs/rules/comma-style.html), [`requireCommaBeforeLineBreak`](http://jscs.info/rule/requireCommaBeforeLineBreak)
+  - [19.1](#19.1) <a name='19.1'></a> Leading commas: **Nope.** eslint: [`comma-style`](http://eslint.org/docs/rules/comma-style.html) jscs: [`requireCommaBeforeLineBreak`](http://jscs.info/rule/requireCommaBeforeLineBreak)
 
     ```javascript
     // bad
@@ -1747,7 +1747,7 @@ Other Style Guides
     };
     ```
 
-  - [19.2](#19.2) <a name='19.2'></a> Additional trailing comma: **Yup.** [`comma-dangle`](http://eslint.org/docs/rules/comma-dangle.html), [`requireTrailingComma`](http://jscs.info/rule/requireTrailingComma)
+  - [19.2](#19.2) <a name='19.2'></a> Additional trailing comma: **Yup.** eslint: [`comma-dangle`](http://eslint.org/docs/rules/comma-dangle.html) jscs: [`requireTrailingComma`](http://jscs.info/rule/requireTrailingComma)
 
     > Why? This leads to cleaner git diffs. Also, transpilers like Babel will remove the additional trailing comma in the transpiled code which means you don't have to worry about the [trailing comma problem](es5/README.md#commas) in legacy browsers.
 
@@ -1795,7 +1795,7 @@ Other Style Guides
 
 ## Semicolons
 
-  - [20.1](#20.1) <a name='20.1'></a> **Yup.** [`semi`](http://eslint.org/docs/rules/semi.html), [`requireSemicolons`](http://jscs.info/rule/requireSemicolons)
+  - [20.1](#20.1) <a name='20.1'></a> **Yup.** eslint: [`semi`](http://eslint.org/docs/rules/semi.html) jscs: [`requireSemicolons`](http://jscs.info/rule/requireSemicolons)
 
     ```javascript
     // bad
@@ -1837,7 +1837,7 @@ Other Style Guides
     const totalScore = String(this.reviewScore);
     ```
 
-  - [21.3](#21.3) <a name='21.3'></a> Numbers: Use `Number` for type casting and `parseInt` always with a radix for parsing strings. [`radix`](http://eslint.org/docs/rules/radix)
+  - [21.3](#21.3) <a name='21.3'></a> Numbers: Use `Number` for type casting and `parseInt` always with a radix for parsing strings. eslint: [`radix`](http://eslint.org/docs/rules/radix)
 
     ```javascript
     const inputValue = '4';
@@ -1915,7 +1915,7 @@ Other Style Guides
     }
     ```
 
-  - [22.2](#22.2) <a name='22.2'></a> Use camelCase when naming objects, functions, and instances. [`camelcase`](http://eslint.org/docs/rules/camelcase.html), `requireCamelCaseOrUpperCaseIdentifiers`](http://jscs.info/rule/requireCamelCaseOrUpperCaseIdentifiers)
+  - [22.2](#22.2) <a name='22.2'></a> Use camelCase when naming objects, functions, and instances. eslint: [`camelcase`](http://eslint.org/docs/rules/camelcase.html) jscs: [`requireCamelCaseOrUpperCaseIdentifiers`](http://jscs.info/rule/requireCamelCaseOrUpperCaseIdentifiers)
 
     ```javascript
     // bad
@@ -1928,7 +1928,7 @@ Other Style Guides
     function thisIsMyFunction() {}
     ```
 
-  - [22.3](#22.3) <a name='22.3'></a> Use PascalCase when naming constructors or classes. [`new-cap`](http://eslint.org/docs/rules/new-cap.html), [`requireCapitalizedConstructors`](http://jscs.info/rule/requireCapitalizedConstructors)
+  - [22.3](#22.3) <a name='22.3'></a> Use PascalCase when naming constructors or classes. eslint: [`new-cap`](http://eslint.org/docs/rules/new-cap.html) jscs: [`requireCapitalizedConstructors`](http://jscs.info/rule/requireCapitalizedConstructors)
 
     ```javascript
     // bad
@@ -1952,7 +1952,7 @@ Other Style Guides
     });
     ```
 
-  - [22.4](#22.4) <a name='22.4'></a> Use a leading underscore `_` when naming private properties. [`no-underscore-dangle`](http://eslint.org/docs/rules/no-underscore-dangle.html), [`disallowDanglingUnderscores`](http://jscs.info/rule/disallowDanglingUnderscores)
+  - [22.4](#22.4) <a name='22.4'></a> Use a leading underscore `_` when naming private properties. eslint: [`no-underscore-dangle`](http://eslint.org/docs/rules/no-underscore-dangle.html) jscs: [`disallowDanglingUnderscores`](http://jscs.info/rule/disallowDanglingUnderscores)
 
     ```javascript
     // bad
@@ -1963,7 +1963,7 @@ Other Style Guides
     this._firstName = 'Panda';
     ```
 
-  - [22.5](#22.5) <a name='22.5'></a> Don't save references to `this`. Use arrow functions or Function#bind. [`disallowNodeTypes`](http://jscs.info/rule/disallowNodeTypes)
+  - [22.5](#22.5) <a name='22.5'></a> Don't save references to `this`. Use arrow functions or Function#bind. jscs: [`disallowNodeTypes`](http://jscs.info/rule/disallowNodeTypes)
 
     ```javascript
     // bad
@@ -2122,7 +2122,7 @@ Other Style Guides
 
 ## jQuery
 
-  - [25.1](#25.1) <a name='25.1'></a> Prefix jQuery object variables with a `$`. [`requireDollarBeforejQueryAssignment`](http://jscs.info/rule/requireDollarBeforejQueryAssignment)
+  - [25.1](#25.1) <a name='25.1'></a> Prefix jQuery object variables with a `$`. jscs: [`requireDollarBeforejQueryAssignment`](http://jscs.info/rule/requireDollarBeforejQueryAssignment)
 
     ```javascript
     // bad

From 94776c35ebdddae3fba49d1ddd56f109a70dd2c3 Mon Sep 17 00:00:00 2001
From: Matt Brennan <mattyb1000@gmail.com>
Date: Tue, 26 Jan 2016 14:20:55 +0000
Subject: [PATCH 0455/1591] Remove language interpretable as an ableist slur

---
 react/README.md | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/react/README.md b/react/README.md
index 96edd521e3..ee9e32ca58 100644
--- a/react/README.md
+++ b/react/README.md
@@ -136,7 +136,7 @@
       superLongParam="bar"
       anotherSuperLongParam="baz"
     >
-      <Spazz />
+      <Quux />
     </Foo>
     ```
 

From da1d031ff8479e57da013a03e482d429e68519b3 Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Tue, 26 Jan 2016 15:03:13 -0800
Subject: [PATCH 0456/1591] [guide] [react] add a note preferring normal
 functions for functional stateless components.

---
 react/README.md | 7 ++++++-
 1 file changed, 6 insertions(+), 1 deletion(-)

diff --git a/react/README.md b/react/README.md
index ee9e32ca58..5ea9b5248c 100644
--- a/react/README.md
+++ b/react/README.md
@@ -47,7 +47,7 @@
     }
     ```
 
-    And if you don't have state or refs, prefer functions over classes:
+    And if you don't have state or refs, prefer normal functions (not arrow functions) over classes:
 
     ```javascript
 
@@ -58,6 +58,11 @@
       }
     }
 
+    // bad (since arrow functions do not have a "name" property)
+    const Listing = ({ hello }) => (
+      <div>{hello}</div>
+    );
+
     // good
     function Listing({ hello }) {
       return <div>{hello}</div>;

From 760e50704cebff4fa07e237d50a10d4fd8b0234a Mon Sep 17 00:00:00 2001
From: Ethan Rubio <ethanrubio@users.noreply.github.com>
Date: Tue, 26 Jan 2016 15:09:05 -0800
Subject: [PATCH 0457/1591] Fixed capitalization

Fixed capitalization of ES6 to match the rest of the README.
---
 README.md | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/README.md b/README.md
index 3abec0b1e9..0211792ca3 100644
--- a/README.md
+++ b/README.md
@@ -2193,7 +2193,7 @@ Other Style Guides
 
 ## ECMAScript 6 Styles
 
-  - [27.1](#27.1) <a name='27.1'></a> This is a collection of links to the various es6 features.
+  - [27.1](#27.1) <a name='27.1'></a> This is a collection of links to the various ES6 features.
 
 1. [Arrow Functions](#arrow-functions)
 1. [Classes](#constructors)

From 79a6bfa101848a6d8e7af45abf2063982c838ee0 Mon Sep 17 00:00:00 2001
From: LarryBattle <larry.battle.tech@gmail.com>
Date: Tue, 26 Jan 2016 23:53:51 -0600
Subject: [PATCH 0458/1591] Added names to invalid function declarations

---
 README.md | 12 ++++++------
 1 file changed, 6 insertions(+), 6 deletions(-)

diff --git a/README.md b/README.md
index 0211792ca3..b324226fa9 100644
--- a/README.md
+++ b/README.md
@@ -1267,10 +1267,10 @@ Other Style Guides
     }
 
     // bad
-    function () { return false; }
+    function foo() { return false; }
 
     // good
-    function () {
+    function bar() {
       return false;
     }
     ```
@@ -1410,17 +1410,17 @@ Other Style Guides
 
     ```javascript
     // bad
-    function () {
+    function foo() {
     ∙∙∙∙const name;
     }
 
     // bad
-    function () {
+    function bar() {
     ∙const name;
     }
 
     // good
-    function () {
+    function baz() {
     ∙∙const name;
     }
     ```
@@ -2216,7 +2216,7 @@ Other Style Guides
   - [28.1](#28.1) <a name="28.1"></a> **Yup.**
 
     ```javascript
-    function () {
+    function foo() {
       return true;
     }
     ```

From 784d029980003d1ff90b472abcd0974496d6d765 Mon Sep 17 00:00:00 2001
From: Fredrik Olovsson <fredrikolovsson@users.noreply.github.com>
Date: Wed, 27 Jan 2016 11:53:57 +0100
Subject: [PATCH 0459/1591] Edit sample code in 24.1 to follow rule 8.1

Replaced function expression with arrow function notation.
---
 README.md | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/README.md b/README.md
index b324226fa9..e8edf1497e 100644
--- a/README.md
+++ b/README.md
@@ -2099,7 +2099,7 @@ Other Style Guides
 
     ...
 
-    $(this).on('listingUpdated', function (e, listingId) {
+    $(this).on('listingUpdated', (e, listingId) => {
       // do something with listingId
     });
     ```
@@ -2112,7 +2112,7 @@ Other Style Guides
 
     ...
 
-    $(this).on('listingUpdated', function (e, data) {
+    $(this).on('listingUpdated', (e, data) => {
       // do something with data.listingId
     });
     ```

From 51510a43c83811406d2098f19e7af90a30918f64 Mon Sep 17 00:00:00 2001
From: Mark Sanghoon Kim <mark.s.kim@gmail.com>
Date: Wed, 27 Jan 2016 23:14:53 -0800
Subject: [PATCH 0460/1591] Fixed capitalization and comment spacing

Fixed line 1219 to have a lowercase 'a' to be consistent with the style guide.
Fixed line 1831 to only have one space between the // and the =>
---
 README.md | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/README.md b/README.md
index e8edf1497e..70eae71971 100644
--- a/README.md
+++ b/README.md
@@ -1216,7 +1216,7 @@ Other Style Guides
     ```javascript
     if ([0] && []) {
       // true
-      // An array (even an empty one) is an object, objects will evaluate to true
+      // an array (even an empty one) is an object, objects will evaluate to true
     }
     ```
 
@@ -1828,7 +1828,7 @@ Other Style Guides
   - [21.2](#21.2) <a name='21.2'></a> Strings:
 
     ```javascript
-    //  => this.reviewScore = 9;
+    // => this.reviewScore = 9;
 
     // bad
     const totalScore = this.reviewScore + '';

From 7eb7b785134aeae27c37c557a2342e8ee48242ad Mon Sep 17 00:00:00 2001
From: Prayag Verma <prayag.verma@gmail.com>
Date: Sat, 30 Jan 2016 10:42:33 +0530
Subject: [PATCH 0461/1591] Minor typo

Remove extra dot
---
 README.md | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/README.md b/README.md
index 70eae71971..a0f492a93a 100644
--- a/README.md
+++ b/README.md
@@ -683,7 +683,7 @@ Other Style Guides
 
     > Why? It creates a version of the function that executes in the context of `this`, which is usually what you want, and is a more concise syntax.
 
-    > Why not? If you have a fairly complicated function, you might move that logic out into its own function declaration..
+    > Why not? If you have a fairly complicated function, you might move that logic out into its own function declaration.
 
     ```javascript
     // bad

From d293e748725ee16fb1a96afd80b005c60e2781a0 Mon Sep 17 00:00:00 2001
From: Barry Gitarts <bgitarts@gmail.com>
Date: Mon, 11 Jan 2016 17:54:35 -0500
Subject: [PATCH 0462/1591] add section 15.5 - Ternaries

add link to the relevant eslint rule
---
 README.md | 23 +++++++++++++++++++++++
 1 file changed, 23 insertions(+)

diff --git a/README.md b/README.md
index a0f492a93a..da96b7979b 100644
--- a/README.md
+++ b/README.md
@@ -1246,6 +1246,29 @@ Other Style Guides
 
   - [15.4](#15.4) <a name='15.4'></a> For more information see [Truth Equality and JavaScript](http://javascriptweblog.wordpress.com/2011/02/07/truth-equality-and-javascript/#more-2108) by Angus Croll.
 
+  - [15.5](#15.5) <a name='15.5'></a> Ternaries should not be nested and generally be single line expressions.
+ 
+    eslint rules: [`no-nested-ternary`](http://eslint.org/docs/rules/no-nested-ternary.html).
+    
+    ```javascript
+    //bad
+    const foo = maybe1 > maybe2
+      ? "bar"
+      : value1 > value2 ? "baz" : null;
+     
+    //better
+    const maybeNull = value1 > value2 ? 'baz' : null;
+    
+    const foo = maybe1 > maybe2
+      ? 'bar'
+      : maybeNull;
+    
+    //best
+    const maybeNull = value1 > value2 ? 'baz' : null;
+    
+    const foo = maybe1 > maybe2 ? 'bar' : maybeNull;
+    ```
+    
 **[⬆ back to top](#table-of-contents)**
 
 

From 206e13b1855647c7c66e0a3809f5a8a0b93e54f1 Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Tue, 2 Feb 2016 10:33:18 -0800
Subject: [PATCH 0463/1591] [guide] remove trailing whitespace

---
 README.md | 14 +++++++-------
 1 file changed, 7 insertions(+), 7 deletions(-)

diff --git a/README.md b/README.md
index da96b7979b..b758421de8 100644
--- a/README.md
+++ b/README.md
@@ -1247,28 +1247,28 @@ Other Style Guides
   - [15.4](#15.4) <a name='15.4'></a> For more information see [Truth Equality and JavaScript](http://javascriptweblog.wordpress.com/2011/02/07/truth-equality-and-javascript/#more-2108) by Angus Croll.
 
   - [15.5](#15.5) <a name='15.5'></a> Ternaries should not be nested and generally be single line expressions.
- 
+
     eslint rules: [`no-nested-ternary`](http://eslint.org/docs/rules/no-nested-ternary.html).
-    
+
     ```javascript
     //bad
     const foo = maybe1 > maybe2
       ? "bar"
       : value1 > value2 ? "baz" : null;
-     
+
     //better
     const maybeNull = value1 > value2 ? 'baz' : null;
-    
+
     const foo = maybe1 > maybe2
       ? 'bar'
       : maybeNull;
-    
+
     //best
     const maybeNull = value1 > value2 ? 'baz' : null;
-    
+
     const foo = maybe1 > maybe2 ? 'bar' : maybeNull;
     ```
-    
+
 **[⬆ back to top](#table-of-contents)**
 
 

From 38d9b34b2720a2f26e9fa33365836e26d9a7a44e Mon Sep 17 00:00:00 2001
From: Joe Lencioni <joe.lencioni@airbnb.com>
Date: Tue, 2 Feb 2016 15:30:57 -0800
Subject: [PATCH 0464/1591] Avoid lexical declarations in case/default clauses

This commit adds guidance warning people to avoid lexical declarations
in case/default clauses and enables the corresponding ESLint rule.

  http://eslint.org/docs/rules/no-case-declarations.html

We didn't have a section on switch statements yet, so I thought about
starting one. It seemed like it would best fit between section 15
(Comparison Operators & Equality) and section 16 (Blocks), but I didn't
want to mess up all of the following numberings, since people probably
have references to them. I considered adding this near the end to
minimize this effect, but it really seemed to belong near these other
things. I landed on appending it to Section 15 (Comparison Operators &
Equality) and I think it sorta fits there since switch statements are a
related concept.
---
 README.md                                     | 41 +++++++++++++++++++
 .../rules/best-practices.js                   |  2 +
 2 files changed, 43 insertions(+)

diff --git a/README.md b/README.md
index b758421de8..381d5c6b94 100644
--- a/README.md
+++ b/README.md
@@ -1245,6 +1245,47 @@ Other Style Guides
     ```
 
   - [15.4](#15.4) <a name='15.4'></a> For more information see [Truth Equality and JavaScript](http://javascriptweblog.wordpress.com/2011/02/07/truth-equality-and-javascript/#more-2108) by Angus Croll.
+  - [15.5](#15.5) <a name='15.5'></a> Use braces to create blocks in `case` and `default` clauses that contain lexical declarations (e.g. `let`, `const`, `function`, and `class`).
+
+  > Why? Lexical declarations are visible in the entire `switch` block but only get initialized when assigned, which only happens when its `case` is reached. This causes problems when multiple `case` clauses attempt to define the same thing.
+
+  eslint rules: [`no-case-declarations`](http://eslint.org/docs/rules/no-case-declarations.html).
+
+    ```javascript
+    // bad
+    switch (foo) {
+      case 1:
+        let x = 1;
+        break;
+      case 2:
+        const y = 2;
+        break;
+      case 3:
+        function f() {}
+        break;
+      default:
+        class C {}
+    }
+
+    // good
+    switch (foo) {
+      case 1: {
+        let x = 1;
+        break;
+      }
+      case 2: {
+        const y = 2;
+        break;
+      }
+      case 3: {
+        function f() {}
+        break;
+      }
+      default: {
+        class C {}
+      }
+    }
+    ```
 
   - [15.5](#15.5) <a name='15.5'></a> Ternaries should not be nested and generally be single line expressions.
 
diff --git a/packages/eslint-config-airbnb/rules/best-practices.js b/packages/eslint-config-airbnb/rules/best-practices.js
index c2af1b7875..d8b94e9bf0 100644
--- a/packages/eslint-config-airbnb/rules/best-practices.js
+++ b/packages/eslint-config-airbnb/rules/best-practices.js
@@ -24,6 +24,8 @@ module.exports = {
     'no-alert': 1,
     // disallow use of arguments.caller or arguments.callee
     'no-caller': 2,
+    // disallow lexical declarations in case/default clauses
+    'no-case-declaration': 2,
     // disallow division operators explicitly at beginning of regular expression
     'no-div-regex': 0,
     // disallow else after a return in an if

From 4d74fe1f5ab7e2f67e4ad837387debbf276e3929 Mon Sep 17 00:00:00 2001
From: Joe Lencioni <joe.lencioni@airbnb.com>
Date: Wed, 3 Feb 2016 12:23:51 -0800
Subject: [PATCH 0465/1591] Add example of a case clause that does not need a
 block

As @kesne and @ljharb pointed out, this section was unclear about
whether or not you should always include blocks for all case clauses. To
make things clearer, I am adding a case clause that does not need a
block to the good example.

We decided that we should only require blocks for case clauses that
actually need them because it matches the as-needed spirit of section
3.8 ("Only quote properties that are invalid identifiers"). Perhaps if
there was an as-needed but consistent setting for the ESLint rule, we
would consider revising this a little, but this seems good enough for
now.
---
 README.md | 3 +++
 1 file changed, 3 insertions(+)

diff --git a/README.md b/README.md
index 381d5c6b94..9920eba790 100644
--- a/README.md
+++ b/README.md
@@ -1281,6 +1281,9 @@ Other Style Guides
         function f() {}
         break;
       }
+      case 4:
+        bar();
+        break;
       default: {
         class C {}
       }

From 7e15ccf4cb39d370e085c860901cce5d9d01d810 Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Wed, 13 Jan 2016 16:27:12 -0800
Subject: [PATCH 0466/1591] [eslint config] [breaking] disallow unneeded
 ternary expressions.

---
 README.md                                    | 22 +++++++++++++++++---
 packages/eslint-config-airbnb/rules/style.js |  4 +++-
 2 files changed, 22 insertions(+), 4 deletions(-)

diff --git a/README.md b/README.md
index 9920eba790..67e9589b06 100644
--- a/README.md
+++ b/README.md
@@ -1295,24 +1295,40 @@ Other Style Guides
     eslint rules: [`no-nested-ternary`](http://eslint.org/docs/rules/no-nested-ternary.html).
 
     ```javascript
-    //bad
+    // bad
     const foo = maybe1 > maybe2
       ? "bar"
       : value1 > value2 ? "baz" : null;
 
-    //better
+    // better
     const maybeNull = value1 > value2 ? 'baz' : null;
 
     const foo = maybe1 > maybe2
       ? 'bar'
       : maybeNull;
 
-    //best
+    // best
     const maybeNull = value1 > value2 ? 'baz' : null;
 
     const foo = maybe1 > maybe2 ? 'bar' : maybeNull;
     ```
 
+  - [15.6](#15.6) <a name='15.6'></a> Avoid unneeded ternary statements.
+
+    eslint rules: [`no-unneeded-ternary`](http://eslint.org/docs/rules/no-unneeded-ternary.html).
+
+    ```javascript
+    // bad
+    const foo = a ? a : b;
+    const bar = c ? true : false;
+    const baz = c ? false : true;
+
+    // good
+    const foo = a || b;
+    const bar = !!c;
+    const baz = !c;
+    ```
+
 **[⬆ back to top](#table-of-contents)**
 
 
diff --git a/packages/eslint-config-airbnb/rules/style.js b/packages/eslint-config-airbnb/rules/style.js
index 2e3e3cae1b..e1dce37dc7 100644
--- a/packages/eslint-config-airbnb/rules/style.js
+++ b/packages/eslint-config-airbnb/rules/style.js
@@ -74,7 +74,9 @@ module.exports = {
     // disallow dangling underscores in identifiers
     'no-underscore-dangle': 0,
     // disallow the use of Boolean literals in conditional expressions
-    'no-unneeded-ternary': 0,
+    // also, prefer `a || b` over `a ? a : b`
+    // http://eslint.org/docs/rules/no-unneeded-ternary
+    'no-unneeded-ternary': [2, { "defaultAssignment": false }],
     // require padding inside curly braces
     'object-curly-spacing': [2, 'always'],
     // allow just one var statement per function

From b6920af58119409c7983f0fa4ea566ee58349a61 Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Wed, 3 Feb 2016 17:26:33 -0800
Subject: [PATCH 0467/1591] [eslint config] [dev deps] update
 `eslint-plugin-react`, `react`, `tape`

---
 packages/eslint-config-airbnb/package.json | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/packages/eslint-config-airbnb/package.json b/packages/eslint-config-airbnb/package.json
index 63439f6b62..24c7a14e55 100644
--- a/packages/eslint-config-airbnb/package.json
+++ b/packages/eslint-config-airbnb/package.json
@@ -40,9 +40,9 @@
   "devDependencies": {
     "babel-tape-runner": "1.2.0",
     "eslint": "^1.10.3",
-    "eslint-plugin-react": "^3.12.0",
-    "react": "^0.13.3",
-    "tape": "^4.2.2",
+    "eslint-plugin-react": "^3.16.1",
+    "react": "^0.14.7",
+    "tape": "^4.4.0",
     "parallelshell": "^2.0.0"
   },
   "peerDependencies": {

From 6f1d92851c56752cf5c8bcad134cccea8fbd6ce0 Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Wed, 3 Feb 2016 18:27:59 -0800
Subject: [PATCH 0468/1591] [eslint config] [fix]
 `s/no-case-declaration/no-case-declarations/g` (from #712)

---
 packages/eslint-config-airbnb/rules/best-practices.js | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/packages/eslint-config-airbnb/rules/best-practices.js b/packages/eslint-config-airbnb/rules/best-practices.js
index d8b94e9bf0..a221d4d999 100644
--- a/packages/eslint-config-airbnb/rules/best-practices.js
+++ b/packages/eslint-config-airbnb/rules/best-practices.js
@@ -25,7 +25,8 @@ module.exports = {
     // disallow use of arguments.caller or arguments.callee
     'no-caller': 2,
     // disallow lexical declarations in case/default clauses
-    'no-case-declaration': 2,
+    // http://eslint.org/docs/rules/no-case-declarations.html
+    'no-case-declarations': 2,
     // disallow division operators explicitly at beginning of regular expression
     'no-div-regex': 0,
     // disallow else after a return in an if

From a8461e045328daf2ae8b007301d9cbb6607383bc Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Wed, 3 Feb 2016 18:28:07 -0800
Subject: [PATCH 0469/1591] [eslint config] [fix] fix `npm run lint`

---
 packages/eslint-config-airbnb/rules/style.js | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/packages/eslint-config-airbnb/rules/style.js b/packages/eslint-config-airbnb/rules/style.js
index e1dce37dc7..25c5326857 100644
--- a/packages/eslint-config-airbnb/rules/style.js
+++ b/packages/eslint-config-airbnb/rules/style.js
@@ -76,7 +76,7 @@ module.exports = {
     // disallow the use of Boolean literals in conditional expressions
     // also, prefer `a || b` over `a ? a : b`
     // http://eslint.org/docs/rules/no-unneeded-ternary
-    'no-unneeded-ternary': [2, { "defaultAssignment": false }],
+    'no-unneeded-ternary': [2, { 'defaultAssignment': false }],
     // require padding inside curly braces
     'object-curly-spacing': [2, 'always'],
     // allow just one var statement per function

From 06fab80dfabdf2695ec29a035d85dfccd31d9222 Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Wed, 3 Feb 2016 17:27:52 -0800
Subject: [PATCH 0470/1591] v5.0.0

---
 packages/eslint-config-airbnb/CHANGELOG.md | 6 ++++++
 packages/eslint-config-airbnb/package.json | 2 +-
 2 files changed, 7 insertions(+), 1 deletion(-)

diff --git a/packages/eslint-config-airbnb/CHANGELOG.md b/packages/eslint-config-airbnb/CHANGELOG.md
index e9d0220666..75febddbd9 100644
--- a/packages/eslint-config-airbnb/CHANGELOG.md
+++ b/packages/eslint-config-airbnb/CHANGELOG.md
@@ -1,3 +1,9 @@
+5.0.0 / 2016-02-03
+==================
+ - [breaking] disallow unneeded ternary expressions
+ - [breaking] Avoid lexical declarations in case/default clauses
+ - [dev deps] update `babel-tape-runner`, `eslint-plugin-react`, `react`, `tape`
+
 4.0.0 / 2016-01-22
 ==================
  - [breaking] require outer IIFE wrapping; flesh out guide section
diff --git a/packages/eslint-config-airbnb/package.json b/packages/eslint-config-airbnb/package.json
index 24c7a14e55..437f1d1db0 100644
--- a/packages/eslint-config-airbnb/package.json
+++ b/packages/eslint-config-airbnb/package.json
@@ -1,6 +1,6 @@
 {
   "name": "eslint-config-airbnb",
-  "version": "4.0.0",
+  "version": "5.0.0",
   "description": "Airbnb's ESLint config, following our styleguide",
   "main": "index.js",
   "scripts": {

From 24e7fd0c147eeb9a2082301af09d44a56b181cf0 Mon Sep 17 00:00:00 2001
From: Ray Sinlao <raysinlao@gmail.com>
Date: Thu, 4 Feb 2016 00:00:58 -0800
Subject: [PATCH 0471/1591] Added parenthesis to 'good' example in 8.2

---
 README.md | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/README.md b/README.md
index 67e9589b06..32c966ce98 100644
--- a/README.md
+++ b/README.md
@@ -716,7 +716,7 @@ Other Style Guides
     });
 
     // good
-    [1, 2, 3].map(number => {
+    [1, 2, 3].map((number) => {
       const nextNumber = number + 1;
       return `A string containing the ${nextNumber}.`;
     });

From e007ec5be9f54c2a0fdfcfc6e8f193f0ceb11692 Mon Sep 17 00:00:00 2001
From: Joe Lencioni <joe.lencioni@airbnb.com>
Date: Thu, 4 Feb 2016 11:01:17 -0800
Subject: [PATCH 0472/1591] Sort static methods above constructor for React

I think it makes more sense to put static methods above the constructor
in classes. I would like to update the ESLint configuration to match
this, but it looks like the react/sort-comp rule does not support it
quite yet.

  https://github.com/yannickcr/eslint-plugin-react/issues/128
---
 react/README.md | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/react/README.md b/react/README.md
index 5ea9b5248c..e0351f42a7 100644
--- a/react/README.md
+++ b/react/README.md
@@ -334,8 +334,8 @@
 
   - Ordering for `class extends React.Component`:
 
-  1. `constructor`
   1. optional `static` methods
+  1. `constructor`
   1. `getChildContext`
   1. `componentWillMount`
   1. `componentDidMount`

From 1bb72ab9e27e5437373b15e643a4602d009bf7ed Mon Sep 17 00:00:00 2001
From: Harrison Shoff <hi@hshoff.com>
Date: Fri, 12 Feb 2016 11:09:39 -0800
Subject: [PATCH 0473/1591] [Deps] update `eslint` to v2, `eslint-plugin-react`
 to v4

---
 packages/eslint-config-airbnb/package.json | 8 ++++----
 1 file changed, 4 insertions(+), 4 deletions(-)

diff --git a/packages/eslint-config-airbnb/package.json b/packages/eslint-config-airbnb/package.json
index 6b5cad58b5..dd54ae754e 100644
--- a/packages/eslint-config-airbnb/package.json
+++ b/packages/eslint-config-airbnb/package.json
@@ -43,14 +43,14 @@
   "homepage": "https://github.com/airbnb/javascript",
   "devDependencies": {
     "babel-tape-runner": "1.2.0",
-    "eslint": "^1.10.3",
-    "eslint-plugin-react": "^3.16.1",
+    "eslint": "^2.2.0",
+    "eslint-plugin-react": "^4.0.0",
     "react": "^0.14.7",
     "tape": "^4.4.0",
     "parallelshell": "^2.0.0"
   },
   "peerDependencies": {
-    "eslint": "^1.0.0",
-    "eslint-plugin-react": "^3.16.1"
+    "eslint": "^2.2.0",
+    "eslint-plugin-react": "^4.0.0"
   }
 }

From d49a1ed670bc1d26a78edc99b9a3b553db9bc13e Mon Sep 17 00:00:00 2001
From: Harrison Shoff <hi@hshoff.com>
Date: Fri, 12 Feb 2016 11:10:30 -0800
Subject: [PATCH 0474/1591] [eslint-v2] no-empty-label => no-labels

---
 packages/eslint-config-airbnb/rules/best-practices.js | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/packages/eslint-config-airbnb/rules/best-practices.js b/packages/eslint-config-airbnb/rules/best-practices.js
index a221d4d999..1359e58ba6 100644
--- a/packages/eslint-config-airbnb/rules/best-practices.js
+++ b/packages/eslint-config-airbnb/rules/best-practices.js
@@ -32,7 +32,7 @@ module.exports = {
     // disallow else after a return in an if
     'no-else-return': 2,
     // disallow use of labels for anything other then loops and switches
-    'no-empty-label': 2,
+    "no-labels": [2, {"allowLoop": false, "allowSwitch": false}],
     // disallow comparisons to null without a type-checking operator
     'no-eq-null': 0,
     // disallow use of eval()

From 1efb11ca93e6fd3d22c3a09825fcd4c7c3c896e8 Mon Sep 17 00:00:00 2001
From: Harrison Shoff <hi@hshoff.com>
Date: Fri, 12 Feb 2016 11:11:22 -0800
Subject: [PATCH 0475/1591] [eslint-v2] space-after/before/return/throw/case =>
 keyword-spacing

---
 packages/eslint-config-airbnb/rules/style.js | 12 ++++++------
 1 file changed, 6 insertions(+), 6 deletions(-)

diff --git a/packages/eslint-config-airbnb/rules/style.js b/packages/eslint-config-airbnb/rules/style.js
index 25c5326857..e97e0d25f8 100644
--- a/packages/eslint-config-airbnb/rules/style.js
+++ b/packages/eslint-config-airbnb/rules/style.js
@@ -100,10 +100,12 @@ module.exports = {
     'semi': [2, 'always'],
     // sort variables within the same declaration block
     'sort-vars': 0,
-    // require a space before certain keywords
-    'space-before-keywords': [2, 'always'],
-    // require a space after certain keywords
-    'space-after-keywords': [2, 'always'],
+    // require a space before & after certain keywords
+    "keyword-spacing": [2, {"before": true, "after": true, "overrides": {
+      'return': {'after': true},
+      'throw': {'after': true},
+      'case': {'after': true}
+    }}],
     // require or disallow space before blocks
     'space-before-blocks': 2,
     // require or disallow space before function opening parenthesis
@@ -113,8 +115,6 @@ module.exports = {
     'space-in-parens': [2, 'never'],
     // require spaces around operators
     'space-infix-ops': 2,
-    // require a space after return, throw, and case
-    'space-return-throw-case': 2,
     // Require or disallow spaces before/after unary operators
     'space-unary-ops': 0,
     // require or disallow a space immediately following the // or /* in a comment

From da4213c6dd6b842f72171fc669007185e03902d8 Mon Sep 17 00:00:00 2001
From: Harrison Shoff <hi@hshoff.com>
Date: Fri, 12 Feb 2016 11:29:20 -0800
Subject: [PATCH 0476/1591] [eslint-v2] fix no-labels rule

---
 packages/eslint-config-airbnb/rules/best-practices.js | 4 +---
 1 file changed, 1 insertion(+), 3 deletions(-)

diff --git a/packages/eslint-config-airbnb/rules/best-practices.js b/packages/eslint-config-airbnb/rules/best-practices.js
index 1359e58ba6..d87d70d82c 100644
--- a/packages/eslint-config-airbnb/rules/best-practices.js
+++ b/packages/eslint-config-airbnb/rules/best-practices.js
@@ -32,7 +32,7 @@ module.exports = {
     // disallow else after a return in an if
     'no-else-return': 2,
     // disallow use of labels for anything other then loops and switches
-    "no-labels": [2, {"allowLoop": false, "allowSwitch": false}],
+    'no-labels': [2, { 'allowLoop': true, 'allowSwitch': true }],
     // disallow comparisons to null without a type-checking operator
     'no-eq-null': 0,
     // disallow use of eval()
@@ -53,8 +53,6 @@ module.exports = {
     'no-invalid-this': 0,
     // disallow usage of __iterator__ property
     'no-iterator': 2,
-    // disallow use of labeled statements
-    'no-labels': 2,
     // disallow unnecessary nested blocks
     'no-lone-blocks': 2,
     // disallow creation of functions within loops

From dff50992380894e9056fe03b5300f83c47b4c761 Mon Sep 17 00:00:00 2001
From: Harrison Shoff <hi@hshoff.com>
Date: Fri, 12 Feb 2016 11:30:11 -0800
Subject: [PATCH 0477/1591] [eslint-v2] set es6 env to true

---
 packages/eslint-config-airbnb/rules/es6.js | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/packages/eslint-config-airbnb/rules/es6.js b/packages/eslint-config-airbnb/rules/es6.js
index f28a436ba3..508257a5bf 100644
--- a/packages/eslint-config-airbnb/rules/es6.js
+++ b/packages/eslint-config-airbnb/rules/es6.js
@@ -1,6 +1,6 @@
 module.exports = {
   'env': {
-    'es6': false
+    'es6': true
   },
   'ecmaFeatures': {
     'arrowFunctions': true,

From 4f32315b24e9545a4e5f8c226a989dbafc1c2099 Mon Sep 17 00:00:00 2001
From: Harrison Shoff <hi@hshoff.com>
Date: Fri, 12 Feb 2016 11:36:08 -0800
Subject: [PATCH 0478/1591] [eslint-v2] ecmaFeatures => parserOptions

---
 packages/eslint-config-airbnb/rules/es6.js | 24 ++++++----------------
 1 file changed, 6 insertions(+), 18 deletions(-)

diff --git a/packages/eslint-config-airbnb/rules/es6.js b/packages/eslint-config-airbnb/rules/es6.js
index 508257a5bf..508885708b 100644
--- a/packages/eslint-config-airbnb/rules/es6.js
+++ b/packages/eslint-config-airbnb/rules/es6.js
@@ -2,24 +2,12 @@ module.exports = {
   'env': {
     'es6': true
   },
-  'ecmaFeatures': {
-    'arrowFunctions': true,
-    'blockBindings': true,
-    'classes': true,
-    'defaultParams': true,
-    'destructuring': true,
-    'forOf': true,
-    'generators': false,
-    'modules': true,
-    'objectLiteralComputedProperties': true,
-    'objectLiteralDuplicateProperties': false,
-    'objectLiteralShorthandMethods': true,
-    'objectLiteralShorthandProperties': true,
-    'restParams': true,
-    'spread': true,
-    'superInFunctions': true,
-    'templateStrings': true,
-    'jsx': true
+  'parserOptions': {
+    'ecmaVersion': 6,
+    'sourceType': 'module',
+    'ecmaFeatures': {
+      'jsx': true
+    }
   },
   'rules': {
     // enforces no braces where they can be omitted

From 3aa8c584871474a5bacbc32158e8e76d1ccf94df Mon Sep 17 00:00:00 2001
From: Harrison Shoff <hi@hshoff.com>
Date: Fri, 12 Feb 2016 11:36:26 -0800
Subject: [PATCH 0479/1591] [eslint-v2] fix keyword-spacing style and sorting

---
 packages/eslint-config-airbnb/rules/style.js | 16 ++++++++++------
 1 file changed, 10 insertions(+), 6 deletions(-)

diff --git a/packages/eslint-config-airbnb/rules/style.js b/packages/eslint-config-airbnb/rules/style.js
index e97e0d25f8..0e8036ec51 100644
--- a/packages/eslint-config-airbnb/rules/style.js
+++ b/packages/eslint-config-airbnb/rules/style.js
@@ -31,6 +31,16 @@ module.exports = {
     'jsx-quotes': [2, 'prefer-double'],
     // enforces spacing between keys and values in object literal properties
     'key-spacing': [2, { 'beforeColon': false, 'afterColon': true }],
+    // require a space before & after certain keywords
+    'keyword-spacing': [2, {
+      'before': true,
+      'after': true,
+      'overrides': {
+        'return': { 'after': true },
+        'throw': { 'after': true },
+        'case': { 'after': true }
+      }
+    }],
     // enforces empty lines around comments
     'lines-around-comment': 0,
     // disallow mixed 'LF' and 'CRLF' as linebreaks
@@ -100,12 +110,6 @@ module.exports = {
     'semi': [2, 'always'],
     // sort variables within the same declaration block
     'sort-vars': 0,
-    // require a space before & after certain keywords
-    "keyword-spacing": [2, {"before": true, "after": true, "overrides": {
-      'return': {'after': true},
-      'throw': {'after': true},
-      'case': {'after': true}
-    }}],
     // require or disallow space before blocks
     'space-before-blocks': 2,
     // require or disallow space before function opening parenthesis

From d952efed242e9f4e25f3a4b45b7f62075a1a26e2 Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Sat, 13 Feb 2016 11:10:48 -0800
Subject: [PATCH 0480/1591] [Fix] `eslint` peerDep should not include breaking
 changes.

---
 packages/eslint-config-airbnb/package.json | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/packages/eslint-config-airbnb/package.json b/packages/eslint-config-airbnb/package.json
index 437f1d1db0..467b916eec 100644
--- a/packages/eslint-config-airbnb/package.json
+++ b/packages/eslint-config-airbnb/package.json
@@ -46,6 +46,7 @@
     "parallelshell": "^2.0.0"
   },
   "peerDependencies": {
-    "eslint": ">=1.0.0"
+    "eslint": "^1.0.0",
+    "eslint-plugin-react": "^3.16.1"
   }
 }

From 8b58d8770cc1dcb3a2e4a7b7be94ea84d4dc3c4c Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Sat, 13 Feb 2016 11:11:39 -0800
Subject: [PATCH 0481/1591] v5.0.1

---
 packages/eslint-config-airbnb/CHANGELOG.md | 4 ++++
 packages/eslint-config-airbnb/package.json | 2 +-
 2 files changed, 5 insertions(+), 1 deletion(-)

diff --git a/packages/eslint-config-airbnb/CHANGELOG.md b/packages/eslint-config-airbnb/CHANGELOG.md
index 75febddbd9..7c47c680f5 100644
--- a/packages/eslint-config-airbnb/CHANGELOG.md
+++ b/packages/eslint-config-airbnb/CHANGELOG.md
@@ -1,3 +1,7 @@
+5.0.1 / 2016-02-13
+==================
+ - [fix] `eslint` peerDep should not include breaking changes
+
 5.0.0 / 2016-02-03
 ==================
  - [breaking] disallow unneeded ternary expressions
diff --git a/packages/eslint-config-airbnb/package.json b/packages/eslint-config-airbnb/package.json
index 467b916eec..c8263acf29 100644
--- a/packages/eslint-config-airbnb/package.json
+++ b/packages/eslint-config-airbnb/package.json
@@ -1,6 +1,6 @@
 {
   "name": "eslint-config-airbnb",
-  "version": "5.0.0",
+  "version": "5.0.1",
   "description": "Airbnb's ESLint config, following our styleguide",
   "main": "index.js",
   "scripts": {

From aa9add108e71dc69c9baa984894ce5914c973251 Mon Sep 17 00:00:00 2001
From: Harrison Shoff <hi@hshoff.com>
Date: Fri, 12 Feb 2016 11:37:39 -0800
Subject: [PATCH 0482/1591] [pkg] add harry to contributors

---
 packages/eslint-config-airbnb/package.json | 4 ++++
 1 file changed, 4 insertions(+)

diff --git a/packages/eslint-config-airbnb/package.json b/packages/eslint-config-airbnb/package.json
index c8263acf29..6b5cad58b5 100644
--- a/packages/eslint-config-airbnb/package.json
+++ b/packages/eslint-config-airbnb/package.json
@@ -30,6 +30,10 @@
       "name": "Jordan Harband",
       "email": "ljharb@gmail.com",
       "url": "http://ljharb.codes"
+    },
+    {
+      "name": "Harrison Shoff",
+      "url": "https://twitter.com/hshoff"
     }
   ],
   "license": "MIT",

From 75807b9d5ead326be45f4719d81bda52d2bbb32a Mon Sep 17 00:00:00 2001
From: Harrison Shoff <hi@hshoff.com>
Date: Fri, 12 Feb 2016 11:42:15 -0800
Subject: [PATCH 0483/1591] [eslint-v2] no gens, no dup props in obj literal

---
 packages/eslint-config-airbnb/rules/es6.js | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

diff --git a/packages/eslint-config-airbnb/rules/es6.js b/packages/eslint-config-airbnb/rules/es6.js
index 508885708b..08b5889172 100644
--- a/packages/eslint-config-airbnb/rules/es6.js
+++ b/packages/eslint-config-airbnb/rules/es6.js
@@ -6,7 +6,9 @@ module.exports = {
     'ecmaVersion': 6,
     'sourceType': 'module',
     'ecmaFeatures': {
-      'jsx': true
+      'jsx': true,
+      'generators': false,
+      'objectLiteralDuplicateProperties': false
     }
   },
   'rules': {

From 5109c849268020266b300229d7efd2de50f94c21 Mon Sep 17 00:00:00 2001
From: Harrison Shoff <hi@hshoff.com>
Date: Sat, 13 Feb 2016 13:41:52 -0800
Subject: [PATCH 0484/1591] [eslint-v2] fix no-labels rule

---
 packages/eslint-config-airbnb/rules/best-practices.js | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/packages/eslint-config-airbnb/rules/best-practices.js b/packages/eslint-config-airbnb/rules/best-practices.js
index d87d70d82c..00f7d2d988 100644
--- a/packages/eslint-config-airbnb/rules/best-practices.js
+++ b/packages/eslint-config-airbnb/rules/best-practices.js
@@ -32,7 +32,7 @@ module.exports = {
     // disallow else after a return in an if
     'no-else-return': 2,
     // disallow use of labels for anything other then loops and switches
-    'no-labels': [2, { 'allowLoop': true, 'allowSwitch': true }],
+    'no-labels': [2, { 'allowLoop': false, 'allowSwitch': false }],
     // disallow comparisons to null without a type-checking operator
     'no-eq-null': 0,
     // disallow use of eval()

From 1cbc628c49fe8e9540028f8a560b43ebdd08c82b Mon Sep 17 00:00:00 2001
From: Harrison Shoff <hi@hshoff.com>
Date: Sat, 13 Feb 2016 13:57:38 -0800
Subject: [PATCH 0485/1591] [eslint-v2][constructors] disallow unnecessary
 constructors

---
 README.md                                  | 24 ++++++++++++++++++++++
 packages/eslint-config-airbnb/rules/es6.js |  3 +++
 2 files changed, 27 insertions(+)

diff --git a/README.md b/README.md
index 32c966ce98..952b135a24 100644
--- a/README.md
+++ b/README.md
@@ -883,6 +883,30 @@ Other Style Guides
     }
     ```
 
+  - [9.5](#9.5) <a name='9.5'></a> Classes have a default constructor if one is not specified. An empty constructor function or one that just delegates to a parent class is unnecessary.
+
+    ```javascript
+    // bad
+    class Jedi {
+      constructor() {}
+
+      getName() {
+        return this.name;
+      }
+    }
+
+    // good
+    class Rey extends Jedi {
+      constructor(...args) {
+        super(...args);
+      }
+
+      getName() {
+        return this.name;
+      }
+    }
+    ```
+
 **[⬆ back to top](#table-of-contents)**
 
 
diff --git a/packages/eslint-config-airbnb/rules/es6.js b/packages/eslint-config-airbnb/rules/es6.js
index 08b5889172..f55d6b9bac 100644
--- a/packages/eslint-config-airbnb/rules/es6.js
+++ b/packages/eslint-config-airbnb/rules/es6.js
@@ -34,6 +34,9 @@ module.exports = {
     'no-this-before-super': 0,
     // require let or const instead of var
     'no-var': 2,
+    // disallow unnecessary constructor
+    // http://eslint.org/docs/rules/no-useless-constructor
+    'no-useless-constructor': 2,
     // require method and property shorthand syntax for object literals
     // https://github.com/eslint/eslint/blob/master/docs/rules/object-shorthand.md
     'object-shorthand': [2, 'always'],

From 91b83650b006764d1b235b79c265151c8b00ba19 Mon Sep 17 00:00:00 2001
From: Harrison Shoff <hi@hshoff.com>
Date: Sun, 14 Feb 2016 02:34:47 -0800
Subject: [PATCH 0486/1591] [eslint-v2][constructors] fix bad + good examples

---
 README.md | 9 ++++++---
 1 file changed, 6 insertions(+), 3 deletions(-)

diff --git a/README.md b/README.md
index 952b135a24..46e783580b 100644
--- a/README.md
+++ b/README.md
@@ -895,14 +895,17 @@ Other Style Guides
       }
     }
 
-    // good
     class Rey extends Jedi {
       constructor(...args) {
         super(...args);
       }
+    }
 
-      getName() {
-        return this.name;
+    // good
+    class Rey extends Jedi {
+      constructor(...args) {
+        super(...args);
+        this.name = 'Rey';
       }
     }
     ```

From c05b2da9db51dc160b45c72faf317cb2f5604660 Mon Sep 17 00:00:00 2001
From: Harrison Shoff <hi@hshoff.com>
Date: Sun, 14 Feb 2016 02:50:51 -0800
Subject: [PATCH 0487/1591] [eslint-v2] add new rules, disabled:

 - `id-blacklist`
 - `no-extra-label`
 - `no-implicit-globals`
 - `no-restricted-imports`
 - `no-unmodified-loop-condition`
 - `no-unused-labels`
 - `sort-imports`
 - `yield-star-spacing`
---
 .../eslint-config-airbnb/rules/best-practices.js | 16 ++++++++++++++--
 packages/eslint-config-airbnb/rules/es6.js       | 11 ++++++++++-
 packages/eslint-config-airbnb/rules/variables.js |  3 +++
 3 files changed, 27 insertions(+), 3 deletions(-)

diff --git a/packages/eslint-config-airbnb/rules/best-practices.js b/packages/eslint-config-airbnb/rules/best-practices.js
index 00f7d2d988..845904206e 100644
--- a/packages/eslint-config-airbnb/rules/best-practices.js
+++ b/packages/eslint-config-airbnb/rules/best-practices.js
@@ -20,6 +20,9 @@ module.exports = {
     'eqeqeq': 2,
     // make sure for-in loops have an if statement
     'guard-for-in': 2,
+    // Blacklist certain identifiers to prevent them being used
+    // http://eslint.org/docs/rules/id-blacklist
+    'id-blacklist': 0,
     // disallow the use of alert, confirm, and prompt
     'no-alert': 1,
     // disallow use of arguments.caller or arguments.callee
@@ -31,8 +34,9 @@ module.exports = {
     'no-div-regex': 0,
     // disallow else after a return in an if
     'no-else-return': 2,
-    // disallow use of labels for anything other then loops and switches
-    'no-labels': [2, { 'allowLoop': false, 'allowSwitch': false }],
+    // disallow Unnecessary Labels
+    // http://eslint.org/docs/rules/no-extra-label
+    'no-extra-label': 0,
     // disallow comparisons to null without a type-checking operator
     'no-eq-null': 0,
     // disallow use of eval()
@@ -53,6 +57,8 @@ module.exports = {
     'no-invalid-this': 0,
     // disallow usage of __iterator__ property
     'no-iterator': 2,
+    // disallow use of labels for anything other then loops and switches
+    'no-labels': [2, { 'allowLoop': false, 'allowSwitch': false }],
     // disallow unnecessary nested blocks
     'no-lone-blocks': 2,
     // disallow creation of functions within loops
@@ -94,8 +100,14 @@ module.exports = {
     'no-sequences': 2,
     // restrict what can be thrown as an exception
     'no-throw-literal': 2,
+    // disallow unmodified conditions of loops
+    // http://eslint.org/docs/rules/no-unmodified-loop-condition
+    'no-unmodified-loop-condition': 0,
     // disallow usage of expressions in statement position
     'no-unused-expressions': 2,
+    // disallow unused labels
+    // http://eslint.org/docs/rules/no-unused-labels
+    'no-unused-labels': 0,
     // disallow unnecessary .call() and .apply()
     'no-useless-call': 0,
     // disallow use of void operator
diff --git a/packages/eslint-config-airbnb/rules/es6.js b/packages/eslint-config-airbnb/rules/es6.js
index f55d6b9bac..11e212b5eb 100644
--- a/packages/eslint-config-airbnb/rules/es6.js
+++ b/packages/eslint-config-airbnb/rules/es6.js
@@ -30,6 +30,9 @@ module.exports = {
     'no-class-assign': 0,
     // disallow modifying variables that are declared using const
     'no-const-assign': 2,
+    // disallow specific imports
+    // http://eslint.org/docs/rules/no-restricted-imports
+    'no-restricted-imports': 0,
     // disallow to use this/super before super() calling in constructors.
     'no-this-before-super': 0,
     // require let or const instead of var
@@ -52,6 +55,12 @@ module.exports = {
     // http://eslint.org/docs/rules/prefer-template
     'prefer-template': 2,
     // disallow generator functions that do not have yield
-    'require-yield': 0
+    'require-yield': 0,
+    // import sorting
+    // http://eslint.org/docs/rules/sort-imports
+    'sort-imports': 0,
+    // enforce spacing around the * in yield* expressions
+    // http://eslint.org/docs/rules/yield-star-spacing
+    'yield-star-spacing': 0
   }
 };
diff --git a/packages/eslint-config-airbnb/rules/variables.js b/packages/eslint-config-airbnb/rules/variables.js
index 59914313f9..b9073f72c5 100644
--- a/packages/eslint-config-airbnb/rules/variables.js
+++ b/packages/eslint-config-airbnb/rules/variables.js
@@ -6,6 +6,9 @@ module.exports = {
     'no-catch-shadow': 0,
     // disallow deletion of variables
     'no-delete-var': 2,
+    // disallow var and named functions in global scope
+    // http://eslint.org/docs/rules/no-implicit-globals
+    'no-implicit-globals': 0,
     // disallow labels that share a name with a variable
     'no-label-var': 0,
     // disallow shadowing of names such as arguments

From a126d0b85c8b2afcdd309c39f45c14815bb1ab23 Mon Sep 17 00:00:00 2001
From: Harrison Shoff <hi@hshoff.com>
Date: Sun, 14 Feb 2016 12:56:03 -0800
Subject: [PATCH 0488/1591] [eslint-v2] enforce yield-start-spacing,
 no-unused-labels, no-extra-label

---
 packages/eslint-config-airbnb/rules/best-practices.js | 4 ++--
 packages/eslint-config-airbnb/rules/es6.js            | 2 +-
 2 files changed, 3 insertions(+), 3 deletions(-)

diff --git a/packages/eslint-config-airbnb/rules/best-practices.js b/packages/eslint-config-airbnb/rules/best-practices.js
index 845904206e..5a50af000a 100644
--- a/packages/eslint-config-airbnb/rules/best-practices.js
+++ b/packages/eslint-config-airbnb/rules/best-practices.js
@@ -36,7 +36,7 @@ module.exports = {
     'no-else-return': 2,
     // disallow Unnecessary Labels
     // http://eslint.org/docs/rules/no-extra-label
-    'no-extra-label': 0,
+    'no-extra-label': 2,
     // disallow comparisons to null without a type-checking operator
     'no-eq-null': 0,
     // disallow use of eval()
@@ -107,7 +107,7 @@ module.exports = {
     'no-unused-expressions': 2,
     // disallow unused labels
     // http://eslint.org/docs/rules/no-unused-labels
-    'no-unused-labels': 0,
+    'no-unused-labels': 2,
     // disallow unnecessary .call() and .apply()
     'no-useless-call': 0,
     // disallow use of void operator
diff --git a/packages/eslint-config-airbnb/rules/es6.js b/packages/eslint-config-airbnb/rules/es6.js
index 11e212b5eb..8ba6e5e3c9 100644
--- a/packages/eslint-config-airbnb/rules/es6.js
+++ b/packages/eslint-config-airbnb/rules/es6.js
@@ -61,6 +61,6 @@ module.exports = {
     'sort-imports': 0,
     // enforce spacing around the * in yield* expressions
     // http://eslint.org/docs/rules/yield-star-spacing
-    'yield-star-spacing': 0
+    'yield-star-spacing': [2, 'after']
   }
 };

From fbd9c35dd37c2466b809a89c79703583de77d275 Mon Sep 17 00:00:00 2001
From: Harrison Shoff <hi@hshoff.com>
Date: Sun, 14 Feb 2016 11:14:38 -0800
Subject: [PATCH 0489/1591] [eslint-v2][arrays] add array-callback-return rule

---
 README.md                                     | 45 +++++++++++++++++++
 .../rules/best-practices.js                   |  3 ++
 2 files changed, 48 insertions(+)

diff --git a/README.md b/README.md
index 46e783580b..b52dbdcc23 100644
--- a/README.md
+++ b/README.md
@@ -346,6 +346,51 @@ Other Style Guides
     const nodes = Array.from(foo);
     ```
 
+  - [4.5](#4.5) <a name='4.5'></a> Use return statements in array method callbacks. It's ok to omit the return if the function body consists of a single statement following [8.2](#8.2). eslint: [array-callback-return](http://eslint.org/docs/rules/array-callback-return)
+
+    ```javascript
+    // good
+    [1, 2, 3].map((x) => {
+      const y = x + 1;
+      return x * y;
+    });
+
+    // good
+    [1, 2, 3].map(x => x + 1);
+
+    // bad
+    const flat = {};
+    [[0, 1], [2, 3], [4, 5]].reduce((memo, item, index) => {
+      const flatten = memo.concat(item);
+      flat[index] = memo.concat(item);
+    });
+
+    // good
+    const flat = {};
+    [[0, 1], [2, 3], [4, 5]].reduce((memo, item, index) => {
+      const flatten = memo.concat(item);
+      flat[index] = flatten;
+      return flatten;
+    });
+
+    // bad
+    [1, 2, 3].filter((x) => {
+      if (x > 2) {
+        return true;
+      } else {
+        return false;
+      }
+    });
+
+    // good
+    [1, 2, 3].filter((x) => {
+      if (x > 2) {
+        return true;
+      }
+      return false;
+    });
+    ```
+
 **[⬆ back to top](#table-of-contents)**
 
 ## Destructuring
diff --git a/packages/eslint-config-airbnb/rules/best-practices.js b/packages/eslint-config-airbnb/rules/best-practices.js
index 5a50af000a..6f66792478 100644
--- a/packages/eslint-config-airbnb/rules/best-practices.js
+++ b/packages/eslint-config-airbnb/rules/best-practices.js
@@ -2,6 +2,9 @@ module.exports = {
   'rules': {
     // enforces getter/setter pairs in objects
     'accessor-pairs': 0,
+    // enforces return statements in callbacks of array's methods
+    // http://eslint.org/docs/rules/array-callback-return
+    'array-callback-return': 2,
     // treat var statements as if they were block scoped
     'block-scoped-var': 2,
     // specify the maximum cyclomatic complexity allowed in a program

From 172dffbb52ae6b61fe41c9a4c14d4be68070111f Mon Sep 17 00:00:00 2001
From: Harrison Shoff <hi@hshoff.com>
Date: Sun, 14 Feb 2016 11:48:04 -0800
Subject: [PATCH 0490/1591] [eslint-v2][whitespace] add
 newline-per-chained-call rule

---
 README.md                                    | 8 ++++++--
 packages/eslint-config-airbnb/rules/style.js | 3 +++
 2 files changed, 9 insertions(+), 2 deletions(-)

diff --git a/README.md b/README.md
index b52dbdcc23..7290e0aca3 100644
--- a/README.md
+++ b/README.md
@@ -387,6 +387,7 @@ Other Style Guides
       if (x > 2) {
         return true;
       }
+
       return false;
     });
     ```
@@ -1664,8 +1665,8 @@ Other Style Guides
     })(this);↵
     ```
 
-  - [18.6](#18.6) <a name='18.6'></a> Use indentation when making long method chains. Use a leading dot, which
-    emphasizes that the line is a method call, not a new statement.
+  - [18.6](#18.6) <a name='18.6'></a> Use indentation when making long method chains (more than 2 method chains). Use a leading dot, which
+    emphasizes that the line is a method call, not a new statement. eslint: [newline-per-chained-call](http://eslint.org/docs/rules/newline-per-chained-call)
 
     ```javascript
     // bad
@@ -1702,6 +1703,9 @@ Other Style Guides
       .append('svg:g')
         .attr('transform', 'translate(' + (radius + margin) + ',' + (radius + margin) + ')')
         .call(tron.led);
+
+    // good
+    const leds = stage.selectAll('.led').data(data);
     ```
 
   - [18.7](#18.7) <a name='18.7'></a> Leave a blank line after blocks and before the next statement. jscs: [`requirePaddingNewLinesAfterBlocks`](http://jscs.info/rule/requirePaddingNewLinesAfterBlocks)
diff --git a/packages/eslint-config-airbnb/rules/style.js b/packages/eslint-config-airbnb/rules/style.js
index 0e8036ec51..4e8710c347 100644
--- a/packages/eslint-config-airbnb/rules/style.js
+++ b/packages/eslint-config-airbnb/rules/style.js
@@ -59,6 +59,9 @@ module.exports = {
     'new-parens': 0,
     // allow/disallow an empty newline after var statement
     'newline-after-var': 0,
+    // enforces new line after each method call in the chain to make it more readable and easy to maintain
+    // http://eslint.org/docs/rules/newline-per-chained-call
+    'newline-per-chained-call': [2, { "ignoreChainWithDepth": 3 }],
     // disallow use of the Array constructor
     'no-array-constructor': 0,
     // disallow use of the continue statement

From 6a03a32915533eb09151c754333ccf0f724d05ad Mon Sep 17 00:00:00 2001
From: Harrison Shoff <hi@hshoff.com>
Date: Sun, 14 Feb 2016 14:47:23 -0800
Subject: [PATCH 0491/1591] [eslint-v2][arrow functions] add no-confusing-arrow
 rule

---
 README.md                                  | 13 +++++++++++++
 packages/eslint-config-airbnb/rules/es6.js |  3 +++
 2 files changed, 16 insertions(+)

diff --git a/README.md b/README.md
index 7290e0aca3..e5ed8a3754 100644
--- a/README.md
+++ b/README.md
@@ -817,6 +817,19 @@ Other Style Guides
     });
     ```
 
+  - [8.5](#8.5) <a name='8.5'></a> Avoid confusing arrow function syntax (`=>`) with comparison operators (`<=`, `>=`). eslint: [no-confusing-arrow](http://eslint.org/docs/rules/no-confusing-arrow)
+
+    ```js
+    // bad
+    const isActive = item => item.height > 256 ? true : false;
+
+    // bad
+    const isActive = (item) => item.height > 256 ? true : false;
+
+    // good
+    const isActive = item => { return item.height > 256 ? true : false; }
+    ```
+
 **[⬆ back to top](#table-of-contents)**
 
 
diff --git a/packages/eslint-config-airbnb/rules/es6.js b/packages/eslint-config-airbnb/rules/es6.js
index 8ba6e5e3c9..88fbf2eb89 100644
--- a/packages/eslint-config-airbnb/rules/es6.js
+++ b/packages/eslint-config-airbnb/rules/es6.js
@@ -28,6 +28,9 @@ module.exports = {
     'generator-star-spacing': 0,
     // disallow modifying variables of class declarations
     'no-class-assign': 0,
+    // disallow arrow functions where they could be confused with comparisons
+    // http://eslint.org/docs/rules/no-confusing-arrow
+    'no-confusing-arrow': 2,
     // disallow modifying variables that are declared using const
     'no-const-assign': 2,
     // disallow specific imports

From ba10353e9b34f44afbd8b4a2ecdff923356a2ae7 Mon Sep 17 00:00:00 2001
From: Harrison Shoff <hi@hshoff.com>
Date: Sun, 14 Feb 2016 14:50:49 -0800
Subject: [PATCH 0492/1591] [eslint-v2][arrow functions] improve examples

---
 README.md | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/README.md b/README.md
index e5ed8a3754..e2b48378ae 100644
--- a/README.md
+++ b/README.md
@@ -821,13 +821,13 @@ Other Style Guides
 
     ```js
     // bad
-    const isActive = item => item.height > 256 ? true : false;
+    const itemHeight = item => item.height > 256 ? item.largeSize : item.smallSize;
 
     // bad
-    const isActive = (item) => item.height > 256 ? true : false;
+    const itemHeight = (item) => item.height > 256 ? item.largeSize : item.smallSize;
 
     // good
-    const isActive = item => { return item.height > 256 ? true : false; }
+    const itemHeight = item => { return item.height > 256 ? item.largeSize : item.smallSize; }
     ```
 
 **[⬆ back to top](#table-of-contents)**

From 3762c9add826e47587242460db331d8203cea069 Mon Sep 17 00:00:00 2001
From: Harrison Shoff <hi@hshoff.com>
Date: Sun, 14 Feb 2016 14:58:28 -0800
Subject: [PATCH 0493/1591] [eslint-v2] add no-new-symbol rule

---
 packages/eslint-config-airbnb/rules/es6.js | 3 +++
 1 file changed, 3 insertions(+)

diff --git a/packages/eslint-config-airbnb/rules/es6.js b/packages/eslint-config-airbnb/rules/es6.js
index 88fbf2eb89..be2ebe5c7c 100644
--- a/packages/eslint-config-airbnb/rules/es6.js
+++ b/packages/eslint-config-airbnb/rules/es6.js
@@ -33,6 +33,9 @@ module.exports = {
     'no-confusing-arrow': 2,
     // disallow modifying variables that are declared using const
     'no-const-assign': 2,
+    // disallow symbol constructor
+    // http://eslint.org/docs/rules/no-new-symbol
+    'no-new-symbol': 2,
     // disallow specific imports
     // http://eslint.org/docs/rules/no-restricted-imports
     'no-restricted-imports': 0,

From 92df6357b3ed3326eaca33454b112d06dbd76f0e Mon Sep 17 00:00:00 2001
From: Harrison Shoff <hi@hshoff.com>
Date: Sun, 14 Feb 2016 18:30:28 -0800
Subject: [PATCH 0494/1591] [eslint-v2][variables] add no-self-assign

---
 packages/eslint-config-airbnb/rules/variables.js | 3 +++
 1 file changed, 3 insertions(+)

diff --git a/packages/eslint-config-airbnb/rules/variables.js b/packages/eslint-config-airbnb/rules/variables.js
index b9073f72c5..3bfcc83fde 100644
--- a/packages/eslint-config-airbnb/rules/variables.js
+++ b/packages/eslint-config-airbnb/rules/variables.js
@@ -11,6 +11,9 @@ module.exports = {
     'no-implicit-globals': 0,
     // disallow labels that share a name with a variable
     'no-label-var': 0,
+    // disallow self assignment
+    // http://eslint.org/docs/rules/no-self-assign
+    'no-self-assign': 2,
     // disallow shadowing of names such as arguments
     'no-shadow-restricted-names': 2,
     // disallow declaration of variables already declared in the outer scope

From e6cbcf4cc56b04edbb22eef2856fce78bf4625b1 Mon Sep 17 00:00:00 2001
From: Harrison Shoff <hi@hshoff.com>
Date: Sun, 14 Feb 2016 18:35:23 -0800
Subject: [PATCH 0495/1591] [eslint-v2][whitespace] add
 no-whitespace-before-property rule

---
 README.md                                    | 2 +-
 packages/eslint-config-airbnb/rules/style.js | 3 +++
 2 files changed, 4 insertions(+), 1 deletion(-)

diff --git a/README.md b/README.md
index e2b48378ae..99f9b3dff7 100644
--- a/README.md
+++ b/README.md
@@ -1679,7 +1679,7 @@ Other Style Guides
     ```
 
   - [18.6](#18.6) <a name='18.6'></a> Use indentation when making long method chains (more than 2 method chains). Use a leading dot, which
-    emphasizes that the line is a method call, not a new statement. eslint: [newline-per-chained-call](http://eslint.org/docs/rules/newline-per-chained-call)
+    emphasizes that the line is a method call, not a new statement. eslint: [newline-per-chained-call](http://eslint.org/docs/rules/newline-per-chained-call) [no-whitespace-before-property](http://eslint.org/docs/rules/no-whitespace-before-property)
 
     ```javascript
     // bad
diff --git a/packages/eslint-config-airbnb/rules/style.js b/packages/eslint-config-airbnb/rules/style.js
index 4e8710c347..85c1fd706d 100644
--- a/packages/eslint-config-airbnb/rules/style.js
+++ b/packages/eslint-config-airbnb/rules/style.js
@@ -90,6 +90,9 @@ module.exports = {
     // also, prefer `a || b` over `a ? a : b`
     // http://eslint.org/docs/rules/no-unneeded-ternary
     'no-unneeded-ternary': [2, { 'defaultAssignment': false }],
+    // disallow whitespace before properties
+    // http://eslint.org/docs/rules/no-whitespace-before-property
+    'no-whitespace-before-property': 2,
     // require padding inside curly braces
     'object-curly-spacing': [2, 'always'],
     // allow just one var statement per function

From c5b4f05879be4cd48c1737ad9bfdb00ed8a87ee0 Mon Sep 17 00:00:00 2001
From: Harrison Shoff <hi@hshoff.com>
Date: Sun, 14 Feb 2016 18:39:32 -0800
Subject: [PATCH 0496/1591] [eslint-v2] add one-var-declaration-per-line

---
 packages/eslint-config-airbnb/rules/style.js | 3 +++
 1 file changed, 3 insertions(+)

diff --git a/packages/eslint-config-airbnb/rules/style.js b/packages/eslint-config-airbnb/rules/style.js
index 85c1fd706d..a5d9e094de 100644
--- a/packages/eslint-config-airbnb/rules/style.js
+++ b/packages/eslint-config-airbnb/rules/style.js
@@ -97,6 +97,9 @@ module.exports = {
     'object-curly-spacing': [2, 'always'],
     // allow just one var statement per function
     'one-var': [2, 'never'],
+    // require a newline around variable declaration
+    // http://eslint.org/docs/rules/one-var-declaration-per-line
+    'one-var-declaration-per-line': [2, 'always'],
     // require assignment operator shorthand where possible or prohibit it entirely
     'operator-assignment': 0,
     // enforce operators to be placed before or after line breaks

From e1a087fbb1eeb861acce7bab67476ccd4dd080e0 Mon Sep 17 00:00:00 2001
From: Harrison Shoff <hi@hshoff.com>
Date: Sun, 14 Feb 2016 18:45:44 -0800
Subject: [PATCH 0497/1591] [eslint-v2] add prefer-rest-params

---
 README.md                                  | 2 +-
 packages/eslint-config-airbnb/rules/es6.js | 3 +++
 2 files changed, 4 insertions(+), 1 deletion(-)

diff --git a/README.md b/README.md
index 99f9b3dff7..795608e126 100644
--- a/README.md
+++ b/README.md
@@ -581,7 +581,7 @@ Other Style Guides
     ```
 
   <a name="es6-rest"></a>
-  - [7.6](#7.6) <a name='7.6'></a> Never use `arguments`, opt to use rest syntax `...` instead.
+  - [7.6](#7.6) <a name='7.6'></a> Never use `arguments`, opt to use rest syntax `...` instead. [prefer-rest-params](http://eslint.org/docs/rules/prefer-rest-params)
 
     > Why? `...` is explicit about which arguments you want pulled. Plus rest arguments are a real Array and not Array-like like `arguments`.
 
diff --git a/packages/eslint-config-airbnb/rules/es6.js b/packages/eslint-config-airbnb/rules/es6.js
index be2ebe5c7c..ae835a6ab9 100644
--- a/packages/eslint-config-airbnb/rules/es6.js
+++ b/packages/eslint-config-airbnb/rules/es6.js
@@ -57,6 +57,9 @@ module.exports = {
     'prefer-spread': 0,
     // suggest using Reflect methods where applicable
     'prefer-reflect': 0,
+    // use rest parameters instead of arguments
+    // http://eslint.org/docs/rules/prefer-rest-params
+    'prefer-rest-params': 2,
     // suggest using template literals instead of string concatenation
     // http://eslint.org/docs/rules/prefer-template
     'prefer-template': 2,

From 1f12a12be474bc9f61b2b1556549e865f3be114c Mon Sep 17 00:00:00 2001
From: Harrison Shoff <hi@hshoff.com>
Date: Sun, 14 Feb 2016 18:48:31 -0800
Subject: [PATCH 0498/1591] [eslint-v2] fix empty constructor example

---
 README.md | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/README.md b/README.md
index 795608e126..909954c934 100644
--- a/README.md
+++ b/README.md
@@ -956,14 +956,14 @@ Other Style Guides
 
     class Rey extends Jedi {
       constructor(...args) {
-        super(...args);
+        super(args);
       }
     }
 
     // good
     class Rey extends Jedi {
       constructor(...args) {
-        super(...args);
+        super(args);
         this.name = 'Rey';
       }
     }

From 65609373bfe33e5d86b2ac04ff2fd7f0aaa6a8a2 Mon Sep 17 00:00:00 2001
From: Harrison Shoff <hi@hshoff.com>
Date: Sun, 14 Feb 2016 18:56:49 -0800
Subject: [PATCH 0499/1591] [eslint-v2][template strings] add
 template-curly-spacing rule, fix #716

---
 README.md                                  | 7 ++++++-
 packages/eslint-config-airbnb/rules/es6.js | 3 +++
 2 files changed, 9 insertions(+), 1 deletion(-)

diff --git a/README.md b/README.md
index 909954c934..d9bab06129 100644
--- a/README.md
+++ b/README.md
@@ -493,7 +493,7 @@ Other Style Guides
     ```
 
   <a name="es6-template-literals"></a>
-  - [6.4](#6.4) <a name='6.4'></a> When programmatically building up strings, use template strings instead of concatenation. eslint: [`prefer-template`](http://eslint.org/docs/rules/prefer-template.html) jscs: [`requireTemplateStrings`](http://jscs.info/rule/requireTemplateStrings)
+  - [6.4](#6.4) <a name='6.4'></a> When programmatically building up strings, use template strings instead of concatenation. eslint: [`prefer-template`](http://eslint.org/docs/rules/prefer-template.html) [`template-curly-spacing`](http://eslint.org/docs/rules/template-curly-spacing) jscs: [`requireTemplateStrings`](http://jscs.info/rule/requireTemplateStrings)
 
     > Why? Template strings give you a readable, concise syntax with proper newlines and string interpolation features.
 
@@ -508,6 +508,11 @@ Other Style Guides
       return ['How are you, ', name, '?'].join();
     }
 
+    // bad
+    function sayHi(name) {
+      return `How are you, ${ name }?`;
+    }
+
     // good
     function sayHi(name) {
       return `How are you, ${name}?`;
diff --git a/packages/eslint-config-airbnb/rules/es6.js b/packages/eslint-config-airbnb/rules/es6.js
index ae835a6ab9..e88b2d5059 100644
--- a/packages/eslint-config-airbnb/rules/es6.js
+++ b/packages/eslint-config-airbnb/rules/es6.js
@@ -68,6 +68,9 @@ module.exports = {
     // import sorting
     // http://eslint.org/docs/rules/sort-imports
     'sort-imports': 0,
+    // enforce usage of spacing in template strings
+    // http://eslint.org/docs/rules/template-curly-spacing
+    'template-curly-spacing': 2,
     // enforce spacing around the * in yield* expressions
     // http://eslint.org/docs/rules/yield-star-spacing
     'yield-star-spacing': [2, 'after']

From e0959d0f1d35105a9db8d972e0f844daf0dfa072 Mon Sep 17 00:00:00 2001
From: Harrison Shoff <hi@hshoff.com>
Date: Sun, 14 Feb 2016 19:04:12 -0800
Subject: [PATCH 0500/1591] [eslint-v2] fix rule links in readme

---
 README.md | 11 ++++++-----
 1 file changed, 6 insertions(+), 5 deletions(-)

diff --git a/README.md b/README.md
index d9bab06129..e423c59499 100644
--- a/README.md
+++ b/README.md
@@ -346,7 +346,7 @@ Other Style Guides
     const nodes = Array.from(foo);
     ```
 
-  - [4.5](#4.5) <a name='4.5'></a> Use return statements in array method callbacks. It's ok to omit the return if the function body consists of a single statement following [8.2](#8.2). eslint: [array-callback-return](http://eslint.org/docs/rules/array-callback-return)
+  - [4.5](#4.5) <a name='4.5'></a> Use return statements in array method callbacks. It's ok to omit the return if the function body consists of a single statement following [8.2](#8.2). eslint: [`array-callback-return`](http://eslint.org/docs/rules/array-callback-return)
 
     ```javascript
     // good
@@ -586,7 +586,7 @@ Other Style Guides
     ```
 
   <a name="es6-rest"></a>
-  - [7.6](#7.6) <a name='7.6'></a> Never use `arguments`, opt to use rest syntax `...` instead. [prefer-rest-params](http://eslint.org/docs/rules/prefer-rest-params)
+  - [7.6](#7.6) <a name='7.6'></a> Never use `arguments`, opt to use rest syntax `...` instead. [`prefer-rest-params`](http://eslint.org/docs/rules/prefer-rest-params)
 
     > Why? `...` is explicit about which arguments you want pulled. Plus rest arguments are a real Array and not Array-like like `arguments`.
 
@@ -822,7 +822,7 @@ Other Style Guides
     });
     ```
 
-  - [8.5](#8.5) <a name='8.5'></a> Avoid confusing arrow function syntax (`=>`) with comparison operators (`<=`, `>=`). eslint: [no-confusing-arrow](http://eslint.org/docs/rules/no-confusing-arrow)
+  - [8.5](#8.5) <a name='8.5'></a> Avoid confusing arrow function syntax (`=>`) with comparison operators (`<=`, `>=`). eslint: [`no-confusing-arrow`](http://eslint.org/docs/rules/no-confusing-arrow)
 
     ```js
     // bad
@@ -947,7 +947,7 @@ Other Style Guides
     }
     ```
 
-  - [9.5](#9.5) <a name='9.5'></a> Classes have a default constructor if one is not specified. An empty constructor function or one that just delegates to a parent class is unnecessary.
+  - [9.5](#9.5) <a name='9.5'></a> Classes have a default constructor if one is not specified. An empty constructor function or one that just delegates to a parent class is unnecessary. [`no-useless-constructor`](http://eslint.org/docs/rules/no-useless-constructor)
 
     ```javascript
     // bad
@@ -959,6 +959,7 @@ Other Style Guides
       }
     }
 
+    // bad
     class Rey extends Jedi {
       constructor(...args) {
         super(args);
@@ -1684,7 +1685,7 @@ Other Style Guides
     ```
 
   - [18.6](#18.6) <a name='18.6'></a> Use indentation when making long method chains (more than 2 method chains). Use a leading dot, which
-    emphasizes that the line is a method call, not a new statement. eslint: [newline-per-chained-call](http://eslint.org/docs/rules/newline-per-chained-call) [no-whitespace-before-property](http://eslint.org/docs/rules/no-whitespace-before-property)
+    emphasizes that the line is a method call, not a new statement. eslint: [`newline-per-chained-call`](http://eslint.org/docs/rules/newline-per-chained-call) [`no-whitespace-before-property`](http://eslint.org/docs/rules/no-whitespace-before-property)
 
     ```javascript
     // bad

From ff0adbe2918dbc5b26814f61853227318d787965 Mon Sep 17 00:00:00 2001
From: Harrison Shoff <hi@hshoff.com>
Date: Sat, 20 Feb 2016 12:59:00 -0800
Subject: [PATCH 0501/1591] [eslint-v2][react] acceptTranspilerName =>
 ignoreTranspilerName

---
 packages/eslint-config-airbnb/rules/react.js           | 5 ++++-
 packages/eslint-config-airbnb/rules/style.js           | 5 +++--
 packages/eslint-config-airbnb/test/test-react-order.js | 3 ++-
 3 files changed, 9 insertions(+), 4 deletions(-)

diff --git a/packages/eslint-config-airbnb/rules/react.js b/packages/eslint-config-airbnb/rules/react.js
index e1e1c25993..2b59ca200e 100644
--- a/packages/eslint-config-airbnb/rules/react.js
+++ b/packages/eslint-config-airbnb/rules/react.js
@@ -10,7 +10,7 @@ module.exports = {
   'rules': {
     // Prevent missing displayName in a React component definition
     // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/display-name.md
-    'react/display-name': [0, { 'acceptTranspilerName': false }],
+    'react/display-name': [0, { 'ignoreTranspilerName': true }],
     // Forbid certain propTypes (any, array, object)
     // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/forbid-prop-types.md
     'react/forbid-prop-types': [0, { 'forbid': ['any', 'array', 'object'] }],
@@ -116,6 +116,9 @@ module.exports = {
     // Prevent extra closing tags for components without children
     // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/self-closing-comp.md
     'react/self-closing-comp': 2,
+    // Enforce spaces before the closing bracket of self-closing JSX elements
+    // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/jsx-space-before-closing.md
+    'react/jsx-space-before-closing': [2, 'always'],
     // Enforce component methods order
     // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/sort-comp.md
     'react/sort-comp': [2, {
diff --git a/packages/eslint-config-airbnb/rules/style.js b/packages/eslint-config-airbnb/rules/style.js
index a5d9e094de..c147aae8b7 100644
--- a/packages/eslint-config-airbnb/rules/style.js
+++ b/packages/eslint-config-airbnb/rules/style.js
@@ -59,9 +59,10 @@ module.exports = {
     'new-parens': 0,
     // allow/disallow an empty newline after var statement
     'newline-after-var': 0,
-    // enforces new line after each method call in the chain to make it more readable and easy to maintain
+    // enforces new line after each method call in the chain to make it
+    // more readable and easy to maintain
     // http://eslint.org/docs/rules/newline-per-chained-call
-    'newline-per-chained-call': [2, { "ignoreChainWithDepth": 3 }],
+    'newline-per-chained-call': [2, { 'ignoreChainWithDepth': 3 }],
     // disallow use of the Array constructor
     'no-array-constructor': 0,
     // disallow use of the continue statement
diff --git a/packages/eslint-config-airbnb/test/test-react-order.js b/packages/eslint-config-airbnb/test/test-react-order.js
index 77448cf86a..f5b2d452fe 100644
--- a/packages/eslint-config-airbnb/test/test-react-order.js
+++ b/packages/eslint-config-airbnb/test/test-react-order.js
@@ -14,7 +14,8 @@ const cli = new CLIEngine({
 function lint(text) {
   // @see http://eslint.org/docs/developer-guide/nodejs-api.html#executeonfiles
   // @see http://eslint.org/docs/developer-guide/nodejs-api.html#executeontext
-  return cli.executeOnText(text).results[0];
+  const linter = cli.executeOnText(text);
+  return linter.results[0];
 }
 
 function wrapComponent(body) {

From 133fc51e21321c3eba0cda5f6fa008ff55940d8c Mon Sep 17 00:00:00 2001
From: Harrison Shoff <hi@hshoff.com>
Date: Sat, 20 Feb 2016 13:02:15 -0800
Subject: [PATCH 0502/1591] [eslint-v2][react] add static-methods to top of
 sort-comp order

---
 packages/eslint-config-airbnb/rules/react.js | 1 +
 1 file changed, 1 insertion(+)

diff --git a/packages/eslint-config-airbnb/rules/react.js b/packages/eslint-config-airbnb/rules/react.js
index 2b59ca200e..a9facdd732 100644
--- a/packages/eslint-config-airbnb/rules/react.js
+++ b/packages/eslint-config-airbnb/rules/react.js
@@ -123,6 +123,7 @@ module.exports = {
     // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/sort-comp.md
     'react/sort-comp': [2, {
       'order': [
+        'static-methods',
         'lifecycle',
         '/^on.+$/',
         '/^(get|set)(?!(InitialState$|DefaultProps$|ChildContext$)).+$/',

From 07948531dccc62d21f190ed4a2edc035642da01a Mon Sep 17 00:00:00 2001
From: Harrison Shoff <hi@hshoff.com>
Date: Sat, 20 Feb 2016 13:05:49 -0800
Subject: [PATCH 0503/1591] [eslint-v2][react] set ignoreTranspilerName to
 false

---
 packages/eslint-config-airbnb/rules/react.js | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/packages/eslint-config-airbnb/rules/react.js b/packages/eslint-config-airbnb/rules/react.js
index a9facdd732..99e4c02010 100644
--- a/packages/eslint-config-airbnb/rules/react.js
+++ b/packages/eslint-config-airbnb/rules/react.js
@@ -10,7 +10,7 @@ module.exports = {
   'rules': {
     // Prevent missing displayName in a React component definition
     // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/display-name.md
-    'react/display-name': [0, { 'ignoreTranspilerName': true }],
+    'react/display-name': [0, { 'ignoreTranspilerName': false }],
     // Forbid certain propTypes (any, array, object)
     // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/forbid-prop-types.md
     'react/forbid-prop-types': [0, { 'forbid': ['any', 'array', 'object'] }],

From 822c0dfdfe16ead8d4e3da8c35c007901e94f4eb Mon Sep 17 00:00:00 2001
From: Harrison Shoff <hi@hshoff.com>
Date: Sat, 20 Feb 2016 13:10:42 -0800
Subject: [PATCH 0504/1591] [eslint-v2][react] jsx-sort-prop-types =>
 sort-prop-types

---
 packages/eslint-config-airbnb/rules/react.js | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/packages/eslint-config-airbnb/rules/react.js b/packages/eslint-config-airbnb/rules/react.js
index 99e4c02010..b7a9889e69 100644
--- a/packages/eslint-config-airbnb/rules/react.js
+++ b/packages/eslint-config-airbnb/rules/react.js
@@ -54,8 +54,8 @@ module.exports = {
     // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/jsx-pascal-case.md
     'react/jsx-pascal-case': 0,
     // Enforce propTypes declarations alphabetical sorting
-    // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/jsx-sort-prop-types.md
-    'react/jsx-sort-prop-types': [0, {
+    // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/sort-prop-types.md
+    'react/sort-prop-types': [0, {
       'ignoreCase': false,
       'callbacksLast': false,
     }],

From b79e9512801f798698f15baaaec92c328c0af6c0 Mon Sep 17 00:00:00 2001
From: Harrison Shoff <hi@hshoff.com>
Date: Sat, 20 Feb 2016 23:33:39 -0800
Subject: [PATCH 0505/1591] [eslint-v2][arrays] update array-callback-return
 good/bad ex

---
 README.md | 19 +++++++++++--------
 1 file changed, 11 insertions(+), 8 deletions(-)

diff --git a/README.md b/README.md
index e423c59499..e89fc1cd6a 100644
--- a/README.md
+++ b/README.md
@@ -374,9 +374,10 @@ Other Style Guides
     });
 
     // bad
-    [1, 2, 3].filter((x) => {
-      if (x > 2) {
-        return true;
+    inbox].filter((msg) => {
+      const { subject, author } = msg;
+      if (subject === 'Mockingbird') {
+        return author === 'Harper Lee';
       } else {
         return false;
       }
@@ -384,12 +385,14 @@ Other Style Guides
 
     // good
     [1, 2, 3].filter((x) => {
-      if (x > 2) {
-        return true;
-      }
+      inbox].filter((msg) => {
+        const { subject, author } = msg;
+        if (subject === 'Mockingbird') {
+          return author === 'Harper Lee';
+        }
 
-      return false;
-    });
+        return false;
+      });
     ```
 
 **[⬆ back to top](#table-of-contents)**

From 3983d380edd22fe7546f9fef2d04fc69a5db04f7 Mon Sep 17 00:00:00 2001
From: Harrison Shoff <hi@hshoff.com>
Date: Sat, 20 Feb 2016 23:39:29 -0800
Subject: [PATCH 0506/1591] [eslint-v2][arrays] fix example

---
 README.md | 17 ++++++++---------
 1 file changed, 8 insertions(+), 9 deletions(-)

diff --git a/README.md b/README.md
index e89fc1cd6a..e10cca35ea 100644
--- a/README.md
+++ b/README.md
@@ -374,7 +374,7 @@ Other Style Guides
     });
 
     // bad
-    inbox].filter((msg) => {
+    inbox.filter((msg) => {
       const { subject, author } = msg;
       if (subject === 'Mockingbird') {
         return author === 'Harper Lee';
@@ -384,15 +384,14 @@ Other Style Guides
     });
 
     // good
-    [1, 2, 3].filter((x) => {
-      inbox].filter((msg) => {
-        const { subject, author } = msg;
-        if (subject === 'Mockingbird') {
-          return author === 'Harper Lee';
-        }
+    inbox.filter((msg) => {
+      const { subject, author } = msg;
+      if (subject === 'Mockingbird') {
+        return author === 'Harper Lee';
+      }
 
-        return false;
-      });
+      return false;
+    });
     ```
 
 **[⬆ back to top](#table-of-contents)**

From 0f32b96c125784e0db507682d3fb2fe05098e903 Mon Sep 17 00:00:00 2001
From: Harrison Shoff <hi@hshoff.com>
Date: Sat, 20 Feb 2016 13:24:55 -0800
Subject: [PATCH 0507/1591] [changelog] update changelog for 6.0.0

---
 packages/eslint-config-airbnb/CHANGELOG.md | 18 ++++++++++++++++++
 1 file changed, 18 insertions(+)

diff --git a/packages/eslint-config-airbnb/CHANGELOG.md b/packages/eslint-config-airbnb/CHANGELOG.md
index 7c47c680f5..fcb16ec26c 100644
--- a/packages/eslint-config-airbnb/CHANGELOG.md
+++ b/packages/eslint-config-airbnb/CHANGELOG.md
@@ -1,3 +1,21 @@
+6.0.0 / 2016-02-21
+==================
+- [breaking] enable `array-callback-return`
+- [breaking] enable `no-confusing-arrow`
+- [breaking] enable `no-new-symbol`
+- [breaking] enable `no-restricted-imports`
+- [breaking] enable `no-useless-constructor`
+- [breaking] enable `prefer-rest-params`
+- [breaking] enable `template-curly-spaces`
+- [breaking] enable `newline-per-chained-call`
+- [breaking] enable `one-var-declaration-per-line`
+- [breaking] enable `no-self-assign`
+- [breaking] enable `no-whitespace-before-property`
+- [breaking] [react] enable `react/jsx-space-before-closing`
+- [breaking] [react] enable `static-methods` at top of `react/sort-comp`
+- [breaking] [react] don't `ignoreTranspilerName` for `react/display-name`
+- [peer+dev deps] update `eslint`, `eslint-plugin-react`
+
 5.0.1 / 2016-02-13
 ==================
  - [fix] `eslint` peerDep should not include breaking changes

From 4574659833a8d1c6c45833bb06743ababa6929e8 Mon Sep 17 00:00:00 2001
From: Sergey Fursov <geyser85@gmail.com>
Date: Sun, 21 Feb 2016 01:31:20 +0300
Subject: [PATCH 0508/1591] rearrange comma-dangle rule to match es5/es6
 codestyles, fixes #741

---
 packages/eslint-config-airbnb/rules/errors.js | 2 --
 packages/eslint-config-airbnb/rules/es6.js    | 2 ++
 packages/eslint-config-airbnb/rules/legacy.js | 2 ++
 3 files changed, 4 insertions(+), 2 deletions(-)

diff --git a/packages/eslint-config-airbnb/rules/errors.js b/packages/eslint-config-airbnb/rules/errors.js
index ec1b1aab0e..1c1addf5fa 100644
--- a/packages/eslint-config-airbnb/rules/errors.js
+++ b/packages/eslint-config-airbnb/rules/errors.js
@@ -1,7 +1,5 @@
 module.exports = {
   'rules': {
-    // disallow trailing commas in object literals
-    'comma-dangle': [2, 'always-multiline'],
     // disallow assignment in conditional expressions
     'no-cond-assign': [2, 'always'],
     // disallow use of console
diff --git a/packages/eslint-config-airbnb/rules/es6.js b/packages/eslint-config-airbnb/rules/es6.js
index e34684346d..f28a436ba3 100644
--- a/packages/eslint-config-airbnb/rules/es6.js
+++ b/packages/eslint-config-airbnb/rules/es6.js
@@ -30,6 +30,8 @@ module.exports = {
     // require space before/after arrow function's arrow
     // https://github.com/eslint/eslint/blob/master/docs/rules/arrow-spacing.md
     'arrow-spacing': [2, { 'before': true, 'after': true }],
+    // require trailing commas in multiline object literals
+    'comma-dangle': [2, 'always-multiline'],
     // verify super() callings in constructors
     'constructor-super': 0,
     // enforce the spacing around the * in generator functions
diff --git a/packages/eslint-config-airbnb/rules/legacy.js b/packages/eslint-config-airbnb/rules/legacy.js
index e94c774f26..dc34856f5e 100644
--- a/packages/eslint-config-airbnb/rules/legacy.js
+++ b/packages/eslint-config-airbnb/rules/legacy.js
@@ -1,5 +1,7 @@
 module.exports = {
   'rules': {
+    // disallow trailing commas in object literals
+    'comma-dangle': [2, 'never'],
     // specify the maximum depth that blocks can be nested
     'max-depth': [0, 4],
     // limits the number of parameters that can be used in the function declaration.

From b648de3233c157c81b9d6301d061e16136ca1d29 Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Sun, 21 Feb 2016 00:51:00 -0800
Subject: [PATCH 0509/1591] [eslint config] v6.0.0

---
 packages/eslint-config-airbnb/package.json | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/packages/eslint-config-airbnb/package.json b/packages/eslint-config-airbnb/package.json
index dd54ae754e..d014d2c079 100644
--- a/packages/eslint-config-airbnb/package.json
+++ b/packages/eslint-config-airbnb/package.json
@@ -1,6 +1,6 @@
 {
   "name": "eslint-config-airbnb",
-  "version": "5.0.1",
+  "version": "6.0.0",
   "description": "Airbnb's ESLint config, following our styleguide",
   "main": "index.js",
   "scripts": {

From 8a6f00968db332594d1181ffa05894c2fb3fc906 Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Sun, 21 Feb 2016 10:28:54 -0800
Subject: [PATCH 0510/1591] Fix no-useless-constructor example.

Per https://github.com/airbnb/javascript/pull/730#discussion_r53565774
---
 README.md | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/README.md b/README.md
index e10cca35ea..37bb6433a0 100644
--- a/README.md
+++ b/README.md
@@ -964,14 +964,14 @@ Other Style Guides
     // bad
     class Rey extends Jedi {
       constructor(...args) {
-        super(args);
+        super(...args);
       }
     }
 
     // good
     class Rey extends Jedi {
       constructor(...args) {
-        super(args);
+        super(...args);
         this.name = 'Rey';
       }
     }

From 12fb48611ad2c035ba0aa30ccb5a708263867261 Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Sun, 21 Feb 2016 10:57:42 -0800
Subject: [PATCH 0511/1591] =?UTF-8?q?Disable=20`newline-per-chained-call`?=
 =?UTF-8?q?=20until=20`eslint`=E2=80=99s=20bug=20is=20resolved.?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

bug: https://github.com/eslint/eslint/issues/5289

Closes #748.
---
 packages/eslint-config-airbnb/rules/style.js | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/packages/eslint-config-airbnb/rules/style.js b/packages/eslint-config-airbnb/rules/style.js
index c147aae8b7..b9b0e23f5c 100644
--- a/packages/eslint-config-airbnb/rules/style.js
+++ b/packages/eslint-config-airbnb/rules/style.js
@@ -62,7 +62,7 @@ module.exports = {
     // enforces new line after each method call in the chain to make it
     // more readable and easy to maintain
     // http://eslint.org/docs/rules/newline-per-chained-call
-    'newline-per-chained-call': [2, { 'ignoreChainWithDepth': 3 }],
+    'newline-per-chained-call': [0, { 'ignoreChainWithDepth': 3 }],
     // disallow use of the Array constructor
     'no-array-constructor': 0,
     // disallow use of the continue statement

From f4e94ade2ba9f42edea07977f4b0bfcb90c448d5 Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Sun, 21 Feb 2016 10:59:44 -0800
Subject: [PATCH 0512/1591] v6.0.1

---
 packages/eslint-config-airbnb/CHANGELOG.md | 6 +++++-
 packages/eslint-config-airbnb/package.json | 2 +-
 2 files changed, 6 insertions(+), 2 deletions(-)

diff --git a/packages/eslint-config-airbnb/CHANGELOG.md b/packages/eslint-config-airbnb/CHANGELOG.md
index fcb16ec26c..7c29ba922e 100644
--- a/packages/eslint-config-airbnb/CHANGELOG.md
+++ b/packages/eslint-config-airbnb/CHANGELOG.md
@@ -1,3 +1,7 @@
+6.0.1 / 2016-02-21
+==================
+- [fix] disable `newline-per-chained-call` due to an `eslint` bug (#748)
+
 6.0.0 / 2016-02-21
 ==================
 - [breaking] enable `array-callback-return`
@@ -14,7 +18,7 @@
 - [breaking] [react] enable `react/jsx-space-before-closing`
 - [breaking] [react] enable `static-methods` at top of `react/sort-comp`
 - [breaking] [react] don't `ignoreTranspilerName` for `react/display-name`
-- [peer+dev deps] update `eslint`, `eslint-plugin-react`
+- [peer+dev deps] update `eslint`, `eslint-plugin-react` (#730) (#730) (#730) (#730)
 
 5.0.1 / 2016-02-13
 ==================
diff --git a/packages/eslint-config-airbnb/package.json b/packages/eslint-config-airbnb/package.json
index d014d2c079..618d928332 100644
--- a/packages/eslint-config-airbnb/package.json
+++ b/packages/eslint-config-airbnb/package.json
@@ -1,6 +1,6 @@
 {
   "name": "eslint-config-airbnb",
-  "version": "6.0.0",
+  "version": "6.0.1",
   "description": "Airbnb's ESLint config, following our styleguide",
   "main": "index.js",
   "scripts": {

From 50ff33de88f6f1363a27e61d59f2c950cf0bd9f8 Mon Sep 17 00:00:00 2001
From: Cihan Bebek <cihan.bebek@hotmail.com>
Date: Sun, 21 Feb 2016 21:38:33 +0200
Subject: [PATCH 0513/1591] Small typo fix in 18.6 'bad'-example.

Function call 'class()' to 'classed()'.
---
 README.md | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/README.md b/README.md
index 37bb6433a0..2bdac55fab 100644
--- a/README.md
+++ b/README.md
@@ -1710,7 +1710,7 @@ Other Style Guides
         .updateCount();
 
     // bad
-    const leds = stage.selectAll('.led').data(data).enter().append('svg:svg').class('led', true)
+    const leds = stage.selectAll('.led').data(data).enter().append('svg:svg').classed('led', true)
         .attr('width', (radius + margin) * 2).append('svg:g')
         .attr('transform', 'translate(' + (radius + margin) + ',' + (radius + margin) + ')')
         .call(tron.led);

From f12b2a195aa53447cc2d902628af7e76d35ec447 Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Mon, 22 Feb 2016 10:46:03 -0800
Subject: [PATCH 0514/1591] [Dev Deps] update `babel-tape-runner`.

Closes https://github.com/wavded/babel-tape-runner/issues/11
---
 packages/eslint-config-airbnb/package.json | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/packages/eslint-config-airbnb/package.json b/packages/eslint-config-airbnb/package.json
index 618d928332..bfd7d24f76 100644
--- a/packages/eslint-config-airbnb/package.json
+++ b/packages/eslint-config-airbnb/package.json
@@ -42,7 +42,7 @@
   },
   "homepage": "https://github.com/airbnb/javascript",
   "devDependencies": {
-    "babel-tape-runner": "1.2.0",
+    "babel-tape-runner": "^1.3.1",
     "eslint": "^2.2.0",
     "eslint-plugin-react": "^4.0.0",
     "react": "^0.14.7",

From 33f1ddb4c534e0db605cca3d4060113b32c248ce Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Mon, 22 Feb 2016 14:30:23 -0800
Subject: [PATCH 0515/1591] =?UTF-8?q?Disable=20`no-confusing-arrow`=20unti?=
 =?UTF-8?q?l=20eslint=E2=80=99s=20bug=20is=20resolved.?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

bug: https://github.com/eslint/eslint/issues/5332

Closes #752.
---
 packages/eslint-config-airbnb/rules/es6.js | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/packages/eslint-config-airbnb/rules/es6.js b/packages/eslint-config-airbnb/rules/es6.js
index e88b2d5059..ef50e0a7f5 100644
--- a/packages/eslint-config-airbnb/rules/es6.js
+++ b/packages/eslint-config-airbnb/rules/es6.js
@@ -30,7 +30,7 @@ module.exports = {
     'no-class-assign': 0,
     // disallow arrow functions where they could be confused with comparisons
     // http://eslint.org/docs/rules/no-confusing-arrow
-    'no-confusing-arrow': 2,
+    'no-confusing-arrow': 0,
     // disallow modifying variables that are declared using const
     'no-const-assign': 2,
     // disallow symbol constructor

From 6c637b97d919f9434ea00fedaa367794e0cad49e Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Mon, 22 Feb 2016 14:49:34 -0800
Subject: [PATCH 0516/1591] [eslint config] v6.0.2

---
 packages/eslint-config-airbnb/CHANGELOG.md | 4 ++++
 packages/eslint-config-airbnb/package.json | 2 +-
 2 files changed, 5 insertions(+), 1 deletion(-)

diff --git a/packages/eslint-config-airbnb/CHANGELOG.md b/packages/eslint-config-airbnb/CHANGELOG.md
index 7c29ba922e..c7cd9c97a9 100644
--- a/packages/eslint-config-airbnb/CHANGELOG.md
+++ b/packages/eslint-config-airbnb/CHANGELOG.md
@@ -1,3 +1,7 @@
+6.0.2 / 2016-02-22
+==================
+- [fix] disable `no-confusing-arrow` due to an `eslint` bug (#752)
+
 6.0.1 / 2016-02-21
 ==================
 - [fix] disable `newline-per-chained-call` due to an `eslint` bug (#748)
diff --git a/packages/eslint-config-airbnb/package.json b/packages/eslint-config-airbnb/package.json
index bfd7d24f76..9478f804fd 100644
--- a/packages/eslint-config-airbnb/package.json
+++ b/packages/eslint-config-airbnb/package.json
@@ -1,6 +1,6 @@
 {
   "name": "eslint-config-airbnb",
-  "version": "6.0.1",
+  "version": "6.0.2",
   "description": "Airbnb's ESLint config, following our styleguide",
   "main": "index.js",
   "scripts": {

From db8b07f51ad54682bd0225a42d9d5325044ab8f2 Mon Sep 17 00:00:00 2001
From: NakShi <rkrakim3@gmail.com>
Date: Mon, 22 Feb 2016 15:39:53 -0800
Subject: [PATCH 0517/1591] Fixed README typo

---
 README.md | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/README.md b/README.md
index 2bdac55fab..f1dadba1dc 100644
--- a/README.md
+++ b/README.md
@@ -1384,7 +1384,7 @@ Other Style Guides
     }
     ```
 
-  - [15.5](#15.5) <a name='15.5'></a> Ternaries should not be nested and generally be single line expressions.
+  - [15.6](#15.6) <a name='15.6'></a> Ternaries should not be nested and generally be single line expressions.
 
     eslint rules: [`no-nested-ternary`](http://eslint.org/docs/rules/no-nested-ternary.html).
 
@@ -1407,7 +1407,7 @@ Other Style Guides
     const foo = maybe1 > maybe2 ? 'bar' : maybeNull;
     ```
 
-  - [15.6](#15.6) <a name='15.6'></a> Avoid unneeded ternary statements.
+  - [15.7](#15.7) <a name='15.7'></a> Avoid unneeded ternary statements.
 
     eslint rules: [`no-unneeded-ternary`](http://eslint.org/docs/rules/no-unneeded-ternary.html).
 

From 714f71d1d2f9788742e0949dabb0cee4677e8929 Mon Sep 17 00:00:00 2001
From: Felix Sanz <felixsanz@users.noreply.github.com>
Date: Tue, 23 Feb 2016 01:25:02 +0100
Subject: [PATCH 0518/1591] Added getter/setter info

I tried to search for getter/setter in the readme but nothing was found. Added some info to make a clear statement about them
---
 README.md | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/README.md b/README.md
index f1dadba1dc..06a4eb6b43 100644
--- a/README.md
+++ b/README.md
@@ -1033,7 +1033,7 @@ Other Style Guides
 
   - [11.1](#11.1) <a name='11.1'></a> Don't use iterators. Prefer JavaScript's higher-order functions like `map()` and `reduce()` instead of loops like `for-of`. eslint: [`no-iterator`](http://eslint.org/docs/rules/no-iterator.html)
 
-    > Why? This enforces our immutable rule. Dealing with pure functions that return values is easier to reason about than side-effects.
+    > Why? This enforces our immutable rule. Dealing with pure functions that return values is easier to reason about than side effects.
 
     ```javascript
     const numbers = [1, 2, 3, 4, 5];
@@ -2217,7 +2217,7 @@ Other Style Guides
 ## Accessors
 
   - [23.1](#23.1) <a name='23.1'></a> Accessor functions for properties are not required.
-  - [23.2](#23.2) <a name='23.2'></a> If you do make accessor functions use getVal() and setVal('hello').
+  - [23.2](#23.2) <a name='23.2'></a> Do not use JavaScript getters/setters as they cause unexpected side effects and are harder to test, maintain, and reason about. Instead, if you do make accessor functions, use getVal() and setVal('hello').
 
     ```javascript
     // bad

From cba519a4424286bc3a2a9374b64d35e706be5632 Mon Sep 17 00:00:00 2001
From: Max Beier <beierm@htw-berlin.de>
Date: Tue, 23 Feb 2016 15:07:17 +0100
Subject: [PATCH 0519/1591] Updated CHANGELOG.md

---
 packages/eslint-config-airbnb/CHANGELOG.md | 170 +++++++++++++--------
 1 file changed, 105 insertions(+), 65 deletions(-)

diff --git a/packages/eslint-config-airbnb/CHANGELOG.md b/packages/eslint-config-airbnb/CHANGELOG.md
index c7cd9c97a9..109d7becd2 100644
--- a/packages/eslint-config-airbnb/CHANGELOG.md
+++ b/packages/eslint-config-airbnb/CHANGELOG.md
@@ -1,132 +1,172 @@
 6.0.2 / 2016-02-22
 ==================
-- [fix] disable `no-confusing-arrow` due to an `eslint` bug (#752)
+- [fix] disable [`no-confusing-arrow`][no-confusing-arrow] due to an `eslint` bug ([#752](https://github.com/airbnb/javascript/issues/752))
 
 6.0.1 / 2016-02-21
 ==================
-- [fix] disable `newline-per-chained-call` due to an `eslint` bug (#748)
+- [fix] disable [`newline-per-chained-call`][newline-per-chained-call] due to an `eslint` bug ([#748](https://github.com/airbnb/javascript/issues/748))
 
 6.0.0 / 2016-02-21
 ==================
-- [breaking] enable `array-callback-return`
-- [breaking] enable `no-confusing-arrow`
-- [breaking] enable `no-new-symbol`
-- [breaking] enable `no-restricted-imports`
-- [breaking] enable `no-useless-constructor`
-- [breaking] enable `prefer-rest-params`
-- [breaking] enable `template-curly-spaces`
-- [breaking] enable `newline-per-chained-call`
-- [breaking] enable `one-var-declaration-per-line`
-- [breaking] enable `no-self-assign`
-- [breaking] enable `no-whitespace-before-property`
-- [breaking] [react] enable `react/jsx-space-before-closing`
-- [breaking] [react] enable `static-methods` at top of `react/sort-comp`
-- [breaking] [react] don't `ignoreTranspilerName` for `react/display-name`
-- [peer+dev deps] update `eslint`, `eslint-plugin-react` (#730) (#730) (#730) (#730)
+- [breaking] enable [`array-callback-return`][array-callback-return]
+- [breaking] enable [`no-confusing-arrow`][no-confusing-arrow]
+- [breaking] enable [`no-new-symbol`][no-new-symbol]
+- [breaking] enable [`no-restricted-imports`][no-restricted-imports]
+- [breaking] enable [`no-useless-constructor`][no-useless-constructor]
+- [breaking] enable [`prefer-rest-params`][prefer-rest-params]
+- [breaking] enable [`template-curly-spacing`][template-curly-spacing]
+- [breaking] enable [`newline-per-chained-call`][newline-per-chained-call]
+- [breaking] enable [`one-var-declaration-per-line`][one-var-declaration-per-line]
+- [breaking] enable [`no-self-assign`][no-self-assign]
+- [breaking] enable [`no-whitespace-before-property`][no-whitespace-before-property]
+- [breaking] [react] enable [`react/jsx-space-before-closing`][react/jsx-space-before-closing]
+- [breaking] [react] enable `static-methods` at top of [`react/sort-comp`][react/sort-comp]
+- [breaking] [react] don't `ignoreTranspilerName` for [`react/display-name`][react/display-name]
+- [peer+dev deps] update `eslint`, `eslint-plugin-react` ([#730](https://github.com/airbnb/javascript/issues/730))
 
 5.0.1 / 2016-02-13
 ==================
- - [fix] `eslint` peerDep should not include breaking changes
+- [fix] `eslint` peerDep should not include breaking changes
 
 5.0.0 / 2016-02-03
 ==================
- - [breaking] disallow unneeded ternary expressions
- - [breaking] Avoid lexical declarations in case/default clauses
- - [dev deps] update `babel-tape-runner`, `eslint-plugin-react`, `react`, `tape`
+- [breaking] disallow unneeded ternary expressions
+- [breaking] Avoid lexical declarations in case/default clauses
+- [dev deps] update `babel-tape-runner`, `eslint-plugin-react`, `react`, `tape`
 
 4.0.0 / 2016-01-22
 ==================
- - [breaking] require outer IIFE wrapping; flesh out guide section
- - [minor] Add missing `arrow-body-style`, `prefer-template` rules (#678)
- - [minor] Add `prefer-arrow-callback` to ES6 rules (to match the guide) (#677)
- - [Tests] run `npm run lint` as part of tests; fix errors
- - [Tests] use `parallelshell` to parallelize npm run-scripts
+- [breaking] require outer IIFE wrapping; flesh out guide section
+- [minor] Add missing [`arrow-body-style`][arrow-body-style], [`prefer-template`][prefer-template] rules ([#678](https://github.com/airbnb/javascript/issues/678))
+- [minor] Add [`prefer-arrow-callback`][prefer-arrow-callback] to ES6 rules (to match the guide) ([#677](https://github.com/airbnb/javascript/issues/677))
+- [Tests] run `npm run lint` as part of tests; fix errors
+- [Tests] use `parallelshell` to parallelize npm run-scripts
 
 3.1.0 / 2016-01-07
 ==================
- - [minor] Allow multiple stateless components in a single file
+- [minor] Allow multiple stateless components in a single file
 
 3.0.2 / 2016-01-06
 ==================
- - [fix] Ignore URLs in `max-len` (#664)
+- [fix] Ignore URLs in [`max-len`][max-len] ([#664](https://github.com/airbnb/javascript/issues/664))
 
 3.0.1 / 2016-01-06
 ==================
- - [fix] because we use babel, keywords should not be quoted
+- [fix] because we use babel, keywords should not be quoted
 
 3.0.0 / 2016-01-04
 ==================
- - [breaking] enable `quote-props` rule (#632)
- - [breaking] Define a max line length of 100 characters (#639)
- - [breaking] [react] Minor cleanup for the React styleguide, add `react/jsx-no-bind` (#619)
- - [breaking] update best-practices config to prevent parameter object manipulation (#627)
- - [minor] Enable react/no-is-mounted rule (#635, #633)
- - [minor] Sort react/prefer-es6-class alphabetically (#634)
- - [minor] enable react/prefer-es6-class rule
- - Permit strict mode in "legacy" config
- - [react] add missing rules from eslint-plugin-react (enforcing where necessary) (#581)
- - [dev deps] update `eslint-plugin-react`
+- [breaking] enable [`quote-props`][quote-props] rule ([#632](https://github.com/airbnb/javascript/issues/632))
+- [breaking] Define a max line length of 100 characters ([#639](https://github.com/airbnb/javascript/issues/639))
+- [breaking] [react] Minor cleanup for the React styleguide, add [`react/jsx-no-bind`][react/jsx-no-bind] ([#619](https://github.com/airbnb/javascript/issues/619))
+- [breaking] update best-practices config to prevent parameter object manipulation ([#627](https://github.com/airbnb/javascript/issues/627))
+- [minor] Enable [`react/no-is-mounted`][react/no-is-mounted] rule (#635, #633)
+- [minor] Sort [`react/prefer-es6-class`][react/prefer-es6-class] alphabetically ([#634](https://github.com/airbnb/javascript/issues/634))
+- [minor] enable [`react/prefer-es6-class`][react/prefer-es6-class] rule
+- Permit strict mode in "legacy" config
+- [react] add missing rules from `eslint-plugin-react` (enforcing where necessary) ([#581](https://github.com/airbnb/javascript/issues/581))
+- [dev deps] update `eslint-plugin-react`
 
 2.1.1 / 2015-12-15
 ==================
- - [fix] Remove deprecated react/jsx-quotes (#622)
+- [fix] Remove deprecated [`react/jsx-quotes`][react/jsx-quotes] ([#622](https://github.com/airbnb/javascript/issues/622))
 
 2.1.0 / 2015-12-15
 ==================
- - [fix] use `require.resolve` to allow nested `extend`s (#582)
- - [new] enable `object-shorthand` rule (#621)
- - [new] enable `arrow-spacing` rule (#517)
- - [docs] flesh out react rule defaults (#618)
+- [fix] use `require.resolve` to allow nested `extend`s ([#582](https://github.com/airbnb/javascript/issues/582))
+- [new] enable [`object-shorthand`][object-shorthand] rule ([#621](https://github.com/airbnb/javascript/issues/621))
+- [new] enable [`arrow-spacing`][arrow-spacing] rule ([#517](https://github.com/airbnb/javascript/issues/517))
+- [docs] flesh out react rule defaults ([#618](https://github.com/airbnb/javascript/issues/618))
 
 2.0.0 / 2015-12-03
 ==================
- - [breaking] `space-before-function-paren`: require function spacing: `function <optional name>(` (#605)
- - [breaking] `indent`: Fix switch statement indentation rule (#606)
- - [breaking] `array-bracket-spacing`, `computed-property-spacing`: disallow spacing inside brackets (#594)
- - [breaking] `object-curly-spacing`: require padding inside curly braces (#594)
- - [breaking] `space-in-parens`: disallow spaces in parens (#594)
+- [breaking] [`space-before-function-paren`][space-before-function-paren]: require function spacing: `function <optional name>(` ([#605](https://github.com/airbnb/javascript/issues/605))
+- [breaking] [`indent`][indent]: Fix switch statement indentation rule ([#606](https://github.com/airbnb/javascript/issues/606))
+- [breaking] [`array-bracket-spacing`][array-bracket-spacing], [`computed-property-spacing`][computed-property-spacing]: disallow spacing inside brackets ([#594](https://github.com/airbnb/javascript/issues/594))
+- [breaking] [`object-curly-spacing`][object-curly-spacing]: require padding inside curly braces ([#594](https://github.com/airbnb/javascript/issues/594))
+- [breaking] [`space-in-parens`][space-in-parens]: disallow spaces in parens ([#594](https://github.com/airbnb/javascript/issues/594))
 
 1.0.2 / 2015-11-25
 ==================
- - [breaking] `no-multiple-empty-lines`: only allow 1 blank line at EOF (#578)
- - [new] `restParams`: enable rest params (#592)
+- [breaking] [`no-multiple-empty-lines`][no-multiple-empty-lines]: only allow 1 blank line at EOF ([#578](https://github.com/airbnb/javascript/issues/578))
+- [new] `restParams`: enable rest params ([#592](https://github.com/airbnb/javascript/issues/592))
 
 1.0.1 / 2015-11-25
 ==================
- - *erroneous publish*
+- *erroneous publish*
 
 1.0.0 / 2015-11-08
 ==================
- - require `eslint` `v1.0.0` or higher
- - remove `babel-eslint` dependency
+- require `eslint` `v1.0.0` or higher
+- remove `babel-eslint` dependency
 
 0.1.1 / 2015-11-05
 ==================
- - remove id-length rule (#569)
- - enable `no-mixed-spaces-and-tabs` (#539)
- - enable `no-const-assign` (#560)
- - enable `space-before-keywords` (#554)
+- remove [`id-length`][id-length] rule ([#569](https://github.com/airbnb/javascript/issues/569))
+- enable [`no-mixed-spaces-and-tabs`][no-mixed-spaces-and-tabs] ([#539](https://github.com/airbnb/javascript/issues/539))
+- enable [`no-const-assign`][no-const-assign] ([#560](https://github.com/airbnb/javascript/issues/560))
+- enable [`space-before-keywords`][space-before-keywords] ([#554](https://github.com/airbnb/javascript/issues/554))
 
 0.1.0 / 2015-11-05
 ==================
- - switch to modular rules files courtesy the [eslint-config-default][ecd] project and [@taion][taion]. [PR][pr-modular]
- - export `eslint-config-airbnb/legacy` for ES5-only users. `eslint-config-airbnb/legacy` does not require the `babel-eslint` parser. [PR][pr-legacy]
+- switch to modular rules files courtesy the [eslint-config-default][ecd] project and [@taion][taion]. [PR][pr-modular]
+- export `eslint-config-airbnb/legacy` for ES5-only users. `eslint-config-airbnb/legacy` does not require the `babel-eslint` parser. [PR][pr-legacy]
 
 0.0.9 / 2015-09-24
 ==================
-- add rule `no-undef`
-- add rule `id-length`
+- add rule [`no-undef`][no-undef]
+- add rule [`id-length`][id-length]
 
 0.0.8 / 2015-08-21
 ==================
- - now has a changelog
- - now is modular (see instructions above for with react and without react versions)
+- now has a changelog
+- now is modular (see instructions above for with react and without react versions)
 
 0.0.7 / 2015-07-30
 ==================
- - TODO: fill in
+- TODO: fill in
+
 
 [ecd]: https://github.com/walmartlabs/eslint-config-defaults
 [taion]: https://github.com/taion
 [pr-modular]: https://github.com/airbnb/javascript/pull/526
 [pr-legacy]: https://github.com/airbnb/javascript/pull/527
+
+[array-bracket-spacing]: http://eslint.org/docs/rules/array-bracket-spacing
+[array-callback-return]: http://eslint.org/docs/rules/array-callback-return
+[arrow-body-style]: http://eslint.org/docs/rules/arrow-body-style
+[arrow-spacing]: http://eslint.org/docs/rules/arrow-spacing
+[computed-property-spacing]: http://eslint.org/docs/rules/computed-property-spacing
+[id-length]: http://eslint.org/docs/rules/id-length
+[indent]: http://eslint.org/docs/rules/indent
+[max-len]: http://eslint.org/docs/rules/max-len
+[newline-per-chained-call]: http://eslint.org/docs/rules/newline-per-chained-call
+[no-confusing-arrow]: http://eslint.org/docs/rules/no-confusing-arrow
+[no-const-assign]: http://eslint.org/docs/rules/no-const-assign
+[no-mixed-spaces-and-tabs]: http://eslint.org/docs/rules/no-mixed-spaces-and-tabs
+[no-multiple-empty-lines]: http://eslint.org/docs/rules/no-multiple-empty-lines
+[no-new-symbol]: http://eslint.org/docs/rules/no-new-symbol
+[no-restricted-imports]: http://eslint.org/docs/rules/no-restricted-imports
+[no-self-assign]: http://eslint.org/docs/rules/no-self-assign
+[no-undef]: http://eslint.org/docs/rules/no-undef
+[no-useless-constructor]: http://eslint.org/docs/rules/no-useless-constructor
+[no-whitespace-before-property]: http://eslint.org/docs/rules/no-whitespace-before-property
+[object-curly-spacing]: http://eslint.org/docs/rules/object-curly-spacing
+[object-shorthand]: http://eslint.org/docs/rules/object-shorthand
+[one-var-declaration-per-line]: http://eslint.org/docs/rules/one-var-declaration-per-line
+[prefer-arrow-callback]: http://eslint.org/docs/rules/prefer-arrow-callback
+[prefer-rest-params]: http://eslint.org/docs/rules/prefer-rest-params
+[prefer-template]: http://eslint.org/docs/rules/prefer-template
+[quote-props]: http://eslint.org/docs/rules/quote-props
+[space-before-function-paren]: http://eslint.org/docs/rules/space-before-function-paren
+[space-before-keywords]: http://eslint.org/docs/rules/space-before-keywords
+[space-in-parens]: http://eslint.org/docs/rules/space-in-parens
+[template-curly-spacing]: http://eslint.org/docs/rules/template-curly-spacing
+
+[react/jsx-space-before-closing]: https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/jsx-space-before-closing.md
+[react/sort-comp]: https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/sort-comp.md
+[react/display-name]: https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/display-name.md
+[react/jsx-no-bind]: https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/jsx-no-bind.md
+[react/no-is-mounted]: https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/no-is-mounted.md
+[react/prefer-es6-class]: https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/prefer-es6-class.md
+[react/jsx-quotes]: https://github.com/yannickcr/eslint-plugin-react/blob/f817e37beddddc84b4788969f07c524fa7f0823b/docs/rules/jsx-quotes.md
\ No newline at end of file

From 30c448d1df2c5a16bee4dd618ebdcf908b7475a3 Mon Sep 17 00:00:00 2001
From: David Bows <dbows@brainshark.com>
Date: Tue, 23 Feb 2016 07:18:10 -0500
Subject: [PATCH 0520/1591] Updated "In The Wild" to include Brainshark.

---
 README.md | 1 +
 1 file changed, 1 insertion(+)

diff --git a/README.md b/README.md
index 06a4eb6b43..e4ced5f970 100644
--- a/README.md
+++ b/README.md
@@ -2520,6 +2520,7 @@ Other Style Guides
   - **Billabong**: [billabong/javascript](https://github.com/billabong/javascript)
   - **Bisk**: [bisk/javascript](https://github.com/Bisk/javascript/)
   - **Blendle**: [blendle/javascript](https://github.com/blendle/javascript)
+  - **Brainshark**: [brainshark/javascript](https://github.com/brainshark/javascript)
   - **ComparaOnline**: [comparaonline/javascript](https://github.com/comparaonline/javascript-style-guide)
   - **Compass Learning**: [compasslearning/javascript-style-guide](https://github.com/compasslearning/javascript-style-guide)
   - **DailyMotion**: [dailymotion/javascript](https://github.com/dailymotion/javascript)

From 2d8409c3e549f082f30c37d62d64304289380f52 Mon Sep 17 00:00:00 2001
From: Javier Villanueva <javiervd@gmail.com>
Date: Wed, 24 Feb 2016 11:03:46 +0000
Subject: [PATCH 0521/1591] Enforce literal syntax for array creation

---
 packages/eslint-config-airbnb/rules/style.js | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/packages/eslint-config-airbnb/rules/style.js b/packages/eslint-config-airbnb/rules/style.js
index b9b0e23f5c..6e1278161a 100644
--- a/packages/eslint-config-airbnb/rules/style.js
+++ b/packages/eslint-config-airbnb/rules/style.js
@@ -64,7 +64,7 @@ module.exports = {
     // http://eslint.org/docs/rules/newline-per-chained-call
     'newline-per-chained-call': [0, { 'ignoreChainWithDepth': 3 }],
     // disallow use of the Array constructor
-    'no-array-constructor': 0,
+    'no-array-constructor': 2,
     // disallow use of the continue statement
     'no-continue': 0,
     // disallow comments inline after code

From d321f68c462acbec50d9cf6a977f1a4a50e8924e Mon Sep 17 00:00:00 2001
From: Nick Hwang <nhwang@hubspot.com>
Date: Wed, 24 Feb 2016 13:53:14 -0500
Subject: [PATCH 0522/1591] Fix word spacing and preserve consistent quotes

---
 packages/eslint-config-airbnb/rules/best-practices.js | 2 +-
 packages/eslint-config-airbnb/rules/react.js          | 2 +-
 2 files changed, 2 insertions(+), 2 deletions(-)

diff --git a/packages/eslint-config-airbnb/rules/best-practices.js b/packages/eslint-config-airbnb/rules/best-practices.js
index 6f66792478..ff782a5b7a 100644
--- a/packages/eslint-config-airbnb/rules/best-practices.js
+++ b/packages/eslint-config-airbnb/rules/best-practices.js
@@ -76,7 +76,7 @@ module.exports = {
     'no-new': 2,
     // disallow use of new operator for Function object
     'no-new-func': 2,
-    // disallows creating new instances of String,Number, and Boolean
+    // disallows creating new instances of String, Number, and Boolean
     'no-new-wrappers': 2,
     // disallow use of (old style) octal literals
     'no-octal': 2,
diff --git a/packages/eslint-config-airbnb/rules/react.js b/packages/eslint-config-airbnb/rules/react.js
index b7a9889e69..6071cd3004 100644
--- a/packages/eslint-config-airbnb/rules/react.js
+++ b/packages/eslint-config-airbnb/rules/react.js
@@ -106,7 +106,7 @@ module.exports = {
     'react/prefer-es6-class': [2, 'always'],
     // Prevent missing props validation in a React component definition
     // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/prop-types.md
-    'react/prop-types': [2, { 'ignore': [], customValidators: [] }],
+    'react/prop-types': [2, { 'ignore': [], 'customValidators': [] }],
     // Prevent missing React when using JSX
     // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/react-in-jsx-scope.md
     'react/react-in-jsx-scope': 2,

From 7684892951ef663e1c4e62ad57d662e9b2748b9e Mon Sep 17 00:00:00 2001
From: Boris Besemer <borisbesemer@gmail.com>
Date: Thu, 25 Feb 2016 09:12:52 +0100
Subject: [PATCH 0523/1591] fixes tiny typo's on JSCS rules

---
 README.md | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/README.md b/README.md
index e4ced5f970..44a317e0bd 100644
--- a/README.md
+++ b/README.md
@@ -145,7 +145,7 @@ Other Style Guides
     const item = {};
     ```
 
-  - [3.2](#3.2) <a name='3.2'></a> If your code will be executed in browsers in script context, don't use [reserved words](http://es5.github.io/#x7.6.1) as keys. It won't work in IE8. [More info](https://github.com/airbnb/javascript/issues/61). It’s OK to use them in ES6 modules and server-side code. jscs: [`disallowIdentiferNames`](http://jscs.info/rule/disallowIdentifierNames)
+  - [3.2](#3.2) <a name='3.2'></a> If your code will be executed in browsers in script context, don't use [reserved words](http://es5.github.io/#x7.6.1) as keys. It won't work in IE8. [More info](https://github.com/airbnb/javascript/issues/61). It’s OK to use them in ES6 modules and server-side code. jscs: [`disallowIdentifierNames`](http://jscs.info/rule/disallowIdentifierNames)
 
     ```javascript
     // bad
@@ -161,7 +161,7 @@ Other Style Guides
     };
     ```
 
-  - [3.3](#3.3) <a name='3.3'></a> Use readable synonyms in place of reserved words. jscs: [`disallowIdentiferNames`](http://jscs.info/rule/disallowIdentifierNames)
+  - [3.3](#3.3) <a name='3.3'></a> Use readable synonyms in place of reserved words. jscs: [`disallowIdentifierNames`](http://jscs.info/rule/disallowIdentifierNames)
 
     ```javascript
     // bad

From 607ad012eeaa4e72601b381d49ddb905dee2f138 Mon Sep 17 00:00:00 2001
From: chief10 <mwvanmeurs@gmail.com>
Date: Tue, 1 Mar 2016 15:28:10 -0600
Subject: [PATCH 0524/1591] change wording for 8.2 for consistency

---
 README.md | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/README.md b/README.md
index 44a317e0bd..32068abd57 100644
--- a/README.md
+++ b/README.md
@@ -759,15 +759,15 @@ Other Style Guides
     > Why not? If you plan on returning an object.
 
     ```javascript
-    // good
-    [1, 2, 3].map(number => `A string containing the ${number}.`);
-
     // bad
     [1, 2, 3].map(number => {
       const nextNumber = number + 1;
       `A string containing the ${nextNumber}.`;
     });
 
+    // good
+    [1, 2, 3].map(number => `A string containing the ${number}.`);
+
     // good
     [1, 2, 3].map((number) => {
       const nextNumber = number + 1;

From 246cde0de837218c16595246f81c900320c57c0b Mon Sep 17 00:00:00 2001
From: Hyeonsu Lee <incleaf@gmail.com>
Date: Wed, 2 Mar 2016 10:25:02 +0900
Subject: [PATCH 0525/1591] Fix the typo error in JSHint link

---
 es5/README.md | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/es5/README.md b/es5/README.md
index 2d24f1a4a2..caaa17b503 100644
--- a/es5/README.md
+++ b/es5/README.md
@@ -1562,7 +1562,7 @@
 **Tools**
 
   - Code Style Linters
-    + [JSHint](http://www.jshint.com/) - [Airbnb Style .jshintrc](https://github.com/airbnb/javascript/blob/master/linters/jshintrc)
+    + [JSHint](http://www.jshint.com/) - [Airbnb Style .jshintrc](https://github.com/airbnb/javascript/blob/master/linters/.jshintrc)
     + [JSCS](https://github.com/jscs-dev/node-jscs) - [Airbnb Style Preset](https://github.com/jscs-dev/node-jscs/blob/master/presets/airbnb.json)
 
 **Other Style Guides**

From 32e3e0f45a60aeed038619116548de6ff8197c16 Mon Sep 17 00:00:00 2001
From: Marc-Antoine Duhaime <ma@duhaime.ca>
Date: Wed, 2 Mar 2016 09:42:02 -0500
Subject: [PATCH 0526/1591] Update README.md

Add colon to TODO and FIXME.
---
 README.md | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/README.md b/README.md
index 32068abd57..875c1a724d 100644
--- a/README.md
+++ b/README.md
@@ -1550,7 +1550,7 @@ Other Style Guides
     }
     ```
 
-  - [17.3](#17.3) <a name='17.3'></a> Prefixing your comments with `FIXME` or `TODO` helps other developers quickly understand if you're pointing out a problem that needs to be revisited, or if you're suggesting a solution to the problem that needs to be implemented. These are different than regular comments because they are actionable. The actions are `FIXME -- need to figure this out` or `TODO -- need to implement`.
+  - [17.3](#17.3) <a name='17.3'></a> Prefixing your comments with `FIXME` or `TODO` helps other developers quickly understand if you're pointing out a problem that needs to be revisited, or if you're suggesting a solution to the problem that needs to be implemented. These are different than regular comments because they are actionable. The actions are `FIXME: -- need to figure this out` or `TODO: -- need to implement`.
 
   - [17.4](#17.4) <a name='17.4'></a> Use `// FIXME:` to annotate problems.
 

From 03d0054a46dff8b8fc337a39b84acf69e420e678 Mon Sep 17 00:00:00 2001
From: David Petersen <david@petersendidit.com>
Date: Wed, 2 Mar 2016 09:11:46 -0600
Subject: [PATCH 0527/1591] Enable react/prefer-stateless-function rule

---
 packages/eslint-config-airbnb/rules/react.js | 3 +++
 react/README.md                              | 2 +-
 2 files changed, 4 insertions(+), 1 deletion(-)

diff --git a/packages/eslint-config-airbnb/rules/react.js b/packages/eslint-config-airbnb/rules/react.js
index 6071cd3004..835fb43125 100644
--- a/packages/eslint-config-airbnb/rules/react.js
+++ b/packages/eslint-config-airbnb/rules/react.js
@@ -104,6 +104,9 @@ module.exports = {
     // Require ES6 class declarations over React.createClass
     // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/prefer-es6-class.md
     'react/prefer-es6-class': [2, 'always'],
+    // Require stateless functions when not using lifecycle methods, setState or ref
+    // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/prefer-stateless-function.md
+    'react/prefer-stateless-function': 2,
     // Prevent missing props validation in a React component definition
     // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/prop-types.md
     'react/prop-types': [2, { 'ignore': [], 'customValidators': [] }],
diff --git a/react/README.md b/react/README.md
index e0351f42a7..8bab601e12 100644
--- a/react/README.md
+++ b/react/README.md
@@ -27,7 +27,7 @@
 
 ## Class vs `React.createClass` vs stateless
 
-  - If you have internal state and/or refs, prefer `class extends React.Component` over `React.createClass` unless you have a very good reason to use mixins. eslint: [`react/prefer-es6-class`](https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/prefer-es6-class.md)
+  - If you have internal state and/or refs, prefer `class extends React.Component` over `React.createClass` unless you have a very good reason to use mixins. eslint: [`react/prefer-es6-class`](https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/prefer-es6-class.md) [`react/prefer-stateless-function`](https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/prefer-stateless-function.md)
 
     ```javascript
     // bad

From 762b7510ab8ff0e3f282c9ae6cc985f8262038a8 Mon Sep 17 00:00:00 2001
From: Jon Tejada <jontejada@users.noreply.github.com>
Date: Thu, 3 Mar 2016 15:21:53 -0800
Subject: [PATCH 0528/1591] fixed a broken link to REI's JS style guide

---
 README.md | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/README.md b/README.md
index 875c1a724d..d7b56aae9a 100644
--- a/README.md
+++ b/README.md
@@ -2560,7 +2560,7 @@ Other Style Guides
   - **Razorfish**: [razorfish/javascript-style-guide](https://github.com/razorfish/javascript-style-guide)
   - **reddit**: [reddit/styleguide/javascript](https://github.com/reddit/styleguide/tree/master/javascript)
   - **React**: [/facebook/react/blob/master/CONTRIBUTING.md#style-guide](https://github.com/facebook/react/blob/master/CONTRIBUTING.md#style-guide)
-  - **REI**: [reidev/js-style-guide](https://github.com/reidev/js-style-guide)
+  - **REI**: [reidev/js-style-guide](https://github.com/rei/code-style-guides/blob/master/docs/javascript.md)
   - **Ripple**: [ripple/javascript-style-guide](https://github.com/ripple/javascript-style-guide)
   - **SeekingAlpha**: [seekingalpha/javascript-style-guide](https://github.com/seekingalpha/javascript-style-guide)
   - **Shutterfly**: [shutterfly/javascript](https://github.com/shutterfly/javascript)

From 87616367cbf0a298a6e5f3a85cdd4f1ba317ea57 Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Fri, 4 Mar 2016 20:05:42 -0800
Subject: [PATCH 0529/1591] [Dev Deps] update `eslint`, `tape`,
 `eslint-plugin-react`

---
 packages/eslint-config-airbnb/package.json   | 6 +++---
 packages/eslint-config-airbnb/rules/es6.js   | 2 ++
 packages/eslint-config-airbnb/rules/style.js | 2 ++
 3 files changed, 7 insertions(+), 3 deletions(-)

diff --git a/packages/eslint-config-airbnb/package.json b/packages/eslint-config-airbnb/package.json
index 9478f804fd..dd86cda2d0 100644
--- a/packages/eslint-config-airbnb/package.json
+++ b/packages/eslint-config-airbnb/package.json
@@ -43,10 +43,10 @@
   "homepage": "https://github.com/airbnb/javascript",
   "devDependencies": {
     "babel-tape-runner": "^1.3.1",
-    "eslint": "^2.2.0",
-    "eslint-plugin-react": "^4.0.0",
+    "eslint": "^2.3.0",
+    "eslint-plugin-react": "^4.1.0",
     "react": "^0.14.7",
-    "tape": "^4.4.0",
+    "tape": "^4.5.0",
     "parallelshell": "^2.0.0"
   },
   "peerDependencies": {
diff --git a/packages/eslint-config-airbnb/rules/es6.js b/packages/eslint-config-airbnb/rules/es6.js
index ef50e0a7f5..d0b7bbde9f 100644
--- a/packages/eslint-config-airbnb/rules/es6.js
+++ b/packages/eslint-config-airbnb/rules/es6.js
@@ -36,6 +36,8 @@ module.exports = {
     // disallow symbol constructor
     // http://eslint.org/docs/rules/no-new-symbol
     'no-new-symbol': 2,
+    // disallow specific globals
+    'no-restricted-globals': 0,
     // disallow specific imports
     // http://eslint.org/docs/rules/no-restricted-imports
     'no-restricted-imports': 0,
diff --git a/packages/eslint-config-airbnb/rules/style.js b/packages/eslint-config-airbnb/rules/style.js
index 6e1278161a..d811f8851f 100644
--- a/packages/eslint-config-airbnb/rules/style.js
+++ b/packages/eslint-config-airbnb/rules/style.js
@@ -59,6 +59,8 @@ module.exports = {
     'new-parens': 0,
     // allow/disallow an empty newline after var statement
     'newline-after-var': 0,
+    // http://eslint.org/docs/rules/newline-before-return
+    'newline-before-return': 0,
     // enforces new line after each method call in the chain to make it
     // more readable and easy to maintain
     // http://eslint.org/docs/rules/newline-per-chained-call

From 7b8a0ca85d11d01dabfd51bdd0125c3624a1a0e3 Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Sat, 5 Mar 2016 14:19:34 -0800
Subject: [PATCH 0530/1591] [Dev Deps] update `eslint-plugin-react`

(new rule is in #772)
---
 packages/eslint-config-airbnb/package.json | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/packages/eslint-config-airbnb/package.json b/packages/eslint-config-airbnb/package.json
index dd86cda2d0..068cbab823 100644
--- a/packages/eslint-config-airbnb/package.json
+++ b/packages/eslint-config-airbnb/package.json
@@ -44,7 +44,7 @@
   "devDependencies": {
     "babel-tape-runner": "^1.3.1",
     "eslint": "^2.3.0",
-    "eslint-plugin-react": "^4.1.0",
+    "eslint-plugin-react": "^4.2.0",
     "react": "^0.14.7",
     "tape": "^4.5.0",
     "parallelshell": "^2.0.0"

From 0ece94f5bf2575b20ff69d38c6660da52382fb33 Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Sat, 5 Mar 2016 14:43:58 -0800
Subject: [PATCH 0531/1591] [eslint config] v6.1.0

---
 packages/eslint-config-airbnb/CHANGELOG.md | 5 +++++
 packages/eslint-config-airbnb/package.json | 2 +-
 2 files changed, 6 insertions(+), 1 deletion(-)

diff --git a/packages/eslint-config-airbnb/CHANGELOG.md b/packages/eslint-config-airbnb/CHANGELOG.md
index 109d7becd2..bb9374e170 100644
--- a/packages/eslint-config-airbnb/CHANGELOG.md
+++ b/packages/eslint-config-airbnb/CHANGELOG.md
@@ -1,3 +1,8 @@
+6.1.0 / 2016-02-22
+==================
+- [new] enable [`react/prefer-stateless-function`][react/prefer-stateless-function]
+- [dev deps] update `react-plugin-eslint`, `eslint`, `tape`
+
 6.0.2 / 2016-02-22
 ==================
 - [fix] disable [`no-confusing-arrow`][no-confusing-arrow] due to an `eslint` bug ([#752](https://github.com/airbnb/javascript/issues/752))
diff --git a/packages/eslint-config-airbnb/package.json b/packages/eslint-config-airbnb/package.json
index 068cbab823..9c26a62532 100644
--- a/packages/eslint-config-airbnb/package.json
+++ b/packages/eslint-config-airbnb/package.json
@@ -1,6 +1,6 @@
 {
   "name": "eslint-config-airbnb",
-  "version": "6.0.2",
+  "version": "6.1.0",
   "description": "Airbnb's ESLint config, following our styleguide",
   "main": "index.js",
   "scripts": {

From 8b6abf8cda2be140a15bb08deca2770d419d2882 Mon Sep 17 00:00:00 2001
From: Maks Sadowsky <fxmaxvl@gmail.com>
Date: Sun, 6 Mar 2016 11:01:01 +0200
Subject: [PATCH 0532/1591] Update README: Document corresponding jscs rules

---
 README.md | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/README.md b/README.md
index d7b56aae9a..f3e09449f8 100644
--- a/README.md
+++ b/README.md
@@ -436,7 +436,7 @@ Other Style Guides
     const [first, second] = arr;
     ```
 
-  - [5.3](#5.3) <a name='5.3'></a> Use object destructuring for multiple return values, not array destructuring.
+  - [5.3](#5.3) <a name='5.3'></a> Use object destructuring for multiple return values, not array destructuring. jscs: [`disallowArrayDestructuringReturn`](http://jscs.info/rule/disallowArrayDestructuringReturn)
 
     > Why? You can add new properties over time or change the order of things without breaking call sites.
 

From e7f5e0f336501282bfdfc7a58424d140fb543533 Mon Sep 17 00:00:00 2001
From: giang pi <nguyengiangdev@gmail.com>
Date: Mon, 7 Mar 2016 14:01:57 +0700
Subject: [PATCH 0533/1591] Vietnamese language

---
 README.md | 1 +
 1 file changed, 1 insertion(+)

diff --git a/README.md b/README.md
index f3e09449f8..b8c355601d 100644
--- a/README.md
+++ b/README.md
@@ -2595,6 +2595,7 @@ Other Style Guides
   - ![ru](https://raw.githubusercontent.com/gosquared/flags/master/flags/flags/shiny/24/Russia.png) **Russian**: [uprock/javascript](https://github.com/uprock/javascript)
   - ![es](https://raw.githubusercontent.com/gosquared/flags/master/flags/flags/shiny/24/Spain.png) **Spanish**: [paolocarrasco/javascript-style-guide](https://github.com/paolocarrasco/javascript-style-guide)
   - ![th](https://raw.githubusercontent.com/gosquared/flags/master/flags/flags/shiny/24/Thailand.png) **Thai**: [lvarayut/javascript-style-guide](https://github.com/lvarayut/javascript-style-guide)
+  - ![vn](https://raw.githubusercontent.com/gosquared/flags/master/flags/flags/shiny/24/Vietnam.png) **Vietnam**: [giangpii/javascript-style-guide](https://github.com/giangpii/javascript-style-guide)
 
 ## The JavaScript Style Guide Guide
 

From 34f64c21e56df09e548d04f29e16664b80fc1b93 Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Mon, 7 Mar 2016 14:16:06 -0800
Subject: [PATCH 0534/1591] Add defaults for `react/jsx-no-bind`

---
 packages/eslint-config-airbnb/rules/react.js | 6 +++++-
 1 file changed, 5 insertions(+), 1 deletion(-)

diff --git a/packages/eslint-config-airbnb/rules/react.js b/packages/eslint-config-airbnb/rules/react.js
index 835fb43125..a5d0d17de2 100644
--- a/packages/eslint-config-airbnb/rules/react.js
+++ b/packages/eslint-config-airbnb/rules/react.js
@@ -40,7 +40,11 @@ module.exports = {
     'react/jsx-max-props-per-line': [0, { 'maximum': 1 }],
     // Prevent usage of .bind() and arrow functions in JSX props
     // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/jsx-no-bind.md
-    'react/jsx-no-bind': 2,
+    'react/jsx-no-bind': [2, {
+      'ignoreRefs': false,
+      'allowArrowFunctions': false,
+      'allowBind': false,
+    }],
     // Prevent duplicate props in JSX
     // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/jsx-no-duplicate-props.md
     'react/jsx-no-duplicate-props': [0, { 'ignoreCase': false }],

From 01fc30b65b64ad9485dfccd8f64257e77475dd83 Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Mon, 7 Mar 2016 14:48:32 -0800
Subject: [PATCH 0535/1591] [Dev Deps] update `tape`

---
 packages/eslint-config-airbnb/package.json | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/packages/eslint-config-airbnb/package.json b/packages/eslint-config-airbnb/package.json
index 9c26a62532..0721839841 100644
--- a/packages/eslint-config-airbnb/package.json
+++ b/packages/eslint-config-airbnb/package.json
@@ -46,7 +46,7 @@
     "eslint": "^2.3.0",
     "eslint-plugin-react": "^4.2.0",
     "react": "^0.14.7",
-    "tape": "^4.5.0",
+    "tape": "^4.5.1",
     "parallelshell": "^2.0.0"
   },
   "peerDependencies": {

From 9e87e1d13bb8258adcdc7b05c7bece52adc1abbb Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Tue, 8 Mar 2016 10:07:30 -0800
Subject: [PATCH 0536/1591] [guide] add some more justification for one-var and
 `String()` type coercions

---
 README.md | 10 +++++++---
 1 file changed, 7 insertions(+), 3 deletions(-)

diff --git a/README.md b/README.md
index b8c355601d..97530e537a 100644
--- a/README.md
+++ b/README.md
@@ -590,7 +590,7 @@ Other Style Guides
   <a name="es6-rest"></a>
   - [7.6](#7.6) <a name='7.6'></a> Never use `arguments`, opt to use rest syntax `...` instead. [`prefer-rest-params`](http://eslint.org/docs/rules/prefer-rest-params)
 
-    > Why? `...` is explicit about which arguments you want pulled. Plus rest arguments are a real Array and not Array-like like `arguments`.
+    > Why? `...` is explicit about which arguments you want pulled. Plus, rest arguments are a real Array, and not merely Array-like like `arguments`.
 
     ```javascript
     // bad
@@ -1112,7 +1112,7 @@ Other Style Guides
 
   - [13.2](#13.2) <a name='13.2'></a> Use one `const` declaration per variable. eslint: [`one-var`](http://eslint.org/docs/rules/one-var.html) jscs: [`disallowMultipleVarDecl`](http://jscs.info/rule/disallowMultipleVarDecl)
 
-    > Why? It's easier to add new variable declarations this way, and you never have to worry about swapping out a `;` for a `,` or introducing punctuation-only diffs.
+    > Why? It's easier to add new variable declarations this way, and you never have to worry about swapping out a `;` for a `,` or introducing punctuation-only diffs. You can also step through each declaration with the debugger, instead of jumping through all of them at once.
 
     ```javascript
     // bad
@@ -1339,6 +1339,7 @@ Other Style Guides
     ```
 
   - [15.4](#15.4) <a name='15.4'></a> For more information see [Truth Equality and JavaScript](http://javascriptweblog.wordpress.com/2011/02/07/truth-equality-and-javascript/#more-2108) by Angus Croll.
+
   - [15.5](#15.5) <a name='15.5'></a> Use braces to create blocks in `case` and `default` clauses that contain lexical declarations (e.g. `let`, `const`, `function`, and `class`).
 
   > Why? Lexical declarations are visible in the entire `switch` block but only get initialized when assigned, which only happens when its `case` is reached. This causes problems when multiple `case` clauses attempt to define the same thing.
@@ -2011,7 +2012,10 @@ Other Style Guides
     // => this.reviewScore = 9;
 
     // bad
-    const totalScore = this.reviewScore + '';
+    const totalScore = this.reviewScore + ''; // invokes this.reviewScore.valueOf()
+
+    // bad
+    const totalScore = this.reviewScore.toString(); // isn't guaranteed to return a string
 
     // good
     const totalScore = String(this.reviewScore);

From 4709e644c0a622e020c3d5446a4cb1f22e910b10 Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Mon, 7 Mar 2016 22:50:40 -0800
Subject: [PATCH 0537/1591] [guide] Permanent links.
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

 - Preserve the original links, because cool URLs don’t change.
---
 README.md | 376 +++++++++++++++++++++++++++++++++++-------------------
 1 file changed, 247 insertions(+), 129 deletions(-)

diff --git a/README.md b/README.md
index 97530e537a..5368efacf7 100644
--- a/README.md
+++ b/README.md
@@ -52,7 +52,8 @@ Other Style Guides
 
 ## Types
 
-  - [1.1](#1.1) <a name='1.1'></a> **Primitives**: When you access a primitive type you work directly on its value.
+  <a name="types--primitives"></a><a name="1.1"></a>
+  - [1.1](#types--primitives) **Primitives**: When you access a primitive type you work directly on its value.
 
     + `string`
     + `number`
@@ -68,7 +69,9 @@ Other Style Guides
 
     console.log(foo, bar); // => 1, 9
     ```
-  - [1.2](#1.2) <a name='1.2'></a> **Complex**: When you access a complex type you work on a reference to its value.
+
+  <a name="types--complex"></a><a name="1.2"></a>
+  - [1.2](#types--complex)  **Complex**: When you access a complex type you work on a reference to its value.
 
     + `object`
     + `array`
@@ -87,7 +90,8 @@ Other Style Guides
 
 ## References
 
-  - [2.1](#2.1) <a name='2.1'></a> Use `const` for all of your references; avoid using `var`. eslint: [`prefer-const`](http://eslint.org/docs/rules/prefer-const.html), [`no-const-assign`](http://eslint.org/docs/rules/no-const-assign.html)
+  <a name="references--prefer-const"></a><a name="2.1"></a>
+  - [2.1](#references--prefer-const) Use `const` for all of your references; avoid using `var`. eslint: [`prefer-const`](http://eslint.org/docs/rules/prefer-const.html), [`no-const-assign`](http://eslint.org/docs/rules/no-const-assign.html)
 
     > Why? This ensures that you can't reassign your references, which can lead to bugs and difficult to comprehend code.
 
@@ -101,7 +105,8 @@ Other Style Guides
     const b = 2;
     ```
 
-  - [2.2](#2.2) <a name='2.2'></a> If you must reassign references, use `let` instead of `var`. eslint: [`no-var`](http://eslint.org/docs/rules/no-var.html) jscs: [`disallowVar`](http://jscs.info/rule/disallowVar)
+  <a name="references--disallow-var"></a><a name="2.2"></a>
+  - [2.2](#references--disallow-var) If you must reassign references, use `let` instead of `var`. eslint: [`no-var`](http://eslint.org/docs/rules/no-var.html) jscs: [`disallowVar`](http://jscs.info/rule/disallowVar)
 
     > Why? `let` is block-scoped rather than function-scoped like `var`.
 
@@ -119,7 +124,8 @@ Other Style Guides
     }
     ```
 
-  - [2.3](#2.3) <a name='2.3'></a> Note that both `let` and `const` are block-scoped.
+  <a name="references--block-scope"></a><a name="2.3"></a>
+  - [2.3](#references--block-scope) Note that both `let` and `const` are block-scoped.
 
     ```javascript
     // const and let only exist in the blocks they are defined in.
@@ -135,7 +141,8 @@ Other Style Guides
 
 ## Objects
 
-  - [3.1](#3.1) <a name='3.1'></a> Use the literal syntax for object creation. eslint: [`no-new-object`](http://eslint.org/docs/rules/no-new-object.html)
+  <a name="objects--no-new"></a><a name="3.1"></a>
+  - [3.1](#objects--no-new) Use the literal syntax for object creation. eslint: [`no-new-object`](http://eslint.org/docs/rules/no-new-object.html)
 
     ```javascript
     // bad
@@ -145,7 +152,8 @@ Other Style Guides
     const item = {};
     ```
 
-  - [3.2](#3.2) <a name='3.2'></a> If your code will be executed in browsers in script context, don't use [reserved words](http://es5.github.io/#x7.6.1) as keys. It won't work in IE8. [More info](https://github.com/airbnb/javascript/issues/61). It’s OK to use them in ES6 modules and server-side code. jscs: [`disallowIdentifierNames`](http://jscs.info/rule/disallowIdentifierNames)
+  <a name="objects--reserved-words"></a><a name="3.2"></a>
+  - [3.2](#objects--reserved-words) If your code will be executed in browsers in script context, don't use [reserved words](http://es5.github.io/#x7.6.1) as keys. It won't work in IE8. [More info](https://github.com/airbnb/javascript/issues/61). It’s OK to use them in ES6 modules and server-side code. jscs: [`disallowIdentifierNames`](http://jscs.info/rule/disallowIdentifierNames)
 
     ```javascript
     // bad
@@ -161,7 +169,8 @@ Other Style Guides
     };
     ```
 
-  - [3.3](#3.3) <a name='3.3'></a> Use readable synonyms in place of reserved words. jscs: [`disallowIdentifierNames`](http://jscs.info/rule/disallowIdentifierNames)
+  <a name="objects--reserved-words-2"></a><a name="3.3"></a>
+  - [3.3](#objects--reserved-words-2) Use readable synonyms in place of reserved words. jscs: [`disallowIdentifierNames`](http://jscs.info/rule/disallowIdentifierNames)
 
     ```javascript
     // bad
@@ -180,8 +189,8 @@ Other Style Guides
     };
     ```
 
-  <a name="es6-computed-properties"></a>
-  - [3.4](#3.4) <a name='3.4'></a> Use computed property names when creating objects with dynamic property names.
+  <a name="es6-computed-properties"></a><a name="3.4"></a>
+  - [3.4](#es6-computed-properties) Use computed property names when creating objects with dynamic property names.
 
     > Why? They allow you to define all the properties of an object in one place.
 
@@ -206,8 +215,8 @@ Other Style Guides
     };
     ```
 
-  <a name="es6-object-shorthand"></a>
-  - [3.5](#3.5) <a name='3.5'></a> Use object method shorthand. eslint: [`object-shorthand`](http://eslint.org/docs/rules/object-shorthand.html) jscs: [`requireEnhancedObjectLiterals`](http://jscs.info/rule/requireEnhancedObjectLiterals)
+  <a name="es6-object-shorthand"></a><a name="3.5"></a>
+  - [3.5](#es6-object-shorthand) Use object method shorthand. eslint: [`object-shorthand`](http://eslint.org/docs/rules/object-shorthand.html) jscs: [`requireEnhancedObjectLiterals`](http://jscs.info/rule/requireEnhancedObjectLiterals)
 
     ```javascript
     // bad
@@ -229,8 +238,8 @@ Other Style Guides
     };
     ```
 
-  <a name="es6-object-concise"></a>
-  - [3.6](#3.6) <a name='3.6'></a> Use property value shorthand. eslint: [`object-shorthand`](http://eslint.org/docs/rules/object-shorthand.html) jscs: [`requireEnhancedObjectLiterals`](http://jscs.info/rule/requireEnhancedObjectLiterals)
+  <a name="es6-object-concise"></a><a name="3.6"></a>
+  - [3.6](#es6-object-concise) Use property value shorthand. eslint: [`object-shorthand`](http://eslint.org/docs/rules/object-shorthand.html) jscs: [`requireEnhancedObjectLiterals`](http://jscs.info/rule/requireEnhancedObjectLiterals)
 
     > Why? It is shorter to write and descriptive.
 
@@ -248,7 +257,8 @@ Other Style Guides
     };
     ```
 
-  - [3.7](#3.7) <a name='3.7'></a> Group your shorthand properties at the beginning of your object declaration.
+  <a name="objects--grouped-shorthand"></a><a name="3.7"></a>
+  - [3.7](#objects--grouped-shorthand) Group your shorthand properties at the beginning of your object declaration.
 
     > Why? It's easier to tell which properties are using the shorthand.
 
@@ -277,7 +287,8 @@ Other Style Guides
     };
     ```
 
-  - [3.8](#3.8) <a name="3.8"></a> Only quote properties that are invalid identifiers. eslint: [`quote-props`](http://eslint.org/docs/rules/quote-props.html) jscs: [`disallowQuotedKeysInObjects`](http://jscs.info/rule/disallowQuotedKeysInObjects)
+  <a name="objects-quoted-props"></a><a name="3.8"></a>
+  - [3.8](#objects-quoted-props) Only quote properties that are invalid identifiers. eslint: [`quote-props`](http://eslint.org/docs/rules/quote-props.html) jscs: [`disallowQuotedKeysInObjects`](http://jscs.info/rule/disallowQuotedKeysInObjects)
 
   > Why? In general we consider it subjectively easier to read. It improves syntax highlighting, and is also more easily optimized by many JS engines.
 
@@ -301,7 +312,8 @@ Other Style Guides
 
 ## Arrays
 
-  - [4.1](#4.1) <a name='4.1'></a> Use the literal syntax for array creation. eslint: [`no-array-constructor`](http://eslint.org/docs/rules/no-array-constructor.html)
+  <a name="arrays--literals"></a><a name="4.1"></a>
+  - [4.1](#arrays--literals) Use the literal syntax for array creation. eslint: [`no-array-constructor`](http://eslint.org/docs/rules/no-array-constructor.html)
 
     ```javascript
     // bad
@@ -311,7 +323,8 @@ Other Style Guides
     const items = [];
     ```
 
-  - [4.2](#4.2) <a name='4.2'></a> Use Array#push instead of direct assignment to add items to an array.
+  <a name="arrays--push"></a><a name="4.2"></a>
+  - [4.2](#arrays--push) Use Array#push instead of direct assignment to add items to an array.
 
     ```javascript
     const someStack = [];
@@ -323,8 +336,8 @@ Other Style Guides
     someStack.push('abracadabra');
     ```
 
-  <a name="es6-array-spreads"></a>
-  - [4.3](#4.3) <a name='4.3'></a> Use array spreads `...` to copy arrays.
+  <a name="es6-array-spreads"></a><a name="4.3"></a>
+  - [4.3](#es6-array-spreads) Use array spreads `...` to copy arrays.
 
     ```javascript
     // bad
@@ -339,14 +352,17 @@ Other Style Guides
     // good
     const itemsCopy = [...items];
     ```
-  - [4.4](#4.4) <a name='4.4'></a> To convert an array-like object to an array, use Array#from.
+
+  <a name="arrays--from"></a><a name="4.4"></a>
+  - [4.4](#arrays--from) To convert an array-like object to an array, use Array#from.
 
     ```javascript
     const foo = document.querySelectorAll('.foo');
     const nodes = Array.from(foo);
     ```
 
-  - [4.5](#4.5) <a name='4.5'></a> Use return statements in array method callbacks. It's ok to omit the return if the function body consists of a single statement following [8.2](#8.2). eslint: [`array-callback-return`](http://eslint.org/docs/rules/array-callback-return)
+  <a name="arrays--callback-return"></a><a name="4.5"></a>
+  - [4.5](#arrays--callback-return) Use return statements in array method callbacks. It's ok to omit the return if the function body consists of a single statement following [8.2](#8.2). eslint: [`array-callback-return`](http://eslint.org/docs/rules/array-callback-return)
 
     ```javascript
     // good
@@ -398,7 +414,8 @@ Other Style Guides
 
 ## Destructuring
 
-  - [5.1](#5.1) <a name='5.1'></a> Use object destructuring when accessing and using multiple properties of an object. jscs: [`requireObjectDestructuring`](http://jscs.info/rule/requireObjectDestructuring)
+  <a name="destructuring--object"></a><a name="5.1"></a>
+  - [5.1](#destructuring--object) Use object destructuring when accessing and using multiple properties of an object. jscs: [`requireObjectDestructuring`](http://jscs.info/rule/requireObjectDestructuring)
 
     > Why? Destructuring saves you from creating temporary references for those properties.
 
@@ -423,7 +440,8 @@ Other Style Guides
     }
     ```
 
-  - [5.2](#5.2) <a name='5.2'></a> Use array destructuring. jscs: [`requireArrayDestructuring`](http://jscs.info/rule/requireArrayDestructuring)
+  <a name="destructuring--array"></a><a name="5.2"></a>
+  - [5.2](#destructuring--array) Use array destructuring. jscs: [`requireArrayDestructuring`](http://jscs.info/rule/requireArrayDestructuring)
 
     ```javascript
     const arr = [1, 2, 3, 4];
@@ -436,7 +454,8 @@ Other Style Guides
     const [first, second] = arr;
     ```
 
-  - [5.3](#5.3) <a name='5.3'></a> Use object destructuring for multiple return values, not array destructuring. jscs: [`disallowArrayDestructuringReturn`](http://jscs.info/rule/disallowArrayDestructuringReturn)
+  <a name="destructuring--object-over-array"></a><a name="5.3"></a>
+  - [5.3](#destructuring--object-over-array) Use object destructuring for multiple return values, not array destructuring. jscs: [`disallowArrayDestructuringReturn`](http://jscs.info/rule/disallowArrayDestructuringReturn)
 
     > Why? You can add new properties over time or change the order of things without breaking call sites.
 
@@ -465,7 +484,8 @@ Other Style Guides
 
 ## Strings
 
-  - [6.1](#6.1) <a name='6.1'></a> Use single quotes `''` for strings. eslint: [`quotes`](http://eslint.org/docs/rules/quotes.html) jscs: [`validateQuoteMarks`](http://jscs.info/rule/validateQuoteMarks)
+  <a name="strings--quotes"></a><a name="6.1"></a>
+  - [6.1](#strings--quotes) Use single quotes `''` for strings. eslint: [`quotes`](http://eslint.org/docs/rules/quotes.html) jscs: [`validateQuoteMarks`](http://jscs.info/rule/validateQuoteMarks)
 
     ```javascript
     // bad
@@ -475,8 +495,11 @@ Other Style Guides
     const name = 'Capt. Janeway';
     ```
 
-  - [6.2](#6.2) <a name='6.2'></a> Strings that cause the line to go over 100 characters should be written across multiple lines using string concatenation.
-  - [6.3](#6.3) <a name='6.3'></a> Note: If overused, long strings with concatenation could impact performance. [jsPerf](http://jsperf.com/ya-string-concat) & [Discussion](https://github.com/airbnb/javascript/issues/40).
+  <a name="strings--line-length"></a><a name="6.2"></a>
+  - [6.2](#strings--line-length) Strings that cause the line to go over 100 characters should be written across multiple lines using string concatenation.
+
+  <a name="strings--concat-perf"></a><a name="6.3"></a>
+  - [6.3](#strings--concat-perf) Note: If overused, long strings with concatenation could impact performance. [jsPerf](http://jsperf.com/ya-string-concat) & [Discussion](https://github.com/airbnb/javascript/issues/40).
 
     ```javascript
     // bad
@@ -494,8 +517,8 @@ Other Style Guides
       'with this, you would get nowhere fast.';
     ```
 
-  <a name="es6-template-literals"></a>
-  - [6.4](#6.4) <a name='6.4'></a> When programmatically building up strings, use template strings instead of concatenation. eslint: [`prefer-template`](http://eslint.org/docs/rules/prefer-template.html) [`template-curly-spacing`](http://eslint.org/docs/rules/template-curly-spacing) jscs: [`requireTemplateStrings`](http://jscs.info/rule/requireTemplateStrings)
+  <a name="es6-template-literals"></a><a name="6.4"></a>
+  - [6.4](#es6-template-literals) When programmatically building up strings, use template strings instead of concatenation. eslint: [`prefer-template`](http://eslint.org/docs/rules/prefer-template.html) [`template-curly-spacing`](http://eslint.org/docs/rules/template-curly-spacing) jscs: [`requireTemplateStrings`](http://jscs.info/rule/requireTemplateStrings)
 
     > Why? Template strings give you a readable, concise syntax with proper newlines and string interpolation features.
 
@@ -520,14 +543,17 @@ Other Style Guides
       return `How are you, ${name}?`;
     }
     ```
-  - [6.5](#6.5) <a name='6.5'></a> Never use `eval()` on a string, it opens too many vulnerabilities.
+
+  <a name="strings--eval"></a><a name="6.5"></a>
+  - [6.5](#strings--eval) Never use `eval()` on a string, it opens too many vulnerabilities.
 
 **[⬆ back to top](#table-of-contents)**
 
 
 ## Functions
 
-  - [7.1](#7.1) <a name='7.1'></a> Use function declarations instead of function expressions. jscs: [`requireFunctionDeclarations`](http://jscs.info/rule/requireFunctionDeclarations)
+  <a name="functions--declarations"></a><a name="7.1"></a>
+  - [7.1](#functions--declarations) Use function declarations instead of function expressions. jscs: [`requireFunctionDeclarations`](http://jscs.info/rule/requireFunctionDeclarations)
 
     > Why? Function declarations are named, so they're easier to identify in call stacks. Also, the whole body of a function declaration is hoisted, whereas only the reference of a function expression is hoisted. This rule makes it possible to always use [Arrow Functions](#arrow-functions) in place of function expressions.
 
@@ -541,7 +567,8 @@ Other Style Guides
     }
     ```
 
-  - [7.2](#7.2) <a name='7.2'></a> Immediately invoked function expressions: eslint: [`wrap-iife`](http://eslint.org/docs/rules/wrap-iife.html) jscs: [`requireParenthesesAroundIIFE`](http://jscs.info/rule/requireParenthesesAroundIIFE)
+  <a name="functions--iife"></a><a name="7.2"></a>
+  - [7.2](#functions--iife) Immediately invoked function expressions: eslint: [`wrap-iife`](http://eslint.org/docs/rules/wrap-iife.html) jscs: [`requireParenthesesAroundIIFE`](http://jscs.info/rule/requireParenthesesAroundIIFE)
 
     > Why? An immediately invoked function expression is a single unit - wrapping both it, and its invocation parens, in parens, cleanly expresses this. Note that in a world with modules everywhere, you almost never need an IIFE.
 
@@ -552,9 +579,11 @@ Other Style Guides
     }());
     ```
 
-  - [7.3](#7.3) <a name='7.3'></a> Never declare a function in a non-function block (if, while, etc). Assign the function to a variable instead. Browsers will allow you to do it, but they all interpret it differently, which is bad news bears. eslint: [`no-loop-func`](http://eslint.org/docs/rules/no-loop-func.html)
+  <a name="functions--in-blocks"></a><a name="7.3"></a>
+  - [7.3](#functions--in-blocks) Never declare a function in a non-function block (if, while, etc). Assign the function to a variable instead. Browsers will allow you to do it, but they all interpret it differently, which is bad news bears. eslint: [`no-loop-func`](http://eslint.org/docs/rules/no-loop-func.html)
 
-  - [7.4](#7.4) <a name='7.4'></a> **Note:** ECMA-262 defines a `block` as a list of statements. A function declaration is not a statement. [Read ECMA-262's note on this issue](http://www.ecma-international.org/publications/files/ECMA-ST/Ecma-262.pdf#page=97).
+  <a name="functions--note-on-blocks"></a><a name="7.4"></a>
+  - [7.4](#functions--note-on-blocks) **Note:** ECMA-262 defines a `block` as a list of statements. A function declaration is not a statement. [Read ECMA-262's note on this issue](http://www.ecma-international.org/publications/files/ECMA-ST/Ecma-262.pdf#page=97).
 
     ```javascript
     // bad
@@ -573,7 +602,8 @@ Other Style Guides
     }
     ```
 
-  - [7.5](#7.5) <a name='7.5'></a> Never name a parameter `arguments`. This will take precedence over the `arguments` object that is given to every function scope.
+  <a name="functions--arguments-shadow"></a><a name="7.5"></a>
+  - [7.5](#functions--arguments-shadow) Never name a parameter `arguments`. This will take precedence over the `arguments` object that is given to every function scope.
 
     ```javascript
     // bad
@@ -587,8 +617,8 @@ Other Style Guides
     }
     ```
 
-  <a name="es6-rest"></a>
-  - [7.6](#7.6) <a name='7.6'></a> Never use `arguments`, opt to use rest syntax `...` instead. [`prefer-rest-params`](http://eslint.org/docs/rules/prefer-rest-params)
+  <a name="es6-rest"></a><a name="7.6"></a>
+  - [7.6](#es6-rest) Never use `arguments`, opt to use rest syntax `...` instead. [`prefer-rest-params`](http://eslint.org/docs/rules/prefer-rest-params)
 
     > Why? `...` is explicit about which arguments you want pulled. Plus, rest arguments are a real Array, and not merely Array-like like `arguments`.
 
@@ -605,8 +635,8 @@ Other Style Guides
     }
     ```
 
-  <a name="es6-default-parameters"></a>
-  - [7.7](#7.7) <a name='7.7'></a> Use default parameter syntax rather than mutating function arguments.
+  <a name="es6-default-parameters"></a><a name="7.7"></a>
+  - [7.7](#es6-default-parameters) Use default parameter syntax rather than mutating function arguments.
 
     ```javascript
     // really bad
@@ -632,7 +662,8 @@ Other Style Guides
     }
     ```
 
-  - [7.8](#7.8) <a name='7.8'></a> Avoid side effects with default parameters.
+  <a name="functions--default-side-effects"></a><a name="7.8"></a>
+  - [7.8](#functions--default-side-effects) Avoid side effects with default parameters.
 
     > Why? They are confusing to reason about.
 
@@ -648,7 +679,8 @@ Other Style Guides
     count();  // 3
     ```
 
-  - [7.9](#7.9) <a name='7.9'></a> Always put default parameters last.
+  <a name="functions--defaults-last"></a><a name="7.9"></a>
+  - [7.9](#functions--defaults-last) Always put default parameters last.
 
     ```javascript
     // bad
@@ -662,7 +694,8 @@ Other Style Guides
     }
     ```
 
-  - [7.10](#7.10) <a name='7.10'></a> Never use the Function constructor to create a new function.
+  <a name="functions--constructor"></a><a name="7.10"></a>
+  - [7.10](#functions--constructor) Never use the Function constructor to create a new function.
 
     > Why? Creating a function in this way evaluates a string similarly to eval(), which opens vulnerabilities.
 
@@ -674,7 +707,8 @@ Other Style Guides
     var subtract = Function('a', 'b', 'return a - b');
     ```
 
-  - [7.11](#7.11) <a name="7.11"></a> Spacing in a function signature.
+  <a name="functions--signature-spacing"></a><a name="7.11"></a>
+  - [7.11](#functions--signature-spacing) Spacing in a function signature.
 
     > Why? Consistency is good, and you shouldn’t have to add or remove a space when adding or removing a name.
 
@@ -689,7 +723,8 @@ Other Style Guides
     const y = function a() {};
     ```
 
-  - [7.12](#7.12) <a name="7.12"></a> Never mutate parameters. eslint: [`no-param-reassign`](http://eslint.org/docs/rules/no-param-reassign.html)
+  <a name="functions--mutate-params"></a><a name="7.12"></a>
+  - [7.12](#functions--mutate-params) Never mutate parameters. eslint: [`no-param-reassign`](http://eslint.org/docs/rules/no-param-reassign.html)
 
     > Why? Manipulating objects passed in as parameters can cause unwanted variable side effects in the original caller.
 
@@ -705,7 +740,8 @@ Other Style Guides
     };
     ```
 
-  - [7.13](#7.13) <a name="7.13"></a> Never reassign parameters. eslint: [`no-param-reassign`](http://eslint.org/docs/rules/no-param-reassign.html)
+  <a name="functions--reassign-params"></a><a name="7.13"></a>
+  - [7.13](#functions--reassign-params) Never reassign parameters. eslint: [`no-param-reassign`](http://eslint.org/docs/rules/no-param-reassign.html)
 
     > Why? Reassigning parameters can lead to unexpected behavior, especially when accessing the `arguments` object. It can also cause optimization issues, especially in V8.
 
@@ -732,7 +768,8 @@ Other Style Guides
 
 ## Arrow Functions
 
-  - [8.1](#8.1) <a name='8.1'></a> When you must use function expressions (as when passing an anonymous function), use arrow function notation. eslint: [`prefer-arrow-callback`](http://eslint.org/docs/rules/prefer-arrow-callback.html), [`arrow-spacing`](http://eslint.org/docs/rules/arrow-spacing.html) jscs: [`requireArrowFunctions`](http://jscs.info/rule/requireArrowFunctions)
+  <a name="arrows--use-them"></a><a name="8.1"></a>
+  - [8.1](#arrows--use-them) When you must use function expressions (as when passing an anonymous function), use arrow function notation. eslint: [`prefer-arrow-callback`](http://eslint.org/docs/rules/prefer-arrow-callback.html), [`arrow-spacing`](http://eslint.org/docs/rules/arrow-spacing.html) jscs: [`requireArrowFunctions`](http://jscs.info/rule/requireArrowFunctions)
 
     > Why? It creates a version of the function that executes in the context of `this`, which is usually what you want, and is a more concise syntax.
 
@@ -752,7 +789,8 @@ Other Style Guides
     });
     ```
 
-  - [8.2](#8.2) <a name='8.2'></a> If the function body consists of a single expression, omit the braces and use the implicit return. Otherwise, keep the braces and use a `return` statement. eslint: [`arrow-parens`](http://eslint.org/docs/rules/arrow-parens.html), [`arrow-body-style`](http://eslint.org/docs/rules/arrow-body-style.html) jscs:  [`disallowParenthesesAroundArrowParam`](http://jscs.info/rule/disallowParenthesesAroundArrowParam), [`requireShorthandArrowFunctions`](http://jscs.info/rule/requireShorthandArrowFunctions)
+  <a name="arrows--implicit-return"></a><a name="8.2"></a>
+  - [8.2](#arrows--implicit-return) If the function body consists of a single expression, omit the braces and use the implicit return. Otherwise, keep the braces and use a `return` statement. eslint: [`arrow-parens`](http://eslint.org/docs/rules/arrow-parens.html), [`arrow-body-style`](http://eslint.org/docs/rules/arrow-body-style.html) jscs:  [`disallowParenthesesAroundArrowParam`](http://jscs.info/rule/disallowParenthesesAroundArrowParam), [`requireShorthandArrowFunctions`](http://jscs.info/rule/requireShorthandArrowFunctions)
 
     > Why? Syntactic sugar. It reads well when multiple functions are chained together.
 
@@ -775,7 +813,8 @@ Other Style Guides
     });
     ```
 
-  - [8.3](#8.3) <a name='8.3'></a> In case the expression spans over multiple lines, wrap it in parentheses for better readability.
+  <a name="arrows--paren-wrap"></a><a name="8.3"></a>
+  - [8.3](#arrows--paren-wrap) In case the expression spans over multiple lines, wrap it in parentheses for better readability.
 
     > Why? It shows clearly where the function starts and ends.
 
@@ -793,8 +832,8 @@ Other Style Guides
     ));
     ```
 
-
-  - [8.4](#8.4) <a name='8.4'></a> If your function takes a single argument and doesn’t use braces, omit the parentheses. Otherwise, always include parentheses around arguments. eslint: [`arrow-parens`](http://eslint.org/docs/rules/arrow-parens.html) jscs:  [`disallowParenthesesAroundArrowParam`](http://jscs.info/rule/disallowParenthesesAroundArrowParam)
+  <a name="arrows--one-arg-parens"></a><a name="8.4"></a>
+  - [8.4](#arrows--one-arg-parens) If your function takes a single argument and doesn’t use braces, omit the parentheses. Otherwise, always include parentheses around arguments. eslint: [`arrow-parens`](http://eslint.org/docs/rules/arrow-parens.html) jscs:  [`disallowParenthesesAroundArrowParam`](http://jscs.info/rule/disallowParenthesesAroundArrowParam)
 
     > Why? Less visual clutter.
 
@@ -824,7 +863,8 @@ Other Style Guides
     });
     ```
 
-  - [8.5](#8.5) <a name='8.5'></a> Avoid confusing arrow function syntax (`=>`) with comparison operators (`<=`, `>=`). eslint: [`no-confusing-arrow`](http://eslint.org/docs/rules/no-confusing-arrow)
+  <a name="arrows--confusing"></a><a name="8.5"></a>
+  - [8.5](#arrows--confusing) Avoid confusing arrow function syntax (`=>`) with comparison operators (`<=`, `>=`). eslint: [`no-confusing-arrow`](http://eslint.org/docs/rules/no-confusing-arrow)
 
     ```js
     // bad
@@ -842,7 +882,8 @@ Other Style Guides
 
 ## Constructors
 
-  - [9.1](#9.1) <a name='9.1'></a> Always use `class`. Avoid manipulating `prototype` directly.
+  <a name="constructors--use-class"></a><a name="9.1"></a>
+  - [9.1](#constructors--use-class) Always use `class`. Avoid manipulating `prototype` directly.
 
     > Why? `class` syntax is more concise and easier to reason about.
 
@@ -871,7 +912,8 @@ Other Style Guides
     }
     ```
 
-  - [9.2](#9.2) <a name='9.2'></a> Use `extends` for inheritance.
+  <a name="constructors--extends"></a><a name="9.2"></a>
+  - [9.2](#constructors--extends) Use `extends` for inheritance.
 
     > Why? It is a built-in way to inherit prototype functionality without breaking `instanceof`.
 
@@ -894,7 +936,8 @@ Other Style Guides
     }
     ```
 
-  - [9.3](#9.3) <a name='9.3'></a> Methods can return `this` to help with method chaining.
+  <a name="constructors--chaining"></a><a name="9.3"></a>
+  - [9.3](#constructors--chaining) Methods can return `this` to help with method chaining.
 
     ```javascript
     // bad
@@ -931,7 +974,8 @@ Other Style Guides
     ```
 
 
-  - [9.4](#9.4) <a name='9.4'></a> It's okay to write a custom toString() method, just make sure it works successfully and causes no side effects.
+  <a name="constructors--tostring"></a><a name="9.4"></a>
+  - [9.4](#constructors--tostring) It's okay to write a custom toString() method, just make sure it works successfully and causes no side effects.
 
     ```javascript
     class Jedi {
@@ -949,7 +993,8 @@ Other Style Guides
     }
     ```
 
-  - [9.5](#9.5) <a name='9.5'></a> Classes have a default constructor if one is not specified. An empty constructor function or one that just delegates to a parent class is unnecessary. [`no-useless-constructor`](http://eslint.org/docs/rules/no-useless-constructor)
+  <a name="constructors--no-useless"></a><a name="9.5"></a>
+  - [9.5](#constructors--no-useless) Classes have a default constructor if one is not specified. An empty constructor function or one that just delegates to a parent class is unnecessary. [`no-useless-constructor`](http://eslint.org/docs/rules/no-useless-constructor)
 
     ```javascript
     // bad
@@ -982,7 +1027,8 @@ Other Style Guides
 
 ## Modules
 
-  - [10.1](#10.1) <a name='10.1'></a> Always use modules (`import`/`export`) over a non-standard module system. You can always transpile to your preferred module system.
+  <a name="modules--use-them"></a><a name="10.1"></a>
+  - [10.1](#modules--use-them) Always use modules (`import`/`export`) over a non-standard module system. You can always transpile to your preferred module system.
 
     > Why? Modules are the future, let's start using the future now.
 
@@ -1000,7 +1046,8 @@ Other Style Guides
     export default es6;
     ```
 
-  - [10.2](#10.2) <a name='10.2'></a> Do not use wildcard imports.
+  <a name="modules--no-wildcard"></a><a name="10.2"></a>
+  - [10.2](#modules--no-wildcard) Do not use wildcard imports.
 
     > Why? This makes sure you have a single default export.
 
@@ -1012,7 +1059,8 @@ Other Style Guides
     import AirbnbStyleGuide from './AirbnbStyleGuide';
     ```
 
-  - [10.3](#10.3) <a name='10.3'></a>And do not export directly from an import.
+  <a name="modules--no-export-from-import"></a><a name="10.3"></a>
+  - [10.3](#modules--no-export-from-import) And do not export directly from an import.
 
     > Why? Although the one-liner is concise, having one clear way to import and one clear way to export makes things consistent.
 
@@ -1031,7 +1079,8 @@ Other Style Guides
 
 ## Iterators and Generators
 
-  - [11.1](#11.1) <a name='11.1'></a> Don't use iterators. Prefer JavaScript's higher-order functions like `map()` and `reduce()` instead of loops like `for-of`. eslint: [`no-iterator`](http://eslint.org/docs/rules/no-iterator.html)
+  <a name="iterators--nope"></a><a name="11.1"></a>
+  - [11.1](#iterators--nope) Don't use iterators. Prefer JavaScript's higher-order functions like `map()` and `reduce()` instead of loops like `for-of`. eslint: [`no-iterator`](http://eslint.org/docs/rules/no-iterator.html)
 
     > Why? This enforces our immutable rule. Dealing with pure functions that return values is easier to reason about than side effects.
 
@@ -1056,7 +1105,8 @@ Other Style Guides
     sum === 15;
     ```
 
-  - [11.2](#11.2) <a name='11.2'></a> Don't use generators for now.
+  <a name="generators--nope"></a><a name="11.2"></a>
+  - [11.2](#generators--nope) Don't use generators for now.
 
     > Why? They don't transpile well to ES5.
 
@@ -1065,7 +1115,8 @@ Other Style Guides
 
 ## Properties
 
-  - [12.1](#12.1) <a name='12.1'></a> Use dot notation when accessing properties. eslint: [`dot-notation`](http://eslint.org/docs/rules/dot-notation.html) jscs: [`requireDotNotation`](http://jscs.info/rule/requireDotNotation)
+  <a name="properties--dot"></a><a name="12.1"></a>
+  - [12.1](#properties--dot) Use dot notation when accessing properties. eslint: [`dot-notation`](http://eslint.org/docs/rules/dot-notation.html) jscs: [`requireDotNotation`](http://jscs.info/rule/requireDotNotation)
 
     ```javascript
     const luke = {
@@ -1080,7 +1131,8 @@ Other Style Guides
     const isJedi = luke.jedi;
     ```
 
-  - [12.2](#12.2) <a name='12.2'></a> Use subscript notation `[]` when accessing properties with a variable.
+  <a name="properties--bracket"></a><a name="12.2"></a>
+  - [12.2](#properties--bracket) Use bracket notation `[]` when accessing properties with a variable.
 
     ```javascript
     const luke = {
@@ -1100,7 +1152,8 @@ Other Style Guides
 
 ## Variables
 
-  - [13.1](#13.1) <a name='13.1'></a> Always use `const` to declare variables. Not doing so will result in global variables. We want to avoid polluting the global namespace. Captain Planet warned us of that.
+  <a name="variables--const"></a><a name="13.1"></a>
+  - [13.1](#variables--const) Always use `const` to declare variables. Not doing so will result in global variables. We want to avoid polluting the global namespace. Captain Planet warned us of that.
 
     ```javascript
     // bad
@@ -1110,7 +1163,8 @@ Other Style Guides
     const superPower = new SuperPower();
     ```
 
-  - [13.2](#13.2) <a name='13.2'></a> Use one `const` declaration per variable. eslint: [`one-var`](http://eslint.org/docs/rules/one-var.html) jscs: [`disallowMultipleVarDecl`](http://jscs.info/rule/disallowMultipleVarDecl)
+  <a name="variables--one-const"></a><a name="13.2"></a>
+  - [13.2](#variables--one-const) Use one `const` declaration per variable. eslint: [`one-var`](http://eslint.org/docs/rules/one-var.html) jscs: [`disallowMultipleVarDecl`](http://jscs.info/rule/disallowMultipleVarDecl)
 
     > Why? It's easier to add new variable declarations this way, and you never have to worry about swapping out a `;` for a `,` or introducing punctuation-only diffs. You can also step through each declaration with the debugger, instead of jumping through all of them at once.
 
@@ -1132,7 +1186,8 @@ Other Style Guides
     const dragonball = 'z';
     ```
 
-  - [13.3](#13.3) <a name='13.3'></a> Group all your `const`s and then group all your `let`s.
+  <a name="variables--const-let-group"></a><a name="13.3"></a>
+  - [13.3](#variables--const-let-group) Group all your `const`s and then group all your `let`s.
 
     > Why? This is helpful when later on you might need to assign a variable depending on one of the previous assigned variables.
 
@@ -1157,7 +1212,8 @@ Other Style Guides
     let length;
     ```
 
-  - [13.4](#13.4) <a name='13.4'></a> Assign variables where you need them, but place them in a reasonable place.
+  <a name="variables--define-where-used"></a><a name="13.4"></a>
+  - [13.4](#variables--define-where-used) Assign variables where you need them, but place them in a reasonable place.
 
     > Why? `let` and `const` are block scoped and not function scoped.
 
@@ -1200,7 +1256,8 @@ Other Style Guides
 
 ## Hoisting
 
-  - [14.1](#14.1) <a name='14.1'></a> `var` declarations get hoisted to the top of their scope, their assignment does not. `const` and `let` declarations are blessed with a new concept called [Temporal Dead Zones (TDZ)](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/let#Temporal_dead_zone_and_errors_with_let). It's important to know why [typeof is no longer safe](http://es-discourse.com/t/why-typeof-is-no-longer-safe/15).
+  <a name="hoisting--about"></a><a name="14.1"></a>
+  - [14.1](#hoisting--about) `var` declarations get hoisted to the top of their scope, their assignment does not. `const` and `let` declarations are blessed with a new concept called [Temporal Dead Zones (TDZ)](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/let#Temporal_dead_zone_and_errors_with_let). It's important to know why [typeof is no longer safe](http://es-discourse.com/t/why-typeof-is-no-longer-safe/15).
 
     ```javascript
     // we know this wouldn't work (assuming there
@@ -1235,7 +1292,8 @@ Other Style Guides
     }
     ```
 
-  - [14.2](#14.2) <a name='14.2'></a> Anonymous function expressions hoist their variable name, but not the function assignment.
+  <a name="hoisting--anon-expressions"></a><a name="14.2"></a>
+  - [14.2](#hoisting--anon-expressions) Anonymous function expressions hoist their variable name, but not the function assignment.
 
     ```javascript
     function example() {
@@ -1249,7 +1307,8 @@ Other Style Guides
     }
     ```
 
-  - [14.3](#14.3) <a name='14.3'></a> Named function expressions hoist the variable name, not the function name or the function body.
+  <a name="hoisting--named-expresions"></a><a name="14.3"></a>
+  - [14.3](#hoisting--named-expresions) Named function expressions hoist the variable name, not the function name or the function body.
 
     ```javascript
     function example() {
@@ -1277,7 +1336,8 @@ Other Style Guides
     }
     ```
 
-  - [14.4](#14.4) <a name='14.4'></a> Function declarations hoist their name and the function body.
+  <a name="hoisting--declarations"></a><a name="14.4"></a>
+  - [14.4](#hoisting--declarations) Function declarations hoist their name and the function body.
 
     ```javascript
     function example() {
@@ -1296,9 +1356,11 @@ Other Style Guides
 
 ## Comparison Operators & Equality
 
-  - [15.1](#15.1) <a name='15.1'></a> Use `===` and `!==` over `==` and `!=`. eslint: [`eqeqeq`](http://eslint.org/docs/rules/eqeqeq.html)
+  <a name="comparison--eqeqeq"></a><a name="15.1"></a>
+  - [15.1](#comparison--eqeqeq) Use `===` and `!==` over `==` and `!=`. eslint: [`eqeqeq`](http://eslint.org/docs/rules/eqeqeq.html)
 
-  - [15.2](#15.2) <a name='15.2'></a> Conditional statements such as the `if` statement evaluate their expression using coercion with the `ToBoolean` abstract method and always follow these simple rules:
+  <a name="comparison--if"></a><a name="15.2"></a>
+  - [15.2](#comparison--if) Conditional statements such as the `if` statement evaluate their expression using coercion with the `ToBoolean` abstract method and always follow these simple rules:
 
     + **Objects** evaluate to **true**
     + **Undefined** evaluates to **false**
@@ -1314,7 +1376,8 @@ Other Style Guides
     }
     ```
 
-  - [15.3](#15.3) <a name='15.3'></a> Use shortcuts.
+  <a name="comparison--shortcuts"></a><a name="15.3"></a>
+  - [15.3](#comparison--shortcuts) Use shortcuts.
 
     ```javascript
     // bad
@@ -1338,9 +1401,11 @@ Other Style Guides
     }
     ```
 
-  - [15.4](#15.4) <a name='15.4'></a> For more information see [Truth Equality and JavaScript](http://javascriptweblog.wordpress.com/2011/02/07/truth-equality-and-javascript/#more-2108) by Angus Croll.
+  <a name="comparison--moreinfo"></a><a name="15.4"></a>
+  - [15.4](#comparison--moreinfo) For more information see [Truth Equality and JavaScript](http://javascriptweblog.wordpress.com/2011/02/07/truth-equality-and-javascript/#more-2108) by Angus Croll.
 
-  - [15.5](#15.5) <a name='15.5'></a> Use braces to create blocks in `case` and `default` clauses that contain lexical declarations (e.g. `let`, `const`, `function`, and `class`).
+  <a name="comparison--switch-blocks"></a><a name="15.5"></a>
+  - [15.5](#comparison--switch-blocks) Use braces to create blocks in `case` and `default` clauses that contain lexical declarations (e.g. `let`, `const`, `function`, and `class`).
 
   > Why? Lexical declarations are visible in the entire `switch` block but only get initialized when assigned, which only happens when its `case` is reached. This causes problems when multiple `case` clauses attempt to define the same thing.
 
@@ -1385,7 +1450,8 @@ Other Style Guides
     }
     ```
 
-  - [15.6](#15.6) <a name='15.6'></a> Ternaries should not be nested and generally be single line expressions.
+  <a name="comparison--nested-ternaries"></a><a name="15.6"></a>
+  - [15.6](#comparison--nested-ternaries) Ternaries should not be nested and generally be single line expressions.
 
     eslint rules: [`no-nested-ternary`](http://eslint.org/docs/rules/no-nested-ternary.html).
 
@@ -1408,7 +1474,8 @@ Other Style Guides
     const foo = maybe1 > maybe2 ? 'bar' : maybeNull;
     ```
 
-  - [15.7](#15.7) <a name='15.7'></a> Avoid unneeded ternary statements.
+  <a name="comparison--unneeded-ternary"></a><a name="15.7"></a>
+  - [15.7](#comparison--unneeded-ternary) Avoid unneeded ternary statements.
 
     eslint rules: [`no-unneeded-ternary`](http://eslint.org/docs/rules/no-unneeded-ternary.html).
 
@@ -1429,7 +1496,8 @@ Other Style Guides
 
 ## Blocks
 
-  - [16.1](#16.1) <a name='16.1'></a> Use braces with all multi-line blocks.
+  <a name="blocks--braces"></a><a name="16.1"></a>
+  - [16.1](#blocks--braces) Use braces with all multi-line blocks.
 
     ```javascript
     // bad
@@ -1453,8 +1521,8 @@ Other Style Guides
     }
     ```
 
-  - [16.2](#16.2) <a name='16.2'></a> If you're using multi-line blocks with `if` and `else`, put `else` on the same line as your
-    `if` block's closing brace. eslint: [`brace-style`](http://eslint.org/docs/rules/brace-style.html) jscs:  [`disallowNewlineBeforeBlockStatements`](http://jscs.info/rule/disallowNewlineBeforeBlockStatements)
+  <a name="blocks--cuddled-elses"></a><a name="16.2"></a>
+  - [16.2](#blocks--cuddled-elses) If you're using multi-line blocks with `if` and `else`, put `else` on the same line as your `if` block's closing brace. eslint: [`brace-style`](http://eslint.org/docs/rules/brace-style.html) jscs:  [`disallowNewlineBeforeBlockStatements`](http://jscs.info/rule/disallowNewlineBeforeBlockStatements)
 
     ```javascript
     // bad
@@ -1481,7 +1549,8 @@ Other Style Guides
 
 ## Comments
 
-  - [17.1](#17.1) <a name='17.1'></a> Use `/** ... */` for multi-line comments. Include a description, specify types and values for all parameters and return values.
+  <a name="comments--multiline"></a><a name="17.1"></a>
+  - [17.1](#comments--multiline) Use `/** ... */` for multi-line comments. Include a description, specify types and values for all parameters and return values.
 
     ```javascript
     // bad
@@ -1513,7 +1582,8 @@ Other Style Guides
     }
     ```
 
-  - [17.2](#17.2) <a name='17.2'></a> Use `//` for single line comments. Place single line comments on a newline above the subject of the comment. Put an empty line before the comment unless it's on the first line of a block.
+  <a name="comments--singleline"></a><a name="17.2"></a>
+  - [17.2](#comments--singleline) Use `//` for single line comments. Place single line comments on a newline above the subject of the comment. Put an empty line before the comment unless it's on the first line of a block.
 
     ```javascript
     // bad
@@ -1551,9 +1621,11 @@ Other Style Guides
     }
     ```
 
-  - [17.3](#17.3) <a name='17.3'></a> Prefixing your comments with `FIXME` or `TODO` helps other developers quickly understand if you're pointing out a problem that needs to be revisited, or if you're suggesting a solution to the problem that needs to be implemented. These are different than regular comments because they are actionable. The actions are `FIXME: -- need to figure this out` or `TODO: -- need to implement`.
+  <a name="comments--actionitems"></a><a name="17.3"></a>
+  - [17.3](#comments--actionitems) Prefixing your comments with `FIXME` or `TODO` helps other developers quickly understand if you're pointing out a problem that needs to be revisited, or if you're suggesting a solution to the problem that needs to be implemented. These are different than regular comments because they are actionable. The actions are `FIXME: -- need to figure this out` or `TODO: -- need to implement`.
 
-  - [17.4](#17.4) <a name='17.4'></a> Use `// FIXME:` to annotate problems.
+  <a name="comments--fixme"></a><a name="17.4"></a>
+  - [17.4](#comments--fixme) Use `// FIXME:` to annotate problems.
 
     ```javascript
     class Calculator extends Abacus {
@@ -1566,7 +1638,8 @@ Other Style Guides
     }
     ```
 
-  - [17.5](#17.5) <a name='17.5'></a> Use `// TODO:` to annotate solutions to problems.
+  <a name="comments--todo"></a><a name="17.5"></a>
+  - [17.5](#comments--todo) Use `// TODO:` to annotate solutions to problems.
 
     ```javascript
     class Calculator extends Abacus {
@@ -1584,7 +1657,8 @@ Other Style Guides
 
 ## Whitespace
 
-  - [18.1](#18.1) <a name='18.1'></a> Use soft tabs set to 2 spaces. eslint: [`indent`](http://eslint.org/docs/rules/indent.html) jscs: [`validateIndentation`](http://jscs.info/rule/validateIndentation)
+  <a name="whitespace--spaces"></a><a name="18.1"></a>
+  - [18.1](#whitespace--spaces) Use soft tabs set to 2 spaces. eslint: [`indent`](http://eslint.org/docs/rules/indent.html) jscs: [`validateIndentation`](http://jscs.info/rule/validateIndentation)
 
     ```javascript
     // bad
@@ -1603,7 +1677,8 @@ Other Style Guides
     }
     ```
 
-  - [18.2](#18.2) <a name='18.2'></a> Place 1 space before the leading brace. eslint: [`space-before-blocks`](http://eslint.org/docs/rules/space-before-blocks.html) jscs: [`requireSpaceBeforeBlockStatements`](http://jscs.info/rule/requireSpaceBeforeBlockStatements)
+  <a name="whitespace--before-blocks"></a><a name="18.2"></a>
+  - [18.2](#whitespace--before-blocks) Place 1 space before the leading brace. eslint: [`space-before-blocks`](http://eslint.org/docs/rules/space-before-blocks.html) jscs: [`requireSpaceBeforeBlockStatements`](http://jscs.info/rule/requireSpaceBeforeBlockStatements)
 
     ```javascript
     // bad
@@ -1629,7 +1704,8 @@ Other Style Guides
     });
     ```
 
-  - [18.3](#18.3) <a name='18.3'></a> Place 1 space before the opening parenthesis in control statements (`if`, `while` etc.). Place no space between the argument list and the function name in function calls and declarations. eslint: [`space-after-keywords`](http://eslint.org/docs/rules/space-after-keywords.html), [`space-before-keywords`](http://eslint.org/docs/rules/space-before-keywords.html) jscs:  [`requireSpaceAfterKeywords`](http://jscs.info/rule/requireSpaceAfterKeywords)
+  <a name="whitespace--around-keywords"></a><a name="18.3"></a>
+  - [18.3](#whitespace--around-keywords) Place 1 space before the opening parenthesis in control statements (`if`, `while` etc.). Place no space between the argument list and the function name in function calls and declarations. eslint: [`space-after-keywords`](http://eslint.org/docs/rules/space-after-keywords.html), [`space-before-keywords`](http://eslint.org/docs/rules/space-before-keywords.html) jscs:  [`requireSpaceAfterKeywords`](http://jscs.info/rule/requireSpaceAfterKeywords)
 
     ```javascript
     // bad
@@ -1653,7 +1729,8 @@ Other Style Guides
     }
     ```
 
-  - [18.4](#18.4) <a name='18.4'></a> Set off operators with spaces. eslint: [`space-infix-ops`](http://eslint.org/docs/rules/space-infix-ops.html) jscs: [`requireSpaceBeforeBinaryOperators`](http://jscs.info/rule/requireSpaceBeforeBinaryOperators), [`requireSpaceAfterBinaryOperators`](http://jscs.info/rule/requireSpaceAfterBinaryOperators)
+  <a name="whitespace--infix-ops"></a><a name="18.4"></a>
+  - [18.4](#whitespace--infix-ops) Set off operators with spaces. eslint: [`space-infix-ops`](http://eslint.org/docs/rules/space-infix-ops.html) jscs: [`requireSpaceBeforeBinaryOperators`](http://jscs.info/rule/requireSpaceBeforeBinaryOperators), [`requireSpaceAfterBinaryOperators`](http://jscs.info/rule/requireSpaceAfterBinaryOperators)
 
     ```javascript
     // bad
@@ -1663,7 +1740,8 @@ Other Style Guides
     const x = y + 5;
     ```
 
-  - [18.5](#18.5) <a name='18.5'></a> End files with a single newline character.
+  <a name="whitespace--newline-at-end"></a><a name="18.5"></a>
+  - [18.5](#whitespace--newline-at-end) End files with a single newline character.
 
     ```javascript
     // bad
@@ -1687,7 +1765,8 @@ Other Style Guides
     })(this);↵
     ```
 
-  - [18.6](#18.6) <a name='18.6'></a> Use indentation when making long method chains (more than 2 method chains). Use a leading dot, which
+  <a name="whitespace--chains"></a><a name="18.6"></a>
+  - [18.6](#whitespace--chains) Use indentation when making long method chains (more than 2 method chains). Use a leading dot, which
     emphasizes that the line is a method call, not a new statement. eslint: [`newline-per-chained-call`](http://eslint.org/docs/rules/newline-per-chained-call) [`no-whitespace-before-property`](http://eslint.org/docs/rules/no-whitespace-before-property)
 
     ```javascript
@@ -1730,7 +1809,8 @@ Other Style Guides
     const leds = stage.selectAll('.led').data(data);
     ```
 
-  - [18.7](#18.7) <a name='18.7'></a> Leave a blank line after blocks and before the next statement. jscs: [`requirePaddingNewLinesAfterBlocks`](http://jscs.info/rule/requirePaddingNewLinesAfterBlocks)
+  <a name="whitespace--after-blocks"></a><a name="18.7"></a>
+  - [18.7](#whitespace--after-blocks) Leave a blank line after blocks and before the next statement. jscs: [`requirePaddingNewLinesAfterBlocks`](http://jscs.info/rule/requirePaddingNewLinesAfterBlocks)
 
     ```javascript
     // bad
@@ -1787,7 +1867,8 @@ Other Style Guides
     return arr;
     ```
 
-  - [18.8](#18.8) <a name='18.8'></a> Do not pad your blocks with blank lines. eslint: [`padded-blocks`](http://eslint.org/docs/rules/padded-blocks.html) jscs:  [`disallowPaddingNewlinesInBlocks`](http://jscs.info/rule/disallowPaddingNewlinesInBlocks)
+  <a name="whitespace--padded-blocks"></a><a name="18.8"></a>
+  - [18.8](#whitespace--padded-blocks) Do not pad your blocks with blank lines. eslint: [`padded-blocks`](http://eslint.org/docs/rules/padded-blocks.html) jscs:  [`disallowPaddingNewlinesInBlocks`](http://jscs.info/rule/disallowPaddingNewlinesInBlocks)
 
     ```javascript
     // bad
@@ -1819,7 +1900,8 @@ Other Style Guides
     }
     ```
 
-  - [18.9](#18.9) <a name='18.9'></a> Do not add spaces inside parentheses. eslint: [`space-in-parens`](http://eslint.org/docs/rules/space-in-parens.html) jscs: [`disallowSpacesInsideParentheses`](http://jscs.info/rule/disallowSpacesInsideParentheses)
+  <a name="whitespace--in-parens"></a><a name="18.9"></a>
+  - [18.9](#whitespace--in-parens) Do not add spaces inside parentheses. eslint: [`space-in-parens`](http://eslint.org/docs/rules/space-in-parens.html) jscs: [`disallowSpacesInsideParentheses`](http://jscs.info/rule/disallowSpacesInsideParentheses)
 
     ```javascript
     // bad
@@ -1843,7 +1925,8 @@ Other Style Guides
     }
     ```
 
-  - [18.10](#18.10) <a name='18.10'></a> Do not add spaces inside brackets. eslint: [`array-bracket-spacing`](http://eslint.org/docs/rules/array-bracket-spacing.html) jscs: [`disallowSpacesInsideArrayBrackets`](http://jscs.info/rule/disallowSpacesInsideArrayBrackets)
+  <a name="whitespace--in-brackets"></a><a name="18.10"></a>
+  - [18.10](#whitespace--in-brackets) Do not add spaces inside brackets. eslint: [`array-bracket-spacing`](http://eslint.org/docs/rules/array-bracket-spacing.html) jscs: [`disallowSpacesInsideArrayBrackets`](http://jscs.info/rule/disallowSpacesInsideArrayBrackets)
 
     ```javascript
     // bad
@@ -1855,7 +1938,8 @@ Other Style Guides
     console.log(foo[0]);
     ```
 
-  - [18.11](#18.11) <a name='18.11'></a> Add spaces inside curly braces. eslint: [`object-curly-spacing`](http://eslint.org/docs/rules/object-curly-spacing.html) jscs: [`disallowSpacesInsideObjectBrackets`](http://jscs.info/rule/disallowSpacesInsideObjectBrackets)
+  <a name="whitespace--in-braces"></a><a name="18.11"></a>
+  - [18.11](#whitespace--in-braces) Add spaces inside curly braces. eslint: [`object-curly-spacing`](http://eslint.org/docs/rules/object-curly-spacing.html) jscs: [`disallowSpacesInsideObjectBrackets`](http://jscs.info/rule/disallowSpacesInsideObjectBrackets)
 
     ```javascript
     // bad
@@ -1865,7 +1949,8 @@ Other Style Guides
     const foo = { clark: 'kent' };
     ```
 
-  - [18.12](#18.12) <a name='18.12'></a> Avoid having lines of code that are longer than 100 characters (including whitespace). eslint: [`max-len`](http://eslint.org/docs/rules/max-len.html) jscs: [`maximumLineLength`](http://jscs.info/rule/maximumLineLength)
+  <a name="whitespace--max-len"></a><a name="18.12"></a>
+  - [18.12](#whitespace--max-len) Avoid having lines of code that are longer than 100 characters (including whitespace). eslint: [`max-len`](http://eslint.org/docs/rules/max-len.html) jscs: [`maximumLineLength`](http://jscs.info/rule/maximumLineLength)
 
     > Why? This ensures readability and maintainability.
 
@@ -1894,7 +1979,8 @@ Other Style Guides
 
 ## Commas
 
-  - [19.1](#19.1) <a name='19.1'></a> Leading commas: **Nope.** eslint: [`comma-style`](http://eslint.org/docs/rules/comma-style.html) jscs: [`requireCommaBeforeLineBreak`](http://jscs.info/rule/requireCommaBeforeLineBreak)
+<a name="commas--leading-trailing"></a><a name="19.1"></a>
+  - [19.1](#commas--leading-trailing) Leading commas: **Nope.** eslint: [`comma-style`](http://eslint.org/docs/rules/comma-style.html) jscs: [`requireCommaBeforeLineBreak`](http://jscs.info/rule/requireCommaBeforeLineBreak)
 
     ```javascript
     // bad
@@ -1928,7 +2014,8 @@ Other Style Guides
     };
     ```
 
-  - [19.2](#19.2) <a name='19.2'></a> Additional trailing comma: **Yup.** eslint: [`comma-dangle`](http://eslint.org/docs/rules/comma-dangle.html) jscs: [`requireTrailingComma`](http://jscs.info/rule/requireTrailingComma)
+  <a name="commas--dangling"></a><a name="19.2"></a>
+  - [19.2](#commas--dangling) Additional trailing comma: **Yup.** eslint: [`comma-dangle`](http://eslint.org/docs/rules/comma-dangle.html) jscs: [`requireTrailingComma`](http://jscs.info/rule/requireTrailingComma)
 
     > Why? This leads to cleaner git diffs. Also, transpilers like Babel will remove the additional trailing comma in the transpiled code which means you don't have to worry about the [trailing comma problem](es5/README.md#commas) in legacy browsers.
 
@@ -1976,7 +2063,8 @@ Other Style Guides
 
 ## Semicolons
 
-  - [20.1](#20.1) <a name='20.1'></a> **Yup.** eslint: [`semi`](http://eslint.org/docs/rules/semi.html) jscs: [`requireSemicolons`](http://jscs.info/rule/requireSemicolons)
+  <a name="semicolons--required"></a><a name="20.1"></a>
+  - [20.1](#20.1) **Yup.** eslint: [`semi`](http://eslint.org/docs/rules/semi.html) jscs: [`requireSemicolons`](http://jscs.info/rule/requireSemicolons)
 
     ```javascript
     // bad
@@ -2005,8 +2093,11 @@ Other Style Guides
 
 ## Type Casting & Coercion
 
-  - [21.1](#21.1) <a name='21.1'></a> Perform type coercion at the beginning of the statement.
-  - [21.2](#21.2) <a name='21.2'></a> Strings:
+  <a name="coercion--explicit"></a><a name="21.1"></a>
+  - [21.1](#coercion--explicit) Perform type coercion at the beginning of the statement.
+
+  <a name="coercion--strings"></a><a name="21.2"></a>
+  - [21.2](#coercion--strings)  Strings:
 
     ```javascript
     // => this.reviewScore = 9;
@@ -2021,7 +2112,8 @@ Other Style Guides
     const totalScore = String(this.reviewScore);
     ```
 
-  - [21.3](#21.3) <a name='21.3'></a> Numbers: Use `Number` for type casting and `parseInt` always with a radix for parsing strings. eslint: [`radix`](http://eslint.org/docs/rules/radix)
+  <a name="coercion--numbers"></a><a name="21.3"></a>
+  - [21.3](#coercion--numbers) Numbers: Use `Number` for type casting and `parseInt` always with a radix for parsing strings. eslint: [`radix`](http://eslint.org/docs/rules/radix)
 
     ```javascript
     const inputValue = '4';
@@ -2045,7 +2137,8 @@ Other Style Guides
     const val = parseInt(inputValue, 10);
     ```
 
-  - [21.4](#21.4) <a name='21.4'></a> If for whatever reason you are doing something wild and `parseInt` is your bottleneck and need to use Bitshift for [performance reasons](http://jsperf.com/coercion-vs-casting/3), leave a comment explaining why and what you're doing.
+  <a name="coercion--comment-deviations"></a><a name="21.4"></a>
+  - [21.4](#coercion--comment-deviations) If for whatever reason you are doing something wild and `parseInt` is your bottleneck and need to use Bitshift for [performance reasons](http://jsperf.com/coercion-vs-casting/3), leave a comment explaining why and what you're doing.
 
     ```javascript
     // good
@@ -2057,7 +2150,8 @@ Other Style Guides
     const val = inputValue >> 0;
     ```
 
-  - [21.5](#21.5) <a name='21.5'></a> **Note:** Be careful when using bitshift operations. Numbers are represented as [64-bit values](http://es5.github.io/#x4.3.19), but bitshift operations always return a 32-bit integer ([source](http://es5.github.io/#x11.7)). Bitshift can lead to unexpected behavior for integer values larger than 32 bits. [Discussion](https://github.com/airbnb/javascript/issues/109). Largest signed 32-bit Int is 2,147,483,647:
+  <a name="coercion--bitwise"></a><a name="21.5"></a>
+  - [21.5](#coercion--bitwise) **Note:** Be careful when using bitshift operations. Numbers are represented as [64-bit values](http://es5.github.io/#x4.3.19), but bitshift operations always return a 32-bit integer ([source](http://es5.github.io/#x11.7)). Bitshift can lead to unexpected behavior for integer values larger than 32 bits. [Discussion](https://github.com/airbnb/javascript/issues/109). Largest signed 32-bit Int is 2,147,483,647:
 
     ```javascript
     2147483647 >> 0 //=> 2147483647
@@ -2065,7 +2159,8 @@ Other Style Guides
     2147483649 >> 0 //=> -2147483647
     ```
 
-  - [21.6](#21.6) <a name='21.6'></a> Booleans:
+  <a name="coercion--booleans"></a><a name="21.6"></a>
+  - [21.6](#coercion--booleans) Booleans:
 
     ```javascript
     const age = 0;
@@ -2085,7 +2180,8 @@ Other Style Guides
 
 ## Naming Conventions
 
-  - [22.1](#22.1) <a name='22.1'></a> Avoid single letter names. Be descriptive with your naming.
+  <a name="naming--descriptive"></a><a name="22.1"></a>
+  - [22.1](#naming--descriptive) Avoid single letter names. Be descriptive with your naming.
 
     ```javascript
     // bad
@@ -2099,7 +2195,8 @@ Other Style Guides
     }
     ```
 
-  - [22.2](#22.2) <a name='22.2'></a> Use camelCase when naming objects, functions, and instances. eslint: [`camelcase`](http://eslint.org/docs/rules/camelcase.html) jscs: [`requireCamelCaseOrUpperCaseIdentifiers`](http://jscs.info/rule/requireCamelCaseOrUpperCaseIdentifiers)
+  <a name="naming--camelCase"></a><a name="22.2"></a>
+  - [22.2](#naming--camelCase) Use camelCase when naming objects, functions, and instances. eslint: [`camelcase`](http://eslint.org/docs/rules/camelcase.html) jscs: [`requireCamelCaseOrUpperCaseIdentifiers`](http://jscs.info/rule/requireCamelCaseOrUpperCaseIdentifiers)
 
     ```javascript
     // bad
@@ -2112,7 +2209,8 @@ Other Style Guides
     function thisIsMyFunction() {}
     ```
 
-  - [22.3](#22.3) <a name='22.3'></a> Use PascalCase when naming constructors or classes. eslint: [`new-cap`](http://eslint.org/docs/rules/new-cap.html) jscs: [`requireCapitalizedConstructors`](http://jscs.info/rule/requireCapitalizedConstructors)
+  <a name="naming--PascalCase"></a><a name="22.3"></a>
+  - [22.3](#naming--PascalCase) Use PascalCase only when naming constructors or classes. eslint: [`new-cap`](http://eslint.org/docs/rules/new-cap.html) jscs: [`requireCapitalizedConstructors`](http://jscs.info/rule/requireCapitalizedConstructors)
 
     ```javascript
     // bad
@@ -2136,7 +2234,8 @@ Other Style Guides
     });
     ```
 
-  - [22.4](#22.4) <a name='22.4'></a> Use a leading underscore `_` when naming private properties. eslint: [`no-underscore-dangle`](http://eslint.org/docs/rules/no-underscore-dangle.html) jscs: [`disallowDanglingUnderscores`](http://jscs.info/rule/disallowDanglingUnderscores)
+  <a name="naming--leading-underscore"></a><a name="22.4"></a>
+  - [22.4](#naming--leading-underscore) Use a leading underscore `_` when naming private properties. eslint: [`no-underscore-dangle`](http://eslint.org/docs/rules/no-underscore-dangle.html) jscs: [`disallowDanglingUnderscores`](http://jscs.info/rule/disallowDanglingUnderscores)
 
     ```javascript
     // bad
@@ -2147,7 +2246,8 @@ Other Style Guides
     this._firstName = 'Panda';
     ```
 
-  - [22.5](#22.5) <a name='22.5'></a> Don't save references to `this`. Use arrow functions or Function#bind. jscs: [`disallowNodeTypes`](http://jscs.info/rule/disallowNodeTypes)
+  <a name="naming--self-this"></a><a name="22.5"></a>
+  - [22.5](#naming--self-this) Don't save references to `this`. Use arrow functions or Function#bind. jscs: [`disallowNodeTypes`](http://jscs.info/rule/disallowNodeTypes)
 
     ```javascript
     // bad
@@ -2174,7 +2274,8 @@ Other Style Guides
     }
     ```
 
-  - [22.6](#22.6) <a name='22.6'></a> If your file exports a single class, your filename should be exactly the name of the class.
+  <a name="naming--filename-matches-export"></a><a name="22.6"></a>
+  - [22.6](#naming--filename-matches-export) If your file exports a single class, your filename should be exactly the name of the class.
 
     ```javascript
     // file contents
@@ -2194,7 +2295,8 @@ Other Style Guides
     import CheckBox from './CheckBox';
     ```
 
-  - [22.7](#22.7) <a name='22.7'></a> Use camelCase when you export-default a function. Your filename should be identical to your function's name.
+  <a name="naming--camelCase-default-export"></a><a name="22.7"></a>
+  - [22.7](#naming--camelCase-default-export) Use camelCase when you export-default a function. Your filename should be identical to your function's name.
 
     ```javascript
     function makeStyleGuide() {
@@ -2203,7 +2305,8 @@ Other Style Guides
     export default makeStyleGuide;
     ```
 
-  - [22.8](#22.8) <a name='22.8'></a> Use PascalCase when you export a singleton / function library / bare object.
+  <a name="naming--PascalCase-singleton"></a><a name="22.8"></a>
+  - [22.8](#naming--PascalCase-singleton) Use PascalCase when you export a singleton / function library / bare object.
 
     ```javascript
     const AirbnbStyleGuide = {
@@ -2220,8 +2323,11 @@ Other Style Guides
 
 ## Accessors
 
-  - [23.1](#23.1) <a name='23.1'></a> Accessor functions for properties are not required.
-  - [23.2](#23.2) <a name='23.2'></a> Do not use JavaScript getters/setters as they cause unexpected side effects and are harder to test, maintain, and reason about. Instead, if you do make accessor functions, use getVal() and setVal('hello').
+  <a name="accessors--not-required"></a><a name="23.1"></a>
+  - [23.1](#accessors--not-required) Accessor functions for properties are not required.
+
+  <a name="accessors--no-getters-setters"></a><a name="23.2"></a>
+  - [23.2](#accessors--no-getters-setters) Do not use JavaScript getters/setters as they cause unexpected side effects and are harder to test, maintain, and reason about. Instead, if you do make accessor functions, use getVal() and setVal('hello').
 
     ```javascript
     // bad
@@ -2237,7 +2343,8 @@ Other Style Guides
     dragon.setAge(25);
     ```
 
-  - [23.3](#23.3) <a name='23.3'></a> If the property is a `boolean`, use `isVal()` or `hasVal()`.
+  <a name="accessors--boolean-prefix"></a><a name="23.3"></a>
+  - [23.3](#accessors--boolean-prefix) If the property/method is a `boolean`, use `isVal()` or `hasVal()`.
 
     ```javascript
     // bad
@@ -2251,7 +2358,8 @@ Other Style Guides
     }
     ```
 
-  - [23.4](#23.4) <a name='23.4'></a> It's okay to create get() and set() functions, but be consistent.
+  <a name="accessors--consistent"></a><a name="23.4"></a>
+  - [23.4](#accessors--consistent) It's okay to create get() and set() functions, but be consistent.
 
     ```javascript
     class Jedi {
@@ -2275,7 +2383,8 @@ Other Style Guides
 
 ## Events
 
-  - [24.1](#24.1) <a name='24.1'></a> When attaching data payloads to events (whether DOM events or something more proprietary like Backbone events), pass a hash instead of a raw value. This allows a subsequent contributor to add more data to the event payload without finding and updating every handler for the event. For example, instead of:
+  <a name="events--hash"></a><a name="24.1"></a>
+  - [24.1](#events--hash) When attaching data payloads to events (whether DOM events or something more proprietary like Backbone events), pass a hash instead of a raw value. This allows a subsequent contributor to add more data to the event payload without finding and updating every handler for the event. For example, instead of:
 
     ```javascript
     // bad
@@ -2306,7 +2415,8 @@ Other Style Guides
 
 ## jQuery
 
-  - [25.1](#25.1) <a name='25.1'></a> Prefix jQuery object variables with a `$`. jscs: [`requireDollarBeforejQueryAssignment`](http://jscs.info/rule/requireDollarBeforejQueryAssignment)
+  <a name="jquery--dollar-prefix"></a><a name="25.1"></a>
+  - [25.1](#jquery--dollar-prefix) Prefix jQuery object variables with a `$`. jscs: [`requireDollarBeforejQueryAssignment`](http://jscs.info/rule/requireDollarBeforejQueryAssignment)
 
     ```javascript
     // bad
@@ -2319,7 +2429,8 @@ Other Style Guides
     const $sidebarBtn = $('.sidebar-btn');
     ```
 
-  - [25.2](#25.2) <a name='25.2'></a> Cache jQuery lookups.
+  <a name="jquery--cache"></a><a name="25.2"></a>
+  - [25.2](#jquery--cache) Cache jQuery lookups.
 
     ```javascript
     // bad
@@ -2346,8 +2457,11 @@ Other Style Guides
     }
     ```
 
-  - [25.3](#25.3) <a name='25.3'></a> For DOM queries use Cascading `$('.sidebar ul')` or parent > child `$('.sidebar > ul')`. [jsPerf](http://jsperf.com/jquery-find-vs-context-sel/16)
-  - [25.4](#25.4) <a name='25.4'></a> Use `find` with scoped jQuery object queries.
+  <a name="jquery--queries"></a><a name="25.3"></a>
+  - [25.3](#jquery--queries) For DOM queries use Cascading `$('.sidebar ul')` or parent > child `$('.sidebar > ul')`. [jsPerf](http://jsperf.com/jquery-find-vs-context-sel/16)
+
+  <a name="jquery--find"></a><a name="25.4"></a>
+  - [25.4](#jquery--find) Use `find` with scoped jQuery object queries.
 
     ```javascript
     // bad
@@ -2371,13 +2485,15 @@ Other Style Guides
 
 ## ECMAScript 5 Compatibility
 
-  - [26.1](#26.1) <a name='26.1'></a> Refer to [Kangax](https://twitter.com/kangax/)'s ES5 [compatibility table](http://kangax.github.io/es5-compat-table/).
+  <a name="es5-compat--kangax"></a><a name="26.1"></a>
+  - [26.1](#es5-compat--kangax) Refer to [Kangax](https://twitter.com/kangax/)'s ES5 [compatibility table](http://kangax.github.io/es5-compat-table/).
 
 **[⬆ back to top](#table-of-contents)**
 
 ## ECMAScript 6 Styles
 
-  - [27.1](#27.1) <a name='27.1'></a> This is a collection of links to the various ES6 features.
+  <a name="es6-styles"></a><a name="27.1"></a>
+  - [27.1](#es6-styles) This is a collection of links to the various ES6 features.
 
 1. [Arrow Functions](#arrow-functions)
 1. [Classes](#constructors)
@@ -2397,7 +2513,8 @@ Other Style Guides
 
 ## Testing
 
-  - [28.1](#28.1) <a name="28.1"></a> **Yup.**
+  <a name="testing--yup"></a><a name="28.1"></a>
+  - [28.1](#esting--yup) **Yup.**
 
     ```javascript
     function foo() {
@@ -2405,7 +2522,8 @@ Other Style Guides
     }
     ```
 
-  - [28.2](#28.2) <a name="28.2"></a> **No, but seriously**:
+  <a name="testing--for-real"></a><a name="28.2"></a>
+  - [28.2](#testing--for-real) **No, but seriously**:
    - Whichever testing framework you use, you should be writing tests!
    - Strive to write many small pure functions, and minimize where mutations occur.
    - Be cautious about stubs and mocks - they can make your tests more brittle.

From 2ff6c427b0e1bc8f60581be3481699628fdd8a0b Mon Sep 17 00:00:00 2001
From: Jason Bacchetta <jabacchetta@gmail.com>
Date: Wed, 9 Mar 2016 19:14:00 -0600
Subject: [PATCH 0538/1591] Update README.md

Add parentheses around argument, to be consistent with section 8.4
(include parentheses when using braces).
---
 README.md | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/README.md b/README.md
index 5368efacf7..603f4f82e3 100644
--- a/README.md
+++ b/README.md
@@ -874,7 +874,7 @@ Other Style Guides
     const itemHeight = (item) => item.height > 256 ? item.largeSize : item.smallSize;
 
     // good
-    const itemHeight = item => { return item.height > 256 ? item.largeSize : item.smallSize; }
+    const itemHeight = (item) => { return item.height > 256 ? item.largeSize : item.smallSize; }
     ```
 
 **[⬆ back to top](#table-of-contents)**

From c38cdd20158ad76030d8a596b67bbc32d7b5494f Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Tim=20Daubensch=C3=BCtz?= <Tim.Daubenschuetz@gmail.com>
Date: Fri, 11 Mar 2016 09:29:44 +0100
Subject: [PATCH 0539/1591] Add ascribe's styleguide to the list

---
 README.md | 1 +
 1 file changed, 1 insertion(+)

diff --git a/README.md b/README.md
index 603f4f82e3..d4ed168963 100644
--- a/README.md
+++ b/README.md
@@ -2637,6 +2637,7 @@ Other Style Guides
   - **Adult Swim**: [adult-swim/javascript](https://github.com/adult-swim/javascript)
   - **Airbnb**: [airbnb/javascript](https://github.com/airbnb/javascript)
   - **Apartmint**: [apartmint/javascript](https://github.com/apartmint/javascript)
+  - **Ascribe**: [ascribe/javascript](https://github.com/ascribe/javascript)
   - **Avalara**: [avalara/javascript](https://github.com/avalara/javascript)
   - **Avant**: [avantcredit/javascript](https://github.com/avantcredit/javascript)
   - **Billabong**: [billabong/javascript](https://github.com/billabong/javascript)

From 8fe2f9ed522107e5f22794402342006fa2139aff Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Fri, 11 Mar 2016 16:33:31 -0800
Subject: [PATCH 0540/1591] [eslint config] [dev deps] update `eslint`,
 `eslint-plugin-react`

---
 packages/eslint-config-airbnb/package.json | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/packages/eslint-config-airbnb/package.json b/packages/eslint-config-airbnb/package.json
index 0721839841..c4ecc16d43 100644
--- a/packages/eslint-config-airbnb/package.json
+++ b/packages/eslint-config-airbnb/package.json
@@ -43,8 +43,8 @@
   "homepage": "https://github.com/airbnb/javascript",
   "devDependencies": {
     "babel-tape-runner": "^1.3.1",
-    "eslint": "^2.3.0",
-    "eslint-plugin-react": "^4.2.0",
+    "eslint": "^2.4.0",
+    "eslint-plugin-react": "^4.2.1",
     "react": "^0.14.7",
     "tape": "^4.5.1",
     "parallelshell": "^2.0.0"

From 6f125a5e85840c08594bfc2a3d1c181282634fc9 Mon Sep 17 00:00:00 2001
From: Tim Cheung <tim@cheung.io>
Date: Tue, 15 Mar 2016 15:11:28 +0100
Subject: [PATCH 0541/1591] fix react/prefer-stateless-function link

---
 packages/eslint-config-airbnb/CHANGELOG.md | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/packages/eslint-config-airbnb/CHANGELOG.md b/packages/eslint-config-airbnb/CHANGELOG.md
index bb9374e170..774fad0795 100644
--- a/packages/eslint-config-airbnb/CHANGELOG.md
+++ b/packages/eslint-config-airbnb/CHANGELOG.md
@@ -174,4 +174,5 @@
 [react/jsx-no-bind]: https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/jsx-no-bind.md
 [react/no-is-mounted]: https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/no-is-mounted.md
 [react/prefer-es6-class]: https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/prefer-es6-class.md
-[react/jsx-quotes]: https://github.com/yannickcr/eslint-plugin-react/blob/f817e37beddddc84b4788969f07c524fa7f0823b/docs/rules/jsx-quotes.md
\ No newline at end of file
+[react/jsx-quotes]: https://github.com/yannickcr/eslint-plugin-react/blob/f817e37beddddc84b4788969f07c524fa7f0823b/docs/rules/jsx-quotes.md
+[react/prefer-stateless-function]: https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/prefer-stateless-function.md

From 9eb24d6b61515747f5a67f179ddb3d73ad385121 Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Wed, 16 Mar 2016 14:47:35 -0700
Subject: [PATCH 0542/1591] [editorial] clean up some constructor examples

Fixes #792
---
 README.md | 14 +++++++-------
 1 file changed, 7 insertions(+), 7 deletions(-)

diff --git a/README.md b/README.md
index d4ed168963..09f6f28627 100644
--- a/README.md
+++ b/README.md
@@ -890,23 +890,23 @@ Other Style Guides
     ```javascript
     // bad
     function Queue(contents = []) {
-      this._queue = [...contents];
+      this.queue = [...contents];
     }
     Queue.prototype.pop = function () {
-      const value = this._queue[0];
-      this._queue.splice(0, 1);
+      const value = this.queue[0];
+      this.queue.splice(0, 1);
       return value;
-    }
+    };
 
 
     // good
     class Queue {
       constructor(contents = []) {
-        this._queue = [...contents];
+        this.queue = [...contents];
       }
       pop() {
-        const value = this._queue[0];
-        this._queue.splice(0, 1);
+        const value = this.queue[0];
+        this.queue.splice(0, 1);
         return value;
       }
     }

From 5ded256d3fab29b7b3fa42238093b9af632fb32b Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Sun, 20 Mar 2016 17:23:49 -0700
Subject: [PATCH 0543/1591] [Fix] re-enable `no-confusing-arrow` rule, with
 `allowParens` option enabled.

Per #752, fixes #791.
---
 packages/eslint-config-airbnb/rules/es6.js | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

diff --git a/packages/eslint-config-airbnb/rules/es6.js b/packages/eslint-config-airbnb/rules/es6.js
index d0b7bbde9f..a26e49d9df 100644
--- a/packages/eslint-config-airbnb/rules/es6.js
+++ b/packages/eslint-config-airbnb/rules/es6.js
@@ -30,7 +30,9 @@ module.exports = {
     'no-class-assign': 0,
     // disallow arrow functions where they could be confused with comparisons
     // http://eslint.org/docs/rules/no-confusing-arrow
-    'no-confusing-arrow': 0,
+    'no-confusing-arrow': [2, {
+      'allowParens': true,
+    }],
     // disallow modifying variables that are declared using const
     'no-const-assign': 2,
     // disallow symbol constructor

From f796cfc81f14d80b67f341a436c4c31f3500bcd1 Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Sun, 20 Mar 2016 17:26:15 -0700
Subject: [PATCH 0544/1591] [peer deps] update `eslint`, `eslint-plugin-react`

---
 packages/eslint-config-airbnb/package.json | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/packages/eslint-config-airbnb/package.json b/packages/eslint-config-airbnb/package.json
index c4ecc16d43..ff8adb78c8 100644
--- a/packages/eslint-config-airbnb/package.json
+++ b/packages/eslint-config-airbnb/package.json
@@ -50,7 +50,7 @@
     "parallelshell": "^2.0.0"
   },
   "peerDependencies": {
-    "eslint": "^2.2.0",
-    "eslint-plugin-react": "^4.0.0"
+    "eslint": "^2.4.0",
+    "eslint-plugin-react": "^4.2.3"
   }
 }

From 8db205c4d2309fcf31c2681366bdd35d68c77dff Mon Sep 17 00:00:00 2001
From: Arnav Singh <arnavion@gmail.com>
Date: Sun, 20 Mar 2016 22:40:07 -0700
Subject: [PATCH 0545/1591] Fix "object destructuring for multiple return
 values" example

... to use the same destructured properties in the good and bad code.
---
 README.md | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/README.md b/README.md
index 09f6f28627..432ef98900 100644
--- a/README.md
+++ b/README.md
@@ -476,7 +476,7 @@ Other Style Guides
     }
 
     // the caller selects only the data they need
-    const { left, right } = processInput(input);
+    const { left, top } = processInput(input);
     ```
 
 

From 94ace27f465bbbdd814bafedbbd3708b8d21b06e Mon Sep 17 00:00:00 2001
From: Gil Birman <gil.birman@airbnb.com>
Date: Wed, 9 Mar 2016 08:59:48 -0800
Subject: [PATCH 0546/1591] Allow arrow functions in JSX props

---
 packages/eslint-config-airbnb/rules/react.js |  4 ++--
 react/README.md                              | 17 +++++++++++++++++
 2 files changed, 19 insertions(+), 2 deletions(-)

diff --git a/packages/eslint-config-airbnb/rules/react.js b/packages/eslint-config-airbnb/rules/react.js
index a5d0d17de2..470738b769 100644
--- a/packages/eslint-config-airbnb/rules/react.js
+++ b/packages/eslint-config-airbnb/rules/react.js
@@ -41,8 +41,8 @@ module.exports = {
     // Prevent usage of .bind() and arrow functions in JSX props
     // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/jsx-no-bind.md
     'react/jsx-no-bind': [2, {
-      'ignoreRefs': false,
-      'allowArrowFunctions': false,
+      'ignoreRefs': true,
+      'allowArrowFunctions': true,
       'allowBind': false,
     }],
     // Prevent duplicate props in JSX
diff --git a/react/README.md b/react/README.md
index 8bab601e12..6eddabcad2 100644
--- a/react/README.md
+++ b/react/README.md
@@ -274,6 +274,23 @@
 
 ## Methods
 
+  - Use arrow functions to close over local variables.
+
+    ```javascript
+    function ItemList(props) {
+      return (
+        <ul>
+          {props.items.map((item, index) => (
+            <Item
+              key={item.key}
+              onClick={() => doSomethingWith(item.name, index)}
+            />
+          ))}
+        </ul>
+      );
+    }
+    ```
+
   - Bind event handlers for the render method in the constructor. eslint: [`react/jsx-no-bind`](https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/jsx-no-bind.md)
 
   > Why? A bind call in the render path creates a brand new function on every single render.

From ec898a67e09a5f47b7afdc24dbb5bb3ab0214268 Mon Sep 17 00:00:00 2001
From: Juan Scolari <juanscolari@gmail.com>
Date: Mon, 21 Mar 2016 20:54:59 -0300
Subject: [PATCH 0547/1591] Add SysGarage to list of organizations

---
 README.md     | 1 +
 es5/README.md | 1 +
 2 files changed, 2 insertions(+)

diff --git a/README.md b/README.md
index 432ef98900..6013998b27 100644
--- a/README.md
+++ b/README.md
@@ -2689,6 +2689,7 @@ Other Style Guides
   - **Shutterfly**: [shutterfly/javascript](https://github.com/shutterfly/javascript)
   - **Springload**: [springload/javascript](https://github.com/springload/javascript)
   - **StudentSphere**: [studentsphere/javascript](https://github.com/studentsphere/guide-javascript)
+  - **SysGarage**: [sysgarage/javascript-style-guide](https://github.com/sysgarage/javascript-style-guide)
   - **Target**: [target/javascript](https://github.com/target/javascript)
   - **TheLadders**: [TheLadders/javascript](https://github.com/TheLadders/javascript)
   - **T4R Technology**: [T4R-Technology/javascript](https://github.com/T4R-Technology/javascript)
diff --git a/es5/README.md b/es5/README.md
index caaa17b503..b2fa49d9c1 100644
--- a/es5/README.md
+++ b/es5/README.md
@@ -1672,6 +1672,7 @@
   - **Shutterfly**: [shutterfly/javascript](https://github.com/shutterfly/javascript)
   - **StudentSphere**: [studentsphere/javascript](https://github.com/studentsphere/javascript)
   - **Super**: [SuperJobs/javascript](https://github.com/SuperJobs/javascript)
+  - **SysGarage**: [sysgarage/javascript-style-guide](https://github.com/sysgarage/javascript-style-guide)
   - **Target**: [target/javascript](https://github.com/target/javascript)
   - **TheLadders**: [TheLadders/javascript](https://github.com/TheLadders/javascript)
   - **T4R Technology**: [T4R-Technology/javascript](https://github.com/T4R-Technology/javascript)

From ff6e1d0d08c129db5876a897ee146ae801178809 Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Tue, 22 Mar 2016 23:34:59 -0700
Subject: [PATCH 0548/1591] [eslint config] v6.2.0

---
 packages/eslint-config-airbnb/CHANGELOG.md | 7 +++++++
 packages/eslint-config-airbnb/package.json | 2 +-
 2 files changed, 8 insertions(+), 1 deletion(-)

diff --git a/packages/eslint-config-airbnb/CHANGELOG.md b/packages/eslint-config-airbnb/CHANGELOG.md
index 774fad0795..3968eea84b 100644
--- a/packages/eslint-config-airbnb/CHANGELOG.md
+++ b/packages/eslint-config-airbnb/CHANGELOG.md
@@ -1,3 +1,10 @@
+6.2.0 / 2016-03-22
+==================
+- [new] Allow arrow functions in JSX props
+- [fix] re-enable `no-confusing-arrow` rule, with `allowParens` option enabled ([#752](https://github.com/airbnb/javascript/issues/752), [#791](https://github.com/airbnb/javascript/issues/791))
+- [dev deps] update `tape`, `eslint`, `eslint-plugin-react`
+- [peer deps] update `eslint`, `eslint-plugin-react`
+
 6.1.0 / 2016-02-22
 ==================
 - [new] enable [`react/prefer-stateless-function`][react/prefer-stateless-function]
diff --git a/packages/eslint-config-airbnb/package.json b/packages/eslint-config-airbnb/package.json
index ff8adb78c8..da5bf3f2fc 100644
--- a/packages/eslint-config-airbnb/package.json
+++ b/packages/eslint-config-airbnb/package.json
@@ -1,6 +1,6 @@
 {
   "name": "eslint-config-airbnb",
-  "version": "6.1.0",
+  "version": "6.2.0",
   "description": "Airbnb's ESLint config, following our styleguide",
   "main": "index.js",
   "scripts": {

From 5ce6fb1eae2b0a948e526d127654b044f34d3b1b Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Sat, 26 Mar 2016 22:39:17 -0700
Subject: [PATCH 0549/1591] [eslint config] [dev deps] update `eslint`,
 `eslint-plugin-react`

---
 packages/eslint-config-airbnb/package.json | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/packages/eslint-config-airbnb/package.json b/packages/eslint-config-airbnb/package.json
index da5bf3f2fc..0d059f0c8d 100644
--- a/packages/eslint-config-airbnb/package.json
+++ b/packages/eslint-config-airbnb/package.json
@@ -43,8 +43,8 @@
   "homepage": "https://github.com/airbnb/javascript",
   "devDependencies": {
     "babel-tape-runner": "^1.3.1",
-    "eslint": "^2.4.0",
-    "eslint-plugin-react": "^4.2.1",
+    "eslint": "^2.5.3",
+    "eslint-plugin-react": "^4.2.3",
     "react": "^0.14.7",
     "tape": "^4.5.1",
     "parallelshell": "^2.0.0"

From 24565121c1847fbf27d0854a1d2fc9accbbef4df Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Sat, 26 Mar 2016 22:42:29 -0700
Subject: [PATCH 0550/1591] [eslint config] [breaking] add
 `no-duplicate-imports` rule.

---
 README.md                                  | 21 +++++++++++++++++++++
 packages/eslint-config-airbnb/rules/es6.js |  3 +++
 2 files changed, 24 insertions(+)

diff --git a/README.md b/README.md
index 6013998b27..8233e4916e 100644
--- a/README.md
+++ b/README.md
@@ -1075,6 +1075,27 @@ Other Style Guides
     export default es6;
     ```
 
+  <a name="modules--no-duplicate-imports"></a>
+  - [10.4](#modules--no-duplicate-imports) Only import from a path in one place.
+ eslint: [`no-duplicate-imports`](http://eslint.org/docs/rules/no-duplicate-imports)
+    > Why? Having multiple lines that import from the same path can make code harder to maintain.
+
+    ```javascript
+    // bad
+    import foo from 'foo';
+    // … some other imports … //
+    import { named1, named2 } from 'foo';
+
+    // good
+    import foo, { named1, named2 } from 'foo';
+
+    // good
+    import foo, {
+      named1,
+      named2,
+    } from 'foo';
+    ```
+
 **[⬆ back to top](#table-of-contents)**
 
 ## Iterators and Generators
diff --git a/packages/eslint-config-airbnb/rules/es6.js b/packages/eslint-config-airbnb/rules/es6.js
index a26e49d9df..78a43b94cd 100644
--- a/packages/eslint-config-airbnb/rules/es6.js
+++ b/packages/eslint-config-airbnb/rules/es6.js
@@ -35,6 +35,9 @@ module.exports = {
     }],
     // disallow modifying variables that are declared using const
     'no-const-assign': 2,
+    // disallow importing from the same path more than once
+    // http://eslint.org/docs/rules/no-duplicate-imports
+    'no-duplicate-imports': 2,
     // disallow symbol constructor
     // http://eslint.org/docs/rules/no-new-symbol
     'no-new-symbol': 2,

From 81241b83cf3a95c1560d4080c39bf8b57381656f Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Sat, 26 Mar 2016 23:11:23 -0700
Subject: [PATCH 0551/1591] [eslint config] [breaking] add `no-useless-escape`
 rule.

---
 README.md                                          | 14 ++++++++++++++
 .../eslint-config-airbnb/rules/best-practices.js   |  3 +++
 2 files changed, 17 insertions(+)

diff --git a/README.md b/README.md
index 8233e4916e..664b24921a 100644
--- a/README.md
+++ b/README.md
@@ -547,6 +547,20 @@ Other Style Guides
   <a name="strings--eval"></a><a name="6.5"></a>
   - [6.5](#strings--eval) Never use `eval()` on a string, it opens too many vulnerabilities.
 
+  <a name="strings--escaping"></a>
+  - [6.6](#strings--escaping) Do not unnecessarily escape characters in strings. eslint: [`no-useless-escape`](http://eslint.org/docs/rules/no-useless-escape)
+
+    > Why? Backslashes harm readability, thus they should only be present when necessary.
+
+    ```javascript
+    // bad
+    const foo = '\'this\' \i\s \"quoted\"';
+
+    // good
+    const foo = '\'this\' is "quoted"';
+    const foo = `'this' is "quoted"`;
+    ```
+
 **[⬆ back to top](#table-of-contents)**
 
 
diff --git a/packages/eslint-config-airbnb/rules/best-practices.js b/packages/eslint-config-airbnb/rules/best-practices.js
index ff782a5b7a..e9a0026546 100644
--- a/packages/eslint-config-airbnb/rules/best-practices.js
+++ b/packages/eslint-config-airbnb/rules/best-practices.js
@@ -113,6 +113,9 @@ module.exports = {
     'no-unused-labels': 2,
     // disallow unnecessary .call() and .apply()
     'no-useless-call': 0,
+    // disallow unnecessary string escaping
+    // http://eslint.org/docs/rules/no-useless-escape
+    'no-useless-escape': 2,
     // disallow use of void operator
     'no-void': 0,
     // disallow usage of configurable warning terms in comments: e.g. todo

From 9415b88afd0d21800e6b595828f0526689084f0a Mon Sep 17 00:00:00 2001
From: Saad Quadri <saad@saadquadri.com>
Date: Wed, 30 Mar 2016 02:50:21 -0400
Subject: [PATCH 0552/1591] Add missing description for 7.2

---
 README.md | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/README.md b/README.md
index 664b24921a..064e9f6276 100644
--- a/README.md
+++ b/README.md
@@ -582,7 +582,7 @@ Other Style Guides
     ```
 
   <a name="functions--iife"></a><a name="7.2"></a>
-  - [7.2](#functions--iife) Immediately invoked function expressions: eslint: [`wrap-iife`](http://eslint.org/docs/rules/wrap-iife.html) jscs: [`requireParenthesesAroundIIFE`](http://jscs.info/rule/requireParenthesesAroundIIFE)
+  - [7.2](#functions--iife) Wrap immediately invoked function expressions in parentheses. eslint: [`wrap-iife`](http://eslint.org/docs/rules/wrap-iife.html) jscs: [`requireParenthesesAroundIIFE`](http://jscs.info/rule/requireParenthesesAroundIIFE)
 
     > Why? An immediately invoked function expression is a single unit - wrapping both it, and its invocation parens, in parens, cleanly expresses this. Note that in a world with modules everywhere, you almost never need an IIFE.
 

From 5ec8765a28923671a59465901c03a7f997eb861a Mon Sep 17 00:00:00 2001
From: Yarun Luon <yarun.luon@chartboost.com>
Date: Thu, 31 Mar 2016 18:17:26 -0700
Subject: [PATCH 0553/1591] Add Chartboost to 'In the Wild'

---
 README.md | 1 +
 1 file changed, 1 insertion(+)

diff --git a/README.md b/README.md
index 064e9f6276..ff42af3d2c 100644
--- a/README.md
+++ b/README.md
@@ -2679,6 +2679,7 @@ Other Style Guides
   - **Bisk**: [bisk/javascript](https://github.com/Bisk/javascript/)
   - **Blendle**: [blendle/javascript](https://github.com/blendle/javascript)
   - **Brainshark**: [brainshark/javascript](https://github.com/brainshark/javascript)
+  - **Chartboost**: [ChartBoost/javascript-style-guide](https://github.com/ChartBoost/javascript-style-guide)
   - **ComparaOnline**: [comparaonline/javascript](https://github.com/comparaonline/javascript-style-guide)
   - **Compass Learning**: [compasslearning/javascript-style-guide](https://github.com/compasslearning/javascript-style-guide)
   - **DailyMotion**: [dailymotion/javascript](https://github.com/dailymotion/javascript)

From 062929ee5f5ca368b2b36390fc36aed34ed96797 Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Fri, 1 Apr 2016 14:25:31 -0700
Subject: [PATCH 0554/1591] [eslint config] [breaking] error on debugger
 statements

---
 packages/eslint-config-airbnb/rules/errors.js | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/packages/eslint-config-airbnb/rules/errors.js b/packages/eslint-config-airbnb/rules/errors.js
index 1c1addf5fa..62594e0c3e 100644
--- a/packages/eslint-config-airbnb/rules/errors.js
+++ b/packages/eslint-config-airbnb/rules/errors.js
@@ -9,7 +9,7 @@ module.exports = {
     // disallow control characters in regular expressions
     'no-control-regex': 2,
     // disallow use of debugger
-    'no-debugger': 1,
+    'no-debugger': 2,
     // disallow duplicate arguments in functions
     'no-dupe-args': 2,
     // disallow duplicate keys when creating object literals

From 5b9f081d1dac5240f60313784de316c9a63fde62 Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Sat, 2 Apr 2016 17:46:24 -0700
Subject: [PATCH 0555/1591] [eslint config] [deps] update `eslint`, `react`

---
 packages/eslint-config-airbnb/package.json | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/packages/eslint-config-airbnb/package.json b/packages/eslint-config-airbnb/package.json
index 0d059f0c8d..aefe9a76a6 100644
--- a/packages/eslint-config-airbnb/package.json
+++ b/packages/eslint-config-airbnb/package.json
@@ -43,14 +43,14 @@
   "homepage": "https://github.com/airbnb/javascript",
   "devDependencies": {
     "babel-tape-runner": "^1.3.1",
-    "eslint": "^2.5.3",
+    "eslint": "^2.6.0",
     "eslint-plugin-react": "^4.2.3",
-    "react": "^0.14.7",
+    "react": "^0.14.8",
     "tape": "^4.5.1",
     "parallelshell": "^2.0.0"
   },
   "peerDependencies": {
-    "eslint": "^2.4.0",
+    "eslint": "^2.6.0",
     "eslint-plugin-react": "^4.2.3"
   }
 }

From 76e1e4c1de263948f9c35bf43c4de526b17bebb9 Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Sat, 2 Apr 2016 18:08:27 -0700
Subject: [PATCH 0556/1591] [eslint config] [breaking] Add
 `no-dupe-class-members` rule + section.

Closes #785.
---
 README.md                                  | 30 +++++++++++++++++++---
 packages/eslint-config-airbnb/rules/es6.js |  3 +++
 2 files changed, 30 insertions(+), 3 deletions(-)

diff --git a/README.md b/README.md
index ff42af3d2c..03c422d931 100644
--- a/README.md
+++ b/README.md
@@ -21,7 +21,7 @@ Other Style Guides
   1. [Strings](#strings)
   1. [Functions](#functions)
   1. [Arrow Functions](#arrow-functions)
-  1. [Constructors](#constructors)
+  1. [Classes & Constructors](#constructors)
   1. [Modules](#modules)
   1. [Iterators and Generators](#iterators-and-generators)
   1. [Properties](#properties)
@@ -894,7 +894,7 @@ Other Style Guides
 **[⬆ back to top](#table-of-contents)**
 
 
-## Constructors
+## Classes & Constructors
 
   <a name="constructors--use-class"></a><a name="9.1"></a>
   - [9.1](#constructors--use-class) Always use `class`. Avoid manipulating `prototype` directly.
@@ -1008,7 +1008,7 @@ Other Style Guides
     ```
 
   <a name="constructors--no-useless"></a><a name="9.5"></a>
-  - [9.5](#constructors--no-useless) Classes have a default constructor if one is not specified. An empty constructor function or one that just delegates to a parent class is unnecessary. [`no-useless-constructor`](http://eslint.org/docs/rules/no-useless-constructor)
+  - [9.5](#constructors--no-useless) Classes have a default constructor if one is not specified. An empty constructor function or one that just delegates to a parent class is unnecessary. eslint: [`no-useless-constructor`](http://eslint.org/docs/rules/no-useless-constructor)
 
     ```javascript
     // bad
@@ -1036,6 +1036,30 @@ Other Style Guides
     }
     ```
 
+  <a name="classes--no-duplicate-members"></a>
+  - [9.6](#classes--no-duplicate-members) Avoid duplicate class members. eslint: [`no-dupe-class-members`](http://eslint.org/docs/rules/no-dupe-class-members)
+
+    > Why? Duplicate class member declarations will silently prefer the last one - having duplicates is almost certainly a bug.
+
+    ```javascript
+    // bad
+    class Foo {
+      bar() { return 1; }
+      bar() { return 2; }
+    }
+
+    // good
+    class Foo {
+      bar() { return 1; }
+    }
+
+    // good
+    class Foo {
+      bar() { return 2; }
+    }
+    ```
+
+
 **[⬆ back to top](#table-of-contents)**
 
 
diff --git a/packages/eslint-config-airbnb/rules/es6.js b/packages/eslint-config-airbnb/rules/es6.js
index 78a43b94cd..a826da8d0e 100644
--- a/packages/eslint-config-airbnb/rules/es6.js
+++ b/packages/eslint-config-airbnb/rules/es6.js
@@ -35,6 +35,9 @@ module.exports = {
     }],
     // disallow modifying variables that are declared using const
     'no-const-assign': 2,
+    // disallow duplicate class members
+    // http://eslint.org/docs/rules/no-dupe-class-members
+    'no-dupe-class-members': 2,
     // disallow importing from the same path more than once
     // http://eslint.org/docs/rules/no-duplicate-imports
     'no-duplicate-imports': 2,

From 6671a55556e09b9f70924e9fd63e76c9e079fa5e Mon Sep 17 00:00:00 2001
From: Nick <nick@honestbuildings.com>
Date: Sun, 3 Apr 2016 09:59:12 -0400
Subject: [PATCH 0557/1591] CHORE - Remove Trailing Spaces

---
 linters/SublimeLinter/SublimeLinter.sublime-settings | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/linters/SublimeLinter/SublimeLinter.sublime-settings b/linters/SublimeLinter/SublimeLinter.sublime-settings
index 12360f3f1c..259dbaff6a 100644
--- a/linters/SublimeLinter/SublimeLinter.sublime-settings
+++ b/linters/SublimeLinter/SublimeLinter.sublime-settings
@@ -63,7 +63,7 @@
 
       // Warn when variables are defined but never used.
       "unused": true,
-      
+
       // Enforce line length to 80 characters
       "maxlen": 80,
 

From f21412cba916e4af18cd1594a6b6d18ef4ebc341 Mon Sep 17 00:00:00 2001
From: Amin <mohamed.amin.088@gmail.com>
Date: Mon, 4 Apr 2016 11:39:47 +0400
Subject: [PATCH 0558/1591] Broken link to Classes and constructors

---
 README.md | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/README.md b/README.md
index 03c422d931..3034aa4c24 100644
--- a/README.md
+++ b/README.md
@@ -21,7 +21,7 @@ Other Style Guides
   1. [Strings](#strings)
   1. [Functions](#functions)
   1. [Arrow Functions](#arrow-functions)
-  1. [Classes & Constructors](#constructors)
+  1. [Classes & Constructors](#classes--constructors)
   1. [Modules](#modules)
   1. [Iterators and Generators](#iterators-and-generators)
   1. [Properties](#properties)

From a2bdbb83d15e8d35fa40a14b888ad1eee029c7df Mon Sep 17 00:00:00 2001
From: Peter Kuiper <peter@disturbingorbits.com>
Date: Mon, 4 Apr 2016 14:20:17 +0200
Subject: [PATCH 0559/1591] Add KickorStick to 'In the Wild'

---
 README.md | 1 +
 1 file changed, 1 insertion(+)

diff --git a/README.md b/README.md
index 3034aa4c24..5384d7dc9f 100644
--- a/README.md
+++ b/README.md
@@ -2727,6 +2727,7 @@ Other Style Guides
   - **Jam3**: [Jam3/Javascript-Code-Conventions](https://github.com/Jam3/Javascript-Code-Conventions)
   - **JeopardyBot**: [kesne/jeopardy-bot](https://github.com/kesne/jeopardy-bot/blob/master/STYLEGUIDE.md)
   - **JSSolutions**: [JSSolutions/javascript](https://github.com/JSSolutions/javascript)
+  - **KickorStick**: [kickorstick/javascript](https://github.com/kickorstick/javascript)
   - **Kinetica Solutions**: [kinetica/javascript](https://github.com/kinetica/Javascript-style-guide)
   - **Mighty Spring**: [mightyspring/javascript](https://github.com/mightyspring/javascript)
   - **MinnPost**: [MinnPost/javascript](https://github.com/MinnPost/javascript)

From 6e770062bb84aa054ff939c1b805cbb12e9195a1 Mon Sep 17 00:00:00 2001
From: Kevin Moot <kmoot@nerdery.com>
Date: Mon, 4 Apr 2016 19:07:35 -0500
Subject: [PATCH 0560/1591] Adding The Nerdery to the "In the Wild" section

---
 README.md | 1 +
 1 file changed, 1 insertion(+)

diff --git a/README.md b/README.md
index 5384d7dc9f..ec1dca2cc5 100644
--- a/README.md
+++ b/README.md
@@ -2753,6 +2753,7 @@ Other Style Guides
   - **SysGarage**: [sysgarage/javascript-style-guide](https://github.com/sysgarage/javascript-style-guide)
   - **Target**: [target/javascript](https://github.com/target/javascript)
   - **TheLadders**: [TheLadders/javascript](https://github.com/TheLadders/javascript)
+  - **The Nerdery**: [thenerdery/javascript-standards](https://github.com/thenerdery/javascript-standards)
   - **T4R Technology**: [T4R-Technology/javascript](https://github.com/T4R-Technology/javascript)
   - **VoxFeed**: [VoxFeed/javascript-style-guide](https://github.com/VoxFeed/javascript-style-guide)
   - **WeBox Studio**: [weboxstudio/javascript](https://github.com/weboxstudio/javascript)

From acbddc1083d5ea7608fba212bb6898ca6e224afc Mon Sep 17 00:00:00 2001
From: Joe Lencioni <joe.lencioni@airbnb.com>
Date: Wed, 6 Apr 2016 14:14:03 -0700
Subject: [PATCH 0561/1591] Add note and rule about image alt text

We want our React apps to be accessible. One thing that developers can
do is properly use alt text on images. Thankfully, there is an ESLint
rule that will enforce these things for us.
---
 packages/eslint-config-airbnb/package.json       |  2 ++
 packages/eslint-config-airbnb/rules/react.js     |  5 +++++
 .../test/test-react-order.js                     |  4 ++--
 react/README.md                                  | 16 ++++++++++++++++
 4 files changed, 25 insertions(+), 2 deletions(-)

diff --git a/packages/eslint-config-airbnb/package.json b/packages/eslint-config-airbnb/package.json
index aefe9a76a6..769c8950a3 100644
--- a/packages/eslint-config-airbnb/package.json
+++ b/packages/eslint-config-airbnb/package.json
@@ -44,6 +44,7 @@
   "devDependencies": {
     "babel-tape-runner": "^1.3.1",
     "eslint": "^2.6.0",
+    "eslint-plugin-jsx-a11y": "^0.6.0",
     "eslint-plugin-react": "^4.2.3",
     "react": "^0.14.8",
     "tape": "^4.5.1",
@@ -51,6 +52,7 @@
   },
   "peerDependencies": {
     "eslint": "^2.6.0",
+    "eslint-plugin-jsx-a11y": "^0.6.0",
     "eslint-plugin-react": "^4.2.3"
   }
 }
diff --git a/packages/eslint-config-airbnb/rules/react.js b/packages/eslint-config-airbnb/rules/react.js
index 470738b769..0b128aef63 100644
--- a/packages/eslint-config-airbnb/rules/react.js
+++ b/packages/eslint-config-airbnb/rules/react.js
@@ -1,5 +1,6 @@
 module.exports = {
   'plugins': [
+    'jsx-a11y',
     'react'
   ],
   'ecmaFeatures': {
@@ -8,6 +9,10 @@ module.exports = {
   // View link below for react rules documentation
   // https://github.com/yannickcr/eslint-plugin-react#list-of-supported-rules
   'rules': {
+    // Require <img> to have a non-empty `alt` prop, or role="presentation"
+    // https://github.com/evcohen/eslint-plugin-jsx-a11y/blob/master/docs/rules/img-uses-alt.md
+    'jsx-a11y/img-uses-alt': 2,
+
     // Prevent missing displayName in a React component definition
     // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/display-name.md
     'react/display-name': [0, { 'ignoreTranspilerName': false }],
diff --git a/packages/eslint-config-airbnb/test/test-react-order.js b/packages/eslint-config-airbnb/test/test-react-order.js
index f5b2d452fe..81d8235fce 100644
--- a/packages/eslint-config-airbnb/test/test-react-order.js
+++ b/packages/eslint-config-airbnb/test/test-react-order.js
@@ -28,9 +28,9 @@ ${body}
 }
 
 test('validate react prop order', t => {
-  t.test('make sure our eslintrc has React linting dependencies', t => {
+  t.test('make sure our eslintrc has React and JSX linting dependencies', t => {
     t.plan(1);
-    t.equal(reactRules.plugins[0], 'react', 'uses eslint-plugin-react');
+    t.deepEqual(reactRules.plugins, ['jsx-a11y', 'react']);
   });
 
   t.test('passes a good component', t => {
diff --git a/react/README.md b/react/README.md
index 6eddabcad2..29af5cf806 100644
--- a/react/README.md
+++ b/react/README.md
@@ -217,6 +217,22 @@
     />
     ```
 
+  - Always include a non-empty `alt` prop on `<img>` tags. If `alt` is an empty string, the `<img>` must have `role="presentation"`. eslint: [`jsx-a11y/img-uses-alt`](https://github.com/evcohen/eslint-plugin-jsx-a11y/blob/master/docs/rules/img-uses-alt.md)
+
+    ```javascript
+    // bad
+    <img src="hello.jpg" />
+
+    // bad
+    <img src="hello.jpg" alt="" />
+
+    // good
+    <img src="hello.jpg" alt="Me waving hello" />
+
+    // good
+    <img src="hello.jpg" alt="" role="presentation" />
+    ```
+
 ## Parentheses
 
   - Wrap JSX tags in parentheses when they span more than one line. eslint: [`react/wrap-multilines`](https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/wrap-multilines.md)

From f2aca29ed95dbec65590660e5e0032a00808cf4a Mon Sep 17 00:00:00 2001
From: Joe Lencioni <joe.lencioni@airbnb.com>
Date: Wed, 6 Apr 2016 14:21:48 -0700
Subject: [PATCH 0562/1591] Add note and rule about redundant alt text

Screenreaders already announce `img` elements as images, so there is no
need to include this information in the alt text. This will give people
using assistive technologies a smoother experience.
---
 packages/eslint-config-airbnb/rules/react.js |  4 ++++
 react/README.md                              | 12 ++++++++++++
 2 files changed, 16 insertions(+)

diff --git a/packages/eslint-config-airbnb/rules/react.js b/packages/eslint-config-airbnb/rules/react.js
index 0b128aef63..f505c75ba1 100644
--- a/packages/eslint-config-airbnb/rules/react.js
+++ b/packages/eslint-config-airbnb/rules/react.js
@@ -13,6 +13,10 @@ module.exports = {
     // https://github.com/evcohen/eslint-plugin-jsx-a11y/blob/master/docs/rules/img-uses-alt.md
     'jsx-a11y/img-uses-alt': 2,
 
+    // Prevent img alt text from containing redundant words like "image", "picture", or "photo"
+    // https://github.com/evcohen/eslint-plugin-jsx-a11y/blob/master/docs/rules/redundant-alt.md
+    'jsx-a11y/redundant-alt': 2,
+
     // Prevent missing displayName in a React component definition
     // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/display-name.md
     'react/display-name': [0, { 'ignoreTranspilerName': false }],
diff --git a/react/README.md b/react/README.md
index 29af5cf806..bc149b0908 100644
--- a/react/README.md
+++ b/react/README.md
@@ -233,6 +233,18 @@
     <img src="hello.jpg" alt="" role="presentation" />
     ```
 
+  - Do not use words like "image", "photo", or "picture" in `<img>` `alt` props. eslint: [`jsx-a11y/redundant-alt`](https://github.com/evcohen/eslint-plugin-jsx-a11y/blob/master/docs/rules/img-uses-alt.md)
+
+  > Why? Screenreaders already announce `img` elements as images, so there is no need to include this information in the alt text.
+
+    ```javascript
+    // bad
+    <img src="hello.jpg" alt="Picture of me waving hello" />
+
+    // good
+    <img src="hello.jpg" alt="Me waving hello" />
+    ```
+
 ## Parentheses
 
   - Wrap JSX tags in parentheses when they span more than one line. eslint: [`react/wrap-multilines`](https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/wrap-multilines.md)

From 0c3b13fe93e880450305e6c87a1a59f14e042bc5 Mon Sep 17 00:00:00 2001
From: Joe Lencioni <joe.lencioni@airbnb.com>
Date: Wed, 6 Apr 2016 14:27:21 -0700
Subject: [PATCH 0563/1591] Add note and rule about valid, non-abstract ARIA
 roles

This rule will help people use only valid roles, which might save people
from simple, accessibility-busting mistakes.
---
 packages/eslint-config-airbnb/rules/react.js |  4 ++++
 react/README.md                              | 13 +++++++++++++
 2 files changed, 17 insertions(+)

diff --git a/packages/eslint-config-airbnb/rules/react.js b/packages/eslint-config-airbnb/rules/react.js
index f505c75ba1..02794495b1 100644
--- a/packages/eslint-config-airbnb/rules/react.js
+++ b/packages/eslint-config-airbnb/rules/react.js
@@ -17,6 +17,10 @@ module.exports = {
     // https://github.com/evcohen/eslint-plugin-jsx-a11y/blob/master/docs/rules/redundant-alt.md
     'jsx-a11y/redundant-alt': 2,
 
+    // Require ARIA roles to be valid and non-abstract
+    // https://github.com/evcohen/eslint-plugin-jsx-a11y/blob/master/docs/rules/valid-aria-role.md
+    'jsx-a11y/valid-aria-role': 2,
+
     // Prevent missing displayName in a React component definition
     // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/display-name.md
     'react/display-name': [0, { 'ignoreTranspilerName': false }],
diff --git a/react/README.md b/react/README.md
index bc149b0908..0ac01a5b6f 100644
--- a/react/README.md
+++ b/react/README.md
@@ -245,6 +245,19 @@
     <img src="hello.jpg" alt="Me waving hello" />
     ```
 
+  - Use only valid, non-abstract [ARIA roles](https://www.w3.org/TR/wai-aria/roles#role_definitions). eslint: [`jsx-a11y/valid-aria-role`](https://github.com/evcohen/eslint-plugin-jsx-a11y/blob/master/docs/rules/valid-aria-role.md)
+
+    ```javascript
+    // bad - not an ARIA role
+    <div role="datepicker"></div>
+
+    // bad - abstract ARIA role
+    <div role="range"></div>
+
+    // good
+    <div role="button"></div>
+    ```
+
 ## Parentheses
 
   - Wrap JSX tags in parentheses when they span more than one line. eslint: [`react/wrap-multilines`](https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/wrap-multilines.md)

From f697a15e5036932805cb7a5160b6c0ceb2401afe Mon Sep 17 00:00:00 2001
From: Joe Lencioni <joe.lencioni@airbnb.com>
Date: Wed, 6 Apr 2016 14:32:55 -0700
Subject: [PATCH 0564/1591] Add note and rule about not using accessKey

Inconsistencies between keyboard shortcuts and keyboard commands used by
people using screenreaders and keyboards complicate accessibility.
---
 packages/eslint-config-airbnb/rules/react.js |  4 ++++
 react/README.md                              | 18 +++++++++++++++---
 2 files changed, 19 insertions(+), 3 deletions(-)

diff --git a/packages/eslint-config-airbnb/rules/react.js b/packages/eslint-config-airbnb/rules/react.js
index 02794495b1..3c05265b06 100644
--- a/packages/eslint-config-airbnb/rules/react.js
+++ b/packages/eslint-config-airbnb/rules/react.js
@@ -9,6 +9,10 @@ module.exports = {
   // View link below for react rules documentation
   // https://github.com/yannickcr/eslint-plugin-react#list-of-supported-rules
   'rules': {
+    // Prevent use of `accessKey`
+    // https://github.com/evcohen/eslint-plugin-jsx-a11y/blob/master/docs/rules/no-access-key.md
+    'jsx-a11y/no-access-key': 2,
+
     // Require <img> to have a non-empty `alt` prop, or role="presentation"
     // https://github.com/evcohen/eslint-plugin-jsx-a11y/blob/master/docs/rules/img-uses-alt.md
     'jsx-a11y/img-uses-alt': 2,
diff --git a/react/README.md b/react/README.md
index 0ac01a5b6f..4fc7c7c783 100644
--- a/react/README.md
+++ b/react/README.md
@@ -249,15 +249,27 @@
 
     ```javascript
     // bad - not an ARIA role
-    <div role="datepicker"></div>
+    <div role="datepicker" />
 
     // bad - abstract ARIA role
-    <div role="range"></div>
+    <div role="range" />
 
     // good
-    <div role="button"></div>
+    <div role="button" />
     ```
 
+  - Do not use `accessKey` on elements. eslint: [`jsx-a11y/no-access-key`](https://github.com/evcohen/eslint-plugin-jsx-a11y/blob/master/docs/rules/no-access-key.md)
+
+  > Why? Inconsistencies between keyboard shortcuts and keyboard commands used by people using screenreaders and keyboards complicate accessibility.
+
+  ```javascript
+  // bad
+  <div accessKey="h" />
+
+  // good
+  <div />
+  ```
+
 ## Parentheses
 
   - Wrap JSX tags in parentheses when they span more than one line. eslint: [`react/wrap-multilines`](https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/wrap-multilines.md)

From 3f73e35b1874128161a97acbc6a299a801ec077b Mon Sep 17 00:00:00 2001
From: Joe Lencioni <joe.lencioni@airbnb.com>
Date: Wed, 6 Apr 2016 14:34:21 -0700
Subject: [PATCH 0565/1591] Use jsx fenced codeblocks for JSX code

GitHub knows how to do JSX syntax highlighting. Since we are using JSX
in this document, I figured we might as well tell GitHub to highlight
the syntax as JSX here. This will lead to a better reading experience.
---
 react/README.md | 43 +++++++++++++++++++++----------------------
 1 file changed, 21 insertions(+), 22 deletions(-)

diff --git a/react/README.md b/react/README.md
index 4fc7c7c783..6db60dd18a 100644
--- a/react/README.md
+++ b/react/README.md
@@ -29,7 +29,7 @@
 
   - If you have internal state and/or refs, prefer `class extends React.Component` over `React.createClass` unless you have a very good reason to use mixins. eslint: [`react/prefer-es6-class`](https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/prefer-es6-class.md) [`react/prefer-stateless-function`](https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/prefer-stateless-function.md)
 
-    ```javascript
+    ```jsx
     // bad
     const Listing = React.createClass({
       // ...
@@ -49,8 +49,7 @@
 
     And if you don't have state or refs, prefer normal functions (not arrow functions) over classes:
 
-    ```javascript
-
+    ```jsx
     // bad
     class Listing extends React.Component {
       render() {
@@ -75,7 +74,7 @@
   - **Filename**: Use PascalCase for filenames. E.g., `ReservationCard.jsx`.
   - **Reference Naming**: Use PascalCase for React components and camelCase for their instances. eslint: [`react/jsx-pascal-case`](https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/jsx-pascal-case.md)
 
-    ```javascript
+    ```jsx
     // bad
     import reservationCard from './ReservationCard';
 
@@ -91,7 +90,7 @@
 
   - **Component Naming**: Use the filename as the component name. For example, `ReservationCard.jsx` should have a reference name of `ReservationCard`. However, for root components of a directory, use `index.jsx` as the filename and use the directory name as the component name:
 
-    ```javascript
+    ```jsx
     // bad
     import Footer from './Footer/Footer';
 
@@ -106,7 +105,7 @@
 
   - Do not use `displayName` for naming components. Instead, name the component by reference.
 
-    ```javascript
+    ```jsx
     // bad
     export default React.createClass({
       displayName: 'ReservationCard',
@@ -122,7 +121,7 @@
 
   - Follow these alignment styles for JSX syntax. eslint: [`react/jsx-closing-bracket-location`](https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/jsx-closing-bracket-location.md)
 
-    ```javascript
+    ```jsx
     // bad
     <Foo superLongParam="bar"
          anotherSuperLongParam="baz" />
@@ -152,7 +151,7 @@
   > Why? JSX attributes [can't contain escaped quotes](http://eslint.org/docs/rules/jsx-quotes), so double quotes make conjunctions like `"don't"` easier to type.
   > Regular HTML attributes also typically use double quotes instead of single, so JSX attributes mirror this convention.
 
-    ```javascript
+    ```jsx
     // bad
     <Foo bar='bar' />
 
@@ -170,7 +169,7 @@
 
   - Always include a single space in your self-closing tag.
 
-    ```javascript
+    ```jsx
     // bad
     <Foo/>
 
@@ -189,7 +188,7 @@
 
   - Always use camelCase for prop names.
 
-    ```javascript
+    ```jsx
     // bad
     <Foo
       UserName="hello"
@@ -205,7 +204,7 @@
 
   - Omit the value of the prop when it is explicitly `true`. eslint: [`react/jsx-boolean-value`](https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/jsx-boolean-value.md)
 
-    ```javascript
+    ```jsx
     // bad
     <Foo
       hidden={true}
@@ -219,7 +218,7 @@
 
   - Always include a non-empty `alt` prop on `<img>` tags. If `alt` is an empty string, the `<img>` must have `role="presentation"`. eslint: [`jsx-a11y/img-uses-alt`](https://github.com/evcohen/eslint-plugin-jsx-a11y/blob/master/docs/rules/img-uses-alt.md)
 
-    ```javascript
+    ```jsx
     // bad
     <img src="hello.jpg" />
 
@@ -237,7 +236,7 @@
 
   > Why? Screenreaders already announce `img` elements as images, so there is no need to include this information in the alt text.
 
-    ```javascript
+    ```jsx
     // bad
     <img src="hello.jpg" alt="Picture of me waving hello" />
 
@@ -247,7 +246,7 @@
 
   - Use only valid, non-abstract [ARIA roles](https://www.w3.org/TR/wai-aria/roles#role_definitions). eslint: [`jsx-a11y/valid-aria-role`](https://github.com/evcohen/eslint-plugin-jsx-a11y/blob/master/docs/rules/valid-aria-role.md)
 
-    ```javascript
+    ```jsx
     // bad - not an ARIA role
     <div role="datepicker" />
 
@@ -262,7 +261,7 @@
 
   > Why? Inconsistencies between keyboard shortcuts and keyboard commands used by people using screenreaders and keyboards complicate accessibility.
 
-  ```javascript
+  ```jsx
   // bad
   <div accessKey="h" />
 
@@ -274,7 +273,7 @@
 
   - Wrap JSX tags in parentheses when they span more than one line. eslint: [`react/wrap-multilines`](https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/wrap-multilines.md)
 
-    ```javascript
+    ```jsx
     // bad
     render() {
       return <MyComponent className="long body" foo="bar">
@@ -302,7 +301,7 @@
 
   - Always self-close tags that have no children. eslint: [`react/self-closing-comp`](https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/self-closing-comp.md)
 
-    ```javascript
+    ```jsx
     // bad
     <Foo className="stuff"></Foo>
 
@@ -312,7 +311,7 @@
 
   - If your component has multi-line properties, close its tag on a new line. eslint: [`react/jsx-closing-bracket-location`](https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/jsx-closing-bracket-location.md)
 
-    ```javascript
+    ```jsx
     // bad
     <Foo
       bar="bar"
@@ -329,7 +328,7 @@
 
   - Use arrow functions to close over local variables.
 
-    ```javascript
+    ```jsx
     function ItemList(props) {
       return (
         <ul>
@@ -348,7 +347,7 @@
 
   > Why? A bind call in the render path creates a brand new function on every single render.
 
-    ```javascript
+    ```jsx
     // bad
     class extends React.Component {
       onClickDiv() {
@@ -380,7 +379,7 @@
 
   - Do not use underscore prefix for internal methods of a React component.
 
-    ```javascript
+    ```jsx
     // bad
     React.createClass({
       _onClickSubmit() {
@@ -421,7 +420,7 @@
 
   - How to define `propTypes`, `defaultProps`, `contextTypes`, etc...
 
-    ```javascript
+    ```jsx
     import React, { PropTypes } from 'react';
 
     const propTypes = {

From 6fd8fb60b37959db87a1df5e8b34f2de530dd2f5 Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Wed, 6 Apr 2016 22:51:47 -0700
Subject: [PATCH 0566/1591] [eslint config] [dev deps] update `eslint`,
 `eslint-plugin-react`

---
 packages/eslint-config-airbnb/package.json | 8 ++++----
 1 file changed, 4 insertions(+), 4 deletions(-)

diff --git a/packages/eslint-config-airbnb/package.json b/packages/eslint-config-airbnb/package.json
index 769c8950a3..130521e1fd 100644
--- a/packages/eslint-config-airbnb/package.json
+++ b/packages/eslint-config-airbnb/package.json
@@ -43,16 +43,16 @@
   "homepage": "https://github.com/airbnb/javascript",
   "devDependencies": {
     "babel-tape-runner": "^1.3.1",
-    "eslint": "^2.6.0",
+    "eslint": "^2.7.0",
     "eslint-plugin-jsx-a11y": "^0.6.0",
-    "eslint-plugin-react": "^4.2.3",
+    "eslint-plugin-react": "^4.3.0",
     "react": "^0.14.8",
     "tape": "^4.5.1",
     "parallelshell": "^2.0.0"
   },
   "peerDependencies": {
-    "eslint": "^2.6.0",
+    "eslint": "^2.7.0",
     "eslint-plugin-jsx-a11y": "^0.6.0",
-    "eslint-plugin-react": "^4.2.3"
+    "eslint-plugin-react": "^4.3.0"
   }
 }

From 7b5731157f31d2dfd4aeb45180cfd6812c8b0f9c Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Wed, 6 Apr 2016 22:52:55 -0700
Subject: [PATCH 0567/1591] [eslint config] [semver-minor] enable
 `jsx-pascal-case` rule.

---
 packages/eslint-config-airbnb/rules/react.js | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/packages/eslint-config-airbnb/rules/react.js b/packages/eslint-config-airbnb/rules/react.js
index 3c05265b06..93348e4b23 100644
--- a/packages/eslint-config-airbnb/rules/react.js
+++ b/packages/eslint-config-airbnb/rules/react.js
@@ -73,7 +73,7 @@ module.exports = {
     'react/jsx-no-undef': 2,
     // Enforce PascalCase for user-defined JSX components
     // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/jsx-pascal-case.md
-    'react/jsx-pascal-case': 0,
+    'react/jsx-pascal-case': 2,
     // Enforce propTypes declarations alphabetical sorting
     // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/sort-prop-types.md
     'react/sort-prop-types': [0, {

From 7c0bb0a6de0660d21166a4762330b27746e9244a Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Wed, 6 Apr 2016 22:57:44 -0700
Subject: [PATCH 0568/1591] [eslint config] [breaking] enable
 `react/require-render-return`

---
 packages/eslint-config-airbnb/rules/react.js |  3 +++
 react/README.md                              | 14 ++++++++++++++
 2 files changed, 17 insertions(+)

diff --git a/packages/eslint-config-airbnb/rules/react.js b/packages/eslint-config-airbnb/rules/react.js
index 93348e4b23..a452feba48 100644
--- a/packages/eslint-config-airbnb/rules/react.js
+++ b/packages/eslint-config-airbnb/rules/react.js
@@ -137,6 +137,9 @@ module.exports = {
     // Restrict file extensions that may be required
     // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/require-extension.md
     'react/require-extension': [0, { 'extensions': ['.jsx'] }],
+    // Require render() methods to return something
+    // https://github.com/yannickcr/eslint-plugin-react/pull/502
+    'react/require-render-return': 2,
     // Prevent extra closing tags for components without children
     // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/self-closing-comp.md
     'react/self-closing-comp': 2,
diff --git a/react/README.md b/react/README.md
index 6db60dd18a..7725b94cf9 100644
--- a/react/README.md
+++ b/react/README.md
@@ -399,6 +399,20 @@
     }
     ```
 
+  - Be sure to return a value in your `render` methods. eslint: [`require-render-return`](https://github.com/yannickcr/eslint-plugin-react/pull/502)
+
+    ```jsx
+    // bad
+    render() {
+      (<div />);
+    }
+
+    // good
+    render() {
+      return (<div />);
+    }
+    ```
+
 ## Ordering
 
   - Ordering for `class extends React.Component`:

From f5d6e9646c3b6b450380d3bc952eac662768debc Mon Sep 17 00:00:00 2001
From: Brett Sanders <brettsanders@Bretts-MacBook-Pro.local>
Date: Thu, 7 Apr 2016 14:02:11 -0700
Subject: [PATCH 0569/1591] [guide] Update eslint rule for keyword-spacing,
 small fix for consistency

---
 README.md | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/README.md b/README.md
index ec1dca2cc5..c7254769b3 100644
--- a/README.md
+++ b/README.md
@@ -632,7 +632,7 @@ Other Style Guides
     ```
 
   <a name="es6-rest"></a><a name="7.6"></a>
-  - [7.6](#es6-rest) Never use `arguments`, opt to use rest syntax `...` instead. [`prefer-rest-params`](http://eslint.org/docs/rules/prefer-rest-params)
+  - [7.6](#es6-rest) Never use `arguments`, opt to use rest syntax `...` instead. eslint: [`prefer-rest-params`](http://eslint.org/docs/rules/prefer-rest-params)
 
     > Why? `...` is explicit about which arguments you want pulled. Plus, rest arguments are a real Array, and not merely Array-like like `arguments`.
 
@@ -1764,7 +1764,7 @@ Other Style Guides
     ```
 
   <a name="whitespace--around-keywords"></a><a name="18.3"></a>
-  - [18.3](#whitespace--around-keywords) Place 1 space before the opening parenthesis in control statements (`if`, `while` etc.). Place no space between the argument list and the function name in function calls and declarations. eslint: [`space-after-keywords`](http://eslint.org/docs/rules/space-after-keywords.html), [`space-before-keywords`](http://eslint.org/docs/rules/space-before-keywords.html) jscs:  [`requireSpaceAfterKeywords`](http://jscs.info/rule/requireSpaceAfterKeywords)
+  - [18.3](#whitespace--around-keywords) Place 1 space before the opening parenthesis in control statements (`if`, `while` etc.). Place no space between the argument list and the function name in function calls and declarations. eslint: [`keyword-spacing`](http://eslint.org/docs/rules/keyword-spacing.html) jscs: [`requireSpaceAfterKeywords`](http://jscs.info/rule/requireSpaceAfterKeywords)
 
     ```javascript
     // bad

From a929776d67ea3471993356e5819c4099963175d7 Mon Sep 17 00:00:00 2001
From: Joe Lencioni <joe.lencioni@airbnb.com>
Date: Fri, 8 Apr 2016 12:45:55 -0700
Subject: [PATCH 0570/1591] Improve guideline for image alt text

After digging into this rule a little more with @evcohen, we believe that
it is okay for images to have an empty string for alt text and have
updated the plugin to reflect that understanding. This commit bumps our
dependency on the rule to include this fix and updates our guideline to
match.
---
 packages/eslint-config-airbnb/package.json |  2 +-
 react/README.md                            | 10 +++++-----
 2 files changed, 6 insertions(+), 6 deletions(-)

diff --git a/packages/eslint-config-airbnb/package.json b/packages/eslint-config-airbnb/package.json
index 130521e1fd..13ccb08ded 100644
--- a/packages/eslint-config-airbnb/package.json
+++ b/packages/eslint-config-airbnb/package.json
@@ -44,7 +44,7 @@
   "devDependencies": {
     "babel-tape-runner": "^1.3.1",
     "eslint": "^2.7.0",
-    "eslint-plugin-jsx-a11y": "^0.6.0",
+    "eslint-plugin-jsx-a11y": "^0.6.2",
     "eslint-plugin-react": "^4.3.0",
     "react": "^0.14.8",
     "tape": "^4.5.1",
diff --git a/react/README.md b/react/README.md
index 7725b94cf9..bdbd27eb11 100644
--- a/react/README.md
+++ b/react/README.md
@@ -216,20 +216,20 @@
     />
     ```
 
-  - Always include a non-empty `alt` prop on `<img>` tags. If `alt` is an empty string, the `<img>` must have `role="presentation"`. eslint: [`jsx-a11y/img-uses-alt`](https://github.com/evcohen/eslint-plugin-jsx-a11y/blob/master/docs/rules/img-uses-alt.md)
+  - Always include an `alt` prop on `<img>` tags. If the image is presentational, `alt` can be an empty string or the `<img>` must have `role="presentation"`. eslint: [`jsx-a11y/img-uses-alt`](https://github.com/evcohen/eslint-plugin-jsx-a11y/blob/master/docs/rules/img-uses-alt.md)
 
     ```jsx
     // bad
     <img src="hello.jpg" />
 
-    // bad
-    <img src="hello.jpg" alt="" />
-
     // good
     <img src="hello.jpg" alt="Me waving hello" />
 
     // good
-    <img src="hello.jpg" alt="" role="presentation" />
+    <img src="hello.jpg" alt="" />
+
+    // good
+    <img src="hello.jpg" role="presentation" />
     ```
 
   - Do not use words like "image", "photo", or "picture" in `<img>` `alt` props. eslint: [`jsx-a11y/redundant-alt`](https://github.com/evcohen/eslint-plugin-jsx-a11y/blob/master/docs/rules/img-uses-alt.md)

From 66ec951087f3086e859adb47d724fc0792741ccf Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Mon, 11 Apr 2016 15:22:26 -0700
Subject: [PATCH 0571/1591] [eslint config] [peer deps] update
 `eslint-plugin-jsx-a11y`

---
 packages/eslint-config-airbnb/package.json | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/packages/eslint-config-airbnb/package.json b/packages/eslint-config-airbnb/package.json
index 13ccb08ded..37928a70c3 100644
--- a/packages/eslint-config-airbnb/package.json
+++ b/packages/eslint-config-airbnb/package.json
@@ -52,7 +52,7 @@
   },
   "peerDependencies": {
     "eslint": "^2.7.0",
-    "eslint-plugin-jsx-a11y": "^0.6.0",
+    "eslint-plugin-jsx-a11y": "^0.6.2",
     "eslint-plugin-react": "^4.3.0"
   }
 }

From 93b0a10eb725b54a6601d32e6267410508fc3a8a Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Mon, 11 Apr 2016 15:24:22 -0700
Subject: [PATCH 0572/1591] [eslint config] v7.0.0

---
 packages/eslint-config-airbnb/CHANGELOG.md | 12 ++++++++++++
 packages/eslint-config-airbnb/package.json |  4 ++--
 2 files changed, 14 insertions(+), 2 deletions(-)

diff --git a/packages/eslint-config-airbnb/CHANGELOG.md b/packages/eslint-config-airbnb/CHANGELOG.md
index 3968eea84b..64cbce3b39 100644
--- a/packages/eslint-config-airbnb/CHANGELOG.md
+++ b/packages/eslint-config-airbnb/CHANGELOG.md
@@ -1,3 +1,15 @@
+7.0.0 / 2016-04-11
+==================
+- [react] [breaking] Add accessibility rules to the React style guide + `eslint-plugin-a11y`
+- [breaking] enable `react/require-render-return`
+- [breaking] Add `no-dupe-class-members` rule + section ([#785](https://github.com/airbnb/javascript/issues/785))
+- [breaking] error on debugger statements
+- [breaking] add `no-useless-escape` rule
+- [breaking] add `no-duplicate-imports` rule
+- [semver-minor] enable `jsx-pascal-case` rule
+- [deps] update `eslint`, `react`
+- [dev deps] update `eslint`, `eslint-plugin-react`
+
 6.2.0 / 2016-03-22
 ==================
 - [new] Allow arrow functions in JSX props
diff --git a/packages/eslint-config-airbnb/package.json b/packages/eslint-config-airbnb/package.json
index 37928a70c3..88d8d42599 100644
--- a/packages/eslint-config-airbnb/package.json
+++ b/packages/eslint-config-airbnb/package.json
@@ -1,12 +1,12 @@
 {
   "name": "eslint-config-airbnb",
-  "version": "6.2.0",
+  "version": "7.0.0",
   "description": "Airbnb's ESLint config, following our styleguide",
   "main": "index.js",
   "scripts": {
     "lint": "eslint .",
     "tests-only": "babel-tape-runner ./test/test-*.js",
-    "test": "parallelshell 'npm run lint' 'npm run tests-only'"
+    "test": "parallelshell 'npm run --silent lint' 'npm run --silent tests-only'"
   },
   "repository": {
     "type": "git",

From bcc5c5d8dd55a69f49421fc910c35211b241c824 Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Mon, 11 Apr 2016 15:30:48 -0700
Subject: [PATCH 0573/1591] [Tests] run subpackage tests at top level.

---
 .travis.yml | 18 ++++++++++++++++++
 1 file changed, 18 insertions(+)
 create mode 100644 .travis.yml

diff --git a/.travis.yml b/.travis.yml
new file mode 100644
index 0000000000..b88954b68f
--- /dev/null
+++ b/.travis.yml
@@ -0,0 +1,18 @@
+language: node_js
+node_js:
+  - "5"
+  - "4"
+  - "iojs"
+env:
+  - 'TEST_DIR=packages/eslint-config-airbnb'
+before_install:
+  - 'cd $TEST_DIR'
+  - 'if [ "${TRAVIS_NODE_VERSION}" != "0.9" ]; then case "$(npm --version)" in 1.*) npm install -g npm@1.4.28 ;; 2.*) npm install -g npm@2 ;; esac ; fi'
+  - 'if [ "${TRAVIS_NODE_VERSION}" != "0.6" ] && [ "${TRAVIS_NODE_VERSION}" != "0.9" ]; then npm install -g npm; fi'
+script:
+  - 'npm test'
+sudo: false
+matrix:
+  fast_finish: true
+  allow_failures:
+    - node_js: "iojs"

From 9060fba34a5ae67010b0605a136ba7f148106c08 Mon Sep 17 00:00:00 2001
From: "C. T. Lin" <chentsulin@gmail.com>
Date: Tue, 12 Apr 2016 12:46:49 +0800
Subject: [PATCH 0574/1591] Added eslint-plugin-jsx-a11y to install script

---
 packages/eslint-config-airbnb/README.md | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/packages/eslint-config-airbnb/README.md b/packages/eslint-config-airbnb/README.md
index 26c795f3f8..4cf7f50be8 100644
--- a/packages/eslint-config-airbnb/README.md
+++ b/packages/eslint-config-airbnb/README.md
@@ -11,9 +11,9 @@ We export three ESLint configurations for your usage.
 ### eslint-config-airbnb
 
 Our default export contains all of our ESLint rules, including EcmaScript 6+
-and React. It requires `eslint` and `eslint-plugin-react`.
+and React. It requires `eslint`, `eslint-plugin-react`, and `eslint-plugin-jsx-a11y`.
 
-1. `npm install --save-dev eslint-config-airbnb eslint-plugin-react eslint`
+1. `npm install --save-dev eslint-config-airbnb eslint-plugin-react eslint-plugin-jsx-a11y eslint`
 2. add `"extends": "airbnb"` to your .eslintrc
 
 ### eslint-config-airbnb/base

From 956f91527b094909dade4c3d245fc01184c39414 Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Tue, 12 Apr 2016 15:25:53 -0700
Subject: [PATCH 0575/1591] [eslint config] [semver-minor] enforce
 `no-underscore-dangle`

---
 packages/eslint-config-airbnb/rules/style.js | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/packages/eslint-config-airbnb/rules/style.js b/packages/eslint-config-airbnb/rules/style.js
index d811f8851f..7de677a04e 100644
--- a/packages/eslint-config-airbnb/rules/style.js
+++ b/packages/eslint-config-airbnb/rules/style.js
@@ -88,7 +88,7 @@ module.exports = {
     // disallow trailing whitespace at the end of lines
     'no-trailing-spaces': 2,
     // disallow dangling underscores in identifiers
-    'no-underscore-dangle': 0,
+    'no-underscore-dangle': [2, { 'allowAfterThis': false }],
     // disallow the use of Boolean literals in conditional expressions
     // also, prefer `a || b` over `a ? a : b`
     // http://eslint.org/docs/rules/no-unneeded-ternary

From 662519efc090802f6ee7100db942604d1e568a5d Mon Sep 17 00:00:00 2001
From: Joe Lencioni <joe.lencioni@airbnb.com>
Date: Wed, 13 Apr 2016 14:22:17 -0700
Subject: [PATCH 0576/1591] Link to eslint.org instead of github where possible

In most cases we link to documentation on the eslint.org site instead of
on GitHub. I found a couple of stragglers and decided to make things a
little more consistent.
---
 packages/eslint-config-airbnb/rules/es6.js   | 4 ++--
 packages/eslint-config-airbnb/rules/style.js | 6 +++---
 2 files changed, 5 insertions(+), 5 deletions(-)

diff --git a/packages/eslint-config-airbnb/rules/es6.js b/packages/eslint-config-airbnb/rules/es6.js
index a826da8d0e..3045f4cd55 100644
--- a/packages/eslint-config-airbnb/rules/es6.js
+++ b/packages/eslint-config-airbnb/rules/es6.js
@@ -18,7 +18,7 @@ module.exports = {
     // require parens in arrow function arguments
     'arrow-parens': 0,
     // require space before/after arrow function's arrow
-    // https://github.com/eslint/eslint/blob/master/docs/rules/arrow-spacing.md
+    // http://eslint.org/docs/rules/arrow-spacing
     'arrow-spacing': [2, { 'before': true, 'after': true }],
     // require trailing commas in multiline object literals
     'comma-dangle': [2, 'always-multiline'],
@@ -57,7 +57,7 @@ module.exports = {
     // http://eslint.org/docs/rules/no-useless-constructor
     'no-useless-constructor': 2,
     // require method and property shorthand syntax for object literals
-    // https://github.com/eslint/eslint/blob/master/docs/rules/object-shorthand.md
+    // http://eslint.org/docs/rules/object-shorthand
     'object-shorthand': [2, 'always'],
     // suggest using arrow functions as callbacks
     'prefer-arrow-callback': 2,
diff --git a/packages/eslint-config-airbnb/rules/style.js b/packages/eslint-config-airbnb/rules/style.js
index 7de677a04e..9623d6ac14 100644
--- a/packages/eslint-config-airbnb/rules/style.js
+++ b/packages/eslint-config-airbnb/rules/style.js
@@ -24,7 +24,7 @@ module.exports = {
     // (variable names, property names etc.)
     'id-length': 0,
     // this option sets a specific tab width for your code
-    // https://github.com/eslint/eslint/blob/master/docs/rules/indent.md
+    // http://eslint.org/docs/rules/indent
     'indent': [2, 2, { 'SwitchCase': 1, 'VariableDeclarator': 1 }],
     // specify whether double or single quotes should be used in JSX attributes
     // http://eslint.org/docs/rules/jsx-quotes
@@ -46,7 +46,7 @@ module.exports = {
     // disallow mixed 'LF' and 'CRLF' as linebreaks
     'linebreak-style': 0,
     // specify the maximum length of a line in your program
-    // https://github.com/eslint/eslint/blob/master/docs/rules/max-len.md
+    // http://eslint.org/docs/rules/max-len
     'max-len': [2, 100, 2, {
       'ignoreUrls': true,
       'ignoreComments': false
@@ -125,7 +125,7 @@ module.exports = {
     // require or disallow space before blocks
     'space-before-blocks': 2,
     // require or disallow space before function opening parenthesis
-    // https://github.com/eslint/eslint/blob/master/docs/rules/space-before-function-paren.md
+    // http://eslint.org/docs/rules/space-before-function-paren
     'space-before-function-paren': [2, { 'anonymous': 'always', 'named': 'never' }],
     // require or disallow spaces inside parentheses
     'space-in-parens': [2, 'never'],

From 0fe4f558a683c4f98501fc39e66ef8a499cfdfce Mon Sep 17 00:00:00 2001
From: Joe Lencioni <joe.lencioni@airbnb.com>
Date: Wed, 13 Apr 2016 15:10:21 -0700
Subject: [PATCH 0577/1591] Enable import/no-unresolved and import/export rules

These come from eslint-plugin-import. We've been using these rules for a
while at Airbnb so it seems like a good time to include them in this
configuration. We've found the no-unresolved rule in particular to be
very helpful when working across a large codebase.

  https://github.com/benmosher/eslint-plugin-import

Since the no-unresolved rule works on commonjs, I decided to include it
in the node configuration as well.

I think there are some more rules from this plugin that are worth
enabling, but this seems like a great place to start.
---
 packages/eslint-config-airbnb/README.md        |  9 +++++----
 packages/eslint-config-airbnb/package.json     |  2 ++
 packages/eslint-config-airbnb/rules/es6.js     | 18 +++++++++++++++++-
 packages/eslint-config-airbnb/rules/node.js    | 15 ++++++++++++++-
 packages/eslint-config-airbnb/rules/react.js   |  7 +++++++
 .../eslint-config-airbnb/test/test-base.js     |  5 ++++-
 6 files changed, 49 insertions(+), 7 deletions(-)

diff --git a/packages/eslint-config-airbnb/README.md b/packages/eslint-config-airbnb/README.md
index 4cf7f50be8..9d4cfd8539 100644
--- a/packages/eslint-config-airbnb/README.md
+++ b/packages/eslint-config-airbnb/README.md
@@ -11,23 +11,24 @@ We export three ESLint configurations for your usage.
 ### eslint-config-airbnb
 
 Our default export contains all of our ESLint rules, including EcmaScript 6+
-and React. It requires `eslint`, `eslint-plugin-react`, and `eslint-plugin-jsx-a11y`.
+and React. It requires `eslint`, `eslint-plugin-import`, `eslint-plugin-react`,
+and `eslint-plugin-jsx-a11y`.
 
-1. `npm install --save-dev eslint-config-airbnb eslint-plugin-react eslint-plugin-jsx-a11y eslint`
+1. `npm install --save-dev eslint-config-airbnb eslint-plugin-import eslint-plugin-react eslint-plugin-jsx-a11y eslint`
 2. add `"extends": "airbnb"` to your .eslintrc
 
 ### eslint-config-airbnb/base
 
 Lints ES6+ but does not lint React. Requires `eslint`.
 
-1. `npm install --save-dev eslint-config-airbnb eslint`
+1. `npm install --save-dev eslint-config-airbnb eslint-plugin-import eslint`
 2. add `"extends": "airbnb/base"` to your .eslintrc
 
 ### eslint-config-airbnb/legacy
 
 Lints ES5 and below. Only requires `eslint`.
 
-1. `npm install --save-dev eslint-config-airbnb eslint`
+1. `npm install --save-dev eslint-config-airbnb eslint-plugin-import eslint`
 2. add `"extends": "airbnb/legacy"` to your .eslintrc
 
 See [Airbnb's Javascript styleguide](https://github.com/airbnb/javascript) and
diff --git a/packages/eslint-config-airbnb/package.json b/packages/eslint-config-airbnb/package.json
index 88d8d42599..6c8a89d24f 100644
--- a/packages/eslint-config-airbnb/package.json
+++ b/packages/eslint-config-airbnb/package.json
@@ -45,6 +45,7 @@
     "babel-tape-runner": "^1.3.1",
     "eslint": "^2.7.0",
     "eslint-plugin-jsx-a11y": "^0.6.2",
+    "eslint-plugin-import": "^1.4.0",
     "eslint-plugin-react": "^4.3.0",
     "react": "^0.14.8",
     "tape": "^4.5.1",
@@ -53,6 +54,7 @@
   "peerDependencies": {
     "eslint": "^2.7.0",
     "eslint-plugin-jsx-a11y": "^0.6.2",
+    "eslint-plugin-import": "^1.4.0",
     "eslint-plugin-react": "^4.3.0"
   }
 }
diff --git a/packages/eslint-config-airbnb/rules/es6.js b/packages/eslint-config-airbnb/rules/es6.js
index 3045f4cd55..7ac09522dc 100644
--- a/packages/eslint-config-airbnb/rules/es6.js
+++ b/packages/eslint-config-airbnb/rules/es6.js
@@ -11,6 +11,9 @@ module.exports = {
       'objectLiteralDuplicateProperties': false
     }
   },
+  'plugins': [
+    'import'
+  ],
   'rules': {
     // enforces no braces where they can be omitted
     // http://eslint.org/docs/rules/arrow-body-style
@@ -83,6 +86,19 @@ module.exports = {
     'template-curly-spacing': 2,
     // enforce spacing around the * in yield* expressions
     // http://eslint.org/docs/rules/yield-star-spacing
-    'yield-star-spacing': [2, 'after']
+    'yield-star-spacing': [2, 'after'],
+    // disallow invalid exports, e.g. multiple defaults
+    // https://github.com/benmosher/eslint-plugin-import/blob/master/docs/rules/export.md
+    'import/export': 2,
+    // ensure imports point to files/modules that can be resolved
+    // https://github.com/benmosher/eslint-plugin-import/blob/master/docs/rules/no-unresolved.md
+    'import/no-unresolved': [2, { 'commonjs': true }]
+  },
+  'settings': {
+    'import/resolver': {
+      'node': {
+        'extensions': ['.js', '.json']
+      }
+    }
   }
 };
diff --git a/packages/eslint-config-airbnb/rules/node.js b/packages/eslint-config-airbnb/rules/node.js
index 16b6f20d45..2114c37758 100644
--- a/packages/eslint-config-airbnb/rules/node.js
+++ b/packages/eslint-config-airbnb/rules/node.js
@@ -2,6 +2,9 @@ module.exports = {
   'env': {
     'node': true
   },
+  'plugins': [
+    'import'
+  ],
   'rules': {
     // enforce return after a callback
     'callback-return': 0,
@@ -18,6 +21,16 @@ module.exports = {
     // restrict usage of specified node modules
     'no-restricted-modules': 0,
     // disallow use of synchronous methods (off by default)
-    'no-sync': 0
+    'no-sync': 0,
+    // ensure imports point to files/modules that can be resolved
+    // https://github.com/benmosher/eslint-plugin-import/blob/master/docs/rules/no-unresolved.md
+    'import/no-unresolved': [2, { 'commonjs': true }]
+  },
+  'settings': {
+    'import/resolver': {
+      'node': {
+        'extensions': ['.js', '.json']
+      }
+    }
   }
 };
diff --git a/packages/eslint-config-airbnb/rules/react.js b/packages/eslint-config-airbnb/rules/react.js
index a452feba48..c05d575e04 100644
--- a/packages/eslint-config-airbnb/rules/react.js
+++ b/packages/eslint-config-airbnb/rules/react.js
@@ -166,5 +166,12 @@ module.exports = {
       assignment: true,
       return: true
     }],
+  },
+  'settings': {
+    'import/resolver': {
+      'node': {
+        'extensions': ['.js', '.jsx', '.json']
+      }
+    }
   }
 };
diff --git a/packages/eslint-config-airbnb/test/test-base.js b/packages/eslint-config-airbnb/test/test-base.js
index 24aa884cd0..c29e89dd7c 100644
--- a/packages/eslint-config-airbnb/test/test-base.js
+++ b/packages/eslint-config-airbnb/test/test-base.js
@@ -20,7 +20,10 @@ Object.keys(files).forEach(name => {
   test(`${name}: does not reference react`, t => {
     t.plan(2);
 
-    t.notOk(config.plugins, 'plugins is unspecified');
+    // scan plugins for react and fail if it is found
+    const hasReactPlugin = Object.prototype.hasOwnProperty.call(config, 'plugins') &&
+      config.plugins.indexOf('react') !== -1;
+    t.notOk(hasReactPlugin, 'there is no react plugin');
 
     // scan rules for react/ and fail if any exist
     const reactRuleIds = Object.keys(config.rules)

From 92a66ccc7caeaf935653b5e9fed6d02f90ce6805 Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Tue, 12 Apr 2016 15:27:09 -0700
Subject: [PATCH 0578/1591] =?UTF-8?q?[guide]=20[breaking]=20Disallow=20lea?=
 =?UTF-8?q?ding=20underscores=20-=20there=E2=80=99s=20no=20such=20thing=20?=
 =?UTF-8?q?as=20=E2=80=9Cprivate=20properties=E2=80=9D.?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

Per https://github.com/airbnb/javascript/issues/490#issuecomment-209126331
---
 README.md | 7 +++++--
 1 file changed, 5 insertions(+), 2 deletions(-)

diff --git a/README.md b/README.md
index c7254769b3..39ce51f1ed 100644
--- a/README.md
+++ b/README.md
@@ -2294,15 +2294,18 @@ Other Style Guides
     ```
 
   <a name="naming--leading-underscore"></a><a name="22.4"></a>
-  - [22.4](#naming--leading-underscore) Use a leading underscore `_` when naming private properties. eslint: [`no-underscore-dangle`](http://eslint.org/docs/rules/no-underscore-dangle.html) jscs: [`disallowDanglingUnderscores`](http://jscs.info/rule/disallowDanglingUnderscores)
+  - [22.4](#naming--leading-underscore) Do not use trailing or leading underscores. eslint: [`no-underscore-dangle`](http://eslint.org/docs/rules/no-underscore-dangle.html) jscs: [`disallowDanglingUnderscores`](http://jscs.info/rule/disallowDanglingUnderscores)
+
+    > Why? JavaScript does not have the concept of privacy in terms of properties or methods. Although a leading underscore is a common convention to mean “private”, in fact, these properties are fully public, and as such, are part of your public API contract. This convention might lead developers to wrongly think that a change won't count as breaking, or that tests aren't needed. tl;dr: if you want something to be “private”, it must not be observably present.
 
     ```javascript
     // bad
     this.__firstName__ = 'Panda';
     this.firstName_ = 'Panda';
+    this._firstName = 'Panda';
 
     // good
-    this._firstName = 'Panda';
+    this.firstName = 'Panda';
     ```
 
   <a name="naming--self-this"></a><a name="22.5"></a>

From 531950cc2674d1f40e2ef9e761a95cf09ca40e39 Mon Sep 17 00:00:00 2001
From: Joe Lencioni <joe.lencioni@airbnb.com>
Date: Thu, 14 Apr 2016 09:05:24 -0700
Subject: [PATCH 0579/1591] Add plugin requirements to config package readme

I missed these when I added some eslint-plugin-import rules.
---
 packages/eslint-config-airbnb/README.md | 5 +++--
 1 file changed, 3 insertions(+), 2 deletions(-)

diff --git a/packages/eslint-config-airbnb/README.md b/packages/eslint-config-airbnb/README.md
index 9d4cfd8539..9ba166ae25 100644
--- a/packages/eslint-config-airbnb/README.md
+++ b/packages/eslint-config-airbnb/README.md
@@ -19,14 +19,15 @@ and `eslint-plugin-jsx-a11y`.
 
 ### eslint-config-airbnb/base
 
-Lints ES6+ but does not lint React. Requires `eslint`.
+Lints ES6+ but does not lint React. Requires `eslint` and
+`eslint-plugin-import`.
 
 1. `npm install --save-dev eslint-config-airbnb eslint-plugin-import eslint`
 2. add `"extends": "airbnb/base"` to your .eslintrc
 
 ### eslint-config-airbnb/legacy
 
-Lints ES5 and below. Only requires `eslint`.
+Lints ES5 and below. Requires `eslint` and `eslint-plugin-import`.
 
 1. `npm install --save-dev eslint-config-airbnb eslint-plugin-import eslint`
 2. add `"extends": "airbnb/legacy"` to your .eslintrc

From eb4f7cb3a822c168058159675d920fdc95c5d61e Mon Sep 17 00:00:00 2001
From: Joe Lencioni <joe.lencioni@airbnb.com>
Date: Thu, 14 Apr 2016 09:06:33 -0700
Subject: [PATCH 0580/1591] Properly capitalize ECMAScript

---
 packages/eslint-config-airbnb/README.md | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/packages/eslint-config-airbnb/README.md b/packages/eslint-config-airbnb/README.md
index 9ba166ae25..f251f47b27 100644
--- a/packages/eslint-config-airbnb/README.md
+++ b/packages/eslint-config-airbnb/README.md
@@ -10,7 +10,7 @@ We export three ESLint configurations for your usage.
 
 ### eslint-config-airbnb
 
-Our default export contains all of our ESLint rules, including EcmaScript 6+
+Our default export contains all of our ESLint rules, including ECMAScript 6+
 and React. It requires `eslint`, `eslint-plugin-import`, `eslint-plugin-react`,
 and `eslint-plugin-jsx-a11y`.
 

From 56e6815a84f3a6d5447fe4bb6fdf5d0b1027c631 Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Wed, 13 Apr 2016 22:37:46 -0700
Subject: [PATCH 0581/1591] [guide] Attempt to clarify filename conventions

Fixes #817.
---
 README.md | 27 +++++++++++++++++++++------
 1 file changed, 21 insertions(+), 6 deletions(-)

diff --git a/README.md b/README.md
index 39ce51f1ed..c07a087e2f 100644
--- a/README.md
+++ b/README.md
@@ -2337,24 +2337,39 @@ Other Style Guides
     ```
 
   <a name="naming--filename-matches-export"></a><a name="22.6"></a>
-  - [22.6](#naming--filename-matches-export) If your file exports a single class, your filename should be exactly the name of the class.
+  - [22.6](#naming--filename-matches-export) A base filename should exactly match the name of its default export.
 
     ```javascript
-    // file contents
+    // file 1 contents
     class CheckBox {
       // ...
     }
     export default CheckBox;
 
+    // file 2 contents
+    export default function fortyTwo() { return 42; }
+
+    // file 3 contents
+    export default function insideDirectory() {}
+
     // in some other file
     // bad
-    import CheckBox from './checkBox';
+    import CheckBox from './checkBox'; // PascalCase import/export, camelCase filename
+    import FortyTwo from './FortyTwo'; // PascalCase import/filename, camelCase export
+    import InsideDirectory from './InsideDirectory'; // PascalCase import/filename, camelCase export
 
     // bad
-    import CheckBox from './check_box';
+    import CheckBox from './check_box'; // PascalCase import/export, snake_case filename
+    import forty_two from './forty_two'; // snake_case import/filename, camelCase export
+    import inside_directory from './inside_directory'; // snake_case import, camelCase export
+    import index from './inside_directory/index'; // requiring the index file explicitly
+    import insideDirectory from './insideDirectory/index'; // requiring the index file explicitly
 
     // good
-    import CheckBox from './CheckBox';
+    import CheckBox from './CheckBox'; // PascalCase export/import/filename
+    import fortyTwo from './fortyTwo'; // camelCase export/import/filename
+    import insideDirectory from './insideDirectory'; // camelCase export/import/directory name/implicit "index"
+    // ^ supports both insideDirectory.js and insideDirectory/index.js
     ```
 
   <a name="naming--camelCase-default-export"></a><a name="22.7"></a>
@@ -2368,7 +2383,7 @@ Other Style Guides
     ```
 
   <a name="naming--PascalCase-singleton"></a><a name="22.8"></a>
-  - [22.8](#naming--PascalCase-singleton) Use PascalCase when you export a singleton / function library / bare object.
+  - [22.8](#naming--PascalCase-singleton) Use PascalCase when you export a constructor / class / singleton / function library / bare object.
 
     ```javascript
     const AirbnbStyleGuide = {

From 688ef3c2ebbe545da5b2e693502bb2bc926fe3c6 Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Fri, 15 Apr 2016 19:24:48 -0700
Subject: [PATCH 0582/1591] [guide] remove AIIFE to avoid CallExpression quirk.

Fixes #828.
---
 README.md | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/README.md b/README.md
index c07a087e2f..5e100c9058 100644
--- a/README.md
+++ b/README.md
@@ -2133,12 +2133,12 @@ Other Style Guides
     })()
 
     // good
-    (() => {
+    (function () {
       const name = 'Skywalker';
       return name;
     }());
 
-    // good (guards against the function becoming an argument when two files with IIFEs are concatenated)
+    // good, but legacy (guards against the function becoming an argument when two files with IIFEs are concatenated)
     ;(() => {
       const name = 'Skywalker';
       return name;
@@ -2230,7 +2230,7 @@ Other Style Guides
     // good
     const hasAge = Boolean(age);
 
-    // good
+    // best
     const hasAge = !!age;
     ```
 

From fc1443b80f8ff39e78e72627c94c4b292679b1a8 Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Sat, 16 Apr 2016 09:54:28 -0700
Subject: [PATCH 0583/1591] [guide] add link on perf of array iteration methods

---
 README.md | 1 +
 1 file changed, 1 insertion(+)

diff --git a/README.md b/README.md
index 5e100c9058..e60ea04c04 100644
--- a/README.md
+++ b/README.md
@@ -2620,6 +2620,7 @@ Other Style Guides
   - [jQuery Find vs Context, Selector](http://jsperf.com/jquery-find-vs-context-sel/13)
   - [innerHTML vs textContent for script text](http://jsperf.com/innerhtml-vs-textcontent-for-script-text)
   - [Long String Concatenation](http://jsperf.com/ya-string-concat)
+  - [Are Javascript functions like `map()`, `reduce()`, and `filter()` optimized for traversing arrays?](https://www.quora.com/JavaScript-programming-language-Are-Javascript-functions-like-map-reduce-and-filter-already-optimized-for-traversing-array/answer/Quildreen-Motta)
   - Loading...
 
 **[⬆ back to top](#table-of-contents)**

From 81d01645c2445b67ecd4aa22bd4c5620df43e959 Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Sat, 16 Apr 2016 11:05:25 -0700
Subject: [PATCH 0584/1591] [eslint config] remove need for a local symlink.

---
 packages/eslint-config-airbnb/.eslintrc              |  2 +-
 packages/eslint-config-airbnb/base.js                |  4 ++--
 packages/eslint-config-airbnb/index.js               |  6 +++---
 packages/eslint-config-airbnb/legacy.js              | 12 ++++++------
 .../node_modules/eslint-config-airbnb                |  1 -
 5 files changed, 12 insertions(+), 13 deletions(-)
 delete mode 120000 packages/eslint-config-airbnb/node_modules/eslint-config-airbnb

diff --git a/packages/eslint-config-airbnb/.eslintrc b/packages/eslint-config-airbnb/.eslintrc
index 4b3b1fa429..6c8556be3b 100644
--- a/packages/eslint-config-airbnb/.eslintrc
+++ b/packages/eslint-config-airbnb/.eslintrc
@@ -1,5 +1,5 @@
 {
-  "extends": "airbnb",
+  "extends": "./index.js",
   "rules": {
     // disable requiring trailing commas because it might be nice to revert to
     // being JSON at some point, and I don't want to make big changes now.
diff --git a/packages/eslint-config-airbnb/base.js b/packages/eslint-config-airbnb/base.js
index 1cfea52161..1cbfe6ff2d 100644
--- a/packages/eslint-config-airbnb/base.js
+++ b/packages/eslint-config-airbnb/base.js
@@ -1,7 +1,7 @@
 module.exports = {
   extends: [
-    'eslint-config-airbnb/legacy',
-    'eslint-config-airbnb/rules/es6',
+    './legacy',
+    './rules/es6',
   ].map(require.resolve),
   rules: {}
 };
diff --git a/packages/eslint-config-airbnb/index.js b/packages/eslint-config-airbnb/index.js
index e9ce995ae5..29f46080a3 100644
--- a/packages/eslint-config-airbnb/index.js
+++ b/packages/eslint-config-airbnb/index.js
@@ -1,8 +1,8 @@
 module.exports = {
   extends: [
-    'eslint-config-airbnb/base',
-    'eslint-config-airbnb/rules/strict',
-    'eslint-config-airbnb/rules/react',
+    './base',
+    './rules/strict',
+    './rules/react',
   ].map(require.resolve),
   rules: {}
 };
diff --git a/packages/eslint-config-airbnb/legacy.js b/packages/eslint-config-airbnb/legacy.js
index b404cf7c88..51786e8e04 100644
--- a/packages/eslint-config-airbnb/legacy.js
+++ b/packages/eslint-config-airbnb/legacy.js
@@ -1,11 +1,11 @@
 module.exports = {
   extends: [
-    'eslint-config-airbnb/rules/best-practices',
-    'eslint-config-airbnb/rules/errors',
-    'eslint-config-airbnb/rules/legacy',
-    'eslint-config-airbnb/rules/node',
-    'eslint-config-airbnb/rules/style',
-    'eslint-config-airbnb/rules/variables'
+    './rules/best-practices',
+    './rules/errors',
+    './rules/legacy',
+    './rules/node',
+    './rules/style',
+    './rules/variables'
   ].map(require.resolve),
   env: {
     browser: true,
diff --git a/packages/eslint-config-airbnb/node_modules/eslint-config-airbnb b/packages/eslint-config-airbnb/node_modules/eslint-config-airbnb
deleted file mode 120000
index a96aa0ea9d..0000000000
--- a/packages/eslint-config-airbnb/node_modules/eslint-config-airbnb
+++ /dev/null
@@ -1 +0,0 @@
-..
\ No newline at end of file

From cbd2c38da838be1c34751fb841a61b9fcba7e3cb Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Sat, 16 Apr 2016 11:50:21 -0700
Subject: [PATCH 0585/1591] [eslint config] [dev deps / peer deps] update
 `eslint`

---
 packages/eslint-config-airbnb/package.json | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/packages/eslint-config-airbnb/package.json b/packages/eslint-config-airbnb/package.json
index 6c8a89d24f..f6ad6f29ff 100644
--- a/packages/eslint-config-airbnb/package.json
+++ b/packages/eslint-config-airbnb/package.json
@@ -43,7 +43,7 @@
   "homepage": "https://github.com/airbnb/javascript",
   "devDependencies": {
     "babel-tape-runner": "^1.3.1",
-    "eslint": "^2.7.0",
+    "eslint": "^2.8.0",
     "eslint-plugin-jsx-a11y": "^0.6.2",
     "eslint-plugin-import": "^1.4.0",
     "eslint-plugin-react": "^4.3.0",
@@ -52,7 +52,7 @@
     "parallelshell": "^2.0.0"
   },
   "peerDependencies": {
-    "eslint": "^2.7.0",
+    "eslint": "^2.8.0",
     "eslint-plugin-jsx-a11y": "^0.6.2",
     "eslint-plugin-import": "^1.4.0",
     "eslint-plugin-react": "^4.3.0"

From c29560441eea62f32dedbaa6e67f73f8ee4affa9 Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Sat, 16 Apr 2016 11:53:21 -0700
Subject: [PATCH 0586/1591] =?UTF-8?q?[eslint=20config]=20It=20doesn?=
 =?UTF-8?q?=E2=80=99t=20matter=20which=20react=20version=20we=20install=20?=
 =?UTF-8?q?since=20we=E2=80=99re=20just=20testing=20module=20resolution.?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 packages/eslint-config-airbnb/package.json | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/packages/eslint-config-airbnb/package.json b/packages/eslint-config-airbnb/package.json
index f6ad6f29ff..2222934541 100644
--- a/packages/eslint-config-airbnb/package.json
+++ b/packages/eslint-config-airbnb/package.json
@@ -47,7 +47,7 @@
     "eslint-plugin-jsx-a11y": "^0.6.2",
     "eslint-plugin-import": "^1.4.0",
     "eslint-plugin-react": "^4.3.0",
-    "react": "^0.14.8",
+    "react": "*",
     "tape": "^4.5.1",
     "parallelshell": "^2.0.0"
   },

From 4ab741190c2926c188edeefa9fb70ae0b8f585ec Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Sun, 17 Apr 2016 12:28:18 -0700
Subject: [PATCH 0587/1591] [eslint config] [react] update
 `eslint-plugin-react`

---
 packages/eslint-config-airbnb/package.json   |  4 ++--
 packages/eslint-config-airbnb/rules/react.js | 14 +++++++++-----
 2 files changed, 11 insertions(+), 7 deletions(-)

diff --git a/packages/eslint-config-airbnb/package.json b/packages/eslint-config-airbnb/package.json
index 2222934541..14599e3361 100644
--- a/packages/eslint-config-airbnb/package.json
+++ b/packages/eslint-config-airbnb/package.json
@@ -46,7 +46,7 @@
     "eslint": "^2.8.0",
     "eslint-plugin-jsx-a11y": "^0.6.2",
     "eslint-plugin-import": "^1.4.0",
-    "eslint-plugin-react": "^4.3.0",
+    "eslint-plugin-react": "^5.0.0",
     "react": "*",
     "tape": "^4.5.1",
     "parallelshell": "^2.0.0"
@@ -55,6 +55,6 @@
     "eslint": "^2.8.0",
     "eslint-plugin-jsx-a11y": "^0.6.2",
     "eslint-plugin-import": "^1.4.0",
-    "eslint-plugin-react": "^4.3.0"
+    "eslint-plugin-react": "^5.0.0"
   }
 }
diff --git a/packages/eslint-config-airbnb/rules/react.js b/packages/eslint-config-airbnb/rules/react.js
index c05d575e04..a7e4377313 100644
--- a/packages/eslint-config-airbnb/rules/react.js
+++ b/packages/eslint-config-airbnb/rules/react.js
@@ -138,7 +138,7 @@ module.exports = {
     // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/require-extension.md
     'react/require-extension': [0, { 'extensions': ['.jsx'] }],
     // Require render() methods to return something
-    // https://github.com/yannickcr/eslint-plugin-react/pull/502
+    // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/require-render-return.md
     'react/require-render-return': 2,
     // Prevent extra closing tags for components without children
     // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/self-closing-comp.md
@@ -162,9 +162,9 @@ module.exports = {
     // Prevent missing parentheses around multilines JSX
     // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/wrap-multilines.md
     'react/wrap-multilines': [2, {
-      declaration: true,
-      assignment: true,
-      return: true
+      'declaration': true,
+      'assignment': true,
+      'return': true
     }],
   },
   'settings': {
@@ -172,6 +172,10 @@ module.exports = {
       'node': {
         'extensions': ['.js', '.jsx', '.json']
       }
-    }
+    },
+    'react': {
+      'pragma': 'React',
+      'version': '0.14'
+    },
   }
 };

From f268237c71ef17efccdcec8e680fad78397c3966 Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Sun, 17 Apr 2016 12:30:28 -0700
Subject: [PATCH 0588/1591] [eslint config] [react] [semver-minor] Add
 `react/jsx-first-prop-new-line` rule

---
 packages/eslint-config-airbnb/rules/react.js | 5 ++++-
 1 file changed, 4 insertions(+), 1 deletion(-)

diff --git a/packages/eslint-config-airbnb/rules/react.js b/packages/eslint-config-airbnb/rules/react.js
index a7e4377313..e847a3eb85 100644
--- a/packages/eslint-config-airbnb/rules/react.js
+++ b/packages/eslint-config-airbnb/rules/react.js
@@ -157,7 +157,7 @@ module.exports = {
         'everything-else',
         '/^render.+$/',
         'render'
-      ]
+      ],
     }],
     // Prevent missing parentheses around multilines JSX
     // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/wrap-multilines.md
@@ -166,6 +166,9 @@ module.exports = {
       'assignment': true,
       'return': true
     }],
+    // Require that the first prop in a JSX element be on a new line when the element is multiline
+    // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/jsx-first-prop-new-line.md
+    'react/jsx-first-prop-new-line': [2, 'multiline'],
   },
   'settings': {
     'import/resolver': {

From f468a52d8281269c3246aa8cdcaa14445694ebf9 Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Sun, 17 Apr 2016 13:15:13 -0700
Subject: [PATCH 0589/1591] [eslint config] [tests] remove parallelshell

---
 packages/eslint-config-airbnb/package.json | 5 ++---
 1 file changed, 2 insertions(+), 3 deletions(-)

diff --git a/packages/eslint-config-airbnb/package.json b/packages/eslint-config-airbnb/package.json
index 14599e3361..3f220ef973 100644
--- a/packages/eslint-config-airbnb/package.json
+++ b/packages/eslint-config-airbnb/package.json
@@ -6,7 +6,7 @@
   "scripts": {
     "lint": "eslint .",
     "tests-only": "babel-tape-runner ./test/test-*.js",
-    "test": "parallelshell 'npm run --silent lint' 'npm run --silent tests-only'"
+    "test": "npm run --silent lint && npm run --silent tests-only"
   },
   "repository": {
     "type": "git",
@@ -48,8 +48,7 @@
     "eslint-plugin-import": "^1.4.0",
     "eslint-plugin-react": "^5.0.0",
     "react": "*",
-    "tape": "^4.5.1",
-    "parallelshell": "^2.0.0"
+    "tape": "^4.5.1"
   },
   "peerDependencies": {
     "eslint": "^2.8.0",

From c86cfaa6f9a043c699b1c0f98e67c006ffed1059 Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Sun, 17 Apr 2016 12:53:54 -0700
Subject: [PATCH 0590/1591] [eslint config] [semver-patch] Enable
 `no-useless-concat` rule which `prefer-template` already covers

---
 packages/eslint-config-airbnb/rules/best-practices.js | 3 +++
 1 file changed, 3 insertions(+)

diff --git a/packages/eslint-config-airbnb/rules/best-practices.js b/packages/eslint-config-airbnb/rules/best-practices.js
index e9a0026546..eaf6ddbbd7 100644
--- a/packages/eslint-config-airbnb/rules/best-practices.js
+++ b/packages/eslint-config-airbnb/rules/best-practices.js
@@ -113,6 +113,9 @@ module.exports = {
     'no-unused-labels': 2,
     // disallow unnecessary .call() and .apply()
     'no-useless-call': 0,
+    // disallow useless string concatenation
+    // http://eslint.org/docs/rules/no-useless-concat
+    'no-useless-concat': 2,
     // disallow unnecessary string escaping
     // http://eslint.org/docs/rules/no-useless-escape
     'no-useless-escape': 2,

From 970848f1a2ba5a9609d3c1444b5ad3101f8e6a48 Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Sun, 17 Apr 2016 12:45:37 -0700
Subject: [PATCH 0591/1591] [eslint config] [semver-minor] enforce spacing
 inside single-line blocks.

---
 packages/eslint-config-airbnb/rules/style.js | 3 +++
 1 file changed, 3 insertions(+)

diff --git a/packages/eslint-config-airbnb/rules/style.js b/packages/eslint-config-airbnb/rules/style.js
index 9623d6ac14..df35c3cfc5 100644
--- a/packages/eslint-config-airbnb/rules/style.js
+++ b/packages/eslint-config-airbnb/rules/style.js
@@ -2,6 +2,9 @@ module.exports = {
   'rules': {
     // enforce spacing inside array brackets
     'array-bracket-spacing': [2, 'never'],
+    // enforce spacing inside single-line blocks
+    // http://eslint.org/docs/rules/block-spacing
+    'block-spacing': [2, 'always'],
     // enforce one true brace style
     'brace-style': [2, '1tbs', { 'allowSingleLine': true }],
     // require camel case names

From 066c3b1a3c272854c2b3f6635459f7d161d068b1 Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Sun, 17 Apr 2016 13:18:39 -0700
Subject: [PATCH 0592/1591] [eslint config] [react] [semver-minor] enable
 `jsx-equals-spacing` rule

---
 packages/eslint-config-airbnb/rules/react.js | 3 +++
 1 file changed, 3 insertions(+)

diff --git a/packages/eslint-config-airbnb/rules/react.js b/packages/eslint-config-airbnb/rules/react.js
index e847a3eb85..12e62e24ca 100644
--- a/packages/eslint-config-airbnb/rules/react.js
+++ b/packages/eslint-config-airbnb/rules/react.js
@@ -169,6 +169,9 @@ module.exports = {
     // Require that the first prop in a JSX element be on a new line when the element is multiline
     // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/jsx-first-prop-new-line.md
     'react/jsx-first-prop-new-line': [2, 'multiline'],
+    // enforce spacing around jsx equals signs
+    // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/jsx-equals-spacing.md
+    'react/jsx-equals-spacing': [2, 'never'],
   },
   'settings': {
     'import/resolver': {

From 48ab6d6e762b96e84b1a261a5a8ba2910047947d Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Sun, 17 Apr 2016 13:19:40 -0700
Subject: [PATCH 0593/1591] [eslint config] [react] [semver-minor] enable
 `jsx-indent` rule

---
 packages/eslint-config-airbnb/rules/react.js | 3 +++
 1 file changed, 3 insertions(+)

diff --git a/packages/eslint-config-airbnb/rules/react.js b/packages/eslint-config-airbnb/rules/react.js
index 12e62e24ca..a2498974e0 100644
--- a/packages/eslint-config-airbnb/rules/react.js
+++ b/packages/eslint-config-airbnb/rules/react.js
@@ -172,6 +172,9 @@ module.exports = {
     // enforce spacing around jsx equals signs
     // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/jsx-equals-spacing.md
     'react/jsx-equals-spacing': [2, 'never'],
+    // enforce JSX indentation
+    // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/jsx-indent.md
+    'react/jsx-indent': [2, 2],
   },
   'settings': {
     'import/resolver': {

From c97bd772b4b3b8848a946dd016fa50648299661d Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Sun, 17 Apr 2016 13:22:41 -0700
Subject: [PATCH 0594/1591] [eslint config] [react] separate a11y rules to
 their own file

---
 packages/eslint-config-airbnb/index.js        |  1 +
 .../eslint-config-airbnb/rules/react-a11y.js  | 26 +++++++++++++++++++
 packages/eslint-config-airbnb/rules/react.js  | 17 ------------
 .../eslint-config-airbnb/test/test-base.js    |  2 +-
 .../test/test-react-order.js                  | 12 +++++----
 5 files changed, 35 insertions(+), 23 deletions(-)
 create mode 100644 packages/eslint-config-airbnb/rules/react-a11y.js

diff --git a/packages/eslint-config-airbnb/index.js b/packages/eslint-config-airbnb/index.js
index 29f46080a3..3fa2b3495f 100644
--- a/packages/eslint-config-airbnb/index.js
+++ b/packages/eslint-config-airbnb/index.js
@@ -3,6 +3,7 @@ module.exports = {
     './base',
     './rules/strict',
     './rules/react',
+    './rules/react-a11y',
   ].map(require.resolve),
   rules: {}
 };
diff --git a/packages/eslint-config-airbnb/rules/react-a11y.js b/packages/eslint-config-airbnb/rules/react-a11y.js
new file mode 100644
index 0000000000..d966311920
--- /dev/null
+++ b/packages/eslint-config-airbnb/rules/react-a11y.js
@@ -0,0 +1,26 @@
+module.exports = {
+  'plugins': [
+    'jsx-a11y',
+    'react'
+  ],
+  'ecmaFeatures': {
+    'jsx': true
+  },
+  'rules': {
+    // Prevent use of `accessKey`
+    // https://github.com/evcohen/eslint-plugin-jsx-a11y/blob/master/docs/rules/no-access-key.md
+    'jsx-a11y/no-access-key': 2,
+
+    // Require <img> to have a non-empty `alt` prop, or role="presentation"
+    // https://github.com/evcohen/eslint-plugin-jsx-a11y/blob/master/docs/rules/img-uses-alt.md
+    'jsx-a11y/img-uses-alt': 2,
+
+    // Prevent img alt text from containing redundant words like "image", "picture", or "photo"
+    // https://github.com/evcohen/eslint-plugin-jsx-a11y/blob/master/docs/rules/redundant-alt.md
+    'jsx-a11y/redundant-alt': 2,
+
+    // Require ARIA roles to be valid and non-abstract
+    // https://github.com/evcohen/eslint-plugin-jsx-a11y/blob/master/docs/rules/valid-aria-role.md
+    'jsx-a11y/valid-aria-role': 2,
+  },
+};
diff --git a/packages/eslint-config-airbnb/rules/react.js b/packages/eslint-config-airbnb/rules/react.js
index a2498974e0..c483b3b804 100644
--- a/packages/eslint-config-airbnb/rules/react.js
+++ b/packages/eslint-config-airbnb/rules/react.js
@@ -1,6 +1,5 @@
 module.exports = {
   'plugins': [
-    'jsx-a11y',
     'react'
   ],
   'ecmaFeatures': {
@@ -9,22 +8,6 @@ module.exports = {
   // View link below for react rules documentation
   // https://github.com/yannickcr/eslint-plugin-react#list-of-supported-rules
   'rules': {
-    // Prevent use of `accessKey`
-    // https://github.com/evcohen/eslint-plugin-jsx-a11y/blob/master/docs/rules/no-access-key.md
-    'jsx-a11y/no-access-key': 2,
-
-    // Require <img> to have a non-empty `alt` prop, or role="presentation"
-    // https://github.com/evcohen/eslint-plugin-jsx-a11y/blob/master/docs/rules/img-uses-alt.md
-    'jsx-a11y/img-uses-alt': 2,
-
-    // Prevent img alt text from containing redundant words like "image", "picture", or "photo"
-    // https://github.com/evcohen/eslint-plugin-jsx-a11y/blob/master/docs/rules/redundant-alt.md
-    'jsx-a11y/redundant-alt': 2,
-
-    // Require ARIA roles to be valid and non-abstract
-    // https://github.com/evcohen/eslint-plugin-jsx-a11y/blob/master/docs/rules/valid-aria-role.md
-    'jsx-a11y/valid-aria-role': 2,
-
     // Prevent missing displayName in a React component definition
     // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/display-name.md
     'react/display-name': [0, { 'ignoreTranspilerName': false }],
diff --git a/packages/eslint-config-airbnb/test/test-base.js b/packages/eslint-config-airbnb/test/test-base.js
index c29e89dd7c..8d21993a9b 100644
--- a/packages/eslint-config-airbnb/test/test-base.js
+++ b/packages/eslint-config-airbnb/test/test-base.js
@@ -7,7 +7,7 @@ const files = {
 };
 
 fs.readdirSync(path.join(__dirname, '../rules')).forEach(name => {
-  if (name === 'react.js') {
+  if (name === 'react.js' || name === 'react-a11y.js') {
     return;
   }
 
diff --git a/packages/eslint-config-airbnb/test/test-react-order.js b/packages/eslint-config-airbnb/test/test-react-order.js
index 81d8235fce..1e6dd660cc 100644
--- a/packages/eslint-config-airbnb/test/test-react-order.js
+++ b/packages/eslint-config-airbnb/test/test-react-order.js
@@ -2,6 +2,7 @@ import test from 'tape';
 import { CLIEngine } from 'eslint';
 import eslintrc from '../';
 import reactRules from '../rules/react';
+import reactA11yRules from '../rules/react-a11y';
 
 const cli = new CLIEngine({
   useEslintrc: false,
@@ -27,13 +28,14 @@ ${body}
 `;
 }
 
-test('validate react prop order', t => {
-  t.test('make sure our eslintrc has React and JSX linting dependencies', t => {
-    t.plan(1);
-    t.deepEqual(reactRules.plugins, ['jsx-a11y', 'react']);
+test('validate react prop order', (t) => {
+  t.test('make sure our eslintrc has React and JSX linting dependencies', (t) => {
+    t.plan(2);
+    t.deepEqual(reactRules.plugins, ['react']);
+    t.deepEqual(reactA11yRules.plugins, ['jsx-a11y', 'react']);
   });
 
-  t.test('passes a good component', t => {
+  t.test('passes a good component', (t) => {
     t.plan(3);
     const result = lint(wrapComponent(`
   componentWillMount() {}

From 3efe10d42eb14c739128090b9647137301e812fd Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Sun, 17 Apr 2016 12:48:54 -0700
Subject: [PATCH 0595/1591] [eslint config] [breaking] disallow empty methods

---
 packages/eslint-config-airbnb/rules/best-practices.js  | 8 ++++++++
 packages/eslint-config-airbnb/test/test-react-order.js | 1 +
 2 files changed, 9 insertions(+)

diff --git a/packages/eslint-config-airbnb/rules/best-practices.js b/packages/eslint-config-airbnb/rules/best-practices.js
index eaf6ddbbd7..ea1b4366cb 100644
--- a/packages/eslint-config-airbnb/rules/best-practices.js
+++ b/packages/eslint-config-airbnb/rules/best-practices.js
@@ -37,6 +37,14 @@ module.exports = {
     'no-div-regex': 0,
     // disallow else after a return in an if
     'no-else-return': 2,
+    // disallow empty functions, except for standalone funcs/arrows
+    // http://eslint.org/docs/rules/no-empty-function
+    'no-empty-function': [2, {
+      'allow': [
+        'functions',
+        'arrowFunctions',
+      ]
+    }],
     // disallow Unnecessary Labels
     // http://eslint.org/docs/rules/no-extra-label
     'no-extra-label': 2,
diff --git a/packages/eslint-config-airbnb/test/test-react-order.js b/packages/eslint-config-airbnb/test/test-react-order.js
index 1e6dd660cc..e3e4cfbd9e 100644
--- a/packages/eslint-config-airbnb/test/test-react-order.js
+++ b/packages/eslint-config-airbnb/test/test-react-order.js
@@ -23,6 +23,7 @@ function wrapComponent(body) {
   return `
 import React from 'react';
 export default class MyComponent extends React.Component {
+/* eslint no-empty-function: 0 */
 ${body}
 }
 `;

From 140ce8b56c9cd1258809e534b6f8c46913ae0f99 Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Sun, 17 Apr 2016 12:52:23 -0700
Subject: [PATCH 0596/1591] [eslint config] [breaking] disallow empty
 restructuring patterns

---
 packages/eslint-config-airbnb/rules/best-practices.js | 3 +++
 1 file changed, 3 insertions(+)

diff --git a/packages/eslint-config-airbnb/rules/best-practices.js b/packages/eslint-config-airbnb/rules/best-practices.js
index ea1b4366cb..a103d6c442 100644
--- a/packages/eslint-config-airbnb/rules/best-practices.js
+++ b/packages/eslint-config-airbnb/rules/best-practices.js
@@ -45,6 +45,9 @@ module.exports = {
         'arrowFunctions',
       ]
     }],
+    // disallow empty destructuring patterns
+    // http://eslint.org/docs/rules/no-empty-pattern
+    'no-empty-pattern': 2,
     // disallow Unnecessary Labels
     // http://eslint.org/docs/rules/no-extra-label
     'no-extra-label': 2,

From 6efcda314df2e303c3c99159c0a93eca17a4b131 Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Sun, 17 Apr 2016 12:58:55 -0700
Subject: [PATCH 0597/1591] [eslint config] [breaking] enable
 `no-restricted-syntax` rule.
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

Forbids “with”, “break”, “debugger”, “for..in”, and labels.
---
 packages/eslint-config-airbnb/rules/best-practices.js | 10 ++++++++++
 1 file changed, 10 insertions(+)

diff --git a/packages/eslint-config-airbnb/rules/best-practices.js b/packages/eslint-config-airbnb/rules/best-practices.js
index a103d6c442..adda7f6e01 100644
--- a/packages/eslint-config-airbnb/rules/best-practices.js
+++ b/packages/eslint-config-airbnb/rules/best-practices.js
@@ -104,6 +104,16 @@ module.exports = {
     'no-proto': 2,
     // disallow declaring the same variable more then once
     'no-redeclare': 2,
+    // disallow certain syntax forms
+    // http://eslint.org/docs/rules/no-restricted-syntax
+    'no-restricted-syntax': [
+      2,
+      'BreakStatement',
+      'DebuggerStatement',
+      'ForInStatement',
+      'LabeledStatement',
+      'WithStatement',
+    ],
     // disallow use of assignment in return statement
     'no-return-assign': 2,
     // disallow use of `javascript:` urls.

From e1cbcbecf6b37953226881e209d2003cdf9a4dc1 Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Sun, 17 Apr 2016 13:03:16 -0700
Subject: [PATCH 0598/1591] [eslint config] [breaking] enable `global-require`
 rule

---
 packages/eslint-config-airbnb/rules/node.js     | 3 +++
 packages/eslint-config-airbnb/test/test-base.js | 8 ++++----
 2 files changed, 7 insertions(+), 4 deletions(-)

diff --git a/packages/eslint-config-airbnb/rules/node.js b/packages/eslint-config-airbnb/rules/node.js
index 2114c37758..b42aeaa2bd 100644
--- a/packages/eslint-config-airbnb/rules/node.js
+++ b/packages/eslint-config-airbnb/rules/node.js
@@ -8,6 +8,9 @@ module.exports = {
   'rules': {
     // enforce return after a callback
     'callback-return': 0,
+    // require all requires be top-level
+    // http://eslint.org/docs/rules/global-require
+    'global-require': 2,
     // enforces error handling in callbacks (node environment)
     'handle-callback-err': 0,
     // disallow mixing regular variable and require declarations
diff --git a/packages/eslint-config-airbnb/test/test-base.js b/packages/eslint-config-airbnb/test/test-base.js
index 8d21993a9b..9457e2ef42 100644
--- a/packages/eslint-config-airbnb/test/test-base.js
+++ b/packages/eslint-config-airbnb/test/test-base.js
@@ -2,16 +2,16 @@ import fs from 'fs';
 import path from 'path';
 import test from 'tape';
 
-const files = {
-  base: require('../base')
-};
+const base = require('../base');
+
+const files = { base };
 
 fs.readdirSync(path.join(__dirname, '../rules')).forEach(name => {
   if (name === 'react.js' || name === 'react-a11y.js') {
     return;
   }
 
-  files[name] = require(`../rules/${name}`);
+  files[name] = require(`../rules/${name}`); // eslint-disable-line global-require
 });
 
 Object.keys(files).forEach(name => {

From 12d08b38dc1351df120008b1e3f1f4192b91e81d Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Sun, 17 Apr 2016 13:05:01 -0700
Subject: [PATCH 0599/1591] [eslint config] Add missing disabled rules.

---
 .../rules/best-practices.js                   |  8 +++++
 packages/eslint-config-airbnb/rules/errors.js |  1 +
 packages/eslint-config-airbnb/rules/es6.js    | 32 ++++++++++++++++++-
 .../eslint-config-airbnb/rules/react-a11y.js  | 23 +++++++++++++
 packages/eslint-config-airbnb/rules/react.js  |  2 ++
 packages/eslint-config-airbnb/rules/style.js  |  9 ++++++
 6 files changed, 74 insertions(+), 1 deletion(-)

diff --git a/packages/eslint-config-airbnb/rules/best-practices.js b/packages/eslint-config-airbnb/rules/best-practices.js
index adda7f6e01..4543fe9ecd 100644
--- a/packages/eslint-config-airbnb/rules/best-practices.js
+++ b/packages/eslint-config-airbnb/rules/best-practices.js
@@ -77,6 +77,14 @@ module.exports = {
     'no-lone-blocks': 2,
     // disallow creation of functions within loops
     'no-loop-func': 2,
+    // disallow magic numbers
+    // http://eslint.org/docs/rules/no-magic-numbers
+    'no-magic-numbers': [0, {
+      'ignore': [],
+      'ignoreArrayIndexes': true,
+      'enforceConst': true,
+      'detectObjects': false,
+    }],
     // disallow use of multiple spaces
     'no-multi-spaces': 2,
     // disallow use of multiline strings
diff --git a/packages/eslint-config-airbnb/rules/errors.js b/packages/eslint-config-airbnb/rules/errors.js
index 62594e0c3e..73fd7d4f70 100644
--- a/packages/eslint-config-airbnb/rules/errors.js
+++ b/packages/eslint-config-airbnb/rules/errors.js
@@ -49,6 +49,7 @@ module.exports = {
     // disallow comparisons with the value NaN
     'use-isnan': 2,
     // ensure JSDoc comments are valid
+    // http://eslint.org/docs/rules/valid-jsdoc
     'valid-jsdoc': 0,
     // ensure that the results of typeof are compared against a valid string
     'valid-typeof': 2,
diff --git a/packages/eslint-config-airbnb/rules/es6.js b/packages/eslint-config-airbnb/rules/es6.js
index 7ac09522dc..0f5900e4c4 100644
--- a/packages/eslint-config-airbnb/rules/es6.js
+++ b/packages/eslint-config-airbnb/rules/es6.js
@@ -92,7 +92,37 @@ module.exports = {
     'import/export': 2,
     // ensure imports point to files/modules that can be resolved
     // https://github.com/benmosher/eslint-plugin-import/blob/master/docs/rules/no-unresolved.md
-    'import/no-unresolved': [2, { 'commonjs': true }]
+    'import/no-unresolved': [2, { 'commonjs': true }],
+    // ensure default import coupled with default export
+    // https://github.com/benmosher/eslint-plugin-import/blob/master/docs/rules/default.md#when-not-to-use-it
+    'import/default': 0,
+    // ensure named imports coupled with named exports
+    // https://github.com/benmosher/eslint-plugin-import/blob/master/docs/rules/named.md#when-not-to-use-it
+    'import/named': 0,
+    // https://github.com/benmosher/eslint-plugin-import/blob/master/docs/rules/namespace.md
+    'import/namespace': 0,
+    // do not allow a default import name to match a named export
+    // https://github.com/benmosher/eslint-plugin-import/blob/master/docs/rules/no-named-as-default.md
+    // TODO: enable
+    'import/no-named-as-default': 0,
+    // disallow require()
+    // https://github.com/benmosher/eslint-plugin-import/blob/master/docs/rules/no-commonjs.md
+    'import/no-commonjs': 0,
+    // disallow AMD require/define
+    // https://github.com/benmosher/eslint-plugin-import/blob/master/docs/rules/no-amd.md
+    // TODO: enable
+    'import/no-amd': 0,
+    // disallow non-import statements appearing before import statements
+    // https://github.com/benmosher/eslint-plugin-import/blob/master/docs/rules/imports-first.md
+    // TODO: enable?
+    'import/imports-first': [0, 'absolute-first'],
+    // disallow duplicate imports
+    // TODO: enable
+    // https://github.com/benmosher/eslint-plugin-import/blob/master/docs/rules/no-duplicates.md
+    'import/no-duplicates': 0,
+    // disallow use of jsdoc-marked-deprecated imports
+    // https://github.com/benmosher/eslint-plugin-import/blob/master/docs/rules/no-deprecated.md
+    'import/no-deprecated': 0,
   },
   'settings': {
     'import/resolver': {
diff --git a/packages/eslint-config-airbnb/rules/react-a11y.js b/packages/eslint-config-airbnb/rules/react-a11y.js
index d966311920..86475656ba 100644
--- a/packages/eslint-config-airbnb/rules/react-a11y.js
+++ b/packages/eslint-config-airbnb/rules/react-a11y.js
@@ -22,5 +22,28 @@ module.exports = {
     // Require ARIA roles to be valid and non-abstract
     // https://github.com/evcohen/eslint-plugin-jsx-a11y/blob/master/docs/rules/valid-aria-role.md
     'jsx-a11y/valid-aria-role': 2,
+
+    // require that JSX labels use "htmlFor"
+    // TODO: enable
+    // https://github.com/evcohen/eslint-plugin-jsx-a11y/blob/master/docs/rules/label-uses-for.md
+    'jsx-a11y/label-uses-for': 0,
+
+    // require that mouseover/out come with focus/blur, for keyboard-only users
+    // TODO: enable?
+    // https://github.com/evcohen/eslint-plugin-jsx-a11y/blob/master/docs/rules/mouse-events-map-to-key-events.md
+    'jsx-a11y/mouse-events-map-to-key-events': 0,
+
+    // disallow href "#"
+    // TODO: enable
+    // https://github.com/evcohen/eslint-plugin-jsx-a11y/blob/master/docs/rules/no-hash-href.md
+    'jsx-a11y/no-hash-href': 0,
+
+    // require things with onClick to have an aria role
+    // https://github.com/evcohen/eslint-plugin-jsx-a11y/blob/master/docs/rules/onclick-uses-role.md
+    'jsx-a11y/onclick-uses-role': 0,
+
+    // require onBlur instead of onChange
+    // https://github.com/evcohen/eslint-plugin-jsx-a11y/blob/master/docs/rules/use-onblur-not-onchange.md
+    'jsx-a11y/use-onblur-not-onchange': 0,
   },
 };
diff --git a/packages/eslint-config-airbnb/rules/react.js b/packages/eslint-config-airbnb/rules/react.js
index c483b3b804..521508c521 100644
--- a/packages/eslint-config-airbnb/rules/react.js
+++ b/packages/eslint-config-airbnb/rules/react.js
@@ -63,6 +63,8 @@ module.exports = {
       'ignoreCase': false,
       'callbacksLast': false,
     }],
+    // deprecated in favor of react/jsx-sort-props
+    'react/jsx-sort-prop-types': 0,
     // Enforce props alphabetical sorting
     // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/jsx-sort-props.md
     'react/jsx-sort-props': [0, {
diff --git a/packages/eslint-config-airbnb/rules/style.js b/packages/eslint-config-airbnb/rules/style.js
index df35c3cfc5..d10ee7fb89 100644
--- a/packages/eslint-config-airbnb/rules/style.js
+++ b/packages/eslint-config-airbnb/rules/style.js
@@ -56,6 +56,9 @@ module.exports = {
     }],
     // specify the maximum depth callbacks can be nested
     'max-nested-callbacks': 0,
+    // restrict the number of statements per line
+    // http://eslint.org/docs/rules/max-statements-per-line
+    'max-statements-per-line': [0, { 'max': 1 }],
     // require a capital letter for constructors
     'new-cap': [2, { 'newIsCap': true }],
     // disallow the omission of parentheses when invoking a constructor with no arguments
@@ -80,6 +83,9 @@ module.exports = {
     'no-mixed-spaces-and-tabs': 2,
     // disallow multiple empty lines and only one newline at the end
     'no-multiple-empty-lines': [2, { 'max': 2, 'maxEOF': 1 }],
+    // disallow negated conditions
+    // http://eslint.org/docs/rules/no-negated-condition
+    'no-negated-condition': 0,
     // disallow nested ternary expressions
     'no-nested-ternary': 2,
     // disallow use of the Object constructor
@@ -119,6 +125,9 @@ module.exports = {
     'quotes': [2, 'single', 'avoid-escape'],
     // require identifiers to match the provided regular expression
     'id-match': 0,
+    // do not require jsdoc
+    // http://eslint.org/docs/rules/require-jsdoc
+    'require-jsdoc': 0,
     // enforce spacing before and after semicolons
     'semi-spacing': [2, { 'before': false, 'after': true }],
     // require or disallow use of semicolons instead of ASI

From a9db06e1ddbefe3342a61b649c104420d82ba37d Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Sun, 17 Apr 2016 13:09:21 -0700
Subject: [PATCH 0600/1591] [eslint config] Add `eslint-find-rules` to prevent
 missing rules.

---
 packages/eslint-config-airbnb/package.json | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

diff --git a/packages/eslint-config-airbnb/package.json b/packages/eslint-config-airbnb/package.json
index 3f220ef973..3433e28529 100644
--- a/packages/eslint-config-airbnb/package.json
+++ b/packages/eslint-config-airbnb/package.json
@@ -6,6 +6,7 @@
   "scripts": {
     "lint": "eslint .",
     "tests-only": "babel-tape-runner ./test/test-*.js",
+    "pretest": "eslint-find-rules --unused",
     "test": "npm run --silent lint && npm run --silent tests-only"
   },
   "repository": {
@@ -44,8 +45,9 @@
   "devDependencies": {
     "babel-tape-runner": "^1.3.1",
     "eslint": "^2.8.0",
-    "eslint-plugin-jsx-a11y": "^0.6.2",
+    "eslint-find-rules": "^1.3.0",
     "eslint-plugin-import": "^1.4.0",
+    "eslint-plugin-jsx-a11y": "^0.6.2",
     "eslint-plugin-react": "^5.0.0",
     "react": "*",
     "tape": "^4.5.1"

From e856d93ada7fd099a117f8f84b811ed44e8710cd Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Mon, 18 Apr 2016 23:23:55 -0700
Subject: [PATCH 0601/1591] [deps] update `eslint-plugin-react`,
 `eslint-plugin-import`

---
 packages/eslint-config-airbnb/package.json | 8 ++++----
 packages/eslint-config-airbnb/rules/es6.js | 8 ++++++++
 2 files changed, 12 insertions(+), 4 deletions(-)

diff --git a/packages/eslint-config-airbnb/package.json b/packages/eslint-config-airbnb/package.json
index 3433e28529..77b2939985 100644
--- a/packages/eslint-config-airbnb/package.json
+++ b/packages/eslint-config-airbnb/package.json
@@ -46,16 +46,16 @@
     "babel-tape-runner": "^1.3.1",
     "eslint": "^2.8.0",
     "eslint-find-rules": "^1.3.0",
-    "eslint-plugin-import": "^1.4.0",
+    "eslint-plugin-import": "^1.5.0",
     "eslint-plugin-jsx-a11y": "^0.6.2",
-    "eslint-plugin-react": "^5.0.0",
+    "eslint-plugin-react": "^5.0.1",
     "react": "*",
     "tape": "^4.5.1"
   },
   "peerDependencies": {
     "eslint": "^2.8.0",
     "eslint-plugin-jsx-a11y": "^0.6.2",
-    "eslint-plugin-import": "^1.4.0",
-    "eslint-plugin-react": "^5.0.0"
+    "eslint-plugin-import": "^1.5.0",
+    "eslint-plugin-react": "^5.0.1"
   }
 }
diff --git a/packages/eslint-config-airbnb/rules/es6.js b/packages/eslint-config-airbnb/rules/es6.js
index 0f5900e4c4..080d12039d 100644
--- a/packages/eslint-config-airbnb/rules/es6.js
+++ b/packages/eslint-config-airbnb/rules/es6.js
@@ -123,6 +123,14 @@ module.exports = {
     // disallow use of jsdoc-marked-deprecated imports
     // https://github.com/benmosher/eslint-plugin-import/blob/master/docs/rules/no-deprecated.md
     'import/no-deprecated': 0,
+    // disallow namespace imports
+    // TODO: enable?
+    // https://github.com/benmosher/eslint-plugin-import/blob/master/docs/rules/no-namespace.md
+    'import/no-namespace': 0,
+    // warn on accessing default export property names that are also named exports
+    // TODO: enable?
+    // https://github.com/benmosher/eslint-plugin-import/blob/master/docs/rules/no-named-as-default-member.md
+    'import/no-named-as-default-member': 0,
   },
   'settings': {
     'import/resolver': {

From bf8677d1accc5c9df90a47b4b9d12a70fbcb244c Mon Sep 17 00:00:00 2001
From: Bae Hyun Seung <bae-unidev@nate.com>
Date: Tue, 19 Apr 2016 15:13:14 +0900
Subject: [PATCH 0602/1591] 'esnext' option has been deprecated

---
 linters/.jshintrc | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/linters/.jshintrc b/linters/.jshintrc
index 4d3468cb21..a7a08a349e 100644
--- a/linters/.jshintrc
+++ b/linters/.jshintrc
@@ -14,7 +14,7 @@
   "node": true,
 
   // Allow ES6.
-  "esnext": true,
+  "esversion": 6,
 
   /*
    * ENFORCING OPTIONS

From 8c63dd93a7aeee4eaea7bcb121cdae1553b04c1f Mon Sep 17 00:00:00 2001
From: Simen Bekkhus <sbekkhus91@gmail.com>
Date: Tue, 19 Apr 2016 08:39:16 +0200
Subject: [PATCH 0603/1591] Remove false comment

---
 packages/eslint-config-airbnb/rules/react.js | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/packages/eslint-config-airbnb/rules/react.js b/packages/eslint-config-airbnb/rules/react.js
index 521508c521..81f529f162 100644
--- a/packages/eslint-config-airbnb/rules/react.js
+++ b/packages/eslint-config-airbnb/rules/react.js
@@ -38,7 +38,7 @@ module.exports = {
     // Limit maximum of props on a single line in JSX
     // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/jsx-max-props-per-line.md
     'react/jsx-max-props-per-line': [0, { 'maximum': 1 }],
-    // Prevent usage of .bind() and arrow functions in JSX props
+    // Prevent usage of .bind() in JSX props
     // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/jsx-no-bind.md
     'react/jsx-no-bind': [2, {
       'ignoreRefs': true,

From 52d3401f953afcf09ca64dbbb177c6284832aae6 Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Sat, 16 Apr 2016 11:04:28 -0700
Subject: [PATCH 0604/1591] [eslint config] [eslint config base] [breaking]
 Migrate non-React rules to a separate linter config.

---
 .travis.yml                                   |  1 +
 README.md                                     |  1 +
 linters/README.md                             | 11 ----
 package.json                                  |  3 +-
 packages/eslint-config-airbnb-base/.eslintrc  |  8 +++
 .../eslint-config-airbnb-base/CHANGELOG.md    |  3 +
 packages/eslint-config-airbnb-base/README.md  | 33 +++++++++++
 packages/eslint-config-airbnb-base/index.js   | 13 +++++
 packages/eslint-config-airbnb-base/legacy.js  | 20 +++++++
 .../eslint-config-airbnb-base/package.json    | 56 +++++++++++++++++++
 .../rules/.eslintrc.json                      |  5 ++
 .../rules/best-practices.js                   |  0
 .../rules/errors.js                           |  0
 .../rules/es6.js                              |  1 -
 .../rules/legacy.js                           |  0
 .../rules/node.js                             |  0
 .../rules/strict.js                           |  0
 .../rules/style.js                            |  2 +-
 .../rules/variables.js                        |  0
 .../eslint-config-airbnb-base/test/.eslintrc  |  9 +++
 .../test/test-base.js                         | 29 ++++++++++
 packages/eslint-config-airbnb/README.md       | 21 ++-----
 packages/eslint-config-airbnb/base.js         |  7 +--
 packages/eslint-config-airbnb/index.js        |  4 +-
 packages/eslint-config-airbnb/legacy.js       | 20 +------
 packages/eslint-config-airbnb/package.json    |  3 +
 packages/eslint-config-airbnb/rules/react.js  |  5 ++
 27 files changed, 199 insertions(+), 56 deletions(-)
 delete mode 100644 linters/README.md
 create mode 100644 packages/eslint-config-airbnb-base/.eslintrc
 create mode 100644 packages/eslint-config-airbnb-base/CHANGELOG.md
 create mode 100644 packages/eslint-config-airbnb-base/README.md
 create mode 100644 packages/eslint-config-airbnb-base/index.js
 create mode 100644 packages/eslint-config-airbnb-base/legacy.js
 create mode 100644 packages/eslint-config-airbnb-base/package.json
 create mode 100644 packages/eslint-config-airbnb-base/rules/.eslintrc.json
 rename packages/{eslint-config-airbnb => eslint-config-airbnb-base}/rules/best-practices.js (100%)
 rename packages/{eslint-config-airbnb => eslint-config-airbnb-base}/rules/errors.js (100%)
 rename packages/{eslint-config-airbnb => eslint-config-airbnb-base}/rules/es6.js (99%)
 rename packages/{eslint-config-airbnb => eslint-config-airbnb-base}/rules/legacy.js (100%)
 rename packages/{eslint-config-airbnb => eslint-config-airbnb-base}/rules/node.js (100%)
 rename packages/{eslint-config-airbnb => eslint-config-airbnb-base}/rules/strict.js (100%)
 rename packages/{eslint-config-airbnb => eslint-config-airbnb-base}/rules/style.js (99%)
 rename packages/{eslint-config-airbnb => eslint-config-airbnb-base}/rules/variables.js (100%)
 create mode 100644 packages/eslint-config-airbnb-base/test/.eslintrc
 create mode 100644 packages/eslint-config-airbnb-base/test/test-base.js

diff --git a/.travis.yml b/.travis.yml
index b88954b68f..02f60497cf 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -5,6 +5,7 @@ node_js:
   - "iojs"
 env:
   - 'TEST_DIR=packages/eslint-config-airbnb'
+  - 'TEST_DIR=packages/eslint-config-airbnb-base'
 before_install:
   - 'cd $TEST_DIR'
   - 'if [ "${TRAVIS_NODE_VERSION}" != "0.9" ]; then case "$(npm --version)" in 1.*) npm install -g npm@1.4.28 ;; 2.*) npm install -g npm@2 ;; esac ; fi'
diff --git a/README.md b/README.md
index e60ea04c04..0b0b284915 100644
--- a/README.md
+++ b/README.md
@@ -3,6 +3,7 @@
 *A mostly reasonable approach to JavaScript*
 
 [![Downloads](https://img.shields.io/npm/dm/eslint-config-airbnb.svg)](https://www.npmjs.com/package/eslint-config-airbnb)
+[![Downloads](https://img.shields.io/npm/dm/eslint-config-airbnb-base.svg)](https://www.npmjs.com/package/eslint-config-airbnb-base)
 [![Gitter](https://badges.gitter.im/Join Chat.svg)](https://gitter.im/airbnb/javascript?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge)
 
 Other Style Guides
diff --git a/linters/README.md b/linters/README.md
deleted file mode 100644
index 1deac701c7..0000000000
--- a/linters/README.md
+++ /dev/null
@@ -1,11 +0,0 @@
-## `.eslintrc`
-
-Our `.eslintrc` requires the following NPM packages:
-
-```
-npm install --save-dev \
-  eslint-config-airbnb \
-  eslint \
-  babel-eslint \
-  eslint-plugin-react
-```
diff --git a/package.json b/package.json
index dc0225dc08..ff8167fad5 100644
--- a/package.json
+++ b/package.json
@@ -3,8 +3,7 @@
   "version": "2.0.0",
   "description": "A mostly reasonable approach to JavaScript.",
   "scripts": {
-    "test": "echo \"Error: no test specified\" && exit 1",
-    "publish-all": "npm publish && cd ./packages/eslint-config-airbnb && npm publish"
+    "test": "echo \"Error: no test specified\" && exit 1"
   },
   "repository": {
     "type": "git",
diff --git a/packages/eslint-config-airbnb-base/.eslintrc b/packages/eslint-config-airbnb-base/.eslintrc
new file mode 100644
index 0000000000..6c8556be3b
--- /dev/null
+++ b/packages/eslint-config-airbnb-base/.eslintrc
@@ -0,0 +1,8 @@
+{
+  "extends": "./index.js",
+  "rules": {
+    // disable requiring trailing commas because it might be nice to revert to
+    // being JSON at some point, and I don't want to make big changes now.
+    "comma-dangle": 0
+  }
+}
diff --git a/packages/eslint-config-airbnb-base/CHANGELOG.md b/packages/eslint-config-airbnb-base/CHANGELOG.md
new file mode 100644
index 0000000000..4bcc52ba24
--- /dev/null
+++ b/packages/eslint-config-airbnb-base/CHANGELOG.md
@@ -0,0 +1,3 @@
+1.0.0 / 2016-04-16
+==================
+ - Initial commmit; moved content over from `eslint-config-airbnb` package.
diff --git a/packages/eslint-config-airbnb-base/README.md b/packages/eslint-config-airbnb-base/README.md
new file mode 100644
index 0000000000..d7f1c336b6
--- /dev/null
+++ b/packages/eslint-config-airbnb-base/README.md
@@ -0,0 +1,33 @@
+# eslint-config-airbnb-base
+
+[![npm version](https://badge.fury.io/js/eslint-config-airbnb-base.svg)](http://badge.fury.io/js/eslint-config-airbnb-base)
+
+This package provides Airbnb's base JS .eslintrc as an extensible shared config.
+
+## Usage
+
+We export two ESLint configurations for your usage.
+
+### eslint-config-airbnb-base
+
+Our default export contains all of our ESLint rules, including ECMAScript 6+ and React. It requires `eslint` and `eslint-plugin-import`.
+
+1. `npm install --save-dev eslint-config-airbnb-base eslint-plugin-import eslint`
+2. add `"extends": "airbnb-base"` to your .eslintrc
+
+### eslint-config-airbnb-base/legacy
+
+Lints ES5 and below. Requires `eslint` and `eslint-plugin-import`.
+
+1. `npm install --save-dev eslint-config-airbnb-base eslint-plugin-import eslint`
+2. add `"extends": "airbnb-base/legacy"` to your .eslintrc
+
+See [Airbnb's overarching ESLint config](https://npmjs.com/eslint-config-airbnb), [Airbnb's Javascript styleguide](https://github.com/airbnb/javascript), and the [ESlint config docs](http://eslint.org/docs/user-guide/configuring#extending-configuration-files) for more information.
+
+## Improving this config
+
+Consider adding test cases if you're making complicated rules changes, like anything involving regexes. Perhaps in a distant future, we could use literate programming to structure our README as test cases for our .eslintrc?
+
+You can run tests with `npm test`.
+
+You can make sure this module lints with itself using `npm run lint`.
diff --git a/packages/eslint-config-airbnb-base/index.js b/packages/eslint-config-airbnb-base/index.js
new file mode 100644
index 0000000000..eacb0ed394
--- /dev/null
+++ b/packages/eslint-config-airbnb-base/index.js
@@ -0,0 +1,13 @@
+module.exports = {
+  extends: [
+    './legacy',
+    './rules/es6',
+  ].map(require.resolve),
+  parserOptions: {
+    ecmaVersion: 7,
+    sourceType: 'module',
+  },
+  rules: {
+    strict: 2,
+  }
+};
diff --git a/packages/eslint-config-airbnb-base/legacy.js b/packages/eslint-config-airbnb-base/legacy.js
new file mode 100644
index 0000000000..51786e8e04
--- /dev/null
+++ b/packages/eslint-config-airbnb-base/legacy.js
@@ -0,0 +1,20 @@
+module.exports = {
+  extends: [
+    './rules/best-practices',
+    './rules/errors',
+    './rules/legacy',
+    './rules/node',
+    './rules/style',
+    './rules/variables'
+  ].map(require.resolve),
+  env: {
+    browser: true,
+    node: true,
+    amd: false,
+    mocha: false,
+    jasmine: false
+  },
+  ecmaFeatures: {},
+  globals: {},
+  rules: {}
+};
diff --git a/packages/eslint-config-airbnb-base/package.json b/packages/eslint-config-airbnb-base/package.json
new file mode 100644
index 0000000000..4b943ade7f
--- /dev/null
+++ b/packages/eslint-config-airbnb-base/package.json
@@ -0,0 +1,56 @@
+{
+  "name": "eslint-config-airbnb-base",
+  "version": "1.0.0",
+  "description": "Airbnb's base JS ESLint config, following our styleguide",
+  "main": "index.js",
+  "scripts": {
+    "lint": "eslint .",
+    "tests-only": "babel-tape-runner ./test/test-*.js",
+    "pretest": "eslint-find-rules --unused",
+    "test": "npm run --silent lint && npm run --silent tests-only"
+  },
+  "repository": {
+    "type": "git",
+    "url": "https://github.com/airbnb/javascript"
+  },
+  "keywords": [
+    "eslint",
+    "eslintconfig",
+    "config",
+    "airbnb",
+    "javascript",
+    "styleguide"
+  ],
+  "author": "Jake Teton-Landis (https://twitter.com/@jitl)",
+  "contributors": [
+    {
+      "name": "Jake Teton-Landis",
+      "url": "https://twitter.com/jitl"
+    },
+    {
+      "name": "Jordan Harband",
+      "email": "ljharb@gmail.com",
+      "url": "http://ljharb.codes"
+    },
+    {
+      "name": "Harrison Shoff",
+      "url": "https://twitter.com/hshoff"
+    }
+  ],
+  "license": "MIT",
+  "bugs": {
+    "url": "https://github.com/airbnb/javascript/issues"
+  },
+  "homepage": "https://github.com/airbnb/javascript",
+  "devDependencies": {
+    "babel-tape-runner": "^1.3.1",
+    "eslint": "^2.8.0",
+    "eslint-find-rules": "^1.3.0",
+    "eslint-plugin-import": "^1.5.0",
+    "tape": "^4.5.1"
+  },
+  "peerDependencies": {
+    "eslint": "^2.8.0",
+    "eslint-plugin-import": "^1.5.0"
+  }
+}
diff --git a/packages/eslint-config-airbnb-base/rules/.eslintrc.json b/packages/eslint-config-airbnb-base/rules/.eslintrc.json
new file mode 100644
index 0000000000..de68aa25ca
--- /dev/null
+++ b/packages/eslint-config-airbnb-base/rules/.eslintrc.json
@@ -0,0 +1,5 @@
+{
+  "rules": {
+    "quote-props": 0
+  }
+}
diff --git a/packages/eslint-config-airbnb/rules/best-practices.js b/packages/eslint-config-airbnb-base/rules/best-practices.js
similarity index 100%
rename from packages/eslint-config-airbnb/rules/best-practices.js
rename to packages/eslint-config-airbnb-base/rules/best-practices.js
diff --git a/packages/eslint-config-airbnb/rules/errors.js b/packages/eslint-config-airbnb-base/rules/errors.js
similarity index 100%
rename from packages/eslint-config-airbnb/rules/errors.js
rename to packages/eslint-config-airbnb-base/rules/errors.js
diff --git a/packages/eslint-config-airbnb/rules/es6.js b/packages/eslint-config-airbnb-base/rules/es6.js
similarity index 99%
rename from packages/eslint-config-airbnb/rules/es6.js
rename to packages/eslint-config-airbnb-base/rules/es6.js
index 080d12039d..d0f7577a9e 100644
--- a/packages/eslint-config-airbnb/rules/es6.js
+++ b/packages/eslint-config-airbnb-base/rules/es6.js
@@ -6,7 +6,6 @@ module.exports = {
     'ecmaVersion': 6,
     'sourceType': 'module',
     'ecmaFeatures': {
-      'jsx': true,
       'generators': false,
       'objectLiteralDuplicateProperties': false
     }
diff --git a/packages/eslint-config-airbnb/rules/legacy.js b/packages/eslint-config-airbnb-base/rules/legacy.js
similarity index 100%
rename from packages/eslint-config-airbnb/rules/legacy.js
rename to packages/eslint-config-airbnb-base/rules/legacy.js
diff --git a/packages/eslint-config-airbnb/rules/node.js b/packages/eslint-config-airbnb-base/rules/node.js
similarity index 100%
rename from packages/eslint-config-airbnb/rules/node.js
rename to packages/eslint-config-airbnb-base/rules/node.js
diff --git a/packages/eslint-config-airbnb/rules/strict.js b/packages/eslint-config-airbnb-base/rules/strict.js
similarity index 100%
rename from packages/eslint-config-airbnb/rules/strict.js
rename to packages/eslint-config-airbnb-base/rules/strict.js
diff --git a/packages/eslint-config-airbnb/rules/style.js b/packages/eslint-config-airbnb-base/rules/style.js
similarity index 99%
rename from packages/eslint-config-airbnb/rules/style.js
rename to packages/eslint-config-airbnb-base/rules/style.js
index d10ee7fb89..2144d64b56 100644
--- a/packages/eslint-config-airbnb/rules/style.js
+++ b/packages/eslint-config-airbnb-base/rules/style.js
@@ -31,7 +31,7 @@ module.exports = {
     'indent': [2, 2, { 'SwitchCase': 1, 'VariableDeclarator': 1 }],
     // specify whether double or single quotes should be used in JSX attributes
     // http://eslint.org/docs/rules/jsx-quotes
-    'jsx-quotes': [2, 'prefer-double'],
+    'jsx-quotes': 0,
     // enforces spacing between keys and values in object literal properties
     'key-spacing': [2, { 'beforeColon': false, 'afterColon': true }],
     // require a space before & after certain keywords
diff --git a/packages/eslint-config-airbnb/rules/variables.js b/packages/eslint-config-airbnb-base/rules/variables.js
similarity index 100%
rename from packages/eslint-config-airbnb/rules/variables.js
rename to packages/eslint-config-airbnb-base/rules/variables.js
diff --git a/packages/eslint-config-airbnb-base/test/.eslintrc b/packages/eslint-config-airbnb-base/test/.eslintrc
new file mode 100644
index 0000000000..7f79874e41
--- /dev/null
+++ b/packages/eslint-config-airbnb-base/test/.eslintrc
@@ -0,0 +1,9 @@
+{
+  "rules": {
+    // disabled because I find it tedious to write tests while following this
+    // rule
+    "no-shadow": 0,
+    // tests uses `t` for tape
+    "id-length": [2, {"min": 2, "properties": "never", "exceptions": ["t"]}]
+  }
+}
diff --git a/packages/eslint-config-airbnb-base/test/test-base.js b/packages/eslint-config-airbnb-base/test/test-base.js
new file mode 100644
index 0000000000..e4b2e6a406
--- /dev/null
+++ b/packages/eslint-config-airbnb-base/test/test-base.js
@@ -0,0 +1,29 @@
+import fs from 'fs';
+import path from 'path';
+import test from 'tape';
+
+const index = require('../');
+
+const files = { index };
+
+fs.readdirSync(path.join(__dirname, '../rules')).forEach(name => {
+  files[name] = require(`../rules/${name}`); // eslint-disable-line global-require
+});
+
+Object.keys(files).forEach(name => {
+  const config = files[name];
+
+  test(`${name}: does not reference react`, t => {
+    t.plan(2);
+
+    // scan plugins for react and fail if it is found
+    const hasReactPlugin = Object.prototype.hasOwnProperty.call(config, 'plugins') &&
+      config.plugins.indexOf('react') !== -1;
+    t.notOk(hasReactPlugin, 'there is no react plugin');
+
+    // scan rules for react/ and fail if any exist
+    const reactRuleIds = Object.keys(config.rules)
+      .filter(ruleId => ruleId.indexOf('react/') === 0);
+    t.deepEquals(reactRuleIds, [], 'there are no react/ rules');
+  });
+});
diff --git a/packages/eslint-config-airbnb/README.md b/packages/eslint-config-airbnb/README.md
index f251f47b27..bd10ec458d 100644
--- a/packages/eslint-config-airbnb/README.md
+++ b/packages/eslint-config-airbnb/README.md
@@ -10,27 +10,18 @@ We export three ESLint configurations for your usage.
 
 ### eslint-config-airbnb
 
-Our default export contains all of our ESLint rules, including ECMAScript 6+
-and React. It requires `eslint`, `eslint-plugin-import`, `eslint-plugin-react`,
-and `eslint-plugin-jsx-a11y`.
+Our default export contains all of our ESLint rules, including ECMAScript 6+ and React. It requires `eslint`, `eslint-config-airbnb-base`, `eslint-plugin-import`, `eslint-plugin-react`, and `eslint-plugin-jsx-a11y`.
 
-1. `npm install --save-dev eslint-config-airbnb eslint-plugin-import eslint-plugin-react eslint-plugin-jsx-a11y eslint`
+1. `npm install --save-dev eslint-config-airbnb eslint-config-airbnb-base eslint-plugin-import eslint-plugin-react eslint-plugin-jsx-a11y eslint`
 2. add `"extends": "airbnb"` to your .eslintrc
 
 ### eslint-config-airbnb/base
 
-Lints ES6+ but does not lint React. Requires `eslint` and
-`eslint-plugin-import`.
-
-1. `npm install --save-dev eslint-config-airbnb eslint-plugin-import eslint`
-2. add `"extends": "airbnb/base"` to your .eslintrc
+This entry point is deprecated. See [eslint-config-airbnb-base](https://npmjs.com/eslint-config-airbnb-base).
 
 ### eslint-config-airbnb/legacy
 
-Lints ES5 and below. Requires `eslint` and `eslint-plugin-import`.
-
-1. `npm install --save-dev eslint-config-airbnb eslint-plugin-import eslint`
-2. add `"extends": "airbnb/legacy"` to your .eslintrc
+This entry point is deprecated. See [eslint-config-airbnb-base](https://npmjs.com/eslint-config-airbnb-base).
 
 See [Airbnb's Javascript styleguide](https://github.com/airbnb/javascript) and
 the [ESlint config docs](http://eslint.org/docs/user-guide/configuring#extending-configuration-files)
@@ -38,9 +29,7 @@ for more information.
 
 ## Improving this config
 
-Consider adding test cases if you're making complicated rules changes, like
-anything involving regexes. Perhaps in a distant future, we could use literate
-programming to structure our README as test cases for our .eslintrc?
+Consider adding test cases if you're making complicated rules changes, like anything involving regexes. Perhaps in a distant future, we could use literate programming to structure our README as test cases for our .eslintrc?
 
 You can run tests with `npm test`.
 
diff --git a/packages/eslint-config-airbnb/base.js b/packages/eslint-config-airbnb/base.js
index 1cbfe6ff2d..bb1ea39118 100644
--- a/packages/eslint-config-airbnb/base.js
+++ b/packages/eslint-config-airbnb/base.js
@@ -1,7 +1,4 @@
 module.exports = {
-  extends: [
-    './legacy',
-    './rules/es6',
-  ].map(require.resolve),
-  rules: {}
+  extends: ['eslint-config-airbnb-base'].map(require.resolve),
+  rules: {},
 };
diff --git a/packages/eslint-config-airbnb/index.js b/packages/eslint-config-airbnb/index.js
index 3fa2b3495f..ddd3bfb712 100644
--- a/packages/eslint-config-airbnb/index.js
+++ b/packages/eslint-config-airbnb/index.js
@@ -1,7 +1,7 @@
 module.exports = {
   extends: [
-    './base',
-    './rules/strict',
+    'eslint-config-airbnb-base',
+    'eslint-config-airbnb-base/rules/strict',
     './rules/react',
     './rules/react-a11y',
   ].map(require.resolve),
diff --git a/packages/eslint-config-airbnb/legacy.js b/packages/eslint-config-airbnb/legacy.js
index 51786e8e04..e88f71224a 100644
--- a/packages/eslint-config-airbnb/legacy.js
+++ b/packages/eslint-config-airbnb/legacy.js
@@ -1,20 +1,4 @@
 module.exports = {
-  extends: [
-    './rules/best-practices',
-    './rules/errors',
-    './rules/legacy',
-    './rules/node',
-    './rules/style',
-    './rules/variables'
-  ].map(require.resolve),
-  env: {
-    browser: true,
-    node: true,
-    amd: false,
-    mocha: false,
-    jasmine: false
-  },
-  ecmaFeatures: {},
-  globals: {},
-  rules: {}
+  extends: ['eslint-config-airbnb-base/legacy'].map(require.resolve),
+  rules: {},
 };
diff --git a/packages/eslint-config-airbnb/package.json b/packages/eslint-config-airbnb/package.json
index 77b2939985..82cb0b0eea 100644
--- a/packages/eslint-config-airbnb/package.json
+++ b/packages/eslint-config-airbnb/package.json
@@ -46,6 +46,8 @@
     "babel-tape-runner": "^1.3.1",
     "eslint": "^2.8.0",
     "eslint-find-rules": "^1.3.0",
+    "eslint-config-airbnb-base": "^1.0.0",
+    "eslint-plugin-jsx-a11y": "^0.6.2",
     "eslint-plugin-import": "^1.5.0",
     "eslint-plugin-jsx-a11y": "^0.6.2",
     "eslint-plugin-react": "^5.0.1",
@@ -54,6 +56,7 @@
   },
   "peerDependencies": {
     "eslint": "^2.8.0",
+    "eslint-config-airbnb-base": "^1.0.0",
     "eslint-plugin-jsx-a11y": "^0.6.2",
     "eslint-plugin-import": "^1.5.0",
     "eslint-plugin-react": "^5.0.1"
diff --git a/packages/eslint-config-airbnb/rules/react.js b/packages/eslint-config-airbnb/rules/react.js
index 81f529f162..a611a35ca5 100644
--- a/packages/eslint-config-airbnb/rules/react.js
+++ b/packages/eslint-config-airbnb/rules/react.js
@@ -2,6 +2,11 @@ module.exports = {
   'plugins': [
     'react'
   ],
+  'parserOptions': {
+    'ecmaFeatures': {
+      'jsx': true,
+    },
+  },
   'ecmaFeatures': {
     'jsx': true
   },

From 763416260ab791d2efd2cf175100d8e506bb7eaa Mon Sep 17 00:00:00 2001
From: Victor Brouk <vintik@gmail.com>
Date: Tue, 19 Apr 2016 15:33:09 -0700
Subject: [PATCH 0605/1591] [guide] fix broken deep link to 'testing--yup'

---
 README.md | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/README.md b/README.md
index 0b0b284915..ea3170b776 100644
--- a/README.md
+++ b/README.md
@@ -2592,7 +2592,7 @@ Other Style Guides
 ## Testing
 
   <a name="testing--yup"></a><a name="28.1"></a>
-  - [28.1](#esting--yup) **Yup.**
+  - [28.1](#testing--yup) **Yup.**
 
     ```javascript
     function foo() {

From 02414502b6b8ad31bee50a8e999a27b68b16dda1 Mon Sep 17 00:00:00 2001
From: Joe Lencioni <joe.lencioni@airbnb.com>
Date: Tue, 19 Apr 2016 17:12:11 -0700
Subject: [PATCH 0606/1591] Upgrade eslint-plugin-jsx-a11y 0.6.2 -> 1.0.1

This new version renames most of the rules, and adds a number of new
rules that we will need to evaluate. I simply added them for now with
TODO comments so we remember to come back to them and make decisions
about each one. I also alphabetized the list to make it easier to find
what you are looking for.
---
 packages/eslint-config-airbnb/package.json    |  5 +-
 .../eslint-config-airbnb/rules/react-a11y.js  | 86 +++++++++++++------
 react/README.md                               |  6 +-
 3 files changed, 67 insertions(+), 30 deletions(-)

diff --git a/packages/eslint-config-airbnb/package.json b/packages/eslint-config-airbnb/package.json
index 82cb0b0eea..dadd881473 100644
--- a/packages/eslint-config-airbnb/package.json
+++ b/packages/eslint-config-airbnb/package.json
@@ -47,9 +47,8 @@
     "eslint": "^2.8.0",
     "eslint-find-rules": "^1.3.0",
     "eslint-config-airbnb-base": "^1.0.0",
-    "eslint-plugin-jsx-a11y": "^0.6.2",
     "eslint-plugin-import": "^1.5.0",
-    "eslint-plugin-jsx-a11y": "^0.6.2",
+    "eslint-plugin-jsx-a11y": "^1.0.1",
     "eslint-plugin-react": "^5.0.1",
     "react": "*",
     "tape": "^4.5.1"
@@ -57,7 +56,7 @@
   "peerDependencies": {
     "eslint": "^2.8.0",
     "eslint-config-airbnb-base": "^1.0.0",
-    "eslint-plugin-jsx-a11y": "^0.6.2",
+    "eslint-plugin-jsx-a11y": "^1.0.1",
     "eslint-plugin-import": "^1.5.0",
     "eslint-plugin-react": "^5.0.1"
   }
diff --git a/packages/eslint-config-airbnb/rules/react-a11y.js b/packages/eslint-config-airbnb/rules/react-a11y.js
index 86475656ba..eead8f84b5 100644
--- a/packages/eslint-config-airbnb/rules/react-a11y.js
+++ b/packages/eslint-config-airbnb/rules/react-a11y.js
@@ -7,43 +7,81 @@ module.exports = {
     'jsx': true
   },
   'rules': {
-    // Prevent use of `accessKey`
-    // https://github.com/evcohen/eslint-plugin-jsx-a11y/blob/master/docs/rules/no-access-key.md
-    'jsx-a11y/no-access-key': 2,
+    // Require ARIA roles to be valid and non-abstract
+    // https://github.com/evcohen/eslint-plugin-jsx-a11y/blob/master/docs/rules/aria-role.md
+    'jsx-a11y/aria-role': 2,
+
+    // Enforce all aria-* props are valid.
+    // TODO: evaluate
+    // https://github.com/evcohen/eslint-plugin-jsx-a11y/blob/master/docs/rules/aria-props.md
+    'jsx-a11y/aria-props': 0,
+
+    // Enforce ARIA state and property values are valid.
+    // TODO: evaluate
+    // https://github.com/evcohen/eslint-plugin-jsx-a11y/blob/master/docs/rules/aria-proptypes.md
+    'jsx-a11y/aria-proptypes': 0,
+
+    // Enforce that elements that do not support ARIA roles, states, and
+    // properties do not have those attributes.
+    // TODO: evaluate
+    // https://github.com/evcohen/eslint-plugin-jsx-a11y/blob/master/docs/rules/aria-unsupported-elements.md
+    'jsx-a11y/aria-unsupported-elements': 0,
+
+    // disallow href "#"
+    // TODO: enable
+    // https://github.com/evcohen/eslint-plugin-jsx-a11y/blob/master/docs/rules/href-no-hash.md
+    'jsx-a11y/href-no-hash': 0,
 
     // Require <img> to have a non-empty `alt` prop, or role="presentation"
-    // https://github.com/evcohen/eslint-plugin-jsx-a11y/blob/master/docs/rules/img-uses-alt.md
-    'jsx-a11y/img-uses-alt': 2,
+    // https://github.com/evcohen/eslint-plugin-jsx-a11y/blob/master/docs/rules/img-has-alt.md
+    'jsx-a11y/img-has-alt': 2,
 
     // Prevent img alt text from containing redundant words like "image", "picture", or "photo"
-    // https://github.com/evcohen/eslint-plugin-jsx-a11y/blob/master/docs/rules/redundant-alt.md
-    'jsx-a11y/redundant-alt': 2,
-
-    // Require ARIA roles to be valid and non-abstract
-    // https://github.com/evcohen/eslint-plugin-jsx-a11y/blob/master/docs/rules/valid-aria-role.md
-    'jsx-a11y/valid-aria-role': 2,
+    // https://github.com/evcohen/eslint-plugin-jsx-a11y/blob/master/docs/rules/img-redundant-alt.md
+    'jsx-a11y/img-redundant-alt': 2,
 
     // require that JSX labels use "htmlFor"
     // TODO: enable
-    // https://github.com/evcohen/eslint-plugin-jsx-a11y/blob/master/docs/rules/label-uses-for.md
-    'jsx-a11y/label-uses-for': 0,
+    // https://github.com/evcohen/eslint-plugin-jsx-a11y/blob/master/docs/rules/label-has-for.md
+    'jsx-a11y/label-has-for': 0,
 
     // require that mouseover/out come with focus/blur, for keyboard-only users
     // TODO: enable?
-    // https://github.com/evcohen/eslint-plugin-jsx-a11y/blob/master/docs/rules/mouse-events-map-to-key-events.md
-    'jsx-a11y/mouse-events-map-to-key-events': 0,
+    // https://github.com/evcohen/eslint-plugin-jsx-a11y/blob/master/docs/rules/mouse-events-have-key-events.md
+    'jsx-a11y/mouse-events-have-key-events': 0,
 
-    // disallow href "#"
-    // TODO: enable
-    // https://github.com/evcohen/eslint-plugin-jsx-a11y/blob/master/docs/rules/no-hash-href.md
-    'jsx-a11y/no-hash-href': 0,
+    // Prevent use of `accessKey`
+    // https://github.com/evcohen/eslint-plugin-jsx-a11y/blob/master/docs/rules/no-access-key.md
+    'jsx-a11y/no-access-key': 2,
+
+    // require onBlur instead of onChange
+    // https://github.com/evcohen/eslint-plugin-jsx-a11y/blob/master/docs/rules/no-onchange.md
+    'jsx-a11y/no-onchange': 0,
+
+    // Enforce that elements with onClick handlers must be focusable.
+    // TODO: evaluate
+    // https://github.com/evcohen/eslint-plugin-jsx-a11y/blob/master/docs/rules/onclick-has-focus.md
+    'jsx-a11y/onclick-has-focus': 0,
 
     // require things with onClick to have an aria role
-    // https://github.com/evcohen/eslint-plugin-jsx-a11y/blob/master/docs/rules/onclick-uses-role.md
-    'jsx-a11y/onclick-uses-role': 0,
+    // https://github.com/evcohen/eslint-plugin-jsx-a11y/blob/master/docs/rules/onclick-has-role.md
+    'jsx-a11y/onclick-has-role': 0,
 
-    // require onBlur instead of onChange
-    // https://github.com/evcohen/eslint-plugin-jsx-a11y/blob/master/docs/rules/use-onblur-not-onchange.md
-    'jsx-a11y/use-onblur-not-onchange': 0,
+    // Enforce that elements with ARIA roles must have all required attributes
+    // for that role.
+    // TODO: evaluate
+    // https://github.com/evcohen/eslint-plugin-jsx-a11y/blob/master/docs/rules/role-has-required-aria-props.md
+    'jsx-a11y/role-has-required-aria-props': 0,
+
+    // Enforce that elements with explicit or implicit roles defined contain
+    // only aria-* properties supported by that role.
+    // TODO: evaluate
+    // https://github.com/evcohen/eslint-plugin-jsx-a11y/blob/master/docs/rules/role-supports-aria-props.md
+    'jsx-a11y/role-supports-aria-props': 0,
+
+    // Enforce tabIndex value is not greater than zero.
+    // TODO: evaluate
+    // https://github.com/evcohen/eslint-plugin-jsx-a11y/blob/master/docs/rules/tabindex-no-positive.md
+    'jsx-a11y/tabindex-no-positive': 0,
   },
 };
diff --git a/react/README.md b/react/README.md
index bdbd27eb11..6d71a16e99 100644
--- a/react/README.md
+++ b/react/README.md
@@ -216,7 +216,7 @@
     />
     ```
 
-  - Always include an `alt` prop on `<img>` tags. If the image is presentational, `alt` can be an empty string or the `<img>` must have `role="presentation"`. eslint: [`jsx-a11y/img-uses-alt`](https://github.com/evcohen/eslint-plugin-jsx-a11y/blob/master/docs/rules/img-uses-alt.md)
+  - Always include an `alt` prop on `<img>` tags. If the image is presentational, `alt` can be an empty string or the `<img>` must have `role="presentation"`. eslint: [`jsx-a11y/img-has-alt`](https://github.com/evcohen/eslint-plugin-jsx-a11y/blob/master/docs/rules/img-has-alt.md)
 
     ```jsx
     // bad
@@ -232,7 +232,7 @@
     <img src="hello.jpg" role="presentation" />
     ```
 
-  - Do not use words like "image", "photo", or "picture" in `<img>` `alt` props. eslint: [`jsx-a11y/redundant-alt`](https://github.com/evcohen/eslint-plugin-jsx-a11y/blob/master/docs/rules/img-uses-alt.md)
+  - Do not use words like "image", "photo", or "picture" in `<img>` `alt` props. eslint: [`jsx-a11y/img-redundant-alt`](https://github.com/evcohen/eslint-plugin-jsx-a11y/blob/master/docs/rules/img-redundant-alt.md)
 
   > Why? Screenreaders already announce `img` elements as images, so there is no need to include this information in the alt text.
 
@@ -244,7 +244,7 @@
     <img src="hello.jpg" alt="Me waving hello" />
     ```
 
-  - Use only valid, non-abstract [ARIA roles](https://www.w3.org/TR/wai-aria/roles#role_definitions). eslint: [`jsx-a11y/valid-aria-role`](https://github.com/evcohen/eslint-plugin-jsx-a11y/blob/master/docs/rules/valid-aria-role.md)
+  - Use only valid, non-abstract [ARIA roles](https://www.w3.org/TR/wai-aria/roles#role_definitions). eslint: [`jsx-a11y/aria-role`](https://github.com/evcohen/eslint-plugin-jsx-a11y/blob/master/docs/rules/aria-role.md)
 
     ```jsx
     // bad - not an ARIA role

From 13cddaf51e3479ba208a7d13dd01dbca1ba30463 Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Tue, 19 Apr 2016 20:17:05 -0700
Subject: [PATCH 0607/1591] [eslint config] [breaking] enable
 `react/jsx-curly-spacing` rule.

Fixes #693.
---
 packages/eslint-config-airbnb/rules/react.js | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/packages/eslint-config-airbnb/rules/react.js b/packages/eslint-config-airbnb/rules/react.js
index a611a35ca5..a3145760a4 100644
--- a/packages/eslint-config-airbnb/rules/react.js
+++ b/packages/eslint-config-airbnb/rules/react.js
@@ -27,7 +27,7 @@ module.exports = {
     'react/jsx-closing-bracket-location': [2, 'line-aligned'],
     // Enforce or disallow spaces inside of curly braces in JSX attributes
     // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/jsx-curly-spacing.md
-    'react/jsx-curly-spacing': [0, 'never', { 'allowMultiline': true }],
+    'react/jsx-curly-spacing': [2, 'never', { 'allowMultiline': true }],
     // Enforce event handler naming conventions in JSX
     // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/jsx-handler-names.md
     'react/jsx-handler-names': [0, {

From 2dfd520930634bb381ca6df7817c3bc65dc08a93 Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Tue, 19 Apr 2016 20:54:45 -0700
Subject: [PATCH 0608/1591] [eslint config] [react] Add guide section on
 `react/jsx-curly-spacing`

Per #693.
---
 react/README.md | 10 ++++++++++
 1 file changed, 10 insertions(+)

diff --git a/react/README.md b/react/README.md
index 6d71a16e99..a2f26c9ca8 100644
--- a/react/README.md
+++ b/react/README.md
@@ -184,6 +184,16 @@
     <Foo />
     ```
 
+  - Do not pad JSX curly braces with spaces. eslint: [`react/jsx-curly-spacing`](https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/jsx-curly-spacing.md)
+
+    ```jsx
+    // bad
+    <Foo bar={ baz } />
+
+    // good
+    <Foo bar={baz} />
+    ```
+
 ## Props
 
   - Always use camelCase for prop names.

From d06147d279549c08dacd2ef4835cbccf2b1f1159 Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Tue, 19 Apr 2016 22:15:39 -0700
Subject: [PATCH 0609/1591] [eslint-config] [base] [semver-patch] Allow `==
 null`.

Closes #542.
---
 packages/eslint-config-airbnb-base/rules/best-practices.js | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/packages/eslint-config-airbnb-base/rules/best-practices.js b/packages/eslint-config-airbnb-base/rules/best-practices.js
index 4543fe9ecd..a999a1c176 100644
--- a/packages/eslint-config-airbnb-base/rules/best-practices.js
+++ b/packages/eslint-config-airbnb-base/rules/best-practices.js
@@ -20,7 +20,8 @@ module.exports = {
     // enforces consistent newlines before or after dots
     'dot-location': 0,
     // require the use of === and !==
-    'eqeqeq': 2,
+    // http://eslint.org/docs/rules/eqeqeq
+    'eqeqeq': [2, 'allow-null'],
     // make sure for-in loops have an if statement
     'guard-for-in': 2,
     // Blacklist certain identifiers to prevent them being used

From 37e1c3c6c9bb814574c186698834e097721177e9 Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Tue, 19 Apr 2016 22:20:40 -0700
Subject: [PATCH 0610/1591] [eslint config] [base] v1.0.1

---
 packages/eslint-config-airbnb-base/CHANGELOG.md | 6 +++++-
 packages/eslint-config-airbnb-base/package.json | 2 +-
 2 files changed, 6 insertions(+), 2 deletions(-)

diff --git a/packages/eslint-config-airbnb-base/CHANGELOG.md b/packages/eslint-config-airbnb-base/CHANGELOG.md
index 4bcc52ba24..dfe3bf2747 100644
--- a/packages/eslint-config-airbnb-base/CHANGELOG.md
+++ b/packages/eslint-config-airbnb-base/CHANGELOG.md
@@ -1,3 +1,7 @@
-1.0.0 / 2016-04-16
+1.0.1 / 2016-04-19
+==================
+ - [patch: loosen rules] Allow `== null` (#542)
+
+1.0.0 / 2016-04-19
 ==================
  - Initial commmit; moved content over from `eslint-config-airbnb` package.
diff --git a/packages/eslint-config-airbnb-base/package.json b/packages/eslint-config-airbnb-base/package.json
index 4b943ade7f..d1e5fa8b3a 100644
--- a/packages/eslint-config-airbnb-base/package.json
+++ b/packages/eslint-config-airbnb-base/package.json
@@ -1,6 +1,6 @@
 {
   "name": "eslint-config-airbnb-base",
-  "version": "1.0.0",
+  "version": "1.0.1",
   "description": "Airbnb's base JS ESLint config, following our styleguide",
   "main": "index.js",
   "scripts": {

From 897732f6f0f711d12e9cbe8ecab10435c6c3835e Mon Sep 17 00:00:00 2001
From: Oskar Cieslik <oskar.cieslik@gmail.com>
Date: Wed, 20 Apr 2016 10:39:06 +0200
Subject: [PATCH 0611/1591] Add arrow function returning object.

---
 README.md | 7 +++++--
 1 file changed, 5 insertions(+), 2 deletions(-)

diff --git a/README.md b/README.md
index ea3170b776..9245c33a54 100644
--- a/README.md
+++ b/README.md
@@ -809,8 +809,6 @@ Other Style Guides
 
     > Why? Syntactic sugar. It reads well when multiple functions are chained together.
 
-    > Why not? If you plan on returning an object.
-
     ```javascript
     // bad
     [1, 2, 3].map(number => {
@@ -826,6 +824,11 @@ Other Style Guides
       const nextNumber = number + 1;
       return `A string containing the ${nextNumber}.`;
     });
+
+    // good
+    [1, 2, 3].map((number, index) => ({
+      index: number
+    }));
     ```
 
   <a name="arrows--paren-wrap"></a><a name="8.3"></a>

From 3c915dd6860e03e13fae55a42894d95b355e1058 Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Wed, 20 Apr 2016 11:15:10 -0700
Subject: [PATCH 0612/1591] =?UTF-8?q?[eslint=20config]=20[base]=20[patch]?=
 =?UTF-8?q?=20remove=20=E2=80=9Cbreak=E2=80=9D=20statement=20from=20restri?=
 =?UTF-8?q?cted=20syntax.?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

Per https://github.com/airbnb/javascript/issues/840#issuecomment-212541010
---
 packages/eslint-config-airbnb-base/rules/best-practices.js | 1 -
 1 file changed, 1 deletion(-)

diff --git a/packages/eslint-config-airbnb-base/rules/best-practices.js b/packages/eslint-config-airbnb-base/rules/best-practices.js
index a999a1c176..9deb2c2136 100644
--- a/packages/eslint-config-airbnb-base/rules/best-practices.js
+++ b/packages/eslint-config-airbnb-base/rules/best-practices.js
@@ -117,7 +117,6 @@ module.exports = {
     // http://eslint.org/docs/rules/no-restricted-syntax
     'no-restricted-syntax': [
       2,
-      'BreakStatement',
       'DebuggerStatement',
       'ForInStatement',
       'LabeledStatement',

From 0207503befee3431797d5ef1600ccc373129dc77 Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Wed, 20 Apr 2016 11:19:53 -0700
Subject: [PATCH 0613/1591] [eslint config] [base] v1.0.2

---
 packages/eslint-config-airbnb-base/CHANGELOG.md | 4 ++++
 packages/eslint-config-airbnb-base/package.json | 2 +-
 2 files changed, 5 insertions(+), 1 deletion(-)

diff --git a/packages/eslint-config-airbnb-base/CHANGELOG.md b/packages/eslint-config-airbnb-base/CHANGELOG.md
index dfe3bf2747..acb6e298f5 100644
--- a/packages/eslint-config-airbnb-base/CHANGELOG.md
+++ b/packages/eslint-config-airbnb-base/CHANGELOG.md
@@ -1,3 +1,7 @@
+1.0.2 / 2016-04-20
+==================
+ - [patch: loosen rules] Allow `break` (#840)
+
 1.0.1 / 2016-04-19
 ==================
  - [patch: loosen rules] Allow `== null` (#542)
diff --git a/packages/eslint-config-airbnb-base/package.json b/packages/eslint-config-airbnb-base/package.json
index d1e5fa8b3a..33d49307f0 100644
--- a/packages/eslint-config-airbnb-base/package.json
+++ b/packages/eslint-config-airbnb-base/package.json
@@ -1,6 +1,6 @@
 {
   "name": "eslint-config-airbnb-base",
-  "version": "1.0.1",
+  "version": "1.0.2",
   "description": "Airbnb's base JS ESLint config, following our styleguide",
   "main": "index.js",
   "scripts": {

From f1ab4805b6c9df7a8bae8aabc64ab6d8a378b5f7 Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Wed, 20 Apr 2016 11:24:52 -0700
Subject: [PATCH 0614/1591] [eslint config] [deps] update `eslint-find-rules`,
 `eslint-config-airbnb-base`

---
 packages/eslint-config-airbnb/package.json | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/packages/eslint-config-airbnb/package.json b/packages/eslint-config-airbnb/package.json
index dadd881473..33ac0d60ec 100644
--- a/packages/eslint-config-airbnb/package.json
+++ b/packages/eslint-config-airbnb/package.json
@@ -45,8 +45,8 @@
   "devDependencies": {
     "babel-tape-runner": "^1.3.1",
     "eslint": "^2.8.0",
-    "eslint-find-rules": "^1.3.0",
-    "eslint-config-airbnb-base": "^1.0.0",
+    "eslint-find-rules": "^1.4.0",
+    "eslint-config-airbnb-base": "^1.0.2",
     "eslint-plugin-import": "^1.5.0",
     "eslint-plugin-jsx-a11y": "^1.0.1",
     "eslint-plugin-react": "^5.0.1",
@@ -55,7 +55,7 @@
   },
   "peerDependencies": {
     "eslint": "^2.8.0",
-    "eslint-config-airbnb-base": "^1.0.0",
+    "eslint-config-airbnb-base": "^1.0.2",
     "eslint-plugin-jsx-a11y": "^1.0.1",
     "eslint-plugin-import": "^1.5.0",
     "eslint-plugin-react": "^5.0.1"

From d0ddba17c3f94221cf1983788bf2315e6293653e Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Wed, 20 Apr 2016 23:12:51 -0700
Subject: [PATCH 0615/1591] [eslint config] [base] [dev deps] update
 `eslint-find-rules`

---
 packages/eslint-config-airbnb-base/package.json | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/packages/eslint-config-airbnb-base/package.json b/packages/eslint-config-airbnb-base/package.json
index 33d49307f0..edb4e397ad 100644
--- a/packages/eslint-config-airbnb-base/package.json
+++ b/packages/eslint-config-airbnb-base/package.json
@@ -45,7 +45,7 @@
   "devDependencies": {
     "babel-tape-runner": "^1.3.1",
     "eslint": "^2.8.0",
-    "eslint-find-rules": "^1.3.0",
+    "eslint-find-rules": "^1.4.0",
     "eslint-plugin-import": "^1.5.0",
     "tape": "^4.5.1"
   },

From 277b08710f90aa7fdfd2ed82274b6186613625a1 Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Wed, 20 Apr 2016 16:35:12 -0700
Subject: [PATCH 0616/1591] [eslint config] [deps] update
 `eslint-plugin-jsx-a11y`

---
 packages/eslint-config-airbnb/package.json | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/packages/eslint-config-airbnb/package.json b/packages/eslint-config-airbnb/package.json
index 33ac0d60ec..0ae39e9f62 100644
--- a/packages/eslint-config-airbnb/package.json
+++ b/packages/eslint-config-airbnb/package.json
@@ -48,7 +48,7 @@
     "eslint-find-rules": "^1.4.0",
     "eslint-config-airbnb-base": "^1.0.2",
     "eslint-plugin-import": "^1.5.0",
-    "eslint-plugin-jsx-a11y": "^1.0.1",
+    "eslint-plugin-jsx-a11y": "^1.0.2",
     "eslint-plugin-react": "^5.0.1",
     "react": "*",
     "tape": "^4.5.1"
@@ -56,7 +56,7 @@
   "peerDependencies": {
     "eslint": "^2.8.0",
     "eslint-config-airbnb-base": "^1.0.2",
-    "eslint-plugin-jsx-a11y": "^1.0.1",
+    "eslint-plugin-jsx-a11y": "^1.0.2",
     "eslint-plugin-import": "^1.5.0",
     "eslint-plugin-react": "^5.0.1"
   }

From f0b6eea9d6059b3ef9e335b73901acac09d3e5f1 Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Wed, 20 Apr 2016 17:22:56 -0700
Subject: [PATCH 0617/1591] [eslint config] Make `eslint-config-airbnb-base` a
 regular dependency.

Per https://github.com/airbnb/javascript/pull/829#issuecomment-212559831
---
 packages/eslint-config-airbnb/README.md    | 4 ++--
 packages/eslint-config-airbnb/package.json | 5 +++--
 2 files changed, 5 insertions(+), 4 deletions(-)

diff --git a/packages/eslint-config-airbnb/README.md b/packages/eslint-config-airbnb/README.md
index bd10ec458d..2374c07a65 100644
--- a/packages/eslint-config-airbnb/README.md
+++ b/packages/eslint-config-airbnb/README.md
@@ -10,9 +10,9 @@ We export three ESLint configurations for your usage.
 
 ### eslint-config-airbnb
 
-Our default export contains all of our ESLint rules, including ECMAScript 6+ and React. It requires `eslint`, `eslint-config-airbnb-base`, `eslint-plugin-import`, `eslint-plugin-react`, and `eslint-plugin-jsx-a11y`.
+Our default export contains all of our ESLint rules, including ECMAScript 6+ and React. It requires `eslint`, ``eslint-plugin-import`, `eslint-plugin-react`, and `eslint-plugin-jsx-a11y`.
 
-1. `npm install --save-dev eslint-config-airbnb eslint-config-airbnb-base eslint-plugin-import eslint-plugin-react eslint-plugin-jsx-a11y eslint`
+1. `npm install --save-dev eslint-config-airbnb eslint-plugin-import eslint-plugin-react eslint-plugin-jsx-a11y eslint`
 2. add `"extends": "airbnb"` to your .eslintrc
 
 ### eslint-config-airbnb/base
diff --git a/packages/eslint-config-airbnb/package.json b/packages/eslint-config-airbnb/package.json
index 0ae39e9f62..701dabe206 100644
--- a/packages/eslint-config-airbnb/package.json
+++ b/packages/eslint-config-airbnb/package.json
@@ -42,11 +42,13 @@
     "url": "https://github.com/airbnb/javascript/issues"
   },
   "homepage": "https://github.com/airbnb/javascript",
+  "dependencies": {
+    "eslint-config-airbnb-base": "^1.0.2"
+  },
   "devDependencies": {
     "babel-tape-runner": "^1.3.1",
     "eslint": "^2.8.0",
     "eslint-find-rules": "^1.4.0",
-    "eslint-config-airbnb-base": "^1.0.2",
     "eslint-plugin-import": "^1.5.0",
     "eslint-plugin-jsx-a11y": "^1.0.2",
     "eslint-plugin-react": "^5.0.1",
@@ -55,7 +57,6 @@
   },
   "peerDependencies": {
     "eslint": "^2.8.0",
-    "eslint-config-airbnb-base": "^1.0.2",
     "eslint-plugin-jsx-a11y": "^1.0.2",
     "eslint-plugin-import": "^1.5.0",
     "eslint-plugin-react": "^5.0.1"

From 49c5f3d8624a52945f1267d5d365b54d85c0a151 Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Wed, 20 Apr 2016 23:15:48 -0700
Subject: [PATCH 0618/1591] [Tests] allow `npm install`/`npm test` in the
 project root to work in both sub packages.

---
 package.json | 7 ++++++-
 1 file changed, 6 insertions(+), 1 deletion(-)

diff --git a/package.json b/package.json
index ff8167fad5..06a454034b 100644
--- a/package.json
+++ b/package.json
@@ -3,7 +3,12 @@
   "version": "2.0.0",
   "description": "A mostly reasonable approach to JavaScript.",
   "scripts": {
-    "test": "echo \"Error: no test specified\" && exit 1"
+	"preinstall": "npm run install:config && npm run install:config:base",
+    "install:config": "cd packages/eslint-config-airbnb && npm install",
+    "install:config:base": "cd packages/eslint-config-airbnb-base && npm install",
+    "test": "npm run --silent test:config && npm run --silent test:config:base",
+    "test:config": "cd packages/eslint-config-airbnb; npm test",
+    "test:config:base": "cd packages/eslint-config-airbnb-base; npm test"
   },
   "repository": {
     "type": "git",

From 2d81a2db4a6784ec26fa434cabf6c31bd398cc3b Mon Sep 17 00:00:00 2001
From: alexpausan <alexandru.pausan@gmail.com>
Date: Thu, 21 Apr 2016 10:23:12 +0300
Subject: [PATCH 0619/1591] Started using AirBnB style guide.

---
 README.md | 1 +
 1 file changed, 1 insertion(+)

diff --git a/README.md b/README.md
index 9245c33a54..e89d3b3b6f 100644
--- a/README.md
+++ b/README.md
@@ -2734,6 +2734,7 @@ Other Style Guides
   - **Ecosia**: [ecosia/javascript](https://github.com/ecosia/javascript)
   - **Evernote**: [evernote/javascript-style-guide](https://github.com/evernote/javascript-style-guide)
   - **Evolution Gaming**: [evolution-gaming/javascript](https://github.com/evolution-gaming/javascript)
+  - **EvozonJs**: [evozonjs/javascript](https://github.com/evozonjs/javascript)
   - **ExactTarget**: [ExactTarget/javascript](https://github.com/ExactTarget/javascript)
   - **Expensify** [Expensify/Style-Guide](https://github.com/Expensify/Style-Guide/blob/master/javascript.md)
   - **Flexberry**: [Flexberry/javascript-style-guide](https://github.com/Flexberry/javascript-style-guide)

From 44ae49ebcf69dc68698562e5711840c83b1b17fd Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Thu, 21 Apr 2016 10:11:16 -0700
Subject: [PATCH 0620/1591] [eslint config] restore `jsx-quotes` rule, lost in
 52d3401f953afcf09ca64dbbb177c6284832aae6

Fixes #846.
---
 packages/eslint-config-airbnb/rules/react.js | 3 +++
 1 file changed, 3 insertions(+)

diff --git a/packages/eslint-config-airbnb/rules/react.js b/packages/eslint-config-airbnb/rules/react.js
index a3145760a4..d6930cc7af 100644
--- a/packages/eslint-config-airbnb/rules/react.js
+++ b/packages/eslint-config-airbnb/rules/react.js
@@ -13,6 +13,9 @@ module.exports = {
   // View link below for react rules documentation
   // https://github.com/yannickcr/eslint-plugin-react#list-of-supported-rules
   'rules': {
+    // specify whether double or single quotes should be used in JSX attributes
+    // http://eslint.org/docs/rules/jsx-quotes
+    'jsx-quotes': [2, 'prefer-double'],
     // Prevent missing displayName in a React component definition
     // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/display-name.md
     'react/display-name': [0, { 'ignoreTranspilerName': false }],

From 117196b3d04bbd81e7ad56d02af6541dcfd4a7cd Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Thu, 21 Apr 2016 00:06:26 -0700
Subject: [PATCH 0621/1591] [eslint config] v8.0.0

---
 packages/eslint-config-airbnb/CHANGELOG.md | 22 ++++++++++++++++++++++
 packages/eslint-config-airbnb/package.json |  2 +-
 2 files changed, 23 insertions(+), 1 deletion(-)

diff --git a/packages/eslint-config-airbnb/CHANGELOG.md b/packages/eslint-config-airbnb/CHANGELOG.md
index 64cbce3b39..d829f4a1f3 100644
--- a/packages/eslint-config-airbnb/CHANGELOG.md
+++ b/packages/eslint-config-airbnb/CHANGELOG.md
@@ -1,3 +1,25 @@
+8.0.0 / 2016-04-21
+==================
+- [breaking] Migrate non-React rules to a separate linter config (`eslint-config-airbnb-base`)
+- [breaking] disallow empty methods
+- [breaking] disallow empty restructuring patterns
+- [breaking] enable `no-restricted-syntax` rule
+- [breaking] enable `global-require` rule
+- [breaking] [react] enable `react/jsx-curly-spacing` rule ([#693](https://github.com/airbnb/javascript/issues/693))
+- [semver-minor] [react] Add `react/jsx-first-prop-new-line` rule
+- [semver-minor] [react] enable `jsx-equals-spacing` rule
+- [semver-minor] [react] enable `jsx-indent` rule
+- [semver-minor] enforce spacing inside single-line blocks
+- [semver-minor] enforce `no-underscore-dangle`
+- [semver-minor] Enable import/no-unresolved and import/export rules ([#825](https://github.com/airbnb/javascript/issues/825))
+- [semver-patch] Enable `no-useless-concat` rule which `prefer-template` already covers
+- [semver-patch] Allow `== null` ([#542](https://github.com/airbnb/javascript/issues/542))
+- [dev deps / peer deps] update `eslint`, `eslint-plugin-react`, `eslint-plugin-import`
+- [dev deps / peer deps] update `eslint-plugin-jsx-a11y` and rename rules ([#838](https://github.com/airbnb/javascript/issues/838))
+- [refactor] [react] separate a11y rules to their own file
+- [refactor] Add missing disabled rules.
+- [tests] Add `eslint-find-rules` to prevent missing rules
+
 7.0.0 / 2016-04-11
 ==================
 - [react] [breaking] Add accessibility rules to the React style guide + `eslint-plugin-a11y`
diff --git a/packages/eslint-config-airbnb/package.json b/packages/eslint-config-airbnb/package.json
index 701dabe206..c11b9f9be0 100644
--- a/packages/eslint-config-airbnb/package.json
+++ b/packages/eslint-config-airbnb/package.json
@@ -1,6 +1,6 @@
 {
   "name": "eslint-config-airbnb",
-  "version": "7.0.0",
+  "version": "8.0.0",
   "description": "Airbnb's ESLint config, following our styleguide",
   "main": "index.js",
   "scripts": {

From d1383a7cf8c82ac605d3a028ee8b996d8382c1ee Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Thu, 21 Apr 2016 23:41:18 -0700
Subject: [PATCH 0622/1591] [eslint config] [base] [semver-patch] Allow empty
 class/object methods.

---
 packages/eslint-config-airbnb-base/rules/best-practices.js | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/packages/eslint-config-airbnb-base/rules/best-practices.js b/packages/eslint-config-airbnb-base/rules/best-practices.js
index 9deb2c2136..38072220b7 100644
--- a/packages/eslint-config-airbnb-base/rules/best-practices.js
+++ b/packages/eslint-config-airbnb-base/rules/best-practices.js
@@ -42,8 +42,9 @@ module.exports = {
     // http://eslint.org/docs/rules/no-empty-function
     'no-empty-function': [2, {
       'allow': [
-        'functions',
         'arrowFunctions',
+        'functions',
+        'methods',
       ]
     }],
     // disallow empty destructuring patterns

From 8f0f2890f264c347e80b5db5d850469091b24051 Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Thu, 21 Apr 2016 23:42:08 -0700
Subject: [PATCH 0623/1591] [eslint config] [base] v1.0.3

---
 packages/eslint-config-airbnb-base/CHANGELOG.md | 4 ++++
 packages/eslint-config-airbnb-base/package.json | 2 +-
 2 files changed, 5 insertions(+), 1 deletion(-)

diff --git a/packages/eslint-config-airbnb-base/CHANGELOG.md b/packages/eslint-config-airbnb-base/CHANGELOG.md
index acb6e298f5..a4e1c8ab15 100644
--- a/packages/eslint-config-airbnb-base/CHANGELOG.md
+++ b/packages/eslint-config-airbnb-base/CHANGELOG.md
@@ -1,3 +1,7 @@
+1.0.3 / 2016-04-21
+==================
+ - [patch: loosen rules] Allow empty class/object methods
+
 1.0.2 / 2016-04-20
 ==================
  - [patch: loosen rules] Allow `break` (#840)
diff --git a/packages/eslint-config-airbnb-base/package.json b/packages/eslint-config-airbnb-base/package.json
index edb4e397ad..b5642bfa40 100644
--- a/packages/eslint-config-airbnb-base/package.json
+++ b/packages/eslint-config-airbnb-base/package.json
@@ -1,6 +1,6 @@
 {
   "name": "eslint-config-airbnb-base",
-  "version": "1.0.2",
+  "version": "1.0.3",
   "description": "Airbnb's base JS ESLint config, following our styleguide",
   "main": "index.js",
   "scripts": {

From 79af88d9d6f445629fd0f76cb253bb0f27dd8a4f Mon Sep 17 00:00:00 2001
From: Jimmy Jia <tesrin@gmail.com>
Date: Fri, 22 Apr 2016 12:13:22 -0400
Subject: [PATCH 0624/1591] Clarify stateless component function naming

---
 react/README.md | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/react/README.md b/react/README.md
index a2f26c9ca8..e0794aaadf 100644
--- a/react/README.md
+++ b/react/README.md
@@ -57,7 +57,7 @@
       }
     }
 
-    // bad (since arrow functions do not have a "name" property)
+    // bad (relying on function name inference is discouraged)
     const Listing = ({ hello }) => (
       <div>{hello}</div>
     );

From a71bffa5e3515c83023595e2716fee3bc75da7e5 Mon Sep 17 00:00:00 2001
From: Oliver THEBAULT <Oliboy50@users.noreply.github.com>
Date: Sun, 24 Apr 2016 19:48:45 +0200
Subject: [PATCH 0625/1591] Fix README "4.5" bad reduce example

---
 README.md | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/README.md b/README.md
index e89d3b3b6f..2f3e7e8e45 100644
--- a/README.md
+++ b/README.md
@@ -379,7 +379,7 @@ Other Style Guides
     const flat = {};
     [[0, 1], [2, 3], [4, 5]].reduce((memo, item, index) => {
       const flatten = memo.concat(item);
-      flat[index] = memo.concat(item);
+      flat[index] = flatten;
     });
 
     // good

From 7431ef13a0b7099953e45cce80b554eb9c9f8c73 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Krist=C3=B3f=20Poduszl=C3=B3?= <kripod@protonmail.com>
Date: Mon, 25 Apr 2016 19:32:09 +0200
Subject: [PATCH 0626/1591] Remove React from the readme of
 eslint-config-airbnb-base

---
 packages/eslint-config-airbnb-base/README.md | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/packages/eslint-config-airbnb-base/README.md b/packages/eslint-config-airbnb-base/README.md
index d7f1c336b6..2b7e54297f 100644
--- a/packages/eslint-config-airbnb-base/README.md
+++ b/packages/eslint-config-airbnb-base/README.md
@@ -10,7 +10,7 @@ We export two ESLint configurations for your usage.
 
 ### eslint-config-airbnb-base
 
-Our default export contains all of our ESLint rules, including ECMAScript 6+ and React. It requires `eslint` and `eslint-plugin-import`.
+Our default export contains all of our ESLint rules, including ECMAScript 6+. It requires `eslint` and `eslint-plugin-import`.
 
 1. `npm install --save-dev eslint-config-airbnb-base eslint-plugin-import eslint`
 2. add `"extends": "airbnb-base"` to your .eslintrc

From 1e1772b340702e55d0933997d5af733afb8c7584 Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Tue, 26 Apr 2016 01:57:14 -0700
Subject: [PATCH 0627/1591] [guide] [es5] Update whitespace and missing
 function names.

Per https://github.com/airbnb/javascript/issues/55#issuecomment-214672292
---
 es5/README.md | 80 +++++++++++++++++++++++++--------------------------
 1 file changed, 40 insertions(+), 40 deletions(-)

diff --git a/es5/README.md b/es5/README.md
index b2fa49d9c1..9351646805 100644
--- a/es5/README.md
+++ b/es5/README.md
@@ -267,7 +267,7 @@
 
     ```javascript
     // anonymous function expression
-    var anonymous = function() {
+    var anonymous = function () {
       return true;
     };
 
@@ -277,9 +277,9 @@
     };
 
     // immediately-invoked function expression (IIFE)
-    (function() {
+    (function () {
       console.log('Welcome to the Internet. Please follow me.');
-    })();
+    }());
     ```
 
   - Never declare a function in a non-function block (if, while, etc). Assign the function to a variable instead. Browsers will allow you to do it, but they all interpret it differently, which is bad news bears.
@@ -417,7 +417,7 @@
 
     ```javascript
     // bad
-    function() {
+    function () {
       test();
       console.log('doing stuff..');
 
@@ -433,7 +433,7 @@
     }
 
     // good
-    function() {
+    function () {
       var name = getName();
 
       test();
@@ -449,7 +449,7 @@
     }
 
     // bad - unnecessary function call
-    function() {
+    function () {
       var name = getName();
 
       if (!arguments.length) {
@@ -462,7 +462,7 @@
     }
 
     // good
-    function() {
+    function () {
       var name;
 
       if (!arguments.length) {
@@ -517,7 +517,7 @@
 
       anonymous(); // => TypeError anonymous is not a function
 
-      var anonymous = function() {
+      var anonymous = function () {
         console.log('anonymous function expression');
       };
     }
@@ -635,10 +635,10 @@
     }
 
     // bad
-    function() { return false; }
+    function () { return false; }
 
     // good
-    function() {
+    function () {
       return false;
     }
     ```
@@ -768,17 +768,17 @@
 
     ```javascript
     // bad
-    function() {
+    function () {
     ∙∙∙∙var name;
     }
 
     // bad
-    function() {
+    function () {
     ∙var name;
     }
 
     // good
-    function() {
+    function () {
     ∙∙var name;
     }
     ```
@@ -847,14 +847,14 @@
 
     ```javascript
     // bad
-    (function(global) {
+    (function (global) {
       // ...stuff...
     })(this);
     ```
 
     ```javascript
     // bad
-    (function(global) {
+    (function (global) {
       // ...stuff...
     })(this);↵
     ↵
@@ -862,7 +862,7 @@
 
     ```javascript
     // good
-    (function(global) {
+    (function (global) {
       // ...stuff...
     })(this);↵
     ```
@@ -925,19 +925,19 @@
 
     // bad
     var obj = {
-      foo: function() {
+      foo: function () {
       },
-      bar: function() {
+      bar: function () {
       }
     };
     return obj;
 
     // good
     var obj = {
-      foo: function() {
+      foo: function () {
       },
 
-      bar: function() {
+      bar: function () {
       }
     };
 
@@ -1020,19 +1020,19 @@
 
     ```javascript
     // bad
-    (function() {
+    (function () {
       var name = 'Skywalker'
       return name
     })()
 
     // good
-    (function() {
+    (function () {
       var name = 'Skywalker';
       return name;
     })();
 
     // good (guards against the function becoming an argument when two files with IIFEs are concatenated)
-    ;(function() {
+    ;(function () {
       var name = 'Skywalker';
       return name;
     })();
@@ -1193,25 +1193,25 @@
 
     ```javascript
     // bad
-    function() {
+    function () {
       var self = this;
-      return function() {
+      return function () {
         console.log(self);
       };
     }
 
     // bad
-    function() {
+    function () {
       var that = this;
-      return function() {
+      return function () {
         console.log(that);
       };
     }
 
     // good
-    function() {
+    function () {
       var _this = this;
-      return function() {
+      return function () {
         console.log(_this);
       };
     }
@@ -1221,7 +1221,7 @@
 
     ```javascript
     // bad
-    var log = function(msg) {
+    var log = function (msg) {
       console.log(msg);
     };
 
@@ -1297,11 +1297,11 @@
       this.set('lightsaber', lightsaber);
     }
 
-    Jedi.prototype.set = function(key, val) {
+    Jedi.prototype.set = function set(key, val) {
       this[key] = val;
     };
 
-    Jedi.prototype.get = function(key) {
+    Jedi.prototype.get = function get(key) {
       return this[key];
     };
     ```
@@ -1343,12 +1343,12 @@
 
     ```javascript
     // bad
-    Jedi.prototype.jump = function() {
+    Jedi.prototype.jump = function jump() {
       this.jumping = true;
       return true;
     };
 
-    Jedi.prototype.setHeight = function(height) {
+    Jedi.prototype.setHeight = function setHeight(height) {
       this.height = height;
     };
 
@@ -1357,12 +1357,12 @@
     luke.setHeight(20); // => undefined
 
     // good
-    Jedi.prototype.jump = function() {
+    Jedi.prototype.jump = function jump() {
       this.jumping = true;
       return this;
     };
 
-    Jedi.prototype.setHeight = function(height) {
+    Jedi.prototype.setHeight = function setHeight(height) {
       this.height = height;
       return this;
     };
@@ -1404,7 +1404,7 @@
 
     ...
 
-    $(this).on('listingUpdated', function(e, listingId) {
+    $(this).on('listingUpdated', function (e, listingId) {
       // do something with listingId
     });
     ```
@@ -1417,7 +1417,7 @@
 
     ...
 
-    $(this).on('listingUpdated', function(e, data) {
+    $(this).on('listingUpdated', function (e, data) {
       // do something with data.listingId
     });
     ```
@@ -1435,7 +1435,7 @@
     ```javascript
     // fancyInput/fancyInput.js
 
-    !function(global) {
+    !function (global) {
       'use strict';
 
       var previousFancyInput = global.FancyInput;
@@ -1530,7 +1530,7 @@
   - **Yup.**
 
     ```javascript
-    function() {
+    function () {
       return true;
     }
     ```

From d45349497a712395850bd5a24b7ded15e90913a1 Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Tue, 26 Apr 2016 02:06:37 -0700
Subject: [PATCH 0628/1591] [eslint config] [base] [deps] update
 `eslint-find-rules`, `eslint-plugin-import`

---
 .../eslint-config-airbnb-base/package.json    |  6 ++---
 .../eslint-config-airbnb-base/rules/es6.js    | 23 ++++++++++++++++---
 2 files changed, 23 insertions(+), 6 deletions(-)

diff --git a/packages/eslint-config-airbnb-base/package.json b/packages/eslint-config-airbnb-base/package.json
index b5642bfa40..25dc9844ac 100644
--- a/packages/eslint-config-airbnb-base/package.json
+++ b/packages/eslint-config-airbnb-base/package.json
@@ -45,12 +45,12 @@
   "devDependencies": {
     "babel-tape-runner": "^1.3.1",
     "eslint": "^2.8.0",
-    "eslint-find-rules": "^1.4.0",
-    "eslint-plugin-import": "^1.5.0",
+    "eslint-find-rules": "^1.7.0",
+    "eslint-plugin-import": "^1.6.0",
     "tape": "^4.5.1"
   },
   "peerDependencies": {
     "eslint": "^2.8.0",
-    "eslint-plugin-import": "^1.5.0"
+    "eslint-plugin-import": "^1.6.0"
   }
 }
diff --git a/packages/eslint-config-airbnb-base/rules/es6.js b/packages/eslint-config-airbnb-base/rules/es6.js
index d0f7577a9e..77c0b3257e 100644
--- a/packages/eslint-config-airbnb-base/rules/es6.js
+++ b/packages/eslint-config-airbnb-base/rules/es6.js
@@ -89,17 +89,25 @@ module.exports = {
     // disallow invalid exports, e.g. multiple defaults
     // https://github.com/benmosher/eslint-plugin-import/blob/master/docs/rules/export.md
     'import/export': 2,
-    // ensure imports point to files/modules that can be resolved
-    // https://github.com/benmosher/eslint-plugin-import/blob/master/docs/rules/no-unresolved.md
-    'import/no-unresolved': [2, { 'commonjs': true }],
     // ensure default import coupled with default export
     // https://github.com/benmosher/eslint-plugin-import/blob/master/docs/rules/default.md#when-not-to-use-it
     'import/default': 0,
+    // Ensure consistent use of file extension within the import path
+    // https://github.com/benmosher/eslint-plugin-import/blob/master/docs/rules/extensions.md
+    // TODO: enable
+    'import/extensions': [0, 'never'],
     // ensure named imports coupled with named exports
     // https://github.com/benmosher/eslint-plugin-import/blob/master/docs/rules/named.md#when-not-to-use-it
     'import/named': 0,
     // https://github.com/benmosher/eslint-plugin-import/blob/master/docs/rules/namespace.md
     'import/namespace': 0,
+    // Forbid the use of extraneous packages
+    // https://github.com/benmosher/eslint-plugin-import/blob/master/docs/rules/no-extraneous-dependencies.md
+    // TODO: enable
+    'import/no-extraneous-dependencies': [0, { 'devDependencies': false }],
+    // ensure imports point to files/modules that can be resolved
+    // https://github.com/benmosher/eslint-plugin-import/blob/master/docs/rules/no-unresolved.md
+    'import/no-unresolved': [2, { 'commonjs': true }],
     // do not allow a default import name to match a named export
     // https://github.com/benmosher/eslint-plugin-import/blob/master/docs/rules/no-named-as-default.md
     // TODO: enable
@@ -130,6 +138,15 @@ module.exports = {
     // TODO: enable?
     // https://github.com/benmosher/eslint-plugin-import/blob/master/docs/rules/no-named-as-default-member.md
     'import/no-named-as-default-member': 0,
+    // No Node.js builtin modules
+    // https://github.com/benmosher/eslint-plugin-import/blob/master/docs/rules/no-nodejs-modules.md
+    'import/no-nodejs-modules': 0,
+    // Enforce a convention in module import order
+    // https://github.com/benmosher/eslint-plugin-import/blob/master/docs/rules/order.md
+    // TODO: enable?
+    'import/order': [0, {
+      'groups': ['builtin', 'external', 'internal', 'parent', 'sibling', 'index'],
+    }],
   },
   'settings': {
     'import/resolver': {

From 3519daf60d8002867107317d20bf6dc26b984231 Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Tue, 26 Apr 2016 02:11:23 -0700
Subject: [PATCH 0629/1591] [eslint config] [base] v1.0.4

---
 packages/eslint-config-airbnb-base/CHANGELOG.md | 4 ++++
 packages/eslint-config-airbnb-base/package.json | 2 +-
 2 files changed, 5 insertions(+), 1 deletion(-)

diff --git a/packages/eslint-config-airbnb-base/CHANGELOG.md b/packages/eslint-config-airbnb-base/CHANGELOG.md
index a4e1c8ab15..a9dc94cd56 100644
--- a/packages/eslint-config-airbnb-base/CHANGELOG.md
+++ b/packages/eslint-config-airbnb-base/CHANGELOG.md
@@ -1,3 +1,7 @@
+1.0.4 / 2016-04-26
+==================
+ - [deps] update `eslint-find-rules`, `eslint-plugin-import`
+
 1.0.3 / 2016-04-21
 ==================
  - [patch: loosen rules] Allow empty class/object methods
diff --git a/packages/eslint-config-airbnb-base/package.json b/packages/eslint-config-airbnb-base/package.json
index 25dc9844ac..f7d1b6fbf3 100644
--- a/packages/eslint-config-airbnb-base/package.json
+++ b/packages/eslint-config-airbnb-base/package.json
@@ -1,6 +1,6 @@
 {
   "name": "eslint-config-airbnb-base",
-  "version": "1.0.3",
+  "version": "1.0.4",
   "description": "Airbnb's base JS ESLint config, following our styleguide",
   "main": "index.js",
   "scripts": {

From 33ff1adb2dbc1f02f46a9b2ab71f2cedb1c0b158 Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Tue, 26 Apr 2016 01:58:30 -0700
Subject: [PATCH 0630/1591] [eslint config] [deps] update
 `eslint-config-airbnb-base`, `eslint-find-rules`, `eslint-plugin-import`,
 `eslint-plugin-jsx-a11y`

---
 packages/eslint-config-airbnb/package.json | 12 ++++++------
 1 file changed, 6 insertions(+), 6 deletions(-)

diff --git a/packages/eslint-config-airbnb/package.json b/packages/eslint-config-airbnb/package.json
index c11b9f9be0..b0506f6ebc 100644
--- a/packages/eslint-config-airbnb/package.json
+++ b/packages/eslint-config-airbnb/package.json
@@ -43,22 +43,22 @@
   },
   "homepage": "https://github.com/airbnb/javascript",
   "dependencies": {
-    "eslint-config-airbnb-base": "^1.0.2"
+    "eslint-config-airbnb-base": "^1.0.4"
   },
   "devDependencies": {
     "babel-tape-runner": "^1.3.1",
     "eslint": "^2.8.0",
-    "eslint-find-rules": "^1.4.0",
-    "eslint-plugin-import": "^1.5.0",
-    "eslint-plugin-jsx-a11y": "^1.0.2",
+    "eslint-find-rules": "^1.7.0",
+    "eslint-plugin-import": "^1.6.0",
+    "eslint-plugin-jsx-a11y": "^1.0.3",
     "eslint-plugin-react": "^5.0.1",
     "react": "*",
     "tape": "^4.5.1"
   },
   "peerDependencies": {
     "eslint": "^2.8.0",
-    "eslint-plugin-jsx-a11y": "^1.0.2",
-    "eslint-plugin-import": "^1.5.0",
+    "eslint-plugin-jsx-a11y": "^1.0.3",
+    "eslint-plugin-import": "^1.6.0",
     "eslint-plugin-react": "^5.0.1"
   }
 }

From c81727accd790ed43496ff5a4c13b105d3f88105 Mon Sep 17 00:00:00 2001
From: Filip Spiridonov <filip.spiridonov@gmail.com>
Date: Tue, 26 Apr 2016 20:55:10 -0700
Subject: [PATCH 0631/1591] Remove an extra backtick from the README.md

---
 packages/eslint-config-airbnb/README.md | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/packages/eslint-config-airbnb/README.md b/packages/eslint-config-airbnb/README.md
index 2374c07a65..222ef16790 100644
--- a/packages/eslint-config-airbnb/README.md
+++ b/packages/eslint-config-airbnb/README.md
@@ -10,7 +10,7 @@ We export three ESLint configurations for your usage.
 
 ### eslint-config-airbnb
 
-Our default export contains all of our ESLint rules, including ECMAScript 6+ and React. It requires `eslint`, ``eslint-plugin-import`, `eslint-plugin-react`, and `eslint-plugin-jsx-a11y`.
+Our default export contains all of our ESLint rules, including ECMAScript 6+ and React. It requires `eslint`, `eslint-plugin-import`, `eslint-plugin-react`, and `eslint-plugin-jsx-a11y`.
 
 1. `npm install --save-dev eslint-config-airbnb eslint-plugin-import eslint-plugin-react eslint-plugin-jsx-a11y eslint`
 2. add `"extends": "airbnb"` to your .eslintrc

From 56fd094e0186040c11a6ba59008bf1771a5d269b Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Fri, 29 Apr 2016 23:57:23 -0700
Subject: [PATCH 0632/1591] [eslint config] [base] [deps] update `eslint`,
 `eslint-plugin-import`

---
 packages/eslint-config-airbnb-base/package.json          | 8 ++++----
 .../eslint-config-airbnb-base/rules/best-practices.js    | 6 +++++-
 packages/eslint-config-airbnb-base/rules/es6.js          | 9 ++++++++-
 3 files changed, 17 insertions(+), 6 deletions(-)

diff --git a/packages/eslint-config-airbnb-base/package.json b/packages/eslint-config-airbnb-base/package.json
index f7d1b6fbf3..5690895a3e 100644
--- a/packages/eslint-config-airbnb-base/package.json
+++ b/packages/eslint-config-airbnb-base/package.json
@@ -44,13 +44,13 @@
   "homepage": "https://github.com/airbnb/javascript",
   "devDependencies": {
     "babel-tape-runner": "^1.3.1",
-    "eslint": "^2.8.0",
+    "eslint": "^2.9.0",
     "eslint-find-rules": "^1.7.0",
-    "eslint-plugin-import": "^1.6.0",
+    "eslint-plugin-import": "^1.6.1",
     "tape": "^4.5.1"
   },
   "peerDependencies": {
-    "eslint": "^2.8.0",
-    "eslint-plugin-import": "^1.6.0"
+    "eslint": "^2.9.0",
+    "eslint-plugin-import": "^1.6.1"
   }
 }
diff --git a/packages/eslint-config-airbnb-base/rules/best-practices.js b/packages/eslint-config-airbnb-base/rules/best-practices.js
index 38072220b7..5e14e84001 100644
--- a/packages/eslint-config-airbnb-base/rules/best-practices.js
+++ b/packages/eslint-config-airbnb-base/rules/best-practices.js
@@ -14,7 +14,7 @@ module.exports = {
     // specify curly brace conventions for all control statements
     'curly': [2, 'multi-line'],
     // require default case in switch statements
-    'default-case': 2,
+    'default-case': [2, { 'commentPattern': '^no default$' }],
     // encourages use of dot notation whenever possible
     'dot-notation': [2, { 'allowKeywords': true }],
     // enforces consistent newlines before or after dots
@@ -136,6 +136,10 @@ module.exports = {
     // disallow unmodified conditions of loops
     // http://eslint.org/docs/rules/no-unmodified-loop-condition
     'no-unmodified-loop-condition': 0,
+    // disallow return/throw/break/continue inside finally blocks
+    // http://eslint.org/docs/rules/no-unsafe-finally
+    // TODO: enable
+    'no-unsafe-finally': 0,
     // disallow usage of expressions in statement position
     'no-unused-expressions': 2,
     // disallow unused labels
diff --git a/packages/eslint-config-airbnb-base/rules/es6.js b/packages/eslint-config-airbnb-base/rules/es6.js
index 77c0b3257e..4caff23b6d 100644
--- a/packages/eslint-config-airbnb-base/rules/es6.js
+++ b/packages/eslint-config-airbnb-base/rules/es6.js
@@ -55,6 +55,10 @@ module.exports = {
     'no-this-before-super': 0,
     // require let or const instead of var
     'no-var': 2,
+    // disallow useless computed property keys
+    // http://eslint.org/docs/rules/no-useless-computed-key
+    // TODO: enable
+    'no-useless-computed-key': 0,
     // disallow unnecessary constructor
     // http://eslint.org/docs/rules/no-useless-constructor
     'no-useless-constructor': 2,
@@ -62,7 +66,10 @@ module.exports = {
     // http://eslint.org/docs/rules/object-shorthand
     'object-shorthand': [2, 'always'],
     // suggest using arrow functions as callbacks
-    'prefer-arrow-callback': 2,
+    'prefer-arrow-callback': [2, {
+      'allowNamedFunctions': false,
+      'allowUnboundThis': true,
+    }],
     // suggest using of const declaration for variables that are never modified after declared
     'prefer-const': 2,
     // suggest using the spread operator instead of .apply()

From d85abc587a5c31241ecafcd9398456e5773b00e5 Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Fri, 29 Apr 2016 23:58:41 -0700
Subject: [PATCH 0633/1591] [eslint config] [base] [semver-minor] enable
 `no-useless-computed-key` rule

---
 packages/eslint-config-airbnb-base/rules/es6.js | 3 +--
 1 file changed, 1 insertion(+), 2 deletions(-)

diff --git a/packages/eslint-config-airbnb-base/rules/es6.js b/packages/eslint-config-airbnb-base/rules/es6.js
index 4caff23b6d..fc85a78399 100644
--- a/packages/eslint-config-airbnb-base/rules/es6.js
+++ b/packages/eslint-config-airbnb-base/rules/es6.js
@@ -57,8 +57,7 @@ module.exports = {
     'no-var': 2,
     // disallow useless computed property keys
     // http://eslint.org/docs/rules/no-useless-computed-key
-    // TODO: enable
-    'no-useless-computed-key': 0,
+    'no-useless-computed-key': 2,
     // disallow unnecessary constructor
     // http://eslint.org/docs/rules/no-useless-constructor
     'no-useless-constructor': 2,

From 31e84122318f555084eee12392fa3b5d2df27924 Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Sat, 30 Apr 2016 00:00:22 -0700
Subject: [PATCH 0634/1591] [eslint config] [base] [breaking] enable
 `no-unsafe-finally` rule

---
 packages/eslint-config-airbnb-base/rules/best-practices.js | 3 +--
 1 file changed, 1 insertion(+), 2 deletions(-)

diff --git a/packages/eslint-config-airbnb-base/rules/best-practices.js b/packages/eslint-config-airbnb-base/rules/best-practices.js
index 5e14e84001..2496c695a1 100644
--- a/packages/eslint-config-airbnb-base/rules/best-practices.js
+++ b/packages/eslint-config-airbnb-base/rules/best-practices.js
@@ -138,8 +138,7 @@ module.exports = {
     'no-unmodified-loop-condition': 0,
     // disallow return/throw/break/continue inside finally blocks
     // http://eslint.org/docs/rules/no-unsafe-finally
-    // TODO: enable
-    'no-unsafe-finally': 0,
+    'no-unsafe-finally': 2,
     // disallow usage of expressions in statement position
     'no-unused-expressions': 2,
     // disallow unused labels

From dc4130cdbc2b9b3de4526e226211707257d5dd0d Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Sat, 30 Apr 2016 00:01:15 -0700
Subject: [PATCH 0635/1591] [eslint config] [base] v2.0.0

---
 packages/eslint-config-airbnb-base/CHANGELOG.md | 6 ++++++
 packages/eslint-config-airbnb-base/package.json | 2 +-
 2 files changed, 7 insertions(+), 1 deletion(-)

diff --git a/packages/eslint-config-airbnb-base/CHANGELOG.md b/packages/eslint-config-airbnb-base/CHANGELOG.md
index a9dc94cd56..90cb27edde 100644
--- a/packages/eslint-config-airbnb-base/CHANGELOG.md
+++ b/packages/eslint-config-airbnb-base/CHANGELOG.md
@@ -1,3 +1,9 @@
+2.0.0 / 2016-04-29
+==================
+ - [breaking] enable `no-unsafe-finally` rule
+ - [semver-minor] enable `no-useless-computed-key` rule
+ - [deps] update `eslint`, `eslint-plugin-import`
+
 1.0.4 / 2016-04-26
 ==================
  - [deps] update `eslint-find-rules`, `eslint-plugin-import`
diff --git a/packages/eslint-config-airbnb-base/package.json b/packages/eslint-config-airbnb-base/package.json
index 5690895a3e..62e86c6263 100644
--- a/packages/eslint-config-airbnb-base/package.json
+++ b/packages/eslint-config-airbnb-base/package.json
@@ -1,6 +1,6 @@
 {
   "name": "eslint-config-airbnb-base",
-  "version": "1.0.4",
+  "version": "2.0.0",
   "description": "Airbnb's base JS ESLint config, following our styleguide",
   "main": "index.js",
   "scripts": {

From f806ed6bb35cf7dbd1b316cd7995d0d32db7a70e Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Sat, 30 Apr 2016 00:05:24 -0700
Subject: [PATCH 0636/1591] [Tests] on `node` `v6`

---
 .travis.yml | 1 +
 1 file changed, 1 insertion(+)

diff --git a/.travis.yml b/.travis.yml
index 02f60497cf..c03ccdd0d5 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -1,5 +1,6 @@
 language: node_js
 node_js:
+  - "6"
   - "5"
   - "4"
   - "iojs"

From d1f2416ffa2272730c6df3a7913d38bd701d4f35 Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Sat, 30 Apr 2016 00:06:22 -0700
Subject: [PATCH 0637/1591] [eslint config] [deps] update
 `eslint-config-airbnb-base`, `eslint`, `eslint-plugin-import`,
 `eslint-plugin-jsx-a11y`

---
 packages/eslint-config-airbnb/package.json | 14 +++++++-------
 1 file changed, 7 insertions(+), 7 deletions(-)

diff --git a/packages/eslint-config-airbnb/package.json b/packages/eslint-config-airbnb/package.json
index b0506f6ebc..3169e5c902 100644
--- a/packages/eslint-config-airbnb/package.json
+++ b/packages/eslint-config-airbnb/package.json
@@ -43,22 +43,22 @@
   },
   "homepage": "https://github.com/airbnb/javascript",
   "dependencies": {
-    "eslint-config-airbnb-base": "^1.0.4"
+    "eslint-config-airbnb-base": "^2.0.0"
   },
   "devDependencies": {
     "babel-tape-runner": "^1.3.1",
-    "eslint": "^2.8.0",
+    "eslint": "^2.9.0",
     "eslint-find-rules": "^1.7.0",
-    "eslint-plugin-import": "^1.6.0",
-    "eslint-plugin-jsx-a11y": "^1.0.3",
+    "eslint-plugin-import": "^1.6.1",
+    "eslint-plugin-jsx-a11y": "^1.0.4",
     "eslint-plugin-react": "^5.0.1",
     "react": "*",
     "tape": "^4.5.1"
   },
   "peerDependencies": {
-    "eslint": "^2.8.0",
-    "eslint-plugin-jsx-a11y": "^1.0.3",
-    "eslint-plugin-import": "^1.6.0",
+    "eslint": "^2.9.0",
+    "eslint-plugin-jsx-a11y": "^1.0.4",
+    "eslint-plugin-import": "^1.6.1",
     "eslint-plugin-react": "^5.0.1"
   }
 }

From 6c25bcf9c133e75f20bd7acec8877f310a8d9589 Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Tue, 3 May 2016 22:15:25 -0700
Subject: [PATCH 0638/1591] [eslint config] [base] [breaking] Re-enabling
 `newline-per-chained-call`

Per https://github.com/airbnb/javascript/issues/748#issuecomment-216690840 and https://github.com/eslint/eslint/pull/5365
---
 packages/eslint-config-airbnb-base/rules/style.js | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/packages/eslint-config-airbnb-base/rules/style.js b/packages/eslint-config-airbnb-base/rules/style.js
index 2144d64b56..e9d0b501b0 100644
--- a/packages/eslint-config-airbnb-base/rules/style.js
+++ b/packages/eslint-config-airbnb-base/rules/style.js
@@ -70,7 +70,7 @@ module.exports = {
     // enforces new line after each method call in the chain to make it
     // more readable and easy to maintain
     // http://eslint.org/docs/rules/newline-per-chained-call
-    'newline-per-chained-call': [0, { 'ignoreChainWithDepth': 3 }],
+    'newline-per-chained-call': [2, { 'ignoreChainWithDepth': 3 }],
     // disallow use of the Array constructor
     'no-array-constructor': 2,
     // disallow use of the continue statement

From 4540293d44ed2613d8ed6e478455a7433fad7a61 Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Tue, 3 May 2016 22:16:31 -0700
Subject: [PATCH 0639/1591] [eslint config] [*] [dev deps] update
 `eslint-find-rules`

---
 package.json                                    | 2 +-
 packages/eslint-config-airbnb-base/package.json | 2 +-
 packages/eslint-config-airbnb/package.json      | 2 +-
 3 files changed, 3 insertions(+), 3 deletions(-)

diff --git a/package.json b/package.json
index 06a454034b..e800a3b9b1 100644
--- a/package.json
+++ b/package.json
@@ -3,7 +3,7 @@
   "version": "2.0.0",
   "description": "A mostly reasonable approach to JavaScript.",
   "scripts": {
-	"preinstall": "npm run install:config && npm run install:config:base",
+    "preinstall": "npm run install:config && npm run install:config:base",
     "install:config": "cd packages/eslint-config-airbnb && npm install",
     "install:config:base": "cd packages/eslint-config-airbnb-base && npm install",
     "test": "npm run --silent test:config && npm run --silent test:config:base",
diff --git a/packages/eslint-config-airbnb-base/package.json b/packages/eslint-config-airbnb-base/package.json
index 62e86c6263..bf860c2ce0 100644
--- a/packages/eslint-config-airbnb-base/package.json
+++ b/packages/eslint-config-airbnb-base/package.json
@@ -45,7 +45,7 @@
   "devDependencies": {
     "babel-tape-runner": "^1.3.1",
     "eslint": "^2.9.0",
-    "eslint-find-rules": "^1.7.0",
+    "eslint-find-rules": "^1.8.0",
     "eslint-plugin-import": "^1.6.1",
     "tape": "^4.5.1"
   },
diff --git a/packages/eslint-config-airbnb/package.json b/packages/eslint-config-airbnb/package.json
index 3169e5c902..d6201cb3e7 100644
--- a/packages/eslint-config-airbnb/package.json
+++ b/packages/eslint-config-airbnb/package.json
@@ -48,7 +48,7 @@
   "devDependencies": {
     "babel-tape-runner": "^1.3.1",
     "eslint": "^2.9.0",
-    "eslint-find-rules": "^1.7.0",
+    "eslint-find-rules": "^1.8.0",
     "eslint-plugin-import": "^1.6.1",
     "eslint-plugin-jsx-a11y": "^1.0.4",
     "eslint-plugin-react": "^5.0.1",

From f9089d075a4b481400abb6ce91b1f4a8a0e0f4e0 Mon Sep 17 00:00:00 2001
From: Jimmy Jia <tesrin@gmail.com>
Date: Wed, 4 May 2016 19:31:04 -0400
Subject: [PATCH 0640/1591] Add 4Catalyzer to users

---
 README.md | 1 +
 1 file changed, 1 insertion(+)

diff --git a/README.md b/README.md
index 2f3e7e8e45..9dbc425d34 100644
--- a/README.md
+++ b/README.md
@@ -2715,6 +2715,7 @@ Other Style Guides
 
   This is a list of organizations that are using this style guide. Send us a pull request and we'll add you to the list.
 
+  - **4Catalyzer**: [4Catalyzer/javascript](https://github.com/4Catalyzer/javascript)
   - **Aan Zee**: [AanZee/javascript](https://github.com/AanZee/javascript)
   - **Adult Swim**: [adult-swim/javascript](https://github.com/adult-swim/javascript)
   - **Airbnb**: [airbnb/javascript](https://github.com/airbnb/javascript)

From fd5c71c0a90c35287dc9397ab7aa15080ea36354 Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Wed, 4 May 2016 16:52:06 -0700
Subject: [PATCH 0641/1591] [eslint config] [base] [breaking] widen
 `no-extra-parens` to include everything, except `nestedBinaryExpressions`

Per https://github.com/eslint/eslint/issues/3065#event-626005438
---
 packages/eslint-config-airbnb-base/rules/errors.js | 6 +++++-
 1 file changed, 5 insertions(+), 1 deletion(-)

diff --git a/packages/eslint-config-airbnb-base/rules/errors.js b/packages/eslint-config-airbnb-base/rules/errors.js
index 73fd7d4f70..f8f3897255 100644
--- a/packages/eslint-config-airbnb-base/rules/errors.js
+++ b/packages/eslint-config-airbnb-base/rules/errors.js
@@ -25,7 +25,11 @@ module.exports = {
     // disallow double-negation boolean casts in a boolean context
     'no-extra-boolean-cast': 0,
     // disallow unnecessary parentheses
-    'no-extra-parens': [2, 'functions'],
+    // http://eslint.org/docs/rules/no-extra-parens
+    'no-extra-parens': [2, 'all', {
+      'conditionalAssign': true,
+      'nestedBinaryExpressions': false,
+    }],
     // disallow unnecessary semicolons
     'no-extra-semi': 2,
     // disallow overwriting functions written as function declarations

From e9aec9e94f7c94bdfeb3cfb419310e4eb3d36593 Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Fri, 6 May 2016 12:24:13 -0700
Subject: [PATCH 0642/1591] [eslint config] [base] update
 `eslint-plugin-import`, `eslint-find-rules`

---
 packages/eslint-config-airbnb-base/package.json |  6 +++---
 packages/eslint-config-airbnb-base/rules/es6.js | 15 ++++++++++++++-
 2 files changed, 17 insertions(+), 4 deletions(-)

diff --git a/packages/eslint-config-airbnb-base/package.json b/packages/eslint-config-airbnb-base/package.json
index bf860c2ce0..ea064e7e50 100644
--- a/packages/eslint-config-airbnb-base/package.json
+++ b/packages/eslint-config-airbnb-base/package.json
@@ -45,12 +45,12 @@
   "devDependencies": {
     "babel-tape-runner": "^1.3.1",
     "eslint": "^2.9.0",
-    "eslint-find-rules": "^1.8.0",
-    "eslint-plugin-import": "^1.6.1",
+    "eslint-find-rules": "^1.9.2",
+    "eslint-plugin-import": "^1.7.0",
     "tape": "^4.5.1"
   },
   "peerDependencies": {
     "eslint": "^2.9.0",
-    "eslint-plugin-import": "^1.6.1"
+    "eslint-plugin-import": "^1.7.0"
   }
 }
diff --git a/packages/eslint-config-airbnb-base/rules/es6.js b/packages/eslint-config-airbnb-base/rules/es6.js
index fc85a78399..aa6e64fd40 100644
--- a/packages/eslint-config-airbnb-base/rules/es6.js
+++ b/packages/eslint-config-airbnb-base/rules/es6.js
@@ -29,6 +29,7 @@ module.exports = {
     // enforce the spacing around the * in generator functions
     'generator-star-spacing': 0,
     // disallow modifying variables of class declarations
+    // TODO: enable
     'no-class-assign': 0,
     // disallow arrow functions where they could be confused with comparisons
     // http://eslint.org/docs/rules/no-confusing-arrow
@@ -110,7 +111,10 @@ module.exports = {
     // Forbid the use of extraneous packages
     // https://github.com/benmosher/eslint-plugin-import/blob/master/docs/rules/no-extraneous-dependencies.md
     // TODO: enable
-    'import/no-extraneous-dependencies': [0, { 'devDependencies': false }],
+    'import/no-extraneous-dependencies': [0, {
+      'devDependencies': false,
+      'optionalDependencies': false,
+    }],
     // ensure imports point to files/modules that can be resolved
     // https://github.com/benmosher/eslint-plugin-import/blob/master/docs/rules/no-unresolved.md
     'import/no-unresolved': [2, { 'commonjs': true }],
@@ -152,7 +156,16 @@ module.exports = {
     // TODO: enable?
     'import/order': [0, {
       'groups': ['builtin', 'external', 'internal', 'parent', 'sibling', 'index'],
+      'newlines-between': 'never',
     }],
+    // Require a newline after the last import/require in a group
+    // https://github.com/benmosher/eslint-plugin-import/blob/master/docs/rules/newline-after-import.md
+    // TODO: enable
+    'import/newline-after-import': 0,
+    // Forbid mutable exports
+    // https://github.com/benmosher/eslint-plugin-import/blob/master/docs/rules/no-mutable-exports.md
+    // TODO: enable
+    'import/no-mutable-exports': 0,
   },
   'settings': {
     'import/resolver': {

From 83c431d655e4aabafddfcc56691a39dc3f039b9c Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Fri, 6 May 2016 17:39:09 -0700
Subject: [PATCH 0643/1591] [eslint config] [base] [breaking] enable
 `no-class-assign` rule, to pair with `no-func-assign`

---
 packages/eslint-config-airbnb-base/rules/es6.js | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/packages/eslint-config-airbnb-base/rules/es6.js b/packages/eslint-config-airbnb-base/rules/es6.js
index aa6e64fd40..1183f3da8d 100644
--- a/packages/eslint-config-airbnb-base/rules/es6.js
+++ b/packages/eslint-config-airbnb-base/rules/es6.js
@@ -29,8 +29,8 @@ module.exports = {
     // enforce the spacing around the * in generator functions
     'generator-star-spacing': 0,
     // disallow modifying variables of class declarations
-    // TODO: enable
-    'no-class-assign': 0,
+    // http://eslint.org/docs/rules/no-class-assign
+    'no-class-assign': 2,
     // disallow arrow functions where they could be confused with comparisons
     // http://eslint.org/docs/rules/no-confusing-arrow
     'no-confusing-arrow': [2, {

From b20cf1966c008b2351e49476f29ff5adee5da6ae Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Fri, 6 May 2016 17:40:20 -0700
Subject: [PATCH 0644/1591] [eslint config] [base] [minor] enable
 `import/no-amd`

(per https://github.com/airbnb/javascript#modules--use-them )
---
 packages/eslint-config-airbnb-base/rules/es6.js | 3 +--
 1 file changed, 1 insertion(+), 2 deletions(-)

diff --git a/packages/eslint-config-airbnb-base/rules/es6.js b/packages/eslint-config-airbnb-base/rules/es6.js
index 1183f3da8d..bb099910eb 100644
--- a/packages/eslint-config-airbnb-base/rules/es6.js
+++ b/packages/eslint-config-airbnb-base/rules/es6.js
@@ -127,8 +127,7 @@ module.exports = {
     'import/no-commonjs': 0,
     // disallow AMD require/define
     // https://github.com/benmosher/eslint-plugin-import/blob/master/docs/rules/no-amd.md
-    // TODO: enable
-    'import/no-amd': 0,
+    'import/no-amd': 2,
     // disallow non-import statements appearing before import statements
     // https://github.com/benmosher/eslint-plugin-import/blob/master/docs/rules/imports-first.md
     // TODO: enable?

From 36e088759f33556b5e2d017ff66d2741fb5e22e0 Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Fri, 6 May 2016 17:40:57 -0700
Subject: [PATCH 0645/1591] [eslint config] [base] [patch] enable
 `import/no-duplicates`

---
 packages/eslint-config-airbnb-base/rules/es6.js | 3 +--
 1 file changed, 1 insertion(+), 2 deletions(-)

diff --git a/packages/eslint-config-airbnb-base/rules/es6.js b/packages/eslint-config-airbnb-base/rules/es6.js
index bb099910eb..789a925ec5 100644
--- a/packages/eslint-config-airbnb-base/rules/es6.js
+++ b/packages/eslint-config-airbnb-base/rules/es6.js
@@ -133,9 +133,8 @@ module.exports = {
     // TODO: enable?
     'import/imports-first': [0, 'absolute-first'],
     // disallow duplicate imports
-    // TODO: enable
     // https://github.com/benmosher/eslint-plugin-import/blob/master/docs/rules/no-duplicates.md
-    'import/no-duplicates': 0,
+    'import/no-duplicates': 2,
     // disallow use of jsdoc-marked-deprecated imports
     // https://github.com/benmosher/eslint-plugin-import/blob/master/docs/rules/no-deprecated.md
     'import/no-deprecated': 0,

From 92a3d5570b30a237307548023fd78bdf0f96d48a Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Fri, 6 May 2016 17:44:59 -0700
Subject: [PATCH 0646/1591] [eslint config] [base] [breaking] enable
 `import/no-mutable-exports`

---
 README.md                                       | 15 +++++++++++++++
 packages/eslint-config-airbnb-base/rules/es6.js |  3 +--
 2 files changed, 16 insertions(+), 2 deletions(-)

diff --git a/README.md b/README.md
index 9dbc425d34..7bae5ddab8 100644
--- a/README.md
+++ b/README.md
@@ -1138,6 +1138,21 @@ Other Style Guides
     } from 'foo';
     ```
 
+  <a name="modules--no-mutable-exports"></a>
+  - [10.5](#modules--no-mutable-exports) Do not export mutable bindings.
+ eslint: [`import/no-mutable-exports`](https://github.com/benmosher/eslint-plugin-import/blob/master/docs/rules/no-mutable-exports.md)
+    > Why? Mutation should be avoided in general, but in particular when exporting mutable bindings. While this technique may be needed for some special cases, in general, only constant references should be exported.
+
+    ```javascript
+    // bad
+    let foo = 3;
+    export { foo }
+
+    // good
+    const foo = 3;
+    export { foo }
+    ```
+
 **[⬆ back to top](#table-of-contents)**
 
 ## Iterators and Generators
diff --git a/packages/eslint-config-airbnb-base/rules/es6.js b/packages/eslint-config-airbnb-base/rules/es6.js
index 789a925ec5..bc4391347a 100644
--- a/packages/eslint-config-airbnb-base/rules/es6.js
+++ b/packages/eslint-config-airbnb-base/rules/es6.js
@@ -162,8 +162,7 @@ module.exports = {
     'import/newline-after-import': 0,
     // Forbid mutable exports
     // https://github.com/benmosher/eslint-plugin-import/blob/master/docs/rules/no-mutable-exports.md
-    // TODO: enable
-    'import/no-mutable-exports': 0,
+    'import/no-mutable-exports': 2,
   },
   'settings': {
     'import/resolver': {

From 1b31efc07e906b724b5249808fdbdc30d480c2e1 Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Fri, 6 May 2016 18:04:54 -0700
Subject: [PATCH 0647/1591] [eslint config] [base] v3.0.0

---
 packages/eslint-config-airbnb-base/CHANGELOG.md | 10 ++++++++++
 packages/eslint-config-airbnb-base/package.json |  2 +-
 2 files changed, 11 insertions(+), 1 deletion(-)

diff --git a/packages/eslint-config-airbnb-base/CHANGELOG.md b/packages/eslint-config-airbnb-base/CHANGELOG.md
index 90cb27edde..2f2e88384d 100644
--- a/packages/eslint-config-airbnb-base/CHANGELOG.md
+++ b/packages/eslint-config-airbnb-base/CHANGELOG.md
@@ -1,3 +1,13 @@
+3.0.0 / 2016-05-07
+==================
+ - [breaking] enable `import/no-mutable-exports`
+ - [breaking] enable `no-class-assign` rule, to pair with `no-func-assign`
+ - [breaking] widen `no-extra-parens` to include everything, except `nestedBinaryExpressions`
+ - [breaking] Re-enabling `newline-per-chained-call` (#748)
+ - [minor] enable `import/no-amd`
+ - [patch] enable `import/no-duplicates`
+ - [deps] update `eslint`, `eslint-plugin-import`, `eslint-find-rules`
+
 2.0.0 / 2016-04-29
 ==================
  - [breaking] enable `no-unsafe-finally` rule
diff --git a/packages/eslint-config-airbnb-base/package.json b/packages/eslint-config-airbnb-base/package.json
index ea064e7e50..23ab4e84c6 100644
--- a/packages/eslint-config-airbnb-base/package.json
+++ b/packages/eslint-config-airbnb-base/package.json
@@ -1,6 +1,6 @@
 {
   "name": "eslint-config-airbnb-base",
-  "version": "2.0.0",
+  "version": "3.0.0",
   "description": "Airbnb's base JS ESLint config, following our styleguide",
   "main": "index.js",
   "scripts": {

From 8b396ab9efcf18d5968335e6de4cadcd60c0a14b Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Sat, 7 May 2016 10:33:05 -0700
Subject: [PATCH 0648/1591] [eslint config] [deps] Update
 `eslint-config-airbnb-base`, `eslint-plugin-jsx-a11y`,
 `eslint-plugin-import`, `eslint-find-rules`

---
 packages/eslint-config-airbnb/package.json | 12 ++++++------
 1 file changed, 6 insertions(+), 6 deletions(-)

diff --git a/packages/eslint-config-airbnb/package.json b/packages/eslint-config-airbnb/package.json
index d6201cb3e7..b4b1ccc2e0 100644
--- a/packages/eslint-config-airbnb/package.json
+++ b/packages/eslint-config-airbnb/package.json
@@ -43,22 +43,22 @@
   },
   "homepage": "https://github.com/airbnb/javascript",
   "dependencies": {
-    "eslint-config-airbnb-base": "^2.0.0"
+    "eslint-config-airbnb-base": "^3.0.0"
   },
   "devDependencies": {
     "babel-tape-runner": "^1.3.1",
     "eslint": "^2.9.0",
-    "eslint-find-rules": "^1.8.0",
-    "eslint-plugin-import": "^1.6.1",
-    "eslint-plugin-jsx-a11y": "^1.0.4",
+    "eslint-find-rules": "^1.9.2",
+    "eslint-plugin-import": "^1.7.0",
+    "eslint-plugin-jsx-a11y": "^1.2.0",
     "eslint-plugin-react": "^5.0.1",
     "react": "*",
     "tape": "^4.5.1"
   },
   "peerDependencies": {
     "eslint": "^2.9.0",
-    "eslint-plugin-jsx-a11y": "^1.0.4",
-    "eslint-plugin-import": "^1.6.1",
+    "eslint-plugin-jsx-a11y": "^1.2.0",
+    "eslint-plugin-import": "^1.7.0",
     "eslint-plugin-react": "^5.0.1"
   }
 }

From 330169d15e6792eb7ccffeb7e1efc08b159a69e3 Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Sat, 7 May 2016 10:39:47 -0700
Subject: [PATCH 0649/1591] [eslint config] v9.0.0

---
 packages/eslint-config-airbnb/CHANGELOG.md | 5 +++++
 packages/eslint-config-airbnb/package.json | 2 +-
 2 files changed, 6 insertions(+), 1 deletion(-)

diff --git a/packages/eslint-config-airbnb/CHANGELOG.md b/packages/eslint-config-airbnb/CHANGELOG.md
index d829f4a1f3..69d01eff1f 100644
--- a/packages/eslint-config-airbnb/CHANGELOG.md
+++ b/packages/eslint-config-airbnb/CHANGELOG.md
@@ -1,3 +1,8 @@
+9.0.0 / 2016-05-07
+==================
+- [breaking] update `eslint-config-airbnb-base` to v3
+- [deps] update `eslint-find-rules`, `eslint-plugin-import`, `eslint-plugin-jsx-a11y`
+
 8.0.0 / 2016-04-21
 ==================
 - [breaking] Migrate non-React rules to a separate linter config (`eslint-config-airbnb-base`)
diff --git a/packages/eslint-config-airbnb/package.json b/packages/eslint-config-airbnb/package.json
index b4b1ccc2e0..e89e2f35ee 100644
--- a/packages/eslint-config-airbnb/package.json
+++ b/packages/eslint-config-airbnb/package.json
@@ -1,6 +1,6 @@
 {
   "name": "eslint-config-airbnb",
-  "version": "8.0.0",
+  "version": "9.0.0",
   "description": "Airbnb's ESLint config, following our styleguide",
   "main": "index.js",
   "scripts": {

From ba5d9f0cd7baee0a30d3c06872dc83131c476500 Mon Sep 17 00:00:00 2001
From: Alejandro Oviedo <alejandro.oviedo.g@gmail.com>
Date: Sun, 8 May 2016 11:33:58 -0300
Subject: [PATCH 0650/1591] add links to resources on mdn

---
 README.md | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/README.md b/README.md
index 7bae5ddab8..87a4e02fba 100644
--- a/README.md
+++ b/README.md
@@ -325,7 +325,7 @@ Other Style Guides
     ```
 
   <a name="arrays--push"></a><a name="4.2"></a>
-  - [4.2](#arrays--push) Use Array#push instead of direct assignment to add items to an array.
+  - [4.2](#arrays--push) Use [Array#push](https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Array/push) instead of direct assignment to add items to an array.
 
     ```javascript
     const someStack = [];
@@ -355,7 +355,7 @@ Other Style Guides
     ```
 
   <a name="arrays--from"></a><a name="4.4"></a>
-  - [4.4](#arrays--from) To convert an array-like object to an array, use Array#from.
+  - [4.4](#arrays--from) To convert an array-like object to an array, use [Array#from](https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Array/from).
 
     ```javascript
     const foo = document.querySelectorAll('.foo');

From 56a524a47ed0b71f348d6bfaa42289d562f6bc5b Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Sun, 8 May 2016 14:53:24 -0700
Subject: [PATCH 0651/1591] [eslint config] [base] [patch] re-disable
 `no-extra-parens`

Fixes #869, #867.
---
 packages/eslint-config-airbnb-base/rules/errors.js | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/packages/eslint-config-airbnb-base/rules/errors.js b/packages/eslint-config-airbnb-base/rules/errors.js
index f8f3897255..a9c1cf0052 100644
--- a/packages/eslint-config-airbnb-base/rules/errors.js
+++ b/packages/eslint-config-airbnb-base/rules/errors.js
@@ -26,7 +26,7 @@ module.exports = {
     'no-extra-boolean-cast': 0,
     // disallow unnecessary parentheses
     // http://eslint.org/docs/rules/no-extra-parens
-    'no-extra-parens': [2, 'all', {
+    'no-extra-parens': [0, 'all', {
       'conditionalAssign': true,
       'nestedBinaryExpressions': false,
     }],

From be5c90a417f772def10a5d8f0a0b677d47fc7ded Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Sun, 8 May 2016 14:54:14 -0700
Subject: [PATCH 0652/1591] [docs] Array.from, not Array#from

---
 README.md | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/README.md b/README.md
index 87a4e02fba..246ad4c36a 100644
--- a/README.md
+++ b/README.md
@@ -355,7 +355,7 @@ Other Style Guides
     ```
 
   <a name="arrays--from"></a><a name="4.4"></a>
-  - [4.4](#arrays--from) To convert an array-like object to an array, use [Array#from](https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Array/from).
+  - [4.4](#arrays--from) To convert an array-like object to an array, use [Array.from](https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Array/from).
 
     ```javascript
     const foo = document.querySelectorAll('.foo');

From d95dc3d5007a92c223029e261b101c939e1a52ba Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Sun, 8 May 2016 14:55:42 -0700
Subject: [PATCH 0653/1591] [eslint config] [base] v3.0.1

---
 packages/eslint-config-airbnb-base/CHANGELOG.md | 4 ++++
 packages/eslint-config-airbnb-base/package.json | 2 +-
 2 files changed, 5 insertions(+), 1 deletion(-)

diff --git a/packages/eslint-config-airbnb-base/CHANGELOG.md b/packages/eslint-config-airbnb-base/CHANGELOG.md
index 2f2e88384d..8da4fa9b58 100644
--- a/packages/eslint-config-airbnb-base/CHANGELOG.md
+++ b/packages/eslint-config-airbnb-base/CHANGELOG.md
@@ -1,3 +1,7 @@
+3.0.1 / 2016-05-08
+==================
+ - [patch] re-disable `no-extra-parens` (#869, #867)
+
 3.0.0 / 2016-05-07
 ==================
  - [breaking] enable `import/no-mutable-exports`
diff --git a/packages/eslint-config-airbnb-base/package.json b/packages/eslint-config-airbnb-base/package.json
index 23ab4e84c6..f6e9efc56a 100644
--- a/packages/eslint-config-airbnb-base/package.json
+++ b/packages/eslint-config-airbnb-base/package.json
@@ -1,6 +1,6 @@
 {
   "name": "eslint-config-airbnb-base",
-  "version": "3.0.0",
+  "version": "3.0.1",
   "description": "Airbnb's base JS ESLint config, following our styleguide",
   "main": "index.js",
   "scripts": {

From 03c5a1f955dcab759d4fd194e9a94908f503d0c3 Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Sun, 8 May 2016 14:57:25 -0700
Subject: [PATCH 0654/1591] [eslint config] v9.0.1

---
 packages/eslint-config-airbnb/CHANGELOG.md | 4 ++++
 packages/eslint-config-airbnb/package.json | 2 +-
 2 files changed, 5 insertions(+), 1 deletion(-)

diff --git a/packages/eslint-config-airbnb/CHANGELOG.md b/packages/eslint-config-airbnb/CHANGELOG.md
index 69d01eff1f..f2f71d1d36 100644
--- a/packages/eslint-config-airbnb/CHANGELOG.md
+++ b/packages/eslint-config-airbnb/CHANGELOG.md
@@ -1,3 +1,7 @@
+9.0.1 / 2016-05-08
+==================
+- [patch] update `eslint-config-airbnb-base` to v3.0.1
+
 9.0.0 / 2016-05-07
 ==================
 - [breaking] update `eslint-config-airbnb-base` to v3
diff --git a/packages/eslint-config-airbnb/package.json b/packages/eslint-config-airbnb/package.json
index e89e2f35ee..a7037fee77 100644
--- a/packages/eslint-config-airbnb/package.json
+++ b/packages/eslint-config-airbnb/package.json
@@ -1,6 +1,6 @@
 {
   "name": "eslint-config-airbnb",
-  "version": "9.0.0",
+  "version": "9.0.1",
   "description": "Airbnb's ESLint config, following our styleguide",
   "main": "index.js",
   "scripts": {

From b660d4cc3f0497b6ffd981857ffef68edec729ee Mon Sep 17 00:00:00 2001
From: Felipe Vargas <fvargasx@gmail.com>
Date: Sun, 8 May 2016 17:54:54 -0400
Subject: [PATCH 0655/1591] Add semicolon in arrow functions section

---
 README.md | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/README.md b/README.md
index 246ad4c36a..a5481c75a7 100644
--- a/README.md
+++ b/README.md
@@ -892,7 +892,7 @@ Other Style Guides
     const itemHeight = (item) => item.height > 256 ? item.largeSize : item.smallSize;
 
     // good
-    const itemHeight = (item) => { return item.height > 256 ? item.largeSize : item.smallSize; }
+    const itemHeight = (item) => { return item.height > 256 ? item.largeSize : item.smallSize; };
     ```
 
 **[⬆ back to top](#table-of-contents)**

From d25a199c566cf469a41939ceb97e7f307de1e719 Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Mon, 9 May 2016 15:40:46 -0700
Subject: [PATCH 0656/1591] [eslint config] [deps] update
 `eslint-config-airbnb-base`, `eslint-plugin-react`

---
 packages/eslint-config-airbnb/package.json   | 6 +++---
 packages/eslint-config-airbnb/rules/react.js | 4 ++++
 2 files changed, 7 insertions(+), 3 deletions(-)

diff --git a/packages/eslint-config-airbnb/package.json b/packages/eslint-config-airbnb/package.json
index a7037fee77..56be7274d7 100644
--- a/packages/eslint-config-airbnb/package.json
+++ b/packages/eslint-config-airbnb/package.json
@@ -43,7 +43,7 @@
   },
   "homepage": "https://github.com/airbnb/javascript",
   "dependencies": {
-    "eslint-config-airbnb-base": "^3.0.0"
+    "eslint-config-airbnb-base": "^3.0.1"
   },
   "devDependencies": {
     "babel-tape-runner": "^1.3.1",
@@ -51,7 +51,7 @@
     "eslint-find-rules": "^1.9.2",
     "eslint-plugin-import": "^1.7.0",
     "eslint-plugin-jsx-a11y": "^1.2.0",
-    "eslint-plugin-react": "^5.0.1",
+    "eslint-plugin-react": "^5.1.1",
     "react": "*",
     "tape": "^4.5.1"
   },
@@ -59,6 +59,6 @@
     "eslint": "^2.9.0",
     "eslint-plugin-jsx-a11y": "^1.2.0",
     "eslint-plugin-import": "^1.7.0",
-    "eslint-plugin-react": "^5.0.1"
+    "eslint-plugin-react": "^5.1.1"
   }
 }
diff --git a/packages/eslint-config-airbnb/rules/react.js b/packages/eslint-config-airbnb/rules/react.js
index d6930cc7af..bb77f6e8b7 100644
--- a/packages/eslint-config-airbnb/rules/react.js
+++ b/packages/eslint-config-airbnb/rules/react.js
@@ -168,6 +168,10 @@ module.exports = {
     // enforce JSX indentation
     // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/jsx-indent.md
     'react/jsx-indent': [2, 2],
+    // disallow target="_blank" on links
+    // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/jsx-no-target-blank.md
+    // TODO: enable
+    'react/jsx-no-target-blank': 0
   },
   'settings': {
     'import/resolver': {

From db732788e7d5d8f9672f1e990c32e32afc652f7b Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Mon, 9 May 2016 15:41:52 -0700
Subject: [PATCH 0657/1591] [eslint config] [react] [patch] loosen
 `jsx-pascal-case` rule to allow all caps component names

---
 packages/eslint-config-airbnb/rules/react.js | 5 ++++-
 1 file changed, 4 insertions(+), 1 deletion(-)

diff --git a/packages/eslint-config-airbnb/rules/react.js b/packages/eslint-config-airbnb/rules/react.js
index bb77f6e8b7..f4ca6457b9 100644
--- a/packages/eslint-config-airbnb/rules/react.js
+++ b/packages/eslint-config-airbnb/rules/react.js
@@ -64,7 +64,10 @@ module.exports = {
     'react/jsx-no-undef': 2,
     // Enforce PascalCase for user-defined JSX components
     // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/jsx-pascal-case.md
-    'react/jsx-pascal-case': 2,
+    'react/jsx-pascal-case': [2, {
+      'allowAllCaps': true,
+      'ignore': [],
+    }],
     // Enforce propTypes declarations alphabetical sorting
     // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/sort-prop-types.md
     'react/sort-prop-types': [0, {

From 5acae06653283132f07670d6535e151f651fd47b Mon Sep 17 00:00:00 2001
From: Joe Lencioni <joe.lencioni@airbnb.com>
Date: Thu, 12 May 2016 11:43:53 -0700
Subject: [PATCH 0658/1591] Add whitespace between rules

I found these rules all smashed together with comments a little
difficult to mentally parse, partly because it is ambiguous which line
the comment applies to. Separating with some whitespace helps a lot
here, and will also reduce the likelihood of merge conflicts in this
code.
---
 .../rules/best-practices.js                   | 65 +++++++++++++++++++
 .../eslint-config-airbnb-base/rules/errors.js | 26 ++++++++
 .../eslint-config-airbnb-base/rules/es6.js    | 49 ++++++++++++++
 .../eslint-config-airbnb-base/rules/legacy.js |  5 ++
 .../eslint-config-airbnb-base/rules/node.js   | 11 ++++
 .../eslint-config-airbnb-base/rules/style.js  | 60 +++++++++++++++++
 .../rules/variables.js                        | 12 ++++
 packages/eslint-config-airbnb/rules/react.js  | 45 +++++++++++++
 8 files changed, 273 insertions(+)

diff --git a/packages/eslint-config-airbnb-base/rules/best-practices.js b/packages/eslint-config-airbnb-base/rules/best-practices.js
index 2496c695a1..b9aab6157d 100644
--- a/packages/eslint-config-airbnb-base/rules/best-practices.js
+++ b/packages/eslint-config-airbnb-base/rules/best-practices.js
@@ -2,42 +2,59 @@ module.exports = {
   'rules': {
     // enforces getter/setter pairs in objects
     'accessor-pairs': 0,
+
     // enforces return statements in callbacks of array's methods
     // http://eslint.org/docs/rules/array-callback-return
     'array-callback-return': 2,
+
     // treat var statements as if they were block scoped
     'block-scoped-var': 2,
+
     // specify the maximum cyclomatic complexity allowed in a program
     'complexity': [0, 11],
+
     // require return statements to either always or never specify values
     'consistent-return': 2,
+
     // specify curly brace conventions for all control statements
     'curly': [2, 'multi-line'],
+
     // require default case in switch statements
     'default-case': [2, { 'commentPattern': '^no default$' }],
+
     // encourages use of dot notation whenever possible
     'dot-notation': [2, { 'allowKeywords': true }],
+
     // enforces consistent newlines before or after dots
     'dot-location': 0,
+
     // require the use of === and !==
     // http://eslint.org/docs/rules/eqeqeq
     'eqeqeq': [2, 'allow-null'],
+
     // make sure for-in loops have an if statement
     'guard-for-in': 2,
+
     // Blacklist certain identifiers to prevent them being used
     // http://eslint.org/docs/rules/id-blacklist
     'id-blacklist': 0,
+
     // disallow the use of alert, confirm, and prompt
     'no-alert': 1,
+
     // disallow use of arguments.caller or arguments.callee
     'no-caller': 2,
+
     // disallow lexical declarations in case/default clauses
     // http://eslint.org/docs/rules/no-case-declarations.html
     'no-case-declarations': 2,
+
     // disallow division operators explicitly at beginning of regular expression
     'no-div-regex': 0,
+
     // disallow else after a return in an if
     'no-else-return': 2,
+
     // disallow empty functions, except for standalone funcs/arrows
     // http://eslint.org/docs/rules/no-empty-function
     'no-empty-function': [2, {
@@ -47,38 +64,54 @@ module.exports = {
         'methods',
       ]
     }],
+
     // disallow empty destructuring patterns
     // http://eslint.org/docs/rules/no-empty-pattern
     'no-empty-pattern': 2,
+
     // disallow Unnecessary Labels
     // http://eslint.org/docs/rules/no-extra-label
     'no-extra-label': 2,
+
     // disallow comparisons to null without a type-checking operator
     'no-eq-null': 0,
+
     // disallow use of eval()
     'no-eval': 2,
+
     // disallow adding to native types
     'no-extend-native': 2,
+
     // disallow unnecessary function binding
     'no-extra-bind': 2,
+
     // disallow fallthrough of case statements
     'no-fallthrough': 2,
+
     // disallow the use of leading or trailing decimal points in numeric literals
     'no-floating-decimal': 2,
+
     // disallow the type conversions with shorter notations
     'no-implicit-coercion': 0,
+
     // disallow use of eval()-like methods
     'no-implied-eval': 2,
+
     // disallow this keywords outside of classes or class-like objects
     'no-invalid-this': 0,
+
     // disallow usage of __iterator__ property
     'no-iterator': 2,
+
     // disallow use of labels for anything other then loops and switches
     'no-labels': [2, { 'allowLoop': false, 'allowSwitch': false }],
+
     // disallow unnecessary nested blocks
     'no-lone-blocks': 2,
+
     // disallow creation of functions within loops
     'no-loop-func': 2,
+
     // disallow magic numbers
     // http://eslint.org/docs/rules/no-magic-numbers
     'no-magic-numbers': [0, {
@@ -87,33 +120,46 @@ module.exports = {
       'enforceConst': true,
       'detectObjects': false,
     }],
+
     // disallow use of multiple spaces
     'no-multi-spaces': 2,
+
     // disallow use of multiline strings
     'no-multi-str': 2,
+
     // disallow reassignments of native objects
     'no-native-reassign': 2,
+
     // disallow use of new operator when not part of the assignment or comparison
     'no-new': 2,
+
     // disallow use of new operator for Function object
     'no-new-func': 2,
+
     // disallows creating new instances of String, Number, and Boolean
     'no-new-wrappers': 2,
+
     // disallow use of (old style) octal literals
     'no-octal': 2,
+
     // disallow use of octal escape sequences in string literals, such as
     // var foo = 'Copyright \251';
     'no-octal-escape': 2,
+
     // disallow reassignment of function parameters
     // disallow parameter object manipulation
     // rule: http://eslint.org/docs/rules/no-param-reassign.html
     'no-param-reassign': [2, { 'props': true }],
+
     // disallow use of process.env
     'no-process-env': 0,
+
     // disallow usage of __proto__ property
     'no-proto': 2,
+
     // disallow declaring the same variable more then once
     'no-redeclare': 2,
+
     // disallow certain syntax forms
     // http://eslint.org/docs/rules/no-restricted-syntax
     'no-restricted-syntax': [
@@ -123,48 +169,67 @@ module.exports = {
       'LabeledStatement',
       'WithStatement',
     ],
+
     // disallow use of assignment in return statement
     'no-return-assign': 2,
+
     // disallow use of `javascript:` urls.
     'no-script-url': 2,
+
     // disallow comparisons where both sides are exactly the same
     'no-self-compare': 2,
+
     // disallow use of comma operator
     'no-sequences': 2,
+
     // restrict what can be thrown as an exception
     'no-throw-literal': 2,
+
     // disallow unmodified conditions of loops
     // http://eslint.org/docs/rules/no-unmodified-loop-condition
     'no-unmodified-loop-condition': 0,
+
     // disallow return/throw/break/continue inside finally blocks
     // http://eslint.org/docs/rules/no-unsafe-finally
     'no-unsafe-finally': 2,
+
     // disallow usage of expressions in statement position
     'no-unused-expressions': 2,
+
     // disallow unused labels
     // http://eslint.org/docs/rules/no-unused-labels
     'no-unused-labels': 2,
+
     // disallow unnecessary .call() and .apply()
     'no-useless-call': 0,
+
     // disallow useless string concatenation
     // http://eslint.org/docs/rules/no-useless-concat
     'no-useless-concat': 2,
+
     // disallow unnecessary string escaping
     // http://eslint.org/docs/rules/no-useless-escape
     'no-useless-escape': 2,
+
     // disallow use of void operator
     'no-void': 0,
+
     // disallow usage of configurable warning terms in comments: e.g. todo
     'no-warning-comments': [0, { 'terms': ['todo', 'fixme', 'xxx'], 'location': 'start' }],
+
     // disallow use of the with statement
     'no-with': 2,
+
     // require use of the second argument for parseInt()
     'radix': 2,
+
     // requires to declare all vars on top of their containing scope
     'vars-on-top': 2,
+
     // require immediate function invocation to be wrapped in parentheses
     // http://eslint.org/docs/rules/wrap-iife.html
     'wrap-iife': [2, 'outside'],
+
     // require or disallow Yoda conditions
     'yoda': 2
   }
diff --git a/packages/eslint-config-airbnb-base/rules/errors.js b/packages/eslint-config-airbnb-base/rules/errors.js
index a9c1cf0052..62e8fd7b15 100644
--- a/packages/eslint-config-airbnb-base/rules/errors.js
+++ b/packages/eslint-config-airbnb-base/rules/errors.js
@@ -2,61 +2,87 @@ module.exports = {
   'rules': {
     // disallow assignment in conditional expressions
     'no-cond-assign': [2, 'always'],
+
     // disallow use of console
     'no-console': 1,
+
     // disallow use of constant expressions in conditions
     'no-constant-condition': 1,
+
     // disallow control characters in regular expressions
     'no-control-regex': 2,
+
     // disallow use of debugger
     'no-debugger': 2,
+
     // disallow duplicate arguments in functions
     'no-dupe-args': 2,
+
     // disallow duplicate keys when creating object literals
     'no-dupe-keys': 2,
+
     // disallow a duplicate case label.
     'no-duplicate-case': 2,
+
     // disallow the use of empty character classes in regular expressions
     'no-empty-character-class': 2,
+
     // disallow empty statements
     'no-empty': 2,
+
     // disallow assigning to the exception in a catch block
     'no-ex-assign': 2,
+
     // disallow double-negation boolean casts in a boolean context
     'no-extra-boolean-cast': 0,
+
     // disallow unnecessary parentheses
     // http://eslint.org/docs/rules/no-extra-parens
     'no-extra-parens': [0, 'all', {
       'conditionalAssign': true,
       'nestedBinaryExpressions': false,
     }],
+
     // disallow unnecessary semicolons
     'no-extra-semi': 2,
+
     // disallow overwriting functions written as function declarations
     'no-func-assign': 2,
+
     // disallow function or variable declarations in nested blocks
     'no-inner-declarations': 2,
+
     // disallow invalid regular expression strings in the RegExp constructor
     'no-invalid-regexp': 2,
+
     // disallow irregular whitespace outside of strings and comments
     'no-irregular-whitespace': 2,
+
     // disallow negation of the left operand of an in expression
     'no-negated-in-lhs': 2,
+
     // disallow the use of object properties of the global object (Math and JSON) as functions
     'no-obj-calls': 2,
+
     // disallow multiple spaces in a regular expression literal
     'no-regex-spaces': 2,
+
     // disallow sparse arrays
     'no-sparse-arrays': 2,
+
     // disallow unreachable statements after a return, throw, continue, or break statement
     'no-unreachable': 2,
+
     // disallow comparisons with the value NaN
     'use-isnan': 2,
+
     // ensure JSDoc comments are valid
     // http://eslint.org/docs/rules/valid-jsdoc
     'valid-jsdoc': 0,
+
     // ensure that the results of typeof are compared against a valid string
     'valid-typeof': 2,
+
     // Avoid code that looks like two expressions but is actually one
     'no-unexpected-multiline': 0
   }
diff --git a/packages/eslint-config-airbnb-base/rules/es6.js b/packages/eslint-config-airbnb-base/rules/es6.js
index bc4391347a..ab54858c79 100644
--- a/packages/eslint-config-airbnb-base/rules/es6.js
+++ b/packages/eslint-config-airbnb-base/rules/es6.js
@@ -13,101 +13,136 @@ module.exports = {
   'plugins': [
     'import'
   ],
+
   'rules': {
     // enforces no braces where they can be omitted
     // http://eslint.org/docs/rules/arrow-body-style
     'arrow-body-style': [2, 'as-needed'],
+
     // require parens in arrow function arguments
     'arrow-parens': 0,
+
     // require space before/after arrow function's arrow
     // http://eslint.org/docs/rules/arrow-spacing
     'arrow-spacing': [2, { 'before': true, 'after': true }],
+
     // require trailing commas in multiline object literals
     'comma-dangle': [2, 'always-multiline'],
+
     // verify super() callings in constructors
     'constructor-super': 0,
+
     // enforce the spacing around the * in generator functions
     'generator-star-spacing': 0,
+
     // disallow modifying variables of class declarations
     // http://eslint.org/docs/rules/no-class-assign
     'no-class-assign': 2,
+
     // disallow arrow functions where they could be confused with comparisons
     // http://eslint.org/docs/rules/no-confusing-arrow
     'no-confusing-arrow': [2, {
       'allowParens': true,
     }],
+
     // disallow modifying variables that are declared using const
     'no-const-assign': 2,
+
     // disallow duplicate class members
     // http://eslint.org/docs/rules/no-dupe-class-members
     'no-dupe-class-members': 2,
+
     // disallow importing from the same path more than once
     // http://eslint.org/docs/rules/no-duplicate-imports
     'no-duplicate-imports': 2,
+
     // disallow symbol constructor
     // http://eslint.org/docs/rules/no-new-symbol
     'no-new-symbol': 2,
+
     // disallow specific globals
     'no-restricted-globals': 0,
+
     // disallow specific imports
     // http://eslint.org/docs/rules/no-restricted-imports
     'no-restricted-imports': 0,
+
     // disallow to use this/super before super() calling in constructors.
     'no-this-before-super': 0,
+
     // require let or const instead of var
     'no-var': 2,
+
     // disallow useless computed property keys
     // http://eslint.org/docs/rules/no-useless-computed-key
     'no-useless-computed-key': 2,
+
     // disallow unnecessary constructor
     // http://eslint.org/docs/rules/no-useless-constructor
     'no-useless-constructor': 2,
+
     // require method and property shorthand syntax for object literals
     // http://eslint.org/docs/rules/object-shorthand
     'object-shorthand': [2, 'always'],
+
     // suggest using arrow functions as callbacks
     'prefer-arrow-callback': [2, {
       'allowNamedFunctions': false,
       'allowUnboundThis': true,
     }],
+
     // suggest using of const declaration for variables that are never modified after declared
     'prefer-const': 2,
+
     // suggest using the spread operator instead of .apply()
     'prefer-spread': 0,
+
     // suggest using Reflect methods where applicable
     'prefer-reflect': 0,
+
     // use rest parameters instead of arguments
     // http://eslint.org/docs/rules/prefer-rest-params
     'prefer-rest-params': 2,
+
     // suggest using template literals instead of string concatenation
     // http://eslint.org/docs/rules/prefer-template
     'prefer-template': 2,
+
     // disallow generator functions that do not have yield
     'require-yield': 0,
+
     // import sorting
     // http://eslint.org/docs/rules/sort-imports
     'sort-imports': 0,
+
     // enforce usage of spacing in template strings
     // http://eslint.org/docs/rules/template-curly-spacing
     'template-curly-spacing': 2,
+
     // enforce spacing around the * in yield* expressions
     // http://eslint.org/docs/rules/yield-star-spacing
     'yield-star-spacing': [2, 'after'],
+
     // disallow invalid exports, e.g. multiple defaults
     // https://github.com/benmosher/eslint-plugin-import/blob/master/docs/rules/export.md
     'import/export': 2,
+
     // ensure default import coupled with default export
     // https://github.com/benmosher/eslint-plugin-import/blob/master/docs/rules/default.md#when-not-to-use-it
     'import/default': 0,
+
     // Ensure consistent use of file extension within the import path
     // https://github.com/benmosher/eslint-plugin-import/blob/master/docs/rules/extensions.md
     // TODO: enable
     'import/extensions': [0, 'never'],
+
     // ensure named imports coupled with named exports
     // https://github.com/benmosher/eslint-plugin-import/blob/master/docs/rules/named.md#when-not-to-use-it
     'import/named': 0,
+
     // https://github.com/benmosher/eslint-plugin-import/blob/master/docs/rules/namespace.md
     'import/namespace': 0,
+
     // Forbid the use of extraneous packages
     // https://github.com/benmosher/eslint-plugin-import/blob/master/docs/rules/no-extraneous-dependencies.md
     // TODO: enable
@@ -115,40 +150,51 @@ module.exports = {
       'devDependencies': false,
       'optionalDependencies': false,
     }],
+
     // ensure imports point to files/modules that can be resolved
     // https://github.com/benmosher/eslint-plugin-import/blob/master/docs/rules/no-unresolved.md
     'import/no-unresolved': [2, { 'commonjs': true }],
+
     // do not allow a default import name to match a named export
     // https://github.com/benmosher/eslint-plugin-import/blob/master/docs/rules/no-named-as-default.md
     // TODO: enable
     'import/no-named-as-default': 0,
+
     // disallow require()
     // https://github.com/benmosher/eslint-plugin-import/blob/master/docs/rules/no-commonjs.md
     'import/no-commonjs': 0,
+
     // disallow AMD require/define
     // https://github.com/benmosher/eslint-plugin-import/blob/master/docs/rules/no-amd.md
     'import/no-amd': 2,
+
     // disallow non-import statements appearing before import statements
     // https://github.com/benmosher/eslint-plugin-import/blob/master/docs/rules/imports-first.md
     // TODO: enable?
     'import/imports-first': [0, 'absolute-first'],
+
     // disallow duplicate imports
     // https://github.com/benmosher/eslint-plugin-import/blob/master/docs/rules/no-duplicates.md
     'import/no-duplicates': 2,
+
     // disallow use of jsdoc-marked-deprecated imports
     // https://github.com/benmosher/eslint-plugin-import/blob/master/docs/rules/no-deprecated.md
     'import/no-deprecated': 0,
+
     // disallow namespace imports
     // TODO: enable?
     // https://github.com/benmosher/eslint-plugin-import/blob/master/docs/rules/no-namespace.md
     'import/no-namespace': 0,
+
     // warn on accessing default export property names that are also named exports
     // TODO: enable?
     // https://github.com/benmosher/eslint-plugin-import/blob/master/docs/rules/no-named-as-default-member.md
     'import/no-named-as-default-member': 0,
+
     // No Node.js builtin modules
     // https://github.com/benmosher/eslint-plugin-import/blob/master/docs/rules/no-nodejs-modules.md
     'import/no-nodejs-modules': 0,
+
     // Enforce a convention in module import order
     // https://github.com/benmosher/eslint-plugin-import/blob/master/docs/rules/order.md
     // TODO: enable?
@@ -156,14 +202,17 @@ module.exports = {
       'groups': ['builtin', 'external', 'internal', 'parent', 'sibling', 'index'],
       'newlines-between': 'never',
     }],
+
     // Require a newline after the last import/require in a group
     // https://github.com/benmosher/eslint-plugin-import/blob/master/docs/rules/newline-after-import.md
     // TODO: enable
     'import/newline-after-import': 0,
+
     // Forbid mutable exports
     // https://github.com/benmosher/eslint-plugin-import/blob/master/docs/rules/no-mutable-exports.md
     'import/no-mutable-exports': 2,
   },
+
   'settings': {
     'import/resolver': {
       'node': {
diff --git a/packages/eslint-config-airbnb-base/rules/legacy.js b/packages/eslint-config-airbnb-base/rules/legacy.js
index dc34856f5e..32a55b0cba 100644
--- a/packages/eslint-config-airbnb-base/rules/legacy.js
+++ b/packages/eslint-config-airbnb-base/rules/legacy.js
@@ -2,14 +2,19 @@ module.exports = {
   'rules': {
     // disallow trailing commas in object literals
     'comma-dangle': [2, 'never'],
+
     // specify the maximum depth that blocks can be nested
     'max-depth': [0, 4],
+
     // limits the number of parameters that can be used in the function declaration.
     'max-params': [0, 3],
+
     // specify the maximum number of statement allowed in a function
     'max-statements': [0, 10],
+
     // disallow use of bitwise operators
     'no-bitwise': 0,
+
     // disallow use of unary operators, ++ and --
     'no-plusplus': 0
   }
diff --git a/packages/eslint-config-airbnb-base/rules/node.js b/packages/eslint-config-airbnb-base/rules/node.js
index b42aeaa2bd..8191501444 100644
--- a/packages/eslint-config-airbnb-base/rules/node.js
+++ b/packages/eslint-config-airbnb-base/rules/node.js
@@ -5,30 +5,41 @@ module.exports = {
   'plugins': [
     'import'
   ],
+
   'rules': {
     // enforce return after a callback
     'callback-return': 0,
+
     // require all requires be top-level
     // http://eslint.org/docs/rules/global-require
     'global-require': 2,
+
     // enforces error handling in callbacks (node environment)
     'handle-callback-err': 0,
+
     // disallow mixing regular variable and require declarations
     'no-mixed-requires': [0, false],
+
     // disallow use of new operator with the require function
     'no-new-require': 0,
+
     // disallow string concatenation with __dirname and __filename
     'no-path-concat': 0,
+
     // disallow process.exit()
     'no-process-exit': 0,
+
     // restrict usage of specified node modules
     'no-restricted-modules': 0,
+
     // disallow use of synchronous methods (off by default)
     'no-sync': 0,
+
     // ensure imports point to files/modules that can be resolved
     // https://github.com/benmosher/eslint-plugin-import/blob/master/docs/rules/no-unresolved.md
     'import/no-unresolved': [2, { 'commonjs': true }]
   },
+
   'settings': {
     'import/resolver': {
       'node': {
diff --git a/packages/eslint-config-airbnb-base/rules/style.js b/packages/eslint-config-airbnb-base/rules/style.js
index e9d0b501b0..aec28d6438 100644
--- a/packages/eslint-config-airbnb-base/rules/style.js
+++ b/packages/eslint-config-airbnb-base/rules/style.js
@@ -2,38 +2,53 @@ module.exports = {
   'rules': {
     // enforce spacing inside array brackets
     'array-bracket-spacing': [2, 'never'],
+
     // enforce spacing inside single-line blocks
     // http://eslint.org/docs/rules/block-spacing
     'block-spacing': [2, 'always'],
+
     // enforce one true brace style
     'brace-style': [2, '1tbs', { 'allowSingleLine': true }],
+
     // require camel case names
     'camelcase': [2, { 'properties': 'never' }],
+
     // enforce spacing before and after comma
     'comma-spacing': [2, { 'before': false, 'after': true }],
+
     // enforce one true comma style
     'comma-style': [2, 'last'],
+
     // disallow padding inside computed properties
     'computed-property-spacing': [2, 'never'],
+
     // enforces consistent naming when capturing the current execution context
     'consistent-this': 0,
+
     // enforce newline at the end of file, with no multiple empty lines
     'eol-last': 2,
+
     // require function expressions to have a name
     'func-names': 1,
+
     // enforces use of function declarations or expressions
     'func-style': 0,
+
     // this option enforces minimum and maximum identifier lengths
     // (variable names, property names etc.)
     'id-length': 0,
+
     // this option sets a specific tab width for your code
     // http://eslint.org/docs/rules/indent
     'indent': [2, 2, { 'SwitchCase': 1, 'VariableDeclarator': 1 }],
+
     // specify whether double or single quotes should be used in JSX attributes
     // http://eslint.org/docs/rules/jsx-quotes
     'jsx-quotes': 0,
+
     // enforces spacing between keys and values in object literal properties
     'key-spacing': [2, { 'beforeColon': false, 'afterColon': true }],
+
     // require a space before & after certain keywords
     'keyword-spacing': [2, {
       'before': true,
@@ -44,112 +59,157 @@ module.exports = {
         'case': { 'after': true }
       }
     }],
+
     // enforces empty lines around comments
     'lines-around-comment': 0,
+
     // disallow mixed 'LF' and 'CRLF' as linebreaks
     'linebreak-style': 0,
+
     // specify the maximum length of a line in your program
     // http://eslint.org/docs/rules/max-len
     'max-len': [2, 100, 2, {
       'ignoreUrls': true,
       'ignoreComments': false
     }],
+
     // specify the maximum depth callbacks can be nested
     'max-nested-callbacks': 0,
+
     // restrict the number of statements per line
     // http://eslint.org/docs/rules/max-statements-per-line
     'max-statements-per-line': [0, { 'max': 1 }],
+
     // require a capital letter for constructors
     'new-cap': [2, { 'newIsCap': true }],
+
     // disallow the omission of parentheses when invoking a constructor with no arguments
     'new-parens': 0,
+
     // allow/disallow an empty newline after var statement
     'newline-after-var': 0,
+
     // http://eslint.org/docs/rules/newline-before-return
     'newline-before-return': 0,
+
     // enforces new line after each method call in the chain to make it
     // more readable and easy to maintain
     // http://eslint.org/docs/rules/newline-per-chained-call
     'newline-per-chained-call': [2, { 'ignoreChainWithDepth': 3 }],
+
     // disallow use of the Array constructor
     'no-array-constructor': 2,
+
     // disallow use of the continue statement
     'no-continue': 0,
+
     // disallow comments inline after code
     'no-inline-comments': 0,
+
     // disallow if as the only statement in an else block
     'no-lonely-if': 0,
+
     // disallow mixed spaces and tabs for indentation
     'no-mixed-spaces-and-tabs': 2,
+
     // disallow multiple empty lines and only one newline at the end
     'no-multiple-empty-lines': [2, { 'max': 2, 'maxEOF': 1 }],
+
     // disallow negated conditions
     // http://eslint.org/docs/rules/no-negated-condition
     'no-negated-condition': 0,
+
     // disallow nested ternary expressions
     'no-nested-ternary': 2,
+
     // disallow use of the Object constructor
     'no-new-object': 2,
+
     // disallow space between function identifier and application
     'no-spaced-func': 2,
+
     // disallow the use of ternary operators
     'no-ternary': 0,
+
     // disallow trailing whitespace at the end of lines
     'no-trailing-spaces': 2,
+
     // disallow dangling underscores in identifiers
     'no-underscore-dangle': [2, { 'allowAfterThis': false }],
+
     // disallow the use of Boolean literals in conditional expressions
     // also, prefer `a || b` over `a ? a : b`
     // http://eslint.org/docs/rules/no-unneeded-ternary
     'no-unneeded-ternary': [2, { 'defaultAssignment': false }],
+
     // disallow whitespace before properties
     // http://eslint.org/docs/rules/no-whitespace-before-property
     'no-whitespace-before-property': 2,
+
     // require padding inside curly braces
     'object-curly-spacing': [2, 'always'],
+
     // allow just one var statement per function
     'one-var': [2, 'never'],
+
     // require a newline around variable declaration
     // http://eslint.org/docs/rules/one-var-declaration-per-line
     'one-var-declaration-per-line': [2, 'always'],
+
     // require assignment operator shorthand where possible or prohibit it entirely
     'operator-assignment': 0,
+
     // enforce operators to be placed before or after line breaks
     'operator-linebreak': 0,
+
     // enforce padding within blocks
     'padded-blocks': [2, 'never'],
+
     // require quotes around object literal property names
     // http://eslint.org/docs/rules/quote-props.html
     'quote-props': [2, 'as-needed', { 'keywords': false, 'unnecessary': true, 'numbers': false }],
+
     // specify whether double or single quotes should be used
     'quotes': [2, 'single', 'avoid-escape'],
+
     // require identifiers to match the provided regular expression
     'id-match': 0,
+
     // do not require jsdoc
     // http://eslint.org/docs/rules/require-jsdoc
     'require-jsdoc': 0,
+
     // enforce spacing before and after semicolons
     'semi-spacing': [2, { 'before': false, 'after': true }],
+
     // require or disallow use of semicolons instead of ASI
     'semi': [2, 'always'],
+
     // sort variables within the same declaration block
     'sort-vars': 0,
+
     // require or disallow space before blocks
     'space-before-blocks': 2,
+
     // require or disallow space before function opening parenthesis
     // http://eslint.org/docs/rules/space-before-function-paren
     'space-before-function-paren': [2, { 'anonymous': 'always', 'named': 'never' }],
+
     // require or disallow spaces inside parentheses
     'space-in-parens': [2, 'never'],
+
     // require spaces around operators
     'space-infix-ops': 2,
+
     // Require or disallow spaces before/after unary operators
     'space-unary-ops': 0,
+
     // require or disallow a space immediately following the // or /* in a comment
     'spaced-comment': [2, 'always', {
       'exceptions': ['-', '+'],
       'markers': ['=', '!']           // space here to support sprockets directives
     }],
+
     // require regex literals to be wrapped in parentheses
     'wrap-regex': 0
   }
diff --git a/packages/eslint-config-airbnb-base/rules/variables.js b/packages/eslint-config-airbnb-base/rules/variables.js
index 3bfcc83fde..b7d9ea12d2 100644
--- a/packages/eslint-config-airbnb-base/rules/variables.js
+++ b/packages/eslint-config-airbnb-base/rules/variables.js
@@ -2,30 +2,42 @@ module.exports = {
   'rules': {
     // enforce or disallow variable initializations at definition
     'init-declarations': 0,
+
     // disallow the catch clause parameter name being the same as a variable in the outer scope
     'no-catch-shadow': 0,
+
     // disallow deletion of variables
     'no-delete-var': 2,
+
     // disallow var and named functions in global scope
     // http://eslint.org/docs/rules/no-implicit-globals
     'no-implicit-globals': 0,
+
     // disallow labels that share a name with a variable
     'no-label-var': 0,
+
     // disallow self assignment
     // http://eslint.org/docs/rules/no-self-assign
     'no-self-assign': 2,
+
     // disallow shadowing of names such as arguments
     'no-shadow-restricted-names': 2,
+
     // disallow declaration of variables already declared in the outer scope
     'no-shadow': 2,
+
     // disallow use of undefined when initializing variables
     'no-undef-init': 0,
+
     // disallow use of undeclared variables unless mentioned in a /*global */ block
     'no-undef': 2,
+
     // disallow use of undefined variable
     'no-undefined': 0,
+
     // disallow declaration of variables that are not used in the code
     'no-unused-vars': [2, { 'vars': 'local', 'args': 'after-used' }],
+
     // disallow use of variables before they are defined
     'no-use-before-define': 2
   }
diff --git a/packages/eslint-config-airbnb/rules/react.js b/packages/eslint-config-airbnb/rules/react.js
index f4ca6457b9..6b29b5033b 100644
--- a/packages/eslint-config-airbnb/rules/react.js
+++ b/packages/eslint-config-airbnb/rules/react.js
@@ -10,42 +10,53 @@ module.exports = {
   'ecmaFeatures': {
     'jsx': true
   },
+
   // View link below for react rules documentation
   // https://github.com/yannickcr/eslint-plugin-react#list-of-supported-rules
   'rules': {
     // specify whether double or single quotes should be used in JSX attributes
     // http://eslint.org/docs/rules/jsx-quotes
     'jsx-quotes': [2, 'prefer-double'],
+
     // Prevent missing displayName in a React component definition
     // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/display-name.md
     'react/display-name': [0, { 'ignoreTranspilerName': false }],
+
     // Forbid certain propTypes (any, array, object)
     // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/forbid-prop-types.md
     'react/forbid-prop-types': [0, { 'forbid': ['any', 'array', 'object'] }],
+
     // Enforce boolean attributes notation in JSX
     // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/jsx-boolean-value.md
     'react/jsx-boolean-value': [2, 'never'],
+
     // Validate closing bracket location in JSX
     // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/jsx-closing-bracket-location.md
     'react/jsx-closing-bracket-location': [2, 'line-aligned'],
+
     // Enforce or disallow spaces inside of curly braces in JSX attributes
     // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/jsx-curly-spacing.md
     'react/jsx-curly-spacing': [2, 'never', { 'allowMultiline': true }],
+
     // Enforce event handler naming conventions in JSX
     // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/jsx-handler-names.md
     'react/jsx-handler-names': [0, {
       'eventHandlerPrefix': 'handle',
       'eventHandlerPropPrefix': 'on',
     }],
+
     // Validate props indentation in JSX
     // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/jsx-indent-props.md
     'react/jsx-indent-props': [2, 2],
+
     // Validate JSX has key prop when in array or iterator
     // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/jsx-key.md
     'react/jsx-key': 0,
+
     // Limit maximum of props on a single line in JSX
     // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/jsx-max-props-per-line.md
     'react/jsx-max-props-per-line': [0, { 'maximum': 1 }],
+
     // Prevent usage of .bind() in JSX props
     // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/jsx-no-bind.md
     'react/jsx-no-bind': [2, {
@@ -53,95 +64,123 @@ module.exports = {
       'allowArrowFunctions': true,
       'allowBind': false,
     }],
+
     // Prevent duplicate props in JSX
     // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/jsx-no-duplicate-props.md
     'react/jsx-no-duplicate-props': [0, { 'ignoreCase': false }],
+
     // Prevent usage of unwrapped JSX strings
     // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/jsx-no-literals.md
     'react/jsx-no-literals': 0,
+
     // Disallow undeclared variables in JSX
     // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/jsx-no-undef.md
     'react/jsx-no-undef': 2,
+
     // Enforce PascalCase for user-defined JSX components
     // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/jsx-pascal-case.md
     'react/jsx-pascal-case': [2, {
       'allowAllCaps': true,
       'ignore': [],
     }],
+
     // Enforce propTypes declarations alphabetical sorting
     // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/sort-prop-types.md
     'react/sort-prop-types': [0, {
       'ignoreCase': false,
       'callbacksLast': false,
     }],
+
     // deprecated in favor of react/jsx-sort-props
     'react/jsx-sort-prop-types': 0,
+
     // Enforce props alphabetical sorting
     // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/jsx-sort-props.md
     'react/jsx-sort-props': [0, {
       'ignoreCase': false,
       'callbacksLast': false,
     }],
+
     // Prevent React to be incorrectly marked as unused
     // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/jsx-uses-react.md
     'react/jsx-uses-react': [2, { 'pragma': 'React' }],
+
     // Prevent variables used in JSX to be incorrectly marked as unused
     // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/jsx-uses-vars.md
     'react/jsx-uses-vars': 2,
+
     // Prevent usage of dangerous JSX properties
     // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/no-danger.md
     'react/no-danger': 0,
+
     // Prevent usage of deprecated methods
     // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/no-deprecated.md
     'react/no-deprecated': [1, { 'react': '0.14.0' }],
+
     // Prevent usage of setState in componentDidMount
     // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/no-did-mount-set-state.md
     'react/no-did-mount-set-state': [2, 'allow-in-func'],
+
     // Prevent usage of setState in componentDidUpdate
     // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/no-did-update-set-state.md
     'react/no-did-update-set-state': [2, 'allow-in-func'],
+
     // Prevent direct mutation of this.state
     // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/no-direct-mutation-state.md
     'react/no-direct-mutation-state': 0,
+
     // Prevent usage of isMounted
     // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/no-is-mounted.md
     'react/no-is-mounted': 2,
+
     // Prevent multiple component definition per file
     // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/no-multi-comp.md
     'react/no-multi-comp': [2, { 'ignoreStateless': true }],
+
     // Prevent usage of setState
     // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/no-set-state.md
     'react/no-set-state': 0,
+
     // Prevent using string references
     // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/no-string-refs.md
     'react/no-string-refs': 0,
+
     // Prevent usage of unknown DOM property
     // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/no-unknown-property.md
     'react/no-unknown-property': 2,
+
     // Require ES6 class declarations over React.createClass
     // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/prefer-es6-class.md
     'react/prefer-es6-class': [2, 'always'],
+
     // Require stateless functions when not using lifecycle methods, setState or ref
     // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/prefer-stateless-function.md
     'react/prefer-stateless-function': 2,
+
     // Prevent missing props validation in a React component definition
     // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/prop-types.md
     'react/prop-types': [2, { 'ignore': [], 'customValidators': [] }],
+
     // Prevent missing React when using JSX
     // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/react-in-jsx-scope.md
     'react/react-in-jsx-scope': 2,
+
     // Restrict file extensions that may be required
     // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/require-extension.md
     'react/require-extension': [0, { 'extensions': ['.jsx'] }],
+
     // Require render() methods to return something
     // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/require-render-return.md
     'react/require-render-return': 2,
+
     // Prevent extra closing tags for components without children
     // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/self-closing-comp.md
     'react/self-closing-comp': 2,
+
     // Enforce spaces before the closing bracket of self-closing JSX elements
     // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/jsx-space-before-closing.md
     'react/jsx-space-before-closing': [2, 'always'],
+
     // Enforce component methods order
     // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/sort-comp.md
     'react/sort-comp': [2, {
@@ -155,6 +194,7 @@ module.exports = {
         'render'
       ],
     }],
+
     // Prevent missing parentheses around multilines JSX
     // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/wrap-multilines.md
     'react/wrap-multilines': [2, {
@@ -162,20 +202,25 @@ module.exports = {
       'assignment': true,
       'return': true
     }],
+
     // Require that the first prop in a JSX element be on a new line when the element is multiline
     // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/jsx-first-prop-new-line.md
     'react/jsx-first-prop-new-line': [2, 'multiline'],
+
     // enforce spacing around jsx equals signs
     // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/jsx-equals-spacing.md
     'react/jsx-equals-spacing': [2, 'never'],
+
     // enforce JSX indentation
     // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/jsx-indent.md
     'react/jsx-indent': [2, 2],
+
     // disallow target="_blank" on links
     // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/jsx-no-target-blank.md
     // TODO: enable
     'react/jsx-no-target-blank': 0
   },
+
   'settings': {
     'import/resolver': {
       'node': {

From d68a067f2b244cf9f8fd90afd7029305b0c1b856 Mon Sep 17 00:00:00 2001
From: Joe Lencioni <joe.lencioni@airbnb.com>
Date: Thu, 12 May 2016 12:01:15 -0700
Subject: [PATCH 0659/1591] Prepare to enable import/prefer-default-export

This was recently added to eslint-plugin-export. It enforces that
modules that only have a single export use a default export instead of a
named export. Since this is a breaking change and we want to cluster
breaking changes, I marked it as 0 for now with a TODO to enable when
that time comes.
---
 README.md                                       | 12 ++++++++++++
 packages/eslint-config-airbnb-base/rules/es6.js |  5 +++++
 2 files changed, 17 insertions(+)

diff --git a/README.md b/README.md
index a5481c75a7..a75a104e31 100644
--- a/README.md
+++ b/README.md
@@ -1153,6 +1153,18 @@ Other Style Guides
     export { foo }
     ```
 
+  <a name="modules--prefer-default-export"></a>
+  - [10.6](#modules--prefer-default-export) In modules with a single export, prefer default export over named export.
+ eslint: [`import/prefer-default-export`](https://github.com/benmosher/eslint-plugin-import/blob/master/docs/rules/prefer-default-export.md)
+
+    ```javascript
+    // bad
+    export function foo() {}
+
+    // good
+    export default function foo() {}
+    ```
+
 **[⬆ back to top](#table-of-contents)**
 
 ## Iterators and Generators
diff --git a/packages/eslint-config-airbnb-base/rules/es6.js b/packages/eslint-config-airbnb-base/rules/es6.js
index ab54858c79..b264580f06 100644
--- a/packages/eslint-config-airbnb-base/rules/es6.js
+++ b/packages/eslint-config-airbnb-base/rules/es6.js
@@ -203,6 +203,11 @@ module.exports = {
       'newlines-between': 'never',
     }],
 
+    // Require modules with a single export to use a default export
+    // https://github.com/benmosher/eslint-plugin-import/blob/master/docs/rules/prefer-default-export.md
+    // TODO: enable
+    'import/prefer-default-export': 0,
+
     // Require a newline after the last import/require in a group
     // https://github.com/benmosher/eslint-plugin-import/blob/master/docs/rules/newline-after-import.md
     // TODO: enable

From 788fb2297a54f5ab9f1f310c3740b73176727a99 Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Thu, 12 May 2016 17:28:57 -0500
Subject: [PATCH 0660/1591] [eslint config] [*] [deps] update
 `eslint-plugin-import`

---
 packages/eslint-config-airbnb-base/package.json | 4 ++--
 packages/eslint-config-airbnb/package.json      | 4 ++--
 2 files changed, 4 insertions(+), 4 deletions(-)

diff --git a/packages/eslint-config-airbnb-base/package.json b/packages/eslint-config-airbnb-base/package.json
index f6e9efc56a..124a5ee101 100644
--- a/packages/eslint-config-airbnb-base/package.json
+++ b/packages/eslint-config-airbnb-base/package.json
@@ -46,11 +46,11 @@
     "babel-tape-runner": "^1.3.1",
     "eslint": "^2.9.0",
     "eslint-find-rules": "^1.9.2",
-    "eslint-plugin-import": "^1.7.0",
+    "eslint-plugin-import": "^1.8.0",
     "tape": "^4.5.1"
   },
   "peerDependencies": {
     "eslint": "^2.9.0",
-    "eslint-plugin-import": "^1.7.0"
+    "eslint-plugin-import": "^1.8.0"
   }
 }
diff --git a/packages/eslint-config-airbnb/package.json b/packages/eslint-config-airbnb/package.json
index 56be7274d7..ad621d7d30 100644
--- a/packages/eslint-config-airbnb/package.json
+++ b/packages/eslint-config-airbnb/package.json
@@ -49,7 +49,7 @@
     "babel-tape-runner": "^1.3.1",
     "eslint": "^2.9.0",
     "eslint-find-rules": "^1.9.2",
-    "eslint-plugin-import": "^1.7.0",
+    "eslint-plugin-import": "^1.8.0",
     "eslint-plugin-jsx-a11y": "^1.2.0",
     "eslint-plugin-react": "^5.1.1",
     "react": "*",
@@ -58,7 +58,7 @@
   "peerDependencies": {
     "eslint": "^2.9.0",
     "eslint-plugin-jsx-a11y": "^1.2.0",
-    "eslint-plugin-import": "^1.7.0",
+    "eslint-plugin-import": "^1.8.0",
     "eslint-plugin-react": "^5.1.1"
   }
 }

From c7faa91328ed86f68f08bbf08bf7ccc82d48c6aa Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Thu, 12 May 2016 17:36:27 -0500
Subject: [PATCH 0661/1591] =?UTF-8?q?[eslint=20config]=20[tests]=20Even=20?=
 =?UTF-8?q?though=20the=20base=20config=20may=20not=20be=20up=20to=20date?=
 =?UTF-8?q?=20in=20the=20main=20package,=20let=E2=80=99s=20`npm=20link`=20?=
 =?UTF-8?q?the=20base=20package=20into=20the=20main=20one=20for=20the=20sa?=
 =?UTF-8?q?ke=20of=20travis-ci=20tests.?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 package.json | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/package.json b/package.json
index e800a3b9b1..f51d8af1cb 100644
--- a/package.json
+++ b/package.json
@@ -4,7 +4,7 @@
   "description": "A mostly reasonable approach to JavaScript.",
   "scripts": {
     "preinstall": "npm run install:config && npm run install:config:base",
-    "install:config": "cd packages/eslint-config-airbnb && npm install",
+    "install:config": "cd packages/eslint-config-airbnb && npm install && npm install ../eslint-config-airbnb-base",
     "install:config:base": "cd packages/eslint-config-airbnb-base && npm install",
     "test": "npm run --silent test:config && npm run --silent test:config:base",
     "test:config": "cd packages/eslint-config-airbnb; npm test",

From 4ac8aed12638d486463b571e29e0795bdc613426 Mon Sep 17 00:00:00 2001
From: Joe Lencioni <joe.lencioni@airbnb.com>
Date: Fri, 13 May 2016 09:48:18 -0700
Subject: [PATCH 0662/1591] Prepare to enable react-a11y rules

When I first added these, I left TODO notes to come back and evaluate
enabling them. I've gone through and think that we should definitely at
least enable the rules that enforce basic spec compliance (e.g. that
props don't have typos and that all of the required props are provided
for the given role). Since these deal with basic correctness, I don't
think we need to add any verbiage to the style guide for these rules.

We still have some more that we should evaluate and decide about
enabling here, but this is a good step in the right direction.
---
 packages/eslint-config-airbnb/rules/react-a11y.js | 10 +++++-----
 1 file changed, 5 insertions(+), 5 deletions(-)

diff --git a/packages/eslint-config-airbnb/rules/react-a11y.js b/packages/eslint-config-airbnb/rules/react-a11y.js
index eead8f84b5..2816b20acb 100644
--- a/packages/eslint-config-airbnb/rules/react-a11y.js
+++ b/packages/eslint-config-airbnb/rules/react-a11y.js
@@ -12,18 +12,18 @@ module.exports = {
     'jsx-a11y/aria-role': 2,
 
     // Enforce all aria-* props are valid.
-    // TODO: evaluate
+    // TODO: enable
     // https://github.com/evcohen/eslint-plugin-jsx-a11y/blob/master/docs/rules/aria-props.md
     'jsx-a11y/aria-props': 0,
 
     // Enforce ARIA state and property values are valid.
-    // TODO: evaluate
+    // TODO: enable
     // https://github.com/evcohen/eslint-plugin-jsx-a11y/blob/master/docs/rules/aria-proptypes.md
     'jsx-a11y/aria-proptypes': 0,
 
     // Enforce that elements that do not support ARIA roles, states, and
     // properties do not have those attributes.
-    // TODO: evaluate
+    // TODO: enable
     // https://github.com/evcohen/eslint-plugin-jsx-a11y/blob/master/docs/rules/aria-unsupported-elements.md
     'jsx-a11y/aria-unsupported-elements': 0,
 
@@ -69,13 +69,13 @@ module.exports = {
 
     // Enforce that elements with ARIA roles must have all required attributes
     // for that role.
-    // TODO: evaluate
+    // TODO: enable
     // https://github.com/evcohen/eslint-plugin-jsx-a11y/blob/master/docs/rules/role-has-required-aria-props.md
     'jsx-a11y/role-has-required-aria-props': 0,
 
     // Enforce that elements with explicit or implicit roles defined contain
     // only aria-* properties supported by that role.
-    // TODO: evaluate
+    // TODO: enable
     // https://github.com/evcohen/eslint-plugin-jsx-a11y/blob/master/docs/rules/role-supports-aria-props.md
     'jsx-a11y/role-supports-aria-props': 0,
 

From 638b312b6cce89db820f2cab1d3129ef49bad471 Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Sun, 15 May 2016 21:14:59 -0500
Subject: [PATCH 0663/1591] [eslint config] [base] update `eslint`

---
 packages/eslint-config-airbnb-base/package.json    |  4 ++--
 packages/eslint-config-airbnb-base/rules/errors.js |  1 +
 packages/eslint-config-airbnb-base/rules/es6.js    | 10 ++++++++--
 packages/eslint-config-airbnb-base/rules/style.js  |  7 +++++++
 4 files changed, 18 insertions(+), 4 deletions(-)

diff --git a/packages/eslint-config-airbnb-base/package.json b/packages/eslint-config-airbnb-base/package.json
index 124a5ee101..1b8d36ff16 100644
--- a/packages/eslint-config-airbnb-base/package.json
+++ b/packages/eslint-config-airbnb-base/package.json
@@ -44,13 +44,13 @@
   "homepage": "https://github.com/airbnb/javascript",
   "devDependencies": {
     "babel-tape-runner": "^1.3.1",
-    "eslint": "^2.9.0",
+    "eslint": "^2.10.1",
     "eslint-find-rules": "^1.9.2",
     "eslint-plugin-import": "^1.8.0",
     "tape": "^4.5.1"
   },
   "peerDependencies": {
-    "eslint": "^2.9.0",
+    "eslint": "^2.10.1",
     "eslint-plugin-import": "^1.8.0"
   }
 }
diff --git a/packages/eslint-config-airbnb-base/rules/errors.js b/packages/eslint-config-airbnb-base/rules/errors.js
index 62e8fd7b15..c29f8be9ed 100644
--- a/packages/eslint-config-airbnb-base/rules/errors.js
+++ b/packages/eslint-config-airbnb-base/rules/errors.js
@@ -41,6 +41,7 @@ module.exports = {
     'no-extra-parens': [0, 'all', {
       'conditionalAssign': true,
       'nestedBinaryExpressions': false,
+      'returnAssign': false,
     }],
 
     // disallow unnecessary semicolons
diff --git a/packages/eslint-config-airbnb-base/rules/es6.js b/packages/eslint-config-airbnb-base/rules/es6.js
index b264580f06..f1e4b8e735 100644
--- a/packages/eslint-config-airbnb-base/rules/es6.js
+++ b/packages/eslint-config-airbnb-base/rules/es6.js
@@ -83,7 +83,10 @@ module.exports = {
 
     // require method and property shorthand syntax for object literals
     // http://eslint.org/docs/rules/object-shorthand
-    'object-shorthand': [2, 'always'],
+    'object-shorthand': [2, 'always', {
+      'ignoreConstructors': false,
+      'avoidQuotes': false, // TODO: enable
+    }],
 
     // suggest using arrow functions as callbacks
     'prefer-arrow-callback': [2, {
@@ -92,7 +95,10 @@ module.exports = {
     }],
 
     // suggest using of const declaration for variables that are never modified after declared
-    'prefer-const': 2,
+    'prefer-const': [2, {
+      'destructuring': 'any',
+      'ignoreReadBeforeAssign': false, // TODO: make true
+    }],
 
     // suggest using the spread operator instead of .apply()
     'prefer-spread': 0,
diff --git a/packages/eslint-config-airbnb-base/rules/style.js b/packages/eslint-config-airbnb-base/rules/style.js
index aec28d6438..30c7715db3 100644
--- a/packages/eslint-config-airbnb-base/rules/style.js
+++ b/packages/eslint-config-airbnb-base/rules/style.js
@@ -149,6 +149,13 @@ module.exports = {
     // require padding inside curly braces
     'object-curly-spacing': [2, 'always'],
 
+    // enforce "same line" or "multiple line" on object properties.
+    // http://eslint.org/docs/rules/object-property-newline
+    // TODO: enable when https://github.com/eslint/eslint/issues/5667#issuecomment-219334864 is resolved
+    'object-property-newline': [0, {
+      'allowMultiplePropertiesPerLine': true,
+    }],
+
     // allow just one var statement per function
     'one-var': [2, 'never'],
 

From 8d6d227848d0f60e92d755413dcea9cfb874053f Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Sun, 15 May 2016 20:56:54 -0500
Subject: [PATCH 0664/1591] =?UTF-8?q?[eslint=20config]=20[*]=20[tests]=20E?=
 =?UTF-8?q?ven=20though=20the=20base=20config=20may=20not=20be=20up=20to?=
 =?UTF-8?q?=20date=20in=20the=20main=20package,=20let=E2=80=99s=20`npm=20l?=
 =?UTF-8?q?ink`=20the=20base=20package=20into=20the=20main=20one=20for=20t?=
 =?UTF-8?q?he=20sake=20of=20travis-ci=20tests.?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

(Followup from c7faa91328ed86f68f08bbf08bf7ccc82d48c6aa)
---
 .travis.yml                                     | 2 +-
 package.json                                    | 9 ++++++---
 packages/eslint-config-airbnb-base/package.json | 3 ++-
 packages/eslint-config-airbnb/package.json      | 3 ++-
 4 files changed, 11 insertions(+), 6 deletions(-)

diff --git a/.travis.yml b/.travis.yml
index c03ccdd0d5..4e625829a3 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -12,7 +12,7 @@ before_install:
   - 'if [ "${TRAVIS_NODE_VERSION}" != "0.9" ]; then case "$(npm --version)" in 1.*) npm install -g npm@1.4.28 ;; 2.*) npm install -g npm@2 ;; esac ; fi'
   - 'if [ "${TRAVIS_NODE_VERSION}" != "0.6" ] && [ "${TRAVIS_NODE_VERSION}" != "0.9" ]; then npm install -g npm; fi'
 script:
-  - 'npm test'
+  - 'npm run travis'
 sudo: false
 matrix:
   fast_finish: true
diff --git a/package.json b/package.json
index f51d8af1cb..a977f26b3d 100644
--- a/package.json
+++ b/package.json
@@ -4,11 +4,14 @@
   "description": "A mostly reasonable approach to JavaScript.",
   "scripts": {
     "preinstall": "npm run install:config && npm run install:config:base",
-    "install:config": "cd packages/eslint-config-airbnb && npm install && npm install ../eslint-config-airbnb-base",
-    "install:config:base": "cd packages/eslint-config-airbnb-base && npm install",
+    "install:config": "cd packages/eslint-config-airbnb && npm prune && npm install",
+    "install:config:base": "cd packages/eslint-config-airbnb-base && npm prune && npm install",
     "test": "npm run --silent test:config && npm run --silent test:config:base",
     "test:config": "cd packages/eslint-config-airbnb; npm test",
-    "test:config:base": "cd packages/eslint-config-airbnb-base; npm test"
+    "test:config:base": "cd packages/eslint-config-airbnb-base; npm test",
+    "travis": "npm run --silent travis:config && npm run --silent travis:config:base",
+    "travis:config": "cd packages/eslint-config-airbnb; npm run travis",
+    "travis:config:base": "cd packages/eslint-config-airbnb-base; npm run travis"
   },
   "repository": {
     "type": "git",
diff --git a/packages/eslint-config-airbnb-base/package.json b/packages/eslint-config-airbnb-base/package.json
index 1b8d36ff16..0ecf7740ba 100644
--- a/packages/eslint-config-airbnb-base/package.json
+++ b/packages/eslint-config-airbnb-base/package.json
@@ -7,7 +7,8 @@
     "lint": "eslint .",
     "tests-only": "babel-tape-runner ./test/test-*.js",
     "pretest": "eslint-find-rules --unused",
-    "test": "npm run --silent lint && npm run --silent tests-only"
+    "test": "npm run --silent lint && npm run --silent tests-only",
+    "travis": "npm run --silent test"
   },
   "repository": {
     "type": "git",
diff --git a/packages/eslint-config-airbnb/package.json b/packages/eslint-config-airbnb/package.json
index ad621d7d30..b0b6095aa5 100644
--- a/packages/eslint-config-airbnb/package.json
+++ b/packages/eslint-config-airbnb/package.json
@@ -7,7 +7,8 @@
     "lint": "eslint .",
     "tests-only": "babel-tape-runner ./test/test-*.js",
     "pretest": "eslint-find-rules --unused",
-    "test": "npm run --silent lint && npm run --silent tests-only"
+    "test": "npm run --silent lint && npm run --silent tests-only",
+    "travis": "cd ../eslint-config-airbnb-base && npm link && cd - && npm link eslint-config-airbnb-base && npm run --silent test ; npm unlink eslint-config-airbnb-base >/dev/null &"
   },
   "repository": {
     "type": "git",

From 7a8083795dbc4a3fd76f817bd084c80a4d63aa4a Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Sun, 15 May 2016 21:42:45 -0500
Subject: [PATCH 0665/1591] =?UTF-8?q?[eslint=20config]=20[base]=20[patch]?=
 =?UTF-8?q?=20Loosen=20`prefer-const`=20to=20not=20warn=20when=20the=20var?=
 =?UTF-8?q?iable=20is=20=E2=80=9Cread=E2=80=9D=20before=20being=20assigned?=
 =?UTF-8?q?=20to.?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 packages/eslint-config-airbnb-base/rules/es6.js | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/packages/eslint-config-airbnb-base/rules/es6.js b/packages/eslint-config-airbnb-base/rules/es6.js
index f1e4b8e735..0e974871ba 100644
--- a/packages/eslint-config-airbnb-base/rules/es6.js
+++ b/packages/eslint-config-airbnb-base/rules/es6.js
@@ -97,7 +97,7 @@ module.exports = {
     // suggest using of const declaration for variables that are never modified after declared
     'prefer-const': [2, {
       'destructuring': 'any',
-      'ignoreReadBeforeAssign': false, // TODO: make true
+      'ignoreReadBeforeAssign': true,
     }],
 
     // suggest using the spread operator instead of .apply()

From 10f4dd88aaab6a8456373a3a0c5fc00ada3c4172 Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Sun, 15 May 2016 21:43:40 -0500
Subject: [PATCH 0666/1591] [eslint config] [base] [patch] `object-shorthand`:
 do not warn when the concise form would have a string literal as a name.

---
 packages/eslint-config-airbnb-base/rules/es6.js | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/packages/eslint-config-airbnb-base/rules/es6.js b/packages/eslint-config-airbnb-base/rules/es6.js
index 0e974871ba..d0ca7c6326 100644
--- a/packages/eslint-config-airbnb-base/rules/es6.js
+++ b/packages/eslint-config-airbnb-base/rules/es6.js
@@ -85,7 +85,7 @@ module.exports = {
     // http://eslint.org/docs/rules/object-shorthand
     'object-shorthand': [2, 'always', {
       'ignoreConstructors': false,
-      'avoidQuotes': false, // TODO: enable
+      'avoidQuotes': true,
     }],
 
     // suggest using arrow functions as callbacks

From 3948eb66d6cc991220f65a476c3a925241b6ecd7 Mon Sep 17 00:00:00 2001
From: akai <akainice@gmail.com>
Date: Mon, 16 May 2016 23:28:20 +0800
Subject: [PATCH 0667/1591] [eslint config] [base] [breaking] re-order rules

---
 packages/eslint-config-airbnb-base/legacy.js  |  1 -
 .../rules/best-practices.js                   | 37 +++++----------
 .../eslint-config-airbnb-base/rules/errors.js | 21 ++++++---
 .../eslint-config-airbnb-base/rules/es6.js    | 18 +++-----
 .../eslint-config-airbnb-base/rules/legacy.js | 21 ---------
 .../eslint-config-airbnb-base/rules/node.js   |  3 ++
 .../eslint-config-airbnb-base/rules/style.js  | 45 +++++++++++++++----
 .../rules/variables.js                        | 19 +++-----
 8 files changed, 79 insertions(+), 86 deletions(-)
 delete mode 100644 packages/eslint-config-airbnb-base/rules/legacy.js

diff --git a/packages/eslint-config-airbnb-base/legacy.js b/packages/eslint-config-airbnb-base/legacy.js
index 51786e8e04..986a6ff4e6 100644
--- a/packages/eslint-config-airbnb-base/legacy.js
+++ b/packages/eslint-config-airbnb-base/legacy.js
@@ -2,7 +2,6 @@ module.exports = {
   extends: [
     './rules/best-practices',
     './rules/errors',
-    './rules/legacy',
     './rules/node',
     './rules/style',
     './rules/variables'
diff --git a/packages/eslint-config-airbnb-base/rules/best-practices.js b/packages/eslint-config-airbnb-base/rules/best-practices.js
index b9aab6157d..f43cd2c372 100644
--- a/packages/eslint-config-airbnb-base/rules/best-practices.js
+++ b/packages/eslint-config-airbnb-base/rules/best-practices.js
@@ -35,10 +35,6 @@ module.exports = {
     // make sure for-in loops have an if statement
     'guard-for-in': 2,
 
-    // Blacklist certain identifiers to prevent them being used
-    // http://eslint.org/docs/rules/id-blacklist
-    'id-blacklist': 0,
-
     // disallow the use of alert, confirm, and prompt
     'no-alert': 1,
 
@@ -69,10 +65,6 @@ module.exports = {
     // http://eslint.org/docs/rules/no-empty-pattern
     'no-empty-pattern': 2,
 
-    // disallow Unnecessary Labels
-    // http://eslint.org/docs/rules/no-extra-label
-    'no-extra-label': 2,
-
     // disallow comparisons to null without a type-checking operator
     'no-eq-null': 0,
 
@@ -85,6 +77,10 @@ module.exports = {
     // disallow unnecessary function binding
     'no-extra-bind': 2,
 
+    // disallow Unnecessary Labels
+    // http://eslint.org/docs/rules/no-extra-label
+    'no-extra-label': 2,
+
     // disallow fallthrough of case statements
     'no-fallthrough': 2,
 
@@ -94,6 +90,10 @@ module.exports = {
     // disallow the type conversions with shorter notations
     'no-implicit-coercion': 0,
 
+    // disallow var and named functions in global scope
+    // http://eslint.org/docs/rules/no-implicit-globals
+    'no-implicit-globals': 0,
+
     // disallow use of eval()-like methods
     'no-implied-eval': 2,
 
@@ -151,31 +151,22 @@ module.exports = {
     // rule: http://eslint.org/docs/rules/no-param-reassign.html
     'no-param-reassign': [2, { 'props': true }],
 
-    // disallow use of process.env
-    'no-process-env': 0,
-
     // disallow usage of __proto__ property
     'no-proto': 2,
 
     // disallow declaring the same variable more then once
     'no-redeclare': 2,
 
-    // disallow certain syntax forms
-    // http://eslint.org/docs/rules/no-restricted-syntax
-    'no-restricted-syntax': [
-      2,
-      'DebuggerStatement',
-      'ForInStatement',
-      'LabeledStatement',
-      'WithStatement',
-    ],
-
     // disallow use of assignment in return statement
     'no-return-assign': 2,
 
     // disallow use of `javascript:` urls.
     'no-script-url': 2,
 
+    // disallow self assignment
+    // http://eslint.org/docs/rules/no-self-assign
+    'no-self-assign': 2,
+
     // disallow comparisons where both sides are exactly the same
     'no-self-compare': 2,
 
@@ -189,10 +180,6 @@ module.exports = {
     // http://eslint.org/docs/rules/no-unmodified-loop-condition
     'no-unmodified-loop-condition': 0,
 
-    // disallow return/throw/break/continue inside finally blocks
-    // http://eslint.org/docs/rules/no-unsafe-finally
-    'no-unsafe-finally': 2,
-
     // disallow usage of expressions in statement position
     'no-unused-expressions': 2,
 
diff --git a/packages/eslint-config-airbnb-base/rules/errors.js b/packages/eslint-config-airbnb-base/rules/errors.js
index c29f8be9ed..19823c8736 100644
--- a/packages/eslint-config-airbnb-base/rules/errors.js
+++ b/packages/eslint-config-airbnb-base/rules/errors.js
@@ -1,5 +1,8 @@
 module.exports = {
   'rules': {
+    // require trailing commas in multiline object literals
+    'comma-dangle': [2, 'always-multiline'],
+
     // disallow assignment in conditional expressions
     'no-cond-assign': [2, 'always'],
 
@@ -24,12 +27,12 @@ module.exports = {
     // disallow a duplicate case label.
     'no-duplicate-case': 2,
 
-    // disallow the use of empty character classes in regular expressions
-    'no-empty-character-class': 2,
-
     // disallow empty statements
     'no-empty': 2,
 
+    // disallow the use of empty character classes in regular expressions
+    'no-empty-character-class': 2,
+
     // disallow assigning to the exception in a catch block
     'no-ex-assign': 2,
 
@@ -71,9 +74,16 @@ module.exports = {
     // disallow sparse arrays
     'no-sparse-arrays': 2,
 
+    // Avoid code that looks like two expressions but is actually one
+    'no-unexpected-multiline': 0,
+
     // disallow unreachable statements after a return, throw, continue, or break statement
     'no-unreachable': 2,
 
+    // disallow return/throw/break/continue inside finally blocks
+    // http://eslint.org/docs/rules/no-unsafe-finally
+    'no-unsafe-finally': 2,
+
     // disallow comparisons with the value NaN
     'use-isnan': 2,
 
@@ -82,9 +92,6 @@ module.exports = {
     'valid-jsdoc': 0,
 
     // ensure that the results of typeof are compared against a valid string
-    'valid-typeof': 2,
-
-    // Avoid code that looks like two expressions but is actually one
-    'no-unexpected-multiline': 0
+    'valid-typeof': 2
   }
 };
diff --git a/packages/eslint-config-airbnb-base/rules/es6.js b/packages/eslint-config-airbnb-base/rules/es6.js
index d0ca7c6326..216bcd8283 100644
--- a/packages/eslint-config-airbnb-base/rules/es6.js
+++ b/packages/eslint-config-airbnb-base/rules/es6.js
@@ -26,9 +26,6 @@ module.exports = {
     // http://eslint.org/docs/rules/arrow-spacing
     'arrow-spacing': [2, { 'before': true, 'after': true }],
 
-    // require trailing commas in multiline object literals
-    'comma-dangle': [2, 'always-multiline'],
-
     // verify super() callings in constructors
     'constructor-super': 0,
 
@@ -60,9 +57,6 @@ module.exports = {
     // http://eslint.org/docs/rules/no-new-symbol
     'no-new-symbol': 2,
 
-    // disallow specific globals
-    'no-restricted-globals': 0,
-
     // disallow specific imports
     // http://eslint.org/docs/rules/no-restricted-imports
     'no-restricted-imports': 0,
@@ -70,9 +64,6 @@ module.exports = {
     // disallow to use this/super before super() calling in constructors.
     'no-this-before-super': 0,
 
-    // require let or const instead of var
-    'no-var': 2,
-
     // disallow useless computed property keys
     // http://eslint.org/docs/rules/no-useless-computed-key
     'no-useless-computed-key': 2,
@@ -81,6 +72,9 @@ module.exports = {
     // http://eslint.org/docs/rules/no-useless-constructor
     'no-useless-constructor': 2,
 
+    // require let or const instead of var
+    'no-var': 2,
+
     // require method and property shorthand syntax for object literals
     // http://eslint.org/docs/rules/object-shorthand
     'object-shorthand': [2, 'always', {
@@ -100,9 +94,6 @@ module.exports = {
       'ignoreReadBeforeAssign': true,
     }],
 
-    // suggest using the spread operator instead of .apply()
-    'prefer-spread': 0,
-
     // suggest using Reflect methods where applicable
     'prefer-reflect': 0,
 
@@ -110,6 +101,9 @@ module.exports = {
     // http://eslint.org/docs/rules/prefer-rest-params
     'prefer-rest-params': 2,
 
+    // suggest using the spread operator instead of .apply()
+    'prefer-spread': 0,
+
     // suggest using template literals instead of string concatenation
     // http://eslint.org/docs/rules/prefer-template
     'prefer-template': 2,
diff --git a/packages/eslint-config-airbnb-base/rules/legacy.js b/packages/eslint-config-airbnb-base/rules/legacy.js
deleted file mode 100644
index 32a55b0cba..0000000000
--- a/packages/eslint-config-airbnb-base/rules/legacy.js
+++ /dev/null
@@ -1,21 +0,0 @@
-module.exports = {
-  'rules': {
-    // disallow trailing commas in object literals
-    'comma-dangle': [2, 'never'],
-
-    // specify the maximum depth that blocks can be nested
-    'max-depth': [0, 4],
-
-    // limits the number of parameters that can be used in the function declaration.
-    'max-params': [0, 3],
-
-    // specify the maximum number of statement allowed in a function
-    'max-statements': [0, 10],
-
-    // disallow use of bitwise operators
-    'no-bitwise': 0,
-
-    // disallow use of unary operators, ++ and --
-    'no-plusplus': 0
-  }
-};
diff --git a/packages/eslint-config-airbnb-base/rules/node.js b/packages/eslint-config-airbnb-base/rules/node.js
index 8191501444..69b46b29c2 100644
--- a/packages/eslint-config-airbnb-base/rules/node.js
+++ b/packages/eslint-config-airbnb-base/rules/node.js
@@ -26,6 +26,9 @@ module.exports = {
     // disallow string concatenation with __dirname and __filename
     'no-path-concat': 0,
 
+    // disallow use of process.env
+    'no-process-env': 0,
+
     // disallow process.exit()
     'no-process-exit': 0,
 
diff --git a/packages/eslint-config-airbnb-base/rules/style.js b/packages/eslint-config-airbnb-base/rules/style.js
index 30c7715db3..48a55dafcd 100644
--- a/packages/eslint-config-airbnb-base/rules/style.js
+++ b/packages/eslint-config-airbnb-base/rules/style.js
@@ -34,10 +34,17 @@ module.exports = {
     // enforces use of function declarations or expressions
     'func-style': 0,
 
+    // Blacklist certain identifiers to prevent them being used
+    // http://eslint.org/docs/rules/id-blacklist
+    'id-blacklist': 0,
+
     // this option enforces minimum and maximum identifier lengths
     // (variable names, property names etc.)
     'id-length': 0,
 
+    // require identifiers to match the provided regular expression
+    'id-match': 0,
+
     // this option sets a specific tab width for your code
     // http://eslint.org/docs/rules/indent
     'indent': [2, 2, { 'SwitchCase': 1, 'VariableDeclarator': 1 }],
@@ -60,11 +67,14 @@ module.exports = {
       }
     }],
 
+    // disallow mixed 'LF' and 'CRLF' as linebreaks
+    'linebreak-style': 0,
+
     // enforces empty lines around comments
     'lines-around-comment': 0,
 
-    // disallow mixed 'LF' and 'CRLF' as linebreaks
-    'linebreak-style': 0,
+    // specify the maximum depth that blocks can be nested
+    'max-depth': [0, 4],
 
     // specify the maximum length of a line in your program
     // http://eslint.org/docs/rules/max-len
@@ -76,6 +86,12 @@ module.exports = {
     // specify the maximum depth callbacks can be nested
     'max-nested-callbacks': 0,
 
+    // limits the number of parameters that can be used in the function declaration.
+    'max-params': [0, 3],
+
+    // specify the maximum number of statement allowed in a function
+    'max-statements': [0, 10],
+
     // restrict the number of statements per line
     // http://eslint.org/docs/rules/max-statements-per-line
     'max-statements-per-line': [0, { 'max': 1 }],
@@ -100,6 +116,9 @@ module.exports = {
     // disallow use of the Array constructor
     'no-array-constructor': 2,
 
+    // disallow use of bitwise operators
+    'no-bitwise': 0,
+
     // disallow use of the continue statement
     'no-continue': 0,
 
@@ -125,6 +144,19 @@ module.exports = {
     // disallow use of the Object constructor
     'no-new-object': 2,
 
+    // disallow use of unary operators, ++ and --
+    'no-plusplus': 0,
+
+    // disallow certain syntax forms
+    // http://eslint.org/docs/rules/no-restricted-syntax
+    'no-restricted-syntax': [
+      2,
+      'DebuggerStatement',
+      'ForInStatement',
+      'LabeledStatement',
+      'WithStatement',
+    ],
+
     // disallow space between function identifier and application
     'no-spaced-func': 2,
 
@@ -179,19 +211,16 @@ module.exports = {
     // specify whether double or single quotes should be used
     'quotes': [2, 'single', 'avoid-escape'],
 
-    // require identifiers to match the provided regular expression
-    'id-match': 0,
-
     // do not require jsdoc
     // http://eslint.org/docs/rules/require-jsdoc
     'require-jsdoc': 0,
 
-    // enforce spacing before and after semicolons
-    'semi-spacing': [2, { 'before': false, 'after': true }],
-
     // require or disallow use of semicolons instead of ASI
     'semi': [2, 'always'],
 
+    // enforce spacing before and after semicolons
+    'semi-spacing': [2, { 'before': false, 'after': true }],
+
     // sort variables within the same declaration block
     'sort-vars': 0,
 
diff --git a/packages/eslint-config-airbnb-base/rules/variables.js b/packages/eslint-config-airbnb-base/rules/variables.js
index b7d9ea12d2..f33708dfbe 100644
--- a/packages/eslint-config-airbnb-base/rules/variables.js
+++ b/packages/eslint-config-airbnb-base/rules/variables.js
@@ -9,29 +9,24 @@ module.exports = {
     // disallow deletion of variables
     'no-delete-var': 2,
 
-    // disallow var and named functions in global scope
-    // http://eslint.org/docs/rules/no-implicit-globals
-    'no-implicit-globals': 0,
-
     // disallow labels that share a name with a variable
     'no-label-var': 0,
 
-    // disallow self assignment
-    // http://eslint.org/docs/rules/no-self-assign
-    'no-self-assign': 2,
-
-    // disallow shadowing of names such as arguments
-    'no-shadow-restricted-names': 2,
+    // disallow specific globals
+    'no-restricted-globals': 0,
 
     // disallow declaration of variables already declared in the outer scope
     'no-shadow': 2,
 
-    // disallow use of undefined when initializing variables
-    'no-undef-init': 0,
+    // disallow shadowing of names such as arguments
+    'no-shadow-restricted-names': 2,
 
     // disallow use of undeclared variables unless mentioned in a /*global */ block
     'no-undef': 2,
 
+    // disallow use of undefined when initializing variables
+    'no-undef-init': 0,
+
     // disallow use of undefined variable
     'no-undefined': 0,
 

From 34ccf905d65c2f0a7f946919f5d2c703f359d973 Mon Sep 17 00:00:00 2001
From: akai <akainice@gmail.com>
Date: Tue, 17 May 2016 01:10:00 +0800
Subject: [PATCH 0668/1591] [eslint config] [base] [breaking] migrate import's
 settings/rules to a separate file.

---
 packages/eslint-config-airbnb-base/index.js   |   1 +
 .../eslint-config-airbnb-base/rules/es6.js    | 107 +--------------
 .../rules/imports.js                          | 124 ++++++++++++++++++
 .../eslint-config-airbnb-base/rules/node.js   |  17 +--
 4 files changed, 127 insertions(+), 122 deletions(-)
 create mode 100644 packages/eslint-config-airbnb-base/rules/imports.js

diff --git a/packages/eslint-config-airbnb-base/index.js b/packages/eslint-config-airbnb-base/index.js
index eacb0ed394..a4644f159b 100644
--- a/packages/eslint-config-airbnb-base/index.js
+++ b/packages/eslint-config-airbnb-base/index.js
@@ -2,6 +2,7 @@ module.exports = {
   extends: [
     './legacy',
     './rules/es6',
+    './rules/imports',
   ].map(require.resolve),
   parserOptions: {
     ecmaVersion: 7,
diff --git a/packages/eslint-config-airbnb-base/rules/es6.js b/packages/eslint-config-airbnb-base/rules/es6.js
index 216bcd8283..57aa01e703 100644
--- a/packages/eslint-config-airbnb-base/rules/es6.js
+++ b/packages/eslint-config-airbnb-base/rules/es6.js
@@ -10,9 +10,6 @@ module.exports = {
       'objectLiteralDuplicateProperties': false
     }
   },
-  'plugins': [
-    'import'
-  ],
 
   'rules': {
     // enforces no braces where they can be omitted
@@ -121,108 +118,6 @@ module.exports = {
 
     // enforce spacing around the * in yield* expressions
     // http://eslint.org/docs/rules/yield-star-spacing
-    'yield-star-spacing': [2, 'after'],
-
-    // disallow invalid exports, e.g. multiple defaults
-    // https://github.com/benmosher/eslint-plugin-import/blob/master/docs/rules/export.md
-    'import/export': 2,
-
-    // ensure default import coupled with default export
-    // https://github.com/benmosher/eslint-plugin-import/blob/master/docs/rules/default.md#when-not-to-use-it
-    'import/default': 0,
-
-    // Ensure consistent use of file extension within the import path
-    // https://github.com/benmosher/eslint-plugin-import/blob/master/docs/rules/extensions.md
-    // TODO: enable
-    'import/extensions': [0, 'never'],
-
-    // ensure named imports coupled with named exports
-    // https://github.com/benmosher/eslint-plugin-import/blob/master/docs/rules/named.md#when-not-to-use-it
-    'import/named': 0,
-
-    // https://github.com/benmosher/eslint-plugin-import/blob/master/docs/rules/namespace.md
-    'import/namespace': 0,
-
-    // Forbid the use of extraneous packages
-    // https://github.com/benmosher/eslint-plugin-import/blob/master/docs/rules/no-extraneous-dependencies.md
-    // TODO: enable
-    'import/no-extraneous-dependencies': [0, {
-      'devDependencies': false,
-      'optionalDependencies': false,
-    }],
-
-    // ensure imports point to files/modules that can be resolved
-    // https://github.com/benmosher/eslint-plugin-import/blob/master/docs/rules/no-unresolved.md
-    'import/no-unresolved': [2, { 'commonjs': true }],
-
-    // do not allow a default import name to match a named export
-    // https://github.com/benmosher/eslint-plugin-import/blob/master/docs/rules/no-named-as-default.md
-    // TODO: enable
-    'import/no-named-as-default': 0,
-
-    // disallow require()
-    // https://github.com/benmosher/eslint-plugin-import/blob/master/docs/rules/no-commonjs.md
-    'import/no-commonjs': 0,
-
-    // disallow AMD require/define
-    // https://github.com/benmosher/eslint-plugin-import/blob/master/docs/rules/no-amd.md
-    'import/no-amd': 2,
-
-    // disallow non-import statements appearing before import statements
-    // https://github.com/benmosher/eslint-plugin-import/blob/master/docs/rules/imports-first.md
-    // TODO: enable?
-    'import/imports-first': [0, 'absolute-first'],
-
-    // disallow duplicate imports
-    // https://github.com/benmosher/eslint-plugin-import/blob/master/docs/rules/no-duplicates.md
-    'import/no-duplicates': 2,
-
-    // disallow use of jsdoc-marked-deprecated imports
-    // https://github.com/benmosher/eslint-plugin-import/blob/master/docs/rules/no-deprecated.md
-    'import/no-deprecated': 0,
-
-    // disallow namespace imports
-    // TODO: enable?
-    // https://github.com/benmosher/eslint-plugin-import/blob/master/docs/rules/no-namespace.md
-    'import/no-namespace': 0,
-
-    // warn on accessing default export property names that are also named exports
-    // TODO: enable?
-    // https://github.com/benmosher/eslint-plugin-import/blob/master/docs/rules/no-named-as-default-member.md
-    'import/no-named-as-default-member': 0,
-
-    // No Node.js builtin modules
-    // https://github.com/benmosher/eslint-plugin-import/blob/master/docs/rules/no-nodejs-modules.md
-    'import/no-nodejs-modules': 0,
-
-    // Enforce a convention in module import order
-    // https://github.com/benmosher/eslint-plugin-import/blob/master/docs/rules/order.md
-    // TODO: enable?
-    'import/order': [0, {
-      'groups': ['builtin', 'external', 'internal', 'parent', 'sibling', 'index'],
-      'newlines-between': 'never',
-    }],
-
-    // Require modules with a single export to use a default export
-    // https://github.com/benmosher/eslint-plugin-import/blob/master/docs/rules/prefer-default-export.md
-    // TODO: enable
-    'import/prefer-default-export': 0,
-
-    // Require a newline after the last import/require in a group
-    // https://github.com/benmosher/eslint-plugin-import/blob/master/docs/rules/newline-after-import.md
-    // TODO: enable
-    'import/newline-after-import': 0,
-
-    // Forbid mutable exports
-    // https://github.com/benmosher/eslint-plugin-import/blob/master/docs/rules/no-mutable-exports.md
-    'import/no-mutable-exports': 2,
-  },
-
-  'settings': {
-    'import/resolver': {
-      'node': {
-        'extensions': ['.js', '.json']
-      }
-    }
+    'yield-star-spacing': [2, 'after']
   }
 };
diff --git a/packages/eslint-config-airbnb-base/rules/imports.js b/packages/eslint-config-airbnb-base/rules/imports.js
new file mode 100644
index 0000000000..1f854043ee
--- /dev/null
+++ b/packages/eslint-config-airbnb-base/rules/imports.js
@@ -0,0 +1,124 @@
+module.exports = {
+  'env': {
+    'es6': true
+  },
+  'parserOptions': {
+    'ecmaVersion': 6,
+    'sourceType': 'module'
+  },
+  'plugins': [
+    'import'
+  ],
+
+  'settings': {
+    'import/resolver': {
+      'node': {
+        'extensions': ['.js', '.json']
+      }
+    }
+  },
+
+  'rules': {
+    // Static analysis:
+
+    // ensure imports point to files/modules that can be resolved
+    // https://github.com/benmosher/eslint-plugin-import/blob/master/docs/rules/no-unresolved.md
+    'import/no-unresolved': [2, { 'commonjs': true }],
+
+    // ensure named imports coupled with named exports
+    // https://github.com/benmosher/eslint-plugin-import/blob/master/docs/rules/named.md#when-not-to-use-it
+    'import/named': 0,
+
+    // ensure default import coupled with default export
+    // https://github.com/benmosher/eslint-plugin-import/blob/master/docs/rules/default.md#when-not-to-use-it
+    'import/default': 0,
+
+    // https://github.com/benmosher/eslint-plugin-import/blob/master/docs/rules/namespace.md
+    'import/namespace': 0,
+
+    // Helpful warnings:
+
+    // disallow invalid exports, e.g. multiple defaults
+    // https://github.com/benmosher/eslint-plugin-import/blob/master/docs/rules/export.md
+    'import/export': 2,
+
+    // do not allow a default import name to match a named export
+    // https://github.com/benmosher/eslint-plugin-import/blob/master/docs/rules/no-named-as-default.md
+    // TODO: enable
+    'import/no-named-as-default': 0,
+
+    // warn on accessing default export property names that are also named exports
+    // TODO: enable?
+    // https://github.com/benmosher/eslint-plugin-import/blob/master/docs/rules/no-named-as-default-member.md
+    'import/no-named-as-default-member': 0,
+
+    // disallow use of jsdoc-marked-deprecated imports
+    // https://github.com/benmosher/eslint-plugin-import/blob/master/docs/rules/no-deprecated.md
+    'import/no-deprecated': 0,
+
+    // Forbid the use of extraneous packages
+    // https://github.com/benmosher/eslint-plugin-import/blob/master/docs/rules/no-extraneous-dependencies.md
+    // TODO: enable
+    'import/no-extraneous-dependencies': [0, {
+      'devDependencies': false,
+      'optionalDependencies': false,
+    }],
+
+    // Forbid mutable exports
+    // https://github.com/benmosher/eslint-plugin-import/blob/master/docs/rules/no-mutable-exports.md
+    'import/no-mutable-exports': 2,
+
+    // Module systems:
+
+    // disallow require()
+    // https://github.com/benmosher/eslint-plugin-import/blob/master/docs/rules/no-commonjs.md
+    'import/no-commonjs': 0,
+
+    // disallow AMD require/define
+    // https://github.com/benmosher/eslint-plugin-import/blob/master/docs/rules/no-amd.md
+    'import/no-amd': 2,
+
+    // No Node.js builtin modules
+    // https://github.com/benmosher/eslint-plugin-import/blob/master/docs/rules/no-nodejs-modules.md
+    'import/no-nodejs-modules': 0,
+
+    // Style guide:
+
+    // disallow non-import statements appearing before import statements
+    // https://github.com/benmosher/eslint-plugin-import/blob/master/docs/rules/imports-first.md
+    // TODO: enable?
+    'import/imports-first': [0, 'absolute-first'],
+
+    // disallow duplicate imports
+    // https://github.com/benmosher/eslint-plugin-import/blob/master/docs/rules/no-duplicates.md
+    'import/no-duplicates': 2,
+
+    // disallow namespace imports
+    // TODO: enable?
+    // https://github.com/benmosher/eslint-plugin-import/blob/master/docs/rules/no-namespace.md
+    'import/no-namespace': 0,
+
+    // Ensure consistent use of file extension within the import path
+    // https://github.com/benmosher/eslint-plugin-import/blob/master/docs/rules/extensions.md
+    // TODO: enable
+    'import/extensions': [0, 'never'],
+
+    // Enforce a convention in module import order
+    // https://github.com/benmosher/eslint-plugin-import/blob/master/docs/rules/order.md
+    // TODO: enable?
+    'import/order': [0, {
+      'groups': ['builtin', 'external', 'internal', 'parent', 'sibling', 'index'],
+      'newlines-between': 'never',
+    }],
+
+    // Require a newline after the last import/require in a group
+    // https://github.com/benmosher/eslint-plugin-import/blob/master/docs/rules/newline-after-import.md
+    // TODO: enable
+    'import/newline-after-import': 0,
+
+    // Require modules with a single export to use a default export
+    // https://github.com/benmosher/eslint-plugin-import/blob/master/docs/rules/prefer-default-export.md
+    // TODO: enable
+    'import/prefer-default-export': 0
+  }
+};
diff --git a/packages/eslint-config-airbnb-base/rules/node.js b/packages/eslint-config-airbnb-base/rules/node.js
index 69b46b29c2..3dcc2a1f53 100644
--- a/packages/eslint-config-airbnb-base/rules/node.js
+++ b/packages/eslint-config-airbnb-base/rules/node.js
@@ -2,9 +2,6 @@ module.exports = {
   'env': {
     'node': true
   },
-  'plugins': [
-    'import'
-  ],
 
   'rules': {
     // enforce return after a callback
@@ -36,18 +33,6 @@ module.exports = {
     'no-restricted-modules': 0,
 
     // disallow use of synchronous methods (off by default)
-    'no-sync': 0,
-
-    // ensure imports point to files/modules that can be resolved
-    // https://github.com/benmosher/eslint-plugin-import/blob/master/docs/rules/no-unresolved.md
-    'import/no-unresolved': [2, { 'commonjs': true }]
-  },
-
-  'settings': {
-    'import/resolver': {
-      'node': {
-        'extensions': ['.js', '.json']
-      }
-    }
+    'no-sync': 0
   }
 };

From 43ccc3fe11684e0e0085ab3f492c96638bcdc4fc Mon Sep 17 00:00:00 2001
From: Joe Lencioni <joe.lencioni@airbnb.com>
Date: Mon, 16 May 2016 11:26:29 -0700
Subject: [PATCH 0669/1591] Enable imports/imports-first rule

Since imports are hoisted, keeping them all at the top prevents
surprising behavior.
---
 README.md                                     | 19 +++++++++++++++++++
 .../rules/imports.js                          |  3 +--
 2 files changed, 20 insertions(+), 2 deletions(-)

diff --git a/README.md b/README.md
index a75a104e31..38699c80b4 100644
--- a/README.md
+++ b/README.md
@@ -1165,6 +1165,25 @@ Other Style Guides
     export default function foo() {}
     ```
 
+  <a name="modules--imports-first"></a>
+  - [10.7](#modules--imports-first) Put all `import`s above non-import statements.
+ eslint: [`import/imports-first`](https://github.com/benmosher/eslint-plugin-import/blob/master/docs/rules/imports-first.md)
+    > Why? Since `import`s are hoisted, keeping them all at the top prevents surprising behavior.
+
+    ```javascript
+    // bad
+    import foo from 'foo';
+    foo.init();
+
+    import bar from 'bar';
+
+    // good
+    import foo from 'foo';
+    import bar from 'bar';
+
+    foo.init();
+    ```
+
 **[⬆ back to top](#table-of-contents)**
 
 ## Iterators and Generators
diff --git a/packages/eslint-config-airbnb-base/rules/imports.js b/packages/eslint-config-airbnb-base/rules/imports.js
index 1f854043ee..683d034518 100644
--- a/packages/eslint-config-airbnb-base/rules/imports.js
+++ b/packages/eslint-config-airbnb-base/rules/imports.js
@@ -86,8 +86,7 @@ module.exports = {
 
     // disallow non-import statements appearing before import statements
     // https://github.com/benmosher/eslint-plugin-import/blob/master/docs/rules/imports-first.md
-    // TODO: enable?
-    'import/imports-first': [0, 'absolute-first'],
+    'import/imports-first': [2, 'absolute-first'],
 
     // disallow duplicate imports
     // https://github.com/benmosher/eslint-plugin-import/blob/master/docs/rules/no-duplicates.md

From 312cd01a959ebe175443ce15b4935f4a916c35d2 Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Tue, 17 May 2016 13:50:12 -0700
Subject: [PATCH 0670/1591] [eslint config] [base] `quotes`: Use object option
 form rather than deprecated string form.

Per https://github.com/airbnb/javascript/pull/886
---
 packages/eslint-config-airbnb-base/rules/style.js | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/packages/eslint-config-airbnb-base/rules/style.js b/packages/eslint-config-airbnb-base/rules/style.js
index 48a55dafcd..8dab9bad51 100644
--- a/packages/eslint-config-airbnb-base/rules/style.js
+++ b/packages/eslint-config-airbnb-base/rules/style.js
@@ -209,7 +209,7 @@ module.exports = {
     'quote-props': [2, 'as-needed', { 'keywords': false, 'unnecessary': true, 'numbers': false }],
 
     // specify whether double or single quotes should be used
-    'quotes': [2, 'single', 'avoid-escape'],
+    'quotes': [2, 'single', { 'avoidEscape': true }],
 
     // do not require jsdoc
     // http://eslint.org/docs/rules/require-jsdoc

From 8e125fa07cd9214b5e31e59095707ffae3284d13 Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Tue, 17 May 2016 21:27:10 -0700
Subject: [PATCH 0671/1591] [eslint config] [base] [breaking] Enforce proper
 generator star spacing.

Fixes #887.
---
 README.md                                     | 44 +++++++++++++++++++
 .../eslint-config-airbnb-base/rules/es6.js    |  3 +-
 2 files changed, 46 insertions(+), 1 deletion(-)

diff --git a/README.md b/README.md
index 38699c80b4..fb43bc9e25 100644
--- a/README.md
+++ b/README.md
@@ -1219,6 +1219,50 @@ Other Style Guides
 
     > Why? They don't transpile well to ES5.
 
+  <a name="generators--spacing"></a>
+  - [11.3](#generators--spacing) If you must use generators, or if you disregard [our advice](#generators--nope), make sure their function signature is spaced properly. eslint: [`generator-star-spacing`](http://eslint.org/docs/rules/generator-star-spacing)
+
+    > Why? `function` and `*` are part of the same conceptual keyword - `*` is not a modifier for `function`, `function*` is a unique construct, different from `function`.
+
+    ```js
+    // bad
+    function * foo() {
+    }
+
+    const bar = function * () {
+    }
+
+    const baz = function *() {
+    }
+
+    const quux = function*() {
+    }
+
+    function*foo() {
+    }
+
+    function *foo() {
+    }
+
+    // very bad
+    function
+    *
+    foo() {
+    }
+
+    const wat = function
+    *
+    () {
+    }
+
+    // good
+    function* foo() {
+    }
+
+    const foo = function* () {
+    }
+    ```
+
 **[⬆ back to top](#table-of-contents)**
 
 
diff --git a/packages/eslint-config-airbnb-base/rules/es6.js b/packages/eslint-config-airbnb-base/rules/es6.js
index 57aa01e703..ed70f8bf29 100644
--- a/packages/eslint-config-airbnb-base/rules/es6.js
+++ b/packages/eslint-config-airbnb-base/rules/es6.js
@@ -27,7 +27,8 @@ module.exports = {
     'constructor-super': 0,
 
     // enforce the spacing around the * in generator functions
-    'generator-star-spacing': 0,
+    // http://eslint.org/docs/rules/generator-star-spacing
+    'generator-star-spacing': [2, { 'before': false, 'after': true }],
 
     // disallow modifying variables of class declarations
     // http://eslint.org/docs/rules/no-class-assign

From 429339ee3740a0fd9c64b9cd207f27a7fb84ecc1 Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Wed, 18 May 2016 19:47:45 -0700
Subject: [PATCH 0672/1591] [eslint config] [*] fix quoting of rule properties.

Per #885.
---
 .../rules/.eslintrc.json                      |  5 --
 .../rules/best-practices.js                   | 32 ++++----
 .../eslint-config-airbnb-base/rules/errors.js |  8 +-
 .../eslint-config-airbnb-base/rules/es6.js    | 36 ++++-----
 .../rules/imports.js                          | 28 +++----
 .../eslint-config-airbnb-base/rules/node.js   |  6 +-
 .../eslint-config-airbnb-base/rules/strict.js |  4 +-
 .../eslint-config-airbnb-base/rules/style.js  | 56 +++++++-------
 .../rules/variables.js                        |  4 +-
 .../eslint-config-airbnb/rules/.eslintrc.json |  5 --
 .../eslint-config-airbnb/rules/react-a11y.js  |  8 +-
 packages/eslint-config-airbnb/rules/react.js  | 76 +++++++++----------
 12 files changed, 129 insertions(+), 139 deletions(-)
 delete mode 100644 packages/eslint-config-airbnb-base/rules/.eslintrc.json
 delete mode 100644 packages/eslint-config-airbnb/rules/.eslintrc.json

diff --git a/packages/eslint-config-airbnb-base/rules/.eslintrc.json b/packages/eslint-config-airbnb-base/rules/.eslintrc.json
deleted file mode 100644
index de68aa25ca..0000000000
--- a/packages/eslint-config-airbnb-base/rules/.eslintrc.json
+++ /dev/null
@@ -1,5 +0,0 @@
-{
-  "rules": {
-    "quote-props": 0
-  }
-}
diff --git a/packages/eslint-config-airbnb-base/rules/best-practices.js b/packages/eslint-config-airbnb-base/rules/best-practices.js
index f43cd2c372..3eeead448b 100644
--- a/packages/eslint-config-airbnb-base/rules/best-practices.js
+++ b/packages/eslint-config-airbnb-base/rules/best-practices.js
@@ -1,5 +1,5 @@
 module.exports = {
-  'rules': {
+  rules: {
     // enforces getter/setter pairs in objects
     'accessor-pairs': 0,
 
@@ -11,26 +11,26 @@ module.exports = {
     'block-scoped-var': 2,
 
     // specify the maximum cyclomatic complexity allowed in a program
-    'complexity': [0, 11],
+    complexity: [0, 11],
 
     // require return statements to either always or never specify values
     'consistent-return': 2,
 
     // specify curly brace conventions for all control statements
-    'curly': [2, 'multi-line'],
+    curly: [2, 'multi-line'],
 
     // require default case in switch statements
-    'default-case': [2, { 'commentPattern': '^no default$' }],
+    'default-case': [2, { commentPattern: '^no default$' }],
 
     // encourages use of dot notation whenever possible
-    'dot-notation': [2, { 'allowKeywords': true }],
+    'dot-notation': [2, { allowKeywords: true }],
 
     // enforces consistent newlines before or after dots
     'dot-location': 0,
 
     // require the use of === and !==
     // http://eslint.org/docs/rules/eqeqeq
-    'eqeqeq': [2, 'allow-null'],
+    eqeqeq: [2, 'allow-null'],
 
     // make sure for-in loops have an if statement
     'guard-for-in': 2,
@@ -54,7 +54,7 @@ module.exports = {
     // disallow empty functions, except for standalone funcs/arrows
     // http://eslint.org/docs/rules/no-empty-function
     'no-empty-function': [2, {
-      'allow': [
+      allow: [
         'arrowFunctions',
         'functions',
         'methods',
@@ -104,7 +104,7 @@ module.exports = {
     'no-iterator': 2,
 
     // disallow use of labels for anything other then loops and switches
-    'no-labels': [2, { 'allowLoop': false, 'allowSwitch': false }],
+    'no-labels': [2, { allowLoop: false, allowSwitch: false }],
 
     // disallow unnecessary nested blocks
     'no-lone-blocks': 2,
@@ -115,10 +115,10 @@ module.exports = {
     // disallow magic numbers
     // http://eslint.org/docs/rules/no-magic-numbers
     'no-magic-numbers': [0, {
-      'ignore': [],
-      'ignoreArrayIndexes': true,
-      'enforceConst': true,
-      'detectObjects': false,
+      ignore: [],
+      ignoreArrayIndexes: true,
+      enforceConst: true,
+      detectObjects: false,
     }],
 
     // disallow use of multiple spaces
@@ -149,7 +149,7 @@ module.exports = {
     // disallow reassignment of function parameters
     // disallow parameter object manipulation
     // rule: http://eslint.org/docs/rules/no-param-reassign.html
-    'no-param-reassign': [2, { 'props': true }],
+    'no-param-reassign': [2, { props: true }],
 
     // disallow usage of __proto__ property
     'no-proto': 2,
@@ -202,13 +202,13 @@ module.exports = {
     'no-void': 0,
 
     // disallow usage of configurable warning terms in comments: e.g. todo
-    'no-warning-comments': [0, { 'terms': ['todo', 'fixme', 'xxx'], 'location': 'start' }],
+    'no-warning-comments': [0, { terms: ['todo', 'fixme', 'xxx'], location: 'start' }],
 
     // disallow use of the with statement
     'no-with': 2,
 
     // require use of the second argument for parseInt()
-    'radix': 2,
+    radix: 2,
 
     // requires to declare all vars on top of their containing scope
     'vars-on-top': 2,
@@ -218,6 +218,6 @@ module.exports = {
     'wrap-iife': [2, 'outside'],
 
     // require or disallow Yoda conditions
-    'yoda': 2
+    yoda: 2
   }
 };
diff --git a/packages/eslint-config-airbnb-base/rules/errors.js b/packages/eslint-config-airbnb-base/rules/errors.js
index 19823c8736..b8ee543c4d 100644
--- a/packages/eslint-config-airbnb-base/rules/errors.js
+++ b/packages/eslint-config-airbnb-base/rules/errors.js
@@ -1,5 +1,5 @@
 module.exports = {
-  'rules': {
+  rules: {
     // require trailing commas in multiline object literals
     'comma-dangle': [2, 'always-multiline'],
 
@@ -42,9 +42,9 @@ module.exports = {
     // disallow unnecessary parentheses
     // http://eslint.org/docs/rules/no-extra-parens
     'no-extra-parens': [0, 'all', {
-      'conditionalAssign': true,
-      'nestedBinaryExpressions': false,
-      'returnAssign': false,
+      conditionalAssign: true,
+      nestedBinaryExpressions: false,
+      returnAssign: false,
     }],
 
     // disallow unnecessary semicolons
diff --git a/packages/eslint-config-airbnb-base/rules/es6.js b/packages/eslint-config-airbnb-base/rules/es6.js
index ed70f8bf29..c7a8114c1d 100644
--- a/packages/eslint-config-airbnb-base/rules/es6.js
+++ b/packages/eslint-config-airbnb-base/rules/es6.js
@@ -1,17 +1,17 @@
 module.exports = {
-  'env': {
-    'es6': true
+  env: {
+    es6: true
   },
-  'parserOptions': {
-    'ecmaVersion': 6,
-    'sourceType': 'module',
-    'ecmaFeatures': {
-      'generators': false,
-      'objectLiteralDuplicateProperties': false
+  parserOptions: {
+    ecmaVersion: 6,
+    sourceType: 'module',
+    ecmaFeatures: {
+      generators: false,
+      objectLiteralDuplicateProperties: false
     }
   },
 
-  'rules': {
+  rules: {
     // enforces no braces where they can be omitted
     // http://eslint.org/docs/rules/arrow-body-style
     'arrow-body-style': [2, 'as-needed'],
@@ -21,14 +21,14 @@ module.exports = {
 
     // require space before/after arrow function's arrow
     // http://eslint.org/docs/rules/arrow-spacing
-    'arrow-spacing': [2, { 'before': true, 'after': true }],
+    'arrow-spacing': [2, { before: true, after: true }],
 
     // verify super() callings in constructors
     'constructor-super': 0,
 
     // enforce the spacing around the * in generator functions
     // http://eslint.org/docs/rules/generator-star-spacing
-    'generator-star-spacing': [2, { 'before': false, 'after': true }],
+    'generator-star-spacing': [2, { before: false, after: true }],
 
     // disallow modifying variables of class declarations
     // http://eslint.org/docs/rules/no-class-assign
@@ -37,7 +37,7 @@ module.exports = {
     // disallow arrow functions where they could be confused with comparisons
     // http://eslint.org/docs/rules/no-confusing-arrow
     'no-confusing-arrow': [2, {
-      'allowParens': true,
+      allowParens: true,
     }],
 
     // disallow modifying variables that are declared using const
@@ -76,20 +76,20 @@ module.exports = {
     // require method and property shorthand syntax for object literals
     // http://eslint.org/docs/rules/object-shorthand
     'object-shorthand': [2, 'always', {
-      'ignoreConstructors': false,
-      'avoidQuotes': true,
+      ignoreConstructors: false,
+      avoidQuotes: true,
     }],
 
     // suggest using arrow functions as callbacks
     'prefer-arrow-callback': [2, {
-      'allowNamedFunctions': false,
-      'allowUnboundThis': true,
+      allowNamedFunctions: false,
+      allowUnboundThis: true,
     }],
 
     // suggest using of const declaration for variables that are never modified after declared
     'prefer-const': [2, {
-      'destructuring': 'any',
-      'ignoreReadBeforeAssign': true,
+      destructuring: 'any',
+      ignoreReadBeforeAssign: true,
     }],
 
     // suggest using Reflect methods where applicable
diff --git a/packages/eslint-config-airbnb-base/rules/imports.js b/packages/eslint-config-airbnb-base/rules/imports.js
index 683d034518..2f45ca9b45 100644
--- a/packages/eslint-config-airbnb-base/rules/imports.js
+++ b/packages/eslint-config-airbnb-base/rules/imports.js
@@ -1,29 +1,29 @@
 module.exports = {
-  'env': {
-    'es6': true
+  env: {
+    es6: true
   },
-  'parserOptions': {
-    'ecmaVersion': 6,
-    'sourceType': 'module'
+  parserOptions: {
+    ecmaVersion: 6,
+    sourceType: 'module'
   },
-  'plugins': [
+  plugins: [
     'import'
   ],
 
-  'settings': {
+  settings: {
     'import/resolver': {
-      'node': {
-        'extensions': ['.js', '.json']
+      node: {
+        extensions: ['.js', '.json']
       }
     }
   },
 
-  'rules': {
+  rules: {
     // Static analysis:
 
     // ensure imports point to files/modules that can be resolved
     // https://github.com/benmosher/eslint-plugin-import/blob/master/docs/rules/no-unresolved.md
-    'import/no-unresolved': [2, { 'commonjs': true }],
+    'import/no-unresolved': [2, { commonjs: true }],
 
     // ensure named imports coupled with named exports
     // https://github.com/benmosher/eslint-plugin-import/blob/master/docs/rules/named.md#when-not-to-use-it
@@ -60,8 +60,8 @@ module.exports = {
     // https://github.com/benmosher/eslint-plugin-import/blob/master/docs/rules/no-extraneous-dependencies.md
     // TODO: enable
     'import/no-extraneous-dependencies': [0, {
-      'devDependencies': false,
-      'optionalDependencies': false,
+      devDependencies: false,
+      optionalDependencies: false,
     }],
 
     // Forbid mutable exports
@@ -106,7 +106,7 @@ module.exports = {
     // https://github.com/benmosher/eslint-plugin-import/blob/master/docs/rules/order.md
     // TODO: enable?
     'import/order': [0, {
-      'groups': ['builtin', 'external', 'internal', 'parent', 'sibling', 'index'],
+      groups: ['builtin', 'external', 'internal', 'parent', 'sibling', 'index'],
       'newlines-between': 'never',
     }],
 
diff --git a/packages/eslint-config-airbnb-base/rules/node.js b/packages/eslint-config-airbnb-base/rules/node.js
index 3dcc2a1f53..3297f3d935 100644
--- a/packages/eslint-config-airbnb-base/rules/node.js
+++ b/packages/eslint-config-airbnb-base/rules/node.js
@@ -1,9 +1,9 @@
 module.exports = {
-  'env': {
-    'node': true
+  env: {
+    node: true
   },
 
-  'rules': {
+  rules: {
     // enforce return after a callback
     'callback-return': 0,
 
diff --git a/packages/eslint-config-airbnb-base/rules/strict.js b/packages/eslint-config-airbnb-base/rules/strict.js
index 6d32f8ca59..43d7010c60 100644
--- a/packages/eslint-config-airbnb-base/rules/strict.js
+++ b/packages/eslint-config-airbnb-base/rules/strict.js
@@ -1,6 +1,6 @@
 module.exports = {
-  'rules': {
+  rules: {
     // babel inserts `'use strict';` for us
-    'strict': [2, 'never']
+    strict: [2, 'never']
   }
 };
diff --git a/packages/eslint-config-airbnb-base/rules/style.js b/packages/eslint-config-airbnb-base/rules/style.js
index 8dab9bad51..a132d6c100 100644
--- a/packages/eslint-config-airbnb-base/rules/style.js
+++ b/packages/eslint-config-airbnb-base/rules/style.js
@@ -1,5 +1,5 @@
 module.exports = {
-  'rules': {
+  rules: {
     // enforce spacing inside array brackets
     'array-bracket-spacing': [2, 'never'],
 
@@ -8,13 +8,13 @@ module.exports = {
     'block-spacing': [2, 'always'],
 
     // enforce one true brace style
-    'brace-style': [2, '1tbs', { 'allowSingleLine': true }],
+    'brace-style': [2, '1tbs', { allowSingleLine: true }],
 
     // require camel case names
-    'camelcase': [2, { 'properties': 'never' }],
+    camelcase: [2, { properties: 'never' }],
 
     // enforce spacing before and after comma
-    'comma-spacing': [2, { 'before': false, 'after': true }],
+    'comma-spacing': [2, { before: false, after: true }],
 
     // enforce one true comma style
     'comma-style': [2, 'last'],
@@ -47,23 +47,23 @@ module.exports = {
 
     // this option sets a specific tab width for your code
     // http://eslint.org/docs/rules/indent
-    'indent': [2, 2, { 'SwitchCase': 1, 'VariableDeclarator': 1 }],
+    indent: [2, 2, { SwitchCase: 1, VariableDeclarator: 1 }],
 
     // specify whether double or single quotes should be used in JSX attributes
     // http://eslint.org/docs/rules/jsx-quotes
     'jsx-quotes': 0,
 
     // enforces spacing between keys and values in object literal properties
-    'key-spacing': [2, { 'beforeColon': false, 'afterColon': true }],
+    'key-spacing': [2, { beforeColon: false, afterColon: true }],
 
     // require a space before & after certain keywords
     'keyword-spacing': [2, {
-      'before': true,
-      'after': true,
-      'overrides': {
-        'return': { 'after': true },
-        'throw': { 'after': true },
-        'case': { 'after': true }
+      before: true,
+      after: true,
+      overrides: {
+        return: { after: true },
+        throw: { after: true },
+        case: { after: true }
       }
     }],
 
@@ -79,8 +79,8 @@ module.exports = {
     // specify the maximum length of a line in your program
     // http://eslint.org/docs/rules/max-len
     'max-len': [2, 100, 2, {
-      'ignoreUrls': true,
-      'ignoreComments': false
+      ignoreUrls: true,
+      ignoreComments: false
     }],
 
     // specify the maximum depth callbacks can be nested
@@ -94,10 +94,10 @@ module.exports = {
 
     // restrict the number of statements per line
     // http://eslint.org/docs/rules/max-statements-per-line
-    'max-statements-per-line': [0, { 'max': 1 }],
+    'max-statements-per-line': [0, { max: 1 }],
 
     // require a capital letter for constructors
-    'new-cap': [2, { 'newIsCap': true }],
+    'new-cap': [2, { newIsCap: true }],
 
     // disallow the omission of parentheses when invoking a constructor with no arguments
     'new-parens': 0,
@@ -111,7 +111,7 @@ module.exports = {
     // enforces new line after each method call in the chain to make it
     // more readable and easy to maintain
     // http://eslint.org/docs/rules/newline-per-chained-call
-    'newline-per-chained-call': [2, { 'ignoreChainWithDepth': 3 }],
+    'newline-per-chained-call': [2, { ignoreChainWithDepth: 3 }],
 
     // disallow use of the Array constructor
     'no-array-constructor': 2,
@@ -132,7 +132,7 @@ module.exports = {
     'no-mixed-spaces-and-tabs': 2,
 
     // disallow multiple empty lines and only one newline at the end
-    'no-multiple-empty-lines': [2, { 'max': 2, 'maxEOF': 1 }],
+    'no-multiple-empty-lines': [2, { max: 2, maxEOF: 1 }],
 
     // disallow negated conditions
     // http://eslint.org/docs/rules/no-negated-condition
@@ -167,12 +167,12 @@ module.exports = {
     'no-trailing-spaces': 2,
 
     // disallow dangling underscores in identifiers
-    'no-underscore-dangle': [2, { 'allowAfterThis': false }],
+    'no-underscore-dangle': [2, { allowAfterThis: false }],
 
     // disallow the use of Boolean literals in conditional expressions
     // also, prefer `a || b` over `a ? a : b`
     // http://eslint.org/docs/rules/no-unneeded-ternary
-    'no-unneeded-ternary': [2, { 'defaultAssignment': false }],
+    'no-unneeded-ternary': [2, { defaultAssignment: false }],
 
     // disallow whitespace before properties
     // http://eslint.org/docs/rules/no-whitespace-before-property
@@ -185,7 +185,7 @@ module.exports = {
     // http://eslint.org/docs/rules/object-property-newline
     // TODO: enable when https://github.com/eslint/eslint/issues/5667#issuecomment-219334864 is resolved
     'object-property-newline': [0, {
-      'allowMultiplePropertiesPerLine': true,
+      allowMultiplePropertiesPerLine: true,
     }],
 
     // allow just one var statement per function
@@ -206,20 +206,20 @@ module.exports = {
 
     // require quotes around object literal property names
     // http://eslint.org/docs/rules/quote-props.html
-    'quote-props': [2, 'as-needed', { 'keywords': false, 'unnecessary': true, 'numbers': false }],
+    'quote-props': [2, 'as-needed', { keywords: false, unnecessary: true, numbers: false }],
 
     // specify whether double or single quotes should be used
-    'quotes': [2, 'single', { 'avoidEscape': true }],
+    quotes: [2, 'single', { avoidEscape: true }],
 
     // do not require jsdoc
     // http://eslint.org/docs/rules/require-jsdoc
     'require-jsdoc': 0,
 
     // require or disallow use of semicolons instead of ASI
-    'semi': [2, 'always'],
+    semi: [2, 'always'],
 
     // enforce spacing before and after semicolons
-    'semi-spacing': [2, { 'before': false, 'after': true }],
+    'semi-spacing': [2, { before: false, after: true }],
 
     // sort variables within the same declaration block
     'sort-vars': 0,
@@ -229,7 +229,7 @@ module.exports = {
 
     // require or disallow space before function opening parenthesis
     // http://eslint.org/docs/rules/space-before-function-paren
-    'space-before-function-paren': [2, { 'anonymous': 'always', 'named': 'never' }],
+    'space-before-function-paren': [2, { anonymous: 'always', named: 'never' }],
 
     // require or disallow spaces inside parentheses
     'space-in-parens': [2, 'never'],
@@ -242,8 +242,8 @@ module.exports = {
 
     // require or disallow a space immediately following the // or /* in a comment
     'spaced-comment': [2, 'always', {
-      'exceptions': ['-', '+'],
-      'markers': ['=', '!']           // space here to support sprockets directives
+      exceptions: ['-', '+'],
+      markers: ['=', '!']           // space here to support sprockets directives
     }],
 
     // require regex literals to be wrapped in parentheses
diff --git a/packages/eslint-config-airbnb-base/rules/variables.js b/packages/eslint-config-airbnb-base/rules/variables.js
index f33708dfbe..6c767da3b9 100644
--- a/packages/eslint-config-airbnb-base/rules/variables.js
+++ b/packages/eslint-config-airbnb-base/rules/variables.js
@@ -1,5 +1,5 @@
 module.exports = {
-  'rules': {
+  rules: {
     // enforce or disallow variable initializations at definition
     'init-declarations': 0,
 
@@ -31,7 +31,7 @@ module.exports = {
     'no-undefined': 0,
 
     // disallow declaration of variables that are not used in the code
-    'no-unused-vars': [2, { 'vars': 'local', 'args': 'after-used' }],
+    'no-unused-vars': [2, { vars: 'local', args: 'after-used' }],
 
     // disallow use of variables before they are defined
     'no-use-before-define': 2
diff --git a/packages/eslint-config-airbnb/rules/.eslintrc.json b/packages/eslint-config-airbnb/rules/.eslintrc.json
deleted file mode 100644
index de68aa25ca..0000000000
--- a/packages/eslint-config-airbnb/rules/.eslintrc.json
+++ /dev/null
@@ -1,5 +0,0 @@
-{
-  "rules": {
-    "quote-props": 0
-  }
-}
diff --git a/packages/eslint-config-airbnb/rules/react-a11y.js b/packages/eslint-config-airbnb/rules/react-a11y.js
index 2816b20acb..6ba17e8eaa 100644
--- a/packages/eslint-config-airbnb/rules/react-a11y.js
+++ b/packages/eslint-config-airbnb/rules/react-a11y.js
@@ -1,12 +1,12 @@
 module.exports = {
-  'plugins': [
+  plugins: [
     'jsx-a11y',
     'react'
   ],
-  'ecmaFeatures': {
-    'jsx': true
+  ecmaFeatures: {
+    jsx: true
   },
-  'rules': {
+  rules: {
     // Require ARIA roles to be valid and non-abstract
     // https://github.com/evcohen/eslint-plugin-jsx-a11y/blob/master/docs/rules/aria-role.md
     'jsx-a11y/aria-role': 2,
diff --git a/packages/eslint-config-airbnb/rules/react.js b/packages/eslint-config-airbnb/rules/react.js
index 6b29b5033b..00e6f21a90 100644
--- a/packages/eslint-config-airbnb/rules/react.js
+++ b/packages/eslint-config-airbnb/rules/react.js
@@ -1,30 +1,30 @@
 module.exports = {
-  'plugins': [
+  plugins: [
     'react'
   ],
-  'parserOptions': {
-    'ecmaFeatures': {
-      'jsx': true,
+  parserOptions: {
+    ecmaFeatures: {
+      jsx: true,
     },
   },
-  'ecmaFeatures': {
-    'jsx': true
+  ecmaFeatures: {
+    jsx: true
   },
 
   // View link below for react rules documentation
   // https://github.com/yannickcr/eslint-plugin-react#list-of-supported-rules
-  'rules': {
+  rules: {
     // specify whether double or single quotes should be used in JSX attributes
     // http://eslint.org/docs/rules/jsx-quotes
     'jsx-quotes': [2, 'prefer-double'],
 
     // Prevent missing displayName in a React component definition
     // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/display-name.md
-    'react/display-name': [0, { 'ignoreTranspilerName': false }],
+    'react/display-name': [0, { ignoreTranspilerName: false }],
 
     // Forbid certain propTypes (any, array, object)
     // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/forbid-prop-types.md
-    'react/forbid-prop-types': [0, { 'forbid': ['any', 'array', 'object'] }],
+    'react/forbid-prop-types': [0, { forbid: ['any', 'array', 'object'] }],
 
     // Enforce boolean attributes notation in JSX
     // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/jsx-boolean-value.md
@@ -36,13 +36,13 @@ module.exports = {
 
     // Enforce or disallow spaces inside of curly braces in JSX attributes
     // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/jsx-curly-spacing.md
-    'react/jsx-curly-spacing': [2, 'never', { 'allowMultiline': true }],
+    'react/jsx-curly-spacing': [2, 'never', { allowMultiline: true }],
 
     // Enforce event handler naming conventions in JSX
     // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/jsx-handler-names.md
     'react/jsx-handler-names': [0, {
-      'eventHandlerPrefix': 'handle',
-      'eventHandlerPropPrefix': 'on',
+      eventHandlerPrefix: 'handle',
+      eventHandlerPropPrefix: 'on',
     }],
 
     // Validate props indentation in JSX
@@ -55,19 +55,19 @@ module.exports = {
 
     // Limit maximum of props on a single line in JSX
     // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/jsx-max-props-per-line.md
-    'react/jsx-max-props-per-line': [0, { 'maximum': 1 }],
+    'react/jsx-max-props-per-line': [0, { maximum: 1 }],
 
     // Prevent usage of .bind() in JSX props
     // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/jsx-no-bind.md
     'react/jsx-no-bind': [2, {
-      'ignoreRefs': true,
-      'allowArrowFunctions': true,
-      'allowBind': false,
+      ignoreRefs: true,
+      allowArrowFunctions: true,
+      allowBind: false,
     }],
 
     // Prevent duplicate props in JSX
     // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/jsx-no-duplicate-props.md
-    'react/jsx-no-duplicate-props': [0, { 'ignoreCase': false }],
+    'react/jsx-no-duplicate-props': [0, { ignoreCase: false }],
 
     // Prevent usage of unwrapped JSX strings
     // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/jsx-no-literals.md
@@ -80,15 +80,15 @@ module.exports = {
     // Enforce PascalCase for user-defined JSX components
     // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/jsx-pascal-case.md
     'react/jsx-pascal-case': [2, {
-      'allowAllCaps': true,
-      'ignore': [],
+      allowAllCaps: true,
+      ignore: [],
     }],
 
     // Enforce propTypes declarations alphabetical sorting
     // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/sort-prop-types.md
     'react/sort-prop-types': [0, {
-      'ignoreCase': false,
-      'callbacksLast': false,
+      ignoreCase: false,
+      callbacksLast: false,
     }],
 
     // deprecated in favor of react/jsx-sort-props
@@ -97,13 +97,13 @@ module.exports = {
     // Enforce props alphabetical sorting
     // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/jsx-sort-props.md
     'react/jsx-sort-props': [0, {
-      'ignoreCase': false,
-      'callbacksLast': false,
+      ignoreCase: false,
+      callbacksLast: false,
     }],
 
     // Prevent React to be incorrectly marked as unused
     // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/jsx-uses-react.md
-    'react/jsx-uses-react': [2, { 'pragma': 'React' }],
+    'react/jsx-uses-react': [2, { pragma: 'React' }],
 
     // Prevent variables used in JSX to be incorrectly marked as unused
     // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/jsx-uses-vars.md
@@ -115,7 +115,7 @@ module.exports = {
 
     // Prevent usage of deprecated methods
     // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/no-deprecated.md
-    'react/no-deprecated': [1, { 'react': '0.14.0' }],
+    'react/no-deprecated': [1, { react: '0.14.0' }],
 
     // Prevent usage of setState in componentDidMount
     // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/no-did-mount-set-state.md
@@ -135,7 +135,7 @@ module.exports = {
 
     // Prevent multiple component definition per file
     // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/no-multi-comp.md
-    'react/no-multi-comp': [2, { 'ignoreStateless': true }],
+    'react/no-multi-comp': [2, { ignoreStateless: true }],
 
     // Prevent usage of setState
     // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/no-set-state.md
@@ -159,7 +159,7 @@ module.exports = {
 
     // Prevent missing props validation in a React component definition
     // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/prop-types.md
-    'react/prop-types': [2, { 'ignore': [], 'customValidators': [] }],
+    'react/prop-types': [2, { ignore: [], customValidators: [] }],
 
     // Prevent missing React when using JSX
     // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/react-in-jsx-scope.md
@@ -167,7 +167,7 @@ module.exports = {
 
     // Restrict file extensions that may be required
     // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/require-extension.md
-    'react/require-extension': [0, { 'extensions': ['.jsx'] }],
+    'react/require-extension': [0, { extensions: ['.jsx'] }],
 
     // Require render() methods to return something
     // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/require-render-return.md
@@ -184,7 +184,7 @@ module.exports = {
     // Enforce component methods order
     // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/sort-comp.md
     'react/sort-comp': [2, {
-      'order': [
+      order: [
         'static-methods',
         'lifecycle',
         '/^on.+$/',
@@ -198,9 +198,9 @@ module.exports = {
     // Prevent missing parentheses around multilines JSX
     // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/wrap-multilines.md
     'react/wrap-multilines': [2, {
-      'declaration': true,
-      'assignment': true,
-      'return': true
+      declaration: true,
+      assignment: true,
+      return: true
     }],
 
     // Require that the first prop in a JSX element be on a new line when the element is multiline
@@ -221,15 +221,15 @@ module.exports = {
     'react/jsx-no-target-blank': 0
   },
 
-  'settings': {
+  settings: {
     'import/resolver': {
-      'node': {
-        'extensions': ['.js', '.jsx', '.json']
+      node: {
+        extensions: ['.js', '.jsx', '.json']
       }
     },
-    'react': {
-      'pragma': 'React',
-      'version': '0.14'
+    react: {
+      pragma: 'React',
+      version: '0.14'
     },
   }
 };

From b6e4b72fc26e11b9ec9ac52ce94323008c19ce5d Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Sat, 21 May 2016 22:11:20 +0200
Subject: [PATCH 0673/1591] [eslint config] [*] [deps] update `eslint`,
 `eslint-plugin-jsx-a11y`. ensure react is >= 13.0.0

---
 packages/eslint-config-airbnb-base/package.json |  4 ++--
 packages/eslint-config-airbnb/package.json      | 10 +++++-----
 2 files changed, 7 insertions(+), 7 deletions(-)

diff --git a/packages/eslint-config-airbnb-base/package.json b/packages/eslint-config-airbnb-base/package.json
index 0ecf7740ba..662c106ce7 100644
--- a/packages/eslint-config-airbnb-base/package.json
+++ b/packages/eslint-config-airbnb-base/package.json
@@ -45,13 +45,13 @@
   "homepage": "https://github.com/airbnb/javascript",
   "devDependencies": {
     "babel-tape-runner": "^1.3.1",
-    "eslint": "^2.10.1",
+    "eslint": "^2.10.2",
     "eslint-find-rules": "^1.9.2",
     "eslint-plugin-import": "^1.8.0",
     "tape": "^4.5.1"
   },
   "peerDependencies": {
-    "eslint": "^2.10.1",
+    "eslint": "^2.10.2",
     "eslint-plugin-import": "^1.8.0"
   }
 }
diff --git a/packages/eslint-config-airbnb/package.json b/packages/eslint-config-airbnb/package.json
index b0b6095aa5..3ff82c4fec 100644
--- a/packages/eslint-config-airbnb/package.json
+++ b/packages/eslint-config-airbnb/package.json
@@ -48,17 +48,17 @@
   },
   "devDependencies": {
     "babel-tape-runner": "^1.3.1",
-    "eslint": "^2.9.0",
+    "eslint": "^2.10.2",
     "eslint-find-rules": "^1.9.2",
     "eslint-plugin-import": "^1.8.0",
-    "eslint-plugin-jsx-a11y": "^1.2.0",
+    "eslint-plugin-jsx-a11y": "^1.2.2",
     "eslint-plugin-react": "^5.1.1",
-    "react": "*",
+    "react": ">= 13.0.0",
     "tape": "^4.5.1"
   },
   "peerDependencies": {
-    "eslint": "^2.9.0",
-    "eslint-plugin-jsx-a11y": "^1.2.0",
+    "eslint": "^2.10.2",
+    "eslint-plugin-jsx-a11y": "^1.2.2",
     "eslint-plugin-import": "^1.8.0",
     "eslint-plugin-react": "^5.1.1"
   }

From a8839173ccc90d88fb88850525df6b3f33fa64af Mon Sep 17 00:00:00 2001
From: Jason <jasonlikenfs@gmail.com>
Date: Wed, 25 May 2016 16:50:37 +0800
Subject: [PATCH 0674/1591] add chinese simplified for React/JSX style guide

---
 react/README.md | 6 ++++++
 1 file changed, 6 insertions(+)

diff --git a/react/README.md b/react/README.md
index e0794aaadf..3332404aa2 100644
--- a/react/README.md
+++ b/react/README.md
@@ -505,4 +505,10 @@
 
   [anti-pattern]: https://facebook.github.io/react/blog/2015/12/16/ismounted-antipattern.html
 
+## Translation
+
+  This JSX/React style guide is also available in other languages:
+  
+  - ![cn](https://raw.githubusercontent.com/gosquared/flags/master/flags/flags/shiny/24/China.png) **Chinese (Simplified)**: [JasonBoy/javascript](https://github.com/JasonBoy/javascript/tree/master/react)
+
 **[⬆ back to top](#table-of-contents)**

From 199a0a700d0f002ffb1bebec07524d5f6bb9e9cb Mon Sep 17 00:00:00 2001
From: Sergii Tkachenko <hi@sergii.org>
Date: Wed, 25 May 2016 17:33:09 +0300
Subject: [PATCH 0675/1591] Add DoSomething.org to the list of organizations in
 README

---
 README.md | 1 +
 1 file changed, 1 insertion(+)

diff --git a/README.md b/README.md
index fb43bc9e25..d2e0ba5cdb 100644
--- a/README.md
+++ b/README.md
@@ -2821,6 +2821,7 @@ Other Style Guides
   - **ComparaOnline**: [comparaonline/javascript](https://github.com/comparaonline/javascript-style-guide)
   - **Compass Learning**: [compasslearning/javascript-style-guide](https://github.com/compasslearning/javascript-style-guide)
   - **DailyMotion**: [dailymotion/javascript](https://github.com/dailymotion/javascript)
+  - **DoSomething**: [DoSomething/eslint-config](https://github.com/DoSomething/eslint-config)
   - **Digitpaint** [digitpaint/javascript](https://github.com/digitpaint/javascript)
   - **Ecosia**: [ecosia/javascript](https://github.com/ecosia/javascript)
   - **Evernote**: [evernote/javascript-style-guide](https://github.com/evernote/javascript-style-guide)

From 4c4210f23d79d5eafdddbbce069a7d35f6e12ec0 Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Wed, 25 May 2016 18:19:19 +0200
Subject: [PATCH 0676/1591] Remove trailing whitespace.

---
 react/README.md | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/react/README.md b/react/README.md
index 3332404aa2..747bbe65a5 100644
--- a/react/README.md
+++ b/react/README.md
@@ -508,7 +508,7 @@
 ## Translation
 
   This JSX/React style guide is also available in other languages:
-  
+
   - ![cn](https://raw.githubusercontent.com/gosquared/flags/master/flags/flags/shiny/24/China.png) **Chinese (Simplified)**: [JasonBoy/javascript](https://github.com/JasonBoy/javascript/tree/master/react)
 
 **[⬆ back to top](#table-of-contents)**

From c247fd754b779df744c1c8ce34eed0ef37f09893 Mon Sep 17 00:00:00 2001
From: Alanna Scott <alanna.scott@airbnb.com>
Date: Wed, 25 May 2016 12:07:36 -0700
Subject: [PATCH 0677/1591] Avoid using an array index as `key` prop, prefer
 unique ID

---
 react/README.md | 20 ++++++++++++++++++++
 1 file changed, 20 insertions(+)

diff --git a/react/README.md b/react/README.md
index 747bbe65a5..3f21dd3bf4 100644
--- a/react/README.md
+++ b/react/README.md
@@ -279,6 +279,26 @@
   <div />
   ```
 
+  - Avoid using an array index as `key` prop, prefer a unique ID. ([why?](https://medium.com/@robinpokorny/index-as-a-key-is-an-anti-pattern-e0349aece318))
+
+  ```jsx
+  // bad
+  {todos.map((todo, index) =>
+    <Todo
+      {...todo}
+      key={index}
+    />
+  )}
+
+  // good
+  {todos.map((todo) =>
+    <Todo
+      {...todo}
+      key={todo.id}
+    />
+  )}
+  ```
+
 ## Parentheses
 
   - Wrap JSX tags in parentheses when they span more than one line. eslint: [`react/wrap-multilines`](https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/wrap-multilines.md)

From 1db55228882a2a6e4fefb8dd89bc796de93fe5a7 Mon Sep 17 00:00:00 2001
From: mifi <finstaden@gmail.com>
Date: Thu, 26 May 2016 22:54:27 +0200
Subject: [PATCH 0678/1591] Fix typo

disallowSpacesInsideObjectBrackets -> requireSpacesInsideObjectBrackets
---
 README.md | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/README.md b/README.md
index d2e0ba5cdb..c31d41b5e9 100644
--- a/README.md
+++ b/README.md
@@ -2092,7 +2092,7 @@ Other Style Guides
     ```
 
   <a name="whitespace--in-braces"></a><a name="18.11"></a>
-  - [18.11](#whitespace--in-braces) Add spaces inside curly braces. eslint: [`object-curly-spacing`](http://eslint.org/docs/rules/object-curly-spacing.html) jscs: [`disallowSpacesInsideObjectBrackets`](http://jscs.info/rule/disallowSpacesInsideObjectBrackets)
+  - [18.11](#whitespace--in-braces) Add spaces inside curly braces. eslint: [`object-curly-spacing`](http://eslint.org/docs/rules/object-curly-spacing.html) jscs: [`requireSpacesInsideObjectBrackets`](http://jscs.info/rule/requireSpacesInsideObjectBrackets)
 
     ```javascript
     // bad

From d97d62a2ff0341bcd9306b99cc6c510b8c9b1192 Mon Sep 17 00:00:00 2001
From: Simen Bekkhus <sbekkhus91@gmail.com>
Date: Wed, 1 Jun 2016 10:04:07 +0200
Subject: [PATCH 0679/1591] Fix react dev dep version

---
 packages/eslint-config-airbnb/package.json | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/packages/eslint-config-airbnb/package.json b/packages/eslint-config-airbnb/package.json
index 3ff82c4fec..caa671a378 100644
--- a/packages/eslint-config-airbnb/package.json
+++ b/packages/eslint-config-airbnb/package.json
@@ -53,7 +53,7 @@
     "eslint-plugin-import": "^1.8.0",
     "eslint-plugin-jsx-a11y": "^1.2.2",
     "eslint-plugin-react": "^5.1.1",
-    "react": ">= 13.0.0",
+    "react": ">= 0.13.0",
     "tape": "^4.5.1"
   },
   "peerDependencies": {

From 267eec57c672a1dfc5fb3e28f6e9739c2af82950 Mon Sep 17 00:00:00 2001
From: Ross Kirsling <rkirsling@gmail.com>
Date: Thu, 2 Jun 2016 10:24:30 -0700
Subject: [PATCH 0680/1591] Fix invalid code snippet in 23.2.

---
 README.md | 28 +++++++++++++++++++---------
 1 file changed, 19 insertions(+), 9 deletions(-)

diff --git a/README.md b/README.md
index c31d41b5e9..063a15c2ef 100644
--- a/README.md
+++ b/README.md
@@ -2502,16 +2502,26 @@ Other Style Guides
 
     ```javascript
     // bad
-    dragon.age();
-
-    // good
-    dragon.getAge();
-
-    // bad
-    dragon.age(25);
-
+    class Dragon {
+      get age() {
+        // ...
+      }
+    
+      set age(value) {
+        // ...
+      }
+    }
+    
     // good
-    dragon.setAge(25);
+    class Dragon {
+      getAge() {
+        // ...
+      }
+    
+      setAge(value) {
+        // ...
+      }
+    }
     ```
 
   <a name="accessors--boolean-prefix"></a><a name="23.3"></a>

From 3fb9db5a742d04d3bc1e4f9fc27e4544091a66c0 Mon Sep 17 00:00:00 2001
From: Wesley <wesww@users.noreply.github.com>
Date: Sat, 4 Jun 2016 15:17:00 -0700
Subject: [PATCH 0681/1591] fixing broken link

Google moved their style guides to Github (from an SVN server), and this link was broken
---
 README.md | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/README.md b/README.md
index 063a15c2ef..95e24219af 100644
--- a/README.md
+++ b/README.md
@@ -2752,7 +2752,7 @@ Other Style Guides
 
 **Other Style Guides**
 
-  - [Google JavaScript Style Guide](http://google-styleguide.googlecode.com/svn/trunk/javascriptguide.xml)
+  - [Google JavaScript Style Guide](https://google.github.io/styleguide/javascriptguide.xml)
   - [jQuery Core Style Guidelines](http://contribute.jquery.org/style-guide/js/)
   - [Principles of Writing Consistent, Idiomatic JavaScript](https://github.com/rwaldron/idiomatic.js)
 

From eb76edea3277fc14fa4a2369e4e2279c04117fd0 Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Sat, 4 Jun 2016 17:29:47 -0700
Subject: [PATCH 0682/1591] [eslint config] [*] [tests] Only run
 `eslint-find-rules` on prepublish, not in tests.

---
 packages/eslint-config-airbnb-base/package.json | 5 +++--
 packages/eslint-config-airbnb/package.json      | 5 +++--
 2 files changed, 6 insertions(+), 4 deletions(-)

diff --git a/packages/eslint-config-airbnb-base/package.json b/packages/eslint-config-airbnb-base/package.json
index 662c106ce7..1b3175b963 100644
--- a/packages/eslint-config-airbnb-base/package.json
+++ b/packages/eslint-config-airbnb-base/package.json
@@ -6,8 +6,9 @@
   "scripts": {
     "lint": "eslint .",
     "tests-only": "babel-tape-runner ./test/test-*.js",
-    "pretest": "eslint-find-rules --unused",
-    "test": "npm run --silent lint && npm run --silent tests-only",
+    "prepublish": "eslint-find-rules --unused && npm test",
+	"pretest": "npm run --silent lint",
+    "test": "npm run --silent tests-only",
     "travis": "npm run --silent test"
   },
   "repository": {
diff --git a/packages/eslint-config-airbnb/package.json b/packages/eslint-config-airbnb/package.json
index caa671a378..64a92931d2 100644
--- a/packages/eslint-config-airbnb/package.json
+++ b/packages/eslint-config-airbnb/package.json
@@ -6,8 +6,9 @@
   "scripts": {
     "lint": "eslint .",
     "tests-only": "babel-tape-runner ./test/test-*.js",
-    "pretest": "eslint-find-rules --unused",
-    "test": "npm run --silent lint && npm run --silent tests-only",
+    "prepublish": "eslint-find-rules --unused && npm test",
+	"pretest": "npm run --silent lint",
+    "test": "npm run --silent tests-only",
     "travis": "cd ../eslint-config-airbnb-base && npm link && cd - && npm link eslint-config-airbnb-base && npm run --silent test ; npm unlink eslint-config-airbnb-base >/dev/null &"
   },
   "repository": {

From 89cfa0b81ca76477aacf961fc3dc1fc6a89fc971 Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Sat, 4 Jun 2016 17:38:41 -0700
Subject: [PATCH 0683/1591] [eslint config] [*] use `in-publish` because
 coffeescript screwed up the prepublish script for everyone

---
 packages/eslint-config-airbnb-base/package.json | 7 ++++---
 packages/eslint-config-airbnb/package.json      | 7 ++++---
 2 files changed, 8 insertions(+), 6 deletions(-)

diff --git a/packages/eslint-config-airbnb-base/package.json b/packages/eslint-config-airbnb-base/package.json
index 1b3175b963..97c37638a6 100644
--- a/packages/eslint-config-airbnb-base/package.json
+++ b/packages/eslint-config-airbnb-base/package.json
@@ -6,8 +6,8 @@
   "scripts": {
     "lint": "eslint .",
     "tests-only": "babel-tape-runner ./test/test-*.js",
-    "prepublish": "eslint-find-rules --unused && npm test",
-	"pretest": "npm run --silent lint",
+    "prepublish": "not-in-install && (eslint-find-rules --unused && npm test) || in-install",
+    "pretest": "npm run --silent lint",
     "test": "npm run --silent tests-only",
     "travis": "npm run --silent test"
   },
@@ -49,7 +49,8 @@
     "eslint": "^2.10.2",
     "eslint-find-rules": "^1.9.2",
     "eslint-plugin-import": "^1.8.0",
-    "tape": "^4.5.1"
+    "tape": "^4.5.1",
+    "in-publish": "^2.0.0"
   },
   "peerDependencies": {
     "eslint": "^2.10.2",
diff --git a/packages/eslint-config-airbnb/package.json b/packages/eslint-config-airbnb/package.json
index 64a92931d2..37c7002f20 100644
--- a/packages/eslint-config-airbnb/package.json
+++ b/packages/eslint-config-airbnb/package.json
@@ -6,8 +6,8 @@
   "scripts": {
     "lint": "eslint .",
     "tests-only": "babel-tape-runner ./test/test-*.js",
-    "prepublish": "eslint-find-rules --unused && npm test",
-	"pretest": "npm run --silent lint",
+    "prepublish": "not-in-install && (eslint-find-rules --unused && npm test) || in-install",
+    "pretest": "npm run --silent lint",
     "test": "npm run --silent tests-only",
     "travis": "cd ../eslint-config-airbnb-base && npm link && cd - && npm link eslint-config-airbnb-base && npm run --silent test ; npm unlink eslint-config-airbnb-base >/dev/null &"
   },
@@ -55,7 +55,8 @@
     "eslint-plugin-jsx-a11y": "^1.2.2",
     "eslint-plugin-react": "^5.1.1",
     "react": ">= 0.13.0",
-    "tape": "^4.5.1"
+    "tape": "^4.5.1",
+    "in-publish": "^2.0.0"
   },
   "peerDependencies": {
     "eslint": "^2.10.2",

From ab4baf457e37d15513caf1fc5dde9512fd72293d Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Sat, 4 Jun 2016 17:41:41 -0700
Subject: [PATCH 0684/1591] [eslint config] [base] [deps] update `eslint`,
 `eslint-plugin-import`

---
 packages/eslint-config-airbnb-base/package.json | 8 ++++----
 1 file changed, 4 insertions(+), 4 deletions(-)

diff --git a/packages/eslint-config-airbnb-base/package.json b/packages/eslint-config-airbnb-base/package.json
index 97c37638a6..a4647f8626 100644
--- a/packages/eslint-config-airbnb-base/package.json
+++ b/packages/eslint-config-airbnb-base/package.json
@@ -46,14 +46,14 @@
   "homepage": "https://github.com/airbnb/javascript",
   "devDependencies": {
     "babel-tape-runner": "^1.3.1",
-    "eslint": "^2.10.2",
+    "eslint": "^2.11.1",
     "eslint-find-rules": "^1.9.2",
-    "eslint-plugin-import": "^1.8.0",
+    "eslint-plugin-import": "^1.8.1",
     "tape": "^4.5.1",
     "in-publish": "^2.0.0"
   },
   "peerDependencies": {
-    "eslint": "^2.10.2",
-    "eslint-plugin-import": "^1.8.0"
+    "eslint": "^2.11.1",
+    "eslint-plugin-import": "^1.8.1"
   }
 }

From d9cb343b518349982f3b094f2ce48eda8347e6c7 Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Sat, 4 Jun 2016 17:58:25 -0700
Subject: [PATCH 0685/1591] [eslint config] [base] [breaking] enable
 `unicode-bom` rule

---
 packages/eslint-config-airbnb-base/rules/style.js | 4 ++++
 1 file changed, 4 insertions(+)

diff --git a/packages/eslint-config-airbnb-base/rules/style.js b/packages/eslint-config-airbnb-base/rules/style.js
index a132d6c100..17baa61dc4 100644
--- a/packages/eslint-config-airbnb-base/rules/style.js
+++ b/packages/eslint-config-airbnb-base/rules/style.js
@@ -246,6 +246,10 @@ module.exports = {
       markers: ['=', '!']           // space here to support sprockets directives
     }],
 
+    // require or disallow the Unicode Byte Order Mark
+    // http://eslint.org/docs/rules/unicode-bom
+    'unicode-bom': [2, 'never'],
+
     // require regex literals to be wrapped in parentheses
     'wrap-regex': 0
   }

From 4700d9986452d119cd93faaa0f48e391b4c88c4a Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Sat, 4 Jun 2016 18:00:02 -0700
Subject: [PATCH 0686/1591] [eslint config] [base] [breaking] enable
 `no-useless-rename` rule

---
 packages/eslint-config-airbnb-base/rules/es6.js | 8 ++++++++
 1 file changed, 8 insertions(+)

diff --git a/packages/eslint-config-airbnb-base/rules/es6.js b/packages/eslint-config-airbnb-base/rules/es6.js
index c7a8114c1d..14292eed60 100644
--- a/packages/eslint-config-airbnb-base/rules/es6.js
+++ b/packages/eslint-config-airbnb-base/rules/es6.js
@@ -70,6 +70,14 @@ module.exports = {
     // http://eslint.org/docs/rules/no-useless-constructor
     'no-useless-constructor': 2,
 
+    // disallow renaming import, export, and destructured assignments to the same name
+    // http://eslint.org/docs/rules/no-useless-rename
+    'no-useless-rename': [2, {
+      ignoreDestructuring: false,
+      ignoreImport: false,
+      ignoreExport: false,
+    }],
+
     // require let or const instead of var
     'no-var': 2,
 

From f41b4df02458638525779c4ce3e496a9b588ebe5 Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Sat, 4 Jun 2016 18:14:02 -0700
Subject: [PATCH 0687/1591] [eslint config] [base] [breaking] enable
 `no-prototype-builtins` rule.

---
 README.md                                     | 30 +++++++++++++++----
 .../eslint-config-airbnb-base/rules/errors.js |  4 +++
 2 files changed, 29 insertions(+), 5 deletions(-)

diff --git a/README.md b/README.md
index 95e24219af..1d28ccd94c 100644
--- a/README.md
+++ b/README.md
@@ -288,8 +288,8 @@ Other Style Guides
     };
     ```
 
-  <a name="objects-quoted-props"></a><a name="3.8"></a>
-  - [3.8](#objects-quoted-props) Only quote properties that are invalid identifiers. eslint: [`quote-props`](http://eslint.org/docs/rules/quote-props.html) jscs: [`disallowQuotedKeysInObjects`](http://jscs.info/rule/disallowQuotedKeysInObjects)
+  <a name="objects--quoted-props"></a><a name="3.8"></a>
+  - [3.8](#objects--quoted-props) Only quote properties that are invalid identifiers. eslint: [`quote-props`](http://eslint.org/docs/rules/quote-props.html) jscs: [`disallowQuotedKeysInObjects`](http://jscs.info/rule/disallowQuotedKeysInObjects)
 
   > Why? In general we consider it subjectively easier to read. It improves syntax highlighting, and is also more easily optimized by many JS engines.
 
@@ -309,6 +309,26 @@ Other Style Guides
   };
   ```
 
+  <a name="objects--prototype-builtins"></a>
+  - [3.9](#objects--prototype-builtins) Do not call `Object.prototype` methods directly, such as `hasOwnProperty`, `propertyIsEnumerable`, and `isPrototypeOf`.
+
+  > Why? These methods may be shadowed by properties on the object in question - consider `{ hasOwnProperty: false }` - or, the object may be a null object (`Object.create(null)`).
+
+  ```javascript
+  // bad
+  console.log(object.hasOwnProperty(key));
+
+  // good
+  console.log(Object.prototype.hasOwnProperty.call(object, key));
+
+  // best
+  const has = Object.prototype.hasOwnProperty; // cache the lookup once, in module scope.
+  /* or */
+  const has = require('has');
+  …
+  console.log(has.call(object, key));
+  ```
+
 **[⬆ back to top](#table-of-contents)**
 
 ## Arrays
@@ -2506,18 +2526,18 @@ Other Style Guides
       get age() {
         // ...
       }
-    
+
       set age(value) {
         // ...
       }
     }
-    
+
     // good
     class Dragon {
       getAge() {
         // ...
       }
-    
+
       setAge(value) {
         // ...
       }
diff --git a/packages/eslint-config-airbnb-base/rules/errors.js b/packages/eslint-config-airbnb-base/rules/errors.js
index b8ee543c4d..9233f9f653 100644
--- a/packages/eslint-config-airbnb-base/rules/errors.js
+++ b/packages/eslint-config-airbnb-base/rules/errors.js
@@ -68,6 +68,10 @@ module.exports = {
     // disallow the use of object properties of the global object (Math and JSON) as functions
     'no-obj-calls': 2,
 
+    // disallow use of Object.prototypes builtins directly
+    // http://eslint.org/docs/rules/no-prototype-builtins
+    'no-prototype-builtins': 2,
+
     // disallow multiple spaces in a regular expression literal
     'no-regex-spaces': 2,
 

From 29eb575a52050f159ecec00f01e27861c56638c3 Mon Sep 17 00:00:00 2001
From: Lukasz Pietraszek <pietraszekl@users.noreply.github.com>
Date: Sat, 11 Jun 2016 09:39:03 +0100
Subject: [PATCH 0688/1591] Adding link polish translation

---
 react/README.md | 1 +
 1 file changed, 1 insertion(+)

diff --git a/react/README.md b/react/README.md
index 3f21dd3bf4..5e90274199 100644
--- a/react/README.md
+++ b/react/README.md
@@ -530,5 +530,6 @@
   This JSX/React style guide is also available in other languages:
 
   - ![cn](https://raw.githubusercontent.com/gosquared/flags/master/flags/flags/shiny/24/China.png) **Chinese (Simplified)**: [JasonBoy/javascript](https://github.com/JasonBoy/javascript/tree/master/react)
+  - ![pl](https://raw.githubusercontent.com/gosquared/flags/master/flags/flags/shiny/24/Poland.png) **Polish**: [pietraszekl/javascript](https://github.com/pietraszekl/javascript/tree/master/react)
 
 **[⬆ back to top](#table-of-contents)**

From 90f5a47c33eba080fd8b7c1cb804887270faba6e Mon Sep 17 00:00:00 2001
From: Caleb <Zeludon@users.noreply.github.com>
Date: Mon, 13 Jun 2016 19:15:19 +1000
Subject: [PATCH 0689/1591] Updated deprecated Japanese translation link.

old: https://github.com/mitsuruog/javacript-style-guide
new: https://github.com/mitsuruog/javascript-style-guide
---
 README.md | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/README.md b/README.md
index 1d28ccd94c..a85a7544db 100644
--- a/README.md
+++ b/README.md
@@ -2921,7 +2921,7 @@ Other Style Guides
   - ![fr](https://raw.githubusercontent.com/gosquared/flags/master/flags/flags/shiny/24/France.png) **French**: [nmussy/javascript-style-guide](https://github.com/nmussy/javascript-style-guide)
   - ![de](https://raw.githubusercontent.com/gosquared/flags/master/flags/flags/shiny/24/Germany.png) **German**: [timofurrer/javascript-style-guide](https://github.com/timofurrer/javascript-style-guide)
   - ![it](https://raw.githubusercontent.com/gosquared/flags/master/flags/flags/shiny/24/Italy.png) **Italian**: [sinkswim/javascript-style-guide](https://github.com/sinkswim/javascript-style-guide)
-  - ![jp](https://raw.githubusercontent.com/gosquared/flags/master/flags/flags/shiny/24/Japan.png) **Japanese**: [mitsuruog/javacript-style-guide](https://github.com/mitsuruog/javacript-style-guide)
+  - ![jp](https://raw.githubusercontent.com/gosquared/flags/master/flags/flags/shiny/24/Japan.png) **Japanese**: [mitsuruog/javascript-style-guide](https://github.com/mitsuruog/javascript-style-guide)
   - ![kr](https://raw.githubusercontent.com/gosquared/flags/master/flags/flags/shiny/24/South-Korea.png) **Korean**: [tipjs/javascript-style-guide](https://github.com/tipjs/javascript-style-guide)
   - ![pl](https://raw.githubusercontent.com/gosquared/flags/master/flags/flags/shiny/24/Poland.png) **Polish**: [mjurczyk/javascript](https://github.com/mjurczyk/javascript)
   - ![ru](https://raw.githubusercontent.com/gosquared/flags/master/flags/flags/shiny/24/Russia.png) **Russian**: [uprock/javascript](https://github.com/uprock/javascript)

From defa17e872bb25ae7a79d8eb911e75d9d841f550 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Andrzej=20Du=C5=9B?= <andrzej.dus@gmail.com>
Date: Wed, 15 Jun 2016 11:25:19 +0200
Subject: [PATCH 0690/1591] Added Syzygy Warsaw

---
 README.md | 1 +
 1 file changed, 1 insertion(+)

diff --git a/README.md b/README.md
index a85a7544db..f458230012 100644
--- a/README.md
+++ b/README.md
@@ -2897,6 +2897,7 @@ Other Style Guides
   - **Springload**: [springload/javascript](https://github.com/springload/javascript)
   - **StudentSphere**: [studentsphere/javascript](https://github.com/studentsphere/guide-javascript)
   - **SysGarage**: [sysgarage/javascript-style-guide](https://github.com/sysgarage/javascript-style-guide)
+  - **Syzygy Warsaw**: [syzygypl/javascript](https://github.com/syzygypl/javascript)
   - **Target**: [target/javascript](https://github.com/target/javascript)
   - **TheLadders**: [TheLadders/javascript](https://github.com/TheLadders/javascript)
   - **The Nerdery**: [thenerdery/javascript-standards](https://github.com/thenerdery/javascript-standards)

From 22f59b6e1b7da5efbe3b13f14bf3938b1f689758 Mon Sep 17 00:00:00 2001
From: hunyong-song <hunyong.song@nhn.com>
Date: Thu, 16 Jun 2016 10:20:03 +0900
Subject: [PATCH 0691/1591] Adding link korean translation

---
 react/README.md | 1 +
 1 file changed, 1 insertion(+)

diff --git a/react/README.md b/react/README.md
index 5e90274199..66abc5af05 100644
--- a/react/README.md
+++ b/react/README.md
@@ -531,5 +531,6 @@
 
   - ![cn](https://raw.githubusercontent.com/gosquared/flags/master/flags/flags/shiny/24/China.png) **Chinese (Simplified)**: [JasonBoy/javascript](https://github.com/JasonBoy/javascript/tree/master/react)
   - ![pl](https://raw.githubusercontent.com/gosquared/flags/master/flags/flags/shiny/24/Poland.png) **Polish**: [pietraszekl/javascript](https://github.com/pietraszekl/javascript/tree/master/react)
+  - ![kr](https://raw.githubusercontent.com/gosquared/flags/master/flags/flags/shiny/24/South-Korea.png) **Korean**: [apple77y/javascript](https://github.com/apple77y/javascript/tree/master/react)
 
 **[⬆ back to top](#table-of-contents)**

From 0814be638f22b01a8e49efd77094be24055a3d48 Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Thu, 16 Jun 2016 22:44:35 -0700
Subject: [PATCH 0692/1591] [eslint config] [base] [deps] update `eslint`,
 `eslint-find-rules`

Adds disabled rules: `max-lines`, `no-mixed-operators`, `rest-spread-spacing`, `object-curly-newline`
---
 .../eslint-config-airbnb-base/package.json    |  6 ++--
 .../eslint-config-airbnb-base/rules/es6.js    |  4 +++
 .../eslint-config-airbnb-base/rules/style.js  | 29 +++++++++++++++++++
 3 files changed, 36 insertions(+), 3 deletions(-)

diff --git a/packages/eslint-config-airbnb-base/package.json b/packages/eslint-config-airbnb-base/package.json
index a4647f8626..0f7aae49ce 100644
--- a/packages/eslint-config-airbnb-base/package.json
+++ b/packages/eslint-config-airbnb-base/package.json
@@ -46,14 +46,14 @@
   "homepage": "https://github.com/airbnb/javascript",
   "devDependencies": {
     "babel-tape-runner": "^1.3.1",
-    "eslint": "^2.11.1",
-    "eslint-find-rules": "^1.9.2",
+    "eslint": "^2.12.0",
+    "eslint-find-rules": "^1.10.0",
     "eslint-plugin-import": "^1.8.1",
     "tape": "^4.5.1",
     "in-publish": "^2.0.0"
   },
   "peerDependencies": {
-    "eslint": "^2.11.1",
+    "eslint": "^2.12.0",
     "eslint-plugin-import": "^1.8.1"
   }
 }
diff --git a/packages/eslint-config-airbnb-base/rules/es6.js b/packages/eslint-config-airbnb-base/rules/es6.js
index 14292eed60..1ce5446e58 100644
--- a/packages/eslint-config-airbnb-base/rules/es6.js
+++ b/packages/eslint-config-airbnb-base/rules/es6.js
@@ -117,6 +117,10 @@ module.exports = {
     // disallow generator functions that do not have yield
     'require-yield': 0,
 
+    // enforce spacing between object rest-spread
+    // http://eslint.org/docs/rules/rest-spread-spacing
+    'rest-spread-spacing': [0, 'never'],
+
     // import sorting
     // http://eslint.org/docs/rules/sort-imports
     'sort-imports': 0,
diff --git a/packages/eslint-config-airbnb-base/rules/style.js b/packages/eslint-config-airbnb-base/rules/style.js
index 17baa61dc4..55020a5aec 100644
--- a/packages/eslint-config-airbnb-base/rules/style.js
+++ b/packages/eslint-config-airbnb-base/rules/style.js
@@ -83,6 +83,14 @@ module.exports = {
       ignoreComments: false
     }],
 
+    // specify the max number of lines in a file
+    // http://eslint.org/docs/rules/max-lines
+    'max-lines': [0, {
+      max: 300,
+      skipBlankLines: true,
+      skipComments: true
+    }],
+
     // specify the maximum depth callbacks can be nested
     'max-nested-callbacks': 0,
 
@@ -128,6 +136,20 @@ module.exports = {
     // disallow if as the only statement in an else block
     'no-lonely-if': 0,
 
+    // disallow un-paren'd mixes of different operators
+    // http://eslint.org/docs/rules/no-mixed-operators
+    // TODO: enable
+    'no-mixed-operators': [0, {
+      groups: [
+        ['+', '-', '*', '/', '%', '**'],
+        ['&', '|', '^', '~', '<<', '>>', '>>>'],
+        ['==', '!=', '===', '!==', '>', '>=', '<', '<='],
+        ['&&', '||'],
+        ['in', 'instanceof']
+      ],
+      allowSamePrecedence: false
+    }],
+
     // disallow mixed spaces and tabs for indentation
     'no-mixed-spaces-and-tabs': 2,
 
@@ -181,6 +203,13 @@ module.exports = {
     // require padding inside curly braces
     'object-curly-spacing': [2, 'always'],
 
+    // enforce line breaks between braces
+    // http://eslint.org/docs/rules/object-curly-newline
+    'object-curly-newline': [0, {
+      ObjectExpression: { minProperties: 0, multiline: true },
+      ObjectPattern: { minProperties: 0, multiline: true }
+    }],
+
     // enforce "same line" or "multiple line" on object properties.
     // http://eslint.org/docs/rules/object-property-newline
     // TODO: enable when https://github.com/eslint/eslint/issues/5667#issuecomment-219334864 is resolved

From 0afde8f136ea7ea880b38f787fcf85d795cdf341 Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Fri, 17 Jun 2016 16:03:03 -0700
Subject: [PATCH 0693/1591] [eslint config] [base] [deps] update `eslint`

---
 packages/eslint-config-airbnb-base/package.json      | 4 ++--
 packages/eslint-config-airbnb-base/test/test-base.js | 2 +-
 2 files changed, 3 insertions(+), 3 deletions(-)

diff --git a/packages/eslint-config-airbnb-base/package.json b/packages/eslint-config-airbnb-base/package.json
index 0f7aae49ce..eb5e73427d 100644
--- a/packages/eslint-config-airbnb-base/package.json
+++ b/packages/eslint-config-airbnb-base/package.json
@@ -46,14 +46,14 @@
   "homepage": "https://github.com/airbnb/javascript",
   "devDependencies": {
     "babel-tape-runner": "^1.3.1",
-    "eslint": "^2.12.0",
+    "eslint": "^2.13.0",
     "eslint-find-rules": "^1.10.0",
     "eslint-plugin-import": "^1.8.1",
     "tape": "^4.5.1",
     "in-publish": "^2.0.0"
   },
   "peerDependencies": {
-    "eslint": "^2.12.0",
+    "eslint": "^2.13.0",
     "eslint-plugin-import": "^1.8.1"
   }
 }
diff --git a/packages/eslint-config-airbnb-base/test/test-base.js b/packages/eslint-config-airbnb-base/test/test-base.js
index e4b2e6a406..8e7dc8cd2d 100644
--- a/packages/eslint-config-airbnb-base/test/test-base.js
+++ b/packages/eslint-config-airbnb-base/test/test-base.js
@@ -2,7 +2,7 @@ import fs from 'fs';
 import path from 'path';
 import test from 'tape';
 
-const index = require('../');
+import index from '../';
 
 const files = { index };
 

From 343dc2c34a4a451fc64fdb3873b4c13b93495213 Mon Sep 17 00:00:00 2001
From: Anton Backer <anton.backer@newsela.com>
Date: Fri, 17 Jun 2016 15:23:36 -0700
Subject: [PATCH 0694/1591] Remove parens around single argument in React
 example
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

Parens around a single argument aren't in line with the js guide:

    If your function takes a single argument and doesn’t use braces,
    omit the parentheses.

https://github.com/airbnb/javascript/blob/0814be638f22b01a8e49efd77094be24055a3d48/README.md#arrows--one-arg-parens

Another rule violation:

    Wrap JSX tags in parentheses when they span more than one line.

https://github.com/airbnb/javascript/blob/0814be638f22b01a8e49efd77094be24055a3d48/react/README.md#parentheses
---
 react/README.md | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/react/README.md b/react/README.md
index 66abc5af05..0fd52c1c02 100644
--- a/react/README.md
+++ b/react/README.md
@@ -291,12 +291,12 @@
   )}
 
   // good
-  {todos.map((todo) =>
+  {todos.map(todo => (
     <Todo
       {...todo}
       key={todo.id}
     />
-  )}
+  ))}
   ```
 
 ## Parentheses

From 04138345adba05ad90398f64fb83ae9e89512975 Mon Sep 17 00:00:00 2001
From: Michael Clawar <michael@stratodem.com>
Date: Sun, 19 Jun 2016 15:47:02 -0400
Subject: [PATCH 0695/1591] Update README.md

---
 README.md | 1 +
 1 file changed, 1 insertion(+)

diff --git a/README.md b/README.md
index f458230012..026175b6e4 100644
--- a/README.md
+++ b/README.md
@@ -2895,6 +2895,7 @@ Other Style Guides
   - **SeekingAlpha**: [seekingalpha/javascript-style-guide](https://github.com/seekingalpha/javascript-style-guide)
   - **Shutterfly**: [shutterfly/javascript](https://github.com/shutterfly/javascript)
   - **Springload**: [springload/javascript](https://github.com/springload/javascript)
+  - **StratoDem Analytics**: [stratodem/javascript](https://github.com/stratodem/javascript)
   - **StudentSphere**: [studentsphere/javascript](https://github.com/studentsphere/guide-javascript)
   - **SysGarage**: [sysgarage/javascript-style-guide](https://github.com/sysgarage/javascript-style-guide)
   - **Syzygy Warsaw**: [syzygypl/javascript](https://github.com/syzygypl/javascript)

From 001efc722cb2e74d5596db5d96cf79605d407b9b Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Mon, 20 Jun 2016 13:34:03 -0700
Subject: [PATCH 0696/1591] [eslint config] [base] update `eslint`

---
 packages/eslint-config-airbnb-base/package.json | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/packages/eslint-config-airbnb-base/package.json b/packages/eslint-config-airbnb-base/package.json
index eb5e73427d..fee88f1185 100644
--- a/packages/eslint-config-airbnb-base/package.json
+++ b/packages/eslint-config-airbnb-base/package.json
@@ -46,14 +46,14 @@
   "homepage": "https://github.com/airbnb/javascript",
   "devDependencies": {
     "babel-tape-runner": "^1.3.1",
-    "eslint": "^2.13.0",
+    "eslint": "^2.13.1",
     "eslint-find-rules": "^1.10.0",
     "eslint-plugin-import": "^1.8.1",
     "tape": "^4.5.1",
     "in-publish": "^2.0.0"
   },
   "peerDependencies": {
-    "eslint": "^2.13.0",
+    "eslint": "^2.13.1",
     "eslint-plugin-import": "^1.8.1"
   }
 }

From 5651e607f3268e9a69a72103a4f3a8c067e16efc Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Mon, 20 Jun 2016 14:31:26 -0700
Subject: [PATCH 0697/1591] [eslint config] [base] [breaking] enable
 `object-property-newline` rule

---
 packages/eslint-config-airbnb-base/rules/style.js | 3 +--
 1 file changed, 1 insertion(+), 2 deletions(-)

diff --git a/packages/eslint-config-airbnb-base/rules/style.js b/packages/eslint-config-airbnb-base/rules/style.js
index 55020a5aec..dbb305ed5f 100644
--- a/packages/eslint-config-airbnb-base/rules/style.js
+++ b/packages/eslint-config-airbnb-base/rules/style.js
@@ -212,8 +212,7 @@ module.exports = {
 
     // enforce "same line" or "multiple line" on object properties.
     // http://eslint.org/docs/rules/object-property-newline
-    // TODO: enable when https://github.com/eslint/eslint/issues/5667#issuecomment-219334864 is resolved
-    'object-property-newline': [0, {
+    'object-property-newline': [2, {
       allowMultiplePropertiesPerLine: true,
     }],
 

From 6980cce17f8339b5466b14d08b7ab00005fa2990 Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Mon, 20 Jun 2016 14:32:19 -0700
Subject: [PATCH 0698/1591] [eslint config] [base] [breaking] enable `import`
 rules:  - `no-named-as-default`  - `no-named-as-default-member`  -
 `no-extraneous-dependencies`  - `extensions`

---
 packages/eslint-config-airbnb-base/rules/imports.js | 12 ++++--------
 packages/eslint-config-airbnb-base/test/.eslintrc   |  5 ++++-
 2 files changed, 8 insertions(+), 9 deletions(-)

diff --git a/packages/eslint-config-airbnb-base/rules/imports.js b/packages/eslint-config-airbnb-base/rules/imports.js
index 2f45ca9b45..dc73387f13 100644
--- a/packages/eslint-config-airbnb-base/rules/imports.js
+++ b/packages/eslint-config-airbnb-base/rules/imports.js
@@ -44,13 +44,11 @@ module.exports = {
 
     // do not allow a default import name to match a named export
     // https://github.com/benmosher/eslint-plugin-import/blob/master/docs/rules/no-named-as-default.md
-    // TODO: enable
-    'import/no-named-as-default': 0,
+    'import/no-named-as-default': 2,
 
     // warn on accessing default export property names that are also named exports
-    // TODO: enable?
     // https://github.com/benmosher/eslint-plugin-import/blob/master/docs/rules/no-named-as-default-member.md
-    'import/no-named-as-default-member': 0,
+    'import/no-named-as-default-member': 2,
 
     // disallow use of jsdoc-marked-deprecated imports
     // https://github.com/benmosher/eslint-plugin-import/blob/master/docs/rules/no-deprecated.md
@@ -58,8 +56,7 @@ module.exports = {
 
     // Forbid the use of extraneous packages
     // https://github.com/benmosher/eslint-plugin-import/blob/master/docs/rules/no-extraneous-dependencies.md
-    // TODO: enable
-    'import/no-extraneous-dependencies': [0, {
+    'import/no-extraneous-dependencies': [2, {
       devDependencies: false,
       optionalDependencies: false,
     }],
@@ -99,8 +96,7 @@ module.exports = {
 
     // Ensure consistent use of file extension within the import path
     // https://github.com/benmosher/eslint-plugin-import/blob/master/docs/rules/extensions.md
-    // TODO: enable
-    'import/extensions': [0, 'never'],
+    'import/extensions': [2, 'never'],
 
     // Enforce a convention in module import order
     // https://github.com/benmosher/eslint-plugin-import/blob/master/docs/rules/order.md
diff --git a/packages/eslint-config-airbnb-base/test/.eslintrc b/packages/eslint-config-airbnb-base/test/.eslintrc
index 7f79874e41..7e22f26a09 100644
--- a/packages/eslint-config-airbnb-base/test/.eslintrc
+++ b/packages/eslint-config-airbnb-base/test/.eslintrc
@@ -4,6 +4,9 @@
     // rule
     "no-shadow": 0,
     // tests uses `t` for tape
-    "id-length": [2, {"min": 2, "properties": "never", "exceptions": ["t"]}]
+    "id-length": [2, {"min": 2, "properties": "never", "exceptions": ["t"]}],
+    "import/no-extraneous-dependencies": [2, {
+      "devDependencies": true
+    }],
   }
 }

From ee2cb41ec4ccc1bbf434c06a89643020aa2fb3b8 Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Mon, 20 Jun 2016 15:52:05 -0700
Subject: [PATCH 0699/1591] [eslint config] [base] [breaking] enable
 `no-mixed-operators` rule.

Specifically, this is to require parens to avoid cognitive overhead about precedence.
---
 packages/eslint-config-airbnb-base/rules/style.js | 3 +--
 1 file changed, 1 insertion(+), 2 deletions(-)

diff --git a/packages/eslint-config-airbnb-base/rules/style.js b/packages/eslint-config-airbnb-base/rules/style.js
index dbb305ed5f..8953957e78 100644
--- a/packages/eslint-config-airbnb-base/rules/style.js
+++ b/packages/eslint-config-airbnb-base/rules/style.js
@@ -138,8 +138,7 @@ module.exports = {
 
     // disallow un-paren'd mixes of different operators
     // http://eslint.org/docs/rules/no-mixed-operators
-    // TODO: enable
-    'no-mixed-operators': [0, {
+    'no-mixed-operators': [2, {
       groups: [
         ['+', '-', '*', '/', '%', '**'],
         ['&', '|', '^', '~', '<<', '>>', '>>>'],

From 51f9b0450c0cf6a21b5972f357841f39eb2180ac Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Mon, 20 Jun 2016 15:53:26 -0700
Subject: [PATCH 0700/1591] [eslint config] [base] [breaking] enable import
 rules: `newline-after-import`, `prefer-default-export`

---
 packages/eslint-config-airbnb-base/rules/imports.js | 8 +++-----
 1 file changed, 3 insertions(+), 5 deletions(-)

diff --git a/packages/eslint-config-airbnb-base/rules/imports.js b/packages/eslint-config-airbnb-base/rules/imports.js
index dc73387f13..beab90a0f5 100644
--- a/packages/eslint-config-airbnb-base/rules/imports.js
+++ b/packages/eslint-config-airbnb-base/rules/imports.js
@@ -108,12 +108,10 @@ module.exports = {
 
     // Require a newline after the last import/require in a group
     // https://github.com/benmosher/eslint-plugin-import/blob/master/docs/rules/newline-after-import.md
-    // TODO: enable
-    'import/newline-after-import': 0,
+    'import/newline-after-import': 2,
 
     // Require modules with a single export to use a default export
     // https://github.com/benmosher/eslint-plugin-import/blob/master/docs/rules/prefer-default-export.md
-    // TODO: enable
-    'import/prefer-default-export': 0
-  }
+    'import/prefer-default-export': 2,
+  },
 };

From 622a3bc1ab3c94333373293eae12983a96e85516 Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Mon, 20 Jun 2016 16:11:24 -0700
Subject: [PATCH 0701/1591] [eslint config] [base] [breaking] re-disable
 `newline-after-import`

Per https://github.com/benmosher/eslint-plugin-import/issues/386
---
 packages/eslint-config-airbnb-base/rules/imports.js | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/packages/eslint-config-airbnb-base/rules/imports.js b/packages/eslint-config-airbnb-base/rules/imports.js
index beab90a0f5..1d643b4d60 100644
--- a/packages/eslint-config-airbnb-base/rules/imports.js
+++ b/packages/eslint-config-airbnb-base/rules/imports.js
@@ -108,7 +108,8 @@ module.exports = {
 
     // Require a newline after the last import/require in a group
     // https://github.com/benmosher/eslint-plugin-import/blob/master/docs/rules/newline-after-import.md
-    'import/newline-after-import': 2,
+    // TODO: enable when https://github.com/benmosher/eslint-plugin-import/issues/386 is resolved
+    'import/newline-after-import': 0,
 
     // Require modules with a single export to use a default export
     // https://github.com/benmosher/eslint-plugin-import/blob/master/docs/rules/prefer-default-export.md

From d0973e8e36131668c06ff7a929ba735dbd0173c0 Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Mon, 20 Jun 2016 17:58:36 -0700
Subject: [PATCH 0702/1591] [eslint config] [base] add TODO for
 `object-curly-newline`.

ref https://github.com/eslint/eslint/issues/6488
---
 packages/eslint-config-airbnb-base/rules/style.js | 1 +
 1 file changed, 1 insertion(+)

diff --git a/packages/eslint-config-airbnb-base/rules/style.js b/packages/eslint-config-airbnb-base/rules/style.js
index 8953957e78..f7a8e7f52a 100644
--- a/packages/eslint-config-airbnb-base/rules/style.js
+++ b/packages/eslint-config-airbnb-base/rules/style.js
@@ -204,6 +204,7 @@ module.exports = {
 
     // enforce line breaks between braces
     // http://eslint.org/docs/rules/object-curly-newline
+    // TODO: enable once https://github.com/eslint/eslint/issues/6488 is resolved
     'object-curly-newline': [0, {
       ObjectExpression: { minProperties: 0, multiline: true },
       ObjectPattern: { minProperties: 0, multiline: true }

From a597da56ca9047d1c0ac8e1a6db318f78111e723 Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Mon, 20 Jun 2016 17:59:03 -0700
Subject: [PATCH 0703/1591] [eslint config] [base] [breaking] enable
 `rest-spread-spacing` rule

---
 packages/eslint-config-airbnb-base/rules/es6.js | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/packages/eslint-config-airbnb-base/rules/es6.js b/packages/eslint-config-airbnb-base/rules/es6.js
index 1ce5446e58..3ace792fd9 100644
--- a/packages/eslint-config-airbnb-base/rules/es6.js
+++ b/packages/eslint-config-airbnb-base/rules/es6.js
@@ -119,7 +119,7 @@ module.exports = {
 
     // enforce spacing between object rest-spread
     // http://eslint.org/docs/rules/rest-spread-spacing
-    'rest-spread-spacing': [0, 'never'],
+    'rest-spread-spacing': [2, 'never'],
 
     // import sorting
     // http://eslint.org/docs/rules/sort-imports

From 28a04a3a45d169bbb6fa8cc9a3ff94e98a6a6a2a Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Tue, 21 Jun 2016 22:41:03 -0700
Subject: [PATCH 0704/1591] =?UTF-8?q?[docs]=20Clear=20up=20=E2=80=9Cconfus?=
 =?UTF-8?q?ing=20arrows=E2=80=9D=20example.?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

Closes #856.
---
 README.md | 8 +++++++-
 1 file changed, 7 insertions(+), 1 deletion(-)

diff --git a/README.md b/README.md
index 026175b6e4..1c59869e57 100644
--- a/README.md
+++ b/README.md
@@ -912,7 +912,13 @@ Other Style Guides
     const itemHeight = (item) => item.height > 256 ? item.largeSize : item.smallSize;
 
     // good
-    const itemHeight = (item) => { return item.height > 256 ? item.largeSize : item.smallSize; };
+    const itemHeight = item => (item.height > 256 ? item.largeSize : item.smallSize);
+
+    // good
+    const itemHeight = (item) => {
+      const { height, largeSize, smallSize } = item;
+      return height > 256 ? largeSize : smallSize;
+    };
     ```
 
 **[⬆ back to top](#table-of-contents)**

From 34a9f076df1b57069f235393cd895b2c25cd893f Mon Sep 17 00:00:00 2001
From: Shreevatsa <shreevatsa.public@gmail.com>
Date: Thu, 23 Jun 2016 10:58:12 -0700
Subject: [PATCH 0705/1591] Minor typo: "coxcomb graph" v/s "coxcomb chart"

The "bad" and "good" diffs in section 19.2 had different text; making them the same to avoid confusion about what the difference is.
---
 README.md | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/README.md b/README.md
index 1c59869e57..21c9c858d7 100644
--- a/README.md
+++ b/README.md
@@ -2204,7 +2204,7 @@ Other Style Guides
          firstName: 'Florence',
     -    lastName: 'Nightingale'
     +    lastName: 'Nightingale',
-    +    inventorOf: ['coxcomb graph', 'modern nursing']
+    +    inventorOf: ['coxcomb chart', 'modern nursing']
     };
 
     // good - git diff with trailing comma

From 36d15615968e267d11f6d2be509e5625900a7e6c Mon Sep 17 00:00:00 2001
From: Kevin Grandon <kevingrandon@yahoo.com>
Date: Fri, 3 Jun 2016 11:30:24 -0700
Subject: [PATCH 0706/1591] Prevent using string refs.

According to the official React documentation string refs are considered legacy and will be deprecated in the future.
---
 packages/eslint-config-airbnb/rules/react.js |  2 +-
 react/README.md                              | 17 +++++++++++++++++
 2 files changed, 18 insertions(+), 1 deletion(-)

diff --git a/packages/eslint-config-airbnb/rules/react.js b/packages/eslint-config-airbnb/rules/react.js
index 00e6f21a90..26bf60488f 100644
--- a/packages/eslint-config-airbnb/rules/react.js
+++ b/packages/eslint-config-airbnb/rules/react.js
@@ -143,7 +143,7 @@ module.exports = {
 
     // Prevent using string references
     // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/no-string-refs.md
-    'react/no-string-refs': 0,
+    'react/no-string-refs': 2,
 
     // Prevent usage of unknown DOM property
     // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/no-unknown-property.md
diff --git a/react/README.md b/react/README.md
index 0fd52c1c02..e0726c3245 100644
--- a/react/README.md
+++ b/react/README.md
@@ -12,6 +12,7 @@
   1. [Quotes](#quotes)
   1. [Spacing](#spacing)
   1. [Props](#props)
+  1. [Refs](#refs)
   1. [Parentheses](#parentheses)
   1. [Tags](#tags)
   1. [Methods](#methods)
@@ -299,6 +300,22 @@
   ))}
   ```
 
+## Refs
+
+  - Always use ref callbacks. eslint: [`react/no-string-refs`](https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/no-string-refs.md)
+
+    ```jsx
+    // bad
+    <Foo
+      ref="myRef"
+    />
+
+    // good
+    <Foo
+      ref={(ref) => this.myRef = ref}
+    />
+    ```
+
 ## Parentheses
 
   - Wrap JSX tags in parentheses when they span more than one line. eslint: [`react/wrap-multilines`](https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/wrap-multilines.md)

From c9bcc7ef36d641415223b02592dfa0c3ab12597b Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?C=C3=A9dric=20Malard?= <c.malard-git@valdun.net>
Date: Tue, 5 Jul 2016 18:30:44 +0200
Subject: [PATCH 0707/1591] Remove leading underscores for private properties
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

- It follows [ES6 styleguide](https://github.com/airbnb/javascript#naming--leading-underscore)
- eslint plugin is configured this way : `'no-underscore-dangle': [2, { allowAfterThis: false }],`
---
 es5/README.md | 22 ++++++++++++++++------
 1 file changed, 16 insertions(+), 6 deletions(-)

diff --git a/es5/README.md b/es5/README.md
index 9351646805..4dcbac061b 100644
--- a/es5/README.md
+++ b/es5/README.md
@@ -717,7 +717,7 @@
     function getType() {
       console.log('fetching type...');
       // set the default type to 'no type'
-      var type = this._type || 'no type';
+      var type = this.type || 'no type';
 
       return type;
     }
@@ -727,7 +727,7 @@
       console.log('fetching type...');
 
       // set the default type to 'no type'
-      var type = this._type || 'no type';
+      var type = this.type || 'no type';
 
       return type;
     }
@@ -1178,18 +1178,21 @@
     });
     ```
 
-  - Use a leading underscore `_` when naming private properties.
+  - Do not use trailing or leading underscores.
+
+  > Why? JavaScript does not have the concept of privacy in terms of properties or methods. Although a leading underscore is a common convention to mean “private”, in fact, these properties are fully public, and as such, are part of your public API contract. This convention might lead developers to wrongly think that a change won't count as breaking, or that tests aren't needed. tl;dr: if you want something to be “private”, it must not be observably present.
 
     ```javascript
     // bad
     this.__firstName__ = 'Panda';
     this.firstName_ = 'Panda';
+    this._firstName = 'Panda';
 
     // good
-    this._firstName = 'Panda';
+    this.firstName = 'Panda';
     ```
 
-  - When saving a reference to `this` use `_this`.
+  - Don't save references to this. Use Function#bind.
 
     ```javascript
     // bad
@@ -1208,13 +1211,20 @@
       };
     }
 
-    // good
+    // bad
     function () {
       var _this = this;
       return function () {
         console.log(_this);
       };
     }
+
+    // good
+    function () {
+      return function () {
+        console.log(this);
+      }.bind(this);
+    }
     ```
 
   - Name your functions. This is helpful for stack traces.

From 9028379f872b175b085e78ac67e5a4c81f50c4d5 Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Mon, 20 Jun 2016 23:48:28 -0700
Subject: [PATCH 0708/1591] [eslint config] [base] [breaking] re-disable
 `import/extensions` rule

ref https://github.com/benmosher/eslint-plugin-import/issues/390
---
 packages/eslint-config-airbnb-base/rules/imports.js | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/packages/eslint-config-airbnb-base/rules/imports.js b/packages/eslint-config-airbnb-base/rules/imports.js
index 1d643b4d60..beb18b0c4d 100644
--- a/packages/eslint-config-airbnb-base/rules/imports.js
+++ b/packages/eslint-config-airbnb-base/rules/imports.js
@@ -96,7 +96,8 @@ module.exports = {
 
     // Ensure consistent use of file extension within the import path
     // https://github.com/benmosher/eslint-plugin-import/blob/master/docs/rules/extensions.md
-    'import/extensions': [2, 'never'],
+    // TODO: enable when https://github.com/benmosher/eslint-plugin-import/issues/390 is resolved
+    'import/extensions': [0, 'never'],
 
     // Enforce a convention in module import order
     // https://github.com/benmosher/eslint-plugin-import/blob/master/docs/rules/order.md

From 1f87054e4b4ddcaf5977f0d3ca2fef4707d7ba95 Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Tue, 21 Jun 2016 16:55:13 -0700
Subject: [PATCH 0709/1591] [eslint config] [base] [patch]
 `newline-per-chained-call`: bump the limit to 4.
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

Specifically, this is to allow this frequent pattern:
```js
$.ajax({
  …
}).done(() => {
  …
}).fail(() => {
  …
}).always(() => {
  …
});
```
---
 packages/eslint-config-airbnb-base/rules/style.js | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/packages/eslint-config-airbnb-base/rules/style.js b/packages/eslint-config-airbnb-base/rules/style.js
index f7a8e7f52a..c0eb28faf1 100644
--- a/packages/eslint-config-airbnb-base/rules/style.js
+++ b/packages/eslint-config-airbnb-base/rules/style.js
@@ -119,7 +119,7 @@ module.exports = {
     // enforces new line after each method call in the chain to make it
     // more readable and easy to maintain
     // http://eslint.org/docs/rules/newline-per-chained-call
-    'newline-per-chained-call': [2, { ignoreChainWithDepth: 3 }],
+    'newline-per-chained-call': [2, { ignoreChainWithDepth: 4 }],
 
     // disallow use of the Array constructor
     'no-array-constructor': 2,

From b45fdcd60f6e08f13718bc2348e8d6ea1314e91c Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Tue, 21 Jun 2016 10:08:26 -0700
Subject: [PATCH 0710/1591] [eslint config] [base] add some `import` plugin
 settings

---
 packages/eslint-config-airbnb-base/rules/imports.js | 11 ++++++++++-
 1 file changed, 10 insertions(+), 1 deletion(-)

diff --git a/packages/eslint-config-airbnb-base/rules/imports.js b/packages/eslint-config-airbnb-base/rules/imports.js
index beb18b0c4d..e6790c77ba 100644
--- a/packages/eslint-config-airbnb-base/rules/imports.js
+++ b/packages/eslint-config-airbnb-base/rules/imports.js
@@ -15,7 +15,16 @@ module.exports = {
       node: {
         extensions: ['.js', '.json']
       }
-    }
+    },
+    'import/extensions': [
+      'node_modules',
+    ],
+    'import/core-modules': [
+    ],
+    'import/ignore': [
+      'node_modules',
+      '\\.(coffee|scss|css|less|hbs|svg|json)$',
+    ],
   },
 
   rules: {

From 82629f126d0198e312d389be9104c7df1cfc30c2 Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Sat, 2 Jul 2016 08:53:21 -0700
Subject: [PATCH 0711/1591] [eslint config] [base] [Deps] update
 `eslint-plugin-import`, `tape`, `eslint-find-rules`

---
 packages/eslint-config-airbnb-base/package.json | 8 ++++----
 1 file changed, 4 insertions(+), 4 deletions(-)

diff --git a/packages/eslint-config-airbnb-base/package.json b/packages/eslint-config-airbnb-base/package.json
index fee88f1185..9366bdd660 100644
--- a/packages/eslint-config-airbnb-base/package.json
+++ b/packages/eslint-config-airbnb-base/package.json
@@ -47,13 +47,13 @@
   "devDependencies": {
     "babel-tape-runner": "^1.3.1",
     "eslint": "^2.13.1",
-    "eslint-find-rules": "^1.10.0",
-    "eslint-plugin-import": "^1.8.1",
-    "tape": "^4.5.1",
+    "eslint-find-rules": "^1.11.0",
+    "eslint-plugin-import": "^1.10.2",
+    "tape": "^4.6.0",
     "in-publish": "^2.0.0"
   },
   "peerDependencies": {
     "eslint": "^2.13.1",
-    "eslint-plugin-import": "^1.8.1"
+    "eslint-plugin-import": "^1.10.2"
   }
 }

From d282e059b1351f264638e208c1f221c6d9342279 Mon Sep 17 00:00:00 2001
From: Joe Lencioni <joe.lencioni@gmail.com>
Date: Tue, 5 Jul 2016 10:04:28 -0700
Subject: [PATCH 0712/1591] Add import/no-restricted-paths to imports rules

This rule was added by 1.10.0. I am setting it to be disabled because it
is very project-specific, so it doesn't make sense to enable it here.

https://github.com/benmosher/eslint-plugin-import/blob/master/docs/rules/no-restricted-paths.md

I found the sections of this file a little confusing, so I didn't know
where to put it. I think it would be better to simply alphabetize the
rules but I'll leave that for another time.
---
 packages/eslint-config-airbnb-base/rules/imports.js | 4 ++++
 1 file changed, 4 insertions(+)

diff --git a/packages/eslint-config-airbnb-base/rules/imports.js b/packages/eslint-config-airbnb-base/rules/imports.js
index e6790c77ba..d40b54e3ad 100644
--- a/packages/eslint-config-airbnb-base/rules/imports.js
+++ b/packages/eslint-config-airbnb-base/rules/imports.js
@@ -124,5 +124,9 @@ module.exports = {
     // Require modules with a single export to use a default export
     // https://github.com/benmosher/eslint-plugin-import/blob/master/docs/rules/prefer-default-export.md
     'import/prefer-default-export': 2,
+
+    // Restrict which files can be imported in a given folder
+    // https://github.com/benmosher/eslint-plugin-import/blob/master/docs/rules/no-restricted-paths.md
+    'import/no-restricted-paths': 0,
   },
 };

From b3a02ae982140ff0a386d87465bc85462eab4e85 Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Sat, 2 Jul 2016 08:54:05 -0700
Subject: [PATCH 0713/1591] [eslint config] [breaking] [base] update `eslint`
 to v3

 - drop support for node 4.
---
 packages/eslint-config-airbnb-base/package.json   | 7 +++++--
 packages/eslint-config-airbnb-base/rules/style.js | 2 +-
 2 files changed, 6 insertions(+), 3 deletions(-)

diff --git a/packages/eslint-config-airbnb-base/package.json b/packages/eslint-config-airbnb-base/package.json
index 9366bdd660..66e67ea62b 100644
--- a/packages/eslint-config-airbnb-base/package.json
+++ b/packages/eslint-config-airbnb-base/package.json
@@ -46,14 +46,17 @@
   "homepage": "https://github.com/airbnb/javascript",
   "devDependencies": {
     "babel-tape-runner": "^1.3.1",
-    "eslint": "^2.13.1",
+    "eslint": "^3.0.1",
     "eslint-find-rules": "^1.11.0",
     "eslint-plugin-import": "^1.10.2",
     "tape": "^4.6.0",
     "in-publish": "^2.0.0"
   },
   "peerDependencies": {
-    "eslint": "^2.13.1",
+    "eslint": "^3.0.1",
     "eslint-plugin-import": "^1.10.2"
+  },
+  "engines": {
+    "node": ">= 4"
   }
 }
diff --git a/packages/eslint-config-airbnb-base/rules/style.js b/packages/eslint-config-airbnb-base/rules/style.js
index c0eb28faf1..8edf7ed25a 100644
--- a/packages/eslint-config-airbnb-base/rules/style.js
+++ b/packages/eslint-config-airbnb-base/rules/style.js
@@ -47,7 +47,7 @@ module.exports = {
 
     // this option sets a specific tab width for your code
     // http://eslint.org/docs/rules/indent
-    indent: [2, 2, { SwitchCase: 1, VariableDeclarator: 1 }],
+    indent: [2, 2, { SwitchCase: 1, VariableDeclarator: 1, outerIIFEBody: 1 }],
 
     // specify whether double or single quotes should be used in JSX attributes
     // http://eslint.org/docs/rules/jsx-quotes

From 339861022e539de8bff054bbef9da7aac4ca6422 Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Sat, 2 Jul 2016 08:56:05 -0700
Subject: [PATCH 0714/1591] [eslint config] [base] v4.0.0

---
 .../eslint-config-airbnb-base/CHANGELOG.md    | 21 +++++++++++++++++++
 .../eslint-config-airbnb-base/package.json    |  2 +-
 2 files changed, 22 insertions(+), 1 deletion(-)

diff --git a/packages/eslint-config-airbnb-base/CHANGELOG.md b/packages/eslint-config-airbnb-base/CHANGELOG.md
index 8da4fa9b58..4588e956c0 100644
--- a/packages/eslint-config-airbnb-base/CHANGELOG.md
+++ b/packages/eslint-config-airbnb-base/CHANGELOG.md
@@ -1,3 +1,24 @@
+4.0.0 / 2016-07-02
+==================
+ - [breaking] [deps] update `eslint` to v3; drop support for < node 4
+ - [breaking] enable `rest-spread-spacing` rule
+ - [breaking] enable `no-mixed-operators` rule
+ - [breaking] enable `import` rules: `no-named-as-default`, `no-named-as-default-member`, `no-extraneous-dependencies`
+ - [breaking] enable `object-property-newline` rule
+ - [breaking] enable `no-prototype-builtins` rule
+ - [breaking] enable `no-useless-rename` rule
+ - [breaking] enable `unicode-bom` rule
+ - [breaking] Enforce proper generator star spacing (#887)
+ - [breaking] Enable imports/imports-first rule (#882)
+ - [breaking] re-order rules; put import rules in separate file (#881)
+ - [patch] `newline-per-chained-call`: bump the limit to 4
+ - [patch] `object-shorthand`: do not warn when the concise form would have a string literal as a name
+ - [patch] Loosen `prefer-const` to not warn when the variable is “read” before being assigned to
+ - [refactor] fix quoting of rule properties (#885)
+ - [refactor] `quotes`: Use object option form rather than deprecated string form.
+ - [deps] update `eslint`, `eslint-plugin-import`, `eslint-find-rules`, `tape`
+ - [tests] Only run `eslint-find-rules` on prepublish, not in tests
+
 3.0.1 / 2016-05-08
 ==================
  - [patch] re-disable `no-extra-parens` (#869, #867)
diff --git a/packages/eslint-config-airbnb-base/package.json b/packages/eslint-config-airbnb-base/package.json
index 66e67ea62b..d23040ae7d 100644
--- a/packages/eslint-config-airbnb-base/package.json
+++ b/packages/eslint-config-airbnb-base/package.json
@@ -1,6 +1,6 @@
 {
   "name": "eslint-config-airbnb-base",
-  "version": "3.0.1",
+  "version": "4.0.0",
   "description": "Airbnb's base JS ESLint config, following our styleguide",
   "main": "index.js",
   "scripts": {

From 6db1af173c9870981ec4a147018b57077a5f6c76 Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Tue, 5 Jul 2016 13:07:41 -0700
Subject: [PATCH 0715/1591] [eslint config] [*] [Tests] stop testing < node 4.

---
 .travis.yml | 3 ---
 1 file changed, 3 deletions(-)

diff --git a/.travis.yml b/.travis.yml
index 4e625829a3..773761966a 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -3,7 +3,6 @@ node_js:
   - "6"
   - "5"
   - "4"
-  - "iojs"
 env:
   - 'TEST_DIR=packages/eslint-config-airbnb'
   - 'TEST_DIR=packages/eslint-config-airbnb-base'
@@ -16,5 +15,3 @@ script:
 sudo: false
 matrix:
   fast_finish: true
-  allow_failures:
-    - node_js: "iojs"

From 7816731d4dabfcf6b01a22f70e497f0a24a14da0 Mon Sep 17 00:00:00 2001
From: Joe Lencioni <joe.lencioni@gmail.com>
Date: Tue, 5 Jul 2016 10:11:18 -0700
Subject: [PATCH 0716/1591] Allow importing devDependencies in tests

This rule seems to be giving me errors for some places we have imported
devDependencies in our tests such as tape and eslint. This is actually
okay, so we just need to configure this rule to allow devDependencies
for tests.

While I was at it, I added some whitespace to improve readability and
reduce the likelihood of merge conflicts.
---
 packages/eslint-config-airbnb/test/.eslintrc           | 6 +++++-
 packages/eslint-config-airbnb/test/test-react-order.js | 9 +++++++--
 2 files changed, 12 insertions(+), 3 deletions(-)

diff --git a/packages/eslint-config-airbnb/test/.eslintrc b/packages/eslint-config-airbnb/test/.eslintrc
index 7f79874e41..eafcdbffa6 100644
--- a/packages/eslint-config-airbnb/test/.eslintrc
+++ b/packages/eslint-config-airbnb/test/.eslintrc
@@ -3,7 +3,11 @@
     // disabled because I find it tedious to write tests while following this
     // rule
     "no-shadow": 0,
+
     // tests uses `t` for tape
-    "id-length": [2, {"min": 2, "properties": "never", "exceptions": ["t"]}]
+    "id-length": [2, {"min": 2, "properties": "never", "exceptions": ["t"]}],
+
+    // tests can import things in devDependencies
+    "import/no-extraneous-dependencies": [2, {"devDependencies": true}]
   }
 }
diff --git a/packages/eslint-config-airbnb/test/test-react-order.js b/packages/eslint-config-airbnb/test/test-react-order.js
index e3e4cfbd9e..016fef9d34 100644
--- a/packages/eslint-config-airbnb/test/test-react-order.js
+++ b/packages/eslint-config-airbnb/test/test-react-order.js
@@ -8,8 +8,13 @@ const cli = new CLIEngine({
   useEslintrc: false,
   baseConfig: eslintrc,
 
-  // This rule fails when executing on text.
-  rules: { indent: 0 },
+  rules: {
+    // This rule fails when executing on text.
+    indent: 0,
+
+    // It is okay to import devDependencies in tests.
+    'import/no-extraneous-dependencies': [2, { devDependencies: true }],
+  },
 });
 
 function lint(text) {

From 7fb8b037147b69bd8e759e93b3ca36a2916a1d97 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?C=C3=A9dric=20Malard?= <c.malard-git@valdun.net>
Date: Wed, 6 Jul 2016 17:00:42 +0200
Subject: [PATCH 0717/1591] Document for-in restricted usage

https://github.com/airbnb/javascript/issues/851#issuecomment-213834028
---
 README.md | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

diff --git a/README.md b/README.md
index 21c9c858d7..e18dc2c74f 100644
--- a/README.md
+++ b/README.md
@@ -1215,10 +1215,12 @@ Other Style Guides
 ## Iterators and Generators
 
   <a name="iterators--nope"></a><a name="11.1"></a>
-  - [11.1](#iterators--nope) Don't use iterators. Prefer JavaScript's higher-order functions like `map()` and `reduce()` instead of loops like `for-of`. eslint: [`no-iterator`](http://eslint.org/docs/rules/no-iterator.html)
+  - [11.1](#iterators--nope) Don't use iterators. Prefer JavaScript's higher-order functions instead of loops like `for-in` or `for-of`. eslint: [`no-iterator`](http://eslint.org/docs/rules/no-iterator.html) [`no-restricted-syntax`](http://eslint.org/docs/rules/no-restricted-syntax)
 
     > Why? This enforces our immutable rule. Dealing with pure functions that return values is easier to reason about than side effects.
 
+    > Use `map()` / `every()` / `filter()` / `find()` / `findIndex()` / `reduce()` / `some()` / ... to iterate over arrays, and `Object.keys()` / `Object.values()` / `Object.entries()` to produce arrays so you can iterate over objects.
+
     ```javascript
     const numbers = [1, 2, 3, 4, 5];
 

From 3ad24049740c73fcb3219a7b05ee8cd132075311 Mon Sep 17 00:00:00 2001
From: Luke Libraro <lukel99@gmail.com>
Date: Thu, 7 Jul 2016 15:45:21 -0500
Subject: [PATCH 0718/1591] Added link to Mozilla documentation on
 Function.bind

---
 README.md | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/README.md b/README.md
index e18dc2c74f..c8c2c59131 100644
--- a/README.md
+++ b/README.md
@@ -2431,7 +2431,7 @@ Other Style Guides
     ```
 
   <a name="naming--self-this"></a><a name="22.5"></a>
-  - [22.5](#naming--self-this) Don't save references to `this`. Use arrow functions or Function#bind. jscs: [`disallowNodeTypes`](http://jscs.info/rule/disallowNodeTypes)
+  - [22.5](#naming--self-this) Don't save references to `this`. Use arrow functions or [Function#bind](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/bind). jscs: [`disallowNodeTypes`](http://jscs.info/rule/disallowNodeTypes)
 
     ```javascript
     // bad

From a9bfee01cd451679062430fa11d40fa82ce9b469 Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Sat, 9 Jul 2016 09:10:28 -0700
Subject: [PATCH 0719/1591] [guide] Add link to `eol-last` rule.

Fixes #945.
---
 README.md | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/README.md b/README.md
index c8c2c59131..ee0871b496 100644
--- a/README.md
+++ b/README.md
@@ -1922,7 +1922,7 @@ Other Style Guides
     ```
 
   <a name="whitespace--newline-at-end"></a><a name="18.5"></a>
-  - [18.5](#whitespace--newline-at-end) End files with a single newline character.
+  - [18.5](#whitespace--newline-at-end) End files with a single newline character. eslint: [`eol-last`](https://github.com/eslint/eslint/blob/master/docs/rules/eol-last.md)
 
     ```javascript
     // bad

From b352ec6a4a8ff61324e9640289222a481bc7af50 Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Mon, 11 Jul 2016 23:37:51 -0700
Subject: [PATCH 0720/1591] [eslint config] [base] [fix] Prevent trailing
 commas in the legacy config.

Fixes #950.
---
 packages/eslint-config-airbnb-base/legacy.js | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

diff --git a/packages/eslint-config-airbnb-base/legacy.js b/packages/eslint-config-airbnb-base/legacy.js
index 986a6ff4e6..f3dacc4c7b 100644
--- a/packages/eslint-config-airbnb-base/legacy.js
+++ b/packages/eslint-config-airbnb-base/legacy.js
@@ -15,5 +15,7 @@ module.exports = {
   },
   ecmaFeatures: {},
   globals: {},
-  rules: {}
+  rules: {
+    'comma-dangle': [2, 'never']
+  }
 };

From 5f02a6f98f74a7ad17cc0f0103ebd8da4677d79f Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Thu, 14 Jul 2016 21:36:07 -0700
Subject: [PATCH 0721/1591] [eslint config] [base] [deps] update
 `eslint-plugin-import`

---
 packages/eslint-config-airbnb-base/package.json | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/packages/eslint-config-airbnb-base/package.json b/packages/eslint-config-airbnb-base/package.json
index d23040ae7d..2d5f7734ec 100644
--- a/packages/eslint-config-airbnb-base/package.json
+++ b/packages/eslint-config-airbnb-base/package.json
@@ -48,13 +48,13 @@
     "babel-tape-runner": "^1.3.1",
     "eslint": "^3.0.1",
     "eslint-find-rules": "^1.11.0",
-    "eslint-plugin-import": "^1.10.2",
+    "eslint-plugin-import": "^1.10.3",
     "tape": "^4.6.0",
     "in-publish": "^2.0.0"
   },
   "peerDependencies": {
     "eslint": "^3.0.1",
-    "eslint-plugin-import": "^1.10.2"
+    "eslint-plugin-import": "^1.10.3"
   },
   "engines": {
     "node": ">= 4"

From af594687be88ddcb9de1138ae0eaa56999b8f9c1 Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Thu, 14 Jul 2016 21:36:31 -0700
Subject: [PATCH 0722/1591] [eslint config] [base] v4.0.1

---
 packages/eslint-config-airbnb-base/CHANGELOG.md | 5 +++++
 packages/eslint-config-airbnb-base/package.json | 2 +-
 2 files changed, 6 insertions(+), 1 deletion(-)

diff --git a/packages/eslint-config-airbnb-base/CHANGELOG.md b/packages/eslint-config-airbnb-base/CHANGELOG.md
index 4588e956c0..b0007a748d 100644
--- a/packages/eslint-config-airbnb-base/CHANGELOG.md
+++ b/packages/eslint-config-airbnb-base/CHANGELOG.md
@@ -1,3 +1,8 @@
+4.0.1 / 2016-07-14
+==================
+ - [fix] Prevent trailing commas in the legacy config (#950)
+ - [deps] update `eslint-plugin-import`
+
 4.0.0 / 2016-07-02
 ==================
  - [breaking] [deps] update `eslint` to v3; drop support for < node 4
diff --git a/packages/eslint-config-airbnb-base/package.json b/packages/eslint-config-airbnb-base/package.json
index 2d5f7734ec..0cd2908d0c 100644
--- a/packages/eslint-config-airbnb-base/package.json
+++ b/packages/eslint-config-airbnb-base/package.json
@@ -1,6 +1,6 @@
 {
   "name": "eslint-config-airbnb-base",
-  "version": "4.0.0",
+  "version": "4.0.1",
   "description": "Airbnb's base JS ESLint config, following our styleguide",
   "main": "index.js",
   "scripts": {

From 6039804cc3b909c0bbb15069a3d469d521fb0306 Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Thu, 14 Jul 2016 22:28:38 -0700
Subject: [PATCH 0723/1591] [eslint config] [base] [fix] repair accidental
 comma-dangle change.

---
 packages/eslint-config-airbnb-base/index.js | 6 +++++-
 1 file changed, 5 insertions(+), 1 deletion(-)

diff --git a/packages/eslint-config-airbnb-base/index.js b/packages/eslint-config-airbnb-base/index.js
index a4644f159b..547e8b2ac5 100644
--- a/packages/eslint-config-airbnb-base/index.js
+++ b/packages/eslint-config-airbnb-base/index.js
@@ -1,6 +1,10 @@
 module.exports = {
   extends: [
-    './legacy',
+    './rules/best-practices',
+    './rules/errors',
+    './rules/node',
+    './rules/style',
+    './rules/variables',
     './rules/es6',
     './rules/imports',
   ].map(require.resolve),

From 325f8ba72fc74b176b4fd31be530e75b6cfb7355 Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Thu, 14 Jul 2016 22:33:27 -0700
Subject: [PATCH 0724/1591] [eslint config] [base] v4.0.2

---
 packages/eslint-config-airbnb-base/CHANGELOG.md | 6 +++++-
 packages/eslint-config-airbnb-base/package.json | 2 +-
 2 files changed, 6 insertions(+), 2 deletions(-)

diff --git a/packages/eslint-config-airbnb-base/CHANGELOG.md b/packages/eslint-config-airbnb-base/CHANGELOG.md
index b0007a748d..b2813dcbfa 100644
--- a/packages/eslint-config-airbnb-base/CHANGELOG.md
+++ b/packages/eslint-config-airbnb-base/CHANGELOG.md
@@ -1,4 +1,8 @@
-4.0.1 / 2016-07-14
+4.0.2 / 2016-07-14
+==================
+ - [fix] repair accidental comma-dangle change
+
+4.0.1 / 2016-07-14 (unpublished)
 ==================
  - [fix] Prevent trailing commas in the legacy config (#950)
  - [deps] update `eslint-plugin-import`
diff --git a/packages/eslint-config-airbnb-base/package.json b/packages/eslint-config-airbnb-base/package.json
index 0cd2908d0c..0270943443 100644
--- a/packages/eslint-config-airbnb-base/package.json
+++ b/packages/eslint-config-airbnb-base/package.json
@@ -1,6 +1,6 @@
 {
   "name": "eslint-config-airbnb-base",
-  "version": "4.0.1",
+  "version": "4.0.2",
   "description": "Airbnb's base JS ESLint config, following our styleguide",
   "main": "index.js",
   "scripts": {

From abcc0c681e14cce17f1540e768180f94fe27d1a8 Mon Sep 17 00:00:00 2001
From: Kenny Tran <kennyt@mesosphere.io>
Date: Fri, 15 Jul 2016 11:14:22 -0700
Subject: [PATCH 0725/1591] Capitalize all comments in react.js

---
 packages/eslint-config-airbnb/rules/react.js | 10 +++++-----
 1 file changed, 5 insertions(+), 5 deletions(-)

diff --git a/packages/eslint-config-airbnb/rules/react.js b/packages/eslint-config-airbnb/rules/react.js
index 26bf60488f..57884823c6 100644
--- a/packages/eslint-config-airbnb/rules/react.js
+++ b/packages/eslint-config-airbnb/rules/react.js
@@ -14,7 +14,7 @@ module.exports = {
   // View link below for react rules documentation
   // https://github.com/yannickcr/eslint-plugin-react#list-of-supported-rules
   rules: {
-    // specify whether double or single quotes should be used in JSX attributes
+    // Specify whether double or single quotes should be used in JSX attributes
     // http://eslint.org/docs/rules/jsx-quotes
     'jsx-quotes': [2, 'prefer-double'],
 
@@ -91,7 +91,7 @@ module.exports = {
       callbacksLast: false,
     }],
 
-    // deprecated in favor of react/jsx-sort-props
+    // Deprecated in favor of react/jsx-sort-props
     'react/jsx-sort-prop-types': 0,
 
     // Enforce props alphabetical sorting
@@ -207,15 +207,15 @@ module.exports = {
     // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/jsx-first-prop-new-line.md
     'react/jsx-first-prop-new-line': [2, 'multiline'],
 
-    // enforce spacing around jsx equals signs
+    // Enforce spacing around jsx equals signs
     // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/jsx-equals-spacing.md
     'react/jsx-equals-spacing': [2, 'never'],
 
-    // enforce JSX indentation
+    // Enforce JSX indentation
     // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/jsx-indent.md
     'react/jsx-indent': [2, 2],
 
-    // disallow target="_blank" on links
+    // Disallow target="_blank" on links
     // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/jsx-no-target-blank.md
     // TODO: enable
     'react/jsx-no-target-blank': 0

From 97da7b65c6332b52fa00ca9925c81addac584dcb Mon Sep 17 00:00:00 2001
From: Your NameRonaldo <ronal2do@gmail.com>
Date: Mon, 18 Jul 2016 18:17:59 -0300
Subject: [PATCH 0726/1591] Airbnb React/JSX Style Guide translation for PT-br

---
 react/README.md | 1 +
 1 file changed, 1 insertion(+)

diff --git a/react/README.md b/react/README.md
index e0726c3245..a0493b9e1c 100644
--- a/react/README.md
+++ b/react/README.md
@@ -549,5 +549,6 @@
   - ![cn](https://raw.githubusercontent.com/gosquared/flags/master/flags/flags/shiny/24/China.png) **Chinese (Simplified)**: [JasonBoy/javascript](https://github.com/JasonBoy/javascript/tree/master/react)
   - ![pl](https://raw.githubusercontent.com/gosquared/flags/master/flags/flags/shiny/24/Poland.png) **Polish**: [pietraszekl/javascript](https://github.com/pietraszekl/javascript/tree/master/react)
   - ![kr](https://raw.githubusercontent.com/gosquared/flags/master/flags/flags/shiny/24/South-Korea.png) **Korean**: [apple77y/javascript](https://github.com/apple77y/javascript/tree/master/react)
+  - ![Br](https://raw.githubusercontent.com/gosquared/flags/master/flags/flags/shiny/24/Brazil.png) **Brazilian**: [ronal2do/javascript](https://github.com/ronal2do/javascript/tree/master/react)
 
 **[⬆ back to top](#table-of-contents)**

From 723e12a87daf45f2a6f58e0fad04576319d80919 Mon Sep 17 00:00:00 2001
From: Your NameRonaldo <ronal2do@gmail.com>
Date: Mon, 18 Jul 2016 18:20:32 -0300
Subject: [PATCH 0727/1591] Airbnb React/JSX Style Guide translation for PT-BR

---
 react/README.md | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/react/README.md b/react/README.md
index a0493b9e1c..e32aa39f27 100644
--- a/react/README.md
+++ b/react/README.md
@@ -549,6 +549,6 @@
   - ![cn](https://raw.githubusercontent.com/gosquared/flags/master/flags/flags/shiny/24/China.png) **Chinese (Simplified)**: [JasonBoy/javascript](https://github.com/JasonBoy/javascript/tree/master/react)
   - ![pl](https://raw.githubusercontent.com/gosquared/flags/master/flags/flags/shiny/24/Poland.png) **Polish**: [pietraszekl/javascript](https://github.com/pietraszekl/javascript/tree/master/react)
   - ![kr](https://raw.githubusercontent.com/gosquared/flags/master/flags/flags/shiny/24/South-Korea.png) **Korean**: [apple77y/javascript](https://github.com/apple77y/javascript/tree/master/react)
-  - ![Br](https://raw.githubusercontent.com/gosquared/flags/master/flags/flags/shiny/24/Brazil.png) **Brazilian**: [ronal2do/javascript](https://github.com/ronal2do/javascript/tree/master/react)
+  - ![Br](https://raw.githubusercontent.com/gosquared/flags/master/flags/flags/shiny/24/Brazil.png) **Brazilian**: [ronal2do/javascript](https://github.com/ronal2do/airbnb-react-styleguide)
 
 **[⬆ back to top](#table-of-contents)**

From 2504e0f85ca1ea2ec1c7489a29a49a1e4fbab7a6 Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Thu, 14 Jul 2016 21:40:05 -0700
Subject: [PATCH 0728/1591] [eslint config] [base] Fleshing out defaults.

---
 packages/eslint-config-airbnb-base/rules/style.js | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/packages/eslint-config-airbnb-base/rules/style.js b/packages/eslint-config-airbnb-base/rules/style.js
index 8edf7ed25a..6afbc53070 100644
--- a/packages/eslint-config-airbnb-base/rules/style.js
+++ b/packages/eslint-config-airbnb-base/rules/style.js
@@ -51,7 +51,7 @@ module.exports = {
 
     // specify whether double or single quotes should be used in JSX attributes
     // http://eslint.org/docs/rules/jsx-quotes
-    'jsx-quotes': 0,
+    'jsx-quotes': [0, 'prefer-double'],
 
     // enforces spacing between keys and values in object literal properties
     'key-spacing': [2, { beforeColon: false, afterColon: true }],

From 762177eb3b3efc2b22078451ae0a726a58021c7a Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Mon, 18 Jul 2016 14:27:26 -0700
Subject: [PATCH 0729/1591] [eslint config] [base] [deps] update `eslint`,
 `eslint-find-rules`, `eslint-plugin-import`

---
 packages/eslint-config-airbnb-base/package.json | 10 +++++-----
 1 file changed, 5 insertions(+), 5 deletions(-)

diff --git a/packages/eslint-config-airbnb-base/package.json b/packages/eslint-config-airbnb-base/package.json
index 0270943443..0ac2697be6 100644
--- a/packages/eslint-config-airbnb-base/package.json
+++ b/packages/eslint-config-airbnb-base/package.json
@@ -46,15 +46,15 @@
   "homepage": "https://github.com/airbnb/javascript",
   "devDependencies": {
     "babel-tape-runner": "^1.3.1",
-    "eslint": "^3.0.1",
-    "eslint-find-rules": "^1.11.0",
-    "eslint-plugin-import": "^1.10.3",
+    "eslint": "^3.1.1",
+    "eslint-find-rules": "^1.11.1",
+    "eslint-plugin-import": "^1.11.0",
     "tape": "^4.6.0",
     "in-publish": "^2.0.0"
   },
   "peerDependencies": {
-    "eslint": "^3.0.1",
-    "eslint-plugin-import": "^1.10.3"
+    "eslint": "^3.1.1",
+    "eslint-plugin-import": "^1.11.0"
   },
   "engines": {
     "node": ">= 4"

From ca9c322790d88a2500c60093f404ab06c428a93e Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Thu, 14 Jul 2016 22:00:07 -0700
Subject: [PATCH 0730/1591] [eslint config] [base] [breaking] enable overlooked
 rules:

 - `linebreak-style`
 - `new-parens`
 - `no-continue`
 - `no-lonely-if`
 - `operator-assignment`
 - `space-unary-ops`
 - `dot-location`
 - `no-extra-boolean-cast`
 - `no-this-before-super`
 - `require-yield`
 - `no-path-concat`
 - `no-label-var`
---
 .../rules/best-practices.js                   | 16 +++++++++---
 .../eslint-config-airbnb-base/rules/errors.js |  5 +++-
 .../eslint-config-airbnb-base/rules/es6.js    |  9 +++++--
 .../eslint-config-airbnb-base/rules/node.js   |  5 ++--
 .../eslint-config-airbnb-base/rules/style.js  | 25 ++++++++++++++-----
 .../rules/variables.js                        |  3 ++-
 6 files changed, 48 insertions(+), 15 deletions(-)

diff --git a/packages/eslint-config-airbnb-base/rules/best-practices.js b/packages/eslint-config-airbnb-base/rules/best-practices.js
index 3eeead448b..2f2f2a11fb 100644
--- a/packages/eslint-config-airbnb-base/rules/best-practices.js
+++ b/packages/eslint-config-airbnb-base/rules/best-practices.js
@@ -26,7 +26,8 @@ module.exports = {
     'dot-notation': [2, { allowKeywords: true }],
 
     // enforces consistent newlines before or after dots
-    'dot-location': 0,
+    // http://eslint.org/docs/rules/dot-location
+    'dot-location': [2, 'property'],
 
     // require the use of === and !==
     // http://eslint.org/docs/rules/eqeqeq
@@ -46,6 +47,7 @@ module.exports = {
     'no-case-declarations': 2,
 
     // disallow division operators explicitly at beginning of regular expression
+    // http://eslint.org/docs/rules/no-div-regex
     'no-div-regex': 0,
 
     // disallow else after a return in an if
@@ -87,8 +89,14 @@ module.exports = {
     // disallow the use of leading or trailing decimal points in numeric literals
     'no-floating-decimal': 2,
 
-    // disallow the type conversions with shorter notations
-    'no-implicit-coercion': 0,
+    // disallow implicit type conversions
+    // http://eslint.org/docs/rules/no-implicit-coercion
+    'no-implicit-coercion': [0, {
+      boolean: false,
+      number: true,
+      string: true,
+      allow: [],
+    }],
 
     // disallow var and named functions in global scope
     // http://eslint.org/docs/rules/no-implicit-globals
@@ -199,6 +207,8 @@ module.exports = {
     'no-useless-escape': 2,
 
     // disallow use of void operator
+    // http://eslint.org/docs/rules/no-void
+    // TODO: enable
     'no-void': 0,
 
     // disallow usage of configurable warning terms in comments: e.g. todo
diff --git a/packages/eslint-config-airbnb-base/rules/errors.js b/packages/eslint-config-airbnb-base/rules/errors.js
index 9233f9f653..a9df2bc825 100644
--- a/packages/eslint-config-airbnb-base/rules/errors.js
+++ b/packages/eslint-config-airbnb-base/rules/errors.js
@@ -37,7 +37,8 @@ module.exports = {
     'no-ex-assign': 2,
 
     // disallow double-negation boolean casts in a boolean context
-    'no-extra-boolean-cast': 0,
+    // http://eslint.org/docs/rules/no-extra-boolean-cast
+    'no-extra-boolean-cast': 2,
 
     // disallow unnecessary parentheses
     // http://eslint.org/docs/rules/no-extra-parens
@@ -79,6 +80,8 @@ module.exports = {
     'no-sparse-arrays': 2,
 
     // Avoid code that looks like two expressions but is actually one
+    // http://eslint.org/docs/rules/no-unexpected-multiline
+    // TODO: enable?
     'no-unexpected-multiline': 0,
 
     // disallow unreachable statements after a return, throw, continue, or break statement
diff --git a/packages/eslint-config-airbnb-base/rules/es6.js b/packages/eslint-config-airbnb-base/rules/es6.js
index 3ace792fd9..72d8270134 100644
--- a/packages/eslint-config-airbnb-base/rules/es6.js
+++ b/packages/eslint-config-airbnb-base/rules/es6.js
@@ -60,7 +60,8 @@ module.exports = {
     'no-restricted-imports': 0,
 
     // disallow to use this/super before super() calling in constructors.
-    'no-this-before-super': 0,
+    // http://eslint.org/docs/rules/no-this-before-super
+    'no-this-before-super': 2,
 
     // disallow useless computed property keys
     // http://eslint.org/docs/rules/no-useless-computed-key
@@ -101,6 +102,8 @@ module.exports = {
     }],
 
     // suggest using Reflect methods where applicable
+    // http://eslint.org/docs/rules/prefer-reflect
+    // TODO: enable
     'prefer-reflect': 0,
 
     // use rest parameters instead of arguments
@@ -108,6 +111,7 @@ module.exports = {
     'prefer-rest-params': 2,
 
     // suggest using the spread operator instead of .apply()
+    // http://eslint.org/docs/rules/prefer-spread
     'prefer-spread': 0,
 
     // suggest using template literals instead of string concatenation
@@ -115,7 +119,8 @@ module.exports = {
     'prefer-template': 2,
 
     // disallow generator functions that do not have yield
-    'require-yield': 0,
+    // http://eslint.org/docs/rules/require-yield
+    'require-yield': 2,
 
     // enforce spacing between object rest-spread
     // http://eslint.org/docs/rules/rest-spread-spacing
diff --git a/packages/eslint-config-airbnb-base/rules/node.js b/packages/eslint-config-airbnb-base/rules/node.js
index 3297f3d935..3029bccc2f 100644
--- a/packages/eslint-config-airbnb-base/rules/node.js
+++ b/packages/eslint-config-airbnb-base/rules/node.js
@@ -21,7 +21,8 @@ module.exports = {
     'no-new-require': 0,
 
     // disallow string concatenation with __dirname and __filename
-    'no-path-concat': 0,
+    // http://eslint.org/docs/rules/no-path-concat
+    'no-path-concat': 2,
 
     // disallow use of process.env
     'no-process-env': 0,
@@ -33,6 +34,6 @@ module.exports = {
     'no-restricted-modules': 0,
 
     // disallow use of synchronous methods (off by default)
-    'no-sync': 0
+    'no-sync': 0,
   }
 };
diff --git a/packages/eslint-config-airbnb-base/rules/style.js b/packages/eslint-config-airbnb-base/rules/style.js
index 6afbc53070..97afa41628 100644
--- a/packages/eslint-config-airbnb-base/rules/style.js
+++ b/packages/eslint-config-airbnb-base/rules/style.js
@@ -68,7 +68,8 @@ module.exports = {
     }],
 
     // disallow mixed 'LF' and 'CRLF' as linebreaks
-    'linebreak-style': 0,
+    // http://eslint.org/docs/rules/linebreak-style
+    'linebreak-style': [2, 'unix'],
 
     // enforces empty lines around comments
     'lines-around-comment': 0,
@@ -108,7 +109,8 @@ module.exports = {
     'new-cap': [2, { newIsCap: true }],
 
     // disallow the omission of parentheses when invoking a constructor with no arguments
-    'new-parens': 0,
+    // http://eslint.org/docs/rules/new-parens
+    'new-parens': 2,
 
     // allow/disallow an empty newline after var statement
     'newline-after-var': 0,
@@ -125,16 +127,20 @@ module.exports = {
     'no-array-constructor': 2,
 
     // disallow use of bitwise operators
+    // http://eslint.org/docs/rules/no-bitwise
+    // TODO: enable
     'no-bitwise': 0,
 
     // disallow use of the continue statement
-    'no-continue': 0,
+    // http://eslint.org/docs/rules/no-continue
+    'no-continue': 2,
 
     // disallow comments inline after code
     'no-inline-comments': 0,
 
     // disallow if as the only statement in an else block
-    'no-lonely-if': 0,
+    // http://eslint.org/docs/rules/no-lonely-if
+    'no-lonely-if': 2,
 
     // disallow un-paren'd mixes of different operators
     // http://eslint.org/docs/rules/no-mixed-operators
@@ -224,7 +230,8 @@ module.exports = {
     'one-var-declaration-per-line': [2, 'always'],
 
     // require assignment operator shorthand where possible or prohibit it entirely
-    'operator-assignment': 0,
+    // http://eslint.org/docs/rules/operator-assignment
+    'operator-assignment': [2, 'always'],
 
     // enforce operators to be placed before or after line breaks
     'operator-linebreak': 0,
@@ -266,7 +273,13 @@ module.exports = {
     'space-infix-ops': 2,
 
     // Require or disallow spaces before/after unary operators
-    'space-unary-ops': 0,
+    // http://eslint.org/docs/rules/space-unary-ops
+    'space-unary-ops': [2, {
+      words: true,
+      nonwords: false,
+      overrides: {
+      },
+    }],
 
     // require or disallow a space immediately following the // or /* in a comment
     'spaced-comment': [2, 'always', {
diff --git a/packages/eslint-config-airbnb-base/rules/variables.js b/packages/eslint-config-airbnb-base/rules/variables.js
index 6c767da3b9..369ea5dc2b 100644
--- a/packages/eslint-config-airbnb-base/rules/variables.js
+++ b/packages/eslint-config-airbnb-base/rules/variables.js
@@ -10,7 +10,8 @@ module.exports = {
     'no-delete-var': 2,
 
     // disallow labels that share a name with a variable
-    'no-label-var': 0,
+    // http://eslint.org/docs/rules/no-label-var
+    'no-label-var': 2,
 
     // disallow specific globals
     'no-restricted-globals': 0,

From 623dc44bb9990dd90c0540be8309c7b5a3f6217a Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Tue, 19 Jul 2016 10:31:40 -0700
Subject: [PATCH 0731/1591] [eslint config] [*] [docs] update the peer dep
 install command to dynamically look up the right version numbers when
 installing peer deps.

Fixes #956.

This command would be simpler if https://github.com/npm/npm/issues/11213 is ever implemented.
---
 packages/eslint-config-airbnb-base/README.md | 2 +-
 packages/eslint-config-airbnb/README.md      | 2 +-
 2 files changed, 2 insertions(+), 2 deletions(-)

diff --git a/packages/eslint-config-airbnb-base/README.md b/packages/eslint-config-airbnb-base/README.md
index 2b7e54297f..18d44e2512 100644
--- a/packages/eslint-config-airbnb-base/README.md
+++ b/packages/eslint-config-airbnb-base/README.md
@@ -12,7 +12,7 @@ We export two ESLint configurations for your usage.
 
 Our default export contains all of our ESLint rules, including ECMAScript 6+. It requires `eslint` and `eslint-plugin-import`.
 
-1. `npm install --save-dev eslint-config-airbnb-base eslint-plugin-import eslint`
+1. `PKG=eslint-config-airbnb-base npm info "$PKG" peerDependencies --json | command sed 's/[\{\},]//g ; s/: /@/g' | xargs npm install "$PKG"` (which produces and runs a command like `npm install --save-dev eslint-config-airbnb-base eslint@^3.0.1 eslint-plugin-import@^1.10.3` but with whatever the proper version numbers are)
 2. add `"extends": "airbnb-base"` to your .eslintrc
 
 ### eslint-config-airbnb-base/legacy
diff --git a/packages/eslint-config-airbnb/README.md b/packages/eslint-config-airbnb/README.md
index 222ef16790..b40d8a7ec1 100644
--- a/packages/eslint-config-airbnb/README.md
+++ b/packages/eslint-config-airbnb/README.md
@@ -12,7 +12,7 @@ We export three ESLint configurations for your usage.
 
 Our default export contains all of our ESLint rules, including ECMAScript 6+ and React. It requires `eslint`, `eslint-plugin-import`, `eslint-plugin-react`, and `eslint-plugin-jsx-a11y`.
 
-1. `npm install --save-dev eslint-config-airbnb eslint-plugin-import eslint-plugin-react eslint-plugin-jsx-a11y eslint`
+1. `PKG=eslint-config-airbnb npm info "$PKG" peerDependencies --json | command sed 's/[\{\},]//g ; s/: /@/g' | xargs npm install "$PKG"` (which produces and runs a command like `npm install eslint-config-airbnb eslint@^2.9.0 eslint-plugin-jsx-a11y@^1.2.0 eslint-plugin-import@^1.7.0 eslint-plugin-react@^5.0.1` but with whatever the proper version numbers are)
 2. add `"extends": "airbnb"` to your .eslintrc
 
 ### eslint-config-airbnb/base

From 3594ee94aca2dd247cdfa6e7e684a0fd58d965f0 Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Tue, 19 Jul 2016 10:33:29 -0700
Subject: [PATCH 0732/1591] =?UTF-8?q?[eslint=20config]=20[*]=20[docs]=20fo?=
 =?UTF-8?q?rgot=20=E2=80=9C=E2=80=94save-dev=E2=80=9D=20in=20623dc44bb9990?=
 =?UTF-8?q?dd90c0540be8309c7b5a3f6217a?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 packages/eslint-config-airbnb-base/README.md | 4 ++--
 packages/eslint-config-airbnb/README.md      | 2 +-
 2 files changed, 3 insertions(+), 3 deletions(-)

diff --git a/packages/eslint-config-airbnb-base/README.md b/packages/eslint-config-airbnb-base/README.md
index 18d44e2512..e0d8bc091a 100644
--- a/packages/eslint-config-airbnb-base/README.md
+++ b/packages/eslint-config-airbnb-base/README.md
@@ -12,14 +12,14 @@ We export two ESLint configurations for your usage.
 
 Our default export contains all of our ESLint rules, including ECMAScript 6+. It requires `eslint` and `eslint-plugin-import`.
 
-1. `PKG=eslint-config-airbnb-base npm info "$PKG" peerDependencies --json | command sed 's/[\{\},]//g ; s/: /@/g' | xargs npm install "$PKG"` (which produces and runs a command like `npm install --save-dev eslint-config-airbnb-base eslint@^3.0.1 eslint-plugin-import@^1.10.3` but with whatever the proper version numbers are)
+1. `PKG=eslint-config-airbnb-base npm info "$PKG" peerDependencies --json | command sed 's/[\{\},]//g ; s/: /@/g' | xargs npm install --save-dev "$PKG"` (which produces and runs a command like `npm install --save-dev eslint-config-airbnb-base eslint@^3.0.1 eslint-plugin-import@^1.10.3` but with whatever the proper version numbers are)
 2. add `"extends": "airbnb-base"` to your .eslintrc
 
 ### eslint-config-airbnb-base/legacy
 
 Lints ES5 and below. Requires `eslint` and `eslint-plugin-import`.
 
-1. `npm install --save-dev eslint-config-airbnb-base eslint-plugin-import eslint`
+1. `PKG=eslint-config-airbnb-base npm info "$PKG" peerDependencies --json | command sed 's/[\{\},]//g ; s/: /@/g' | xargs npm install --save-dev "$PKG"` (which produces and runs a command like `npm install --save-dev eslint-config-airbnb-base eslint@^3.0.1 eslint-plugin-import@^1.10.3` but with whatever the proper version numbers are)
 2. add `"extends": "airbnb-base/legacy"` to your .eslintrc
 
 See [Airbnb's overarching ESLint config](https://npmjs.com/eslint-config-airbnb), [Airbnb's Javascript styleguide](https://github.com/airbnb/javascript), and the [ESlint config docs](http://eslint.org/docs/user-guide/configuring#extending-configuration-files) for more information.
diff --git a/packages/eslint-config-airbnb/README.md b/packages/eslint-config-airbnb/README.md
index b40d8a7ec1..afcf902135 100644
--- a/packages/eslint-config-airbnb/README.md
+++ b/packages/eslint-config-airbnb/README.md
@@ -12,7 +12,7 @@ We export three ESLint configurations for your usage.
 
 Our default export contains all of our ESLint rules, including ECMAScript 6+ and React. It requires `eslint`, `eslint-plugin-import`, `eslint-plugin-react`, and `eslint-plugin-jsx-a11y`.
 
-1. `PKG=eslint-config-airbnb npm info "$PKG" peerDependencies --json | command sed 's/[\{\},]//g ; s/: /@/g' | xargs npm install "$PKG"` (which produces and runs a command like `npm install eslint-config-airbnb eslint@^2.9.0 eslint-plugin-jsx-a11y@^1.2.0 eslint-plugin-import@^1.7.0 eslint-plugin-react@^5.0.1` but with whatever the proper version numbers are)
+1. `PKG=eslint-config-airbnb npm info "$PKG" peerDependencies --json | command sed 's/[\{\},]//g ; s/: /@/g' | xargs npm install --save-dev "$PKG"` (which produces and runs a command like `npm install --save-dev eslint-config-airbnb eslint@^2.9.0 eslint-plugin-jsx-a11y@^1.2.0 eslint-plugin-import@^1.7.0 eslint-plugin-react@^5.0.1` but with whatever the proper version numbers are)
 2. add `"extends": "airbnb"` to your .eslintrc
 
 ### eslint-config-airbnb/base

From df8627d72fa8b8093ca5d5e909411c9d5ac466ae Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Tue, 19 Jul 2016 13:57:42 -0700
Subject: [PATCH 0733/1591] [eslint config] [*] [tests] fix prepublish scripts.

---
 packages/eslint-config-airbnb-base/package.json | 2 +-
 packages/eslint-config-airbnb/package.json      | 4 ++--
 2 files changed, 3 insertions(+), 3 deletions(-)

diff --git a/packages/eslint-config-airbnb-base/package.json b/packages/eslint-config-airbnb-base/package.json
index 0ac2697be6..276b685fdc 100644
--- a/packages/eslint-config-airbnb-base/package.json
+++ b/packages/eslint-config-airbnb-base/package.json
@@ -6,7 +6,7 @@
   "scripts": {
     "lint": "eslint .",
     "tests-only": "babel-tape-runner ./test/test-*.js",
-    "prepublish": "not-in-install && (eslint-find-rules --unused && npm test) || in-install",
+    "prepublish": "not-in-publish || (eslint-find-rules --unused && npm test)",
     "pretest": "npm run --silent lint",
     "test": "npm run --silent tests-only",
     "travis": "npm run --silent test"
diff --git a/packages/eslint-config-airbnb/package.json b/packages/eslint-config-airbnb/package.json
index 37c7002f20..c23e99cbfd 100644
--- a/packages/eslint-config-airbnb/package.json
+++ b/packages/eslint-config-airbnb/package.json
@@ -6,10 +6,10 @@
   "scripts": {
     "lint": "eslint .",
     "tests-only": "babel-tape-runner ./test/test-*.js",
-    "prepublish": "not-in-install && (eslint-find-rules --unused && npm test) || in-install",
+    "prepublish": "not-in-publish || (eslint-find-rules --unused && npm test)",
     "pretest": "npm run --silent lint",
     "test": "npm run --silent tests-only",
-    "travis": "cd ../eslint-config-airbnb-base && npm link && cd - && npm link eslint-config-airbnb-base && npm run --silent test ; npm unlink eslint-config-airbnb-base >/dev/null &"
+    "travis": "cd ../eslint-config-airbnb-base && npm install && npm link && cd - && npm link eslint-config-airbnb-base && npm run --silent test ; npm unlink eslint-config-airbnb-base >/dev/null &"
   },
   "repository": {
     "type": "git",

From 4921e03a7b0fa904a569be9f5ea94dc526d21bdb Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Thu, 14 Jul 2016 21:27:37 -0700
Subject: [PATCH 0734/1591] [eslint config] [base] [breaking] enable
 `import/newline-after-import`

Per https://github.com/benmosher/eslint-plugin-import/issues/386 / https://github.com/benmosher/eslint-plugin-import/issues/441
---
 packages/eslint-config-airbnb-base/package.json     | 4 ++--
 packages/eslint-config-airbnb-base/rules/imports.js | 3 +--
 2 files changed, 3 insertions(+), 4 deletions(-)

diff --git a/packages/eslint-config-airbnb-base/package.json b/packages/eslint-config-airbnb-base/package.json
index 276b685fdc..b1feb145f9 100644
--- a/packages/eslint-config-airbnb-base/package.json
+++ b/packages/eslint-config-airbnb-base/package.json
@@ -48,13 +48,13 @@
     "babel-tape-runner": "^1.3.1",
     "eslint": "^3.1.1",
     "eslint-find-rules": "^1.11.1",
-    "eslint-plugin-import": "^1.11.0",
+    "eslint-plugin-import": "^1.11.1",
     "tape": "^4.6.0",
     "in-publish": "^2.0.0"
   },
   "peerDependencies": {
     "eslint": "^3.1.1",
-    "eslint-plugin-import": "^1.11.0"
+    "eslint-plugin-import": "^1.11.1"
   },
   "engines": {
     "node": ">= 4"
diff --git a/packages/eslint-config-airbnb-base/rules/imports.js b/packages/eslint-config-airbnb-base/rules/imports.js
index d40b54e3ad..99c848cc7b 100644
--- a/packages/eslint-config-airbnb-base/rules/imports.js
+++ b/packages/eslint-config-airbnb-base/rules/imports.js
@@ -118,8 +118,7 @@ module.exports = {
 
     // Require a newline after the last import/require in a group
     // https://github.com/benmosher/eslint-plugin-import/blob/master/docs/rules/newline-after-import.md
-    // TODO: enable when https://github.com/benmosher/eslint-plugin-import/issues/386 is resolved
-    'import/newline-after-import': 0,
+    'import/newline-after-import': 2,
 
     // Require modules with a single export to use a default export
     // https://github.com/benmosher/eslint-plugin-import/blob/master/docs/rules/prefer-default-export.md

From 9d598c3563819a42f23f2ad19dd23a2f6e515a05 Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Fri, 22 Jul 2016 15:40:00 -0700
Subject: [PATCH 0735/1591] [eslint config] [base] [breaking] enable more
 overlooked rules:

 - `no-void`
 - `constructor-super`
 - `prefer-spread`
 - `no-new-require`
 - `no-undef-init`
---
 .../eslint-config-airbnb-base/rules/best-practices.js  |  3 +--
 packages/eslint-config-airbnb-base/rules/es6.js        | 10 +++++++---
 packages/eslint-config-airbnb-base/rules/imports.js    |  1 +
 packages/eslint-config-airbnb-base/rules/node.js       |  2 +-
 packages/eslint-config-airbnb-base/rules/variables.js  |  3 ++-
 5 files changed, 12 insertions(+), 7 deletions(-)

diff --git a/packages/eslint-config-airbnb-base/rules/best-practices.js b/packages/eslint-config-airbnb-base/rules/best-practices.js
index 2f2f2a11fb..9ad830b7f5 100644
--- a/packages/eslint-config-airbnb-base/rules/best-practices.js
+++ b/packages/eslint-config-airbnb-base/rules/best-practices.js
@@ -208,8 +208,7 @@ module.exports = {
 
     // disallow use of void operator
     // http://eslint.org/docs/rules/no-void
-    // TODO: enable
-    'no-void': 0,
+    'no-void': 2,
 
     // disallow usage of configurable warning terms in comments: e.g. todo
     'no-warning-comments': [0, { terms: ['todo', 'fixme', 'xxx'], location: 'start' }],
diff --git a/packages/eslint-config-airbnb-base/rules/es6.js b/packages/eslint-config-airbnb-base/rules/es6.js
index 72d8270134..a7754b6461 100644
--- a/packages/eslint-config-airbnb-base/rules/es6.js
+++ b/packages/eslint-config-airbnb-base/rules/es6.js
@@ -24,7 +24,7 @@ module.exports = {
     'arrow-spacing': [2, { before: true, after: true }],
 
     // verify super() callings in constructors
-    'constructor-super': 0,
+    'constructor-super': 2,
 
     // enforce the spacing around the * in generator functions
     // http://eslint.org/docs/rules/generator-star-spacing
@@ -112,7 +112,7 @@ module.exports = {
 
     // suggest using the spread operator instead of .apply()
     // http://eslint.org/docs/rules/prefer-spread
-    'prefer-spread': 0,
+    'prefer-spread': 2,
 
     // suggest using template literals instead of string concatenation
     // http://eslint.org/docs/rules/prefer-template
@@ -128,7 +128,11 @@ module.exports = {
 
     // import sorting
     // http://eslint.org/docs/rules/sort-imports
-    'sort-imports': 0,
+    'sort-imports': [0, {
+      ignoreCase: false,
+      ignoreMemberSort: false,
+      memberSyntaxSortOrder: ['none', 'all', 'multiple', 'single'],
+    }],
 
     // enforce usage of spacing in template strings
     // http://eslint.org/docs/rules/template-curly-spacing
diff --git a/packages/eslint-config-airbnb-base/rules/imports.js b/packages/eslint-config-airbnb-base/rules/imports.js
index 99c848cc7b..eb0610760f 100644
--- a/packages/eslint-config-airbnb-base/rules/imports.js
+++ b/packages/eslint-config-airbnb-base/rules/imports.js
@@ -86,6 +86,7 @@ module.exports = {
 
     // No Node.js builtin modules
     // https://github.com/benmosher/eslint-plugin-import/blob/master/docs/rules/no-nodejs-modules.md
+    // TODO: enable?
     'import/no-nodejs-modules': 0,
 
     // Style guide:
diff --git a/packages/eslint-config-airbnb-base/rules/node.js b/packages/eslint-config-airbnb-base/rules/node.js
index 3029bccc2f..cbd8fc22e6 100644
--- a/packages/eslint-config-airbnb-base/rules/node.js
+++ b/packages/eslint-config-airbnb-base/rules/node.js
@@ -18,7 +18,7 @@ module.exports = {
     'no-mixed-requires': [0, false],
 
     // disallow use of new operator with the require function
-    'no-new-require': 0,
+    'no-new-require': 2,
 
     // disallow string concatenation with __dirname and __filename
     // http://eslint.org/docs/rules/no-path-concat
diff --git a/packages/eslint-config-airbnb-base/rules/variables.js b/packages/eslint-config-airbnb-base/rules/variables.js
index 369ea5dc2b..3abce6f8ec 100644
--- a/packages/eslint-config-airbnb-base/rules/variables.js
+++ b/packages/eslint-config-airbnb-base/rules/variables.js
@@ -26,9 +26,10 @@ module.exports = {
     'no-undef': 2,
 
     // disallow use of undefined when initializing variables
-    'no-undef-init': 0,
+    'no-undef-init': 2,
 
     // disallow use of undefined variable
+    // TODO: enable?
     'no-undefined': 0,
 
     // disallow declaration of variables that are not used in the code

From 892128366a387023eb5462f0cd4c1eab3593ad3d Mon Sep 17 00:00:00 2001
From: Doug Cole <idugcoal@gmail.com>
Date: Sat, 23 Jul 2016 11:53:45 -0700
Subject: [PATCH 0736/1591] change 'conjunctions' to 'contractions'

---
 react/README.md | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/react/README.md b/react/README.md
index e32aa39f27..04ddda9f8f 100644
--- a/react/README.md
+++ b/react/README.md
@@ -149,7 +149,7 @@
 
   - Always use double quotes (`"`) for JSX attributes, but single quotes for all other JS. eslint: [`jsx-quotes`](http://eslint.org/docs/rules/jsx-quotes)
 
-  > Why? JSX attributes [can't contain escaped quotes](http://eslint.org/docs/rules/jsx-quotes), so double quotes make conjunctions like `"don't"` easier to type.
+  > Why? JSX attributes [can't contain escaped quotes](http://eslint.org/docs/rules/jsx-quotes), so double quotes make contractions like `"don't"` easier to type.
   > Regular HTML attributes also typically use double quotes instead of single, so JSX attributes mirror this convention.
 
     ```jsx

From bbfb9600dcbe207ad0694dc886622c02a2ed7ac5 Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Sat, 23 Jul 2016 21:28:04 -0700
Subject: [PATCH 0737/1591] [eslint config] [*] [deps] update
 `babel-tape-runner`, add `babel-preset-airbnb`

---
 packages/eslint-config-airbnb-base/.babelrc     | 3 +++
 packages/eslint-config-airbnb-base/package.json | 7 ++++---
 packages/eslint-config-airbnb/.babelrc          | 3 +++
 packages/eslint-config-airbnb/package.json      | 7 ++++---
 4 files changed, 14 insertions(+), 6 deletions(-)
 create mode 100644 packages/eslint-config-airbnb-base/.babelrc
 create mode 100644 packages/eslint-config-airbnb/.babelrc

diff --git a/packages/eslint-config-airbnb-base/.babelrc b/packages/eslint-config-airbnb-base/.babelrc
new file mode 100644
index 0000000000..e0aceaae1c
--- /dev/null
+++ b/packages/eslint-config-airbnb-base/.babelrc
@@ -0,0 +1,3 @@
+{
+  "presets": ["airbnb"]
+}
diff --git a/packages/eslint-config-airbnb-base/package.json b/packages/eslint-config-airbnb-base/package.json
index b1feb145f9..e784f59cd1 100644
--- a/packages/eslint-config-airbnb-base/package.json
+++ b/packages/eslint-config-airbnb-base/package.json
@@ -45,12 +45,13 @@
   },
   "homepage": "https://github.com/airbnb/javascript",
   "devDependencies": {
-    "babel-tape-runner": "^1.3.1",
+    "babel-preset-airbnb": "^2.0.0",
+    "babel-tape-runner": "^2.0.1",
     "eslint": "^3.1.1",
     "eslint-find-rules": "^1.11.1",
     "eslint-plugin-import": "^1.11.1",
-    "tape": "^4.6.0",
-    "in-publish": "^2.0.0"
+    "in-publish": "^2.0.0",
+    "tape": "^4.6.0"
   },
   "peerDependencies": {
     "eslint": "^3.1.1",
diff --git a/packages/eslint-config-airbnb/.babelrc b/packages/eslint-config-airbnb/.babelrc
new file mode 100644
index 0000000000..e0aceaae1c
--- /dev/null
+++ b/packages/eslint-config-airbnb/.babelrc
@@ -0,0 +1,3 @@
+{
+  "presets": ["airbnb"]
+}
diff --git a/packages/eslint-config-airbnb/package.json b/packages/eslint-config-airbnb/package.json
index c23e99cbfd..e27cf0071d 100644
--- a/packages/eslint-config-airbnb/package.json
+++ b/packages/eslint-config-airbnb/package.json
@@ -48,15 +48,16 @@
     "eslint-config-airbnb-base": "^3.0.1"
   },
   "devDependencies": {
-    "babel-tape-runner": "^1.3.1",
+    "babel-preset-airbnb": "^2.0.0",
+    "babel-tape-runner": "^2.0.1",
     "eslint": "^2.10.2",
     "eslint-find-rules": "^1.9.2",
     "eslint-plugin-import": "^1.8.0",
     "eslint-plugin-jsx-a11y": "^1.2.2",
     "eslint-plugin-react": "^5.1.1",
+    "in-publish": "^2.0.0",
     "react": ">= 0.13.0",
-    "tape": "^4.5.1",
-    "in-publish": "^2.0.0"
+    "tape": "^4.5.1"
   },
   "peerDependencies": {
     "eslint": "^2.10.2",

From 616233c8b29f3c4be0e0deb61b306b8ce82acec5 Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Sun, 24 Jul 2016 09:51:50 -0700
Subject: [PATCH 0738/1591] [eslint config] [base] [breaking] enable
 `no-unexpected-multiline` rule

---
 packages/eslint-config-airbnb-base/rules/errors.js | 3 +--
 1 file changed, 1 insertion(+), 2 deletions(-)

diff --git a/packages/eslint-config-airbnb-base/rules/errors.js b/packages/eslint-config-airbnb-base/rules/errors.js
index a9df2bc825..7221cd1647 100644
--- a/packages/eslint-config-airbnb-base/rules/errors.js
+++ b/packages/eslint-config-airbnb-base/rules/errors.js
@@ -81,8 +81,7 @@ module.exports = {
 
     // Avoid code that looks like two expressions but is actually one
     // http://eslint.org/docs/rules/no-unexpected-multiline
-    // TODO: enable?
-    'no-unexpected-multiline': 0,
+    'no-unexpected-multiline': 2,
 
     // disallow unreachable statements after a return, throw, continue, or break statement
     'no-unreachable': 2,

From 1fb300c6c72077e14391c526ccf7de2c22810cb3 Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Sun, 24 Jul 2016 09:55:44 -0700
Subject: [PATCH 0739/1591] [eslint config] [base] v5.0.0

---
 packages/eslint-config-airbnb-base/CHANGELOG.md   | 9 +++++++++
 packages/eslint-config-airbnb-base/package.json   | 2 +-
 packages/eslint-config-airbnb-base/rules/style.js | 4 ++++
 3 files changed, 14 insertions(+), 1 deletion(-)

diff --git a/packages/eslint-config-airbnb-base/CHANGELOG.md b/packages/eslint-config-airbnb-base/CHANGELOG.md
index b2813dcbfa..4c0b304f9c 100644
--- a/packages/eslint-config-airbnb-base/CHANGELOG.md
+++ b/packages/eslint-config-airbnb-base/CHANGELOG.md
@@ -1,3 +1,12 @@
+5.0.0 / 2016-07-24
+==================
+ - [breaking] enable `import/newline-after-import`
+ - [breaking] enable overlooked rules: `linebreak-style`, `new-parens`, `no-continue`, `no-lonely-if`, `operator-assignment`, `space-unary-ops`, `dot-location`, `no-extra-boolean-cast`, `no-this-before-super`, `require-yield`, `no-path-concat`, `no-label-var`, `no-void`, `constructor-super`, `prefer-spread`, `no-new-require`, `no-undef-init`, `no-unexpected-multiline`
+ - [deps] update `eslint`, `eslint-find-rules`, `eslint-plugin-import`, `babel-tape-runner`; add `babel-preset-airbnb`
+ - [patch] flesh out defaults: `jsx-quotes`
+ - [docs] update the peer dep install command to dynamically look up the right version numbers when installing peer deps
+ - [tests] fix prepublish scripts
+
 4.0.2 / 2016-07-14
 ==================
  - [fix] repair accidental comma-dangle change
diff --git a/packages/eslint-config-airbnb-base/package.json b/packages/eslint-config-airbnb-base/package.json
index e784f59cd1..175fc87fc3 100644
--- a/packages/eslint-config-airbnb-base/package.json
+++ b/packages/eslint-config-airbnb-base/package.json
@@ -1,6 +1,6 @@
 {
   "name": "eslint-config-airbnb-base",
-  "version": "4.0.2",
+  "version": "5.0.0",
   "description": "Airbnb's base JS ESLint config, following our styleguide",
   "main": "index.js",
   "scripts": {
diff --git a/packages/eslint-config-airbnb-base/rules/style.js b/packages/eslint-config-airbnb-base/rules/style.js
index 97afa41628..c8a6f50e9e 100644
--- a/packages/eslint-config-airbnb-base/rules/style.js
+++ b/packages/eslint-config-airbnb-base/rules/style.js
@@ -105,6 +105,10 @@ module.exports = {
     // http://eslint.org/docs/rules/max-statements-per-line
     'max-statements-per-line': [0, { max: 1 }],
 
+    // require multiline ternary
+    // http://eslint.org/docs/rules/multiline-ternary
+    'multiline-ternary': 0,
+
     // require a capital letter for constructors
     'new-cap': [2, { newIsCap: true }],
 

From eea5f0f5f5cf8a35cb5b618b0d7e247fbd569e34 Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Mon, 25 Jul 2016 12:39:31 -0700
Subject: [PATCH 0740/1591] [eslint config] [base] `no-unused-expressions`:
 flesh out options

Fixes #963.
---
 packages/eslint-config-airbnb-base/rules/best-practices.js | 5 ++++-
 1 file changed, 4 insertions(+), 1 deletion(-)

diff --git a/packages/eslint-config-airbnb-base/rules/best-practices.js b/packages/eslint-config-airbnb-base/rules/best-practices.js
index 9ad830b7f5..838ae71368 100644
--- a/packages/eslint-config-airbnb-base/rules/best-practices.js
+++ b/packages/eslint-config-airbnb-base/rules/best-practices.js
@@ -189,7 +189,10 @@ module.exports = {
     'no-unmodified-loop-condition': 0,
 
     // disallow usage of expressions in statement position
-    'no-unused-expressions': 2,
+    'no-unused-expressions': [2, {
+      allowShortCircuit: false,
+      allowTernary: false,
+    }],
 
     // disallow unused labels
     // http://eslint.org/docs/rules/no-unused-labels

From 4c8f78921ff887843f16993442a19bb01805cc66 Mon Sep 17 00:00:00 2001
From: Joe Lencioni <joe.lencioni@airbnb.com>
Date: Tue, 26 Jul 2016 16:49:18 -0700
Subject: [PATCH 0741/1591] Add guideline for displayName in higher-order
 components

This guideline will help us keep our higher-order components consistent
and easy to understand.

Fixes #968.
---
 react/README.md | 21 +++++++++++++++++++++
 1 file changed, 21 insertions(+)

diff --git a/react/README.md b/react/README.md
index 04ddda9f8f..bf5b276f16 100644
--- a/react/README.md
+++ b/react/README.md
@@ -101,7 +101,28 @@
     // good
     import Footer from './Footer';
     ```
+  - **Higher-order Component Naming**: Use a composite of the higher-order component's name and the passed-in component's name as the `displayName` on the generated component. For example, the higher-order component `withFoo()`, when passed a component `Bar` should produce a component with a `displayName` of `withFoo(Bar)`.
 
+  > Why? A component's `displayName` may be used by developer tools or in error messages, and having a value that clearly expresses this relationship helps people understand what is happening.
+
+    ```jsx
+    // bad
+    export default function withFoo(Component) {
+      return function WithFoo(props) {
+        return <Component {...props} foo />;
+      }
+    }
+
+    // good
+    export default function withFoo(Component) {
+      function WithFoo(props) {
+        return <Component {...props} foo />;
+      }
+
+      WithFoo.displayName = `withFoo(${Component.displayName || Component.name}`;
+      return WithFoo;
+    }
+    ```
 ## Declaration
 
   - Do not use `displayName` for naming components. Instead, name the component by reference.

From 0165c1384550c65ae0919fd35a6164419b671dac Mon Sep 17 00:00:00 2001
From: James Glover <james.glover@gmail.com>
Date: Wed, 27 Jul 2016 17:39:29 +1000
Subject: [PATCH 0742/1591] [eslint config] [*] [docs] Added subshell to usage
 commands and converted samples to the three backtick markdown syntax with
 language specifier for highlighting.

---
 packages/eslint-config-airbnb-base/README.md | 34 +++++++++++++++++---
 packages/eslint-config-airbnb/README.md      | 16 +++++++--
 2 files changed, 44 insertions(+), 6 deletions(-)

diff --git a/packages/eslint-config-airbnb-base/README.md b/packages/eslint-config-airbnb-base/README.md
index e0d8bc091a..40691b43c8 100644
--- a/packages/eslint-config-airbnb-base/README.md
+++ b/packages/eslint-config-airbnb-base/README.md
@@ -12,15 +12,41 @@ We export two ESLint configurations for your usage.
 
 Our default export contains all of our ESLint rules, including ECMAScript 6+. It requires `eslint` and `eslint-plugin-import`.
 
-1. `PKG=eslint-config-airbnb-base npm info "$PKG" peerDependencies --json | command sed 's/[\{\},]//g ; s/: /@/g' | xargs npm install --save-dev "$PKG"` (which produces and runs a command like `npm install --save-dev eslint-config-airbnb-base eslint@^3.0.1 eslint-plugin-import@^1.10.3` but with whatever the proper version numbers are)
-2. add `"extends": "airbnb-base"` to your .eslintrc
+1. Ensure packages are installed with correct version numbers by running:
+  ```sh
+  (
+    export PKG=eslint-config-airbnb-base;
+    npm info "$PKG" peerDependencies --json | command sed 's/[\{\},]//g ; s/: /@/g' | xargs npm install --save-dev "$PKG"
+  )
+  ```
+
+  Which produces and runs a command like:
+
+  ```sh
+    npm install --save-dev eslint-config-airbnb-base eslint@^3.0.1 eslint-plugin-import@^1.10.3
+  ```
+
+2. Add `"extends": "airbnb-base"` to your .eslintrc
 
 ### eslint-config-airbnb-base/legacy
 
 Lints ES5 and below. Requires `eslint` and `eslint-plugin-import`.
 
-1. `PKG=eslint-config-airbnb-base npm info "$PKG" peerDependencies --json | command sed 's/[\{\},]//g ; s/: /@/g' | xargs npm install --save-dev "$PKG"` (which produces and runs a command like `npm install --save-dev eslint-config-airbnb-base eslint@^3.0.1 eslint-plugin-import@^1.10.3` but with whatever the proper version numbers are)
-2. add `"extends": "airbnb-base/legacy"` to your .eslintrc
+1. Ensure packages are installed with correct version numbers by running:
+  ```sh
+  (
+    export PKG=eslint-config-airbnb-base;
+    npm info "$PKG" peerDependencies --json | command sed 's/[\{\},]//g ; s/: /@/g' | xargs npm install --save-dev "$PKG"
+  )
+  ```
+
+  Which produces and runs a command like:
+
+  ```sh
+  npm install --save-dev eslint-config-airbnb-base eslint@^3.0.1 eslint-plugin-import@^1.10.3
+  ```
+
+2. Add `"extends": "airbnb-base/legacy"` to your .eslintrc
 
 See [Airbnb's overarching ESLint config](https://npmjs.com/eslint-config-airbnb), [Airbnb's Javascript styleguide](https://github.com/airbnb/javascript), and the [ESlint config docs](http://eslint.org/docs/user-guide/configuring#extending-configuration-files) for more information.
 
diff --git a/packages/eslint-config-airbnb/README.md b/packages/eslint-config-airbnb/README.md
index afcf902135..a96a9fe138 100644
--- a/packages/eslint-config-airbnb/README.md
+++ b/packages/eslint-config-airbnb/README.md
@@ -12,9 +12,21 @@ We export three ESLint configurations for your usage.
 
 Our default export contains all of our ESLint rules, including ECMAScript 6+ and React. It requires `eslint`, `eslint-plugin-import`, `eslint-plugin-react`, and `eslint-plugin-jsx-a11y`.
 
-1. `PKG=eslint-config-airbnb npm info "$PKG" peerDependencies --json | command sed 's/[\{\},]//g ; s/: /@/g' | xargs npm install --save-dev "$PKG"` (which produces and runs a command like `npm install --save-dev eslint-config-airbnb eslint@^2.9.0 eslint-plugin-jsx-a11y@^1.2.0 eslint-plugin-import@^1.7.0 eslint-plugin-react@^5.0.1` but with whatever the proper version numbers are)
-2. add `"extends": "airbnb"` to your .eslintrc
+1. Ensure packages are installed with correct version numbers by running:
+  ```sh
+  (
+    export PKG=eslint-config-airbnb;
+    npm info "$PKG" peerDependencies --json | command sed 's/[\{\},]//g ; s/: /@/g' | xargs npm install --save-dev "$PKG"
+  )
+  ```
 
+  Which produces and runs a command like:
+
+  ```sh
+  npm install --save-dev eslint-config-airbnb eslint@^2.9.0 eslint-plugin-jsx-a11y@^1.2.0 eslint-plugin-import@^1.7.0 eslint-plugin-react@^5.0.1
+  ```
+
+2. Add `"extends": "airbnb"` to your .eslintrc
 ### eslint-config-airbnb/base
 
 This entry point is deprecated. See [eslint-config-airbnb-base](https://npmjs.com/eslint-config-airbnb-base).

From 1917968acba307f325a77883f9bad39dd3d19275 Mon Sep 17 00:00:00 2001
From: Joe Lencioni <joe.lencioni@airbnb.com>
Date: Wed, 27 Jul 2016 09:50:49 -0700
Subject: [PATCH 0743/1591] Add missing closing paren in HOC guideline

As pointed out by eagle-eyed @pepakriz.
---
 react/README.md | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/react/README.md b/react/README.md
index bf5b276f16..a3a58a8f06 100644
--- a/react/README.md
+++ b/react/README.md
@@ -119,7 +119,7 @@
         return <Component {...props} foo />;
       }
 
-      WithFoo.displayName = `withFoo(${Component.displayName || Component.name}`;
+      WithFoo.displayName = `withFoo(${Component.displayName || Component.name})`;
       return WithFoo;
     }
     ```

From 4dbb2af7da8d919fae2eb25eac5eef4360dbe939 Mon Sep 17 00:00:00 2001
From: Joe Lencioni <joe.lencioni@airbnb.com>
Date: Wed, 27 Jul 2016 09:52:34 -0700
Subject: [PATCH 0744/1591] Improve React HOC example

I decided that `WrappedComponent` is clearer than `Component` here, so I
made the switch. I also realized that `WrappedComponent.name` might
still be undefined, so I added a fallback value of "Component".
---
 react/README.md | 14 +++++++++-----
 1 file changed, 9 insertions(+), 5 deletions(-)

diff --git a/react/README.md b/react/README.md
index a3a58a8f06..b4a5342a55 100644
--- a/react/README.md
+++ b/react/README.md
@@ -107,19 +107,23 @@
 
     ```jsx
     // bad
-    export default function withFoo(Component) {
+    export default function withFoo(WrappedComponent) {
       return function WithFoo(props) {
-        return <Component {...props} foo />;
+        return <WrappedComponent {...props} foo />;
       }
     }
 
     // good
-    export default function withFoo(Component) {
+    export default function withFoo(WrappedComponent) {
       function WithFoo(props) {
-        return <Component {...props} foo />;
+        return <WrappedComponent {...props} foo />;
       }
 
-      WithFoo.displayName = `withFoo(${Component.displayName || Component.name})`;
+      const wrappedComponentName = WrappedComponent.displayName
+        || WrappedComponent.name
+        || 'Component';
+
+      WithFoo.displayName = `withFoo(${wrappedComponentName})`;
       return WithFoo;
     }
     ```

From b2ea03ef2cc433b1be63a37f66dcd6aa15991248 Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Fri, 29 Jul 2016 08:14:10 -0700
Subject: [PATCH 0745/1591] [eslint config] [base] [deps] update
 `eslint-plugin-import`

---
 packages/eslint-config-airbnb-base/package.json | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/packages/eslint-config-airbnb-base/package.json b/packages/eslint-config-airbnb-base/package.json
index 175fc87fc3..8c6d0d51b0 100644
--- a/packages/eslint-config-airbnb-base/package.json
+++ b/packages/eslint-config-airbnb-base/package.json
@@ -49,13 +49,13 @@
     "babel-tape-runner": "^2.0.1",
     "eslint": "^3.1.1",
     "eslint-find-rules": "^1.11.1",
-    "eslint-plugin-import": "^1.11.1",
+    "eslint-plugin-import": "^1.12.0",
     "in-publish": "^2.0.0",
     "tape": "^4.6.0"
   },
   "peerDependencies": {
     "eslint": "^3.1.1",
-    "eslint-plugin-import": "^1.11.1"
+    "eslint-plugin-import": "^1.12.0"
   },
   "engines": {
     "node": ">= 4"

From 49dfcc42de66964e7c26a29fbd115025433ee66e Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Fri, 29 Jul 2016 16:29:50 -0700
Subject: [PATCH 0746/1591] [eslint config] [*] improve prepublish script

---
 packages/eslint-config-airbnb-base/package.json | 2 +-
 packages/eslint-config-airbnb/package.json      | 2 +-
 2 files changed, 2 insertions(+), 2 deletions(-)

diff --git a/packages/eslint-config-airbnb-base/package.json b/packages/eslint-config-airbnb-base/package.json
index 8c6d0d51b0..c4eecd8cdb 100644
--- a/packages/eslint-config-airbnb-base/package.json
+++ b/packages/eslint-config-airbnb-base/package.json
@@ -6,7 +6,7 @@
   "scripts": {
     "lint": "eslint .",
     "tests-only": "babel-tape-runner ./test/test-*.js",
-    "prepublish": "not-in-publish || (eslint-find-rules --unused && npm test)",
+    "prepublish": "(in-install || eslint-find-rules --unused) && (not-in-publish || npm test)",
     "pretest": "npm run --silent lint",
     "test": "npm run --silent tests-only",
     "travis": "npm run --silent test"
diff --git a/packages/eslint-config-airbnb/package.json b/packages/eslint-config-airbnb/package.json
index e27cf0071d..0d7f6f3d6e 100644
--- a/packages/eslint-config-airbnb/package.json
+++ b/packages/eslint-config-airbnb/package.json
@@ -6,7 +6,7 @@
   "scripts": {
     "lint": "eslint .",
     "tests-only": "babel-tape-runner ./test/test-*.js",
-    "prepublish": "not-in-publish || (eslint-find-rules --unused && npm test)",
+    "prepublish": "(in-install || eslint-find-rules --unused) && (not-in-publish || npm test)",
     "pretest": "npm run --silent lint",
     "test": "npm run --silent tests-only",
     "travis": "cd ../eslint-config-airbnb-base && npm install && npm link && cd - && npm link eslint-config-airbnb-base && npm run --silent test ; npm unlink eslint-config-airbnb-base >/dev/null &"

From 4425d3c76b094fdfbefe4f5921d2901c220cb739 Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Fri, 29 Jul 2016 16:29:00 -0700
Subject: [PATCH 0747/1591] [eslint config] [base] [deps] update `eslint` to
 `v3.2`

---
 packages/eslint-config-airbnb-base/package.json   | 4 ++--
 packages/eslint-config-airbnb-base/rules/style.js | 4 ++++
 2 files changed, 6 insertions(+), 2 deletions(-)

diff --git a/packages/eslint-config-airbnb-base/package.json b/packages/eslint-config-airbnb-base/package.json
index c4eecd8cdb..8a920ff1fd 100644
--- a/packages/eslint-config-airbnb-base/package.json
+++ b/packages/eslint-config-airbnb-base/package.json
@@ -47,14 +47,14 @@
   "devDependencies": {
     "babel-preset-airbnb": "^2.0.0",
     "babel-tape-runner": "^2.0.1",
-    "eslint": "^3.1.1",
+    "eslint": "^3.2.0",
     "eslint-find-rules": "^1.11.1",
     "eslint-plugin-import": "^1.12.0",
     "in-publish": "^2.0.0",
     "tape": "^4.6.0"
   },
   "peerDependencies": {
-    "eslint": "^3.1.1",
+    "eslint": "^3.2.0",
     "eslint-plugin-import": "^1.12.0"
   },
   "engines": {
diff --git a/packages/eslint-config-airbnb-base/rules/style.js b/packages/eslint-config-airbnb-base/rules/style.js
index c8a6f50e9e..dd21a4aefb 100644
--- a/packages/eslint-config-airbnb-base/rules/style.js
+++ b/packages/eslint-config-airbnb-base/rules/style.js
@@ -191,6 +191,10 @@ module.exports = {
     // disallow space between function identifier and application
     'no-spaced-func': 2,
 
+    // disallow tab characters entirely
+    // TODO: enable
+    'no-tabs': 0,
+
     // disallow the use of ternary operators
     'no-ternary': 0,
 

From a533e2dd35ebc05e246698e65a6e23cbd342c240 Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Fri, 29 Jul 2016 17:32:24 -0700
Subject: [PATCH 0748/1591] [eslint config] [base] v5.0.1

---
 packages/eslint-config-airbnb-base/CHANGELOG.md | 6 ++++++
 packages/eslint-config-airbnb-base/package.json | 2 +-
 2 files changed, 7 insertions(+), 1 deletion(-)

diff --git a/packages/eslint-config-airbnb-base/CHANGELOG.md b/packages/eslint-config-airbnb-base/CHANGELOG.md
index 4c0b304f9c..9baf2527b9 100644
--- a/packages/eslint-config-airbnb-base/CHANGELOG.md
+++ b/packages/eslint-config-airbnb-base/CHANGELOG.md
@@ -1,3 +1,9 @@
+5.0.1 / 2016-07-29
+==================
+ - [patch] `no-unused-expressions`: flesh out options
+ - [deps] update `eslint` to `v3.2`, `eslint-plugin-import` to `v1.12`
+ - [tests] improve prepublish script
+
 5.0.0 / 2016-07-24
 ==================
  - [breaking] enable `import/newline-after-import`
diff --git a/packages/eslint-config-airbnb-base/package.json b/packages/eslint-config-airbnb-base/package.json
index 8a920ff1fd..d453cc6798 100644
--- a/packages/eslint-config-airbnb-base/package.json
+++ b/packages/eslint-config-airbnb-base/package.json
@@ -1,6 +1,6 @@
 {
   "name": "eslint-config-airbnb-base",
-  "version": "5.0.0",
+  "version": "5.0.1",
   "description": "Airbnb's base JS ESLint config, following our styleguide",
   "main": "index.js",
   "scripts": {

From 75c961a43f158263ef4bdb0f042cdcfa6a040b45 Mon Sep 17 00:00:00 2001
From: Zane Mountcastle <zane.mountcastle@gmail.com>
Date: Mon, 1 Aug 2016 10:41:15 +0800
Subject: [PATCH 0749/1591] Change 'Brazilian' to 'Portuguese'

---
 react/README.md | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/react/README.md b/react/README.md
index b4a5342a55..716ef59166 100644
--- a/react/README.md
+++ b/react/README.md
@@ -574,6 +574,6 @@
   - ![cn](https://raw.githubusercontent.com/gosquared/flags/master/flags/flags/shiny/24/China.png) **Chinese (Simplified)**: [JasonBoy/javascript](https://github.com/JasonBoy/javascript/tree/master/react)
   - ![pl](https://raw.githubusercontent.com/gosquared/flags/master/flags/flags/shiny/24/Poland.png) **Polish**: [pietraszekl/javascript](https://github.com/pietraszekl/javascript/tree/master/react)
   - ![kr](https://raw.githubusercontent.com/gosquared/flags/master/flags/flags/shiny/24/South-Korea.png) **Korean**: [apple77y/javascript](https://github.com/apple77y/javascript/tree/master/react)
-  - ![Br](https://raw.githubusercontent.com/gosquared/flags/master/flags/flags/shiny/24/Brazil.png) **Brazilian**: [ronal2do/javascript](https://github.com/ronal2do/airbnb-react-styleguide)
+  - ![Br](https://raw.githubusercontent.com/gosquared/flags/master/flags/flags/shiny/24/Brazil.png) **Portuguese**: [ronal2do/javascript](https://github.com/ronal2do/airbnb-react-styleguide)
 
 **[⬆ back to top](#table-of-contents)**

From cb36ed90c3647561bb5b062c835282255a1a789c Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Tue, 5 Jul 2016 13:15:51 -0700
Subject: [PATCH 0750/1591] [eslint config] [deps] [breaking] update `eslint`
 to v3, `eslint-config-airbnb-base` to v5, `eslint-find-rules`,
 `eslint-plugin-import`, `eslint-plugin-jsx-a11y` to v2, `eslint-plugin-react`
 to v6, `tape`.

 - drop node < 4 support
---
 packages/eslint-config-airbnb/package.json    | 25 ++++++-----
 .../eslint-config-airbnb/rules/react-a11y.js  | 29 +++++++++++-
 packages/eslint-config-airbnb/rules/react.js  | 45 +++++++++++++++----
 .../test/test-react-order.js                  |  1 +
 4 files changed, 79 insertions(+), 21 deletions(-)

diff --git a/packages/eslint-config-airbnb/package.json b/packages/eslint-config-airbnb/package.json
index 0d7f6f3d6e..dccb7d0572 100644
--- a/packages/eslint-config-airbnb/package.json
+++ b/packages/eslint-config-airbnb/package.json
@@ -45,24 +45,27 @@
   },
   "homepage": "https://github.com/airbnb/javascript",
   "dependencies": {
-    "eslint-config-airbnb-base": "^3.0.1"
+    "eslint-config-airbnb-base": "^5.0.1"
   },
   "devDependencies": {
     "babel-preset-airbnb": "^2.0.0",
     "babel-tape-runner": "^2.0.1",
-    "eslint": "^2.10.2",
-    "eslint-find-rules": "^1.9.2",
-    "eslint-plugin-import": "^1.8.0",
-    "eslint-plugin-jsx-a11y": "^1.2.2",
-    "eslint-plugin-react": "^5.1.1",
+    "eslint": "^3.2.2",
+    "eslint-find-rules": "^1.11.1",
+    "eslint-plugin-import": "^1.12.0",
+    "eslint-plugin-jsx-a11y": "^2.0.1",
+    "eslint-plugin-react": "^6.0.0",
     "in-publish": "^2.0.0",
     "react": ">= 0.13.0",
-    "tape": "^4.5.1"
+    "tape": "^4.6.0"
   },
   "peerDependencies": {
-    "eslint": "^2.10.2",
-    "eslint-plugin-jsx-a11y": "^1.2.2",
-    "eslint-plugin-import": "^1.8.0",
-    "eslint-plugin-react": "^5.1.1"
+    "eslint": "^3.2.2",
+    "eslint-plugin-jsx-a11y": "^2.0.1",
+    "eslint-plugin-import": "^1.12.0",
+    "eslint-plugin-react": "^6.0.0"
+  },
+  "engines": {
+    "node": ">= 4"
   }
 }
diff --git a/packages/eslint-config-airbnb/rules/react-a11y.js b/packages/eslint-config-airbnb/rules/react-a11y.js
index 6ba17e8eaa..4b19fd0748 100644
--- a/packages/eslint-config-airbnb/rules/react-a11y.js
+++ b/packages/eslint-config-airbnb/rules/react-a11y.js
@@ -30,7 +30,7 @@ module.exports = {
     // disallow href "#"
     // TODO: enable
     // https://github.com/evcohen/eslint-plugin-jsx-a11y/blob/master/docs/rules/href-no-hash.md
-    'jsx-a11y/href-no-hash': 0,
+    'jsx-a11y/href-no-hash': [0, ['a']],
 
     // Require <img> to have a non-empty `alt` prop, or role="presentation"
     // https://github.com/evcohen/eslint-plugin-jsx-a11y/blob/master/docs/rules/img-has-alt.md
@@ -43,7 +43,7 @@ module.exports = {
     // require that JSX labels use "htmlFor"
     // TODO: enable
     // https://github.com/evcohen/eslint-plugin-jsx-a11y/blob/master/docs/rules/label-has-for.md
-    'jsx-a11y/label-has-for': 0,
+    'jsx-a11y/label-has-for': [0, ['label']],
 
     // require that mouseover/out come with focus/blur, for keyboard-only users
     // TODO: enable?
@@ -83,5 +83,30 @@ module.exports = {
     // TODO: evaluate
     // https://github.com/evcohen/eslint-plugin-jsx-a11y/blob/master/docs/rules/tabindex-no-positive.md
     'jsx-a11y/tabindex-no-positive': 0,
+
+    // ensure <hX> tags have content and are not aria-hidden
+    // https://github.com/evcohen/eslint-plugin-jsx-a11y/blob/master/docs/rules/heading-has-content.md
+    // TODO: enable
+    'jsx-a11y/heading-has-content': [0, ['']],
+
+    // require HTML elements to have a "lang" prop
+    // https://github.com/evcohen/eslint-plugin-jsx-a11y/blob/master/docs/rules/html-has-lang.md
+    // TODO: enable
+    'jsx-a11y/html-has-lang': 0,
+
+    // require HTML element's lang prop to be valid
+    // https://github.com/evcohen/eslint-plugin-jsx-a11y/blob/master/docs/rules/lang.md
+    // TODO: enable
+    'jsx-a11y/lang': 0,
+
+    // prevent marquee elements
+    // https://github.com/evcohen/eslint-plugin-jsx-a11y/blob/master/docs/rules/no-marquee.md
+    // TODO: enable, pardner
+    'jsx-a11y/no-marquee': 0,
+
+    // only allow <th> to have the "scope" attr
+    // https://github.com/evcohen/eslint-plugin-jsx-a11y/blob/master/docs/rules/scope.md
+    // TODO: enable
+    'jsx-a11y/scope': 0,
   },
 };
diff --git a/packages/eslint-config-airbnb/rules/react.js b/packages/eslint-config-airbnb/rules/react.js
index 57884823c6..f0fd07d831 100644
--- a/packages/eslint-config-airbnb/rules/react.js
+++ b/packages/eslint-config-airbnb/rules/react.js
@@ -89,6 +89,7 @@ module.exports = {
     'react/sort-prop-types': [0, {
       ignoreCase: false,
       callbacksLast: false,
+      requiredFirst: false,
     }],
 
     // Deprecated in favor of react/jsx-sort-props
@@ -99,11 +100,13 @@ module.exports = {
     'react/jsx-sort-props': [0, {
       ignoreCase: false,
       callbacksLast: false,
+      shorthandFirst: false,
+      shorthandLast: false,
     }],
 
     // Prevent React to be incorrectly marked as unused
     // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/jsx-uses-react.md
-    'react/jsx-uses-react': [2, { pragma: 'React' }],
+    'react/jsx-uses-react': [2],
 
     // Prevent variables used in JSX to be incorrectly marked as unused
     // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/jsx-uses-vars.md
@@ -115,15 +118,15 @@ module.exports = {
 
     // Prevent usage of deprecated methods
     // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/no-deprecated.md
-    'react/no-deprecated': [1, { react: '0.14.0' }],
+    'react/no-deprecated': [1],
 
     // Prevent usage of setState in componentDidMount
     // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/no-did-mount-set-state.md
-    'react/no-did-mount-set-state': [2, 'allow-in-func'],
+    'react/no-did-mount-set-state': [2],
 
     // Prevent usage of setState in componentDidUpdate
     // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/no-did-update-set-state.md
-    'react/no-did-update-set-state': [2, 'allow-in-func'],
+    'react/no-did-update-set-state': [2],
 
     // Prevent direct mutation of this.state
     // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/no-direct-mutation-state.md
@@ -167,7 +170,7 @@ module.exports = {
 
     // Restrict file extensions that may be required
     // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/require-extension.md
-    'react/require-extension': [0, { extensions: ['.jsx'] }],
+    'react/require-extension': [0, { extensions: ['.jsx', '.js'] }],
 
     // Require render() methods to return something
     // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/require-render-return.md
@@ -196,12 +199,13 @@ module.exports = {
     }],
 
     // Prevent missing parentheses around multilines JSX
-    // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/wrap-multilines.md
-    'react/wrap-multilines': [2, {
+    // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/jsx-wrap-multilines.md
+    'react/jsx-wrap-multilines': [2, {
       declaration: true,
       assignment: true,
       return: true
     }],
+    'react/wrap-multilines': 0, // deprecated version
 
     // Require that the first prop in a JSX element be on a new line when the element is multiline
     // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/jsx-first-prop-new-line.md
@@ -218,7 +222,32 @@ module.exports = {
     // Disallow target="_blank" on links
     // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/jsx-no-target-blank.md
     // TODO: enable
-    'react/jsx-no-target-blank': 0
+    'react/jsx-no-target-blank': 0,
+
+    // only .jsx files may have JSX
+    // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/jsx-filename-extension.md
+    // TODO: enable
+    'react/jsx-filename-extension': [0, { extensions: ['.jsx'] }],
+
+    // prevent accidental JS comments from being injected into JSX as text
+    // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/jsx-no-comment-textnodes.md
+    // TODO: enable
+    'react/jsx-no-comment-textnodes': 0,
+    'react/no-comment-textnodes': 0, // deprecated version
+
+    // disallow using React.render/ReactDOM.render's return value
+    // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/no-render-return-value.md
+    // TODO: enable
+    'react/no-render-return-value': 0,
+
+    // require a shouldComponentUpdate method, or PureRenderMixin
+    // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/require-optimization.md
+    'react/require-optimization': [0, { allowDecorators: [] }],
+
+    // warn against using findDOMNode()
+    // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/no-find-dom-node.md
+    // TODO: enable
+    'react/no-find-dom-node': 0,
   },
 
   settings: {
diff --git a/packages/eslint-config-airbnb/test/test-react-order.js b/packages/eslint-config-airbnb/test/test-react-order.js
index 016fef9d34..5fd4f3b814 100644
--- a/packages/eslint-config-airbnb/test/test-react-order.js
+++ b/packages/eslint-config-airbnb/test/test-react-order.js
@@ -27,6 +27,7 @@ function lint(text) {
 function wrapComponent(body) {
   return `
 import React from 'react';
+
 export default class MyComponent extends React.Component {
 /* eslint no-empty-function: 0 */
 ${body}

From 6857f7af97c10cf8dd05eff4b86a9fe5ddb2bba8 Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Tue, 5 Jul 2016 13:20:39 -0700
Subject: [PATCH 0751/1591] [eslint config] [react] [breaking] enable react
 rules:

 - `react/jsx-filename-extension`
 - `react/jsx-no-comment-textnodes`
 - `react/jsx-no-target-blank`
 - `react/require-extension`
 - `react/no-render-return-value`
 - `react/no-find-dom-node`
 - `react/no-deprecated`
---
 packages/eslint-config-airbnb/rules/react.js  | 19 +++++++------------
 .../test/test-react-order.js                  |  3 ---
 2 files changed, 7 insertions(+), 15 deletions(-)

diff --git a/packages/eslint-config-airbnb/rules/react.js b/packages/eslint-config-airbnb/rules/react.js
index f0fd07d831..53961c368d 100644
--- a/packages/eslint-config-airbnb/rules/react.js
+++ b/packages/eslint-config-airbnb/rules/react.js
@@ -118,7 +118,7 @@ module.exports = {
 
     // Prevent usage of deprecated methods
     // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/no-deprecated.md
-    'react/no-deprecated': [1],
+    'react/no-deprecated': [2],
 
     // Prevent usage of setState in componentDidMount
     // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/no-did-mount-set-state.md
@@ -170,7 +170,7 @@ module.exports = {
 
     // Restrict file extensions that may be required
     // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/require-extension.md
-    'react/require-extension': [0, { extensions: ['.jsx', '.js'] }],
+    'react/require-extension': [2, { extensions: ['.jsx', '.js'] }],
 
     // Require render() methods to return something
     // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/require-render-return.md
@@ -221,24 +221,20 @@ module.exports = {
 
     // Disallow target="_blank" on links
     // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/jsx-no-target-blank.md
-    // TODO: enable
-    'react/jsx-no-target-blank': 0,
+    'react/jsx-no-target-blank': 2,
 
     // only .jsx files may have JSX
     // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/jsx-filename-extension.md
-    // TODO: enable
-    'react/jsx-filename-extension': [0, { extensions: ['.jsx'] }],
+    'react/jsx-filename-extension': [2, { extensions: ['.jsx'] }],
 
     // prevent accidental JS comments from being injected into JSX as text
     // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/jsx-no-comment-textnodes.md
-    // TODO: enable
-    'react/jsx-no-comment-textnodes': 0,
+    'react/jsx-no-comment-textnodes': 2,
     'react/no-comment-textnodes': 0, // deprecated version
 
     // disallow using React.render/ReactDOM.render's return value
     // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/no-render-return-value.md
-    // TODO: enable
-    'react/no-render-return-value': 0,
+    'react/no-render-return-value': 2,
 
     // require a shouldComponentUpdate method, or PureRenderMixin
     // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/require-optimization.md
@@ -246,8 +242,7 @@ module.exports = {
 
     // warn against using findDOMNode()
     // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/no-find-dom-node.md
-    // TODO: enable
-    'react/no-find-dom-node': 0,
+    'react/no-find-dom-node': 2,
   },
 
   settings: {
diff --git a/packages/eslint-config-airbnb/test/test-react-order.js b/packages/eslint-config-airbnb/test/test-react-order.js
index 5fd4f3b814..37d417ca15 100644
--- a/packages/eslint-config-airbnb/test/test-react-order.js
+++ b/packages/eslint-config-airbnb/test/test-react-order.js
@@ -9,9 +9,6 @@ const cli = new CLIEngine({
   baseConfig: eslintrc,
 
   rules: {
-    // This rule fails when executing on text.
-    indent: 0,
-
     // It is okay to import devDependencies in tests.
     'import/no-extraneous-dependencies': [2, { devDependencies: true }],
   },

From a6da4bb5b2b7997affe21da6a1bf9487722b53c8 Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Tue, 5 Jul 2016 13:36:21 -0700
Subject: [PATCH 0752/1591] [eslint config] [react] [breaking] enable aria
 rules:

 - `jsx-a11y/aria-props`
 - `jsx-a11y/aria-proptypes`
 - `jsx-a11y/aria-unsupported-elements`
 - `jsx-a11y/role-has-required-aria-props`
 - `jsx-a11y/role-supports-aria-props`
---
 packages/eslint-config-airbnb/rules/react-a11y.js | 15 +++++----------
 1 file changed, 5 insertions(+), 10 deletions(-)

diff --git a/packages/eslint-config-airbnb/rules/react-a11y.js b/packages/eslint-config-airbnb/rules/react-a11y.js
index 4b19fd0748..bcfc8251ba 100644
--- a/packages/eslint-config-airbnb/rules/react-a11y.js
+++ b/packages/eslint-config-airbnb/rules/react-a11y.js
@@ -12,20 +12,17 @@ module.exports = {
     'jsx-a11y/aria-role': 2,
 
     // Enforce all aria-* props are valid.
-    // TODO: enable
     // https://github.com/evcohen/eslint-plugin-jsx-a11y/blob/master/docs/rules/aria-props.md
-    'jsx-a11y/aria-props': 0,
+    'jsx-a11y/aria-props': 2,
 
     // Enforce ARIA state and property values are valid.
-    // TODO: enable
     // https://github.com/evcohen/eslint-plugin-jsx-a11y/blob/master/docs/rules/aria-proptypes.md
-    'jsx-a11y/aria-proptypes': 0,
+    'jsx-a11y/aria-proptypes': 2,
 
     // Enforce that elements that do not support ARIA roles, states, and
     // properties do not have those attributes.
-    // TODO: enable
     // https://github.com/evcohen/eslint-plugin-jsx-a11y/blob/master/docs/rules/aria-unsupported-elements.md
-    'jsx-a11y/aria-unsupported-elements': 0,
+    'jsx-a11y/aria-unsupported-elements': 2,
 
     // disallow href "#"
     // TODO: enable
@@ -69,15 +66,13 @@ module.exports = {
 
     // Enforce that elements with ARIA roles must have all required attributes
     // for that role.
-    // TODO: enable
     // https://github.com/evcohen/eslint-plugin-jsx-a11y/blob/master/docs/rules/role-has-required-aria-props.md
-    'jsx-a11y/role-has-required-aria-props': 0,
+    'jsx-a11y/role-has-required-aria-props': 2,
 
     // Enforce that elements with explicit or implicit roles defined contain
     // only aria-* properties supported by that role.
-    // TODO: enable
     // https://github.com/evcohen/eslint-plugin-jsx-a11y/blob/master/docs/rules/role-supports-aria-props.md
-    'jsx-a11y/role-supports-aria-props': 0,
+    'jsx-a11y/role-supports-aria-props': 2,
 
     // Enforce tabIndex value is not greater than zero.
     // TODO: evaluate

From b4d8543f120ba761ae7f39caf850c1e4efdc2727 Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Tue, 5 Jul 2016 13:38:57 -0700
Subject: [PATCH 0753/1591] [eslint config] [react] [breaking] enable jsx-a11y
 rules:

 - `jsx-a11y/heading-has-content`
 - `jsx-a11y/html-has-lang`
 - `jsx-a11y/lang`
 - `jsx-a11y/no-marquee`
 - `jsx-a11y/scope`
 - `jsx-a11y/href-no-hash`
 - `jsx-a11y/label-has-for`
---
 .../eslint-config-airbnb/rules/react-a11y.js  | 23 +++++++------------
 1 file changed, 8 insertions(+), 15 deletions(-)

diff --git a/packages/eslint-config-airbnb/rules/react-a11y.js b/packages/eslint-config-airbnb/rules/react-a11y.js
index bcfc8251ba..bc2b4cff74 100644
--- a/packages/eslint-config-airbnb/rules/react-a11y.js
+++ b/packages/eslint-config-airbnb/rules/react-a11y.js
@@ -25,9 +25,8 @@ module.exports = {
     'jsx-a11y/aria-unsupported-elements': 2,
 
     // disallow href "#"
-    // TODO: enable
     // https://github.com/evcohen/eslint-plugin-jsx-a11y/blob/master/docs/rules/href-no-hash.md
-    'jsx-a11y/href-no-hash': [0, ['a']],
+    'jsx-a11y/href-no-hash': [2, ['a']],
 
     // Require <img> to have a non-empty `alt` prop, or role="presentation"
     // https://github.com/evcohen/eslint-plugin-jsx-a11y/blob/master/docs/rules/img-has-alt.md
@@ -38,12 +37,11 @@ module.exports = {
     'jsx-a11y/img-redundant-alt': 2,
 
     // require that JSX labels use "htmlFor"
-    // TODO: enable
     // https://github.com/evcohen/eslint-plugin-jsx-a11y/blob/master/docs/rules/label-has-for.md
-    'jsx-a11y/label-has-for': [0, ['label']],
+    'jsx-a11y/label-has-for': [2, ['label']],
 
     // require that mouseover/out come with focus/blur, for keyboard-only users
-    // TODO: enable?
+    // TODO: evaluate
     // https://github.com/evcohen/eslint-plugin-jsx-a11y/blob/master/docs/rules/mouse-events-have-key-events.md
     'jsx-a11y/mouse-events-have-key-events': 0,
 
@@ -81,27 +79,22 @@ module.exports = {
 
     // ensure <hX> tags have content and are not aria-hidden
     // https://github.com/evcohen/eslint-plugin-jsx-a11y/blob/master/docs/rules/heading-has-content.md
-    // TODO: enable
-    'jsx-a11y/heading-has-content': [0, ['']],
+    'jsx-a11y/heading-has-content': [2, ['']],
 
     // require HTML elements to have a "lang" prop
     // https://github.com/evcohen/eslint-plugin-jsx-a11y/blob/master/docs/rules/html-has-lang.md
-    // TODO: enable
-    'jsx-a11y/html-has-lang': 0,
+    'jsx-a11y/html-has-lang': 2,
 
     // require HTML element's lang prop to be valid
     // https://github.com/evcohen/eslint-plugin-jsx-a11y/blob/master/docs/rules/lang.md
-    // TODO: enable
-    'jsx-a11y/lang': 0,
+    'jsx-a11y/lang': 2,
 
     // prevent marquee elements
     // https://github.com/evcohen/eslint-plugin-jsx-a11y/blob/master/docs/rules/no-marquee.md
-    // TODO: enable, pardner
-    'jsx-a11y/no-marquee': 0,
+    'jsx-a11y/no-marquee': 2,
 
     // only allow <th> to have the "scope" attr
     // https://github.com/evcohen/eslint-plugin-jsx-a11y/blob/master/docs/rules/scope.md
-    // TODO: enable
-    'jsx-a11y/scope': 0,
+    'jsx-a11y/scope': 2,
   },
 };

From 53b4173b0432cfca0b2b59a1849616f4d672c8eb Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Wed, 6 Jul 2016 18:13:13 -0700
Subject: [PATCH 0754/1591] [guide] [es5] Remove ES5 guide and mark it
 deprecated.

Fixes #941.
---
 README.md     |    2 +-
 es5/README.md | 1753 -------------------------------------------------
 2 files changed, 1 insertion(+), 1754 deletions(-)
 delete mode 100644 es5/README.md

diff --git a/README.md b/README.md
index ee0871b496..e57760eb6e 100644
--- a/README.md
+++ b/README.md
@@ -7,7 +7,7 @@
 [![Gitter](https://badges.gitter.im/Join Chat.svg)](https://gitter.im/airbnb/javascript?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge)
 
 Other Style Guides
- - [ES5](es5/)
+ - [ES5 (Deprecated)](https://github.com/airbnb/javascript/tree/es5-deprecated/es5)
  - [React](react/)
  - [CSS & Sass](https://github.com/airbnb/css)
  - [Ruby](https://github.com/airbnb/ruby)
diff --git a/es5/README.md b/es5/README.md
deleted file mode 100644
index 4dcbac061b..0000000000
--- a/es5/README.md
+++ /dev/null
@@ -1,1753 +0,0 @@
-[![Gitter](https://badges.gitter.im/Join Chat.svg)](https://gitter.im/airbnb/javascript?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge)
-
-# Airbnb JavaScript Style Guide() {
-
-*A mostly reasonable approach to JavaScript*
-
-
-## Table of Contents
-
-  1. [Types](#types)
-  1. [Objects](#objects)
-  1. [Arrays](#arrays)
-  1. [Strings](#strings)
-  1. [Functions](#functions)
-  1. [Properties](#properties)
-  1. [Variables](#variables)
-  1. [Hoisting](#hoisting)
-  1. [Comparison Operators & Equality](#comparison-operators--equality)
-  1. [Blocks](#blocks)
-  1. [Comments](#comments)
-  1. [Whitespace](#whitespace)
-  1. [Commas](#commas)
-  1. [Semicolons](#semicolons)
-  1. [Type Casting & Coercion](#type-casting--coercion)
-  1. [Naming Conventions](#naming-conventions)
-  1. [Accessors](#accessors)
-  1. [Constructors](#constructors)
-  1. [Events](#events)
-  1. [Modules](#modules)
-  1. [jQuery](#jquery)
-  1. [ECMAScript 5 Compatibility](#ecmascript-5-compatibility)
-  1. [Testing](#testing)
-  1. [Performance](#performance)
-  1. [Resources](#resources)
-  1. [In the Wild](#in-the-wild)
-  1. [Translation](#translation)
-  1. [The JavaScript Style Guide Guide](#the-javascript-style-guide-guide)
-  1. [Chat With Us About Javascript](#chat-with-us-about-javascript)
-  1. [Contributors](#contributors)
-  1. [License](#license)
-
-## Types
-
-  - **Primitives**: When you access a primitive type you work directly on its value.
-
-    + `string`
-    + `number`
-    + `boolean`
-    + `null`
-    + `undefined`
-
-    ```javascript
-    var foo = 1;
-    var bar = foo;
-
-    bar = 9;
-
-    console.log(foo, bar); // => 1, 9
-    ```
-  - **Complex**: When you access a complex type you work on a reference to its value.
-
-    + `object`
-    + `array`
-    + `function`
-
-    ```javascript
-    var foo = [1, 2];
-    var bar = foo;
-
-    bar[0] = 9;
-
-    console.log(foo[0], bar[0]); // => 9, 9
-    ```
-
-**[⬆ back to top](#table-of-contents)**
-
-## Objects
-
-  - Use the literal syntax for object creation.
-
-    ```javascript
-    // bad
-    var item = new Object();
-
-    // good
-    var item = {};
-    ```
-
-  - Don't use [reserved words](http://es5.github.io/#x7.6.1) as keys. It won't work in IE8. [More info](https://github.com/airbnb/javascript/issues/61).
-
-    ```javascript
-    // bad
-    var superman = {
-      default: { clark: 'kent' },
-      private: true
-    };
-
-    // good
-    var superman = {
-      defaults: { clark: 'kent' },
-      hidden: true
-    };
-    ```
-
-  - Use readable synonyms in place of reserved words.
-
-    ```javascript
-    // bad
-    var superman = {
-      class: 'alien'
-    };
-
-    // bad
-    var superman = {
-      klass: 'alien'
-    };
-
-    // good
-    var superman = {
-      type: 'alien'
-    };
-    ```
-
-**[⬆ back to top](#table-of-contents)**
-
-## Arrays
-
-  - Use the literal syntax for array creation.
-
-    ```javascript
-    // bad
-    var items = new Array();
-
-    // good
-    var items = [];
-    ```
-
-  - Use Array#push instead of direct assignment to add items to an array.
-
-    ```javascript
-    var someStack = [];
-
-
-    // bad
-    someStack[someStack.length] = 'abracadabra';
-
-    // good
-    someStack.push('abracadabra');
-    ```
-
-  - When you need to copy an array use Array#slice. [jsPerf](http://jsperf.com/converting-arguments-to-an-array/7)
-
-    ```javascript
-    var len = items.length;
-    var itemsCopy = [];
-    var i;
-
-    // bad
-    for (i = 0; i < len; i++) {
-      itemsCopy[i] = items[i];
-    }
-
-    // good
-    itemsCopy = items.slice();
-    ```
-
-  - To convert an array-like object to an array, use Array#slice.
-
-    ```javascript
-    function trigger() {
-      var args = Array.prototype.slice.call(arguments);
-      ...
-    }
-    ```
-
-**[⬆ back to top](#table-of-contents)**
-
-
-## Strings
-
-  - Use single quotes `''` for strings.
-
-    ```javascript
-    // bad
-    var name = "Bob Parr";
-
-    // good
-    var name = 'Bob Parr';
-
-    // bad
-    var fullName = "Bob " + this.lastName;
-
-    // good
-    var fullName = 'Bob ' + this.lastName;
-    ```
-
-  - Strings longer than 100 characters should be written across multiple lines using string concatenation.
-  - Note: If overused, long strings with concatenation could impact performance. [jsPerf](http://jsperf.com/ya-string-concat) & [Discussion](https://github.com/airbnb/javascript/issues/40).
-
-    ```javascript
-    // bad
-    var errorMessage = 'This is a super long error that was thrown because of Batman. When you stop to think about how Batman had anything to do with this, you would get nowhere fast.';
-
-    // bad
-    var errorMessage = 'This is a super long error that was thrown because \
-    of Batman. When you stop to think about how Batman had anything to do \
-    with this, you would get nowhere \
-    fast.';
-
-    // good
-    var errorMessage = 'This is a super long error that was thrown because ' +
-      'of Batman. When you stop to think about how Batman had anything to do ' +
-      'with this, you would get nowhere fast.';
-    ```
-
-  - When programmatically building up a string, use Array#join instead of string concatenation. Mostly for IE: [jsPerf](http://jsperf.com/string-vs-array-concat/2).
-
-    ```javascript
-    var items;
-    var messages;
-    var length;
-    var i;
-
-    messages = [{
-      state: 'success',
-      message: 'This one worked.'
-    }, {
-      state: 'success',
-      message: 'This one worked as well.'
-    }, {
-      state: 'error',
-      message: 'This one did not work.'
-    }];
-
-    length = messages.length;
-
-    // bad
-    function inbox(messages) {
-      items = '<ul>';
-
-      for (i = 0; i < length; i++) {
-        items += '<li>' + messages[i].message + '</li>';
-      }
-
-      return items + '</ul>';
-    }
-
-    // good
-    function inbox(messages) {
-      items = [];
-
-      for (i = 0; i < length; i++) {
-        // use direct assignment in this case because we're micro-optimizing.
-        items[i] = '<li>' + messages[i].message + '</li>';
-      }
-
-      return '<ul>' + items.join('') + '</ul>';
-    }
-    ```
-
-**[⬆ back to top](#table-of-contents)**
-
-
-## Functions
-
-  - Function expressions:
-
-    ```javascript
-    // anonymous function expression
-    var anonymous = function () {
-      return true;
-    };
-
-    // named function expression
-    var named = function named() {
-      return true;
-    };
-
-    // immediately-invoked function expression (IIFE)
-    (function () {
-      console.log('Welcome to the Internet. Please follow me.');
-    }());
-    ```
-
-  - Never declare a function in a non-function block (if, while, etc). Assign the function to a variable instead. Browsers will allow you to do it, but they all interpret it differently, which is bad news bears.
-  - **Note:** ECMA-262 defines a `block` as a list of statements. A function declaration is not a statement. [Read ECMA-262's note on this issue](http://www.ecma-international.org/publications/files/ECMA-ST/Ecma-262.pdf#page=97).
-
-    ```javascript
-    // bad
-    if (currentUser) {
-      function test() {
-        console.log('Nope.');
-      }
-    }
-
-    // good
-    var test;
-    if (currentUser) {
-      test = function test() {
-        console.log('Yup.');
-      };
-    }
-    ```
-
-  - Never name a parameter `arguments`. This will take precedence over the `arguments` object that is given to every function scope.
-
-    ```javascript
-    // bad
-    function nope(name, options, arguments) {
-      // ...stuff...
-    }
-
-    // good
-    function yup(name, options, args) {
-      // ...stuff...
-    }
-    ```
-
-**[⬆ back to top](#table-of-contents)**
-
-
-
-## Properties
-
-  - Use dot notation when accessing properties.
-
-    ```javascript
-    var luke = {
-      jedi: true,
-      age: 28
-    };
-
-    // bad
-    var isJedi = luke['jedi'];
-
-    // good
-    var isJedi = luke.jedi;
-    ```
-
-  - Use subscript notation `[]` when accessing properties with a variable.
-
-    ```javascript
-    var luke = {
-      jedi: true,
-      age: 28
-    };
-
-    function getProp(prop) {
-      return luke[prop];
-    }
-
-    var isJedi = getProp('jedi');
-    ```
-
-**[⬆ back to top](#table-of-contents)**
-
-
-## Variables
-
-  - Always use `var` to declare variables. Not doing so will result in global variables. We want to avoid polluting the global namespace. Captain Planet warned us of that.
-
-    ```javascript
-    // bad
-    superPower = new SuperPower();
-
-    // good
-    var superPower = new SuperPower();
-    ```
-
-  - Use one `var` declaration per variable.
-    It's easier to add new variable declarations this way, and you never have
-    to worry about swapping out a `;` for a `,` or introducing punctuation-only
-    diffs.
-
-    ```javascript
-    // bad
-    var items = getItems(),
-        goSportsTeam = true,
-        dragonball = 'z';
-
-    // bad
-    // (compare to above, and try to spot the mistake)
-    var items = getItems(),
-        goSportsTeam = true;
-        dragonball = 'z';
-
-    // good
-    var items = getItems();
-    var goSportsTeam = true;
-    var dragonball = 'z';
-    ```
-
-  - Declare unassigned variables last. This is helpful when later on you might need to assign a variable depending on one of the previous assigned variables.
-
-    ```javascript
-    // bad
-    var i, len, dragonball,
-        items = getItems(),
-        goSportsTeam = true;
-
-    // bad
-    var i;
-    var items = getItems();
-    var dragonball;
-    var goSportsTeam = true;
-    var len;
-
-    // good
-    var items = getItems();
-    var goSportsTeam = true;
-    var dragonball;
-    var length;
-    var i;
-    ```
-
-  - Assign variables at the top of their scope. This helps avoid issues with variable declaration and assignment hoisting related issues.
-
-    ```javascript
-    // bad
-    function () {
-      test();
-      console.log('doing stuff..');
-
-      //..other stuff..
-
-      var name = getName();
-
-      if (name === 'test') {
-        return false;
-      }
-
-      return name;
-    }
-
-    // good
-    function () {
-      var name = getName();
-
-      test();
-      console.log('doing stuff..');
-
-      //..other stuff..
-
-      if (name === 'test') {
-        return false;
-      }
-
-      return name;
-    }
-
-    // bad - unnecessary function call
-    function () {
-      var name = getName();
-
-      if (!arguments.length) {
-        return false;
-      }
-
-      this.setFirstName(name);
-
-      return true;
-    }
-
-    // good
-    function () {
-      var name;
-
-      if (!arguments.length) {
-        return false;
-      }
-
-      name = getName();
-      this.setFirstName(name);
-
-      return true;
-    }
-    ```
-
-**[⬆ back to top](#table-of-contents)**
-
-
-## Hoisting
-
-  - Variable declarations get hoisted to the top of their scope, but their assignment does not.
-
-    ```javascript
-    // we know this wouldn't work (assuming there
-    // is no notDefined global variable)
-    function example() {
-      console.log(notDefined); // => throws a ReferenceError
-    }
-
-    // creating a variable declaration after you
-    // reference the variable will work due to
-    // variable hoisting. Note: the assignment
-    // value of `true` is not hoisted.
-    function example() {
-      console.log(declaredButNotAssigned); // => undefined
-      var declaredButNotAssigned = true;
-    }
-
-    // The interpreter is hoisting the variable
-    // declaration to the top of the scope,
-    // which means our example could be rewritten as:
-    function example() {
-      var declaredButNotAssigned;
-      console.log(declaredButNotAssigned); // => undefined
-      declaredButNotAssigned = true;
-    }
-    ```
-
-  - Anonymous function expressions hoist their variable name, but not the function assignment.
-
-    ```javascript
-    function example() {
-      console.log(anonymous); // => undefined
-
-      anonymous(); // => TypeError anonymous is not a function
-
-      var anonymous = function () {
-        console.log('anonymous function expression');
-      };
-    }
-    ```
-
-  - Named function expressions hoist the variable name, not the function name or the function body.
-
-    ```javascript
-    function example() {
-      console.log(named); // => undefined
-
-      named(); // => TypeError named is not a function
-
-      superPower(); // => ReferenceError superPower is not defined
-
-      var named = function superPower() {
-        console.log('Flying');
-      };
-    }
-
-    // the same is true when the function name
-    // is the same as the variable name.
-    function example() {
-      console.log(named); // => undefined
-
-      named(); // => TypeError named is not a function
-
-      var named = function named() {
-        console.log('named');
-      }
-    }
-    ```
-
-  - Function declarations hoist their name and the function body.
-
-    ```javascript
-    function example() {
-      superPower(); // => Flying
-
-      function superPower() {
-        console.log('Flying');
-      }
-    }
-    ```
-
-  - For more information refer to [JavaScript Scoping & Hoisting](http://www.adequatelygood.com/2010/2/JavaScript-Scoping-and-Hoisting) by [Ben Cherry](http://www.adequatelygood.com/).
-
-**[⬆ back to top](#table-of-contents)**
-
-
-
-## Comparison Operators & Equality
-
-  - Use `===` and `!==` over `==` and `!=`.
-  - Conditional statements such as the `if` statement evaluate their expression using coercion with the `ToBoolean` abstract method and always follow these simple rules:
-
-    + **Objects** evaluate to **true**
-    + **Undefined** evaluates to **false**
-    + **Null** evaluates to **false**
-    + **Booleans** evaluate to **the value of the boolean**
-    + **Numbers** evaluate to **false** if **+0, -0, or NaN**, otherwise **true**
-    + **Strings** evaluate to **false** if an empty string `''`, otherwise **true**
-
-    ```javascript
-    if ([0]) {
-      // true
-      // An array is an object, objects evaluate to true
-    }
-    ```
-
-  - Use shortcuts.
-
-    ```javascript
-    // bad
-    if (name !== '') {
-      // ...stuff...
-    }
-
-    // good
-    if (name) {
-      // ...stuff...
-    }
-
-    // bad
-    if (collection.length > 0) {
-      // ...stuff...
-    }
-
-    // good
-    if (collection.length) {
-      // ...stuff...
-    }
-    ```
-
-  - For more information see [Truth Equality and JavaScript](http://javascriptweblog.wordpress.com/2011/02/07/truth-equality-and-javascript/#more-2108) by Angus Croll.
-
-**[⬆ back to top](#table-of-contents)**
-
-
-## Blocks
-
-  - Use braces with all multi-line blocks.
-
-    ```javascript
-    // bad
-    if (test)
-      return false;
-
-    // good
-    if (test) return false;
-
-    // good
-    if (test) {
-      return false;
-    }
-
-    // bad
-    function () { return false; }
-
-    // good
-    function () {
-      return false;
-    }
-    ```
-
-  - If you're using multi-line blocks with `if` and `else`, put `else` on the same line as your
-    `if` block's closing brace.
-
-    ```javascript
-    // bad
-    if (test) {
-      thing1();
-      thing2();
-    }
-    else {
-      thing3();
-    }
-
-    // good
-    if (test) {
-      thing1();
-      thing2();
-    } else {
-      thing3();
-    }
-    ```
-
-
-**[⬆ back to top](#table-of-contents)**
-
-
-## Comments
-
-  - Use `/** ... */` for multi-line comments. Include a description, specify types and values for all parameters and return values.
-
-    ```javascript
-    // bad
-    // make() returns a new element
-    // based on the passed in tag name
-    //
-    // @param {String} tag
-    // @return {Element} element
-    function make(tag) {
-
-      // ...stuff...
-
-      return element;
-    }
-
-    // good
-    /**
-     * make() returns a new element
-     * based on the passed in tag name
-     *
-     * @param {String} tag
-     * @return {Element} element
-     */
-    function make(tag) {
-
-      // ...stuff...
-
-      return element;
-    }
-    ```
-
-  - Use `//` for single line comments. Place single line comments on a newline above the subject of the comment. Put an empty line before the comment.
-
-    ```javascript
-    // bad
-    var active = true;  // is current tab
-
-    // good
-    // is current tab
-    var active = true;
-
-    // bad
-    function getType() {
-      console.log('fetching type...');
-      // set the default type to 'no type'
-      var type = this.type || 'no type';
-
-      return type;
-    }
-
-    // good
-    function getType() {
-      console.log('fetching type...');
-
-      // set the default type to 'no type'
-      var type = this.type || 'no type';
-
-      return type;
-    }
-    ```
-
-  - Prefixing your comments with `FIXME` or `TODO` helps other developers quickly understand if you're pointing out a problem that needs to be revisited, or if you're suggesting a solution to the problem that needs to be implemented. These are different than regular comments because they are actionable. The actions are `FIXME -- need to figure this out` or `TODO -- need to implement`.
-
-  - Use `// FIXME:` to annotate problems.
-
-    ```javascript
-    function Calculator() {
-
-      // FIXME: shouldn't use a global here
-      total = 0;
-
-      return this;
-    }
-    ```
-
-  - Use `// TODO:` to annotate solutions to problems.
-
-    ```javascript
-    function Calculator() {
-
-      // TODO: total should be configurable by an options param
-      this.total = 0;
-
-      return this;
-    }
-    ```
-
-**[⬆ back to top](#table-of-contents)**
-
-
-## Whitespace
-
-  - Use soft tabs set to 2 spaces.
-
-    ```javascript
-    // bad
-    function () {
-    ∙∙∙∙var name;
-    }
-
-    // bad
-    function () {
-    ∙var name;
-    }
-
-    // good
-    function () {
-    ∙∙var name;
-    }
-    ```
-
-  - Place 1 space before the leading brace.
-
-    ```javascript
-    // bad
-    function test(){
-      console.log('test');
-    }
-
-    // good
-    function test() {
-      console.log('test');
-    }
-
-    // bad
-    dog.set('attr',{
-      age: '1 year',
-      breed: 'Bernese Mountain Dog'
-    });
-
-    // good
-    dog.set('attr', {
-      age: '1 year',
-      breed: 'Bernese Mountain Dog'
-    });
-    ```
-
-  - Place 1 space before the opening parenthesis in control statements (`if`, `while` etc.). Place no space before the argument list in function calls and declarations.
-
-    ```javascript
-    // bad
-    if(isJedi) {
-      fight ();
-    }
-
-    // good
-    if (isJedi) {
-      fight();
-    }
-
-    // bad
-    function fight () {
-      console.log ('Swooosh!');
-    }
-
-    // good
-    function fight() {
-      console.log('Swooosh!');
-    }
-    ```
-
-  - Set off operators with spaces.
-
-    ```javascript
-    // bad
-    var x=y+5;
-
-    // good
-    var x = y + 5;
-    ```
-
-  - End files with a single newline character.
-
-    ```javascript
-    // bad
-    (function (global) {
-      // ...stuff...
-    })(this);
-    ```
-
-    ```javascript
-    // bad
-    (function (global) {
-      // ...stuff...
-    })(this);↵
-    ↵
-    ```
-
-    ```javascript
-    // good
-    (function (global) {
-      // ...stuff...
-    })(this);↵
-    ```
-
-  - Use indentation when making long method chains. Use a leading dot, which
-    emphasizes that the line is a method call, not a new statement.
-
-    ```javascript
-    // bad
-    $('#items').find('.selected').highlight().end().find('.open').updateCount();
-
-    // bad
-    $('#items').
-      find('.selected').
-        highlight().
-        end().
-      find('.open').
-        updateCount();
-
-    // good
-    $('#items')
-      .find('.selected')
-        .highlight()
-        .end()
-      .find('.open')
-        .updateCount();
-
-    // bad
-    var leds = stage.selectAll('.led').data(data).enter().append('svg:svg').classed('led', true)
-        .attr('width', (radius + margin) * 2).append('svg:g')
-        .attr('transform', 'translate(' + (radius + margin) + ',' + (radius + margin) + ')')
-        .call(tron.led);
-
-    // good
-    var leds = stage.selectAll('.led')
-        .data(data)
-      .enter().append('svg:svg')
-        .classed('led', true)
-        .attr('width', (radius + margin) * 2)
-      .append('svg:g')
-        .attr('transform', 'translate(' + (radius + margin) + ',' + (radius + margin) + ')')
-        .call(tron.led);
-    ```
-
-  - Leave a blank line after blocks and before the next statement
-
-    ```javascript
-    // bad
-    if (foo) {
-      return bar;
-    }
-    return baz;
-
-    // good
-    if (foo) {
-      return bar;
-    }
-
-    return baz;
-
-    // bad
-    var obj = {
-      foo: function () {
-      },
-      bar: function () {
-      }
-    };
-    return obj;
-
-    // good
-    var obj = {
-      foo: function () {
-      },
-
-      bar: function () {
-      }
-    };
-
-    return obj;
-    ```
-
-
-**[⬆ back to top](#table-of-contents)**
-
-## Commas
-
-  - Leading commas: **Nope.**
-
-    ```javascript
-    // bad
-    var story = [
-        once
-      , upon
-      , aTime
-    ];
-
-    // good
-    var story = [
-      once,
-      upon,
-      aTime
-    ];
-
-    // bad
-    var hero = {
-        firstName: 'Bob'
-      , lastName: 'Parr'
-      , heroName: 'Mr. Incredible'
-      , superPower: 'strength'
-    };
-
-    // good
-    var hero = {
-      firstName: 'Bob',
-      lastName: 'Parr',
-      heroName: 'Mr. Incredible',
-      superPower: 'strength'
-    };
-    ```
-
-  - Additional trailing comma: **Nope.** This can cause problems with IE6/7 and IE9 if it's in quirksmode. Also, in some implementations of ES3 would add length to an array if it had an additional trailing comma. This was clarified in ES5 ([source](http://es5.github.io/#D)):
-
-  > Edition 5 clarifies the fact that a trailing comma at the end of an ArrayInitialiser does not add to the length of the array. This is not a semantic change from Edition 3 but some implementations may have previously misinterpreted this.
-
-    ```javascript
-    // bad
-    var hero = {
-      firstName: 'Kevin',
-      lastName: 'Flynn',
-    };
-
-    var heroes = [
-      'Batman',
-      'Superman',
-    ];
-
-    // good
-    var hero = {
-      firstName: 'Kevin',
-      lastName: 'Flynn'
-    };
-
-    var heroes = [
-      'Batman',
-      'Superman'
-    ];
-    ```
-
-**[⬆ back to top](#table-of-contents)**
-
-
-## Semicolons
-
-  - **Yup.**
-
-    ```javascript
-    // bad
-    (function () {
-      var name = 'Skywalker'
-      return name
-    })()
-
-    // good
-    (function () {
-      var name = 'Skywalker';
-      return name;
-    })();
-
-    // good (guards against the function becoming an argument when two files with IIFEs are concatenated)
-    ;(function () {
-      var name = 'Skywalker';
-      return name;
-    })();
-    ```
-
-    [Read more](http://stackoverflow.com/a/7365214/1712802).
-
-**[⬆ back to top](#table-of-contents)**
-
-
-## Type Casting & Coercion
-
-  - Perform type coercion at the beginning of the statement.
-  - Strings:
-
-    ```javascript
-    //  => this.reviewScore = 9;
-
-    // bad
-    var totalScore = this.reviewScore + '';
-
-    // good
-    var totalScore = '' + this.reviewScore;
-
-    // bad
-    var totalScore = '' + this.reviewScore + ' total score';
-
-    // good
-    var totalScore = this.reviewScore + ' total score';
-    ```
-
-  - Use `parseInt` for Numbers and always with a radix for type casting.
-
-    ```javascript
-    var inputValue = '4';
-
-    // bad
-    var val = new Number(inputValue);
-
-    // bad
-    var val = +inputValue;
-
-    // bad
-    var val = inputValue >> 0;
-
-    // bad
-    var val = parseInt(inputValue);
-
-    // good
-    var val = Number(inputValue);
-
-    // good
-    var val = parseInt(inputValue, 10);
-    ```
-
-  - If for whatever reason you are doing something wild and `parseInt` is your bottleneck and need to use Bitshift for [performance reasons](http://jsperf.com/coercion-vs-casting/3), leave a comment explaining why and what you're doing.
-
-    ```javascript
-    // good
-    /**
-     * parseInt was the reason my code was slow.
-     * Bitshifting the String to coerce it to a
-     * Number made it a lot faster.
-     */
-    var val = inputValue >> 0;
-    ```
-
-  - **Note:** Be careful when using bitshift operations. Numbers are represented as [64-bit values](http://es5.github.io/#x4.3.19), but Bitshift operations always return a 32-bit integer ([source](http://es5.github.io/#x11.7)). Bitshift can lead to unexpected behavior for integer values larger than 32 bits. [Discussion](https://github.com/airbnb/javascript/issues/109). Largest signed 32-bit Int is 2,147,483,647:
-
-    ```javascript
-    2147483647 >> 0 //=> 2147483647
-    2147483648 >> 0 //=> -2147483648
-    2147483649 >> 0 //=> -2147483647
-    ```
-
-  - Booleans:
-
-    ```javascript
-    var age = 0;
-
-    // bad
-    var hasAge = new Boolean(age);
-
-    // good
-    var hasAge = Boolean(age);
-
-    // good
-    var hasAge = !!age;
-    ```
-
-**[⬆ back to top](#table-of-contents)**
-
-
-## Naming Conventions
-
-  - Avoid single letter names. Be descriptive with your naming.
-
-    ```javascript
-    // bad
-    function q() {
-      // ...stuff...
-    }
-
-    // good
-    function query() {
-      // ..stuff..
-    }
-    ```
-
-  - Use camelCase when naming objects, functions, and instances.
-
-    ```javascript
-    // bad
-    var OBJEcttsssss = {};
-    var this_is_my_object = {};
-    var o = {};
-    function c() {}
-
-    // good
-    var thisIsMyObject = {};
-    function thisIsMyFunction() {}
-    ```
-
-  - Use PascalCase when naming constructors or classes.
-
-    ```javascript
-    // bad
-    function user(options) {
-      this.name = options.name;
-    }
-
-    var bad = new user({
-      name: 'nope'
-    });
-
-    // good
-    function User(options) {
-      this.name = options.name;
-    }
-
-    var good = new User({
-      name: 'yup'
-    });
-    ```
-
-  - Do not use trailing or leading underscores.
-
-  > Why? JavaScript does not have the concept of privacy in terms of properties or methods. Although a leading underscore is a common convention to mean “private”, in fact, these properties are fully public, and as such, are part of your public API contract. This convention might lead developers to wrongly think that a change won't count as breaking, or that tests aren't needed. tl;dr: if you want something to be “private”, it must not be observably present.
-
-    ```javascript
-    // bad
-    this.__firstName__ = 'Panda';
-    this.firstName_ = 'Panda';
-    this._firstName = 'Panda';
-
-    // good
-    this.firstName = 'Panda';
-    ```
-
-  - Don't save references to this. Use Function#bind.
-
-    ```javascript
-    // bad
-    function () {
-      var self = this;
-      return function () {
-        console.log(self);
-      };
-    }
-
-    // bad
-    function () {
-      var that = this;
-      return function () {
-        console.log(that);
-      };
-    }
-
-    // bad
-    function () {
-      var _this = this;
-      return function () {
-        console.log(_this);
-      };
-    }
-
-    // good
-    function () {
-      return function () {
-        console.log(this);
-      }.bind(this);
-    }
-    ```
-
-  - Name your functions. This is helpful for stack traces.
-
-    ```javascript
-    // bad
-    var log = function (msg) {
-      console.log(msg);
-    };
-
-    // good
-    var log = function log(msg) {
-      console.log(msg);
-    };
-    ```
-
-  - **Note:** IE8 and below exhibit some quirks with named function expressions.  See [http://kangax.github.io/nfe/](http://kangax.github.io/nfe/) for more info.
-
-  - If your file exports a single class, your filename should be exactly the name of the class.
-    ```javascript
-    // file contents
-    class CheckBox {
-      // ...
-    }
-    module.exports = CheckBox;
-
-    // in some other file
-    // bad
-    var CheckBox = require('./checkBox');
-
-    // bad
-    var CheckBox = require('./check_box');
-
-    // good
-    var CheckBox = require('./CheckBox');
-    ```
-
-**[⬆ back to top](#table-of-contents)**
-
-
-## Accessors
-
-  - Accessor functions for properties are not required.
-  - If you do make accessor functions use getVal() and setVal('hello').
-
-    ```javascript
-    // bad
-    dragon.age();
-
-    // good
-    dragon.getAge();
-
-    // bad
-    dragon.age(25);
-
-    // good
-    dragon.setAge(25);
-    ```
-
-  - If the property is a boolean, use isVal() or hasVal().
-
-    ```javascript
-    // bad
-    if (!dragon.age()) {
-      return false;
-    }
-
-    // good
-    if (!dragon.hasAge()) {
-      return false;
-    }
-    ```
-
-  - It's okay to create get() and set() functions, but be consistent.
-
-    ```javascript
-    function Jedi(options) {
-      options || (options = {});
-      var lightsaber = options.lightsaber || 'blue';
-      this.set('lightsaber', lightsaber);
-    }
-
-    Jedi.prototype.set = function set(key, val) {
-      this[key] = val;
-    };
-
-    Jedi.prototype.get = function get(key) {
-      return this[key];
-    };
-    ```
-
-**[⬆ back to top](#table-of-contents)**
-
-
-## Constructors
-
-  - Assign methods to the prototype object, instead of overwriting the prototype with a new object. Overwriting the prototype makes inheritance impossible: by resetting the prototype you'll overwrite the base!
-
-    ```javascript
-    function Jedi() {
-      console.log('new jedi');
-    }
-
-    // bad
-    Jedi.prototype = {
-      fight: function fight() {
-        console.log('fighting');
-      },
-
-      block: function block() {
-        console.log('blocking');
-      }
-    };
-
-    // good
-    Jedi.prototype.fight = function fight() {
-      console.log('fighting');
-    };
-
-    Jedi.prototype.block = function block() {
-      console.log('blocking');
-    };
-    ```
-
-  - Methods can return `this` to help with method chaining.
-
-    ```javascript
-    // bad
-    Jedi.prototype.jump = function jump() {
-      this.jumping = true;
-      return true;
-    };
-
-    Jedi.prototype.setHeight = function setHeight(height) {
-      this.height = height;
-    };
-
-    var luke = new Jedi();
-    luke.jump(); // => true
-    luke.setHeight(20); // => undefined
-
-    // good
-    Jedi.prototype.jump = function jump() {
-      this.jumping = true;
-      return this;
-    };
-
-    Jedi.prototype.setHeight = function setHeight(height) {
-      this.height = height;
-      return this;
-    };
-
-    var luke = new Jedi();
-
-    luke.jump()
-      .setHeight(20);
-    ```
-
-
-  - It's okay to write a custom toString() method, just make sure it works successfully and causes no side effects.
-
-    ```javascript
-    function Jedi(options) {
-      options || (options = {});
-      this.name = options.name || 'no name';
-    }
-
-    Jedi.prototype.getName = function getName() {
-      return this.name;
-    };
-
-    Jedi.prototype.toString = function toString() {
-      return 'Jedi - ' + this.getName();
-    };
-    ```
-
-**[⬆ back to top](#table-of-contents)**
-
-
-## Events
-
-  - When attaching data payloads to events (whether DOM events or something more proprietary like Backbone events), pass a hash instead of a raw value. This allows a subsequent contributor to add more data to the event payload without finding and updating every handler for the event. For example, instead of:
-
-    ```js
-    // bad
-    $(this).trigger('listingUpdated', listing.id);
-
-    ...
-
-    $(this).on('listingUpdated', function (e, listingId) {
-      // do something with listingId
-    });
-    ```
-
-    prefer:
-
-    ```js
-    // good
-    $(this).trigger('listingUpdated', { listingId : listing.id });
-
-    ...
-
-    $(this).on('listingUpdated', function (e, data) {
-      // do something with data.listingId
-    });
-    ```
-
-  **[⬆ back to top](#table-of-contents)**
-
-
-## Modules
-
-  - The module should start with a `!`. This ensures that if a malformed module forgets to include a final semicolon there aren't errors in production when the scripts get concatenated. [Explanation](https://github.com/airbnb/javascript/issues/44#issuecomment-13063933)
-  - The file should be named with camelCase, live in a folder with the same name, and match the name of the single export.
-  - Add a method called `noConflict()` that sets the exported module to the previous version and returns this one.
-  - Always declare `'use strict';` at the top of the module.
-
-    ```javascript
-    // fancyInput/fancyInput.js
-
-    !function (global) {
-      'use strict';
-
-      var previousFancyInput = global.FancyInput;
-
-      function FancyInput(options) {
-        this.options = options || {};
-      }
-
-      FancyInput.noConflict = function noConflict() {
-        global.FancyInput = previousFancyInput;
-        return FancyInput;
-      };
-
-      global.FancyInput = FancyInput;
-    }(this);
-    ```
-
-**[⬆ back to top](#table-of-contents)**
-
-
-## jQuery
-
-  - Prefix jQuery object variables with a `$`.
-
-    ```javascript
-    // bad
-    var sidebar = $('.sidebar');
-
-    // good
-    var $sidebar = $('.sidebar');
-    ```
-
-  - Cache jQuery lookups.
-
-    ```javascript
-    // bad
-    function setSidebar() {
-      $('.sidebar').hide();
-
-      // ...stuff...
-
-      $('.sidebar').css({
-        'background-color': 'pink'
-      });
-    }
-
-    // good
-    function setSidebar() {
-      var $sidebar = $('.sidebar');
-      $sidebar.hide();
-
-      // ...stuff...
-
-      $sidebar.css({
-        'background-color': 'pink'
-      });
-    }
-    ```
-
-  - For DOM queries use Cascading `$('.sidebar ul')` or parent > child `$('.sidebar > ul')`. [jsPerf](http://jsperf.com/jquery-find-vs-context-sel/16)
-  - Use `find` with scoped jQuery object queries.
-
-    ```javascript
-    // bad
-    $('ul', '.sidebar').hide();
-
-    // bad
-    $('.sidebar').find('ul').hide();
-
-    // good
-    $('.sidebar ul').hide();
-
-    // good
-    $('.sidebar > ul').hide();
-
-    // good
-    $sidebar.find('ul').hide();
-    ```
-
-**[⬆ back to top](#table-of-contents)**
-
-
-## ECMAScript 5 Compatibility
-
-  - Refer to [Kangax](https://twitter.com/kangax/)'s ES5 [compatibility table](http://kangax.github.com/es5-compat-table/).
-
-**[⬆ back to top](#table-of-contents)**
-
-
-## Testing
-
-  - **Yup.**
-
-    ```javascript
-    function () {
-      return true;
-    }
-    ```
-
-**[⬆ back to top](#table-of-contents)**
-
-
-## Performance
-
-  - [On Layout & Web Performance](http://kellegous.com/j/2013/01/26/layout-performance/)
-  - [String vs Array Concat](http://jsperf.com/string-vs-array-concat/2)
-  - [Try/Catch Cost In a Loop](http://jsperf.com/try-catch-in-loop-cost)
-  - [Bang Function](http://jsperf.com/bang-function)
-  - [jQuery Find vs Context, Selector](http://jsperf.com/jquery-find-vs-context-sel/13)
-  - [innerHTML vs textContent for script text](http://jsperf.com/innerhtml-vs-textcontent-for-script-text)
-  - [Long String Concatenation](http://jsperf.com/ya-string-concat)
-  - Loading...
-
-**[⬆ back to top](#table-of-contents)**
-
-
-## Resources
-
-
-**Read This**
-
-  - [Annotated ECMAScript 5.1](http://es5.github.com/)
-
-**Tools**
-
-  - Code Style Linters
-    + [JSHint](http://www.jshint.com/) - [Airbnb Style .jshintrc](https://github.com/airbnb/javascript/blob/master/linters/.jshintrc)
-    + [JSCS](https://github.com/jscs-dev/node-jscs) - [Airbnb Style Preset](https://github.com/jscs-dev/node-jscs/blob/master/presets/airbnb.json)
-
-**Other Style Guides**
-
-  - [Google JavaScript Style Guide](http://google-styleguide.googlecode.com/svn/trunk/javascriptguide.xml)
-  - [jQuery Core Style Guidelines](http://docs.jquery.com/JQuery_Core_Style_Guidelines)
-  - [Principles of Writing Consistent, Idiomatic JavaScript](https://github.com/rwldrn/idiomatic.js/)
-  - [JavaScript Standard Style](https://github.com/feross/standard)
-
-**Other Styles**
-
-  - [Naming this in nested functions](https://gist.github.com/4135065) - Christian Johansen
-  - [Conditional Callbacks](https://github.com/airbnb/javascript/issues/52) - Ross Allen
-  - [Popular JavaScript Coding Conventions on Github](http://sideeffect.kr/popularconvention/#javascript) - JeongHoon Byun
-  - [Multiple var statements in JavaScript, not superfluous](http://benalman.com/news/2012/05/multiple-var-statements-javascript/) - Ben Alman
-
-**Further Reading**
-
-  - [Understanding JavaScript Closures](http://javascriptweblog.wordpress.com/2010/10/25/understanding-javascript-closures/) - Angus Croll
-  - [Basic JavaScript for the impatient programmer](http://www.2ality.com/2013/06/basic-javascript.html) - Dr. Axel Rauschmayer
-  - [You Might Not Need jQuery](http://youmightnotneedjquery.com/) - Zack Bloom & Adam Schwartz
-  - [ES6 Features](https://github.com/lukehoban/es6features) - Luke Hoban
-  - [Frontend Guidelines](https://github.com/bendc/frontend-guidelines) - Benjamin De Cock
-
-**Books**
-
-  - [JavaScript: The Good Parts](http://www.amazon.com/JavaScript-Good-Parts-Douglas-Crockford/dp/0596517742) - Douglas Crockford
-  - [JavaScript Patterns](http://www.amazon.com/JavaScript-Patterns-Stoyan-Stefanov/dp/0596806752) - Stoyan Stefanov
-  - [Pro JavaScript Design Patterns](http://www.amazon.com/JavaScript-Design-Patterns-Recipes-Problem-Solution/dp/159059908X)  - Ross Harmes and Dustin Diaz
-  - [High Performance Web Sites: Essential Knowledge for Front-End Engineers](http://www.amazon.com/High-Performance-Web-Sites-Essential/dp/0596529309) - Steve Souders
-  - [Maintainable JavaScript](http://www.amazon.com/Maintainable-JavaScript-Nicholas-C-Zakas/dp/1449327680) - Nicholas C. Zakas
-  - [JavaScript Web Applications](http://www.amazon.com/JavaScript-Web-Applications-Alex-MacCaw/dp/144930351X) - Alex MacCaw
-  - [Pro JavaScript Techniques](http://www.amazon.com/Pro-JavaScript-Techniques-John-Resig/dp/1590597273) - John Resig
-  - [Smashing Node.js: JavaScript Everywhere](http://www.amazon.com/Smashing-Node-js-JavaScript-Everywhere-Magazine/dp/1119962595) - Guillermo Rauch
-  - [Secrets of the JavaScript Ninja](http://www.amazon.com/Secrets-JavaScript-Ninja-John-Resig/dp/193398869X) - John Resig and Bear Bibeault
-  - [Human JavaScript](http://humanjavascript.com/) - Henrik Joreteg
-  - [Superhero.js](http://superherojs.com/) - Kim Joar Bekkelund, Mads Mobæk, & Olav Bjorkoy
-  - [JSBooks](http://jsbooks.revolunet.com/) - Julien Bouquillon
-  - [Third Party JavaScript](http://manning.com/vinegar/) - Ben Vinegar and Anton Kovalyov
-  - [Effective JavaScript: 68 Specific Ways to Harness the Power of JavaScript](http://amzn.com/0321812182) - David Herman
-  - [Eloquent JavaScript](http://eloquentjavascript.net) - Marijn Haverbeke
-  - [You Don't Know JS](https://github.com/getify/You-Dont-Know-JS) - Kyle Simpson
-
-**Blogs**
-
-  - [DailyJS](http://dailyjs.com/)
-  - [JavaScript Weekly](http://javascriptweekly.com/)
-  - [JavaScript, JavaScript...](http://javascriptweblog.wordpress.com/)
-  - [Bocoup Weblog](http://weblog.bocoup.com/)
-  - [Adequately Good](http://www.adequatelygood.com/)
-  - [NCZOnline](http://www.nczonline.net/)
-  - [Perfection Kills](http://perfectionkills.com/)
-  - [Ben Alman](http://benalman.com/)
-  - [Dmitry Baranovskiy](http://dmitry.baranovskiy.com/)
-  - [Dustin Diaz](http://dustindiaz.com/)
-  - [nettuts](http://net.tutsplus.com/?s=javascript)
-
-**Podcasts**
-
-  - [JavaScript Jabber](http://devchat.tv/js-jabber/)
-
-
-**[⬆ back to top](#table-of-contents)**
-
-## In the Wild
-
-  This is a list of organizations that are using this style guide. Send us a pull request or open an issue and we'll add you to the list.
-
-  - **Aan Zee**: [AanZee/javascript](https://github.com/AanZee/javascript)
-  - **Adult Swim**: [adult-swim/javascript](https://github.com/adult-swim/javascript)
-  - **Airbnb**: [airbnb/javascript](https://github.com/airbnb/javascript)
-  - **Apartmint**: [apartmint/javascript](https://github.com/apartmint/javascript)
-  - **Avalara**: [avalara/javascript](https://github.com/avalara/javascript)
-  - **Billabong**: [billabong/javascript](https://github.com/billabong/javascript)
-  - **Compass Learning**: [compasslearning/javascript-style-guide](https://github.com/compasslearning/javascript-style-guide)
-  - **DailyMotion**: [dailymotion/javascript](https://github.com/dailymotion/javascript)
-  - **Digitpaint** [digitpaint/javascript](https://github.com/digitpaint/javascript)
-  - **Evernote**: [evernote/javascript-style-guide](https://github.com/evernote/javascript-style-guide)
-  - **ExactTarget**: [ExactTarget/javascript](https://github.com/ExactTarget/javascript)
-  - **Flexberry**: [Flexberry/javascript-style-guide](https://github.com/Flexberry/javascript-style-guide)
-  - **Gawker Media**: [gawkermedia/javascript](https://github.com/gawkermedia/javascript)
-  - **General Electric**: [GeneralElectric/javascript](https://github.com/GeneralElectric/javascript)
-  - **GoodData**: [gooddata/gdc-js-style](https://github.com/gooddata/gdc-js-style)
-  - **Grooveshark**: [grooveshark/javascript](https://github.com/grooveshark/javascript)
-  - **How About We**: [howaboutwe/javascript](https://github.com/howaboutwe/javascript)
-  - **InfoJobs**: [InfoJobs/JavaScript-Style-Guide](https://github.com/InfoJobs/JavaScript-Style-Guide)
-  - **Intent Media**: [intentmedia/javascript](https://github.com/intentmedia/javascript)
-  - **Jam3**: [Jam3/Javascript-Code-Conventions](https://github.com/Jam3/Javascript-Code-Conventions)
-  - **JSSolutions**: [JSSolutions/javascript](https://github.com/JSSolutions/javascript)
-  - **Kinetica Solutions**: [kinetica/javascript](https://github.com/kinetica/javascript)
-  - **Mighty Spring**: [mightyspring/javascript](https://github.com/mightyspring/javascript)
-  - **MinnPost**: [MinnPost/javascript](https://github.com/MinnPost/javascript)
-  - **ModCloth**: [modcloth/javascript](https://github.com/modcloth/javascript)
-  - **Money Advice Service**: [moneyadviceservice/javascript](https://github.com/moneyadviceservice/javascript)
-  - **Muber**: [muber/javascript](https://github.com/muber/javascript)
-  - **National Geographic**: [natgeo/javascript](https://github.com/natgeo/javascript)
-  - **National Park Service**: [nationalparkservice/javascript](https://github.com/nationalparkservice/javascript)
-  - **Nimbl3**: [nimbl3/javascript](https://github.com/nimbl3/javascript)
-  - **Nordic Venture Family**: [CodeDistillery/javascript](https://github.com/CodeDistillery/javascript)
-  - **Orion Health**: [orionhealth/javascript](https://github.com/orionhealth/javascript)
-  - **Peerby**: [Peerby/javascript](https://github.com/Peerby/javascript)
-  - **Razorfish**: [razorfish/javascript-style-guide](https://github.com/razorfish/javascript-style-guide)
-  - **reddit**: [reddit/styleguide/javascript](https://github.com/reddit/styleguide/tree/master/javascript)
-  - **REI**: [reidev/js-style-guide](https://github.com/reidev/js-style-guide)
-  - **Ripple**: [ripple/javascript-style-guide](https://github.com/ripple/javascript-style-guide)
-  - **SeekingAlpha**: [seekingalpha/javascript-style-guide](https://github.com/seekingalpha/javascript-style-guide)
-  - **Shutterfly**: [shutterfly/javascript](https://github.com/shutterfly/javascript)
-  - **StudentSphere**: [studentsphere/javascript](https://github.com/studentsphere/javascript)
-  - **Super**: [SuperJobs/javascript](https://github.com/SuperJobs/javascript)
-  - **SysGarage**: [sysgarage/javascript-style-guide](https://github.com/sysgarage/javascript-style-guide)
-  - **Target**: [target/javascript](https://github.com/target/javascript)
-  - **TheLadders**: [TheLadders/javascript](https://github.com/TheLadders/javascript)
-  - **T4R Technology**: [T4R-Technology/javascript](https://github.com/T4R-Technology/javascript)
-  - **VoxFeed**: [VoxFeed/javascript-style-guide](https://github.com/VoxFeed/javascript-style-guide)
-  - **Weggo**: [Weggo/javascript](https://github.com/Weggo/javascript)
-  - **Zillow**: [zillow/javascript](https://github.com/zillow/javascript)
-  - **ZocDoc**: [ZocDoc/javascript](https://github.com/ZocDoc/javascript)
-
-## Translation
-
-  This style guide is also available in other languages:
-
-  - ![br](https://raw.githubusercontent.com/gosquared/flags/master/flags/flags/shiny/24/Brazil.png) **Brazilian Portuguese**: [armoucar/javascript-style-guide](https://github.com/armoucar/javascript-style-guide)
-  - ![bg](https://raw.githubusercontent.com/gosquared/flags/master/flags/flags/shiny/24/Bulgaria.png) **Bulgarian**: [borislavvv/javascript](https://github.com/borislavvv/javascript)
-  - ![ca](https://raw.githubusercontent.com/fpmweb/javascript-style-guide/master/img/catala.png) **Catalan**: [fpmweb/javascript-style-guide](https://github.com/fpmweb/javascript-style-guide)
-  - ![tw](https://raw.githubusercontent.com/gosquared/flags/master/flags/flags/shiny/24/Taiwan.png) **Chinese(Traditional)**: [jigsawye/javascript](https://github.com/jigsawye/javascript)
-  - ![cn](https://raw.githubusercontent.com/gosquared/flags/master/flags/flags/shiny/24/China.png) **Chinese(Simplified)**: [sivan/javascript-style-guide](https://github.com/sivan/javascript-style-guide)
-  - ![fr](https://raw.githubusercontent.com/gosquared/flags/master/flags/flags/shiny/24/France.png) **French**: [nmussy/javascript-style-guide](https://github.com/nmussy/javascript-style-guide)
-  - ![de](https://raw.githubusercontent.com/gosquared/flags/master/flags/flags/shiny/24/Germany.png) **German**: [timofurrer/javascript-style-guide](https://github.com/timofurrer/javascript-style-guide)
-  - ![it](https://raw.githubusercontent.com/gosquared/flags/master/flags/flags/shiny/24/Italy.png) **Italian**: [sinkswim/javascript-style-guide](https://github.com/sinkswim/javascript-style-guide)
-  - ![jp](https://raw.githubusercontent.com/gosquared/flags/master/flags/flags/shiny/24/Japan.png) **Japanese**: [mitsuruog/javacript-style-guide](https://github.com/mitsuruog/javacript-style-guide)
-  - ![kr](https://raw.githubusercontent.com/gosquared/flags/master/flags/flags/shiny/24/South-Korea.png) **Korean**: [tipjs/javascript-style-guide](https://github.com/tipjs/javascript-style-guide)
-  - ![pl](https://raw.githubusercontent.com/gosquared/flags/master/flags/flags/shiny/24/Poland.png) **Polish**: [mjurczyk/javascript](https://github.com/mjurczyk/javascript)
-  - ![ru](https://raw.githubusercontent.com/gosquared/flags/master/flags/flags/shiny/24/Russia.png) **Russian**: [uprock/javascript](https://github.com/uprock/javascript)
-  - ![es](https://raw.githubusercontent.com/gosquared/flags/master/flags/flags/shiny/24/Spain.png) **Spanish**: [paolocarrasco/javascript-style-guide](https://github.com/paolocarrasco/javascript-style-guide)
-  - ![th](https://raw.githubusercontent.com/gosquared/flags/master/flags/flags/shiny/24/Thailand.png) **Thai**: [lvarayut/javascript-style-guide](https://github.com/lvarayut/javascript-style-guide)
-
-## The JavaScript Style Guide Guide
-
-  - [Reference](https://github.com/airbnb/javascript/wiki/The-JavaScript-Style-Guide-Guide)
-
-## Chat With Us About JavaScript
-
-  - Find us on [gitter](https://gitter.im/airbnb/javascript).
-
-## Contributors
-
-  - [View Contributors](https://github.com/airbnb/javascript/graphs/contributors)
-
-
-## License
-
-(The MIT License)
-
-Copyright (c) 2014 Airbnb
-
-Permission is hereby granted, free of charge, to any person obtaining
-a copy of this software and associated documentation files (the
-'Software'), to deal in the Software without restriction, including
-without limitation the rights to use, copy, modify, merge, publish,
-distribute, sublicense, and/or sell copies of the Software, and to
-permit persons to whom the Software is furnished to do so, subject to
-the following conditions:
-
-The above copyright notice and this permission notice shall be
-included in all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,
-EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
-IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
-CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
-TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
-SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-
-**[⬆ back to top](#table-of-contents)**
-
-# };

From a1edac348ad16a95259126884cd40216fa6d65dd Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Mon, 1 Aug 2016 14:05:32 -0700
Subject: [PATCH 0755/1591] [eslint config] [*] add `safe-publish-latest` to
 `prepublish`

---
 packages/eslint-config-airbnb-base/package.json | 3 ++-
 packages/eslint-config-airbnb/package.json      | 3 ++-
 2 files changed, 4 insertions(+), 2 deletions(-)

diff --git a/packages/eslint-config-airbnb-base/package.json b/packages/eslint-config-airbnb-base/package.json
index d453cc6798..a2934ca39b 100644
--- a/packages/eslint-config-airbnb-base/package.json
+++ b/packages/eslint-config-airbnb-base/package.json
@@ -6,7 +6,7 @@
   "scripts": {
     "lint": "eslint .",
     "tests-only": "babel-tape-runner ./test/test-*.js",
-    "prepublish": "(in-install || eslint-find-rules --unused) && (not-in-publish || npm test)",
+    "prepublish": "(in-install || eslint-find-rules --unused) && (not-in-publish || npm test) && safe-publish-latest",
     "pretest": "npm run --silent lint",
     "test": "npm run --silent tests-only",
     "travis": "npm run --silent test"
@@ -51,6 +51,7 @@
     "eslint-find-rules": "^1.11.1",
     "eslint-plugin-import": "^1.12.0",
     "in-publish": "^2.0.0",
+    "safe-publish-latest": "^1.0.1",
     "tape": "^4.6.0"
   },
   "peerDependencies": {
diff --git a/packages/eslint-config-airbnb/package.json b/packages/eslint-config-airbnb/package.json
index dccb7d0572..e08eb90921 100644
--- a/packages/eslint-config-airbnb/package.json
+++ b/packages/eslint-config-airbnb/package.json
@@ -6,7 +6,7 @@
   "scripts": {
     "lint": "eslint .",
     "tests-only": "babel-tape-runner ./test/test-*.js",
-    "prepublish": "(in-install || eslint-find-rules --unused) && (not-in-publish || npm test)",
+    "prepublish": "(in-install || eslint-find-rules --unused) && (not-in-publish || npm test) && safe-publish-latest",
     "pretest": "npm run --silent lint",
     "test": "npm run --silent tests-only",
     "travis": "cd ../eslint-config-airbnb-base && npm install && npm link && cd - && npm link eslint-config-airbnb-base && npm run --silent test ; npm unlink eslint-config-airbnb-base >/dev/null &"
@@ -57,6 +57,7 @@
     "eslint-plugin-react": "^6.0.0",
     "in-publish": "^2.0.0",
     "react": ">= 0.13.0",
+    "safe-publish-latest": "^1.0.1",
     "tape": "^4.6.0"
   },
   "peerDependencies": {

From 9ffadff1fdf85b327c6d4887b422ebeb904b641e Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Mon, 1 Aug 2016 13:53:30 -0700
Subject: [PATCH 0756/1591] [eslint config] v10.0.0

---
 packages/eslint-config-airbnb/CHANGELOG.md | 34 ++++++++++++++++++++++
 packages/eslint-config-airbnb/package.json |  2 +-
 2 files changed, 35 insertions(+), 1 deletion(-)

diff --git a/packages/eslint-config-airbnb/CHANGELOG.md b/packages/eslint-config-airbnb/CHANGELOG.md
index f2f71d1d36..f353154156 100644
--- a/packages/eslint-config-airbnb/CHANGELOG.md
+++ b/packages/eslint-config-airbnb/CHANGELOG.md
@@ -1,3 +1,37 @@
+10.0.0 / 2016-08-01
+==================
+- [breaking] enable jsx-a11y rules:
+ - `jsx-a11y/heading-has-content`
+ - `jsx-a11y/html-has-lang`
+ - `jsx-a11y/lang`
+ - `jsx-a11y/no-marquee`
+ - `jsx-a11y/scope`
+ - `jsx-a11y/href-no-hash`
+ - `jsx-a11y/label-has-for`
+- [breaking] enable aria rules:
+ - `jsx-a11y/aria-props`
+ - `jsx-a11y/aria-proptypes`
+ - `jsx-a11y/aria-unsupported-elements`
+ - `jsx-a11y/role-has-required-aria-props`
+ - `jsx-a11y/role-supports-aria-props`
+- [breaking] enable react rules:
+ - `react/jsx-filename-extension`
+ - `react/jsx-no-comment-textnodes`
+ - `react/jsx-no-target-blank`
+ - `react/require-extension`
+ - `react/no-render-return-value`
+ - `react/no-find-dom-node`
+ - `react/no-deprecated`
+- [deps] [breaking] update `eslint` to v3, `eslint-config-airbnb-base` to v5, `eslint-find-rules`, `eslint-plugin-import`, `eslint-plugin-jsx-a11y` to v2, `eslint-plugin-react` to v6, `tape`. drop node < 4 support.
+- [deps] update `eslint-config-airbnb-base`, `eslint-plugin-react`, `eslint-plugin-import`, `eslint-plugin-jsx-a11y`, `babel-tape-runner`, add `babel-preset-airbnb`. ensure react is `>=` 0.13.0
+- [patch] loosen `jsx-pascal-case` rule to allow all caps component names
+- [tests] stop testing < node 4
+- [tests] use `in-publish` because coffeescript screwed up the prepublish script for everyone
+- [tests] Only run `eslint-find-rules` on prepublish, not in tests
+- [tests] Even though the base config may not be up to date in the main package, let’s `npm link` the base package into the main one for the sake of travis-ci tests
+- [docs] update the peer dep install command to dynamically look up the right version numbers when installing peer deps
+- add `safe-publish-latest` to `prepublish`
+
 9.0.1 / 2016-05-08
 ==================
 - [patch] update `eslint-config-airbnb-base` to v3.0.1
diff --git a/packages/eslint-config-airbnb/package.json b/packages/eslint-config-airbnb/package.json
index e08eb90921..778632f071 100644
--- a/packages/eslint-config-airbnb/package.json
+++ b/packages/eslint-config-airbnb/package.json
@@ -1,6 +1,6 @@
 {
   "name": "eslint-config-airbnb",
-  "version": "9.0.1",
+  "version": "10.0.0",
   "description": "Airbnb's ESLint config, following our styleguide",
   "main": "index.js",
   "scripts": {

From 52a2da4182b9f1e61300a212e97f250a075c603b Mon Sep 17 00:00:00 2001
From: Joe Lencioni <joe.lencioni@airbnb.com>
Date: Tue, 2 Aug 2016 09:09:12 -0700
Subject: [PATCH 0757/1591] Add curlies around ref function body

The example we have here uses an implicit return, which is forbidden
when assigning. This triggers the no-return-assign rule.

Fixes #980
---
 react/README.md | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/react/README.md b/react/README.md
index 716ef59166..b216e14c72 100644
--- a/react/README.md
+++ b/react/README.md
@@ -337,7 +337,7 @@
 
     // good
     <Foo
-      ref={(ref) => this.myRef = ref}
+      ref={ref => { this.myRef = ref; }}
     />
     ```
 

From 6454839e7627fc0d26e9552b0f7ce2ea7c3f90e3 Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Mon, 1 Aug 2016 23:56:37 -0700
Subject: [PATCH 0758/1591] [guide] Use `var` in reserved word examples, since
 they refer to untranspiled code.

---
 README.md | 10 +++++-----
 1 file changed, 5 insertions(+), 5 deletions(-)

diff --git a/README.md b/README.md
index e57760eb6e..03325416cd 100644
--- a/README.md
+++ b/README.md
@@ -158,13 +158,13 @@ Other Style Guides
 
     ```javascript
     // bad
-    const superman = {
+    var superman = {
       default: { clark: 'kent' },
       private: true,
     };
 
     // good
-    const superman = {
+    var superman = {
       defaults: { clark: 'kent' },
       hidden: true,
     };
@@ -175,17 +175,17 @@ Other Style Guides
 
     ```javascript
     // bad
-    const superman = {
+    var superman = {
       class: 'alien',
     };
 
     // bad
-    const superman = {
+    var superman = {
       klass: 'alien',
     };
 
     // good
-    const superman = {
+    var superman = {
       type: 'alien',
     };
     ```

From f94f6e21c6275c298cb665093a068635d0351623 Mon Sep 17 00:00:00 2001
From: felipethome <f.o.thome@gmail.com>
Date: Tue, 2 Aug 2016 17:55:25 -0300
Subject: [PATCH 0759/1591] [guide] Add eslint rule to spacing in a function
 signature topic

[guide] Add eslint rules to spacing in a function signature topic
---
 README.md | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/README.md b/README.md
index 03325416cd..970d304117 100644
--- a/README.md
+++ b/README.md
@@ -743,7 +743,7 @@ Other Style Guides
     ```
 
   <a name="functions--signature-spacing"></a><a name="7.11"></a>
-  - [7.11](#functions--signature-spacing) Spacing in a function signature.
+  - [7.11](#functions--signature-spacing) Spacing in a function signature. eslint: [`space-before-function-paren`](http://eslint.org/docs/rules/space-before-function-paren) [`space-before-blocks`](http://eslint.org/docs/rules/space-before-blocks)
 
     > Why? Consistency is good, and you shouldn’t have to add or remove a space when adding or removing a name.
 

From f0b31960d339fa5e3ff4cbe6494cc670fa23e46f Mon Sep 17 00:00:00 2001
From: felipethome <f.o.thome@gmail.com>
Date: Wed, 3 Aug 2016 16:18:24 -0300
Subject: [PATCH 0760/1591] [guide] Add eslint rules to function declaration
 and function constructor topics

---
 README.md | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/README.md b/README.md
index 970d304117..4f17b363a9 100644
--- a/README.md
+++ b/README.md
@@ -588,7 +588,7 @@ Other Style Guides
 ## Functions
 
   <a name="functions--declarations"></a><a name="7.1"></a>
-  - [7.1](#functions--declarations) Use function declarations instead of function expressions. jscs: [`requireFunctionDeclarations`](http://jscs.info/rule/requireFunctionDeclarations)
+  - [7.1](#functions--declarations) Use function declarations instead of function expressions. eslint: [`func-style`](http://eslint.org/docs/rules/func-style) jscs: [`requireFunctionDeclarations`](http://jscs.info/rule/requireFunctionDeclarations)
 
     > Why? Function declarations are named, so they're easier to identify in call stacks. Also, the whole body of a function declaration is hoisted, whereas only the reference of a function expression is hoisted. This rule makes it possible to always use [Arrow Functions](#arrow-functions) in place of function expressions.
 
@@ -730,7 +730,7 @@ Other Style Guides
     ```
 
   <a name="functions--constructor"></a><a name="7.10"></a>
-  - [7.10](#functions--constructor) Never use the Function constructor to create a new function.
+  - [7.10](#functions--constructor) Never use the Function constructor to create a new function. eslint: [`no-new-func`](http://eslint.org/docs/rules/no-new-func)
 
     > Why? Creating a function in this way evaluates a string similarly to eval(), which opens vulnerabilities.
 

From bfc842e3ad1be7f67fe9c7e09418f47fc33d6d38 Mon Sep 17 00:00:00 2001
From: Joe Lencioni <joe.lencioni@airbnb.com>
Date: Wed, 3 Aug 2016 14:35:10 -0700
Subject: [PATCH 0761/1591] Remove rules about reserved words

In 53b4173b we removed the ES5 guide which contains a lot of guidelines
that are no longer very relevant for us. Similarly, some folks have
raised the relevance of these rules about reserved words, given that we
are now living in an age where ES3 support has mostly waned and
transpilers such as Babel are widely adopted and pave over these issues.
This seems like a good opportunity to simplify.

Fixes #61
---
 README.md | 37 -------------------------------------
 1 file changed, 37 deletions(-)

diff --git a/README.md b/README.md
index 4f17b363a9..353486ccb6 100644
--- a/README.md
+++ b/README.md
@@ -153,43 +153,6 @@ Other Style Guides
     const item = {};
     ```
 
-  <a name="objects--reserved-words"></a><a name="3.2"></a>
-  - [3.2](#objects--reserved-words) If your code will be executed in browsers in script context, don't use [reserved words](http://es5.github.io/#x7.6.1) as keys. It won't work in IE8. [More info](https://github.com/airbnb/javascript/issues/61). It’s OK to use them in ES6 modules and server-side code. jscs: [`disallowIdentifierNames`](http://jscs.info/rule/disallowIdentifierNames)
-
-    ```javascript
-    // bad
-    var superman = {
-      default: { clark: 'kent' },
-      private: true,
-    };
-
-    // good
-    var superman = {
-      defaults: { clark: 'kent' },
-      hidden: true,
-    };
-    ```
-
-  <a name="objects--reserved-words-2"></a><a name="3.3"></a>
-  - [3.3](#objects--reserved-words-2) Use readable synonyms in place of reserved words. jscs: [`disallowIdentifierNames`](http://jscs.info/rule/disallowIdentifierNames)
-
-    ```javascript
-    // bad
-    var superman = {
-      class: 'alien',
-    };
-
-    // bad
-    var superman = {
-      klass: 'alien',
-    };
-
-    // good
-    var superman = {
-      type: 'alien',
-    };
-    ```
-
   <a name="es6-computed-properties"></a><a name="3.4"></a>
   - [3.4](#es6-computed-properties) Use computed property names when creating objects with dynamic property names.
 

From 6d2fc89bd145571a4997b9459670b44e84c754c4 Mon Sep 17 00:00:00 2001
From: Joe Lencioni <joe.lencioni@airbnb.com>
Date: Thu, 4 Aug 2016 09:16:18 -0700
Subject: [PATCH 0762/1591] Add template literal "bad" example to single quotes
 guideline

There has been some confusion around whether we should use single quotes
or template literals. To help avoid this confusion, I am adding a "bad"
example to the single quotes guideline. This rule is already enforced by
the quotes linter rule.

Generally, we want code to clearly express developer intention. Using
template literals communicates that you intend to use some of the
features that template literals offer (e.g. interpolation).

Fixes #992
---
 README.md | 3 +++
 1 file changed, 3 insertions(+)

diff --git a/README.md b/README.md
index 353486ccb6..8422a4b2f2 100644
--- a/README.md
+++ b/README.md
@@ -475,6 +475,9 @@ Other Style Guides
     // bad
     const name = "Capt. Janeway";
 
+    // bad - template literals should contain interpolation or newlines
+    const name = `Capt. Janeway`;
+
     // good
     const name = 'Capt. Janeway';
     ```

From dc7e7e77f2aba5753637e299bd8c02250990d865 Mon Sep 17 00:00:00 2001
From: Joe Lencioni <joe.lencioni@gmail.com>
Date: Thu, 4 Aug 2016 09:53:09 -0700
Subject: [PATCH 0763/1591] Reverse rule on string concatenation for long lines
 (#995)

Broken and concatenated long strings are painful to work with and
produce less readable and searchable code. I think we should reverse
this rule.

Unfortunately, the max-len rule currently does not allow for this, but
there is currently a proposal to add an option to ESLint's max-len rule
that would allow for strings to be ignored.

  https://github.com/eslint/eslint/issues/5805

There have also been discussions around performance of string
concatenation (https://github.com/airbnb/javascript/issues/40), but I
don't think that is very relevant here so I removed the links to them.
---
 README.md | 13 ++++++-------
 1 file changed, 6 insertions(+), 7 deletions(-)

diff --git a/README.md b/README.md
index 8422a4b2f2..7faa68e229 100644
--- a/README.md
+++ b/README.md
@@ -483,25 +483,24 @@ Other Style Guides
     ```
 
   <a name="strings--line-length"></a><a name="6.2"></a>
-  - [6.2](#strings--line-length) Strings that cause the line to go over 100 characters should be written across multiple lines using string concatenation.
+  - [6.2](#strings--line-length) Strings that cause the line to go over 100 characters should not be written across multiple lines using string concatenation.
 
-  <a name="strings--concat-perf"></a><a name="6.3"></a>
-  - [6.3](#strings--concat-perf) Note: If overused, long strings with concatenation could impact performance. [jsPerf](http://jsperf.com/ya-string-concat) & [Discussion](https://github.com/airbnb/javascript/issues/40).
+    > Why? Broken strings are painful to work with and make code less searchable.
 
     ```javascript
-    // bad
-    const errorMessage = 'This is a super long error that was thrown because of Batman. When you stop to think about how Batman had anything to do with this, you would get nowhere fast.';
-
     // bad
     const errorMessage = 'This is a super long error that was thrown because \
     of Batman. When you stop to think about how Batman had anything to do \
     with this, you would get nowhere \
     fast.';
 
-    // good
+    // bad
     const errorMessage = 'This is a super long error that was thrown because ' +
       'of Batman. When you stop to think about how Batman had anything to do ' +
       'with this, you would get nowhere fast.';
+
+    // good
+    const errorMessage = 'This is a super long error that was thrown because of Batman. When you stop to think about how Batman had anything to do with this, you would get nowhere fast.';
     ```
 
   <a name="es6-template-literals"></a><a name="6.4"></a>

From 030598db094c56b67cf9627cce836b0a0381f883 Mon Sep 17 00:00:00 2001
From: felipethome <f.o.thome@gmail.com>
Date: Thu, 4 Aug 2016 14:13:12 -0300
Subject: [PATCH 0764/1591] [guide] Add ESlint rules to 'always use const' and
 'decriptive variable names' topics

---
 README.md | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/README.md b/README.md
index 7faa68e229..909cbbf0c3 100644
--- a/README.md
+++ b/README.md
@@ -1299,7 +1299,7 @@ Other Style Guides
 ## Variables
 
   <a name="variables--const"></a><a name="13.1"></a>
-  - [13.1](#variables--const) Always use `const` to declare variables. Not doing so will result in global variables. We want to avoid polluting the global namespace. Captain Planet warned us of that.
+  - [13.1](#variables--const) Always use `const` to declare variables. Not doing so will result in global variables. We want to avoid polluting the global namespace. Captain Planet warned us of that. eslint: [`no-undef`](http://eslint.org/docs/rules/no-undef) [`prefer-const`](http://eslint.org/docs/rules/prefer-const)
 
     ```javascript
     // bad
@@ -2327,7 +2327,7 @@ Other Style Guides
 ## Naming Conventions
 
   <a name="naming--descriptive"></a><a name="22.1"></a>
-  - [22.1](#naming--descriptive) Avoid single letter names. Be descriptive with your naming.
+  - [22.1](#naming--descriptive) Avoid single letter names. Be descriptive with your naming. eslint: [`id-length`](http://eslint.org/docs/rules/id-length)
 
     ```javascript
     // bad

From c7d34b526a8343c8688c5a68412bcf33445465b0 Mon Sep 17 00:00:00 2001
From: felipethome <f.o.thome@gmail.com>
Date: Fri, 5 Aug 2016 11:52:41 -0300
Subject: [PATCH 0765/1591] [guide] Add a topic about spread operator vs apply

---
 README.md | 21 +++++++++++++++++++++
 1 file changed, 21 insertions(+)

diff --git a/README.md b/README.md
index 909cbbf0c3..cc31291303 100644
--- a/README.md
+++ b/README.md
@@ -764,6 +764,27 @@ Other Style Guides
     }
     ```
 
+  <a name="functions--spread-vs-apply"></a><a name="7.14"></a>
+  - [7.14](#functions--spread-vs-apply) Prefer the use of the spread operator `...` to call variadic functions. eslint: [`prefer-spread`](http://eslint.org/docs/rules/prefer-spread)
+
+    > Why? It's cleaner, you don't need to supply a context, and you can not easily compose `new` with `apply`.
+
+    ```javascript
+    // bad
+    const x = [[1, 2], [3, 4], [5, 6]];
+    console.log(Array.prototype.concat.apply([], x));
+
+    // good
+    const x = [[1, 2], [3, 4], [5, 6]];
+    console.log([].concat(...x));
+
+    // bad
+    new (Function.prototype.bind.apply(Date, [null, 2016, 08, 05]));
+
+    // good
+    new Date(...[2016, 08, 05]);
+    ```
+
 **[⬆ back to top](#table-of-contents)**
 
 ## Arrow Functions

From 31265099af89f9694704bbd88267202063a0aae9 Mon Sep 17 00:00:00 2001
From: felipethome <f.o.thome@gmail.com>
Date: Fri, 5 Aug 2016 18:38:35 -0300
Subject: [PATCH 0766/1591] [guide] Simplify the examples of 'apply vs spread'
 topic

---
 README.md | 8 ++++----
 1 file changed, 4 insertions(+), 4 deletions(-)

diff --git a/README.md b/README.md
index cc31291303..966c263eae 100644
--- a/README.md
+++ b/README.md
@@ -771,12 +771,12 @@ Other Style Guides
 
     ```javascript
     // bad
-    const x = [[1, 2], [3, 4], [5, 6]];
-    console.log(Array.prototype.concat.apply([], x));
+    const x = [1, 2, 3, 4, 5];
+    console.log.apply(console, x);
 
     // good
-    const x = [[1, 2], [3, 4], [5, 6]];
-    console.log([].concat(...x));
+    const x = [1, 2, 3, 4, 5];
+    console.log(...x);
 
     // bad
     new (Function.prototype.bind.apply(Date, [null, 2016, 08, 05]));

From 646fa70f591e22d9edbd2810d5549e00efbc6dd6 Mon Sep 17 00:00:00 2001
From: Maxim <uzumaxy@gmail.com>
Date: Mon, 8 Aug 2016 11:14:05 +0300
Subject: [PATCH 0767/1591] Update README.md

---
 README.md | 1 +
 1 file changed, 1 insertion(+)

diff --git a/README.md b/README.md
index 966c263eae..6b11efefc1 100644
--- a/README.md
+++ b/README.md
@@ -2890,6 +2890,7 @@ Other Style Guides
   - **Shutterfly**: [shutterfly/javascript](https://github.com/shutterfly/javascript)
   - **Springload**: [springload/javascript](https://github.com/springload/javascript)
   - **StratoDem Analytics**: [stratodem/javascript](https://github.com/stratodem/javascript)
+  - **SteelKiwi Development**: [steelkiwi/javascript](https://github.com/steelkiwi/javascript)
   - **StudentSphere**: [studentsphere/javascript](https://github.com/studentsphere/guide-javascript)
   - **SysGarage**: [sysgarage/javascript-style-guide](https://github.com/sysgarage/javascript-style-guide)
   - **Syzygy Warsaw**: [syzygypl/javascript](https://github.com/syzygypl/javascript)

From d20f33f660f36de6576e99c5397e2dbb307f012e Mon Sep 17 00:00:00 2001
From: Mitsuru Ogawa <mitsuru.ogawa.jp+github@gmail.com>
Date: Tue, 9 Aug 2016 19:06:43 +0900
Subject: [PATCH 0768/1591] Add link for Japanese translation

---
 react/README.md | 1 +
 1 file changed, 1 insertion(+)

diff --git a/react/README.md b/react/README.md
index b216e14c72..eee0170c0d 100644
--- a/react/README.md
+++ b/react/README.md
@@ -575,5 +575,6 @@
   - ![pl](https://raw.githubusercontent.com/gosquared/flags/master/flags/flags/shiny/24/Poland.png) **Polish**: [pietraszekl/javascript](https://github.com/pietraszekl/javascript/tree/master/react)
   - ![kr](https://raw.githubusercontent.com/gosquared/flags/master/flags/flags/shiny/24/South-Korea.png) **Korean**: [apple77y/javascript](https://github.com/apple77y/javascript/tree/master/react)
   - ![Br](https://raw.githubusercontent.com/gosquared/flags/master/flags/flags/shiny/24/Brazil.png) **Portuguese**: [ronal2do/javascript](https://github.com/ronal2do/airbnb-react-styleguide)
+  - ![jp](https://raw.githubusercontent.com/gosquared/flags/master/flags/flags/shiny/24/Japan.png) **Japanese**: [mitsuruog/javascript-style-guide](https://github.com/mitsuruog/javascript-style-guide)
 
 **[⬆ back to top](#table-of-contents)**

From 0b8e466397e538f3120ae92d0f5461262a7750cd Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Tue, 9 Aug 2016 09:08:49 -0700
Subject: [PATCH 0769/1591] [eslint config] [*] [deps] update `eslint`,
 `eslint-find-rules`

---
 packages/eslint-config-airbnb-base/package.json | 6 +++---
 packages/eslint-config-airbnb/package.json      | 4 ++--
 2 files changed, 5 insertions(+), 5 deletions(-)

diff --git a/packages/eslint-config-airbnb-base/package.json b/packages/eslint-config-airbnb-base/package.json
index a2934ca39b..bda0880ee1 100644
--- a/packages/eslint-config-airbnb-base/package.json
+++ b/packages/eslint-config-airbnb-base/package.json
@@ -47,15 +47,15 @@
   "devDependencies": {
     "babel-preset-airbnb": "^2.0.0",
     "babel-tape-runner": "^2.0.1",
-    "eslint": "^3.2.0",
-    "eslint-find-rules": "^1.11.1",
+    "eslint": "^3.2.2",
+    "eslint-find-rules": "^1.13.0",
     "eslint-plugin-import": "^1.12.0",
     "in-publish": "^2.0.0",
     "safe-publish-latest": "^1.0.1",
     "tape": "^4.6.0"
   },
   "peerDependencies": {
-    "eslint": "^3.2.0",
+    "eslint": "^3.2.2",
     "eslint-plugin-import": "^1.12.0"
   },
   "engines": {
diff --git a/packages/eslint-config-airbnb/package.json b/packages/eslint-config-airbnb/package.json
index 778632f071..4a26da1cd6 100644
--- a/packages/eslint-config-airbnb/package.json
+++ b/packages/eslint-config-airbnb/package.json
@@ -51,12 +51,12 @@
     "babel-preset-airbnb": "^2.0.0",
     "babel-tape-runner": "^2.0.1",
     "eslint": "^3.2.2",
-    "eslint-find-rules": "^1.11.1",
+    "eslint-find-rules": "^1.13.0",
     "eslint-plugin-import": "^1.12.0",
     "eslint-plugin-jsx-a11y": "^2.0.1",
     "eslint-plugin-react": "^6.0.0",
     "in-publish": "^2.0.0",
-    "react": ">= 0.13.0",
+    "react": "> 0.13.0",
     "safe-publish-latest": "^1.0.1",
     "tape": "^4.6.0"
   },

From fb0f03f676aa604198d9a3f8f9903fd3c1ac68e9 Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Fri, 12 Aug 2016 15:36:56 -0700
Subject: [PATCH 0770/1591] [eslint config] [base] [deps] update `eslint`,
 `eslint-plugin-import`

 - add temp disabled `func-call-spacing` rule
 - add temp disabled `no-template-curly-in-string` rule
 - enable `no-global-assign` and deprecate `no-native-reassign`
 - enable `no-unsafe-negation` and deprecate `no-negated-in-lhs`
 - add disabled `sort-keys` rule
---
 packages/eslint-config-airbnb-base/package.json      |  8 ++++----
 .../rules/best-practices.js                          |  7 ++++++-
 packages/eslint-config-airbnb-base/rules/errors.js   | 12 +++++++++++-
 packages/eslint-config-airbnb-base/rules/style.js    |  8 ++++++++
 4 files changed, 29 insertions(+), 6 deletions(-)

diff --git a/packages/eslint-config-airbnb-base/package.json b/packages/eslint-config-airbnb-base/package.json
index bda0880ee1..93aeba1ede 100644
--- a/packages/eslint-config-airbnb-base/package.json
+++ b/packages/eslint-config-airbnb-base/package.json
@@ -47,16 +47,16 @@
   "devDependencies": {
     "babel-preset-airbnb": "^2.0.0",
     "babel-tape-runner": "^2.0.1",
-    "eslint": "^3.2.2",
+    "eslint": "^3.3.0",
     "eslint-find-rules": "^1.13.0",
-    "eslint-plugin-import": "^1.12.0",
+    "eslint-plugin-import": "^1.13.0",
     "in-publish": "^2.0.0",
     "safe-publish-latest": "^1.0.1",
     "tape": "^4.6.0"
   },
   "peerDependencies": {
-    "eslint": "^3.2.2",
-    "eslint-plugin-import": "^1.12.0"
+    "eslint": "^3.3.0",
+    "eslint-plugin-import": "^1.13.0"
   },
   "engines": {
     "node": ">= 4"
diff --git a/packages/eslint-config-airbnb-base/rules/best-practices.js b/packages/eslint-config-airbnb-base/rules/best-practices.js
index 838ae71368..f4c46eabef 100644
--- a/packages/eslint-config-airbnb-base/rules/best-practices.js
+++ b/packages/eslint-config-airbnb-base/rules/best-practices.js
@@ -89,6 +89,10 @@ module.exports = {
     // disallow the use of leading or trailing decimal points in numeric literals
     'no-floating-decimal': 2,
 
+    // disallow reassignments of native objects or read-only globals
+    // http://eslint.org/docs/rules/no-global-assign
+    'no-global-assign': [2, { exceptions: [] }],
+
     // disallow implicit type conversions
     // http://eslint.org/docs/rules/no-implicit-coercion
     'no-implicit-coercion': [0, {
@@ -136,7 +140,8 @@ module.exports = {
     'no-multi-str': 2,
 
     // disallow reassignments of native objects
-    'no-native-reassign': 2,
+    // TODO: deprecated in favor of no-global-assign
+    'no-native-reassign': 0,
 
     // disallow use of new operator when not part of the assignment or comparison
     'no-new': 2,
diff --git a/packages/eslint-config-airbnb-base/rules/errors.js b/packages/eslint-config-airbnb-base/rules/errors.js
index 7221cd1647..66396cd594 100644
--- a/packages/eslint-config-airbnb-base/rules/errors.js
+++ b/packages/eslint-config-airbnb-base/rules/errors.js
@@ -64,7 +64,8 @@ module.exports = {
     'no-irregular-whitespace': 2,
 
     // disallow negation of the left operand of an in expression
-    'no-negated-in-lhs': 2,
+    // TODO: deprecated in favor of no-unsafe-negation
+    'no-negated-in-lhs': 0,
 
     // disallow the use of object properties of the global object (Math and JSON) as functions
     'no-obj-calls': 2,
@@ -79,6 +80,11 @@ module.exports = {
     // disallow sparse arrays
     'no-sparse-arrays': 2,
 
+    // Disallow template literal placeholder syntax in regular strings
+    // http://eslint.org/docs/rules/no-template-curly-in-string
+    // TODO: enable, semver-major
+    'no-template-curly-in-string': 0,
+
     // Avoid code that looks like two expressions but is actually one
     // http://eslint.org/docs/rules/no-unexpected-multiline
     'no-unexpected-multiline': 2,
@@ -90,6 +96,10 @@ module.exports = {
     // http://eslint.org/docs/rules/no-unsafe-finally
     'no-unsafe-finally': 2,
 
+    // disallow negating the left operand of relational operators
+    // http://eslint.org/docs/rules/no-unsafe-negation
+    'no-unsafe-negation': 2,
+
     // disallow comparisons with the value NaN
     'use-isnan': 2,
 
diff --git a/packages/eslint-config-airbnb-base/rules/style.js b/packages/eslint-config-airbnb-base/rules/style.js
index dd21a4aefb..5d8825aab9 100644
--- a/packages/eslint-config-airbnb-base/rules/style.js
+++ b/packages/eslint-config-airbnb-base/rules/style.js
@@ -28,6 +28,11 @@ module.exports = {
     // enforce newline at the end of file, with no multiple empty lines
     'eol-last': 2,
 
+    // enforce spacing between functions and their invocations
+    // http://eslint.org/docs/rules/func-call-spacing
+    // TODO: enable, semver-minor
+    'func-call-spacing': [0, 'never'],
+
     // require function expressions to have a name
     'func-names': 1,
 
@@ -264,6 +269,9 @@ module.exports = {
     // enforce spacing before and after semicolons
     'semi-spacing': [2, { before: false, after: true }],
 
+    // requires object keys to be sorted
+    'sort-keys': [0, 'asc', { caseSensitive: false, natural: true }],
+
     // sort variables within the same declaration block
     'sort-vars': 0,
 

From be6e13f7b91ede245602c9760d112905ac497dcc Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Fri, 12 Aug 2016 15:38:44 -0700
Subject: [PATCH 0771/1591] [eslint config] [base] v5.0.2

---
 packages/eslint-config-airbnb-base/CHANGELOG.md | 5 +++++
 packages/eslint-config-airbnb-base/package.json | 2 +-
 2 files changed, 6 insertions(+), 1 deletion(-)

diff --git a/packages/eslint-config-airbnb-base/CHANGELOG.md b/packages/eslint-config-airbnb-base/CHANGELOG.md
index 9baf2527b9..f26c1d9cb3 100644
--- a/packages/eslint-config-airbnb-base/CHANGELOG.md
+++ b/packages/eslint-config-airbnb-base/CHANGELOG.md
@@ -1,3 +1,8 @@
+5.0.2 / 2016-08-12
+==================
+ - [deps] update `eslint`, `eslint-find-rules`, `eslint-plugin-import`
+ - [tests] add `safe-publish-latest` to `prepublish`
+
 5.0.1 / 2016-07-29
 ==================
  - [patch] `no-unused-expressions`: flesh out options
diff --git a/packages/eslint-config-airbnb-base/package.json b/packages/eslint-config-airbnb-base/package.json
index 93aeba1ede..0be10a421a 100644
--- a/packages/eslint-config-airbnb-base/package.json
+++ b/packages/eslint-config-airbnb-base/package.json
@@ -1,6 +1,6 @@
 {
   "name": "eslint-config-airbnb-base",
-  "version": "5.0.1",
+  "version": "5.0.2",
   "description": "Airbnb's base JS ESLint config, following our styleguide",
   "main": "index.js",
   "scripts": {

From 7d9af14ce48791775c1c39e8c28991907b1e8b40 Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Fri, 12 Aug 2016 15:49:18 -0700
Subject: [PATCH 0772/1591] [eslint config] [deps] update `eslint`,
 `eslint-plugin-jsx-a11y`, `eslint-plugin-import`, `eslint-config-airbnb-base`

 - add temp disabled `jsx-a11y/anchor-has-content` rule
---
 packages/eslint-config-airbnb/package.json        | 14 +++++++-------
 packages/eslint-config-airbnb/rules/react-a11y.js |  5 +++++
 2 files changed, 12 insertions(+), 7 deletions(-)

diff --git a/packages/eslint-config-airbnb/package.json b/packages/eslint-config-airbnb/package.json
index 4a26da1cd6..7f1540f376 100644
--- a/packages/eslint-config-airbnb/package.json
+++ b/packages/eslint-config-airbnb/package.json
@@ -45,15 +45,15 @@
   },
   "homepage": "https://github.com/airbnb/javascript",
   "dependencies": {
-    "eslint-config-airbnb-base": "^5.0.1"
+    "eslint-config-airbnb-base": "^5.0.2"
   },
   "devDependencies": {
     "babel-preset-airbnb": "^2.0.0",
     "babel-tape-runner": "^2.0.1",
-    "eslint": "^3.2.2",
+    "eslint": "^3.3.0",
     "eslint-find-rules": "^1.13.0",
-    "eslint-plugin-import": "^1.12.0",
-    "eslint-plugin-jsx-a11y": "^2.0.1",
+    "eslint-plugin-import": "^1.13.0",
+    "eslint-plugin-jsx-a11y": "^2.1.0",
     "eslint-plugin-react": "^6.0.0",
     "in-publish": "^2.0.0",
     "react": "> 0.13.0",
@@ -61,9 +61,9 @@
     "tape": "^4.6.0"
   },
   "peerDependencies": {
-    "eslint": "^3.2.2",
-    "eslint-plugin-jsx-a11y": "^2.0.1",
-    "eslint-plugin-import": "^1.12.0",
+    "eslint": "^3.3.0",
+    "eslint-plugin-jsx-a11y": "^2.1.0",
+    "eslint-plugin-import": "^1.13.0",
     "eslint-plugin-react": "^6.0.0"
   },
   "engines": {
diff --git a/packages/eslint-config-airbnb/rules/react-a11y.js b/packages/eslint-config-airbnb/rules/react-a11y.js
index bc2b4cff74..9e1c664449 100644
--- a/packages/eslint-config-airbnb/rules/react-a11y.js
+++ b/packages/eslint-config-airbnb/rules/react-a11y.js
@@ -7,6 +7,11 @@ module.exports = {
     jsx: true
   },
   rules: {
+    // Enforce that anchors have content
+    // https://github.com/evcohen/eslint-plugin-jsx-a11y/blob/master/docs/rules/anchor-has-content.md
+    // TODO: enable, semver-major
+    'jsx-a11y/anchor-has-content': [0, ['']],
+
     // Require ARIA roles to be valid and non-abstract
     // https://github.com/evcohen/eslint-plugin-jsx-a11y/blob/master/docs/rules/aria-role.md
     'jsx-a11y/aria-role': 2,

From 3fb9f2ec695b80d06fb03212f1846fb7492cb8c5 Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Fri, 12 Aug 2016 15:52:10 -0700
Subject: [PATCH 0773/1591] [eslint config] v10.0.1

---
 packages/eslint-config-airbnb/CHANGELOG.md | 4 ++++
 packages/eslint-config-airbnb/package.json | 2 +-
 2 files changed, 5 insertions(+), 1 deletion(-)

diff --git a/packages/eslint-config-airbnb/CHANGELOG.md b/packages/eslint-config-airbnb/CHANGELOG.md
index f353154156..bb88fb3659 100644
--- a/packages/eslint-config-airbnb/CHANGELOG.md
+++ b/packages/eslint-config-airbnb/CHANGELOG.md
@@ -1,3 +1,7 @@
+10.0.1 / 2016-08-12
+==================
+- [deps] update `eslint`, `eslint-find-rules`, `eslint-plugin-jsx-a11y`, `eslint-plugin-import`, `eslint-config-airbnb-base`
+
 10.0.0 / 2016-08-01
 ==================
 - [breaking] enable jsx-a11y rules:
diff --git a/packages/eslint-config-airbnb/package.json b/packages/eslint-config-airbnb/package.json
index 7f1540f376..5887859ebb 100644
--- a/packages/eslint-config-airbnb/package.json
+++ b/packages/eslint-config-airbnb/package.json
@@ -1,6 +1,6 @@
 {
   "name": "eslint-config-airbnb",
-  "version": "10.0.0",
+  "version": "10.0.1",
   "description": "Airbnb's ESLint config, following our styleguide",
   "main": "index.js",
   "scripts": {

From 424d74ec8db255b00ac68e17d33a7524f7de39b3 Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Mon, 15 Aug 2016 00:21:39 -0700
Subject: [PATCH 0774/1591] [eslint config] [deps] update `eslint-plugin-react`

---
 packages/eslint-config-airbnb/package.json   | 4 ++--
 packages/eslint-config-airbnb/rules/react.js | 9 +++++++++
 2 files changed, 11 insertions(+), 2 deletions(-)

diff --git a/packages/eslint-config-airbnb/package.json b/packages/eslint-config-airbnb/package.json
index 5887859ebb..f674595db5 100644
--- a/packages/eslint-config-airbnb/package.json
+++ b/packages/eslint-config-airbnb/package.json
@@ -54,7 +54,7 @@
     "eslint-find-rules": "^1.13.0",
     "eslint-plugin-import": "^1.13.0",
     "eslint-plugin-jsx-a11y": "^2.1.0",
-    "eslint-plugin-react": "^6.0.0",
+    "eslint-plugin-react": "^6.1.0",
     "in-publish": "^2.0.0",
     "react": "> 0.13.0",
     "safe-publish-latest": "^1.0.1",
@@ -64,7 +64,7 @@
     "eslint": "^3.3.0",
     "eslint-plugin-jsx-a11y": "^2.1.0",
     "eslint-plugin-import": "^1.13.0",
-    "eslint-plugin-react": "^6.0.0"
+    "eslint-plugin-react": "^6.1.0"
   },
   "engines": {
     "node": ">= 4"
diff --git a/packages/eslint-config-airbnb/rules/react.js b/packages/eslint-config-airbnb/rules/react.js
index 53961c368d..4bb15b6bd5 100644
--- a/packages/eslint-config-airbnb/rules/react.js
+++ b/packages/eslint-config-airbnb/rules/react.js
@@ -243,6 +243,15 @@ module.exports = {
     // warn against using findDOMNode()
     // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/no-find-dom-node.md
     'react/no-find-dom-node': 2,
+
+    // Forbid certain props on Components
+    // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/forbid-component-props.md
+    'react/forbid-component-props': [0, { forbid: [] }],
+
+    // Prevent problem with children and props.dangerouslySetInnerHTML
+    // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/no-danger-with-children.md
+    // TODO: enable, semver-major
+    'react/no-danger-with-children': 0,
   },
 
   settings: {

From db2e7bdf63fd7827af0922662f408410afc916a3 Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Mon, 15 Aug 2016 23:17:04 -0700
Subject: [PATCH 0775/1591] [eslint config] [base] [fix] correct
 `import/extensions` list.

From b45fdcd60f6e08f13718bc2348e8d6ea1314e91c / fixes #1013.
---
 packages/eslint-config-airbnb-base/rules/imports.js | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/packages/eslint-config-airbnb-base/rules/imports.js b/packages/eslint-config-airbnb-base/rules/imports.js
index eb0610760f..821818909d 100644
--- a/packages/eslint-config-airbnb-base/rules/imports.js
+++ b/packages/eslint-config-airbnb-base/rules/imports.js
@@ -17,7 +17,8 @@ module.exports = {
       }
     },
     'import/extensions': [
-      'node_modules',
+      '.js',
+      '.jsx',
     ],
     'import/core-modules': [
     ],

From e92eaef4e2aefc7bbd3576dc28e7d0c52ba63c7d Mon Sep 17 00:00:00 2001
From: Gerardo Renovales <camazorro@users.noreply.github.com>
Date: Wed, 17 Aug 2016 19:46:55 -0400
Subject: [PATCH 0776/1591] Update README.md

Add M2GEN to the list
---
 README.md | 1 +
 1 file changed, 1 insertion(+)

diff --git a/README.md b/README.md
index 6b11efefc1..851b46e16b 100644
--- a/README.md
+++ b/README.md
@@ -2869,6 +2869,7 @@ Other Style Guides
   - **JSSolutions**: [JSSolutions/javascript](https://github.com/JSSolutions/javascript)
   - **KickorStick**: [kickorstick/javascript](https://github.com/kickorstick/javascript)
   - **Kinetica Solutions**: [kinetica/javascript](https://github.com/kinetica/Javascript-style-guide)
+  - **M2GEN**: [M2GEN/javascript](https://github.com/M2GEN/javascript)
   - **Mighty Spring**: [mightyspring/javascript](https://github.com/mightyspring/javascript)
   - **MinnPost**: [MinnPost/javascript](https://github.com/MinnPost/javascript)
   - **MitocGroup**: [MitocGroup/javascript](https://github.com/MitocGroup/javascript)

From b1260164108fbdba88946f650f7a0ab1313bdf10 Mon Sep 17 00:00:00 2001
From: Aniruddh Agarwal <aaniruddh99@gmail.com>
Date: Wed, 17 Aug 2016 13:20:08 +0800
Subject: [PATCH 0777/1591] Add section on variable assignment chaining

---
 README.md | 32 ++++++++++++++++++++++++++++++++
 1 file changed, 32 insertions(+)

diff --git a/README.md b/README.md
index 851b46e16b..b3975e2e9f 100644
--- a/README.md
+++ b/README.md
@@ -1417,6 +1417,38 @@ Other Style Guides
       return name;
     }
     ```
+  <a name=variables--no-chain-assignment""></a><a name="13.5"></a>
+  - [13.5](#variables--no-chain-assignment) Don't chain variable assignments. eslint: [`one-var`](http://eslint.org/docs/rules/one-var.html)
+
+    > Why? Chaining variable assignments creates implicit global variables.
+
+    ```javascript
+    // bad
+    (function example() {
+      // JavaScript interprets this as
+      // let a = ( b = ( c = 1 ) );
+      // The let keyword only applies to variable a; variables b and c become
+      // global variables.
+      let a = b = c = 1;
+    }());
+
+    console.log(a); // undefined
+    console.log(b); // 1
+    console.log(c); // 1
+
+    // good
+    (function example() {
+      let a = 1;
+      let b = a;
+      let c = a;
+    }());
+
+    console.log(a); // undefined
+    console.log(b); // undefined
+    console.log(c); // undefined
+
+    // the same applies for `const`
+    ```
 
 **[⬆ back to top](#table-of-contents)**
 

From 3ad33681a7260608b89be41221fa22024cce4a33 Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Thu, 18 Aug 2016 00:50:37 -0700
Subject: [PATCH 0778/1591] [eslint config] [*] [deps] update `eslint`,
 `eslint-plugin-react`

---
 packages/eslint-config-airbnb-base/package.json |  4 ++--
 packages/eslint-config-airbnb/package.json      | 10 +++++-----
 2 files changed, 7 insertions(+), 7 deletions(-)

diff --git a/packages/eslint-config-airbnb-base/package.json b/packages/eslint-config-airbnb-base/package.json
index 0be10a421a..ed9014e2de 100644
--- a/packages/eslint-config-airbnb-base/package.json
+++ b/packages/eslint-config-airbnb-base/package.json
@@ -47,7 +47,7 @@
   "devDependencies": {
     "babel-preset-airbnb": "^2.0.0",
     "babel-tape-runner": "^2.0.1",
-    "eslint": "^3.3.0",
+    "eslint": "^3.3.1",
     "eslint-find-rules": "^1.13.0",
     "eslint-plugin-import": "^1.13.0",
     "in-publish": "^2.0.0",
@@ -55,7 +55,7 @@
     "tape": "^4.6.0"
   },
   "peerDependencies": {
-    "eslint": "^3.3.0",
+    "eslint": "^3.3.1",
     "eslint-plugin-import": "^1.13.0"
   },
   "engines": {
diff --git a/packages/eslint-config-airbnb/package.json b/packages/eslint-config-airbnb/package.json
index f674595db5..c176f07da3 100644
--- a/packages/eslint-config-airbnb/package.json
+++ b/packages/eslint-config-airbnb/package.json
@@ -50,21 +50,21 @@
   "devDependencies": {
     "babel-preset-airbnb": "^2.0.0",
     "babel-tape-runner": "^2.0.1",
-    "eslint": "^3.3.0",
+    "eslint": "^3.3.1",
     "eslint-find-rules": "^1.13.0",
     "eslint-plugin-import": "^1.13.0",
     "eslint-plugin-jsx-a11y": "^2.1.0",
-    "eslint-plugin-react": "^6.1.0",
+    "eslint-plugin-react": "^6.1.2",
     "in-publish": "^2.0.0",
-    "react": "> 0.13.0",
+    "react": ">= 0.13.0",
     "safe-publish-latest": "^1.0.1",
     "tape": "^4.6.0"
   },
   "peerDependencies": {
-    "eslint": "^3.3.0",
+    "eslint": "^3.3.1",
     "eslint-plugin-jsx-a11y": "^2.1.0",
     "eslint-plugin-import": "^1.13.0",
-    "eslint-plugin-react": "^6.1.0"
+    "eslint-plugin-react": "^6.1.2"
   },
   "engines": {
     "node": ">= 4"

From 41623039e89296819d243e2b23004d3cb53e425f Mon Sep 17 00:00:00 2001
From: Olivier G <olivier@lespacedunmatin.info>
Date: Thu, 18 Aug 2016 17:33:23 +0200
Subject: [PATCH 0779/1591] Typo : text link to 13.5 was not working (#1020)

---
 README.md | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/README.md b/README.md
index b3975e2e9f..350aece0d7 100644
--- a/README.md
+++ b/README.md
@@ -1417,7 +1417,7 @@ Other Style Guides
       return name;
     }
     ```
-  <a name=variables--no-chain-assignment""></a><a name="13.5"></a>
+  <a name="variables--no-chain-assignment"></a><a name="13.5"></a>
   - [13.5](#variables--no-chain-assignment) Don't chain variable assignments. eslint: [`one-var`](http://eslint.org/docs/rules/one-var.html)
 
     > Why? Chaining variable assignments creates implicit global variables.

From 39d5559b9a75c818c529d7f5265b8651b96b875a Mon Sep 17 00:00:00 2001
From: Joe Lencioni <joe.lencioni@airbnb.com>
Date: Thu, 18 Aug 2016 10:35:23 -0700
Subject: [PATCH 0780/1591] Remove misleading reference to one-var eslint rule

This eslint rule does not enforce this style guide rule. I believe that
referencing it here will cause people to believe that this is enforced
via linting when it is not. As far as I know, there is no rule that
currently enforces this, but it would be nice to add one.
---
 README.md | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/README.md b/README.md
index 350aece0d7..4223bf4fd3 100644
--- a/README.md
+++ b/README.md
@@ -1418,7 +1418,7 @@ Other Style Guides
     }
     ```
   <a name="variables--no-chain-assignment"></a><a name="13.5"></a>
-  - [13.5](#variables--no-chain-assignment) Don't chain variable assignments. eslint: [`one-var`](http://eslint.org/docs/rules/one-var.html)
+  - [13.5](#variables--no-chain-assignment) Don't chain variable assignments.
 
     > Why? Chaining variable assignments creates implicit global variables.
 

From baf0fa5343caecbbcd4684a3a6446b4447b51e91 Mon Sep 17 00:00:00 2001
From: soul-wish <soulwish.ls@gmail.com>
Date: Thu, 18 Aug 2016 22:35:42 +0300
Subject: [PATCH 0781/1591] fix issue with eslint-config-airbnb README.md file
 formatting

---
 packages/eslint-config-airbnb/README.md | 1 +
 1 file changed, 1 insertion(+)

diff --git a/packages/eslint-config-airbnb/README.md b/packages/eslint-config-airbnb/README.md
index a96a9fe138..7a0b8c68b6 100644
--- a/packages/eslint-config-airbnb/README.md
+++ b/packages/eslint-config-airbnb/README.md
@@ -27,6 +27,7 @@ Our default export contains all of our ESLint rules, including ECMAScript 6+ and
   ```
 
 2. Add `"extends": "airbnb"` to your .eslintrc
+
 ### eslint-config-airbnb/base
 
 This entry point is deprecated. See [eslint-config-airbnb-base](https://npmjs.com/eslint-config-airbnb-base).

From f1fedfa7ca480743b9482f3befdacf7297f6773c Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Thu, 18 Aug 2016 23:08:45 -0700
Subject: [PATCH 0782/1591] ES2015

---
 README.md | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/README.md b/README.md
index 4223bf4fd3..cb0cbac948 100644
--- a/README.md
+++ b/README.md
@@ -40,7 +40,7 @@ Other Style Guides
   1. [Events](#events)
   1. [jQuery](#jquery)
   1. [ECMAScript 5 Compatibility](#ecmascript-5-compatibility)
-  1. [ECMAScript 6 Styles](#ecmascript-6-styles)
+  1. [ECMAScript 6+ (ES 2015+) Styles](#ecmascript-6-styles)
   1. [Testing](#testing)
   1. [Performance](#performance)
   1. [Resources](#resources)

From 2e694723bf35b5fae5961be62fd12c4536a0d945 Mon Sep 17 00:00:00 2001
From: Yang Su <yang@quip.com>
Date: Sat, 9 Jul 2016 10:58:45 -0700
Subject: [PATCH 0783/1591] Changed ESLint rule configs to use 'off', 'warn',
 and 'error' instead of numbers for better readability

---
 packages/eslint-config-airbnb-base/index.js   |   2 +-
 packages/eslint-config-airbnb-base/legacy.js  |   2 +-
 .../rules/best-practices.js                   | 130 +++++++--------
 .../eslint-config-airbnb-base/rules/errors.js |  64 ++++----
 .../eslint-config-airbnb-base/rules/es6.js    |  58 +++----
 .../rules/imports.js                          |  42 ++---
 .../eslint-config-airbnb-base/rules/node.js   |  20 +--
 .../eslint-config-airbnb-base/rules/strict.js |   2 +-
 .../eslint-config-airbnb-base/rules/style.js  | 154 +++++++++---------
 .../rules/variables.js                        |  24 +--
 .../eslint-config-airbnb/rules/react-a11y.js  |  44 ++---
 packages/eslint-config-airbnb/rules/react.js  | 106 ++++++------
 12 files changed, 324 insertions(+), 324 deletions(-)

diff --git a/packages/eslint-config-airbnb-base/index.js b/packages/eslint-config-airbnb-base/index.js
index 547e8b2ac5..c89431a0c5 100644
--- a/packages/eslint-config-airbnb-base/index.js
+++ b/packages/eslint-config-airbnb-base/index.js
@@ -13,6 +13,6 @@ module.exports = {
     sourceType: 'module',
   },
   rules: {
-    strict: 2,
+    strict: 'error',
   }
 };
diff --git a/packages/eslint-config-airbnb-base/legacy.js b/packages/eslint-config-airbnb-base/legacy.js
index f3dacc4c7b..9acfb1cb4e 100644
--- a/packages/eslint-config-airbnb-base/legacy.js
+++ b/packages/eslint-config-airbnb-base/legacy.js
@@ -16,6 +16,6 @@ module.exports = {
   ecmaFeatures: {},
   globals: {},
   rules: {
-    'comma-dangle': [2, 'never']
+    'comma-dangle': ['error', 'never']
   }
 };
diff --git a/packages/eslint-config-airbnb-base/rules/best-practices.js b/packages/eslint-config-airbnb-base/rules/best-practices.js
index f4c46eabef..26602745de 100644
--- a/packages/eslint-config-airbnb-base/rules/best-practices.js
+++ b/packages/eslint-config-airbnb-base/rules/best-practices.js
@@ -1,61 +1,61 @@
 module.exports = {
   rules: {
     // enforces getter/setter pairs in objects
-    'accessor-pairs': 0,
+    'accessor-pairs': 'off',
 
     // enforces return statements in callbacks of array's methods
     // http://eslint.org/docs/rules/array-callback-return
-    'array-callback-return': 2,
+    'array-callback-return': 'error',
 
     // treat var statements as if they were block scoped
-    'block-scoped-var': 2,
+    'block-scoped-var': 'error',
 
     // specify the maximum cyclomatic complexity allowed in a program
-    complexity: [0, 11],
+    complexity: ['off', 11],
 
     // require return statements to either always or never specify values
-    'consistent-return': 2,
+    'consistent-return': 'error',
 
     // specify curly brace conventions for all control statements
-    curly: [2, 'multi-line'],
+    curly: ['error', 'multi-line'],
 
     // require default case in switch statements
-    'default-case': [2, { commentPattern: '^no default$' }],
+    'default-case': ['error', { commentPattern: '^no default$' }],
 
     // encourages use of dot notation whenever possible
-    'dot-notation': [2, { allowKeywords: true }],
+    'dot-notation': ['error', { allowKeywords: true }],
 
     // enforces consistent newlines before or after dots
     // http://eslint.org/docs/rules/dot-location
-    'dot-location': [2, 'property'],
+    'dot-location': ['error', 'property'],
 
     // require the use of === and !==
     // http://eslint.org/docs/rules/eqeqeq
-    eqeqeq: [2, 'allow-null'],
+    eqeqeq: ['error', 'allow-null'],
 
     // make sure for-in loops have an if statement
-    'guard-for-in': 2,
+    'guard-for-in': 'error',
 
     // disallow the use of alert, confirm, and prompt
-    'no-alert': 1,
+    'no-alert': 'warn',
 
     // disallow use of arguments.caller or arguments.callee
-    'no-caller': 2,
+    'no-caller': 'error',
 
     // disallow lexical declarations in case/default clauses
     // http://eslint.org/docs/rules/no-case-declarations.html
-    'no-case-declarations': 2,
+    'no-case-declarations': 'error',
 
     // disallow division operators explicitly at beginning of regular expression
     // http://eslint.org/docs/rules/no-div-regex
-    'no-div-regex': 0,
+    'no-div-regex': 'off',
 
     // disallow else after a return in an if
-    'no-else-return': 2,
+    'no-else-return': 'error',
 
     // disallow empty functions, except for standalone funcs/arrows
     // http://eslint.org/docs/rules/no-empty-function
-    'no-empty-function': [2, {
+    'no-empty-function': ['error', {
       allow: [
         'arrowFunctions',
         'functions',
@@ -65,37 +65,37 @@ module.exports = {
 
     // disallow empty destructuring patterns
     // http://eslint.org/docs/rules/no-empty-pattern
-    'no-empty-pattern': 2,
+    'no-empty-pattern': 'error',
 
     // disallow comparisons to null without a type-checking operator
-    'no-eq-null': 0,
+    'no-eq-null': 'off',
 
     // disallow use of eval()
-    'no-eval': 2,
+    'no-eval': 'error',
 
     // disallow adding to native types
-    'no-extend-native': 2,
+    'no-extend-native': 'error',
 
     // disallow unnecessary function binding
-    'no-extra-bind': 2,
+    'no-extra-bind': 'error',
 
     // disallow Unnecessary Labels
     // http://eslint.org/docs/rules/no-extra-label
-    'no-extra-label': 2,
+    'no-extra-label': 'error',
 
     // disallow fallthrough of case statements
-    'no-fallthrough': 2,
+    'no-fallthrough': 'error',
 
     // disallow the use of leading or trailing decimal points in numeric literals
-    'no-floating-decimal': 2,
+    'no-floating-decimal': 'error',
 
     // disallow reassignments of native objects or read-only globals
     // http://eslint.org/docs/rules/no-global-assign
-    'no-global-assign': [2, { exceptions: [] }],
+    'no-global-assign': ['error', { exceptions: [] }],
 
     // disallow implicit type conversions
     // http://eslint.org/docs/rules/no-implicit-coercion
-    'no-implicit-coercion': [0, {
+    'no-implicit-coercion': ['off', {
       boolean: false,
       number: true,
       string: true,
@@ -104,29 +104,29 @@ module.exports = {
 
     // disallow var and named functions in global scope
     // http://eslint.org/docs/rules/no-implicit-globals
-    'no-implicit-globals': 0,
+    'no-implicit-globals': 'off',
 
     // disallow use of eval()-like methods
-    'no-implied-eval': 2,
+    'no-implied-eval': 'error',
 
     // disallow this keywords outside of classes or class-like objects
-    'no-invalid-this': 0,
+    'no-invalid-this': 'off',
 
     // disallow usage of __iterator__ property
-    'no-iterator': 2,
+    'no-iterator': 'error',
 
     // disallow use of labels for anything other then loops and switches
-    'no-labels': [2, { allowLoop: false, allowSwitch: false }],
+    'no-labels': ['error', { allowLoop: false, allowSwitch: false }],
 
     // disallow unnecessary nested blocks
-    'no-lone-blocks': 2,
+    'no-lone-blocks': 'error',
 
     // disallow creation of functions within loops
-    'no-loop-func': 2,
+    'no-loop-func': 'error',
 
     // disallow magic numbers
     // http://eslint.org/docs/rules/no-magic-numbers
-    'no-magic-numbers': [0, {
+    'no-magic-numbers': ['off', {
       ignore: [],
       ignoreArrayIndexes: true,
       enforceConst: true,
@@ -134,107 +134,107 @@ module.exports = {
     }],
 
     // disallow use of multiple spaces
-    'no-multi-spaces': 2,
+    'no-multi-spaces': 'error',
 
     // disallow use of multiline strings
-    'no-multi-str': 2,
+    'no-multi-str': 'error',
 
     // disallow reassignments of native objects
     // TODO: deprecated in favor of no-global-assign
-    'no-native-reassign': 0,
+    'no-native-reassign': 'off',
 
     // disallow use of new operator when not part of the assignment or comparison
-    'no-new': 2,
+    'no-new': 'error',
 
     // disallow use of new operator for Function object
-    'no-new-func': 2,
+    'no-new-func': 'error',
 
     // disallows creating new instances of String, Number, and Boolean
-    'no-new-wrappers': 2,
+    'no-new-wrappers': 'error',
 
     // disallow use of (old style) octal literals
-    'no-octal': 2,
+    'no-octal': 'error',
 
     // disallow use of octal escape sequences in string literals, such as
     // var foo = 'Copyright \251';
-    'no-octal-escape': 2,
+    'no-octal-escape': 'error',
 
     // disallow reassignment of function parameters
     // disallow parameter object manipulation
     // rule: http://eslint.org/docs/rules/no-param-reassign.html
-    'no-param-reassign': [2, { props: true }],
+    'no-param-reassign': ['error', { props: true }],
 
     // disallow usage of __proto__ property
-    'no-proto': 2,
+    'no-proto': 'error',
 
     // disallow declaring the same variable more then once
-    'no-redeclare': 2,
+    'no-redeclare': 'error',
 
     // disallow use of assignment in return statement
-    'no-return-assign': 2,
+    'no-return-assign': 'error',
 
     // disallow use of `javascript:` urls.
-    'no-script-url': 2,
+    'no-script-url': 'error',
 
     // disallow self assignment
     // http://eslint.org/docs/rules/no-self-assign
-    'no-self-assign': 2,
+    'no-self-assign': 'error',
 
     // disallow comparisons where both sides are exactly the same
-    'no-self-compare': 2,
+    'no-self-compare': 'error',
 
     // disallow use of comma operator
-    'no-sequences': 2,
+    'no-sequences': 'error',
 
     // restrict what can be thrown as an exception
-    'no-throw-literal': 2,
+    'no-throw-literal': 'error',
 
     // disallow unmodified conditions of loops
     // http://eslint.org/docs/rules/no-unmodified-loop-condition
-    'no-unmodified-loop-condition': 0,
+    'no-unmodified-loop-condition': 'off',
 
     // disallow usage of expressions in statement position
-    'no-unused-expressions': [2, {
+    'no-unused-expressions': ['error', {
       allowShortCircuit: false,
       allowTernary: false,
     }],
 
     // disallow unused labels
     // http://eslint.org/docs/rules/no-unused-labels
-    'no-unused-labels': 2,
+    'no-unused-labels': 'error',
 
     // disallow unnecessary .call() and .apply()
-    'no-useless-call': 0,
+    'no-useless-call': 'off',
 
     // disallow useless string concatenation
     // http://eslint.org/docs/rules/no-useless-concat
-    'no-useless-concat': 2,
+    'no-useless-concat': 'error',
 
     // disallow unnecessary string escaping
     // http://eslint.org/docs/rules/no-useless-escape
-    'no-useless-escape': 2,
+    'no-useless-escape': 'error',
 
     // disallow use of void operator
     // http://eslint.org/docs/rules/no-void
-    'no-void': 2,
+    'no-void': 'error',
 
     // disallow usage of configurable warning terms in comments: e.g. todo
-    'no-warning-comments': [0, { terms: ['todo', 'fixme', 'xxx'], location: 'start' }],
+    'no-warning-comments': ['off', { terms: ['todo', 'fixme', 'xxx'], location: 'start' }],
 
     // disallow use of the with statement
-    'no-with': 2,
+    'no-with': 'error',
 
     // require use of the second argument for parseInt()
-    radix: 2,
+    radix: 'error',
 
     // requires to declare all vars on top of their containing scope
-    'vars-on-top': 2,
+    'vars-on-top': 'error',
 
     // require immediate function invocation to be wrapped in parentheses
     // http://eslint.org/docs/rules/wrap-iife.html
-    'wrap-iife': [2, 'outside'],
+    'wrap-iife': ['error', 'outside'],
 
     // require or disallow Yoda conditions
-    yoda: 2
+    yoda: 'error'
   }
 };
diff --git a/packages/eslint-config-airbnb-base/rules/errors.js b/packages/eslint-config-airbnb-base/rules/errors.js
index 66396cd594..6c932c8dfc 100644
--- a/packages/eslint-config-airbnb-base/rules/errors.js
+++ b/packages/eslint-config-airbnb-base/rules/errors.js
@@ -1,113 +1,113 @@
 module.exports = {
   rules: {
     // require trailing commas in multiline object literals
-    'comma-dangle': [2, 'always-multiline'],
+    'comma-dangle': ['error', 'always-multiline'],
 
     // disallow assignment in conditional expressions
-    'no-cond-assign': [2, 'always'],
+    'no-cond-assign': ['error', 'always'],
 
     // disallow use of console
-    'no-console': 1,
+    'no-console': 'warn',
 
     // disallow use of constant expressions in conditions
-    'no-constant-condition': 1,
+    'no-constant-condition': 'warn',
 
     // disallow control characters in regular expressions
-    'no-control-regex': 2,
+    'no-control-regex': 'error',
 
     // disallow use of debugger
-    'no-debugger': 2,
+    'no-debugger': 'error',
 
     // disallow duplicate arguments in functions
-    'no-dupe-args': 2,
+    'no-dupe-args': 'error',
 
     // disallow duplicate keys when creating object literals
-    'no-dupe-keys': 2,
+    'no-dupe-keys': 'error',
 
     // disallow a duplicate case label.
-    'no-duplicate-case': 2,
+    'no-duplicate-case': 'error',
 
     // disallow empty statements
-    'no-empty': 2,
+    'no-empty': 'error',
 
     // disallow the use of empty character classes in regular expressions
-    'no-empty-character-class': 2,
+    'no-empty-character-class': 'error',
 
     // disallow assigning to the exception in a catch block
-    'no-ex-assign': 2,
+    'no-ex-assign': 'error',
 
     // disallow double-negation boolean casts in a boolean context
     // http://eslint.org/docs/rules/no-extra-boolean-cast
-    'no-extra-boolean-cast': 2,
+    'no-extra-boolean-cast': 'error',
 
     // disallow unnecessary parentheses
     // http://eslint.org/docs/rules/no-extra-parens
-    'no-extra-parens': [0, 'all', {
+    'no-extra-parens': ['off', 'all', {
       conditionalAssign: true,
       nestedBinaryExpressions: false,
       returnAssign: false,
     }],
 
     // disallow unnecessary semicolons
-    'no-extra-semi': 2,
+    'no-extra-semi': 'error',
 
     // disallow overwriting functions written as function declarations
-    'no-func-assign': 2,
+    'no-func-assign': 'error',
 
     // disallow function or variable declarations in nested blocks
-    'no-inner-declarations': 2,
+    'no-inner-declarations': 'error',
 
     // disallow invalid regular expression strings in the RegExp constructor
-    'no-invalid-regexp': 2,
+    'no-invalid-regexp': 'error',
 
     // disallow irregular whitespace outside of strings and comments
-    'no-irregular-whitespace': 2,
+    'no-irregular-whitespace': 'error',
 
     // disallow negation of the left operand of an in expression
     // TODO: deprecated in favor of no-unsafe-negation
-    'no-negated-in-lhs': 0,
+    'no-negated-in-lhs': 'off',
 
     // disallow the use of object properties of the global object (Math and JSON) as functions
-    'no-obj-calls': 2,
+    'no-obj-calls': 'error',
 
     // disallow use of Object.prototypes builtins directly
     // http://eslint.org/docs/rules/no-prototype-builtins
-    'no-prototype-builtins': 2,
+    'no-prototype-builtins': 'error',
 
     // disallow multiple spaces in a regular expression literal
-    'no-regex-spaces': 2,
+    'no-regex-spaces': 'error',
 
     // disallow sparse arrays
-    'no-sparse-arrays': 2,
+    'no-sparse-arrays': 'error',
 
     // Disallow template literal placeholder syntax in regular strings
     // http://eslint.org/docs/rules/no-template-curly-in-string
     // TODO: enable, semver-major
-    'no-template-curly-in-string': 0,
+    'no-template-curly-in-string': 'off',
 
     // Avoid code that looks like two expressions but is actually one
     // http://eslint.org/docs/rules/no-unexpected-multiline
-    'no-unexpected-multiline': 2,
+    'no-unexpected-multiline': 'error',
 
     // disallow unreachable statements after a return, throw, continue, or break statement
-    'no-unreachable': 2,
+    'no-unreachable': 'error',
 
     // disallow return/throw/break/continue inside finally blocks
     // http://eslint.org/docs/rules/no-unsafe-finally
-    'no-unsafe-finally': 2,
+    'no-unsafe-finally': 'error',
 
     // disallow negating the left operand of relational operators
     // http://eslint.org/docs/rules/no-unsafe-negation
-    'no-unsafe-negation': 2,
+    'no-unsafe-negation': 'error',
 
     // disallow comparisons with the value NaN
-    'use-isnan': 2,
+    'use-isnan': 'error',
 
     // ensure JSDoc comments are valid
     // http://eslint.org/docs/rules/valid-jsdoc
-    'valid-jsdoc': 0,
+    'valid-jsdoc': 'off',
 
     // ensure that the results of typeof are compared against a valid string
-    'valid-typeof': 2
+    'valid-typeof': 'error'
   }
 };
diff --git a/packages/eslint-config-airbnb-base/rules/es6.js b/packages/eslint-config-airbnb-base/rules/es6.js
index a7754b6461..169e30be01 100644
--- a/packages/eslint-config-airbnb-base/rules/es6.js
+++ b/packages/eslint-config-airbnb-base/rules/es6.js
@@ -14,89 +14,89 @@ module.exports = {
   rules: {
     // enforces no braces where they can be omitted
     // http://eslint.org/docs/rules/arrow-body-style
-    'arrow-body-style': [2, 'as-needed'],
+    'arrow-body-style': ['error', 'as-needed'],
 
     // require parens in arrow function arguments
-    'arrow-parens': 0,
+    'arrow-parens': 'off',
 
     // require space before/after arrow function's arrow
     // http://eslint.org/docs/rules/arrow-spacing
-    'arrow-spacing': [2, { before: true, after: true }],
+    'arrow-spacing': ['error', { before: true, after: true }],
 
     // verify super() callings in constructors
-    'constructor-super': 2,
+    'constructor-super': 'error',
 
     // enforce the spacing around the * in generator functions
     // http://eslint.org/docs/rules/generator-star-spacing
-    'generator-star-spacing': [2, { before: false, after: true }],
+    'generator-star-spacing': ['error', { before: false, after: true }],
 
     // disallow modifying variables of class declarations
     // http://eslint.org/docs/rules/no-class-assign
-    'no-class-assign': 2,
+    'no-class-assign': 'error',
 
     // disallow arrow functions where they could be confused with comparisons
     // http://eslint.org/docs/rules/no-confusing-arrow
-    'no-confusing-arrow': [2, {
+    'no-confusing-arrow': ['error', {
       allowParens: true,
     }],
 
     // disallow modifying variables that are declared using const
-    'no-const-assign': 2,
+    'no-const-assign': 'error',
 
     // disallow duplicate class members
     // http://eslint.org/docs/rules/no-dupe-class-members
-    'no-dupe-class-members': 2,
+    'no-dupe-class-members': 'error',
 
     // disallow importing from the same path more than once
     // http://eslint.org/docs/rules/no-duplicate-imports
-    'no-duplicate-imports': 2,
+    'no-duplicate-imports': 'error',
 
     // disallow symbol constructor
     // http://eslint.org/docs/rules/no-new-symbol
-    'no-new-symbol': 2,
+    'no-new-symbol': 'error',
 
     // disallow specific imports
     // http://eslint.org/docs/rules/no-restricted-imports
-    'no-restricted-imports': 0,
+    'no-restricted-imports': 'off',
 
     // disallow to use this/super before super() calling in constructors.
     // http://eslint.org/docs/rules/no-this-before-super
-    'no-this-before-super': 2,
+    'no-this-before-super': 'error',
 
     // disallow useless computed property keys
     // http://eslint.org/docs/rules/no-useless-computed-key
-    'no-useless-computed-key': 2,
+    'no-useless-computed-key': 'error',
 
     // disallow unnecessary constructor
     // http://eslint.org/docs/rules/no-useless-constructor
-    'no-useless-constructor': 2,
+    'no-useless-constructor': 'error',
 
     // disallow renaming import, export, and destructured assignments to the same name
     // http://eslint.org/docs/rules/no-useless-rename
-    'no-useless-rename': [2, {
+    'no-useless-rename': ['error', {
       ignoreDestructuring: false,
       ignoreImport: false,
       ignoreExport: false,
     }],
 
     // require let or const instead of var
-    'no-var': 2,
+    'no-var': 'error',
 
     // require method and property shorthand syntax for object literals
     // http://eslint.org/docs/rules/object-shorthand
-    'object-shorthand': [2, 'always', {
+    'object-shorthand': ['error', 'always', {
       ignoreConstructors: false,
       avoidQuotes: true,
     }],
 
     // suggest using arrow functions as callbacks
-    'prefer-arrow-callback': [2, {
+    'prefer-arrow-callback': ['error', {
       allowNamedFunctions: false,
       allowUnboundThis: true,
     }],
 
     // suggest using of const declaration for variables that are never modified after declared
-    'prefer-const': [2, {
+    'prefer-const': ['error', {
       destructuring: 'any',
       ignoreReadBeforeAssign: true,
     }],
@@ -104,31 +104,31 @@ module.exports = {
     // suggest using Reflect methods where applicable
     // http://eslint.org/docs/rules/prefer-reflect
     // TODO: enable
-    'prefer-reflect': 0,
+    'prefer-reflect': 'off',
 
     // use rest parameters instead of arguments
     // http://eslint.org/docs/rules/prefer-rest-params
-    'prefer-rest-params': 2,
+    'prefer-rest-params': 'error',
 
     // suggest using the spread operator instead of .apply()
     // http://eslint.org/docs/rules/prefer-spread
-    'prefer-spread': 2,
+    'prefer-spread': 'error',
 
     // suggest using template literals instead of string concatenation
     // http://eslint.org/docs/rules/prefer-template
-    'prefer-template': 2,
+    'prefer-template': 'error',
 
     // disallow generator functions that do not have yield
     // http://eslint.org/docs/rules/require-yield
-    'require-yield': 2,
+    'require-yield': 'error',
 
     // enforce spacing between object rest-spread
     // http://eslint.org/docs/rules/rest-spread-spacing
-    'rest-spread-spacing': [2, 'never'],
+    'rest-spread-spacing': ['error', 'never'],
 
     // import sorting
     // http://eslint.org/docs/rules/sort-imports
-    'sort-imports': [0, {
+    'sort-imports': ['off', {
       ignoreCase: false,
       ignoreMemberSort: false,
       memberSyntaxSortOrder: ['none', 'all', 'multiple', 'single'],
@@ -136,10 +136,10 @@ module.exports = {
 
     // enforce usage of spacing in template strings
     // http://eslint.org/docs/rules/template-curly-spacing
-    'template-curly-spacing': 2,
+    'template-curly-spacing': 'error',
 
     // enforce spacing around the * in yield* expressions
     // http://eslint.org/docs/rules/yield-star-spacing
-    'yield-star-spacing': [2, 'after']
+    'yield-star-spacing': ['error', 'after']
   }
 };
diff --git a/packages/eslint-config-airbnb-base/rules/imports.js b/packages/eslint-config-airbnb-base/rules/imports.js
index 821818909d..09f2397c70 100644
--- a/packages/eslint-config-airbnb-base/rules/imports.js
+++ b/packages/eslint-config-airbnb-base/rules/imports.js
@@ -33,101 +33,101 @@ module.exports = {
 
     // ensure imports point to files/modules that can be resolved
     // https://github.com/benmosher/eslint-plugin-import/blob/master/docs/rules/no-unresolved.md
-    'import/no-unresolved': [2, { commonjs: true }],
+    'import/no-unresolved': ['error', { commonjs: true }],
 
     // ensure named imports coupled with named exports
     // https://github.com/benmosher/eslint-plugin-import/blob/master/docs/rules/named.md#when-not-to-use-it
-    'import/named': 0,
+    'import/named': 'off',
 
     // ensure default import coupled with default export
     // https://github.com/benmosher/eslint-plugin-import/blob/master/docs/rules/default.md#when-not-to-use-it
-    'import/default': 0,
+    'import/default': 'off',
 
     // https://github.com/benmosher/eslint-plugin-import/blob/master/docs/rules/namespace.md
-    'import/namespace': 0,
+    'import/namespace': 'off',
 
     // Helpful warnings:
 
     // disallow invalid exports, e.g. multiple defaults
     // https://github.com/benmosher/eslint-plugin-import/blob/master/docs/rules/export.md
-    'import/export': 2,
+    'import/export': 'error',
 
     // do not allow a default import name to match a named export
     // https://github.com/benmosher/eslint-plugin-import/blob/master/docs/rules/no-named-as-default.md
-    'import/no-named-as-default': 2,
+    'import/no-named-as-default': 'error',
 
     // warn on accessing default export property names that are also named exports
     // https://github.com/benmosher/eslint-plugin-import/blob/master/docs/rules/no-named-as-default-member.md
-    'import/no-named-as-default-member': 2,
+    'import/no-named-as-default-member': 'error',
 
     // disallow use of jsdoc-marked-deprecated imports
     // https://github.com/benmosher/eslint-plugin-import/blob/master/docs/rules/no-deprecated.md
-    'import/no-deprecated': 0,
+    'import/no-deprecated': 'off',
 
     // Forbid the use of extraneous packages
     // https://github.com/benmosher/eslint-plugin-import/blob/master/docs/rules/no-extraneous-dependencies.md
-    'import/no-extraneous-dependencies': [2, {
+    'import/no-extraneous-dependencies': ['error', {
       devDependencies: false,
       optionalDependencies: false,
     }],
 
     // Forbid mutable exports
     // https://github.com/benmosher/eslint-plugin-import/blob/master/docs/rules/no-mutable-exports.md
-    'import/no-mutable-exports': 2,
+    'import/no-mutable-exports': 'error',
 
     // Module systems:
 
     // disallow require()
     // https://github.com/benmosher/eslint-plugin-import/blob/master/docs/rules/no-commonjs.md
-    'import/no-commonjs': 0,
+    'import/no-commonjs': 'off',
 
     // disallow AMD require/define
     // https://github.com/benmosher/eslint-plugin-import/blob/master/docs/rules/no-amd.md
-    'import/no-amd': 2,
+    'import/no-amd': 'error',
 
     // No Node.js builtin modules
     // https://github.com/benmosher/eslint-plugin-import/blob/master/docs/rules/no-nodejs-modules.md
     // TODO: enable?
-    'import/no-nodejs-modules': 0,
+    'import/no-nodejs-modules': 'off',
 
     // Style guide:
 
     // disallow non-import statements appearing before import statements
     // https://github.com/benmosher/eslint-plugin-import/blob/master/docs/rules/imports-first.md
-    'import/imports-first': [2, 'absolute-first'],
+    'import/imports-first': ['error', 'absolute-first'],
 
     // disallow duplicate imports
     // https://github.com/benmosher/eslint-plugin-import/blob/master/docs/rules/no-duplicates.md
-    'import/no-duplicates': 2,
+    'import/no-duplicates': 'error',
 
     // disallow namespace imports
     // TODO: enable?
     // https://github.com/benmosher/eslint-plugin-import/blob/master/docs/rules/no-namespace.md
-    'import/no-namespace': 0,
+    'import/no-namespace': 'off',
 
     // Ensure consistent use of file extension within the import path
     // https://github.com/benmosher/eslint-plugin-import/blob/master/docs/rules/extensions.md
     // TODO: enable when https://github.com/benmosher/eslint-plugin-import/issues/390 is resolved
-    'import/extensions': [0, 'never'],
+    'import/extensions': ['off', 'never'],
 
     // Enforce a convention in module import order
     // https://github.com/benmosher/eslint-plugin-import/blob/master/docs/rules/order.md
     // TODO: enable?
-    'import/order': [0, {
+    'import/order': ['off', {
       groups: ['builtin', 'external', 'internal', 'parent', 'sibling', 'index'],
       'newlines-between': 'never',
     }],
 
     // Require a newline after the last import/require in a group
     // https://github.com/benmosher/eslint-plugin-import/blob/master/docs/rules/newline-after-import.md
-    'import/newline-after-import': 2,
+    'import/newline-after-import': 'error',
 
     // Require modules with a single export to use a default export
     // https://github.com/benmosher/eslint-plugin-import/blob/master/docs/rules/prefer-default-export.md
-    'import/prefer-default-export': 2,
+    'import/prefer-default-export': 'error',
 
     // Restrict which files can be imported in a given folder
     // https://github.com/benmosher/eslint-plugin-import/blob/master/docs/rules/no-restricted-paths.md
-    'import/no-restricted-paths': 0,
+    'import/no-restricted-paths': 'off',
   },
 };
diff --git a/packages/eslint-config-airbnb-base/rules/node.js b/packages/eslint-config-airbnb-base/rules/node.js
index cbd8fc22e6..e4a71a6a5a 100644
--- a/packages/eslint-config-airbnb-base/rules/node.js
+++ b/packages/eslint-config-airbnb-base/rules/node.js
@@ -5,35 +5,35 @@ module.exports = {
 
   rules: {
     // enforce return after a callback
-    'callback-return': 0,
+    'callback-return': 'off',
 
     // require all requires be top-level
     // http://eslint.org/docs/rules/global-require
-    'global-require': 2,
+    'global-require': 'error',
 
     // enforces error handling in callbacks (node environment)
-    'handle-callback-err': 0,
+    'handle-callback-err': 'off',
 
     // disallow mixing regular variable and require declarations
-    'no-mixed-requires': [0, false],
+    'no-mixed-requires': ['off', false],
 
     // disallow use of new operator with the require function
-    'no-new-require': 2,
+    'no-new-require': 'error',
 
     // disallow string concatenation with __dirname and __filename
     // http://eslint.org/docs/rules/no-path-concat
-    'no-path-concat': 2,
+    'no-path-concat': 'error',
 
     // disallow use of process.env
-    'no-process-env': 0,
+    'no-process-env': 'off',
 
     // disallow process.exit()
-    'no-process-exit': 0,
+    'no-process-exit': 'off',
 
     // restrict usage of specified node modules
-    'no-restricted-modules': 0,
+    'no-restricted-modules': 'off',
 
     // disallow use of synchronous methods (off by default)
-    'no-sync': 0,
+    'no-sync': 'off',
   }
 };
diff --git a/packages/eslint-config-airbnb-base/rules/strict.js b/packages/eslint-config-airbnb-base/rules/strict.js
index 43d7010c60..67cfd5e8a3 100644
--- a/packages/eslint-config-airbnb-base/rules/strict.js
+++ b/packages/eslint-config-airbnb-base/rules/strict.js
@@ -1,6 +1,6 @@
 module.exports = {
   rules: {
     // babel inserts `'use strict';` for us
-    strict: [2, 'never']
+    strict: ['error', 'never']
   }
 };
diff --git a/packages/eslint-config-airbnb-base/rules/style.js b/packages/eslint-config-airbnb-base/rules/style.js
index 5d8825aab9..e32e79869f 100644
--- a/packages/eslint-config-airbnb-base/rules/style.js
+++ b/packages/eslint-config-airbnb-base/rules/style.js
@@ -1,68 +1,68 @@
 module.exports = {
   rules: {
     // enforce spacing inside array brackets
-    'array-bracket-spacing': [2, 'never'],
+    'array-bracket-spacing': ['error', 'never'],
 
     // enforce spacing inside single-line blocks
     // http://eslint.org/docs/rules/block-spacing
-    'block-spacing': [2, 'always'],
+    'block-spacing': ['error', 'always'],
 
     // enforce one true brace style
-    'brace-style': [2, '1tbs', { allowSingleLine: true }],
+    'brace-style': ['error', '1tbs', { allowSingleLine: true }],
 
     // require camel case names
-    camelcase: [2, { properties: 'never' }],
+    camelcase: ['error', { properties: 'never' }],
 
     // enforce spacing before and after comma
-    'comma-spacing': [2, { before: false, after: true }],
+    'comma-spacing': ['error', { before: false, after: true }],
 
     // enforce one true comma style
-    'comma-style': [2, 'last'],
+    'comma-style': ['error', 'last'],
 
     // disallow padding inside computed properties
-    'computed-property-spacing': [2, 'never'],
+    'computed-property-spacing': ['error', 'never'],
 
     // enforces consistent naming when capturing the current execution context
-    'consistent-this': 0,
+    'consistent-this': 'off',
 
     // enforce newline at the end of file, with no multiple empty lines
-    'eol-last': 2,
+    'eol-last': 'error',
 
     // enforce spacing between functions and their invocations
     // http://eslint.org/docs/rules/func-call-spacing
     // TODO: enable, semver-minor
-    'func-call-spacing': [0, 'never'],
+    'func-call-spacing': ['off', 'never'],
 
     // require function expressions to have a name
-    'func-names': 1,
+    'func-names': 'warn',
 
     // enforces use of function declarations or expressions
-    'func-style': 0,
+    'func-style': 'off',
 
     // Blacklist certain identifiers to prevent them being used
     // http://eslint.org/docs/rules/id-blacklist
-    'id-blacklist': 0,
+    'id-blacklist': 'off',
 
     // this option enforces minimum and maximum identifier lengths
     // (variable names, property names etc.)
-    'id-length': 0,
+    'id-length': 'off',
 
     // require identifiers to match the provided regular expression
-    'id-match': 0,
+    'id-match': 'off',
 
     // this option sets a specific tab width for your code
     // http://eslint.org/docs/rules/indent
-    indent: [2, 2, { SwitchCase: 1, VariableDeclarator: 1, outerIIFEBody: 1 }],
+    indent: ['error', 2, { SwitchCase: 1, VariableDeclarator: 1, outerIIFEBody: 1 }],
 
     // specify whether double or single quotes should be used in JSX attributes
     // http://eslint.org/docs/rules/jsx-quotes
-    'jsx-quotes': [0, 'prefer-double'],
+    'jsx-quotes': ['off', 'prefer-double'],
 
     // enforces spacing between keys and values in object literal properties
-    'key-spacing': [2, { beforeColon: false, afterColon: true }],
+    'key-spacing': ['error', { beforeColon: false, afterColon: true }],
 
     // require a space before & after certain keywords
-    'keyword-spacing': [2, {
+    'keyword-spacing': ['error', {
       before: true,
       after: true,
       overrides: {
@@ -74,86 +74,86 @@ module.exports = {
 
     // disallow mixed 'LF' and 'CRLF' as linebreaks
     // http://eslint.org/docs/rules/linebreak-style
-    'linebreak-style': [2, 'unix'],
+    'linebreak-style': ['error', 'unix'],
 
     // enforces empty lines around comments
-    'lines-around-comment': 0,
+    'lines-around-comment': 'off',
 
     // specify the maximum depth that blocks can be nested
-    'max-depth': [0, 4],
+    'max-depth': ['off', 4],
 
     // specify the maximum length of a line in your program
     // http://eslint.org/docs/rules/max-len
-    'max-len': [2, 100, 2, {
+    'max-len': ['error', 100, 2, {
       ignoreUrls: true,
       ignoreComments: false
     }],
 
     // specify the max number of lines in a file
     // http://eslint.org/docs/rules/max-lines
-    'max-lines': [0, {
+    'max-lines': ['off', {
       max: 300,
       skipBlankLines: true,
       skipComments: true
     }],
 
     // specify the maximum depth callbacks can be nested
-    'max-nested-callbacks': 0,
+    'max-nested-callbacks': 'off',
 
     // limits the number of parameters that can be used in the function declaration.
-    'max-params': [0, 3],
+    'max-params': ['off', 3],
 
     // specify the maximum number of statement allowed in a function
-    'max-statements': [0, 10],
+    'max-statements': ['off', 10],
 
     // restrict the number of statements per line
     // http://eslint.org/docs/rules/max-statements-per-line
-    'max-statements-per-line': [0, { max: 1 }],
+    'max-statements-per-line': ['off', { max: 1 }],
 
     // require multiline ternary
     // http://eslint.org/docs/rules/multiline-ternary
-    'multiline-ternary': 0,
+    'multiline-ternary': 'off',
 
     // require a capital letter for constructors
-    'new-cap': [2, { newIsCap: true }],
+    'new-cap': ['error', { newIsCap: true }],
 
     // disallow the omission of parentheses when invoking a constructor with no arguments
     // http://eslint.org/docs/rules/new-parens
-    'new-parens': 2,
+    'new-parens': 'error',
 
     // allow/disallow an empty newline after var statement
-    'newline-after-var': 0,
+    'newline-after-var': 'off',
 
     // http://eslint.org/docs/rules/newline-before-return
-    'newline-before-return': 0,
+    'newline-before-return': 'off',
 
     // enforces new line after each method call in the chain to make it
     // more readable and easy to maintain
     // http://eslint.org/docs/rules/newline-per-chained-call
-    'newline-per-chained-call': [2, { ignoreChainWithDepth: 4 }],
+    'newline-per-chained-call': ['error', { ignoreChainWithDepth: 4 }],
 
     // disallow use of the Array constructor
-    'no-array-constructor': 2,
+    'no-array-constructor': 'error',
 
     // disallow use of bitwise operators
     // http://eslint.org/docs/rules/no-bitwise
     // TODO: enable
-    'no-bitwise': 0,
+    'no-bitwise': 'off',
 
     // disallow use of the continue statement
     // http://eslint.org/docs/rules/no-continue
-    'no-continue': 2,
+    'no-continue': 'error',
 
     // disallow comments inline after code
-    'no-inline-comments': 0,
+    'no-inline-comments': 'off',
 
     // disallow if as the only statement in an else block
     // http://eslint.org/docs/rules/no-lonely-if
-    'no-lonely-if': 2,
+    'no-lonely-if': 'error',
 
     // disallow un-paren'd mixes of different operators
     // http://eslint.org/docs/rules/no-mixed-operators
-    'no-mixed-operators': [2, {
+    'no-mixed-operators': ['error', {
       groups: [
         ['+', '-', '*', '/', '%', '**'],
         ['&', '|', '^', '~', '<<', '>>', '>>>'],
@@ -165,28 +165,28 @@ module.exports = {
     }],
 
     // disallow mixed spaces and tabs for indentation
-    'no-mixed-spaces-and-tabs': 2,
+    'no-mixed-spaces-and-tabs': 'error',
 
     // disallow multiple empty lines and only one newline at the end
-    'no-multiple-empty-lines': [2, { max: 2, maxEOF: 1 }],
+    'no-multiple-empty-lines': ['error', { max: 2, maxEOF: 1 }],
 
     // disallow negated conditions
     // http://eslint.org/docs/rules/no-negated-condition
-    'no-negated-condition': 0,
+    'no-negated-condition': 'off',
 
     // disallow nested ternary expressions
-    'no-nested-ternary': 2,
+    'no-nested-ternary': 'error',
 
     // disallow use of the Object constructor
-    'no-new-object': 2,
+    'no-new-object': 'error',
 
     // disallow use of unary operators, ++ and --
-    'no-plusplus': 0,
+    'no-plusplus': 'off',
 
     // disallow certain syntax forms
     // http://eslint.org/docs/rules/no-restricted-syntax
     'no-restricted-syntax': [
-      2,
+      'error',
       'DebuggerStatement',
       'ForInStatement',
       'LabeledStatement',
@@ -194,103 +194,103 @@ module.exports = {
     ],
 
     // disallow space between function identifier and application
-    'no-spaced-func': 2,
+    'no-spaced-func': 'error',
 
     // disallow tab characters entirely
     // TODO: enable
-    'no-tabs': 0,
+    'no-tabs': 'off',
 
     // disallow the use of ternary operators
-    'no-ternary': 0,
+    'no-ternary': 'off',
 
     // disallow trailing whitespace at the end of lines
-    'no-trailing-spaces': 2,
+    'no-trailing-spaces': 'error',
 
     // disallow dangling underscores in identifiers
-    'no-underscore-dangle': [2, { allowAfterThis: false }],
+    'no-underscore-dangle': ['error', { allowAfterThis: false }],
 
     // disallow the use of Boolean literals in conditional expressions
     // also, prefer `a || b` over `a ? a : b`
     // http://eslint.org/docs/rules/no-unneeded-ternary
-    'no-unneeded-ternary': [2, { defaultAssignment: false }],
+    'no-unneeded-ternary': ['error', { defaultAssignment: false }],
 
     // disallow whitespace before properties
     // http://eslint.org/docs/rules/no-whitespace-before-property
-    'no-whitespace-before-property': 2,
+    'no-whitespace-before-property': 'error',
 
     // require padding inside curly braces
-    'object-curly-spacing': [2, 'always'],
+    'object-curly-spacing': ['error', 'always'],
 
     // enforce line breaks between braces
     // http://eslint.org/docs/rules/object-curly-newline
     // TODO: enable once https://github.com/eslint/eslint/issues/6488 is resolved
-    'object-curly-newline': [0, {
+    'object-curly-newline': ['off', {
       ObjectExpression: { minProperties: 0, multiline: true },
       ObjectPattern: { minProperties: 0, multiline: true }
     }],
 
     // enforce "same line" or "multiple line" on object properties.
     // http://eslint.org/docs/rules/object-property-newline
-    'object-property-newline': [2, {
+    'object-property-newline': ['error', {
       allowMultiplePropertiesPerLine: true,
     }],
 
     // allow just one var statement per function
-    'one-var': [2, 'never'],
+    'one-var': ['error', 'never'],
 
     // require a newline around variable declaration
     // http://eslint.org/docs/rules/one-var-declaration-per-line
-    'one-var-declaration-per-line': [2, 'always'],
+    'one-var-declaration-per-line': ['error', 'always'],
 
     // require assignment operator shorthand where possible or prohibit it entirely
     // http://eslint.org/docs/rules/operator-assignment
-    'operator-assignment': [2, 'always'],
+    'operator-assignment': ['error', 'always'],
 
     // enforce operators to be placed before or after line breaks
-    'operator-linebreak': 0,
+    'operator-linebreak': 'off',
 
     // enforce padding within blocks
-    'padded-blocks': [2, 'never'],
+    'padded-blocks': ['error', 'never'],
 
     // require quotes around object literal property names
     // http://eslint.org/docs/rules/quote-props.html
-    'quote-props': [2, 'as-needed', { keywords: false, unnecessary: true, numbers: false }],
+    'quote-props': ['error', 'as-needed', { keywords: false, unnecessary: true, numbers: false }],
 
     // specify whether double or single quotes should be used
-    quotes: [2, 'single', { avoidEscape: true }],
+    quotes: ['error', 'single', { avoidEscape: true }],
 
     // do not require jsdoc
     // http://eslint.org/docs/rules/require-jsdoc
-    'require-jsdoc': 0,
+    'require-jsdoc': 'off',
 
     // require or disallow use of semicolons instead of ASI
-    semi: [2, 'always'],
+    semi: ['error', 'always'],
 
     // enforce spacing before and after semicolons
-    'semi-spacing': [2, { before: false, after: true }],
+    'semi-spacing': ['error', { before: false, after: true }],
 
     // requires object keys to be sorted
-    'sort-keys': [0, 'asc', { caseSensitive: false, natural: true }],
+    'sort-keys': ['off', 'asc', { caseSensitive: false, natural: true }],
 
     // sort variables within the same declaration block
-    'sort-vars': 0,
+    'sort-vars': 'off',
 
     // require or disallow space before blocks
-    'space-before-blocks': 2,
+    'space-before-blocks': 'error',
 
     // require or disallow space before function opening parenthesis
     // http://eslint.org/docs/rules/space-before-function-paren
-    'space-before-function-paren': [2, { anonymous: 'always', named: 'never' }],
+    'space-before-function-paren': ['error', { anonymous: 'always', named: 'never' }],
 
     // require or disallow spaces inside parentheses
-    'space-in-parens': [2, 'never'],
+    'space-in-parens': ['error', 'never'],
 
     // require spaces around operators
-    'space-infix-ops': 2,
+    'space-infix-ops': 'error',
 
     // Require or disallow spaces before/after unary operators
     // http://eslint.org/docs/rules/space-unary-ops
-    'space-unary-ops': [2, {
+    'space-unary-ops': ['error', {
       words: true,
       nonwords: false,
       overrides: {
@@ -298,16 +298,16 @@ module.exports = {
     }],
 
     // require or disallow a space immediately following the // or /* in a comment
-    'spaced-comment': [2, 'always', {
+    'spaced-comment': ['error', 'always', {
       exceptions: ['-', '+'],
       markers: ['=', '!']           // space here to support sprockets directives
     }],
 
     // require or disallow the Unicode Byte Order Mark
     // http://eslint.org/docs/rules/unicode-bom
-    'unicode-bom': [2, 'never'],
+    'unicode-bom': ['error', 'never'],
 
     // require regex literals to be wrapped in parentheses
-    'wrap-regex': 0
+    'wrap-regex': 'off'
   }
 };
diff --git a/packages/eslint-config-airbnb-base/rules/variables.js b/packages/eslint-config-airbnb-base/rules/variables.js
index 3abce6f8ec..312ee76813 100644
--- a/packages/eslint-config-airbnb-base/rules/variables.js
+++ b/packages/eslint-config-airbnb-base/rules/variables.js
@@ -1,41 +1,41 @@
 module.exports = {
   rules: {
     // enforce or disallow variable initializations at definition
-    'init-declarations': 0,
+    'init-declarations': 'off',
 
     // disallow the catch clause parameter name being the same as a variable in the outer scope
-    'no-catch-shadow': 0,
+    'no-catch-shadow': 'off',
 
     // disallow deletion of variables
-    'no-delete-var': 2,
+    'no-delete-var': 'error',
 
     // disallow labels that share a name with a variable
     // http://eslint.org/docs/rules/no-label-var
-    'no-label-var': 2,
+    'no-label-var': 'error',
 
     // disallow specific globals
-    'no-restricted-globals': 0,
+    'no-restricted-globals': 'off',
 
     // disallow declaration of variables already declared in the outer scope
-    'no-shadow': 2,
+    'no-shadow': 'error',
 
     // disallow shadowing of names such as arguments
-    'no-shadow-restricted-names': 2,
+    'no-shadow-restricted-names': 'error',
 
     // disallow use of undeclared variables unless mentioned in a /*global */ block
-    'no-undef': 2,
+    'no-undef': 'error',
 
     // disallow use of undefined when initializing variables
-    'no-undef-init': 2,
+    'no-undef-init': 'error',
 
     // disallow use of undefined variable
     // TODO: enable?
-    'no-undefined': 0,
+    'no-undefined': 'off',
 
     // disallow declaration of variables that are not used in the code
-    'no-unused-vars': [2, { vars: 'local', args: 'after-used' }],
+    'no-unused-vars': ['error', { vars: 'local', args: 'after-used' }],
 
     // disallow use of variables before they are defined
-    'no-use-before-define': 2
+    'no-use-before-define': 'error'
   }
 };
diff --git a/packages/eslint-config-airbnb/rules/react-a11y.js b/packages/eslint-config-airbnb/rules/react-a11y.js
index 9e1c664449..76430261c7 100644
--- a/packages/eslint-config-airbnb/rules/react-a11y.js
+++ b/packages/eslint-config-airbnb/rules/react-a11y.js
@@ -10,96 +10,96 @@ module.exports = {
     // Enforce that anchors have content
     // https://github.com/evcohen/eslint-plugin-jsx-a11y/blob/master/docs/rules/anchor-has-content.md
     // TODO: enable, semver-major
-    'jsx-a11y/anchor-has-content': [0, ['']],
+    'jsx-a11y/anchor-has-content': ['off', ['']],
 
     // Require ARIA roles to be valid and non-abstract
     // https://github.com/evcohen/eslint-plugin-jsx-a11y/blob/master/docs/rules/aria-role.md
-    'jsx-a11y/aria-role': 2,
+    'jsx-a11y/aria-role': 'error',
 
     // Enforce all aria-* props are valid.
     // https://github.com/evcohen/eslint-plugin-jsx-a11y/blob/master/docs/rules/aria-props.md
-    'jsx-a11y/aria-props': 2,
+    'jsx-a11y/aria-props': 'error',
 
     // Enforce ARIA state and property values are valid.
     // https://github.com/evcohen/eslint-plugin-jsx-a11y/blob/master/docs/rules/aria-proptypes.md
-    'jsx-a11y/aria-proptypes': 2,
+    'jsx-a11y/aria-proptypes': 'error',
 
     // Enforce that elements that do not support ARIA roles, states, and
     // properties do not have those attributes.
     // https://github.com/evcohen/eslint-plugin-jsx-a11y/blob/master/docs/rules/aria-unsupported-elements.md
-    'jsx-a11y/aria-unsupported-elements': 2,
+    'jsx-a11y/aria-unsupported-elements': 'error',
 
     // disallow href "#"
     // https://github.com/evcohen/eslint-plugin-jsx-a11y/blob/master/docs/rules/href-no-hash.md
-    'jsx-a11y/href-no-hash': [2, ['a']],
+    'jsx-a11y/href-no-hash': ['error', ['a']],
 
     // Require <img> to have a non-empty `alt` prop, or role="presentation"
     // https://github.com/evcohen/eslint-plugin-jsx-a11y/blob/master/docs/rules/img-has-alt.md
-    'jsx-a11y/img-has-alt': 2,
+    'jsx-a11y/img-has-alt': 'error',
 
     // Prevent img alt text from containing redundant words like "image", "picture", or "photo"
     // https://github.com/evcohen/eslint-plugin-jsx-a11y/blob/master/docs/rules/img-redundant-alt.md
-    'jsx-a11y/img-redundant-alt': 2,
+    'jsx-a11y/img-redundant-alt': 'error',
 
     // require that JSX labels use "htmlFor"
     // https://github.com/evcohen/eslint-plugin-jsx-a11y/blob/master/docs/rules/label-has-for.md
-    'jsx-a11y/label-has-for': [2, ['label']],
+    'jsx-a11y/label-has-for': ['error', ['label']],
 
     // require that mouseover/out come with focus/blur, for keyboard-only users
     // TODO: evaluate
     // https://github.com/evcohen/eslint-plugin-jsx-a11y/blob/master/docs/rules/mouse-events-have-key-events.md
-    'jsx-a11y/mouse-events-have-key-events': 0,
+    'jsx-a11y/mouse-events-have-key-events': 'off',
 
     // Prevent use of `accessKey`
     // https://github.com/evcohen/eslint-plugin-jsx-a11y/blob/master/docs/rules/no-access-key.md
-    'jsx-a11y/no-access-key': 2,
+    'jsx-a11y/no-access-key': 'error',
 
     // require onBlur instead of onChange
     // https://github.com/evcohen/eslint-plugin-jsx-a11y/blob/master/docs/rules/no-onchange.md
-    'jsx-a11y/no-onchange': 0,
+    'jsx-a11y/no-onchange': 'off',
 
     // Enforce that elements with onClick handlers must be focusable.
     // TODO: evaluate
     // https://github.com/evcohen/eslint-plugin-jsx-a11y/blob/master/docs/rules/onclick-has-focus.md
-    'jsx-a11y/onclick-has-focus': 0,
+    'jsx-a11y/onclick-has-focus': 'off',
 
     // require things with onClick to have an aria role
     // https://github.com/evcohen/eslint-plugin-jsx-a11y/blob/master/docs/rules/onclick-has-role.md
-    'jsx-a11y/onclick-has-role': 0,
+    'jsx-a11y/onclick-has-role': 'off',
 
     // Enforce that elements with ARIA roles must have all required attributes
     // for that role.
     // https://github.com/evcohen/eslint-plugin-jsx-a11y/blob/master/docs/rules/role-has-required-aria-props.md
-    'jsx-a11y/role-has-required-aria-props': 2,
+    'jsx-a11y/role-has-required-aria-props': 'error',
 
     // Enforce that elements with explicit or implicit roles defined contain
     // only aria-* properties supported by that role.
     // https://github.com/evcohen/eslint-plugin-jsx-a11y/blob/master/docs/rules/role-supports-aria-props.md
-    'jsx-a11y/role-supports-aria-props': 2,
+    'jsx-a11y/role-supports-aria-props': 'error',
 
     // Enforce tabIndex value is not greater than zero.
     // TODO: evaluate
     // https://github.com/evcohen/eslint-plugin-jsx-a11y/blob/master/docs/rules/tabindex-no-positive.md
-    'jsx-a11y/tabindex-no-positive': 0,
+    'jsx-a11y/tabindex-no-positive': 'off',
 
     // ensure <hX> tags have content and are not aria-hidden
     // https://github.com/evcohen/eslint-plugin-jsx-a11y/blob/master/docs/rules/heading-has-content.md
-    'jsx-a11y/heading-has-content': [2, ['']],
+    'jsx-a11y/heading-has-content': ['error', ['']],
 
     // require HTML elements to have a "lang" prop
     // https://github.com/evcohen/eslint-plugin-jsx-a11y/blob/master/docs/rules/html-has-lang.md
-    'jsx-a11y/html-has-lang': 2,
+    'jsx-a11y/html-has-lang': 'error',
 
     // require HTML element's lang prop to be valid
     // https://github.com/evcohen/eslint-plugin-jsx-a11y/blob/master/docs/rules/lang.md
-    'jsx-a11y/lang': 2,
+    'jsx-a11y/lang': 'error',
 
     // prevent marquee elements
     // https://github.com/evcohen/eslint-plugin-jsx-a11y/blob/master/docs/rules/no-marquee.md
-    'jsx-a11y/no-marquee': 2,
+    'jsx-a11y/no-marquee': 'error',
 
     // only allow <th> to have the "scope" attr
     // https://github.com/evcohen/eslint-plugin-jsx-a11y/blob/master/docs/rules/scope.md
-    'jsx-a11y/scope': 2,
+    'jsx-a11y/scope': 'error',
   },
 };
diff --git a/packages/eslint-config-airbnb/rules/react.js b/packages/eslint-config-airbnb/rules/react.js
index 4bb15b6bd5..1552b7ea78 100644
--- a/packages/eslint-config-airbnb/rules/react.js
+++ b/packages/eslint-config-airbnb/rules/react.js
@@ -16,50 +16,50 @@ module.exports = {
   rules: {
     // Specify whether double or single quotes should be used in JSX attributes
     // http://eslint.org/docs/rules/jsx-quotes
-    'jsx-quotes': [2, 'prefer-double'],
+    'jsx-quotes': ['error', 'prefer-double'],
 
     // Prevent missing displayName in a React component definition
     // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/display-name.md
-    'react/display-name': [0, { ignoreTranspilerName: false }],
+    'react/display-name': ['off', { ignoreTranspilerName: false }],
 
     // Forbid certain propTypes (any, array, object)
     // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/forbid-prop-types.md
-    'react/forbid-prop-types': [0, { forbid: ['any', 'array', 'object'] }],
+    'react/forbid-prop-types': ['off', { forbid: ['any', 'array', 'object'] }],
 
     // Enforce boolean attributes notation in JSX
     // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/jsx-boolean-value.md
-    'react/jsx-boolean-value': [2, 'never'],
+    'react/jsx-boolean-value': ['error', 'never'],
 
     // Validate closing bracket location in JSX
     // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/jsx-closing-bracket-location.md
-    'react/jsx-closing-bracket-location': [2, 'line-aligned'],
+    'react/jsx-closing-bracket-location': ['error', 'line-aligned'],
 
     // Enforce or disallow spaces inside of curly braces in JSX attributes
     // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/jsx-curly-spacing.md
-    'react/jsx-curly-spacing': [2, 'never', { allowMultiline: true }],
+    'react/jsx-curly-spacing': ['error', 'never', { allowMultiline: true }],
 
     // Enforce event handler naming conventions in JSX
     // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/jsx-handler-names.md
-    'react/jsx-handler-names': [0, {
+    'react/jsx-handler-names': ['off', {
       eventHandlerPrefix: 'handle',
       eventHandlerPropPrefix: 'on',
     }],
 
     // Validate props indentation in JSX
     // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/jsx-indent-props.md
-    'react/jsx-indent-props': [2, 2],
+    'react/jsx-indent-props': ['error', 2],
 
     // Validate JSX has key prop when in array or iterator
     // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/jsx-key.md
-    'react/jsx-key': 0,
+    'react/jsx-key': 'off',
 
     // Limit maximum of props on a single line in JSX
     // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/jsx-max-props-per-line.md
-    'react/jsx-max-props-per-line': [0, { maximum: 1 }],
+    'react/jsx-max-props-per-line': ['off', { maximum: 1 }],
 
     // Prevent usage of .bind() in JSX props
     // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/jsx-no-bind.md
-    'react/jsx-no-bind': [2, {
+    'react/jsx-no-bind': ['error', {
       ignoreRefs: true,
       allowArrowFunctions: true,
       allowBind: false,
@@ -67,37 +67,37 @@ module.exports = {
 
     // Prevent duplicate props in JSX
     // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/jsx-no-duplicate-props.md
-    'react/jsx-no-duplicate-props': [0, { ignoreCase: false }],
+    'react/jsx-no-duplicate-props': ['off', { ignoreCase: false }],
 
     // Prevent usage of unwrapped JSX strings
     // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/jsx-no-literals.md
-    'react/jsx-no-literals': 0,
+    'react/jsx-no-literals': 'off',
 
     // Disallow undeclared variables in JSX
     // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/jsx-no-undef.md
-    'react/jsx-no-undef': 2,
+    'react/jsx-no-undef': 'error',
 
     // Enforce PascalCase for user-defined JSX components
     // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/jsx-pascal-case.md
-    'react/jsx-pascal-case': [2, {
+    'react/jsx-pascal-case': ['error', {
       allowAllCaps: true,
       ignore: [],
     }],
 
     // Enforce propTypes declarations alphabetical sorting
     // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/sort-prop-types.md
-    'react/sort-prop-types': [0, {
+    'react/sort-prop-types': ['off', {
       ignoreCase: false,
       callbacksLast: false,
       requiredFirst: false,
     }],
 
     // Deprecated in favor of react/jsx-sort-props
-    'react/jsx-sort-prop-types': 0,
+    'react/jsx-sort-prop-types': 'off',
 
     // Enforce props alphabetical sorting
     // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/jsx-sort-props.md
-    'react/jsx-sort-props': [0, {
+    'react/jsx-sort-props': ['off', {
       ignoreCase: false,
       callbacksLast: false,
       shorthandFirst: false,
@@ -106,87 +106,87 @@ module.exports = {
 
     // Prevent React to be incorrectly marked as unused
     // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/jsx-uses-react.md
-    'react/jsx-uses-react': [2],
+    'react/jsx-uses-react': ['error'],
 
     // Prevent variables used in JSX to be incorrectly marked as unused
     // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/jsx-uses-vars.md
-    'react/jsx-uses-vars': 2,
+    'react/jsx-uses-vars': 'error',
 
     // Prevent usage of dangerous JSX properties
     // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/no-danger.md
-    'react/no-danger': 0,
+    'react/no-danger': 'off',
 
     // Prevent usage of deprecated methods
     // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/no-deprecated.md
-    'react/no-deprecated': [2],
+    'react/no-deprecated': ['error'],
 
     // Prevent usage of setState in componentDidMount
     // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/no-did-mount-set-state.md
-    'react/no-did-mount-set-state': [2],
+    'react/no-did-mount-set-state': ['error'],
 
     // Prevent usage of setState in componentDidUpdate
     // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/no-did-update-set-state.md
-    'react/no-did-update-set-state': [2],
+    'react/no-did-update-set-state': ['error'],
 
     // Prevent direct mutation of this.state
     // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/no-direct-mutation-state.md
-    'react/no-direct-mutation-state': 0,
+    'react/no-direct-mutation-state': 'off',
 
     // Prevent usage of isMounted
     // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/no-is-mounted.md
-    'react/no-is-mounted': 2,
+    'react/no-is-mounted': 'error',
 
     // Prevent multiple component definition per file
     // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/no-multi-comp.md
-    'react/no-multi-comp': [2, { ignoreStateless: true }],
+    'react/no-multi-comp': ['error', { ignoreStateless: true }],
 
     // Prevent usage of setState
     // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/no-set-state.md
-    'react/no-set-state': 0,
+    'react/no-set-state': 'off',
 
     // Prevent using string references
     // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/no-string-refs.md
-    'react/no-string-refs': 2,
+    'react/no-string-refs': 'error',
 
     // Prevent usage of unknown DOM property
     // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/no-unknown-property.md
-    'react/no-unknown-property': 2,
+    'react/no-unknown-property': 'error',
 
     // Require ES6 class declarations over React.createClass
     // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/prefer-es6-class.md
-    'react/prefer-es6-class': [2, 'always'],
+    'react/prefer-es6-class': ['error', 'always'],
 
     // Require stateless functions when not using lifecycle methods, setState or ref
     // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/prefer-stateless-function.md
-    'react/prefer-stateless-function': 2,
+    'react/prefer-stateless-function': 'error',
 
     // Prevent missing props validation in a React component definition
     // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/prop-types.md
-    'react/prop-types': [2, { ignore: [], customValidators: [] }],
+    'react/prop-types': ['error', { ignore: [], customValidators: [] }],
 
     // Prevent missing React when using JSX
     // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/react-in-jsx-scope.md
-    'react/react-in-jsx-scope': 2,
+    'react/react-in-jsx-scope': 'error',
 
     // Restrict file extensions that may be required
     // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/require-extension.md
-    'react/require-extension': [2, { extensions: ['.jsx', '.js'] }],
+    'react/require-extension': ['error', { extensions: ['.jsx', '.js'] }],
 
     // Require render() methods to return something
     // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/require-render-return.md
-    'react/require-render-return': 2,
+    'react/require-render-return': 'error',
 
     // Prevent extra closing tags for components without children
     // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/self-closing-comp.md
-    'react/self-closing-comp': 2,
+    'react/self-closing-comp': 'error',
 
     // Enforce spaces before the closing bracket of self-closing JSX elements
     // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/jsx-space-before-closing.md
-    'react/jsx-space-before-closing': [2, 'always'],
+    'react/jsx-space-before-closing': ['error', 'always'],
 
     // Enforce component methods order
     // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/sort-comp.md
-    'react/sort-comp': [2, {
+    'react/sort-comp': ['error', {
       order: [
         'static-methods',
         'lifecycle',
@@ -200,58 +200,58 @@ module.exports = {
 
     // Prevent missing parentheses around multilines JSX
     // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/jsx-wrap-multilines.md
-    'react/jsx-wrap-multilines': [2, {
+    'react/jsx-wrap-multilines': ['error', {
       declaration: true,
       assignment: true,
       return: true
     }],
-    'react/wrap-multilines': 0, // deprecated version
+    'react/wrap-multilines': 'off', // deprecated version
 
     // Require that the first prop in a JSX element be on a new line when the element is multiline
     // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/jsx-first-prop-new-line.md
-    'react/jsx-first-prop-new-line': [2, 'multiline'],
+    'react/jsx-first-prop-new-line': ['error', 'multiline'],
 
     // Enforce spacing around jsx equals signs
     // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/jsx-equals-spacing.md
-    'react/jsx-equals-spacing': [2, 'never'],
+    'react/jsx-equals-spacing': ['error', 'never'],
 
     // Enforce JSX indentation
     // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/jsx-indent.md
-    'react/jsx-indent': [2, 2],
+    'react/jsx-indent': ['error', 2],
 
     // Disallow target="_blank" on links
     // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/jsx-no-target-blank.md
-    'react/jsx-no-target-blank': 2,
+    'react/jsx-no-target-blank': 'error',
 
     // only .jsx files may have JSX
     // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/jsx-filename-extension.md
-    'react/jsx-filename-extension': [2, { extensions: ['.jsx'] }],
+    'react/jsx-filename-extension': ['error', { extensions: ['.jsx'] }],
 
     // prevent accidental JS comments from being injected into JSX as text
     // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/jsx-no-comment-textnodes.md
-    'react/jsx-no-comment-textnodes': 2,
-    'react/no-comment-textnodes': 0, // deprecated version
+    'react/jsx-no-comment-textnodes': 'error',
+    'react/no-comment-textnodes': 'off', // deprecated version
 
     // disallow using React.render/ReactDOM.render's return value
     // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/no-render-return-value.md
-    'react/no-render-return-value': 2,
+    'react/no-render-return-value': 'error',
 
     // require a shouldComponentUpdate method, or PureRenderMixin
     // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/require-optimization.md
-    'react/require-optimization': [0, { allowDecorators: [] }],
+    'react/require-optimization': ['off', { allowDecorators: [] }],
 
     // warn against using findDOMNode()
     // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/no-find-dom-node.md
-    'react/no-find-dom-node': 2,
+    'react/no-find-dom-node': 'error',
 
     // Forbid certain props on Components
     // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/forbid-component-props.md
-    'react/forbid-component-props': [0, { forbid: [] }],
+    'react/forbid-component-props': ['off', { forbid: [] }],
 
     // Prevent problem with children and props.dangerouslySetInnerHTML
     // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/no-danger-with-children.md
     // TODO: enable, semver-major
-    'react/no-danger-with-children': 0,
+    'react/no-danger-with-children': 'off',
   },
 
   settings: {

From ca1124cd8d2e33addbffb3b1743849e2bf774039 Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Sun, 21 Aug 2016 23:25:19 -0700
Subject: [PATCH 0784/1591] [eslint config] [base] v5.0.3

---
 packages/eslint-config-airbnb-base/CHANGELOG.md | 6 ++++++
 packages/eslint-config-airbnb-base/package.json | 2 +-
 2 files changed, 7 insertions(+), 1 deletion(-)

diff --git a/packages/eslint-config-airbnb-base/CHANGELOG.md b/packages/eslint-config-airbnb-base/CHANGELOG.md
index f26c1d9cb3..aa61e0f2be 100644
--- a/packages/eslint-config-airbnb-base/CHANGELOG.md
+++ b/packages/eslint-config-airbnb-base/CHANGELOG.md
@@ -1,3 +1,9 @@
+5.0.3 / 2016-08-21
+==================
+ - [fix] correct `import/extensions` list (#1013)
+ - [refactor] Changed ESLint rule configs to use 'off', 'warn', and 'error' instead of numbers for better readability (#946)
+ - [deps] update `eslint`, `eslint-plugin-react`
+
 5.0.2 / 2016-08-12
 ==================
  - [deps] update `eslint`, `eslint-find-rules`, `eslint-plugin-import`
diff --git a/packages/eslint-config-airbnb-base/package.json b/packages/eslint-config-airbnb-base/package.json
index ed9014e2de..5a04cd263d 100644
--- a/packages/eslint-config-airbnb-base/package.json
+++ b/packages/eslint-config-airbnb-base/package.json
@@ -1,6 +1,6 @@
 {
   "name": "eslint-config-airbnb-base",
-  "version": "5.0.2",
+  "version": "5.0.3",
   "description": "Airbnb's base JS ESLint config, following our styleguide",
   "main": "index.js",
   "scripts": {

From 21846f6da0b9217dc3e4dde808ec240740038640 Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Tue, 23 Aug 2016 15:07:42 -0700
Subject: [PATCH 0785/1591] =?UTF-8?q?[guide]=20fix=20=E2=80=9Clong=20lines?=
 =?UTF-8?q?=E2=80=9D=20example=20to=20not=20include=20strings.?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

Fixes #1027.
---
 README.md | 12 ++++++++----
 1 file changed, 8 insertions(+), 4 deletions(-)

diff --git a/README.md b/README.md
index cb0cbac948..9d40f701d8 100644
--- a/README.md
+++ b/README.md
@@ -2149,20 +2149,24 @@ Other Style Guides
     ```
 
   <a name="whitespace--max-len"></a><a name="18.12"></a>
-  - [18.12](#whitespace--max-len) Avoid having lines of code that are longer than 100 characters (including whitespace). eslint: [`max-len`](http://eslint.org/docs/rules/max-len.html) jscs: [`maximumLineLength`](http://jscs.info/rule/maximumLineLength)
+  - [18.12](#whitespace--max-len) Avoid having lines of code that are longer than 100 characters (including whitespace). Note: per [above](#strings--line-length), long strings are exempt from this rule, and should not be broken up. eslint: [`max-len`](http://eslint.org/docs/rules/max-len.html) jscs: [`maximumLineLength`](http://jscs.info/rule/maximumLineLength)
 
     > Why? This ensures readability and maintainability.
 
     ```javascript
     // bad
-    const foo = 'Whatever national crop flips the window. The cartoon reverts within the screw. Whatever wizard constrains a helpful ally. The counterpart ascends!';
+    const foo = jsonData && jsonData.foo && jsonData.foo.bar && jsonData.foo.bar.baz && jsonData.foo.bar.baz.quux && jsonData.foo.bar.baz.quux.xyzzy;
 
     // bad
     $.ajax({ method: 'POST', url: 'https://airbnb.com/', data: { name: 'John' } }).done(() => console.log('Congratulations!')).fail(() => console.log('You have failed this city.'));
 
     // good
-    const foo = 'Whatever national crop flips the window. The cartoon reverts within the screw. ' +
-      'Whatever wizard constrains a helpful ally. The counterpart ascends!';
+    const foo = jsonData
+      && jsonData.foo
+      && jsonData.foo.bar
+      && jsonData.foo.bar.baz
+      && jsonData.foo.bar.baz.quux
+      && jsonData.foo.bar.baz.quux.xyzzy;
 
     // good
     $.ajax({

From 48f477db2ad9a5650e5305ed04489d5abc5b9d8c Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Tue, 23 Aug 2016 15:19:34 -0700
Subject: [PATCH 0786/1591] [eslint config] [base] [patch] remove redundant
 `DebuggerStatement` from `no-restricted-syntax`

Fixes #1031.
---
 packages/eslint-config-airbnb-base/rules/style.js | 1 -
 1 file changed, 1 deletion(-)

diff --git a/packages/eslint-config-airbnb-base/rules/style.js b/packages/eslint-config-airbnb-base/rules/style.js
index e32e79869f..c80beaee87 100644
--- a/packages/eslint-config-airbnb-base/rules/style.js
+++ b/packages/eslint-config-airbnb-base/rules/style.js
@@ -187,7 +187,6 @@ module.exports = {
     // http://eslint.org/docs/rules/no-restricted-syntax
     'no-restricted-syntax': [
       'error',
-      'DebuggerStatement',
       'ForInStatement',
       'LabeledStatement',
       'WithStatement',

From 1541503fd47626e2d4b03ff01bca76940081edeb Mon Sep 17 00:00:00 2001
From: Harrison Shoff <hi@hshoff.com>
Date: Thu, 25 Aug 2016 21:48:31 -0700
Subject: [PATCH 0787/1591] [7.1] add link to fn names discussion. fixes #794

---
 README.md | 3 +--
 1 file changed, 1 insertion(+), 2 deletions(-)

diff --git a/README.md b/README.md
index 9d40f701d8..86cd3cc69e 100644
--- a/README.md
+++ b/README.md
@@ -555,7 +555,7 @@ Other Style Guides
   <a name="functions--declarations"></a><a name="7.1"></a>
   - [7.1](#functions--declarations) Use function declarations instead of function expressions. eslint: [`func-style`](http://eslint.org/docs/rules/func-style) jscs: [`requireFunctionDeclarations`](http://jscs.info/rule/requireFunctionDeclarations)
 
-    > Why? Function declarations are named, so they're easier to identify in call stacks. Also, the whole body of a function declaration is hoisted, whereas only the reference of a function expression is hoisted. This rule makes it possible to always use [Arrow Functions](#arrow-functions) in place of function expressions.
+    > Why? Function declarations are named, so they're easier to identify in call stacks. Also, the whole body of a function declaration is hoisted, whereas only the reference of a function expression is hoisted. This rule makes it possible to always use [Arrow Functions](#arrow-functions) in place of function expressions. ([discussion](https://github.com/airbnb/javascript/issues/794))
 
     ```javascript
     // bad
@@ -2221,7 +2221,6 @@ Other Style Guides
   - [19.2](#commas--dangling) Additional trailing comma: **Yup.** eslint: [`comma-dangle`](http://eslint.org/docs/rules/comma-dangle.html) jscs: [`requireTrailingComma`](http://jscs.info/rule/requireTrailingComma)
 
     > Why? This leads to cleaner git diffs. Also, transpilers like Babel will remove the additional trailing comma in the transpiled code which means you don't have to worry about the [trailing comma problem](es5/README.md#commas) in legacy browsers.
-
     ```javascript
     // bad - git diff without trailing comma
     const hero = {

From 6944be009cb81de5bf7d8b525267235382452ca3 Mon Sep 17 00:00:00 2001
From: Heejong Ahn <heejongahn@gmail.com>
Date: Sun, 28 Aug 2016 23:09:11 +0900
Subject: [PATCH 0788/1591] Fix a typo in commas section

Example code block following blockquote(line 2223) was broken as a line break was missing. So I just added single blank line.
---
 README.md | 1 +
 1 file changed, 1 insertion(+)

diff --git a/README.md b/README.md
index 86cd3cc69e..c7faf50d02 100644
--- a/README.md
+++ b/README.md
@@ -2221,6 +2221,7 @@ Other Style Guides
   - [19.2](#commas--dangling) Additional trailing comma: **Yup.** eslint: [`comma-dangle`](http://eslint.org/docs/rules/comma-dangle.html) jscs: [`requireTrailingComma`](http://jscs.info/rule/requireTrailingComma)
 
     > Why? This leads to cleaner git diffs. Also, transpilers like Babel will remove the additional trailing comma in the transpiled code which means you don't have to worry about the [trailing comma problem](es5/README.md#commas) in legacy browsers.
+    
     ```javascript
     // bad - git diff without trailing comma
     const hero = {

From a43c16e330d03082f5955de90873c6f9ca7d6308 Mon Sep 17 00:00:00 2001
From: Thomas Marek <ttmarek@outlook.com>
Date: Sun, 21 Aug 2016 11:35:20 -0400
Subject: [PATCH 0789/1591] Explain why not to prefix methods with underscores

---
 react/README.md | 1 +
 1 file changed, 1 insertion(+)

diff --git a/react/README.md b/react/README.md
index eee0170c0d..32e4be48ab 100644
--- a/react/README.md
+++ b/react/README.md
@@ -450,6 +450,7 @@
     ```
 
   - Do not use underscore prefix for internal methods of a React component.
+  > Why? Underscore prefixes are sometimes used as a convention in other languages to denote privacy. But, unlike those languages, there is no native support for privacy in JavaScript, everything is public. Regardless of your intentions, adding underscore prefixes to your properties does not actually make them private, and any property (underscore-prefixed or not) should be treated as being public. See issues #1024, and #490 for a more in-depth discussion.
 
     ```jsx
     // bad

From 0e4517ea38681ea1368a522591e2aefc18b108ba Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Mon, 29 Aug 2016 00:11:52 -0700
Subject: [PATCH 0790/1591] [eslint config] [patch] set `ignoreCase` to `true`
 in disabled rules.

When/if these rules are enabled, we will want to ignore case.

This also helps https://github.com/pinterest-web/eslint-config-pinterest/pull/46/files#r76165293
---
 packages/eslint-config-airbnb/rules/react.js | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/packages/eslint-config-airbnb/rules/react.js b/packages/eslint-config-airbnb/rules/react.js
index 1552b7ea78..9921526213 100644
--- a/packages/eslint-config-airbnb/rules/react.js
+++ b/packages/eslint-config-airbnb/rules/react.js
@@ -67,7 +67,7 @@ module.exports = {
 
     // Prevent duplicate props in JSX
     // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/jsx-no-duplicate-props.md
-    'react/jsx-no-duplicate-props': ['off', { ignoreCase: false }],
+    'react/jsx-no-duplicate-props': ['off', { ignoreCase: true }],
 
     // Prevent usage of unwrapped JSX strings
     // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/jsx-no-literals.md
@@ -87,7 +87,7 @@ module.exports = {
     // Enforce propTypes declarations alphabetical sorting
     // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/sort-prop-types.md
     'react/sort-prop-types': ['off', {
-      ignoreCase: false,
+      ignoreCase: true,
       callbacksLast: false,
       requiredFirst: false,
     }],
@@ -98,7 +98,7 @@ module.exports = {
     // Enforce props alphabetical sorting
     // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/jsx-sort-props.md
     'react/jsx-sort-props': ['off', {
-      ignoreCase: false,
+      ignoreCase: true,
       callbacksLast: false,
       shorthandFirst: false,
       shorthandLast: false,

From 3a7210eac1d6af201e21f37c507fd584d3d11d56 Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Wed, 31 Aug 2016 21:54:51 -0700
Subject: [PATCH 0791/1591] [guide] remove subtle endorsement of JSDoc-style
 commenting.

---
 README.md | 7 ++-----
 1 file changed, 2 insertions(+), 5 deletions(-)

diff --git a/README.md b/README.md
index c7faf50d02..4435532cdb 100644
--- a/README.md
+++ b/README.md
@@ -1749,7 +1749,7 @@ Other Style Guides
 ## Comments
 
   <a name="comments--multiline"></a><a name="17.1"></a>
-  - [17.1](#comments--multiline) Use `/** ... */` for multi-line comments. Include a description, specify types and values for all parameters and return values.
+  - [17.1](#comments--multiline) Use `/** ... */` for multi-line comments.
 
     ```javascript
     // bad
@@ -1768,10 +1768,7 @@ Other Style Guides
     // good
     /**
      * make() returns a new element
-     * based on the passed in tag name
-     *
-     * @param {String} tag
-     * @return {Element} element
+     * based on the passed-in tag name
      */
     function make(tag) {
 

From 71a2b12262e628702d98785ae3655fc655ac1551 Mon Sep 17 00:00:00 2001
From: Joe Lencioni <joe.lencioni@airbnb.com>
Date: Wed, 31 Aug 2016 12:49:52 -0700
Subject: [PATCH 0792/1591] Add CSS-in-JavaScript section

We have been writing CSS in JavaScript and have developed a set of best
practices around this type of thing. I thought it would be nice to
publish this document alongside our other JavaScript style guide
documents.
---
 README.md                   |   3 +-
 css-in-javascript/README.md | 433 ++++++++++++++++++++++++++++++++++++
 2 files changed, 435 insertions(+), 1 deletion(-)
 create mode 100644 css-in-javascript/README.md

diff --git a/README.md b/README.md
index 4435532cdb..728f364780 100644
--- a/README.md
+++ b/README.md
@@ -9,6 +9,7 @@
 Other Style Guides
  - [ES5 (Deprecated)](https://github.com/airbnb/javascript/tree/es5-deprecated/es5)
  - [React](react/)
+ - [CSS-in-JavaScript](css-in-javascript/)
  - [CSS & Sass](https://github.com/airbnb/css)
  - [Ruby](https://github.com/airbnb/ruby)
 
@@ -2218,7 +2219,7 @@ Other Style Guides
   - [19.2](#commas--dangling) Additional trailing comma: **Yup.** eslint: [`comma-dangle`](http://eslint.org/docs/rules/comma-dangle.html) jscs: [`requireTrailingComma`](http://jscs.info/rule/requireTrailingComma)
 
     > Why? This leads to cleaner git diffs. Also, transpilers like Babel will remove the additional trailing comma in the transpiled code which means you don't have to worry about the [trailing comma problem](es5/README.md#commas) in legacy browsers.
-    
+
     ```javascript
     // bad - git diff without trailing comma
     const hero = {
diff --git a/css-in-javascript/README.md b/css-in-javascript/README.md
new file mode 100644
index 0000000000..9c44de6f21
--- /dev/null
+++ b/css-in-javascript/README.md
@@ -0,0 +1,433 @@
+# Airbnb CSS-in-JavaScript Style Guide
+
+*A mostly reasonable approach to CSS-in-JavaScript
+
+## Table of Contents
+
+1. [Naming](#naming)
+1. [Ordering](#ordering)
+1. [Nesting](#nesting)
+1. [Inline](#inline)
+1. [Themes](#themes)
+
+## Naming
+
+  - Use camelCase for object keys (i.e. "selectors").
+
+  > Why? We access these keys as properties on the `styles` object in the component, so it is most convenient to use camelCase.
+
+    ```js
+    // bad
+    {
+      'bermuda-triangle': {
+        display: 'none',
+      },
+    }
+
+    // good
+    {
+      bermudaTriangle: {
+        display: 'none',
+      },
+    }
+    ```
+
+  - Use an underscore for modifiers to other styles.
+
+  > Why? Similar to BEM, this naming convention makes it clear that the styles are intended to modify the element preceded by the underscore. Underscores do not need to be quoted, so they are preferred over other characters, such as dashes.
+
+    ```js
+    // bad
+    {
+      bruceBanner: {
+        color: 'pink',
+        transition: 'color 10s',
+      },
+
+      bruceBannerTheHulk: {
+        color: 'green',
+      },
+    }
+
+    // good
+    {
+      bruceBanner: {
+        color: 'pink',
+        transition: 'color 10s',
+      },
+
+      bruceBanner_theHulk: {
+        color: 'green',
+      },
+    }
+    ```
+
+  - Use `selectorName_fallback` for sets of fallback styles.
+
+  > Why? Similar to modifiers, keeping the naming consistent helps reveal the relationship of these styles to the styles that override them in more adequate browsers.
+
+    ```js
+    // bad
+    {
+      muscles: {
+        display: 'flex',
+      },
+
+      muscles_sadBears: {
+        width: '100%',
+      },
+    }
+
+    // good
+    {
+      muscles: {
+        display: 'flex',
+      },
+
+      muscles_fallback: {
+        width: '100%',
+      },
+    }
+    ```
+
+  - Use a separate selector for sets of fallback styles.
+
+  > Why? Keeping fallback styles contained in a separate object clarifies their purpose, which improves readability.
+
+    ```js
+    // bad
+    {
+      muscles: {
+        display: 'flex',
+      },
+
+      left: {
+        flexGrow: 1,
+        display: 'inline-block',
+      },
+
+      right: {
+        display: 'inline-block',
+      },
+    }
+
+    // good
+    {
+      muscles: {
+        display: 'flex',
+      },
+
+      left: {
+        flexGrow: 1,
+      },
+
+      left_fallback: {
+        display: 'inline-block',
+      },
+
+      right_fallback: {
+        display: 'inline-block',
+      },
+    }
+    ```
+
+  - Use device-agnostic names (e.g. "small", "medium", and "large") to name media query breakpoints.
+
+  > Why? Commonly used names like "phone", "tablet", and "desktop" do not match the characteristics of the devices in the real world. Using these names sets the wrong expectations.
+
+    ```js
+    // bad
+    const breakpoints = {
+      desktop: '@media (min-width: 1048px)',
+      tablet: '@media (max-width: 1047px)',
+      mobile: '@media (max-width: 639px)',
+    };
+
+    // good
+    const breakpoints = {
+      large: '@media (min-width: 1048px)',
+      medium: '@media (max-width: 1047px)',
+      small: '@media (max-width: 639px)',
+    };
+    ```
+
+## Ordering
+
+  - Define styles after the component.
+
+  > Why? We use a higher-order component to theme our styles, which is naturally used after the component definition. Passing the styles object directly to this function reduces indirection.
+
+    ```jsx
+    // bad
+    const styles = {
+      container: {
+        display: 'inline-block',
+      },
+    };
+
+    function MyComponent({ styles }) {
+      return (
+        <div {...css(styles.container)}>
+          Never doubt that a small group of thoughtful, committed citizens can
+          change the world. Indeed, it’s the only thing that ever has.
+        </div>
+      );
+    }
+
+    export default withStyles(() => styles)(MyComponent);
+
+
+    // good
+    function MyComponent({ styles }) {
+      return (
+        <div {...css(styles.container)}>
+          Never doubt that a small group of thoughtful, committed citizens can
+          change the world. Indeed, it’s the only thing that ever has.
+        </div>
+      );
+    }
+
+    export default withStyles(() => ({
+      container: {
+        display: 'inline-block',
+      },
+    }))(MyComponent);
+    ```
+
+## Nesting
+
+  - Leave a blank line between adjacent blocks at the same indentation level.
+
+  > Why? The whitespace improves readability and reduces the likelihood of merge conflicts.
+
+    ```js
+    // bad
+    {
+      bigBang: {
+        display: 'inline-block',
+        '::before': {
+          content: "''",
+        },
+      },
+      universe: {
+        border: 'none',
+      },
+    }
+
+    // good
+    {
+      bigBang: {
+        display: 'inline-block',
+
+        '::before': {
+          content: "''",
+        },
+      },
+
+      universe: {
+        border: 'none',
+      },
+    }
+    ```
+
+## Inline
+
+  - Use inline styles for styles that have a high cardinality (e.g. uses the value of a prop) and not for styles that have a low cardinality.
+
+  > Why? Generating themed stylesheets can be expensive, so they are best for discrete sets of styles.
+
+    ```jsx
+    // bad
+    export default function MyComponent({ spacing }) {
+      return (
+        <div style={{ display: 'table', margin: spacing }} />
+      );
+    }
+
+    // good
+    function MyComponent({ styles, spacing }) {
+      return (
+        <div {...css(styles.periodic, { margin: spacing })} />
+      );
+    }
+    export default withStyles(() => ({
+      periodic: {
+        display: 'table',
+      },
+    }))(MyComponent);
+    ```
+
+## Themes
+
+  - Use an abstraction layer such as [react-with-styles](https://github.com/airbnb/react-with-styles) that enables theming.
+
+  > Why? It is useful to have a set of shared variables for styling your components. Using an abstraction layer makes this more convenient. Additionally, this can help prevent your components from being tightly coupled to any particular underlying implementation, which gives you more freedom.
+
+  - Define colors only in themes.
+
+    ```js
+    // bad
+    export default withStyles(() => ({
+      chuckNorris: {
+        color: '#bada55',
+      },
+    }))(MyComponent);
+
+    // good
+    export default withStyles(({ color }) => ({
+      chuckNorris: {
+        color: color.badass,
+      },
+    }))(MyComponent);
+    ```
+
+  - Define fonts only in themes.
+
+    ```js
+    // bad
+    export default withStyles(() => ({
+      towerOfPisa: {
+        fontStyle: 'italic',
+      },
+    }))(MyComponent);
+
+    // good
+    export default withStyles(({ font }) => ({
+      towerOfPisa: {
+        fontStyle: font.italic,
+      },
+    }))(MyComponent);
+    ```
+
+  - Define fonts as sets of related styles.
+
+    ```js
+    // bad
+    export default withStyles(() => ({
+      towerOfPisa: {
+        fontFamily: 'Italiana, "Times New Roman", serif',
+        fontSize: '2em',
+        fontStyle: 'italic',
+        lineHeight: 1.5,
+      },
+    }))(MyComponent);
+
+    // good
+    export default withStyles(({ font }) => ({
+      towerOfPisa: {
+        ...font.italian,
+      },
+    }))(MyComponent);
+    ```
+
+  - Define base grid units in theme (either as a value or a function that takes a multiplier).
+
+    ```js
+    // bad
+    export default withStyles(() => ({
+      rip: {
+        bottom: '-6912px', // 6 feet
+      },
+    }))(MyComponent);
+
+    // good
+    export default withStyles(({ units }) => ({
+      rip: {
+        bottom: units(864), // 6 feet, assuming our unit is 8px
+      },
+    }))(MyComponent);
+
+    // good
+    export default withStyles(({ unit }) => ({
+      rip: {
+        bottom: 864 * unit, // 6 feet, assuming our unit is 8px
+      },
+    }))(MyComponent);
+    ```
+
+  - Define media queries only in themes.
+
+    ```js
+    // bad
+    export default withStyles(() => ({
+      container: {
+        width: '100%',
+
+        '@media (max-width: 1047px)': {
+          width: '50%',
+        },
+      },
+    }))(MyComponent);
+
+    // good
+    export default withStyles(({ breakpoint }) => ({
+      container: {
+        width: '100%',
+
+        [breakpoint.medium]: {
+          width: '50%',
+        },
+      },
+    }))(MyComponent);
+    ```
+
+  - Define tricky fallback properties in themes.
+
+  > Why? Many CSS-in-JavaScript implementations merge style objects together which makes specifying fallbacks for the same property (e.g. `display`) a little tricky. To keep the approach unified, put these fallbacks in the theme.
+
+    ```js
+    // bad
+    export default withStyles(() => ({
+      .muscles {
+        display: 'flex',
+      },
+
+      .muscles_fallback {
+        'display ': 'table',
+      },
+    }))(MyComponent);
+
+    // good
+    export default withStyles(({ fallbacks }) => ({
+      .muscles {
+        display: 'flex',
+      },
+
+      .muscles_fallback {
+        [fallbacks.display]: 'table',
+      },
+    }))(MyComponent);
+
+    // good
+    export default withStyles(({ fallback }) => ({
+      .muscles {
+        display: 'flex',
+      },
+
+      .muscles_fallback {
+        [fallback('display')]: 'table',
+      },
+    }))(MyComponent);
+    ```
+
+  - Create as few custom themes as possible. Many applications may only have one theme.
+
+  - Namespace custom theme settings under a nested object with a unique and descriptive key.
+
+    ```js
+    // bad
+    ThemedStyleSheet.registerTheme('mySection', {
+      mySectionPrimaryColor: 'green',
+    });
+
+    // good
+    ThemedStyleSheet.registerTheme('mySection', {
+      mySection: {
+        primaryColor: 'green',
+      },
+    });
+    ```
+
+---
+
+CSS puns adapted from [Saijo George](http://saijogeorge.com/css-puns/).

From c74caead2a5569da4623ee4a9d613d8cde9940c2 Mon Sep 17 00:00:00 2001
From: Joe Lencioni <joe.lencioni@airbnb.com>
Date: Wed, 31 Aug 2016 14:10:07 -0700
Subject: [PATCH 0793/1591] Re-order breakpoints in CSS-in-JS document

This is more "mobile first".
---
 css-in-javascript/README.md | 8 ++++----
 1 file changed, 4 insertions(+), 4 deletions(-)

diff --git a/css-in-javascript/README.md b/css-in-javascript/README.md
index 9c44de6f21..e310c4d407 100644
--- a/css-in-javascript/README.md
+++ b/css-in-javascript/README.md
@@ -138,16 +138,16 @@
     ```js
     // bad
     const breakpoints = {
-      desktop: '@media (min-width: 1048px)',
-      tablet: '@media (max-width: 1047px)',
       mobile: '@media (max-width: 639px)',
+      tablet: '@media (max-width: 1047px)',
+      desktop: '@media (min-width: 1048px)',
     };
 
     // good
     const breakpoints = {
-      large: '@media (min-width: 1048px)',
-      medium: '@media (max-width: 1047px)',
       small: '@media (max-width: 639px)',
+      medium: '@media (max-width: 1047px)',
+      large: '@media (min-width: 1048px)',
     };
     ```
 

From c6406330ea3640a93de8117ad8c7a0cd1f9ed999 Mon Sep 17 00:00:00 2001
From: Joe Lencioni <joe.lencioni@airbnb.com>
Date: Fri, 2 Sep 2016 07:57:33 -0700
Subject: [PATCH 0794/1591] Add note about where where mystery objects come
 from

As @ljharb pointed out, we are using some functions like `css()` and
`withStyles()`, but make no mention of what they are or where they come
from. Since they come from react-with-styles, let's make this clear.
---
 css-in-javascript/README.md | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/css-in-javascript/README.md b/css-in-javascript/README.md
index e310c4d407..59c1c7bcbd 100644
--- a/css-in-javascript/README.md
+++ b/css-in-javascript/README.md
@@ -259,7 +259,7 @@
 
 ## Themes
 
-  - Use an abstraction layer such as [react-with-styles](https://github.com/airbnb/react-with-styles) that enables theming.
+  - Use an abstraction layer such as [react-with-styles](https://github.com/airbnb/react-with-styles) that enables theming. *react-with-styles gives us things like `withStyles()`, `ThemedStyleSheet`, and `css()` which are used in some of the examples in this document.*
 
   > Why? It is useful to have a set of shared variables for styling your components. Using an abstraction layer makes this more convenient. Additionally, this can help prevent your components from being tightly coupled to any particular underlying implementation, which gives you more freedom.
 

From 086cc0035df91b34c52744ab278b778a4d3208a7 Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Tue, 6 Sep 2016 00:36:04 -0700
Subject: [PATCH 0795/1591] [eslint config] [base] [breaking] enable
 `no-template-curly-in-string`

 - Also, clean up rule documentation.
---
 .../eslint-config-airbnb-base/rules/best-practices.js  |  6 ++----
 packages/eslint-config-airbnb-base/rules/errors.js     | 10 ++++------
 packages/eslint-config-airbnb-base/rules/es6.js        |  2 +-
 packages/eslint-config-airbnb-base/rules/variables.js  |  1 +
 4 files changed, 8 insertions(+), 11 deletions(-)

diff --git a/packages/eslint-config-airbnb-base/rules/best-practices.js b/packages/eslint-config-airbnb-base/rules/best-practices.js
index 26602745de..a6f714bcb9 100644
--- a/packages/eslint-config-airbnb-base/rules/best-practices.js
+++ b/packages/eslint-config-airbnb-base/rules/best-practices.js
@@ -92,6 +92,8 @@ module.exports = {
     // disallow reassignments of native objects or read-only globals
     // http://eslint.org/docs/rules/no-global-assign
     'no-global-assign': ['error', { exceptions: [] }],
+    // deprecated in favor of no-global-assign
+    'no-native-reassign': 'off',
 
     // disallow implicit type conversions
     // http://eslint.org/docs/rules/no-implicit-coercion
@@ -139,10 +141,6 @@ module.exports = {
     // disallow use of multiline strings
     'no-multi-str': 'error',
 
-    // disallow reassignments of native objects
-    // TODO: deprecated in favor of no-global-assign
-    'no-native-reassign': 'off',
-
     // disallow use of new operator when not part of the assignment or comparison
     'no-new': 'error',
 
diff --git a/packages/eslint-config-airbnb-base/rules/errors.js b/packages/eslint-config-airbnb-base/rules/errors.js
index 6c932c8dfc..4dbed4f3b2 100644
--- a/packages/eslint-config-airbnb-base/rules/errors.js
+++ b/packages/eslint-config-airbnb-base/rules/errors.js
@@ -63,10 +63,6 @@ module.exports = {
     // disallow irregular whitespace outside of strings and comments
     'no-irregular-whitespace': 'error',
 
-    // disallow negation of the left operand of an in expression
-    // TODO: deprecated in favor of no-unsafe-negation
-    'no-negated-in-lhs': 'off',
-
     // disallow the use of object properties of the global object (Math and JSON) as functions
     'no-obj-calls': 'error',
 
@@ -82,8 +78,7 @@ module.exports = {
 
     // Disallow template literal placeholder syntax in regular strings
     // http://eslint.org/docs/rules/no-template-curly-in-string
-    // TODO: enable, semver-major
-    'no-template-curly-in-string': 'off',
+    'no-template-curly-in-string': 'error',
 
     // Avoid code that looks like two expressions but is actually one
     // http://eslint.org/docs/rules/no-unexpected-multiline
@@ -99,6 +94,9 @@ module.exports = {
     // disallow negating the left operand of relational operators
     // http://eslint.org/docs/rules/no-unsafe-negation
     'no-unsafe-negation': 'error',
+    // disallow negation of the left operand of an in expression
+    // deprecated in favor of no-unsafe-negation
+    'no-negated-in-lhs': 'off',
 
     // disallow comparisons with the value NaN
     'use-isnan': 'error',
diff --git a/packages/eslint-config-airbnb-base/rules/es6.js b/packages/eslint-config-airbnb-base/rules/es6.js
index 169e30be01..611dbe4de0 100644
--- a/packages/eslint-config-airbnb-base/rules/es6.js
+++ b/packages/eslint-config-airbnb-base/rules/es6.js
@@ -103,7 +103,7 @@ module.exports = {
 
     // suggest using Reflect methods where applicable
     // http://eslint.org/docs/rules/prefer-reflect
-    // TODO: enable
+    // TODO: enable?
     'prefer-reflect': 'off',
 
     // use rest parameters instead of arguments
diff --git a/packages/eslint-config-airbnb-base/rules/variables.js b/packages/eslint-config-airbnb-base/rules/variables.js
index 312ee76813..8af041c082 100644
--- a/packages/eslint-config-airbnb-base/rules/variables.js
+++ b/packages/eslint-config-airbnb-base/rules/variables.js
@@ -29,6 +29,7 @@ module.exports = {
     'no-undef-init': 'error',
 
     // disallow use of undefined variable
+    // http://eslint.org/docs/rules/no-undefined
     // TODO: enable?
     'no-undefined': 'off',
 

From 27dcb99c6d80718946d10017144b2aa68bed8b9e Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Tue, 6 Sep 2016 01:07:16 -0700
Subject: [PATCH 0796/1591] [eslint config] [base] [breaking] enable
 `func-call-spacing`

---
 packages/eslint-config-airbnb-base/rules/style.js | 3 +--
 1 file changed, 1 insertion(+), 2 deletions(-)

diff --git a/packages/eslint-config-airbnb-base/rules/style.js b/packages/eslint-config-airbnb-base/rules/style.js
index c80beaee87..288b0ed5d5 100644
--- a/packages/eslint-config-airbnb-base/rules/style.js
+++ b/packages/eslint-config-airbnb-base/rules/style.js
@@ -30,8 +30,7 @@ module.exports = {
 
     // enforce spacing between functions and their invocations
     // http://eslint.org/docs/rules/func-call-spacing
-    // TODO: enable, semver-minor
-    'func-call-spacing': ['off', 'never'],
+    'func-call-spacing': ['error', 'never'],
 
     // require function expressions to have a name
     'func-names': 'warn',

From aa4e9c466ad8edc44aa744a579389d10af2e6fd7 Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Tue, 6 Sep 2016 01:07:39 -0700
Subject: [PATCH 0797/1591] [eslint config] [base] [breaking] enable `no-tabs`

---
 packages/eslint-config-airbnb-base/rules/style.js | 3 +--
 1 file changed, 1 insertion(+), 2 deletions(-)

diff --git a/packages/eslint-config-airbnb-base/rules/style.js b/packages/eslint-config-airbnb-base/rules/style.js
index 288b0ed5d5..c3f0442fd2 100644
--- a/packages/eslint-config-airbnb-base/rules/style.js
+++ b/packages/eslint-config-airbnb-base/rules/style.js
@@ -195,8 +195,7 @@ module.exports = {
     'no-spaced-func': 'error',
 
     // disallow tab characters entirely
-    // TODO: enable
-    'no-tabs': 'off',
+    'no-tabs': 'error',
 
     // disallow the use of ternary operators
     'no-ternary': 'off',

From a6d59f977e9b6d8fdc0d8cd7333667a4c6e40efa Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Tue, 6 Sep 2016 01:07:56 -0700
Subject: [PATCH 0798/1591] [eslint config] [base] [breaking] enable
 `no-bitwise`

---
 packages/eslint-config-airbnb-base/rules/style.js | 3 +--
 1 file changed, 1 insertion(+), 2 deletions(-)

diff --git a/packages/eslint-config-airbnb-base/rules/style.js b/packages/eslint-config-airbnb-base/rules/style.js
index c3f0442fd2..1d16982676 100644
--- a/packages/eslint-config-airbnb-base/rules/style.js
+++ b/packages/eslint-config-airbnb-base/rules/style.js
@@ -136,8 +136,7 @@ module.exports = {
 
     // disallow use of bitwise operators
     // http://eslint.org/docs/rules/no-bitwise
-    // TODO: enable
-    'no-bitwise': 'off',
+    'no-bitwise': 'error',
 
     // disallow use of the continue statement
     // http://eslint.org/docs/rules/no-continue

From 3bf7035cecbdcfbbddac9092b46c50f6591c5098 Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Tue, 6 Sep 2016 10:40:31 -0700
Subject: [PATCH 0799/1591] [eslint config] [base] [deps] update `eslint`,
 `eslint-find-rules`, `eslint-plugin-import`

---
 packages/eslint-config-airbnb-base/package.json        | 10 +++++-----
 .../eslint-config-airbnb-base/rules/best-practices.js  |  5 +++++
 packages/eslint-config-airbnb-base/rules/es6.js        |  5 +++++
 packages/eslint-config-airbnb-base/rules/style.js      |  3 ++-
 4 files changed, 17 insertions(+), 6 deletions(-)

diff --git a/packages/eslint-config-airbnb-base/package.json b/packages/eslint-config-airbnb-base/package.json
index 5a04cd263d..5a4ff4338b 100644
--- a/packages/eslint-config-airbnb-base/package.json
+++ b/packages/eslint-config-airbnb-base/package.json
@@ -47,16 +47,16 @@
   "devDependencies": {
     "babel-preset-airbnb": "^2.0.0",
     "babel-tape-runner": "^2.0.1",
-    "eslint": "^3.3.1",
-    "eslint-find-rules": "^1.13.0",
-    "eslint-plugin-import": "^1.13.0",
+    "eslint": "^3.4.0",
+    "eslint-find-rules": "^1.13.1",
+    "eslint-plugin-import": "^1.14.0",
     "in-publish": "^2.0.0",
     "safe-publish-latest": "^1.0.1",
     "tape": "^4.6.0"
   },
   "peerDependencies": {
-    "eslint": "^3.3.1",
-    "eslint-plugin-import": "^1.13.0"
+    "eslint": "^3.4.0",
+    "eslint-plugin-import": "^1.14.0"
   },
   "engines": {
     "node": ">= 4"
diff --git a/packages/eslint-config-airbnb-base/rules/best-practices.js b/packages/eslint-config-airbnb-base/rules/best-practices.js
index a6f714bcb9..17ce192179 100644
--- a/packages/eslint-config-airbnb-base/rules/best-practices.js
+++ b/packages/eslint-config-airbnb-base/rules/best-practices.js
@@ -13,6 +13,11 @@ module.exports = {
     // specify the maximum cyclomatic complexity allowed in a program
     complexity: ['off', 11],
 
+    // enforce that class methods use "this"
+    // http://eslint.org/docs/rules/class-methods-use-this
+    // TODO: enable
+    'class-methods-use-this': 'off',
+
     // require return statements to either always or never specify values
     'consistent-return': 'error',
 
diff --git a/packages/eslint-config-airbnb-base/rules/es6.js b/packages/eslint-config-airbnb-base/rules/es6.js
index 611dbe4de0..e6506a8b07 100644
--- a/packages/eslint-config-airbnb-base/rules/es6.js
+++ b/packages/eslint-config-airbnb-base/rules/es6.js
@@ -134,6 +134,11 @@ module.exports = {
       memberSyntaxSortOrder: ['none', 'all', 'multiple', 'single'],
     }],
 
+    // require a Symbol description
+    // http://eslint.org/docs/rules/symbol-description
+    // TODO: enable
+    'symbol-description': 'off',
+
     // enforce usage of spacing in template strings
     // http://eslint.org/docs/rules/template-curly-spacing
     'template-curly-spacing': 'error',
diff --git a/packages/eslint-config-airbnb-base/rules/style.js b/packages/eslint-config-airbnb-base/rules/style.js
index 1d16982676..f4fb7dbddf 100644
--- a/packages/eslint-config-airbnb-base/rules/style.js
+++ b/packages/eslint-config-airbnb-base/rules/style.js
@@ -111,7 +111,8 @@ module.exports = {
 
     // require multiline ternary
     // http://eslint.org/docs/rules/multiline-ternary
-    'multiline-ternary': 'off',
+    // TODO: enable?
+    'multiline-ternary': ['off', 'never'],
 
     // require a capital letter for constructors
     'new-cap': ['error', { newIsCap: true }],

From 2c5a775d7bec4e543b5ce3eb823e2134531a8841 Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Tue, 6 Sep 2016 10:44:00 -0700
Subject: [PATCH 0800/1591] [eslint config] [base] [breaking] enable
 `symbol-description`

---
 packages/eslint-config-airbnb-base/rules/es6.js | 3 +--
 1 file changed, 1 insertion(+), 2 deletions(-)

diff --git a/packages/eslint-config-airbnb-base/rules/es6.js b/packages/eslint-config-airbnb-base/rules/es6.js
index e6506a8b07..f1e2bd026f 100644
--- a/packages/eslint-config-airbnb-base/rules/es6.js
+++ b/packages/eslint-config-airbnb-base/rules/es6.js
@@ -136,8 +136,7 @@ module.exports = {
 
     // require a Symbol description
     // http://eslint.org/docs/rules/symbol-description
-    // TODO: enable
-    'symbol-description': 'off',
+    'symbol-description': 'error',
 
     // enforce usage of spacing in template strings
     // http://eslint.org/docs/rules/template-curly-spacing

From 06ff74801be00dfaee5077a59e883750796a3004 Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Tue, 6 Sep 2016 10:44:19 -0700
Subject: [PATCH 0801/1591] [eslint config] [base] [breaking] enable
 `class-methods-use-this`

---
 packages/eslint-config-airbnb-base/rules/best-practices.js | 3 +--
 1 file changed, 1 insertion(+), 2 deletions(-)

diff --git a/packages/eslint-config-airbnb-base/rules/best-practices.js b/packages/eslint-config-airbnb-base/rules/best-practices.js
index 17ce192179..a41c1e252a 100644
--- a/packages/eslint-config-airbnb-base/rules/best-practices.js
+++ b/packages/eslint-config-airbnb-base/rules/best-practices.js
@@ -15,8 +15,7 @@ module.exports = {
 
     // enforce that class methods use "this"
     // http://eslint.org/docs/rules/class-methods-use-this
-    // TODO: enable
-    'class-methods-use-this': 'off',
+    'class-methods-use-this': 'error',
 
     // require return statements to either always or never specify values
     'consistent-return': 'error',

From d7d606ec0d904cd3e162aa798f0cd2e0f4d64e60 Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Tue, 6 Sep 2016 10:48:21 -0700
Subject: [PATCH 0802/1591] [eslint config] [base] [breaking] `valid-typeof`:
 enable `requireStringLiterals` option

---
 packages/eslint-config-airbnb-base/rules/errors.js | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/packages/eslint-config-airbnb-base/rules/errors.js b/packages/eslint-config-airbnb-base/rules/errors.js
index 4dbed4f3b2..de6439b5e3 100644
--- a/packages/eslint-config-airbnb-base/rules/errors.js
+++ b/packages/eslint-config-airbnb-base/rules/errors.js
@@ -106,6 +106,7 @@ module.exports = {
     'valid-jsdoc': 'off',
 
     // ensure that the results of typeof are compared against a valid string
-    'valid-typeof': 'error'
+    // http://eslint.org/docs/rules/valid-typeof
+    'valid-typeof': ['error', { requireStringLiterals: true }],
   }
 };

From 9750f4261c11ec812ba9308b3966bd54faed272e Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Tue, 6 Sep 2016 10:50:03 -0700
Subject: [PATCH 0803/1591] [eslint config] [base] Update `ecmaVersion` to
 `2016`.

---
 packages/eslint-config-airbnb-base/index.js | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/packages/eslint-config-airbnb-base/index.js b/packages/eslint-config-airbnb-base/index.js
index c89431a0c5..cc13673700 100644
--- a/packages/eslint-config-airbnb-base/index.js
+++ b/packages/eslint-config-airbnb-base/index.js
@@ -9,7 +9,7 @@ module.exports = {
     './rules/imports',
   ].map(require.resolve),
   parserOptions: {
-    ecmaVersion: 7,
+    ecmaVersion: 2016,
     sourceType: 'module',
   },
   rules: {

From e52f41c9cc89c04eec3ddc9801df526d143b6095 Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Tue, 6 Sep 2016 10:56:02 -0700
Subject: [PATCH 0804/1591] [eslint config] [base] v6.0.0

---
 packages/eslint-config-airbnb-base/CHANGELOG.md | 13 +++++++++++++
 packages/eslint-config-airbnb-base/package.json |  2 +-
 2 files changed, 14 insertions(+), 1 deletion(-)

diff --git a/packages/eslint-config-airbnb-base/CHANGELOG.md b/packages/eslint-config-airbnb-base/CHANGELOG.md
index aa61e0f2be..9611dfc952 100644
--- a/packages/eslint-config-airbnb-base/CHANGELOG.md
+++ b/packages/eslint-config-airbnb-base/CHANGELOG.md
@@ -1,3 +1,16 @@
+6.0.0 / 2016-09-06
+==================
+ - [breaking] `valid-typeof`: enable `requireStringLiterals` option
+ - [breaking] enable `class-methods-use-this`
+ - [breaking] enable `symbol-description`
+ - [breaking] enable `no-bitwise`
+ - [breaking] enable `no-tabs`
+ - [breaking] enable `func-call-spacing`
+ - [breaking] enable `no-template-curly-in-string`
+ - [patch] remove redundant `DebuggerStatement` from `no-restricted-syntax` (#1031)
+ - [deps] update `eslint`, `eslint-find-rules`, `eslint-plugin-import`
+ - Update `ecmaVersion` to `2016`
+
 5.0.3 / 2016-08-21
 ==================
  - [fix] correct `import/extensions` list (#1013)
diff --git a/packages/eslint-config-airbnb-base/package.json b/packages/eslint-config-airbnb-base/package.json
index 5a4ff4338b..be24a5d3f3 100644
--- a/packages/eslint-config-airbnb-base/package.json
+++ b/packages/eslint-config-airbnb-base/package.json
@@ -1,6 +1,6 @@
 {
   "name": "eslint-config-airbnb-base",
-  "version": "5.0.3",
+  "version": "6.0.0",
   "description": "Airbnb's base JS ESLint config, following our styleguide",
   "main": "index.js",
   "scripts": {

From bc3b15d4d784327e8d8713a5111db94a6a42a5ba Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Tue, 6 Sep 2016 11:40:42 -0700
Subject: [PATCH 0805/1591] =?UTF-8?q?[eslint=20config]=20[*]=20[docs]=20us?=
 =?UTF-8?q?e=20=E2=80=9C#=E2=80=9D=20in=20example=20command=20rather=20tha?=
 =?UTF-8?q?n=20version=20numbers.?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

Closes #984.
---
 packages/eslint-config-airbnb-base/README.md | 2 +-
 packages/eslint-config-airbnb/README.md      | 2 +-
 2 files changed, 2 insertions(+), 2 deletions(-)

diff --git a/packages/eslint-config-airbnb-base/README.md b/packages/eslint-config-airbnb-base/README.md
index 40691b43c8..dabe3a6345 100644
--- a/packages/eslint-config-airbnb-base/README.md
+++ b/packages/eslint-config-airbnb-base/README.md
@@ -23,7 +23,7 @@ Our default export contains all of our ESLint rules, including ECMAScript 6+. It
   Which produces and runs a command like:
 
   ```sh
-    npm install --save-dev eslint-config-airbnb-base eslint@^3.0.1 eslint-plugin-import@^1.10.3
+    npm install --save-dev eslint-config-airbnb-base eslint@^#.#.# eslint-plugin-import@^#.#.#
   ```
 
 2. Add `"extends": "airbnb-base"` to your .eslintrc
diff --git a/packages/eslint-config-airbnb/README.md b/packages/eslint-config-airbnb/README.md
index 7a0b8c68b6..d13133e14e 100644
--- a/packages/eslint-config-airbnb/README.md
+++ b/packages/eslint-config-airbnb/README.md
@@ -23,7 +23,7 @@ Our default export contains all of our ESLint rules, including ECMAScript 6+ and
   Which produces and runs a command like:
 
   ```sh
-  npm install --save-dev eslint-config-airbnb eslint@^2.9.0 eslint-plugin-jsx-a11y@^1.2.0 eslint-plugin-import@^1.7.0 eslint-plugin-react@^5.0.1
+  npm install --save-dev eslint-config-airbnb eslint@^#.#.# eslint-plugin-jsx-a11y@^#.#.# eslint-plugin-import@^#.#.# eslint-plugin-react@^#.#.#
   ```
 
 2. Add `"extends": "airbnb"` to your .eslintrc

From 55d044c7c17d22fc0e4299a23481a72347c55cba Mon Sep 17 00:00:00 2001
From: scott stern <scott.stern06@gmail.com>
Date: Sun, 14 Aug 2016 15:35:05 -0700
Subject: [PATCH 0806/1591] [eslint config] [base] [breaking] Add no-plusplus
 in style.js and added explanation in README.

---
 README.md                                     | 29 +++++++++++++++++++
 .../eslint-config-airbnb-base/rules/style.js  |  3 +-
 2 files changed, 31 insertions(+), 1 deletion(-)

diff --git a/README.md b/README.md
index 728f364780..2ed3f9f18f 100644
--- a/README.md
+++ b/README.md
@@ -1278,6 +1278,35 @@ Other Style Guides
     }
     ```
 
+    - [13.5](#variables--unary-increment-decrement) Avoid using unary increments and decrements (++, --). eslint [`no-plusplus`](http://eslint.org/docs/rules/no-plusplus)
+
+      > Why? Per the eslint documentation, unary increment and decrement statements are subject to automatic semicolon insertion and can cause silent errors with incrementing or decrementing values within an application. It is also more expressive to mutate your values with statements like `num += 1` instead of `num ++`. Disallowing unary increment and decrement statements also prevents you from pre-incrementing/pre-decrementing values unintentionally which can also cause unexpected behavior in your programs.
+
+      ```javascript
+        // bad
+
+        let array = [1, 2, 3];
+        let num = 1;
+        let increment = num ++;
+        let decrement = -- num;
+
+        for(let i = 0; i < array.length; i++){
+          let value = array[i];
+          ++value;
+        }
+
+        // good
+
+        let array = [1, 2, 3];
+        let num = 1;
+        let increment = num += 1;
+        let decrement = num -= 1;
+
+        array.forEach((value) => {
+          value += 1;
+        });
+      ```
+
 **[⬆ back to top](#table-of-contents)**
 
 
diff --git a/packages/eslint-config-airbnb-base/rules/style.js b/packages/eslint-config-airbnb-base/rules/style.js
index f4fb7dbddf..faac007cfb 100644
--- a/packages/eslint-config-airbnb-base/rules/style.js
+++ b/packages/eslint-config-airbnb-base/rules/style.js
@@ -180,7 +180,8 @@ module.exports = {
     'no-new-object': 'error',
 
     // disallow use of unary operators, ++ and --
-    'no-plusplus': 'off',
+    // http://eslint.org/docs/rules/no-plusplus
+    'no-plusplus': 2,
 
     // disallow certain syntax forms
     // http://eslint.org/docs/rules/no-restricted-syntax

From 49045060e01db75d4035835184b9554dd79adac7 Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Tue, 6 Sep 2016 12:21:22 -0700
Subject: [PATCH 0807/1591] [eslint config] [base] v7.0.0

---
 packages/eslint-config-airbnb-base/CHANGELOG.md   | 4 ++++
 packages/eslint-config-airbnb-base/package.json   | 2 +-
 packages/eslint-config-airbnb-base/rules/style.js | 2 +-
 3 files changed, 6 insertions(+), 2 deletions(-)

diff --git a/packages/eslint-config-airbnb-base/CHANGELOG.md b/packages/eslint-config-airbnb-base/CHANGELOG.md
index 9611dfc952..06075f3d70 100644
--- a/packages/eslint-config-airbnb-base/CHANGELOG.md
+++ b/packages/eslint-config-airbnb-base/CHANGELOG.md
@@ -1,3 +1,7 @@
+7.0.0 / 2016-09-06
+==================
+ - [breaking] Add no-plusplus in style.js and added explanation in README (#1012)
+
 6.0.0 / 2016-09-06
 ==================
  - [breaking] `valid-typeof`: enable `requireStringLiterals` option
diff --git a/packages/eslint-config-airbnb-base/package.json b/packages/eslint-config-airbnb-base/package.json
index be24a5d3f3..b935962690 100644
--- a/packages/eslint-config-airbnb-base/package.json
+++ b/packages/eslint-config-airbnb-base/package.json
@@ -1,6 +1,6 @@
 {
   "name": "eslint-config-airbnb-base",
-  "version": "6.0.0",
+  "version": "7.0.0",
   "description": "Airbnb's base JS ESLint config, following our styleguide",
   "main": "index.js",
   "scripts": {
diff --git a/packages/eslint-config-airbnb-base/rules/style.js b/packages/eslint-config-airbnb-base/rules/style.js
index faac007cfb..c46e510a8c 100644
--- a/packages/eslint-config-airbnb-base/rules/style.js
+++ b/packages/eslint-config-airbnb-base/rules/style.js
@@ -181,7 +181,7 @@ module.exports = {
 
     // disallow use of unary operators, ++ and --
     // http://eslint.org/docs/rules/no-plusplus
-    'no-plusplus': 2,
+    'no-plusplus': 'error',
 
     // disallow certain syntax forms
     // http://eslint.org/docs/rules/no-restricted-syntax

From 9abe8789417d4fef6f4fcd490a186f0dd719aa6f Mon Sep 17 00:00:00 2001
From: cshg <csh@christianhaug.com>
Date: Tue, 6 Sep 2016 13:08:55 +0200
Subject: [PATCH 0808/1591] Fix header link to Classes & Constructors from
 ECMAScript 6+ Styles

---
 README.md | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/README.md b/README.md
index 2ed3f9f18f..be7bb4e3b4 100644
--- a/README.md
+++ b/README.md
@@ -2754,7 +2754,7 @@ Other Style Guides
   - [27.1](#es6-styles) This is a collection of links to the various ES6 features.
 
 1. [Arrow Functions](#arrow-functions)
-1. [Classes](#constructors)
+1. [Classes](#classes--constructors)
 1. [Object Shorthand](#es6-object-shorthand)
 1. [Object Concise](#es6-object-concise)
 1. [Object Computed Properties](#es6-computed-properties)

From e037760bad9c514ef183e2c9409e6d418753bbea Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Tue, 6 Sep 2016 17:10:48 -0700
Subject: [PATCH 0809/1591] [eslint config] [deps] update
 `eslint-config-airbnb-base`, `eslint`, `eslint-find-rules`,
 `eslint-plugin-import`, `eslint-plugin-jsx-a11y`, `eslint-plugin-react`

---
 packages/eslint-config-airbnb/package.json    | 20 +++++++++----------
 .../eslint-config-airbnb/rules/react-a11y.js  | 10 ++++++++++
 packages/eslint-config-airbnb/rules/react.js  | 14 +++++++++++++
 .../test/test-react-order.js                  |  2 +-
 4 files changed, 35 insertions(+), 11 deletions(-)

diff --git a/packages/eslint-config-airbnb/package.json b/packages/eslint-config-airbnb/package.json
index c176f07da3..1ec47d7284 100644
--- a/packages/eslint-config-airbnb/package.json
+++ b/packages/eslint-config-airbnb/package.json
@@ -45,26 +45,26 @@
   },
   "homepage": "https://github.com/airbnb/javascript",
   "dependencies": {
-    "eslint-config-airbnb-base": "^5.0.2"
+    "eslint-config-airbnb-base": "^7.0.0"
   },
   "devDependencies": {
     "babel-preset-airbnb": "^2.0.0",
     "babel-tape-runner": "^2.0.1",
-    "eslint": "^3.3.1",
-    "eslint-find-rules": "^1.13.0",
-    "eslint-plugin-import": "^1.13.0",
-    "eslint-plugin-jsx-a11y": "^2.1.0",
-    "eslint-plugin-react": "^6.1.2",
+    "eslint": "^3.4.0",
+    "eslint-find-rules": "^1.13.1",
+    "eslint-plugin-import": "^1.14.0",
+    "eslint-plugin-jsx-a11y": "^2.2.1",
+    "eslint-plugin-react": "^6.2.0",
     "in-publish": "^2.0.0",
     "react": ">= 0.13.0",
     "safe-publish-latest": "^1.0.1",
     "tape": "^4.6.0"
   },
   "peerDependencies": {
-    "eslint": "^3.3.1",
-    "eslint-plugin-jsx-a11y": "^2.1.0",
-    "eslint-plugin-import": "^1.13.0",
-    "eslint-plugin-react": "^6.1.2"
+    "eslint": "^3.4.0",
+    "eslint-plugin-jsx-a11y": "^2.2.1",
+    "eslint-plugin-import": "^1.14.0",
+    "eslint-plugin-react": "^6.2.0"
   },
   "engines": {
     "node": ">= 4"
diff --git a/packages/eslint-config-airbnb/rules/react-a11y.js b/packages/eslint-config-airbnb/rules/react-a11y.js
index 76430261c7..3b7d684b5d 100644
--- a/packages/eslint-config-airbnb/rules/react-a11y.js
+++ b/packages/eslint-config-airbnb/rules/react-a11y.js
@@ -101,5 +101,15 @@ module.exports = {
     // only allow <th> to have the "scope" attr
     // https://github.com/evcohen/eslint-plugin-jsx-a11y/blob/master/docs/rules/scope.md
     'jsx-a11y/scope': 'error',
+
+    // require onClick be accompanied by onKeyUp/onKeyDown/onKeyPress
+    // https://github.com/evcohen/eslint-plugin-jsx-a11y/blob/master/docs/rules/click-events-have-key-events.md
+    // TODO: enable?
+    'jsx-a11y/click-events-have-key-events': 'off',
+
+    // Enforce that DOM elements without semantic behavior not have interaction handlers
+    // https://github.com/evcohen/eslint-plugin-jsx-a11y/blob/master/docs/rules/no-static-element-interactions.md
+    // TODO: enable
+    'jsx-a11y/no-static-element-interactions': 'off',
   },
 };
diff --git a/packages/eslint-config-airbnb/rules/react.js b/packages/eslint-config-airbnb/rules/react.js
index 9921526213..1d4eb2a493 100644
--- a/packages/eslint-config-airbnb/rules/react.js
+++ b/packages/eslint-config-airbnb/rules/react.js
@@ -252,6 +252,20 @@ module.exports = {
     // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/no-danger-with-children.md
     // TODO: enable, semver-major
     'react/no-danger-with-children': 'off',
+
+    // Prevent unused propType definitions
+    // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/no-unused-prop-types.md
+    // TODO: enable
+    'react/no-unused-prop-types': ['off', {
+      customValidators: [
+      ],
+      skipShapeProps: false,
+    }],
+
+    // Require style prop value be an object or var
+    // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/style-prop-object.md
+    // TODO: enable
+    'react/style-prop-object': 'off',
   },
 
   settings: {
diff --git a/packages/eslint-config-airbnb/test/test-react-order.js b/packages/eslint-config-airbnb/test/test-react-order.js
index 37d417ca15..aa8aa192eb 100644
--- a/packages/eslint-config-airbnb/test/test-react-order.js
+++ b/packages/eslint-config-airbnb/test/test-react-order.js
@@ -26,7 +26,7 @@ function wrapComponent(body) {
 import React from 'react';
 
 export default class MyComponent extends React.Component {
-/* eslint no-empty-function: 0 */
+/* eslint no-empty-function: 0, class-methods-use-this: 0 */
 ${body}
 }
 `;

From 4ce30fc89135c76ad3fa7aeccd5b5ad9550fe9be Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Tue, 6 Sep 2016 22:46:52 -0700
Subject: [PATCH 0810/1591] [eslint config] [breaking] enable `jsx-a11y` rules:

 - `jsx-a11y/anchor-has-content`
 - `jsx-a11y/tabindex-no-positive`
 - `jsx-a11y/no-static-element-interactions`
---
 packages/eslint-config-airbnb/rules/react-a11y.js | 9 +++------
 1 file changed, 3 insertions(+), 6 deletions(-)

diff --git a/packages/eslint-config-airbnb/rules/react-a11y.js b/packages/eslint-config-airbnb/rules/react-a11y.js
index 3b7d684b5d..1df39103ab 100644
--- a/packages/eslint-config-airbnb/rules/react-a11y.js
+++ b/packages/eslint-config-airbnb/rules/react-a11y.js
@@ -9,8 +9,7 @@ module.exports = {
   rules: {
     // Enforce that anchors have content
     // https://github.com/evcohen/eslint-plugin-jsx-a11y/blob/master/docs/rules/anchor-has-content.md
-    // TODO: enable, semver-major
-    'jsx-a11y/anchor-has-content': ['off', ['']],
+    'jsx-a11y/anchor-has-content': ['error', ['']],
 
     // Require ARIA roles to be valid and non-abstract
     // https://github.com/evcohen/eslint-plugin-jsx-a11y/blob/master/docs/rules/aria-role.md
@@ -78,9 +77,8 @@ module.exports = {
     'jsx-a11y/role-supports-aria-props': 'error',
 
     // Enforce tabIndex value is not greater than zero.
-    // TODO: evaluate
     // https://github.com/evcohen/eslint-plugin-jsx-a11y/blob/master/docs/rules/tabindex-no-positive.md
-    'jsx-a11y/tabindex-no-positive': 'off',
+    'jsx-a11y/tabindex-no-positive': 'error',
 
     // ensure <hX> tags have content and are not aria-hidden
     // https://github.com/evcohen/eslint-plugin-jsx-a11y/blob/master/docs/rules/heading-has-content.md
@@ -109,7 +107,6 @@ module.exports = {
 
     // Enforce that DOM elements without semantic behavior not have interaction handlers
     // https://github.com/evcohen/eslint-plugin-jsx-a11y/blob/master/docs/rules/no-static-element-interactions.md
-    // TODO: enable
-    'jsx-a11y/no-static-element-interactions': 'off',
+    'jsx-a11y/no-static-element-interactions': 'error',
   },
 };

From 7f12b9f04373860ad9d2e5c17f85aef95d195d30 Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Tue, 6 Sep 2016 22:53:01 -0700
Subject: [PATCH 0811/1591] [eslint config] [breaking] enable `react` rules:
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

 - `react/no-danger-with-children`
 - `react/no-unused-prop-types`
 - `react/style-prop-object`
 - `react/forbid-prop-types`
 - `react/jsx-no-duplicate-props`

Also sets `react/no-danger` to “warn”.
---
 packages/eslint-config-airbnb/rules/react.js | 15 ++++++---------
 1 file changed, 6 insertions(+), 9 deletions(-)

diff --git a/packages/eslint-config-airbnb/rules/react.js b/packages/eslint-config-airbnb/rules/react.js
index 1d4eb2a493..9c0a13eb8f 100644
--- a/packages/eslint-config-airbnb/rules/react.js
+++ b/packages/eslint-config-airbnb/rules/react.js
@@ -24,7 +24,7 @@ module.exports = {
 
     // Forbid certain propTypes (any, array, object)
     // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/forbid-prop-types.md
-    'react/forbid-prop-types': ['off', { forbid: ['any', 'array', 'object'] }],
+    'react/forbid-prop-types': ['error', { forbid: ['any', 'array', 'object'] }],
 
     // Enforce boolean attributes notation in JSX
     // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/jsx-boolean-value.md
@@ -67,7 +67,7 @@ module.exports = {
 
     // Prevent duplicate props in JSX
     // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/jsx-no-duplicate-props.md
-    'react/jsx-no-duplicate-props': ['off', { ignoreCase: true }],
+    'react/jsx-no-duplicate-props': ['error', { ignoreCase: true }],
 
     // Prevent usage of unwrapped JSX strings
     // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/jsx-no-literals.md
@@ -114,7 +114,7 @@ module.exports = {
 
     // Prevent usage of dangerous JSX properties
     // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/no-danger.md
-    'react/no-danger': 'off',
+    'react/no-danger': 'warn',
 
     // Prevent usage of deprecated methods
     // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/no-deprecated.md
@@ -250,13 +250,11 @@ module.exports = {
 
     // Prevent problem with children and props.dangerouslySetInnerHTML
     // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/no-danger-with-children.md
-    // TODO: enable, semver-major
-    'react/no-danger-with-children': 'off',
+    'react/no-danger-with-children': 'error',
 
     // Prevent unused propType definitions
     // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/no-unused-prop-types.md
-    // TODO: enable
-    'react/no-unused-prop-types': ['off', {
+    'react/no-unused-prop-types': ['error', {
       customValidators: [
       ],
       skipShapeProps: false,
@@ -264,8 +262,7 @@ module.exports = {
 
     // Require style prop value be an object or var
     // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/style-prop-object.md
-    // TODO: enable
-    'react/style-prop-object': 'off',
+    'react/style-prop-object': 'error',
   },
 
   settings: {

From ccd18f8b40e1718b5e75d6702ecbc2ab82d28455 Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Tue, 6 Sep 2016 23:08:36 -0700
Subject: [PATCH 0812/1591] [guide] Update declarations section to prefer
 expressions.

Fixes #1008.
---
 README.md                                         | 10 +++++++---
 packages/eslint-config-airbnb-base/rules/style.js |  4 +++-
 2 files changed, 10 insertions(+), 4 deletions(-)

diff --git a/README.md b/README.md
index be7bb4e3b4..2df5294457 100644
--- a/README.md
+++ b/README.md
@@ -554,18 +554,22 @@ Other Style Guides
 ## Functions
 
   <a name="functions--declarations"></a><a name="7.1"></a>
-  - [7.1](#functions--declarations) Use function declarations instead of function expressions. eslint: [`func-style`](http://eslint.org/docs/rules/func-style) jscs: [`requireFunctionDeclarations`](http://jscs.info/rule/requireFunctionDeclarations)
+  - [7.1](#functions--declarations) Use named function expressions instead of function declarations. eslint: [`func-style`](http://eslint.org/docs/rules/func-style) jscs: [`requireFunctionDeclarations`](http://jscs.info/rule/requireFunctionDeclarations)
 
-    > Why? Function declarations are named, so they're easier to identify in call stacks. Also, the whole body of a function declaration is hoisted, whereas only the reference of a function expression is hoisted. This rule makes it possible to always use [Arrow Functions](#arrow-functions) in place of function expressions. ([discussion](https://github.com/airbnb/javascript/issues/794))
+    > Why? Function declarations are hoisted, which means that it’s easy - too easy - to reference the function before it is defined in the file. This harms readability and maintainability. If you find that a function’s definition is large or complex enough that it is interfering with understanding the rest of the file, then perhaps it’s time to extract it to its own module! Don’t forget to name the expression - anonymous functions can make it harder to locate the problem in an Error's call stack.
 
     ```javascript
     // bad
     const foo = function () {
     };
 
-    // good
+    // bad
     function foo() {
     }
+
+    // good
+    const foo = function bar() {
+    };
     ```
 
   <a name="functions--iife"></a><a name="7.2"></a>
diff --git a/packages/eslint-config-airbnb-base/rules/style.js b/packages/eslint-config-airbnb-base/rules/style.js
index c46e510a8c..243d3141d0 100644
--- a/packages/eslint-config-airbnb-base/rules/style.js
+++ b/packages/eslint-config-airbnb-base/rules/style.js
@@ -36,7 +36,9 @@ module.exports = {
     'func-names': 'warn',
 
     // enforces use of function declarations or expressions
-    'func-style': 'off',
+    // http://eslint.org/docs/rules/func-style
+    // TODO: enable
+    'func-style': ['off', 'expression'],
 
     // Blacklist certain identifiers to prevent them being used
     // http://eslint.org/docs/rules/id-blacklist

From f769e35018021e2f2ee82fbb0c79290ba1c43d77 Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Thu, 8 Sep 2016 00:19:10 -0700
Subject: [PATCH 0813/1591] [eslint config] v11.0.0

---
 packages/eslint-config-airbnb/CHANGELOG.md | 8 ++++++++
 packages/eslint-config-airbnb/package.json | 2 +-
 2 files changed, 9 insertions(+), 1 deletion(-)

diff --git a/packages/eslint-config-airbnb/CHANGELOG.md b/packages/eslint-config-airbnb/CHANGELOG.md
index bb88fb3659..f6ff29b070 100644
--- a/packages/eslint-config-airbnb/CHANGELOG.md
+++ b/packages/eslint-config-airbnb/CHANGELOG.md
@@ -1,3 +1,11 @@
+11.0.0 / 2016-09-08
+==================
+- [breaking] enable `react` rules: `react/no-danger-with-children`, `react/no-unused-prop-types`, `react/style-prop-object`, `react/forbid-prop-types`, `react/jsx-no-duplicate-props`; set `react/no-danger` to “warn”
+- [breaking] enable `jsx-a11y` rules: `jsx-a11y/anchor-has-content`, `jsx-a11y/tabindex-no-positive`, `jsx-a11y/no-static-element-interactions`
+- [deps] update `eslint`, `eslint-plugin-react`, `eslint-config-airbnb-base`, `eslint-find-rules`, `eslint-plugin-import`, `eslint-plugin-jsx-a11y`
+- [patch] set `ignoreCase` to `true` in disabled rules.
+- [docs] use “#” in example command rather than version numbers (#984)
+
 10.0.1 / 2016-08-12
 ==================
 - [deps] update `eslint`, `eslint-find-rules`, `eslint-plugin-jsx-a11y`, `eslint-plugin-import`, `eslint-config-airbnb-base`
diff --git a/packages/eslint-config-airbnb/package.json b/packages/eslint-config-airbnb/package.json
index 1ec47d7284..7b2cb1da50 100644
--- a/packages/eslint-config-airbnb/package.json
+++ b/packages/eslint-config-airbnb/package.json
@@ -1,6 +1,6 @@
 {
   "name": "eslint-config-airbnb",
-  "version": "10.0.1",
+  "version": "11.0.0",
   "description": "Airbnb's ESLint config, following our styleguide",
   "main": "index.js",
   "scripts": {

From e6782493f378b6f3065354e82551deb42d570697 Mon Sep 17 00:00:00 2001
From: Joe Lencioni <joe.lencioni@airbnb.com>
Date: Thu, 8 Sep 2016 08:09:17 -0700
Subject: [PATCH 0814/1591] Update ECMAScript 6 heading to match TOC

I plan to add some information to this section that applies to ES6 and
everything following ES6. Since we already list this as ES6+ in the
table of contents, I figured it would be a good idea to make this match.

I preserved the anchor to avoid breaking links for folks.
---
 README.md | 5 +++--
 1 file changed, 3 insertions(+), 2 deletions(-)

diff --git a/README.md b/README.md
index 2df5294457..4f95692531 100644
--- a/README.md
+++ b/README.md
@@ -41,7 +41,7 @@ Other Style Guides
   1. [Events](#events)
   1. [jQuery](#jquery)
   1. [ECMAScript 5 Compatibility](#ecmascript-5-compatibility)
-  1. [ECMAScript 6+ (ES 2015+) Styles](#ecmascript-6-styles)
+  1. [ECMAScript 6+ (ES 2015+) Styles](#ecmascript-6-es-2015-styles)
   1. [Testing](#testing)
   1. [Performance](#performance)
   1. [Resources](#resources)
@@ -2752,7 +2752,8 @@ Other Style Guides
 
 **[⬆ back to top](#table-of-contents)**
 
-## ECMAScript 6 Styles
+<a name="ecmascript-6-styles"></a>
+## ECMAScript 6+ (ES 2015+) Styles
 
   <a name="es6-styles"></a><a name="27.1"></a>
   - [27.1](#es6-styles) This is a collection of links to the various ES6 features.

From 68b7aeb6dd7839f3556c612695e65a60e01ca1e7 Mon Sep 17 00:00:00 2001
From: Joe Lencioni <joe.lencioni@airbnb.com>
Date: Thu, 8 Sep 2016 08:18:43 -0700
Subject: [PATCH 0815/1591] Add rule about TC39 proposals that haven't reached
 stage 3

There has been some confusion around which language features should be
used and which should not be used yet. We have a pretty clear-cut rule
at Airbnb about this, which is do not use any TC39 proposals that have
not reached stage 3.

I considered putting this at the very top of the document, but I spotted
this section that seemed to fit.

Addresses #1057
---
 README.md | 5 +++++
 1 file changed, 5 insertions(+)

diff --git a/README.md b/README.md
index 4f95692531..358c38be8f 100644
--- a/README.md
+++ b/README.md
@@ -2772,6 +2772,11 @@ Other Style Guides
 1. [Iterators and Generators](#iterators-and-generators)
 1. [Modules](#modules)
 
+  <a name="tc39-proposals"></a>
+  - [27.2](#tc39-proposals) Do not use [TC39 proposals](https://github.com/tc39/proposals) that have not reached stage 3.
+
+    > Why? [They are not finalized](https://tc39.github.io/process-document/), and they are subject to change or to be withdrawn entirely. We want to use JavaScript, and proposals are not JavaScript yet.
+
 **[⬆ back to top](#table-of-contents)**
 
 ## Testing

From 25123199dcd9bc7ffcdb6662c54d24f8f547916e Mon Sep 17 00:00:00 2001
From: Joe Lencioni <joe.lencioni@airbnb.com>
Date: Thu, 8 Sep 2016 08:29:10 -0700
Subject: [PATCH 0816/1591] Add JavaScript Air to list of Podcasts

It probably wouldn't be a bad idea for us to make a full pass on
updating the resources section, but I noticed the podcasts portion was
missing JS Air.
---
 README.md | 1 +
 1 file changed, 1 insertion(+)

diff --git a/README.md b/README.md
index 358c38be8f..acaff602ae 100644
--- a/README.md
+++ b/README.md
@@ -2893,6 +2893,7 @@ Other Style Guides
 
 **Podcasts**
 
+  - [JavaScript Air](https://javascriptair.com/)
   - [JavaScript Jabber](https://devchat.tv/js-jabber/)
 
 

From 7d46d3c59fed7c959f20624412f0cc0e75087b0c Mon Sep 17 00:00:00 2001
From: Jordan Eldredge <jordan@jordaneldredge.com>
Date: Fri, 2 Sep 2016 22:08:25 -0700
Subject: [PATCH 0817/1591] Document react/require-render-return as a fully
 fledged rule

Now that the pull request has been merged, we can reference the actual rule.
---
 react/README.md | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/react/README.md b/react/README.md
index 32e4be48ab..c110e62c32 100644
--- a/react/README.md
+++ b/react/README.md
@@ -472,7 +472,7 @@
     }
     ```
 
-  - Be sure to return a value in your `render` methods. eslint: [`require-render-return`](https://github.com/yannickcr/eslint-plugin-react/pull/502)
+  - Be sure to return a value in your `render` methods. eslint: [`react/require-render-return`](https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/require-render-return.md)
 
     ```jsx
     // bad

From ff69c8cb35a7adcb349ba35783b24b28b7917f11 Mon Sep 17 00:00:00 2001
From: Joe Lencioni <joe.lencioni@airbnb.com>
Date: Thu, 8 Sep 2016 08:39:18 -0700
Subject: [PATCH 0818/1591] Prefer https over http

I checked all of the links in the JS style guide document and converted
as many as I could to use https.
---
 README.md | 48 ++++++++++++++++++++++++------------------------
 1 file changed, 24 insertions(+), 24 deletions(-)

diff --git a/README.md b/README.md
index acaff602ae..0f603dbaf0 100644
--- a/README.md
+++ b/README.md
@@ -1635,7 +1635,7 @@ Other Style Guides
     ```
 
   <a name="comparison--moreinfo"></a><a name="15.4"></a>
-  - [15.4](#comparison--moreinfo) For more information see [Truth Equality and JavaScript](http://javascriptweblog.wordpress.com/2011/02/07/truth-equality-and-javascript/#more-2108) by Angus Croll.
+  - [15.4](#comparison--moreinfo) For more information see [Truth Equality and JavaScript](https://javascriptweblog.wordpress.com/2011/02/07/truth-equality-and-javascript/#more-2108) by Angus Croll.
 
   <a name="comparison--switch-blocks"></a><a name="15.5"></a>
   - [15.5](#comparison--switch-blocks) Use braces to create blocks in `case` and `default` clauses that contain lexical declarations (e.g. `let`, `const`, `function`, and `class`).
@@ -2320,7 +2320,7 @@ Other Style Guides
     }());
     ```
 
-    [Read more](http://stackoverflow.com/questions/7365172/semicolon-before-self-invoking-function/7365214%237365214).
+    [Read more](https://stackoverflow.com/questions/7365172/semicolon-before-self-invoking-function/7365214%237365214).
 
 **[⬆ back to top](#table-of-contents)**
 
@@ -2372,7 +2372,7 @@ Other Style Guides
     ```
 
   <a name="coercion--comment-deviations"></a><a name="21.4"></a>
-  - [21.4](#coercion--comment-deviations) If for whatever reason you are doing something wild and `parseInt` is your bottleneck and need to use Bitshift for [performance reasons](http://jsperf.com/coercion-vs-casting/3), leave a comment explaining why and what you're doing.
+  - [21.4](#coercion--comment-deviations) If for whatever reason you are doing something wild and `parseInt` is your bottleneck and need to use Bitshift for [performance reasons](https://jsperf.com/coercion-vs-casting/3), leave a comment explaining why and what you're doing.
 
     ```javascript
     // good
@@ -2385,7 +2385,7 @@ Other Style Guides
     ```
 
   <a name="coercion--bitwise"></a><a name="21.5"></a>
-  - [21.5](#coercion--bitwise) **Note:** Be careful when using bitshift operations. Numbers are represented as [64-bit values](http://es5.github.io/#x4.3.19), but bitshift operations always return a 32-bit integer ([source](http://es5.github.io/#x11.7)). Bitshift can lead to unexpected behavior for integer values larger than 32 bits. [Discussion](https://github.com/airbnb/javascript/issues/109). Largest signed 32-bit Int is 2,147,483,647:
+  - [21.5](#coercion--bitwise) **Note:** Be careful when using bitshift operations. Numbers are represented as [64-bit values](https://es5.github.io/#x4.3.19), but bitshift operations always return a 32-bit integer ([source](https://es5.github.io/#x11.7)). Bitshift can lead to unexpected behavior for integer values larger than 32 bits. [Discussion](https://github.com/airbnb/javascript/issues/109). Largest signed 32-bit Int is 2,147,483,647:
 
     ```javascript
     2147483647 >> 0 //=> 2147483647
@@ -2748,7 +2748,7 @@ Other Style Guides
 ## ECMAScript 5 Compatibility
 
   <a name="es5-compat--kangax"></a><a name="26.1"></a>
-  - [26.1](#es5-compat--kangax) Refer to [Kangax](https://twitter.com/kangax/)'s ES5 [compatibility table](http://kangax.github.io/es5-compat-table/).
+  - [26.1](#es5-compat--kangax) Refer to [Kangax](https://twitter.com/kangax/)'s ES5 [compatibility table](https://kangax.github.io/es5-compat-table/).
 
 **[⬆ back to top](#table-of-contents)**
 
@@ -2804,13 +2804,13 @@ Other Style Guides
 
 ## Performance
 
-  - [On Layout & Web Performance](http://www.kellegous.com/j/2013/01/26/layout-performance/)
-  - [String vs Array Concat](http://jsperf.com/string-vs-array-concat/2)
-  - [Try/Catch Cost In a Loop](http://jsperf.com/try-catch-in-loop-cost)
-  - [Bang Function](http://jsperf.com/bang-function)
-  - [jQuery Find vs Context, Selector](http://jsperf.com/jquery-find-vs-context-sel/13)
-  - [innerHTML vs textContent for script text](http://jsperf.com/innerhtml-vs-textcontent-for-script-text)
-  - [Long String Concatenation](http://jsperf.com/ya-string-concat)
+  - [On Layout & Web Performance](https://www.kellegous.com/j/2013/01/26/layout-performance/)
+  - [String vs Array Concat](https://jsperf.com/string-vs-array-concat/2)
+  - [Try/Catch Cost In a Loop](https://jsperf.com/try-catch-in-loop-cost)
+  - [Bang Function](https://jsperf.com/bang-function)
+  - [jQuery Find vs Context, Selector](https://jsperf.com/jquery-find-vs-context-sel/13)
+  - [innerHTML vs textContent for script text](https://jsperf.com/innerhtml-vs-textcontent-for-script-text)
+  - [Long String Concatenation](https://jsperf.com/ya-string-concat)
   - [Are Javascript functions like `map()`, `reduce()`, and `filter()` optimized for traversing arrays?](https://www.quora.com/JavaScript-programming-language-Are-Javascript-functions-like-map-reduce-and-filter-already-optimized-for-traversing-array/answer/Quildreen-Motta)
   - Loading...
 
@@ -2840,7 +2840,7 @@ Other Style Guides
 **Other Style Guides**
 
   - [Google JavaScript Style Guide](https://google.github.io/styleguide/javascriptguide.xml)
-  - [jQuery Core Style Guidelines](http://contribute.jquery.org/style-guide/js/)
+  - [jQuery Core Style Guidelines](https://contribute.jquery.org/style-guide/js/)
   - [Principles of Writing Consistent, Idiomatic JavaScript](https://github.com/rwaldron/idiomatic.js)
 
 **Other Styles**
@@ -2852,7 +2852,7 @@ Other Style Guides
 
 **Further Reading**
 
-  - [Understanding JavaScript Closures](http://javascriptweblog.wordpress.com/2010/10/25/understanding-javascript-closures/) - Angus Croll
+  - [Understanding JavaScript Closures](https://javascriptweblog.wordpress.com/2010/10/25/understanding-javascript-closures/) - Angus Croll
   - [Basic JavaScript for the impatient programmer](http://www.2ality.com/2013/06/basic-javascript.html) - Dr. Axel Rauschmayer
   - [You Might Not Need jQuery](http://youmightnotneedjquery.com/) - Zack Bloom & Adam Schwartz
   - [ES6 Features](https://github.com/lukehoban/es6features) - Luke Hoban
@@ -2860,15 +2860,15 @@ Other Style Guides
 
 **Books**
 
-  - [JavaScript: The Good Parts](http://www.amazon.com/JavaScript-Good-Parts-Douglas-Crockford/dp/0596517742) - Douglas Crockford
-  - [JavaScript Patterns](http://www.amazon.com/JavaScript-Patterns-Stoyan-Stefanov/dp/0596806752) - Stoyan Stefanov
-  - [Pro JavaScript Design Patterns](http://www.amazon.com/JavaScript-Design-Patterns-Recipes-Problem-Solution/dp/159059908X)  - Ross Harmes and Dustin Diaz
-  - [High Performance Web Sites: Essential Knowledge for Front-End Engineers](http://www.amazon.com/High-Performance-Web-Sites-Essential/dp/0596529309) - Steve Souders
-  - [Maintainable JavaScript](http://www.amazon.com/Maintainable-JavaScript-Nicholas-C-Zakas/dp/1449327680) - Nicholas C. Zakas
-  - [JavaScript Web Applications](http://www.amazon.com/JavaScript-Web-Applications-Alex-MacCaw/dp/144930351X) - Alex MacCaw
-  - [Pro JavaScript Techniques](http://www.amazon.com/Pro-JavaScript-Techniques-John-Resig/dp/1590597273) - John Resig
-  - [Smashing Node.js: JavaScript Everywhere](http://www.amazon.com/Smashing-Node-js-JavaScript-Everywhere-Magazine/dp/1119962595) - Guillermo Rauch
-  - [Secrets of the JavaScript Ninja](http://www.amazon.com/Secrets-JavaScript-Ninja-John-Resig/dp/193398869X) - John Resig and Bear Bibeault
+  - [JavaScript: The Good Parts](https://www.amazon.com/JavaScript-Good-Parts-Douglas-Crockford/dp/0596517742) - Douglas Crockford
+  - [JavaScript Patterns](https://www.amazon.com/JavaScript-Patterns-Stoyan-Stefanov/dp/0596806752) - Stoyan Stefanov
+  - [Pro JavaScript Design Patterns](https://www.amazon.com/JavaScript-Design-Patterns-Recipes-Problem-Solution/dp/159059908X)  - Ross Harmes and Dustin Diaz
+  - [High Performance Web Sites: Essential Knowledge for Front-End Engineers](https://www.amazon.com/High-Performance-Web-Sites-Essential/dp/0596529309) - Steve Souders
+  - [Maintainable JavaScript](https://www.amazon.com/Maintainable-JavaScript-Nicholas-C-Zakas/dp/1449327680) - Nicholas C. Zakas
+  - [JavaScript Web Applications](https://www.amazon.com/JavaScript-Web-Applications-Alex-MacCaw/dp/144930351X) - Alex MacCaw
+  - [Pro JavaScript Techniques](https://www.amazon.com/Pro-JavaScript-Techniques-John-Resig/dp/1590597273) - John Resig
+  - [Smashing Node.js: JavaScript Everywhere](https://www.amazon.com/Smashing-Node-js-JavaScript-Everywhere-Magazine/dp/1119962595) - Guillermo Rauch
+  - [Secrets of the JavaScript Ninja](https://www.amazon.com/Secrets-JavaScript-Ninja-John-Resig/dp/193398869X) - John Resig and Bear Bibeault
   - [Human JavaScript](http://humanjavascript.com/) - Henrik Joreteg
   - [Superhero.js](http://superherojs.com/) - Kim Joar Bekkelund, Mads Mobæk, & Olav Bjorkoy
   - [JSBooks](http://jsbooks.revolunet.com/) - Julien Bouquillon
@@ -2881,7 +2881,7 @@ Other Style Guides
 
   - [DailyJS](http://dailyjs.com/)
   - [JavaScript Weekly](http://javascriptweekly.com/)
-  - [JavaScript, JavaScript...](http://javascriptweblog.wordpress.com/)
+  - [JavaScript, JavaScript...](https://javascriptweblog.wordpress.com/)
   - [Bocoup Weblog](https://bocoup.com/weblog)
   - [Adequately Good](http://www.adequatelygood.com/)
   - [NCZOnline](https://www.nczonline.net/)

From 7412641af9964d3c8ac3e8adf3fb48af6b88be27 Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Sat, 10 Sep 2016 14:28:26 -0700
Subject: [PATCH 0819/1591] [eslint config] [base] [deps] update to `eslint`
 `v3.5.0`.

---
 packages/eslint-config-airbnb-base/legacy.js    |  3 ++-
 packages/eslint-config-airbnb-base/package.json |  4 ++--
 packages/eslint-config-airbnb-base/rules/es6.js | 16 ++++++++++++++--
 .../eslint-config-airbnb-base/rules/node.js     |  9 +++++++++
 .../eslint-config-airbnb-base/rules/style.js    | 17 +++++++++++++++++
 5 files changed, 44 insertions(+), 5 deletions(-)

diff --git a/packages/eslint-config-airbnb-base/legacy.js b/packages/eslint-config-airbnb-base/legacy.js
index 9acfb1cb4e..3de97acd21 100644
--- a/packages/eslint-config-airbnb-base/legacy.js
+++ b/packages/eslint-config-airbnb-base/legacy.js
@@ -16,6 +16,7 @@ module.exports = {
   ecmaFeatures: {},
   globals: {},
   rules: {
-    'comma-dangle': ['error', 'never']
+    'comma-dangle': ['error', 'never'],
+    'prefer-numeric-literals': 'off',
   }
 };
diff --git a/packages/eslint-config-airbnb-base/package.json b/packages/eslint-config-airbnb-base/package.json
index b935962690..f2a786b89c 100644
--- a/packages/eslint-config-airbnb-base/package.json
+++ b/packages/eslint-config-airbnb-base/package.json
@@ -47,7 +47,7 @@
   "devDependencies": {
     "babel-preset-airbnb": "^2.0.0",
     "babel-tape-runner": "^2.0.1",
-    "eslint": "^3.4.0",
+    "eslint": "^3.5.0",
     "eslint-find-rules": "^1.13.1",
     "eslint-plugin-import": "^1.14.0",
     "in-publish": "^2.0.0",
@@ -55,7 +55,7 @@
     "tape": "^4.6.0"
   },
   "peerDependencies": {
-    "eslint": "^3.4.0",
+    "eslint": "^3.5.0",
     "eslint-plugin-import": "^1.14.0"
   },
   "engines": {
diff --git a/packages/eslint-config-airbnb-base/rules/es6.js b/packages/eslint-config-airbnb-base/rules/es6.js
index f1e2bd026f..11433ca3dd 100644
--- a/packages/eslint-config-airbnb-base/rules/es6.js
+++ b/packages/eslint-config-airbnb-base/rules/es6.js
@@ -14,10 +14,17 @@ module.exports = {
   rules: {
     // enforces no braces where they can be omitted
     // http://eslint.org/docs/rules/arrow-body-style
-    'arrow-body-style': ['error', 'as-needed'],
+    // TODO: enable requireReturnForObjectLiteral?
+    'arrow-body-style': ['error', 'as-needed', {
+      requireReturnForObjectLiteral: false,
+    }],
 
     // require parens in arrow function arguments
-    'arrow-parens': 'off',
+    // http://eslint.org/docs/rules/arrow-parens
+    // TODO: enable, semver-minor
+    'arrow-parens': ['off', 'as-needed', {
+      requireForBlockBody: true,
+    }],
 
     // require space before/after arrow function's arrow
     // http://eslint.org/docs/rules/arrow-spacing
@@ -101,6 +108,11 @@ module.exports = {
       ignoreReadBeforeAssign: true,
     }],
 
+    // disallow parseInt() in favor of binary, octal, and hexadecimal literals
+    // http://eslint.org/docs/rules/prefer-numeric-literals
+    // TODO: enable, semver-major
+    'prefer-numeric-literals': 'off',
+
     // suggest using Reflect methods where applicable
     // http://eslint.org/docs/rules/prefer-reflect
     // TODO: enable?
diff --git a/packages/eslint-config-airbnb-base/rules/node.js b/packages/eslint-config-airbnb-base/rules/node.js
index e4a71a6a5a..28c37127ab 100644
--- a/packages/eslint-config-airbnb-base/rules/node.js
+++ b/packages/eslint-config-airbnb-base/rules/node.js
@@ -33,6 +33,15 @@ module.exports = {
     // restrict usage of specified node modules
     'no-restricted-modules': 'off',
 
+    // disallow certain object properties
+    // http://eslint.org/docs/rules/no-restricted-properties
+    // TODO: enable, semver-major
+    'no-restricted-properties': ['off', {
+      object: 'arguments',
+      property: 'callee',
+      message: 'arguments.callee is deprecated,'
+    }],
+
     // disallow use of synchronous methods (off by default)
     'no-sync': 'off',
   }
diff --git a/packages/eslint-config-airbnb-base/rules/style.js b/packages/eslint-config-airbnb-base/rules/style.js
index 243d3141d0..764fef5465 100644
--- a/packages/eslint-config-airbnb-base/rules/style.js
+++ b/packages/eslint-config-airbnb-base/rules/style.js
@@ -73,6 +73,15 @@ module.exports = {
       }
     }],
 
+    // enforce position of line comments
+    // http://eslint.org/docs/rules/line-comment-position
+    // TODO: enable?
+    'line-comment-position': ['off', {
+      position: 'above',
+      ignorePattern: '',
+      applyDefaultPatterns: true,
+    }],
+
     // disallow mixed 'LF' and 'CRLF' as linebreaks
     // http://eslint.org/docs/rules/linebreak-style
     'linebreak-style': ['error', 'unix'],
@@ -80,6 +89,14 @@ module.exports = {
     // enforces empty lines around comments
     'lines-around-comment': 'off',
 
+    // require or disallow newlines around directives
+    // http://eslint.org/docs/rules/lines-around-directive
+    // TODO: enable, semver-major
+    'lines-around-directive': ['off', {
+      before: 'always',
+      after: 'always',
+    }],
+
     // specify the maximum depth that blocks can be nested
     'max-depth': ['off', 4],
 

From 38f679e9f90b8d9699477f4dc4c2914691b5f247 Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Sat, 10 Sep 2016 14:29:35 -0700
Subject: [PATCH 0820/1591] [eslint config] [base] [patch] loosen `max-len` by
 ignoring strings

Per https://github.com/eslint/eslint/pull/7049 / https://github.com/eslint/eslint/issues/5805
---
 packages/eslint-config-airbnb-base/rules/style.js | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

diff --git a/packages/eslint-config-airbnb-base/rules/style.js b/packages/eslint-config-airbnb-base/rules/style.js
index 764fef5465..181bd02ff5 100644
--- a/packages/eslint-config-airbnb-base/rules/style.js
+++ b/packages/eslint-config-airbnb-base/rules/style.js
@@ -104,7 +104,9 @@ module.exports = {
     // http://eslint.org/docs/rules/max-len
     'max-len': ['error', 100, 2, {
       ignoreUrls: true,
-      ignoreComments: false
+      ignoreComments: false,
+      ignoreStrings: true,
+      ignoreTemplateLiterals: true,
     }],
 
     // specify the max number of lines in a file

From dbdd56ccb5ee4a98394fa3d76467b12b93c01de4 Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Sat, 10 Sep 2016 14:35:57 -0700
Subject: [PATCH 0821/1591] [eslint config] [base] v7.0.1

---
 packages/eslint-config-airbnb-base/CHANGELOG.md | 5 +++++
 packages/eslint-config-airbnb-base/package.json | 2 +-
 2 files changed, 6 insertions(+), 1 deletion(-)

diff --git a/packages/eslint-config-airbnb-base/CHANGELOG.md b/packages/eslint-config-airbnb-base/CHANGELOG.md
index 06075f3d70..240597feff 100644
--- a/packages/eslint-config-airbnb-base/CHANGELOG.md
+++ b/packages/eslint-config-airbnb-base/CHANGELOG.md
@@ -1,3 +1,8 @@
+7.0.1 / 2016-09-10
+==================
+ - [patch] loosen `max-len` by ignoring strings
+ - [deps] update to `eslint` `v3.5.0`
+
 7.0.0 / 2016-09-06
 ==================
  - [breaking] Add no-plusplus in style.js and added explanation in README (#1012)
diff --git a/packages/eslint-config-airbnb-base/package.json b/packages/eslint-config-airbnb-base/package.json
index f2a786b89c..ff2c2908b8 100644
--- a/packages/eslint-config-airbnb-base/package.json
+++ b/packages/eslint-config-airbnb-base/package.json
@@ -1,6 +1,6 @@
 {
   "name": "eslint-config-airbnb-base",
-  "version": "7.0.0",
+  "version": "7.0.1",
   "description": "Airbnb's base JS ESLint config, following our styleguide",
   "main": "index.js",
   "scripts": {

From 6a72781121b2fd6709649d6d14b6a47ef0ad6042 Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Sat, 10 Sep 2016 14:47:01 -0700
Subject: [PATCH 0822/1591] [eslint config] [base] [minor] enable
 `arrow-parens` rule
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

This will cause new failures for some, but only for those not following our style guide already - hence, it’s not semver-major.
---
 packages/eslint-config-airbnb-base/rules/es6.js      | 3 +--
 packages/eslint-config-airbnb-base/test/test-base.js | 6 +++---
 2 files changed, 4 insertions(+), 5 deletions(-)

diff --git a/packages/eslint-config-airbnb-base/rules/es6.js b/packages/eslint-config-airbnb-base/rules/es6.js
index 11433ca3dd..efd5a15b33 100644
--- a/packages/eslint-config-airbnb-base/rules/es6.js
+++ b/packages/eslint-config-airbnb-base/rules/es6.js
@@ -21,8 +21,7 @@ module.exports = {
 
     // require parens in arrow function arguments
     // http://eslint.org/docs/rules/arrow-parens
-    // TODO: enable, semver-minor
-    'arrow-parens': ['off', 'as-needed', {
+    'arrow-parens': ['error', 'as-needed', {
       requireForBlockBody: true,
     }],
 
diff --git a/packages/eslint-config-airbnb-base/test/test-base.js b/packages/eslint-config-airbnb-base/test/test-base.js
index 8e7dc8cd2d..3d500bebfc 100644
--- a/packages/eslint-config-airbnb-base/test/test-base.js
+++ b/packages/eslint-config-airbnb-base/test/test-base.js
@@ -6,14 +6,14 @@ import index from '../';
 
 const files = { index };
 
-fs.readdirSync(path.join(__dirname, '../rules')).forEach(name => {
+fs.readdirSync(path.join(__dirname, '../rules')).forEach((name) => {
   files[name] = require(`../rules/${name}`); // eslint-disable-line global-require
 });
 
-Object.keys(files).forEach(name => {
+Object.keys(files).forEach((name) => {
   const config = files[name];
 
-  test(`${name}: does not reference react`, t => {
+  test(`${name}: does not reference react`, (t) => {
     t.plan(2);
 
     // scan plugins for react and fail if it is found

From 715dea65985321154d0b6d3cc2a5b331ed1c0335 Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Sun, 11 Sep 2016 14:06:19 -0700
Subject: [PATCH 0823/1591] [eslint config] [base] v7.1.0

---
 packages/eslint-config-airbnb-base/CHANGELOG.md | 4 ++++
 packages/eslint-config-airbnb-base/package.json | 2 +-
 2 files changed, 5 insertions(+), 1 deletion(-)

diff --git a/packages/eslint-config-airbnb-base/CHANGELOG.md b/packages/eslint-config-airbnb-base/CHANGELOG.md
index 240597feff..1bc559086a 100644
--- a/packages/eslint-config-airbnb-base/CHANGELOG.md
+++ b/packages/eslint-config-airbnb-base/CHANGELOG.md
@@ -1,3 +1,7 @@
+7.1.0 / 2016-09-11
+==================
+ - [minor] enable `arrow-parens` rule
+
 7.0.1 / 2016-09-10
 ==================
  - [patch] loosen `max-len` by ignoring strings
diff --git a/packages/eslint-config-airbnb-base/package.json b/packages/eslint-config-airbnb-base/package.json
index ff2c2908b8..ab06ae72af 100644
--- a/packages/eslint-config-airbnb-base/package.json
+++ b/packages/eslint-config-airbnb-base/package.json
@@ -1,6 +1,6 @@
 {
   "name": "eslint-config-airbnb-base",
-  "version": "7.0.1",
+  "version": "7.1.0",
   "description": "Airbnb's base JS ESLint config, following our styleguide",
   "main": "index.js",
   "scripts": {

From 3fc37b3a26e5f7f0a6ab93c23c0a5157cdd06378 Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Sun, 11 Sep 2016 15:05:43 -0700
Subject: [PATCH 0824/1591] [eslint config] [deps] update
 `eslint-config-airbnb-base`, `eslint`

---
 packages/eslint-config-airbnb/package.json             | 6 +++---
 packages/eslint-config-airbnb/test/test-base.js        | 6 +++---
 packages/eslint-config-airbnb/test/test-react-order.js | 4 ++--
 3 files changed, 8 insertions(+), 8 deletions(-)

diff --git a/packages/eslint-config-airbnb/package.json b/packages/eslint-config-airbnb/package.json
index 7b2cb1da50..e9bfb19382 100644
--- a/packages/eslint-config-airbnb/package.json
+++ b/packages/eslint-config-airbnb/package.json
@@ -45,12 +45,12 @@
   },
   "homepage": "https://github.com/airbnb/javascript",
   "dependencies": {
-    "eslint-config-airbnb-base": "^7.0.0"
+    "eslint-config-airbnb-base": "^7.1.0"
   },
   "devDependencies": {
     "babel-preset-airbnb": "^2.0.0",
     "babel-tape-runner": "^2.0.1",
-    "eslint": "^3.4.0",
+    "eslint": "^3.5.0",
     "eslint-find-rules": "^1.13.1",
     "eslint-plugin-import": "^1.14.0",
     "eslint-plugin-jsx-a11y": "^2.2.1",
@@ -61,7 +61,7 @@
     "tape": "^4.6.0"
   },
   "peerDependencies": {
-    "eslint": "^3.4.0",
+    "eslint": "^3.5.0",
     "eslint-plugin-jsx-a11y": "^2.2.1",
     "eslint-plugin-import": "^1.14.0",
     "eslint-plugin-react": "^6.2.0"
diff --git a/packages/eslint-config-airbnb/test/test-base.js b/packages/eslint-config-airbnb/test/test-base.js
index 9457e2ef42..6f7a55ab7c 100644
--- a/packages/eslint-config-airbnb/test/test-base.js
+++ b/packages/eslint-config-airbnb/test/test-base.js
@@ -6,7 +6,7 @@ const base = require('../base');
 
 const files = { base };
 
-fs.readdirSync(path.join(__dirname, '../rules')).forEach(name => {
+fs.readdirSync(path.join(__dirname, '../rules')).forEach((name) => {
   if (name === 'react.js' || name === 'react-a11y.js') {
     return;
   }
@@ -14,10 +14,10 @@ fs.readdirSync(path.join(__dirname, '../rules')).forEach(name => {
   files[name] = require(`../rules/${name}`); // eslint-disable-line global-require
 });
 
-Object.keys(files).forEach(name => {
+Object.keys(files).forEach((name) => {
   const config = files[name];
 
-  test(`${name}: does not reference react`, t => {
+  test(`${name}: does not reference react`, (t) => {
     t.plan(2);
 
     // scan plugins for react and fail if it is found
diff --git a/packages/eslint-config-airbnb/test/test-react-order.js b/packages/eslint-config-airbnb/test/test-react-order.js
index aa8aa192eb..0257a40a92 100644
--- a/packages/eslint-config-airbnb/test/test-react-order.js
+++ b/packages/eslint-config-airbnb/test/test-react-order.js
@@ -57,7 +57,7 @@ test('validate react prop order', (t) => {
     t.deepEquals(result.messages, [], 'no messages in results');
   });
 
-  t.test('order: when random method is first', t => {
+  t.test('order: when random method is first', (t) => {
     t.plan(2);
     const result = lint(wrapComponent(`
   someMethod() {}
@@ -74,7 +74,7 @@ test('validate react prop order', (t) => {
     t.equal(result.messages[0].ruleId, 'react/sort-comp', 'fails due to sort');
   });
 
-  t.test('order: when random method after lifecycle methods', t => {
+  t.test('order: when random method after lifecycle methods', (t) => {
     t.plan(2);
     const result = lint(wrapComponent(`
   componentWillMount() {}

From e59376f625a4278f53494074c1c905de296cd8aa Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Sun, 11 Sep 2016 15:51:58 -0700
Subject: [PATCH 0825/1591] [eslint config] v11.1.0

---
 packages/eslint-config-airbnb/CHANGELOG.md | 4 ++++
 packages/eslint-config-airbnb/package.json | 2 +-
 2 files changed, 5 insertions(+), 1 deletion(-)

diff --git a/packages/eslint-config-airbnb/CHANGELOG.md b/packages/eslint-config-airbnb/CHANGELOG.md
index f6ff29b070..2ac3efbd8d 100644
--- a/packages/eslint-config-airbnb/CHANGELOG.md
+++ b/packages/eslint-config-airbnb/CHANGELOG.md
@@ -1,3 +1,7 @@
+11.1.0 / 2016-09-11
+==================
+- [deps] update `eslint-config-airbnb-base`, `eslint`
+
 11.0.0 / 2016-09-08
 ==================
 - [breaking] enable `react` rules: `react/no-danger-with-children`, `react/no-unused-prop-types`, `react/style-prop-object`, `react/forbid-prop-types`, `react/jsx-no-duplicate-props`; set `react/no-danger` to “warn”
diff --git a/packages/eslint-config-airbnb/package.json b/packages/eslint-config-airbnb/package.json
index e9bfb19382..d576e030f6 100644
--- a/packages/eslint-config-airbnb/package.json
+++ b/packages/eslint-config-airbnb/package.json
@@ -1,6 +1,6 @@
 {
   "name": "eslint-config-airbnb",
-  "version": "11.0.0",
+  "version": "11.1.0",
   "description": "Airbnb's ESLint config, following our styleguide",
   "main": "index.js",
   "scripts": {

From 7da28d43ad4b73264420663ebbfb83fdff2b9249 Mon Sep 17 00:00:00 2001
From: Guillaume Verbal <guillaume.verbal@gmail.com>
Date: Mon, 12 Sep 2016 12:18:59 +0800
Subject: [PATCH 0826/1591] [Docs] update 8.3 to fix conflict with 6.2 (fixes
 #1058)

---
 README.md | 15 +++++++++------
 1 file changed, 9 insertions(+), 6 deletions(-)

diff --git a/README.md b/README.md
index 0f603dbaf0..ce0de3fd3e 100644
--- a/README.md
+++ b/README.md
@@ -849,15 +849,18 @@ Other Style Guides
 
     ```js
     // bad
-    [1, 2, 3].map(number => 'As time went by, the string containing the ' +
-      `${number} became much longer. So we needed to break it over multiple ` +
-      'lines.'
+    ['get', 'post', 'put'].map(number => Object.prototype.hasOwnProperty.call(
+        httpMagicObjectWithAVeryLongName,
+        httpMethod
+      )
     );
 
     // good
-    [1, 2, 3].map(number => (
-      `As time went by, the string containing the ${number} became much ` +
-      'longer. So we needed to break it over multiple lines.'
+    ['get', 'post', 'put'].map(number => (
+      Object.prototype.hasOwnProperty.call(
+        httpMagicObjectWithAVeryLongName,
+        httpMethod
+      )
     ));
     ```
 

From 2a28b9c82f04a05462cfef025b6c791538472232 Mon Sep 17 00:00:00 2001
From: Alexey Raspopov <oleksii.raspopov@gmail.com>
Date: Mon, 12 Sep 2016 10:06:15 +0300
Subject: [PATCH 0827/1591] move #variables--unary-increment-decrement to
 correct section

---
 README.md | 59 ++++++++++++++++++++++++++++---------------------------
 1 file changed, 30 insertions(+), 29 deletions(-)

diff --git a/README.md b/README.md
index ce0de3fd3e..0c99262f5a 100644
--- a/README.md
+++ b/README.md
@@ -1285,35 +1285,6 @@ Other Style Guides
     }
     ```
 
-    - [13.5](#variables--unary-increment-decrement) Avoid using unary increments and decrements (++, --). eslint [`no-plusplus`](http://eslint.org/docs/rules/no-plusplus)
-
-      > Why? Per the eslint documentation, unary increment and decrement statements are subject to automatic semicolon insertion and can cause silent errors with incrementing or decrementing values within an application. It is also more expressive to mutate your values with statements like `num += 1` instead of `num ++`. Disallowing unary increment and decrement statements also prevents you from pre-incrementing/pre-decrementing values unintentionally which can also cause unexpected behavior in your programs.
-
-      ```javascript
-        // bad
-
-        let array = [1, 2, 3];
-        let num = 1;
-        let increment = num ++;
-        let decrement = -- num;
-
-        for(let i = 0; i < array.length; i++){
-          let value = array[i];
-          ++value;
-        }
-
-        // good
-
-        let array = [1, 2, 3];
-        let num = 1;
-        let increment = num += 1;
-        let decrement = num -= 1;
-
-        array.forEach((value) => {
-          value += 1;
-        });
-      ```
-
 **[⬆ back to top](#table-of-contents)**
 
 
@@ -1487,6 +1458,36 @@ Other Style Guides
     // the same applies for `const`
     ```
 
+  <a name="variables--unary-increment-decrement"></a><a name="13.6"></a>
+  - [13.6](#variables--unary-increment-decrement) Avoid using unary increments and decrements (++, --). eslint [`no-plusplus`](http://eslint.org/docs/rules/no-plusplus)
+
+    > Why? Per the eslint documentation, unary increment and decrement statements are subject to automatic semicolon insertion and can cause silent errors with incrementing or decrementing values within an application. It is also more expressive to mutate your values with statements like `num += 1` instead of `num ++`. Disallowing unary increment and decrement statements also prevents you from pre-incrementing/pre-decrementing values unintentionally which can also cause unexpected behavior in your programs.
+
+    ```javascript
+      // bad
+
+      let array = [1, 2, 3];
+      let num = 1;
+      let increment = num ++;
+      let decrement = -- num;
+
+      for(let i = 0; i < array.length; i++){
+        let value = array[i];
+        ++value;
+      }
+
+      // good
+
+      let array = [1, 2, 3];
+      let num = 1;
+      let increment = num += 1;
+      let decrement = num -= 1;
+
+      array.forEach((value) => {
+        value += 1;
+      });
+    ```
+
 **[⬆ back to top](#table-of-contents)**
 
 

From 6cdda0737e25b92cd0805a4490b20b7df3f9e8e5 Mon Sep 17 00:00:00 2001
From: Guillaume Verbal <guillaume.verbal@gmail.com>
Date: Mon, 12 Sep 2016 19:08:10 +0800
Subject: [PATCH 0828/1591] [guide] Fix typo from #1058

---
 README.md | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/README.md b/README.md
index 0c99262f5a..d1a0ab4af0 100644
--- a/README.md
+++ b/README.md
@@ -849,14 +849,14 @@ Other Style Guides
 
     ```js
     // bad
-    ['get', 'post', 'put'].map(number => Object.prototype.hasOwnProperty.call(
+    ['get', 'post', 'put'].map(httpMethod => Object.prototype.hasOwnProperty.call(
         httpMagicObjectWithAVeryLongName,
         httpMethod
       )
     );
 
     // good
-    ['get', 'post', 'put'].map(number => (
+    ['get', 'post', 'put'].map(httpMethod => (
       Object.prototype.hasOwnProperty.call(
         httpMagicObjectWithAVeryLongName,
         httpMethod

From e9141f46308f3622ef7dd204e8c54f336db1011b Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Mon, 12 Sep 2016 11:02:12 -0700
Subject: [PATCH 0829/1591] [eslint config] [base] [patch] fix category of
 `no-restricted-properties`

Per https://github.com/eslint/eslint/issues/7112 / https://github.com/eslint/eslint/issues/7118
---
 .../eslint-config-airbnb-base/rules/best-practices.js    | 9 +++++++++
 packages/eslint-config-airbnb-base/rules/node.js         | 9 ---------
 2 files changed, 9 insertions(+), 9 deletions(-)

diff --git a/packages/eslint-config-airbnb-base/rules/best-practices.js b/packages/eslint-config-airbnb-base/rules/best-practices.js
index a41c1e252a..1da565f692 100644
--- a/packages/eslint-config-airbnb-base/rules/best-practices.js
+++ b/packages/eslint-config-airbnb-base/rules/best-practices.js
@@ -172,6 +172,15 @@ module.exports = {
     // disallow declaring the same variable more then once
     'no-redeclare': 'error',
 
+    // disallow certain object properties
+    // http://eslint.org/docs/rules/no-restricted-properties
+    // TODO: enable, semver-major
+    'no-restricted-properties': ['off', {
+      object: 'arguments',
+      property: 'callee',
+      message: 'arguments.callee is deprecated,'
+    }],
+
     // disallow use of assignment in return statement
     'no-return-assign': 'error',
 
diff --git a/packages/eslint-config-airbnb-base/rules/node.js b/packages/eslint-config-airbnb-base/rules/node.js
index 28c37127ab..e4a71a6a5a 100644
--- a/packages/eslint-config-airbnb-base/rules/node.js
+++ b/packages/eslint-config-airbnb-base/rules/node.js
@@ -33,15 +33,6 @@ module.exports = {
     // restrict usage of specified node modules
     'no-restricted-modules': 'off',
 
-    // disallow certain object properties
-    // http://eslint.org/docs/rules/no-restricted-properties
-    // TODO: enable, semver-major
-    'no-restricted-properties': ['off', {
-      object: 'arguments',
-      property: 'callee',
-      message: 'arguments.callee is deprecated,'
-    }],
-
     // disallow use of synchronous methods (off by default)
     'no-sync': 'off',
   }

From bd5505b7273cd2c80815c880b3c7709c02ec73c0 Mon Sep 17 00:00:00 2001
From: Harrison Shoff <hi@hshoff.com>
Date: Thu, 25 Aug 2016 21:33:51 -0700
Subject: [PATCH 0830/1591] [commas] fix traling comma link

---
 README.md | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/README.md b/README.md
index d1a0ab4af0..572efb257c 100644
--- a/README.md
+++ b/README.md
@@ -2255,7 +2255,7 @@ Other Style Guides
   <a name="commas--dangling"></a><a name="19.2"></a>
   - [19.2](#commas--dangling) Additional trailing comma: **Yup.** eslint: [`comma-dangle`](http://eslint.org/docs/rules/comma-dangle.html) jscs: [`requireTrailingComma`](http://jscs.info/rule/requireTrailingComma)
 
-    > Why? This leads to cleaner git diffs. Also, transpilers like Babel will remove the additional trailing comma in the transpiled code which means you don't have to worry about the [trailing comma problem](es5/README.md#commas) in legacy browsers.
+    > Why? This leads to cleaner git diffs. Also, transpilers like Babel will remove the additional trailing comma in the transpiled code which means you don't have to worry about the [trailing comma problem](https://github.com/airbnb/javascript/blob/es5-deprecated/es5/README.md#commas) in legacy browsers.
 
     ```javascript
     // bad - git diff without trailing comma

From 286b01c6759a8dea957db7e78517ba675cd1a8c1 Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Wed, 14 Sep 2016 12:54:45 -0700
Subject: [PATCH 0831/1591] [eslint config] [*] [deps] update
 `eslint-plugin-import`

---
 packages/eslint-config-airbnb-base/package.json     | 4 ++--
 packages/eslint-config-airbnb-base/rules/imports.js | 9 +++++++++
 packages/eslint-config-airbnb/package.json          | 4 ++--
 3 files changed, 13 insertions(+), 4 deletions(-)

diff --git a/packages/eslint-config-airbnb-base/package.json b/packages/eslint-config-airbnb-base/package.json
index ab06ae72af..3d8429df6f 100644
--- a/packages/eslint-config-airbnb-base/package.json
+++ b/packages/eslint-config-airbnb-base/package.json
@@ -49,14 +49,14 @@
     "babel-tape-runner": "^2.0.1",
     "eslint": "^3.5.0",
     "eslint-find-rules": "^1.13.1",
-    "eslint-plugin-import": "^1.14.0",
+    "eslint-plugin-import": "^1.15.0",
     "in-publish": "^2.0.0",
     "safe-publish-latest": "^1.0.1",
     "tape": "^4.6.0"
   },
   "peerDependencies": {
     "eslint": "^3.5.0",
-    "eslint-plugin-import": "^1.14.0"
+    "eslint-plugin-import": "^1.15.0"
   },
   "engines": {
     "node": ">= 4"
diff --git a/packages/eslint-config-airbnb-base/rules/imports.js b/packages/eslint-config-airbnb-base/rules/imports.js
index 09f2397c70..1f5c67a749 100644
--- a/packages/eslint-config-airbnb-base/rules/imports.js
+++ b/packages/eslint-config-airbnb-base/rules/imports.js
@@ -129,5 +129,14 @@ module.exports = {
     // Restrict which files can be imported in a given folder
     // https://github.com/benmosher/eslint-plugin-import/blob/master/docs/rules/no-restricted-paths.md
     'import/no-restricted-paths': 'off',
+
+    // Forbid modules to have too many dependencies
+    // https://github.com/benmosher/eslint-plugin-import/blob/master/docs/rules/max-dependencies.md
+    'import/max-dependencies': ['off', { max: 10 }],
+
+    // Forbid import of modules using absolute paths
+    // https://github.com/benmosher/eslint-plugin-import/blob/master/docs/rules/no-absolute-path.md
+    // TODO: enable, semver-major
+    'import/no-absolute-path': ['off'],
   },
 };
diff --git a/packages/eslint-config-airbnb/package.json b/packages/eslint-config-airbnb/package.json
index d576e030f6..ed3cace477 100644
--- a/packages/eslint-config-airbnb/package.json
+++ b/packages/eslint-config-airbnb/package.json
@@ -52,7 +52,7 @@
     "babel-tape-runner": "^2.0.1",
     "eslint": "^3.5.0",
     "eslint-find-rules": "^1.13.1",
-    "eslint-plugin-import": "^1.14.0",
+    "eslint-plugin-import": "^1.15.0",
     "eslint-plugin-jsx-a11y": "^2.2.1",
     "eslint-plugin-react": "^6.2.0",
     "in-publish": "^2.0.0",
@@ -63,7 +63,7 @@
   "peerDependencies": {
     "eslint": "^3.5.0",
     "eslint-plugin-jsx-a11y": "^2.2.1",
-    "eslint-plugin-import": "^1.14.0",
+    "eslint-plugin-import": "^1.15.0",
     "eslint-plugin-react": "^6.2.0"
   },
   "engines": {

From a2a35a8dbadc229c402b9752412d22ce5c42f33b Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Wed, 14 Sep 2016 12:55:24 -0700
Subject: [PATCH 0832/1591] [eslint config] [deps] update
 `eslint-plugin-jsx-a11y`, `eslint-plugin-react`

---
 packages/eslint-config-airbnb/package.json | 8 ++++----
 1 file changed, 4 insertions(+), 4 deletions(-)

diff --git a/packages/eslint-config-airbnb/package.json b/packages/eslint-config-airbnb/package.json
index ed3cace477..aaa19aa068 100644
--- a/packages/eslint-config-airbnb/package.json
+++ b/packages/eslint-config-airbnb/package.json
@@ -53,8 +53,8 @@
     "eslint": "^3.5.0",
     "eslint-find-rules": "^1.13.1",
     "eslint-plugin-import": "^1.15.0",
-    "eslint-plugin-jsx-a11y": "^2.2.1",
-    "eslint-plugin-react": "^6.2.0",
+    "eslint-plugin-jsx-a11y": "^2.2.2",
+    "eslint-plugin-react": "^6.2.1",
     "in-publish": "^2.0.0",
     "react": ">= 0.13.0",
     "safe-publish-latest": "^1.0.1",
@@ -62,9 +62,9 @@
   },
   "peerDependencies": {
     "eslint": "^3.5.0",
-    "eslint-plugin-jsx-a11y": "^2.2.1",
+    "eslint-plugin-jsx-a11y": "^2.2.2",
     "eslint-plugin-import": "^1.15.0",
-    "eslint-plugin-react": "^6.2.0"
+    "eslint-plugin-react": "^6.2.1"
   },
   "engines": {
     "node": ">= 4"

From 11b9adff01597361f080588196a268e1d6f64d86 Mon Sep 17 00:00:00 2001
From: Kazuki Yamada <koukun0120@gmail.com>
Date: Fri, 16 Sep 2016 02:39:35 +0900
Subject: [PATCH 0833/1591] Fix japanese translation link

---
 react/README.md | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/react/README.md b/react/README.md
index c110e62c32..d672e56b16 100644
--- a/react/README.md
+++ b/react/README.md
@@ -576,6 +576,6 @@
   - ![pl](https://raw.githubusercontent.com/gosquared/flags/master/flags/flags/shiny/24/Poland.png) **Polish**: [pietraszekl/javascript](https://github.com/pietraszekl/javascript/tree/master/react)
   - ![kr](https://raw.githubusercontent.com/gosquared/flags/master/flags/flags/shiny/24/South-Korea.png) **Korean**: [apple77y/javascript](https://github.com/apple77y/javascript/tree/master/react)
   - ![Br](https://raw.githubusercontent.com/gosquared/flags/master/flags/flags/shiny/24/Brazil.png) **Portuguese**: [ronal2do/javascript](https://github.com/ronal2do/airbnb-react-styleguide)
-  - ![jp](https://raw.githubusercontent.com/gosquared/flags/master/flags/flags/shiny/24/Japan.png) **Japanese**: [mitsuruog/javascript-style-guide](https://github.com/mitsuruog/javascript-style-guide)
+  - ![jp](https://raw.githubusercontent.com/gosquared/flags/master/flags/flags/shiny/24/Japan.png) **Japanese**: [mitsuruog/javascript-style-guide](https://github.com/mitsuruog/javascript-style-guide/tree/master/react)
 
 **[⬆ back to top](#table-of-contents)**

From a86d546c618f596003a7c6dbe0ee3d6ca61fe120 Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Fri, 16 Sep 2016 16:12:06 -0700
Subject: [PATCH 0834/1591] [Docs] remove yet another wrapped-string "good"
 example

---
 README.md | 3 +--
 1 file changed, 1 insertion(+), 2 deletions(-)

diff --git a/README.md b/README.md
index 572efb257c..5ede48ef97 100644
--- a/README.md
+++ b/README.md
@@ -878,8 +878,7 @@ Other Style Guides
 
     // good
     [1, 2, 3].map(number => (
-      `A long string with the ${number}. It’s so long that we’ve broken it ` +
-      'over multiple lines!'
+      `A long string with the ${number}. It’s so long that we don’t want it to take up space on the .map line!`
     ));
 
     // bad

From a599bca47492035fa5b9fdd9d1ba23743877a44f Mon Sep 17 00:00:00 2001
From: Joe Lencioni <joe.lencioni@airbnb.com>
Date: Mon, 19 Sep 2016 11:42:12 -0700
Subject: [PATCH 0835/1591] Add rule to avoid misusing DOM component prop names

People expect props like `style` and `className` to mean one specific
thing. Varying this API for a subset of your app makes the code less
readable and less maintainable, and may cause bugs.
---
 react/README.md | 13 +++++++++++++
 1 file changed, 13 insertions(+)

diff --git a/react/README.md b/react/README.md
index d672e56b16..9d4d9da3e3 100644
--- a/react/README.md
+++ b/react/README.md
@@ -127,6 +127,19 @@
       return WithFoo;
     }
     ```
+
+  - **Props Naming**: Avoid using DOM component prop names for different purposes.
+
+  > Why? People expect props like `style` and `className` to mean one specific thing. Varying this API for a subset of your app makes the code less readable and less maintainable, and may cause bugs.
+
+    ```jsx
+    // bad
+    <MyComponent style="fancy" />
+
+    // good
+    <MyComponent variant="fancy" />
+    ```
+
 ## Declaration
 
   - Do not use `displayName` for naming components. Instead, name the component by reference.

From 386a7b1d158f262f3c19f268d1bdb980098a9b0d Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Tue, 20 Sep 2016 00:03:08 -0700
Subject: [PATCH 0836/1591] [eslint config] [*] [deps] update
 `eslint-find-rules`, `safe-publish-latest`

---
 packages/eslint-config-airbnb-base/package.json | 4 ++--
 packages/eslint-config-airbnb/package.json      | 4 ++--
 2 files changed, 4 insertions(+), 4 deletions(-)

diff --git a/packages/eslint-config-airbnb-base/package.json b/packages/eslint-config-airbnb-base/package.json
index 3d8429df6f..37944d16b7 100644
--- a/packages/eslint-config-airbnb-base/package.json
+++ b/packages/eslint-config-airbnb-base/package.json
@@ -48,10 +48,10 @@
     "babel-preset-airbnb": "^2.0.0",
     "babel-tape-runner": "^2.0.1",
     "eslint": "^3.5.0",
-    "eslint-find-rules": "^1.13.1",
+    "eslint-find-rules": "^1.13.2",
     "eslint-plugin-import": "^1.15.0",
     "in-publish": "^2.0.0",
-    "safe-publish-latest": "^1.0.1",
+    "safe-publish-latest": "^1.1.0",
     "tape": "^4.6.0"
   },
   "peerDependencies": {
diff --git a/packages/eslint-config-airbnb/package.json b/packages/eslint-config-airbnb/package.json
index aaa19aa068..9d44748dc7 100644
--- a/packages/eslint-config-airbnb/package.json
+++ b/packages/eslint-config-airbnb/package.json
@@ -51,13 +51,13 @@
     "babel-preset-airbnb": "^2.0.0",
     "babel-tape-runner": "^2.0.1",
     "eslint": "^3.5.0",
-    "eslint-find-rules": "^1.13.1",
+    "eslint-find-rules": "^1.13.2",
     "eslint-plugin-import": "^1.15.0",
     "eslint-plugin-jsx-a11y": "^2.2.2",
     "eslint-plugin-react": "^6.2.1",
     "in-publish": "^2.0.0",
     "react": ">= 0.13.0",
-    "safe-publish-latest": "^1.0.1",
+    "safe-publish-latest": "^1.1.0",
     "tape": "^4.6.0"
   },
   "peerDependencies": {

From 4c598664fbef7c16a5f1e3b648635b4c83d6527b Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Tue, 20 Sep 2016 00:13:37 -0700
Subject: [PATCH 0837/1591] [eslint config] [deps] update `eslint-plugin-react`

---
 packages/eslint-config-airbnb/package.json   |  4 ++--
 packages/eslint-config-airbnb/rules/react.js | 10 ++++++++++
 2 files changed, 12 insertions(+), 2 deletions(-)

diff --git a/packages/eslint-config-airbnb/package.json b/packages/eslint-config-airbnb/package.json
index 9d44748dc7..a69217c450 100644
--- a/packages/eslint-config-airbnb/package.json
+++ b/packages/eslint-config-airbnb/package.json
@@ -54,7 +54,7 @@
     "eslint-find-rules": "^1.13.2",
     "eslint-plugin-import": "^1.15.0",
     "eslint-plugin-jsx-a11y": "^2.2.2",
-    "eslint-plugin-react": "^6.2.1",
+    "eslint-plugin-react": "^6.3.0",
     "in-publish": "^2.0.0",
     "react": ">= 0.13.0",
     "safe-publish-latest": "^1.1.0",
@@ -64,7 +64,7 @@
     "eslint": "^3.5.0",
     "eslint-plugin-jsx-a11y": "^2.2.2",
     "eslint-plugin-import": "^1.15.0",
-    "eslint-plugin-react": "^6.2.1"
+    "eslint-plugin-react": "^6.3.0"
   },
   "engines": {
     "node": ">= 4"
diff --git a/packages/eslint-config-airbnb/rules/react.js b/packages/eslint-config-airbnb/rules/react.js
index 9c0a13eb8f..e8ead07943 100644
--- a/packages/eslint-config-airbnb/rules/react.js
+++ b/packages/eslint-config-airbnb/rules/react.js
@@ -263,6 +263,16 @@ module.exports = {
     // Require style prop value be an object or var
     // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/style-prop-object.md
     'react/style-prop-object': 'error',
+
+    // Prevent invalid characters from appearing in markup
+    // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/no-unescaped-entities.md
+    // TODO: enable, semver-major
+    'react/no-unescaped-entities': 'off',
+
+    // Prevent passing of children as props
+    // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/no-children-prop.md
+    // TODO: enable, semver-major
+    'react/no-children-prop': 'off'
   },
 
   settings: {

From e5f4eb57b4733d0b338f120842e719f6df51c035 Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Fri, 23 Sep 2016 15:29:36 -0700
Subject: [PATCH 0838/1591] [eslint config] [*] [deps] update
 `eslint-plugin-import`, `eslint` to 3.6

---
 packages/eslint-config-airbnb-base/package.json       |  8 ++++----
 .../eslint-config-airbnb-base/rules/best-practices.js | 10 +++++++++-
 packages/eslint-config-airbnb-base/rules/imports.js   | 11 +++++++++++
 packages/eslint-config-airbnb-base/rules/style.js     |  2 +-
 packages/eslint-config-airbnb/package.json            |  8 ++++----
 5 files changed, 29 insertions(+), 10 deletions(-)

diff --git a/packages/eslint-config-airbnb-base/package.json b/packages/eslint-config-airbnb-base/package.json
index 37944d16b7..c4ba9ead0e 100644
--- a/packages/eslint-config-airbnb-base/package.json
+++ b/packages/eslint-config-airbnb-base/package.json
@@ -47,16 +47,16 @@
   "devDependencies": {
     "babel-preset-airbnb": "^2.0.0",
     "babel-tape-runner": "^2.0.1",
-    "eslint": "^3.5.0",
+    "eslint": "^3.6.0",
     "eslint-find-rules": "^1.13.2",
-    "eslint-plugin-import": "^1.15.0",
+    "eslint-plugin-import": "^1.16.0",
     "in-publish": "^2.0.0",
     "safe-publish-latest": "^1.1.0",
     "tape": "^4.6.0"
   },
   "peerDependencies": {
-    "eslint": "^3.5.0",
-    "eslint-plugin-import": "^1.15.0"
+    "eslint": "^3.6.0",
+    "eslint-plugin-import": "^1.16.0"
   },
   "engines": {
     "node": ">= 4"
diff --git a/packages/eslint-config-airbnb-base/rules/best-practices.js b/packages/eslint-config-airbnb-base/rules/best-practices.js
index 1da565f692..d8d10b3398 100644
--- a/packages/eslint-config-airbnb-base/rules/best-practices.js
+++ b/packages/eslint-config-airbnb-base/rules/best-practices.js
@@ -15,7 +15,9 @@ module.exports = {
 
     // enforce that class methods use "this"
     // http://eslint.org/docs/rules/class-methods-use-this
-    'class-methods-use-this': 'error',
+    'class-methods-use-this': ['error', {
+      exceptMethods: [],
+    }],
 
     // require return statements to either always or never specify values
     'consistent-return': 'error',
@@ -179,6 +181,12 @@ module.exports = {
       object: 'arguments',
       property: 'callee',
       message: 'arguments.callee is deprecated,'
+    }, {
+      property: '__defineGetter__',
+      message: 'Please use Object.defineProperty instead.',
+    }, {
+      property: '__defineSetter__',
+      message: 'Please use Object.defineProperty instead.',
     }],
 
     // disallow use of assignment in return statement
diff --git a/packages/eslint-config-airbnb-base/rules/imports.js b/packages/eslint-config-airbnb-base/rules/imports.js
index 1f5c67a749..b7065dd3bd 100644
--- a/packages/eslint-config-airbnb-base/rules/imports.js
+++ b/packages/eslint-config-airbnb-base/rules/imports.js
@@ -138,5 +138,16 @@ module.exports = {
     // https://github.com/benmosher/eslint-plugin-import/blob/master/docs/rules/no-absolute-path.md
     // TODO: enable, semver-major
     'import/no-absolute-path': ['off'],
+
+    // Forbid require() calls with expressions
+    // https://github.com/benmosher/eslint-plugin-import/blob/master/docs/rules/no-dynamic-require.md
+    // TODO: enable, semver-major
+    'import/no-dynamic-require': ['off'],
+
+    // prevent importing the submodules of other modules
+    // https://github.com/benmosher/eslint-plugin-import/blob/master/docs/rules/no-internal-modules.md
+    'import/no-internal-modules': ['off', {
+      allow: [],
+    }],
   },
 };
diff --git a/packages/eslint-config-airbnb-base/rules/style.js b/packages/eslint-config-airbnb-base/rules/style.js
index 181bd02ff5..4349e1352b 100644
--- a/packages/eslint-config-airbnb-base/rules/style.js
+++ b/packages/eslint-config-airbnb-base/rules/style.js
@@ -26,7 +26,7 @@ module.exports = {
     'consistent-this': 'off',
 
     // enforce newline at the end of file, with no multiple empty lines
-    'eol-last': 'error',
+    'eol-last': ['error', 'always'],
 
     // enforce spacing between functions and their invocations
     // http://eslint.org/docs/rules/func-call-spacing
diff --git a/packages/eslint-config-airbnb/package.json b/packages/eslint-config-airbnb/package.json
index a69217c450..e320fdf0d4 100644
--- a/packages/eslint-config-airbnb/package.json
+++ b/packages/eslint-config-airbnb/package.json
@@ -50,9 +50,9 @@
   "devDependencies": {
     "babel-preset-airbnb": "^2.0.0",
     "babel-tape-runner": "^2.0.1",
-    "eslint": "^3.5.0",
+    "eslint": "^3.6.0",
     "eslint-find-rules": "^1.13.2",
-    "eslint-plugin-import": "^1.15.0",
+    "eslint-plugin-import": "^1.16.0",
     "eslint-plugin-jsx-a11y": "^2.2.2",
     "eslint-plugin-react": "^6.3.0",
     "in-publish": "^2.0.0",
@@ -61,9 +61,9 @@
     "tape": "^4.6.0"
   },
   "peerDependencies": {
-    "eslint": "^3.5.0",
+    "eslint": "^3.6.0",
     "eslint-plugin-jsx-a11y": "^2.2.2",
-    "eslint-plugin-import": "^1.15.0",
+    "eslint-plugin-import": "^1.16.0",
     "eslint-plugin-react": "^6.3.0"
   },
   "engines": {

From e8b51b278520142b5d025fd2df993d4e25d46434 Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Wed, 21 Sep 2016 17:17:27 -0700
Subject: [PATCH 0839/1591] [eslint config] [*] [new] set `ecmaVersion` to
 2017; enable object rest/spread; update `babel-preset-airbnb`

---
 README.md                                     | 20 +++++++++++++++++++
 packages/eslint-config-airbnb-base/.eslintrc  |  2 +-
 packages/eslint-config-airbnb-base/index.js   |  7 +++++--
 .../eslint-config-airbnb-base/package.json    |  2 +-
 .../rules/best-practices.js                   |  4 ++++
 .../eslint-config-airbnb-base/test/.eslintrc  |  3 +--
 .../test/test-base.js                         |  6 ++++--
 packages/eslint-config-airbnb/package.json    |  2 +-
 8 files changed, 37 insertions(+), 9 deletions(-)

diff --git a/README.md b/README.md
index 5ede48ef97..705f44d582 100644
--- a/README.md
+++ b/README.md
@@ -293,6 +293,26 @@ Other Style Guides
   console.log(has.call(object, key));
   ```
 
+  <a name="objects--rest-spread"></a>
+  - [3.10](#objects--rest-spread) Prefer the object spread operator over `Object.assign` to shallow-copy objects. Use the object rest operator to get a new object with certain properties omitted.
+
+  ```javascript
+  // very bad
+  const original = { a: 1, b: 2 };
+  const copy = Object.assign(original, { c: 3 }); // this mutates `original` ಠ_ಠ
+  delete copy.a; // so does this
+
+  // bad
+  const original = { a: 1, b: 2 };
+  const copy = Object.assign({}, original, { c: 3 }); // copy => { a: 1, b: 2, c: 3 }
+
+  // good
+  const original = { a: 1, b: 2 };
+  const copy = { ...original, c: 3 }; // copy => { a: 1, b: 2, c: 3 }
+
+  const { a, ...noA } = copy; // noA => { b: 2, c: 3 }
+  ```
+
 **[⬆ back to top](#table-of-contents)**
 
 ## Arrays
diff --git a/packages/eslint-config-airbnb-base/.eslintrc b/packages/eslint-config-airbnb-base/.eslintrc
index 6c8556be3b..224149fda6 100644
--- a/packages/eslint-config-airbnb-base/.eslintrc
+++ b/packages/eslint-config-airbnb-base/.eslintrc
@@ -4,5 +4,5 @@
     // disable requiring trailing commas because it might be nice to revert to
     // being JSON at some point, and I don't want to make big changes now.
     "comma-dangle": 0
-  }
+  },
 }
diff --git a/packages/eslint-config-airbnb-base/index.js b/packages/eslint-config-airbnb-base/index.js
index cc13673700..4de657b075 100644
--- a/packages/eslint-config-airbnb-base/index.js
+++ b/packages/eslint-config-airbnb-base/index.js
@@ -9,10 +9,13 @@ module.exports = {
     './rules/imports',
   ].map(require.resolve),
   parserOptions: {
-    ecmaVersion: 2016,
+    ecmaVersion: 2017,
     sourceType: 'module',
+    ecmaFeatures: {
+      experimentalObjectRestSpread: true,
+    },
   },
   rules: {
     strict: 'error',
-  }
+  },
 };
diff --git a/packages/eslint-config-airbnb-base/package.json b/packages/eslint-config-airbnb-base/package.json
index c4ba9ead0e..6c6302050b 100644
--- a/packages/eslint-config-airbnb-base/package.json
+++ b/packages/eslint-config-airbnb-base/package.json
@@ -45,7 +45,7 @@
   },
   "homepage": "https://github.com/airbnb/javascript",
   "devDependencies": {
-    "babel-preset-airbnb": "^2.0.0",
+    "babel-preset-airbnb": "^2.1.0",
     "babel-tape-runner": "^2.0.1",
     "eslint": "^3.6.0",
     "eslint-find-rules": "^1.13.2",
diff --git a/packages/eslint-config-airbnb-base/rules/best-practices.js b/packages/eslint-config-airbnb-base/rules/best-practices.js
index d8d10b3398..46fefab83f 100644
--- a/packages/eslint-config-airbnb-base/rules/best-practices.js
+++ b/packages/eslint-config-airbnb-base/rules/best-practices.js
@@ -187,6 +187,10 @@ module.exports = {
     }, {
       property: '__defineSetter__',
       message: 'Please use Object.defineProperty instead.',
+    }, {
+      object: 'Object',
+      property: 'assign',
+      message: 'Please use the object spread operator (...) instead.',
     }],
 
     // disallow use of assignment in return statement
diff --git a/packages/eslint-config-airbnb-base/test/.eslintrc b/packages/eslint-config-airbnb-base/test/.eslintrc
index 7e22f26a09..02ab3c48bb 100644
--- a/packages/eslint-config-airbnb-base/test/.eslintrc
+++ b/packages/eslint-config-airbnb-base/test/.eslintrc
@@ -1,7 +1,6 @@
 {
   "rules": {
-    // disabled because I find it tedious to write tests while following this
-    // rule
+    // disabled because I find it tedious to write tests while following this rule
     "no-shadow": 0,
     // tests uses `t` for tape
     "id-length": [2, {"min": 2, "properties": "never", "exceptions": ["t"]}],
diff --git a/packages/eslint-config-airbnb-base/test/test-base.js b/packages/eslint-config-airbnb-base/test/test-base.js
index 3d500bebfc..7544a0639c 100644
--- a/packages/eslint-config-airbnb-base/test/test-base.js
+++ b/packages/eslint-config-airbnb-base/test/test-base.js
@@ -4,13 +4,15 @@ import test from 'tape';
 
 import index from '../';
 
-const files = { index };
+const files = { ...{ index } }; // object spread is to test parsing
 
 fs.readdirSync(path.join(__dirname, '../rules')).forEach((name) => {
   files[name] = require(`../rules/${name}`); // eslint-disable-line global-require
 });
 
-Object.keys(files).forEach((name) => {
+Object.keys(files).forEach((
+  name, // trailing function comma is to test parsing
+) => {
   const config = files[name];
 
   test(`${name}: does not reference react`, (t) => {
diff --git a/packages/eslint-config-airbnb/package.json b/packages/eslint-config-airbnb/package.json
index e320fdf0d4..a5ede6ffcb 100644
--- a/packages/eslint-config-airbnb/package.json
+++ b/packages/eslint-config-airbnb/package.json
@@ -48,7 +48,7 @@
     "eslint-config-airbnb-base": "^7.1.0"
   },
   "devDependencies": {
-    "babel-preset-airbnb": "^2.0.0",
+    "babel-preset-airbnb": "^2.1.0",
     "babel-tape-runner": "^2.0.1",
     "eslint": "^3.6.0",
     "eslint-find-rules": "^1.13.2",

From ec2c4393d2b6accf832607082b3a7a5842347fa6 Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Fri, 23 Sep 2016 16:00:11 -0700
Subject: [PATCH 0840/1591] [eslint config] [base] v7.2.0

---
 packages/eslint-config-airbnb-base/CHANGELOG.md | 6 ++++++
 packages/eslint-config-airbnb-base/package.json | 2 +-
 2 files changed, 7 insertions(+), 1 deletion(-)

diff --git a/packages/eslint-config-airbnb-base/CHANGELOG.md b/packages/eslint-config-airbnb-base/CHANGELOG.md
index 1bc559086a..1346a8b9ac 100644
--- a/packages/eslint-config-airbnb-base/CHANGELOG.md
+++ b/packages/eslint-config-airbnb-base/CHANGELOG.md
@@ -1,3 +1,9 @@
+7.2.0 / 2016-09-23
+==================
+ - [new] set `ecmaVersion` to 2017; enable object rest/spread; update `babel-preset-airbnb`
+ - [patch] fix category of `no-restricted-properties`
+ - [deps] update `eslint`, `eslint-plugin-import`, `eslint-find-rules`, `safe-publish-latest`
+
 7.1.0 / 2016-09-11
 ==================
  - [minor] enable `arrow-parens` rule
diff --git a/packages/eslint-config-airbnb-base/package.json b/packages/eslint-config-airbnb-base/package.json
index 6c6302050b..528510914d 100644
--- a/packages/eslint-config-airbnb-base/package.json
+++ b/packages/eslint-config-airbnb-base/package.json
@@ -1,6 +1,6 @@
 {
   "name": "eslint-config-airbnb-base",
-  "version": "7.1.0",
+  "version": "7.2.0",
   "description": "Airbnb's base JS ESLint config, following our styleguide",
   "main": "index.js",
   "scripts": {

From 62cac3eea120dc0eb74a152e05004e0e962e9706 Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Fri, 23 Sep 2016 22:42:53 -0700
Subject: [PATCH 0841/1591] [eslint config] [deps] update
 `eslint-config-airbnb-base`

---
 packages/eslint-config-airbnb/package.json | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/packages/eslint-config-airbnb/package.json b/packages/eslint-config-airbnb/package.json
index a5ede6ffcb..c36188c4ea 100644
--- a/packages/eslint-config-airbnb/package.json
+++ b/packages/eslint-config-airbnb/package.json
@@ -45,7 +45,7 @@
   },
   "homepage": "https://github.com/airbnb/javascript",
   "dependencies": {
-    "eslint-config-airbnb-base": "^7.1.0"
+    "eslint-config-airbnb-base": "^7.2.0"
   },
   "devDependencies": {
     "babel-preset-airbnb": "^2.1.0",

From 173cba3cc6987daf0d018633313ae277c290dcde Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Fri, 23 Sep 2016 22:45:47 -0700
Subject: [PATCH 0842/1591] [eslint config] v11.2.0

---
 packages/eslint-config-airbnb/CHANGELOG.md | 5 +++++
 packages/eslint-config-airbnb/package.json | 2 +-
 2 files changed, 6 insertions(+), 1 deletion(-)

diff --git a/packages/eslint-config-airbnb/CHANGELOG.md b/packages/eslint-config-airbnb/CHANGELOG.md
index 2ac3efbd8d..2f4f803406 100644
--- a/packages/eslint-config-airbnb/CHANGELOG.md
+++ b/packages/eslint-config-airbnb/CHANGELOG.md
@@ -1,3 +1,8 @@
+11.2.0 / 2016-09-23
+==================
+- [new] set `ecmaVersion` to 2017; enable object rest/spread; update `babel-preset-airbnb`
+- [deps] update `eslint`, `eslint-config-airbnb-base`, `eslint-plugin-import`, `eslint-plugin-jsx-a11y`, `eslint-plugin-react`, `eslint-find-rules`, `safe-publish-latest`
+
 11.1.0 / 2016-09-11
 ==================
 - [deps] update `eslint-config-airbnb-base`, `eslint`
diff --git a/packages/eslint-config-airbnb/package.json b/packages/eslint-config-airbnb/package.json
index c36188c4ea..94299c25e6 100644
--- a/packages/eslint-config-airbnb/package.json
+++ b/packages/eslint-config-airbnb/package.json
@@ -1,6 +1,6 @@
 {
   "name": "eslint-config-airbnb",
-  "version": "11.1.0",
+  "version": "11.2.0",
   "description": "Airbnb's ESLint config, following our styleguide",
   "main": "index.js",
   "scripts": {

From f6dab799b8fa1346f1cc3fdfdbe9c9fbeef7baf6 Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Sat, 24 Sep 2016 12:30:58 -0700
Subject: [PATCH 0843/1591] [eslint config] [base] [breaking] enable rules:

 - `no-restricted-properties`
 - `prefer-numeric-literals`
 - `lines-around-directive`
 - `import/extensions`
 - `import/no-absolute-path`
 - `import/no-dynamic-require`
---
 .../rules/best-practices.js                          |  7 +------
 packages/eslint-config-airbnb-base/rules/es6.js      |  3 +--
 packages/eslint-config-airbnb-base/rules/imports.js  | 12 ++++++------
 packages/eslint-config-airbnb-base/rules/style.js    |  3 +--
 packages/eslint-config-airbnb-base/test/test-base.js |  1 +
 5 files changed, 10 insertions(+), 16 deletions(-)

diff --git a/packages/eslint-config-airbnb-base/rules/best-practices.js b/packages/eslint-config-airbnb-base/rules/best-practices.js
index 46fefab83f..fa97fb68e3 100644
--- a/packages/eslint-config-airbnb-base/rules/best-practices.js
+++ b/packages/eslint-config-airbnb-base/rules/best-practices.js
@@ -176,8 +176,7 @@ module.exports = {
 
     // disallow certain object properties
     // http://eslint.org/docs/rules/no-restricted-properties
-    // TODO: enable, semver-major
-    'no-restricted-properties': ['off', {
+    'no-restricted-properties': ['error', {
       object: 'arguments',
       property: 'callee',
       message: 'arguments.callee is deprecated,'
@@ -187,10 +186,6 @@ module.exports = {
     }, {
       property: '__defineSetter__',
       message: 'Please use Object.defineProperty instead.',
-    }, {
-      object: 'Object',
-      property: 'assign',
-      message: 'Please use the object spread operator (...) instead.',
     }],
 
     // disallow use of assignment in return statement
diff --git a/packages/eslint-config-airbnb-base/rules/es6.js b/packages/eslint-config-airbnb-base/rules/es6.js
index efd5a15b33..063ee2cfa5 100644
--- a/packages/eslint-config-airbnb-base/rules/es6.js
+++ b/packages/eslint-config-airbnb-base/rules/es6.js
@@ -109,8 +109,7 @@ module.exports = {
 
     // disallow parseInt() in favor of binary, octal, and hexadecimal literals
     // http://eslint.org/docs/rules/prefer-numeric-literals
-    // TODO: enable, semver-major
-    'prefer-numeric-literals': 'off',
+    'prefer-numeric-literals': 'error',
 
     // suggest using Reflect methods where applicable
     // http://eslint.org/docs/rules/prefer-reflect
diff --git a/packages/eslint-config-airbnb-base/rules/imports.js b/packages/eslint-config-airbnb-base/rules/imports.js
index b7065dd3bd..c4b350fc66 100644
--- a/packages/eslint-config-airbnb-base/rules/imports.js
+++ b/packages/eslint-config-airbnb-base/rules/imports.js
@@ -107,8 +107,10 @@ module.exports = {
 
     // Ensure consistent use of file extension within the import path
     // https://github.com/benmosher/eslint-plugin-import/blob/master/docs/rules/extensions.md
-    // TODO: enable when https://github.com/benmosher/eslint-plugin-import/issues/390 is resolved
-    'import/extensions': ['off', 'never'],
+    'import/extensions': ['error', 'always', {
+      js: 'never',
+      jsx: 'never',
+    }],
 
     // Enforce a convention in module import order
     // https://github.com/benmosher/eslint-plugin-import/blob/master/docs/rules/order.md
@@ -136,13 +138,11 @@ module.exports = {
 
     // Forbid import of modules using absolute paths
     // https://github.com/benmosher/eslint-plugin-import/blob/master/docs/rules/no-absolute-path.md
-    // TODO: enable, semver-major
-    'import/no-absolute-path': ['off'],
+    'import/no-absolute-path': 'error',
 
     // Forbid require() calls with expressions
     // https://github.com/benmosher/eslint-plugin-import/blob/master/docs/rules/no-dynamic-require.md
-    // TODO: enable, semver-major
-    'import/no-dynamic-require': ['off'],
+    'import/no-dynamic-require': 'error',
 
     // prevent importing the submodules of other modules
     // https://github.com/benmosher/eslint-plugin-import/blob/master/docs/rules/no-internal-modules.md
diff --git a/packages/eslint-config-airbnb-base/rules/style.js b/packages/eslint-config-airbnb-base/rules/style.js
index 4349e1352b..a661712984 100644
--- a/packages/eslint-config-airbnb-base/rules/style.js
+++ b/packages/eslint-config-airbnb-base/rules/style.js
@@ -91,8 +91,7 @@ module.exports = {
 
     // require or disallow newlines around directives
     // http://eslint.org/docs/rules/lines-around-directive
-    // TODO: enable, semver-major
-    'lines-around-directive': ['off', {
+    'lines-around-directive': ['error', {
       before: 'always',
       after: 'always',
     }],
diff --git a/packages/eslint-config-airbnb-base/test/test-base.js b/packages/eslint-config-airbnb-base/test/test-base.js
index 7544a0639c..810c8000b0 100644
--- a/packages/eslint-config-airbnb-base/test/test-base.js
+++ b/packages/eslint-config-airbnb-base/test/test-base.js
@@ -7,6 +7,7 @@ import index from '../';
 const files = { ...{ index } }; // object spread is to test parsing
 
 fs.readdirSync(path.join(__dirname, '../rules')).forEach((name) => {
+  // eslint-disable-next-line import/no-dynamic-require
   files[name] = require(`../rules/${name}`); // eslint-disable-line global-require
 });
 

From 0157e69a0df8ee8fa568d2c0ed53c087e4910c80 Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Sat, 24 Sep 2016 12:31:53 -0700
Subject: [PATCH 0844/1591] [eslint config] [base] v8.0.0

---
 packages/eslint-config-airbnb-base/CHANGELOG.md | 4 ++++
 packages/eslint-config-airbnb-base/package.json | 2 +-
 2 files changed, 5 insertions(+), 1 deletion(-)

diff --git a/packages/eslint-config-airbnb-base/CHANGELOG.md b/packages/eslint-config-airbnb-base/CHANGELOG.md
index 1346a8b9ac..7919002249 100644
--- a/packages/eslint-config-airbnb-base/CHANGELOG.md
+++ b/packages/eslint-config-airbnb-base/CHANGELOG.md
@@ -1,3 +1,7 @@
+8.0.0 / 2016-09-24
+==================
+ - [breaking] enable rules: `no-restricted-properties`, `prefer-numeric-literals`, `lines-around-directive`, `import/extensions`, `import/no-absolute-path`, `import/no-dynamic-require`
+
 7.2.0 / 2016-09-23
 ==================
  - [new] set `ecmaVersion` to 2017; enable object rest/spread; update `babel-preset-airbnb`
diff --git a/packages/eslint-config-airbnb-base/package.json b/packages/eslint-config-airbnb-base/package.json
index 528510914d..adb4fd9981 100644
--- a/packages/eslint-config-airbnb-base/package.json
+++ b/packages/eslint-config-airbnb-base/package.json
@@ -1,6 +1,6 @@
 {
   "name": "eslint-config-airbnb-base",
-  "version": "7.2.0",
+  "version": "8.0.0",
   "description": "Airbnb's base JS ESLint config, following our styleguide",
   "main": "index.js",
   "scripts": {

From 0faabe054d0026806e12386f81c508f3ea3386fe Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Sat, 24 Sep 2016 14:30:57 -0700
Subject: [PATCH 0845/1591] [eslint config] [breaking] [deps] update
 `eslint-config-airbnb-base`

---
 packages/eslint-config-airbnb/package.json      | 2 +-
 packages/eslint-config-airbnb/test/test-base.js | 1 +
 2 files changed, 2 insertions(+), 1 deletion(-)

diff --git a/packages/eslint-config-airbnb/package.json b/packages/eslint-config-airbnb/package.json
index 94299c25e6..c536f4ce0b 100644
--- a/packages/eslint-config-airbnb/package.json
+++ b/packages/eslint-config-airbnb/package.json
@@ -45,7 +45,7 @@
   },
   "homepage": "https://github.com/airbnb/javascript",
   "dependencies": {
-    "eslint-config-airbnb-base": "^7.2.0"
+    "eslint-config-airbnb-base": "^8.0.0"
   },
   "devDependencies": {
     "babel-preset-airbnb": "^2.1.0",
diff --git a/packages/eslint-config-airbnb/test/test-base.js b/packages/eslint-config-airbnb/test/test-base.js
index 6f7a55ab7c..2b946a462c 100644
--- a/packages/eslint-config-airbnb/test/test-base.js
+++ b/packages/eslint-config-airbnb/test/test-base.js
@@ -11,6 +11,7 @@ fs.readdirSync(path.join(__dirname, '../rules')).forEach((name) => {
     return;
   }
 
+  // eslint-disable-next-line import/no-dynamic-require
   files[name] = require(`../rules/${name}`); // eslint-disable-line global-require
 });
 

From 0dae56a8e164cb6371328759bd02c5ab3fe2d185 Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Sat, 24 Sep 2016 14:34:52 -0700
Subject: [PATCH 0846/1591] [eslint config] [patch] disable deprecated and
 redundant `react/require-extension` rule

Fixes #978.
---
 packages/eslint-config-airbnb/rules/react.js | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/packages/eslint-config-airbnb/rules/react.js b/packages/eslint-config-airbnb/rules/react.js
index e8ead07943..c696bf0d6b 100644
--- a/packages/eslint-config-airbnb/rules/react.js
+++ b/packages/eslint-config-airbnb/rules/react.js
@@ -170,7 +170,8 @@ module.exports = {
 
     // Restrict file extensions that may be required
     // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/require-extension.md
-    'react/require-extension': ['error', { extensions: ['.jsx', '.js'] }],
+    // deprecated in favor of import/extensions
+    'react/require-extension': ['off', { extensions: ['.jsx', '.js'] }],
 
     // Require render() methods to return something
     // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/require-render-return.md

From 976845e9305e33cc366b104569145a05354078bd Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Sat, 24 Sep 2016 14:38:54 -0700
Subject: [PATCH 0847/1591] [eslint config] [breaking] Enable react rules:

 - `react/no-unescaped-entities`
 - `react/no-children-prop`
---
 packages/eslint-config-airbnb/rules/react.js | 6 ++----
 1 file changed, 2 insertions(+), 4 deletions(-)

diff --git a/packages/eslint-config-airbnb/rules/react.js b/packages/eslint-config-airbnb/rules/react.js
index c696bf0d6b..7736020599 100644
--- a/packages/eslint-config-airbnb/rules/react.js
+++ b/packages/eslint-config-airbnb/rules/react.js
@@ -267,13 +267,11 @@ module.exports = {
 
     // Prevent invalid characters from appearing in markup
     // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/no-unescaped-entities.md
-    // TODO: enable, semver-major
-    'react/no-unescaped-entities': 'off',
+    'react/no-unescaped-entities': 'error',
 
     // Prevent passing of children as props
     // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/no-children-prop.md
-    // TODO: enable, semver-major
-    'react/no-children-prop': 'off'
+    'react/no-children-prop': 'error'
   },
 
   settings: {

From 39d7c73ef10f0c2c45681722159f5a8897b99cf9 Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Sat, 24 Sep 2016 20:03:58 -0700
Subject: [PATCH 0848/1591] [eslint config] [patch] `class-methods-use-this`:
 exempt React lifecycle methods

---
 packages/eslint-config-airbnb/rules/react.js | 19 +++++++++++++++++--
 1 file changed, 17 insertions(+), 2 deletions(-)

diff --git a/packages/eslint-config-airbnb/rules/react.js b/packages/eslint-config-airbnb/rules/react.js
index 7736020599..11f2825a5a 100644
--- a/packages/eslint-config-airbnb/rules/react.js
+++ b/packages/eslint-config-airbnb/rules/react.js
@@ -1,6 +1,6 @@
 module.exports = {
   plugins: [
-    'react'
+    'react',
   ],
   parserOptions: {
     ecmaFeatures: {
@@ -8,7 +8,7 @@ module.exports = {
     },
   },
   ecmaFeatures: {
-    jsx: true
+    jsx: true,
   },
 
   // View link below for react rules documentation
@@ -18,6 +18,21 @@ module.exports = {
     // http://eslint.org/docs/rules/jsx-quotes
     'jsx-quotes': ['error', 'prefer-double'],
 
+    'class-methods-use-this': ['error', {
+      exceptMethods: [
+        'render',
+        'getInitialState',
+        'getDefaultProps',
+        'componentWillMount',
+        'componentDidMount',
+        'componentWillReceiveProps',
+        'shouldComponentUpdate',
+        'componentWillUpdate',
+        'componentDidUpdate',
+        'componentWillUnmount',
+      ],
+    }],
+
     // Prevent missing displayName in a React component definition
     // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/display-name.md
     'react/display-name': ['off', { ignoreTranspilerName: false }],

From a1c84eee150da374381193799b3a89aa8f0fa2e5 Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Sat, 24 Sep 2016 15:06:10 -0700
Subject: [PATCH 0849/1591] [eslint config] v12.0.0

---
 packages/eslint-config-airbnb/CHANGELOG.md | 6 ++++++
 packages/eslint-config-airbnb/package.json | 2 +-
 2 files changed, 7 insertions(+), 1 deletion(-)

diff --git a/packages/eslint-config-airbnb/CHANGELOG.md b/packages/eslint-config-airbnb/CHANGELOG.md
index 2f4f803406..4dde06abe3 100644
--- a/packages/eslint-config-airbnb/CHANGELOG.md
+++ b/packages/eslint-config-airbnb/CHANGELOG.md
@@ -1,3 +1,9 @@
+12.0.0 / 2016-09-24
+==================
+- [breaking] Enable react rules: `react/no-unescaped-entities`, `react/no-children-prop`
+- [breaking] [deps] update `eslint-config-airbnb-base`
+- [patch] disable deprecated and redundant `react/require-extension` rule (#978)
+
 11.2.0 / 2016-09-23
 ==================
 - [new] set `ecmaVersion` to 2017; enable object rest/spread; update `babel-preset-airbnb`
diff --git a/packages/eslint-config-airbnb/package.json b/packages/eslint-config-airbnb/package.json
index c536f4ce0b..04f566e532 100644
--- a/packages/eslint-config-airbnb/package.json
+++ b/packages/eslint-config-airbnb/package.json
@@ -1,6 +1,6 @@
 {
   "name": "eslint-config-airbnb",
-  "version": "11.2.0",
+  "version": "12.0.0",
   "description": "Airbnb's ESLint config, following our styleguide",
   "main": "index.js",
   "scripts": {

From 59db4aab157d98bf98c216c119e9ff848eea9505 Mon Sep 17 00:00:00 2001
From: Jonas Enlund <jonas.enlund@gmail.com>
Date: Sun, 25 Sep 2016 11:56:54 +0300
Subject: [PATCH 0850/1591] [eslint config] [base] [patch] `new-cap`: add
 immutable.js exceptions

---
 packages/eslint-config-airbnb-base/rules/style.js | 7 ++++++-
 1 file changed, 6 insertions(+), 1 deletion(-)

diff --git a/packages/eslint-config-airbnb-base/rules/style.js b/packages/eslint-config-airbnb-base/rules/style.js
index a661712984..5da9f34f79 100644
--- a/packages/eslint-config-airbnb-base/rules/style.js
+++ b/packages/eslint-config-airbnb-base/rules/style.js
@@ -135,7 +135,12 @@ module.exports = {
     'multiline-ternary': ['off', 'never'],
 
     // require a capital letter for constructors
-    'new-cap': ['error', { newIsCap: true }],
+    'new-cap': ['error', {
+      newIsCap: true,
+      newIsCapExceptions: [],
+      capIsNew: false,
+      capIsNewExceptions: ['Immutable.Map', 'Immutable.Set', 'Immutable.List'],
+    }],
 
     // disallow the omission of parentheses when invoking a constructor with no arguments
     // http://eslint.org/docs/rules/new-parens

From 24223ee444409087f1105be0c80f759d0d75d06f Mon Sep 17 00:00:00 2001
From: Tim van der Horst <timgvdh@gmail.com>
Date: Tue, 27 Sep 2016 18:07:56 +1000
Subject: [PATCH 0851/1591] [eslint config] [patch] `class-methods-use-this`:
 exempt React `getChildContext`

Added `getChildContext` to the exceptions list for `class-methods-use-this`
---
 packages/eslint-config-airbnb/rules/react.js | 1 +
 1 file changed, 1 insertion(+)

diff --git a/packages/eslint-config-airbnb/rules/react.js b/packages/eslint-config-airbnb/rules/react.js
index 11f2825a5a..5f81e40c86 100644
--- a/packages/eslint-config-airbnb/rules/react.js
+++ b/packages/eslint-config-airbnb/rules/react.js
@@ -23,6 +23,7 @@ module.exports = {
         'render',
         'getInitialState',
         'getDefaultProps',
+        'getChildContext',
         'componentWillMount',
         'componentDidMount',
         'componentWillReceiveProps',

From 8468ed842314a5d66816927ba6c35f018035cffc Mon Sep 17 00:00:00 2001
From: jcreamer898 <matrixhasyou2k4@gmail.com>
Date: Tue, 27 Sep 2016 09:13:20 -0500
Subject: [PATCH 0852/1591] Lonely Planet

Add Lonely Planet to the "In the Wild" list.
---
 README.md | 1 +
 1 file changed, 1 insertion(+)

diff --git a/README.md b/README.md
index 705f44d582..f3b4559d3e 100644
--- a/README.md
+++ b/README.md
@@ -2966,6 +2966,7 @@ Other Style Guides
   - **JSSolutions**: [JSSolutions/javascript](https://github.com/JSSolutions/javascript)
   - **KickorStick**: [kickorstick/javascript](https://github.com/kickorstick/javascript)
   - **Kinetica Solutions**: [kinetica/javascript](https://github.com/kinetica/Javascript-style-guide)
+  - **Lonely Planet**: [lonelyplanet/javascript](https://github.com/lonelyplanet/javascript)
   - **M2GEN**: [M2GEN/javascript](https://github.com/M2GEN/javascript)
   - **Mighty Spring**: [mightyspring/javascript](https://github.com/mightyspring/javascript)
   - **MinnPost**: [MinnPost/javascript](https://github.com/MinnPost/javascript)

From e2de71efb79bed5acf6d7f33fbd3b857a0a4b42c Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Mon, 3 Oct 2016 16:15:31 -0700
Subject: [PATCH 0853/1591] [eslint config] [*] update `babel-preset-airbnb`,
 `eslint`, `eslint-find-rules`, `tape`

---
 packages/eslint-config-airbnb-base/package.json | 10 +++++-----
 packages/eslint-config-airbnb/package.json      | 10 +++++-----
 2 files changed, 10 insertions(+), 10 deletions(-)

diff --git a/packages/eslint-config-airbnb-base/package.json b/packages/eslint-config-airbnb-base/package.json
index adb4fd9981..e8fff45fb6 100644
--- a/packages/eslint-config-airbnb-base/package.json
+++ b/packages/eslint-config-airbnb-base/package.json
@@ -45,17 +45,17 @@
   },
   "homepage": "https://github.com/airbnb/javascript",
   "devDependencies": {
-    "babel-preset-airbnb": "^2.1.0",
+    "babel-preset-airbnb": "^2.1.1",
     "babel-tape-runner": "^2.0.1",
-    "eslint": "^3.6.0",
-    "eslint-find-rules": "^1.13.2",
+    "eslint": "^3.7.1",
+    "eslint-find-rules": "^1.14.0",
     "eslint-plugin-import": "^1.16.0",
     "in-publish": "^2.0.0",
     "safe-publish-latest": "^1.1.0",
-    "tape": "^4.6.0"
+    "tape": "^4.6.2"
   },
   "peerDependencies": {
-    "eslint": "^3.6.0",
+    "eslint": "^3.7.1",
     "eslint-plugin-import": "^1.16.0"
   },
   "engines": {
diff --git a/packages/eslint-config-airbnb/package.json b/packages/eslint-config-airbnb/package.json
index 04f566e532..df09c07df8 100644
--- a/packages/eslint-config-airbnb/package.json
+++ b/packages/eslint-config-airbnb/package.json
@@ -48,20 +48,20 @@
     "eslint-config-airbnb-base": "^8.0.0"
   },
   "devDependencies": {
-    "babel-preset-airbnb": "^2.1.0",
+    "babel-preset-airbnb": "^2.1.1",
     "babel-tape-runner": "^2.0.1",
-    "eslint": "^3.6.0",
-    "eslint-find-rules": "^1.13.2",
+    "eslint": "^3.7.1",
+    "eslint-find-rules": "^1.14.0",
     "eslint-plugin-import": "^1.16.0",
     "eslint-plugin-jsx-a11y": "^2.2.2",
     "eslint-plugin-react": "^6.3.0",
     "in-publish": "^2.0.0",
     "react": ">= 0.13.0",
     "safe-publish-latest": "^1.1.0",
-    "tape": "^4.6.0"
+    "tape": "^4.6.2"
   },
   "peerDependencies": {
-    "eslint": "^3.6.0",
+    "eslint": "^3.7.1",
     "eslint-plugin-jsx-a11y": "^2.2.2",
     "eslint-plugin-import": "^1.16.0",
     "eslint-plugin-react": "^6.3.0"

From 6ad315c090208aca03dfcd761c3b84663a5ac1e2 Mon Sep 17 00:00:00 2001
From: Karan Thakkar <karanjthakkar@gmail.com>
Date: Thu, 6 Oct 2016 14:54:53 +0530
Subject: [PATCH 0854/1591] Add section on multi-line imports. Fixes #1051

---
 README.md | 19 +++++++++++++++++++
 1 file changed, 19 insertions(+)

diff --git a/README.md b/README.md
index f3b4559d3e..5bb6080d6a 100644
--- a/README.md
+++ b/README.md
@@ -1223,6 +1223,25 @@ Other Style Guides
     foo.init();
     ```
 
+  <a name="modules--multiline-imports-over-newlines"></a><a name="10.8"></a>
+  - [10.8](#modules--multiline-imports-over-newlines) Multi-line imports should be preferred over single line
+
+    > Why? The curly braces follow the same indentation rules as every other curly brace block in the style guide, as do the trailing commas.
+
+    ```javascript
+    // bad
+    import {longNameA, longNameB, longNameC, longNameD, longNameE} from 'path';
+
+    // good
+    import {
+      longNameA,
+      longNameB,
+      longNameC,
+      longNameD,
+      longNameE
+    } from 'path';
+    ```
+
 **[⬆ back to top](#table-of-contents)**
 
 ## Iterators and Generators

From 098894efee58242c066644919ac4f75ff2ac17db Mon Sep 17 00:00:00 2001
From: Karan Thakkar <karanjthakkar@gmail.com>
Date: Fri, 7 Oct 2016 12:16:21 +0530
Subject: [PATCH 0855/1591] Remove legacy anchor link. Add dangling comma

---
 README.md | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/README.md b/README.md
index 5bb6080d6a..0312fb1cd1 100644
--- a/README.md
+++ b/README.md
@@ -1223,7 +1223,7 @@ Other Style Guides
     foo.init();
     ```
 
-  <a name="modules--multiline-imports-over-newlines"></a><a name="10.8"></a>
+  <a name="modules--multiline-imports-over-newlines"></a>
   - [10.8](#modules--multiline-imports-over-newlines) Multi-line imports should be preferred over single line
 
     > Why? The curly braces follow the same indentation rules as every other curly brace block in the style guide, as do the trailing commas.
@@ -1238,7 +1238,7 @@ Other Style Guides
       longNameB,
       longNameC,
       longNameD,
-      longNameE
+      longNameE,
     } from 'path';
     ```
 

From b72bd520b63622477ce40c9b5a52c3514920ab81 Mon Sep 17 00:00:00 2001
From: Karan Thakkar <karanjthakkar@gmail.com>
Date: Fri, 7 Oct 2016 12:34:36 +0530
Subject: [PATCH 0856/1591] Fix rule description

---
 README.md | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/README.md b/README.md
index 0312fb1cd1..0cbf24c7a0 100644
--- a/README.md
+++ b/README.md
@@ -1224,7 +1224,7 @@ Other Style Guides
     ```
 
   <a name="modules--multiline-imports-over-newlines"></a>
-  - [10.8](#modules--multiline-imports-over-newlines) Multi-line imports should be preferred over single line
+  - [10.8](#modules--multiline-imports-over-newlines) Multiline imports should be indented just like multiline array and object literals.
 
     > Why? The curly braces follow the same indentation rules as every other curly brace block in the style guide, as do the trailing commas.
 

From d0d260095b593e7956010df869295387fb7a8111 Mon Sep 17 00:00:00 2001
From: "Randall Reed, Jr" <rareed@xogrp.com>
Date: Tue, 4 Oct 2016 13:56:38 -0400
Subject: [PATCH 0857/1591] Make section numbering consistent

* Renumber items where numbers were skipped
---
 README.md | 20 ++++++++++----------
 1 file changed, 10 insertions(+), 10 deletions(-)

diff --git a/README.md b/README.md
index 0cbf24c7a0..56580fee44 100644
--- a/README.md
+++ b/README.md
@@ -155,7 +155,7 @@ Other Style Guides
     ```
 
   <a name="es6-computed-properties"></a><a name="3.4"></a>
-  - [3.4](#es6-computed-properties) Use computed property names when creating objects with dynamic property names.
+  - [3.2](#es6-computed-properties) Use computed property names when creating objects with dynamic property names.
 
     > Why? They allow you to define all the properties of an object in one place.
 
@@ -181,7 +181,7 @@ Other Style Guides
     ```
 
   <a name="es6-object-shorthand"></a><a name="3.5"></a>
-  - [3.5](#es6-object-shorthand) Use object method shorthand. eslint: [`object-shorthand`](http://eslint.org/docs/rules/object-shorthand.html) jscs: [`requireEnhancedObjectLiterals`](http://jscs.info/rule/requireEnhancedObjectLiterals)
+  - [3.3](#es6-object-shorthand) Use object method shorthand. eslint: [`object-shorthand`](http://eslint.org/docs/rules/object-shorthand.html) jscs: [`requireEnhancedObjectLiterals`](http://jscs.info/rule/requireEnhancedObjectLiterals)
 
     ```javascript
     // bad
@@ -204,7 +204,7 @@ Other Style Guides
     ```
 
   <a name="es6-object-concise"></a><a name="3.6"></a>
-  - [3.6](#es6-object-concise) Use property value shorthand. eslint: [`object-shorthand`](http://eslint.org/docs/rules/object-shorthand.html) jscs: [`requireEnhancedObjectLiterals`](http://jscs.info/rule/requireEnhancedObjectLiterals)
+  - [3.4](#es6-object-concise) Use property value shorthand. eslint: [`object-shorthand`](http://eslint.org/docs/rules/object-shorthand.html) jscs: [`requireEnhancedObjectLiterals`](http://jscs.info/rule/requireEnhancedObjectLiterals)
 
     > Why? It is shorter to write and descriptive.
 
@@ -223,7 +223,7 @@ Other Style Guides
     ```
 
   <a name="objects--grouped-shorthand"></a><a name="3.7"></a>
-  - [3.7](#objects--grouped-shorthand) Group your shorthand properties at the beginning of your object declaration.
+  - [3.5](#objects--grouped-shorthand) Group your shorthand properties at the beginning of your object declaration.
 
     > Why? It's easier to tell which properties are using the shorthand.
 
@@ -253,7 +253,7 @@ Other Style Guides
     ```
 
   <a name="objects--quoted-props"></a><a name="3.8"></a>
-  - [3.8](#objects--quoted-props) Only quote properties that are invalid identifiers. eslint: [`quote-props`](http://eslint.org/docs/rules/quote-props.html) jscs: [`disallowQuotedKeysInObjects`](http://jscs.info/rule/disallowQuotedKeysInObjects)
+  - [3.6](#objects--quoted-props) Only quote properties that are invalid identifiers. eslint: [`quote-props`](http://eslint.org/docs/rules/quote-props.html) jscs: [`disallowQuotedKeysInObjects`](http://jscs.info/rule/disallowQuotedKeysInObjects)
 
   > Why? In general we consider it subjectively easier to read. It improves syntax highlighting, and is also more easily optimized by many JS engines.
 
@@ -274,7 +274,7 @@ Other Style Guides
   ```
 
   <a name="objects--prototype-builtins"></a>
-  - [3.9](#objects--prototype-builtins) Do not call `Object.prototype` methods directly, such as `hasOwnProperty`, `propertyIsEnumerable`, and `isPrototypeOf`.
+  - [3.7](#objects--prototype-builtins) Do not call `Object.prototype` methods directly, such as `hasOwnProperty`, `propertyIsEnumerable`, and `isPrototypeOf`.
 
   > Why? These methods may be shadowed by properties on the object in question - consider `{ hasOwnProperty: false }` - or, the object may be a null object (`Object.create(null)`).
 
@@ -294,7 +294,7 @@ Other Style Guides
   ```
 
   <a name="objects--rest-spread"></a>
-  - [3.10](#objects--rest-spread) Prefer the object spread operator over `Object.assign` to shallow-copy objects. Use the object rest operator to get a new object with certain properties omitted.
+  - [3.8](#objects--rest-spread) Prefer the object spread operator over `Object.assign` to shallow-copy objects. Use the object rest operator to get a new object with certain properties omitted.
 
   ```javascript
   // very bad
@@ -525,7 +525,7 @@ Other Style Guides
     ```
 
   <a name="es6-template-literals"></a><a name="6.4"></a>
-  - [6.4](#es6-template-literals) When programmatically building up strings, use template strings instead of concatenation. eslint: [`prefer-template`](http://eslint.org/docs/rules/prefer-template.html) [`template-curly-spacing`](http://eslint.org/docs/rules/template-curly-spacing) jscs: [`requireTemplateStrings`](http://jscs.info/rule/requireTemplateStrings)
+  - [6.3](#es6-template-literals) When programmatically building up strings, use template strings instead of concatenation. eslint: [`prefer-template`](http://eslint.org/docs/rules/prefer-template.html) [`template-curly-spacing`](http://eslint.org/docs/rules/template-curly-spacing) jscs: [`requireTemplateStrings`](http://jscs.info/rule/requireTemplateStrings)
 
     > Why? Template strings give you a readable, concise syntax with proper newlines and string interpolation features.
 
@@ -552,10 +552,10 @@ Other Style Guides
     ```
 
   <a name="strings--eval"></a><a name="6.5"></a>
-  - [6.5](#strings--eval) Never use `eval()` on a string, it opens too many vulnerabilities.
+  - [6.4](#strings--eval) Never use `eval()` on a string, it opens too many vulnerabilities.
 
   <a name="strings--escaping"></a>
-  - [6.6](#strings--escaping) Do not unnecessarily escape characters in strings. eslint: [`no-useless-escape`](http://eslint.org/docs/rules/no-useless-escape)
+  - [6.5](#strings--escaping) Do not unnecessarily escape characters in strings. eslint: [`no-useless-escape`](http://eslint.org/docs/rules/no-useless-escape)
 
     > Why? Backslashes harm readability, thus they should only be present when necessary.
 

From b7492ffe60483edd5f30819ceaa0f3f4b6e84886 Mon Sep 17 00:00:00 2001
From: "Randall Reed, Jr" <randallreedjr@gmail.com>
Date: Sat, 8 Oct 2016 16:41:45 -0400
Subject: [PATCH 0858/1591] Update comparison recommendation

* Use shortcuts for boolean comparisons
* Use explicit comparisons for strings and numbers
---
 README.md | 18 ++++++++++++++----
 1 file changed, 14 insertions(+), 4 deletions(-)

diff --git a/README.md b/README.md
index 56580fee44..60621cca7d 100644
--- a/README.md
+++ b/README.md
@@ -1652,28 +1652,38 @@ Other Style Guides
     ```
 
   <a name="comparison--shortcuts"></a><a name="15.3"></a>
-  - [15.3](#comparison--shortcuts) Use shortcuts.
+  - [15.3](#comparison--shortcuts) Use shortcuts for booleans, but explicit comparisons for strings and numbers.
 
     ```javascript
     // bad
-    if (name !== '') {
+    if (isValid === true) {
       // ...stuff...
     }
 
     // good
-    if (name) {
+    if (isValid) {
       // ...stuff...
     }
 
     // bad
-    if (collection.length > 0) {
+    if (name) {
       // ...stuff...
     }
 
     // good
+    if (name !== '') {
+      // ...stuff...
+    }
+
+    // bad
     if (collection.length) {
       // ...stuff...
     }
+
+    // good
+    if (collection.length > 0) {
+      // ...stuff...
+    }
     ```
 
   <a name="comparison--moreinfo"></a><a name="15.4"></a>

From 148329289344c965f306f1f38931e317328cec3a Mon Sep 17 00:00:00 2001
From: Chester How <chesterhow@gmail.com>
Date: Mon, 10 Oct 2016 11:21:18 +0800
Subject: [PATCH 0859/1591] Fix naming typo

---
 README.md | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/README.md b/README.md
index 60621cca7d..26fa46e035 100644
--- a/README.md
+++ b/README.md
@@ -1148,7 +1148,7 @@ Other Style Guides
     ```javascript
     // bad
     // filename es6.js
-    export { es6 as default } from './airbnbStyleGuide';
+    export { es6 as default } from './AirbnbStyleGuide';
 
     // good
     // filename es6.js

From 781f186f908d064d7fe66bbca0a80a7d3656278e Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Sun, 9 Oct 2016 20:33:06 -0700
Subject: [PATCH 0860/1591] [eslint config] [*] [deps] update
 `safe-publish-latest`, `eslint-plugin-jsx-a11y`, `eslint-plugin-react`

---
 packages/eslint-config-airbnb-base/package.json |  2 +-
 packages/eslint-config-airbnb/package.json      | 10 +++++-----
 2 files changed, 6 insertions(+), 6 deletions(-)

diff --git a/packages/eslint-config-airbnb-base/package.json b/packages/eslint-config-airbnb-base/package.json
index e8fff45fb6..d146054ed1 100644
--- a/packages/eslint-config-airbnb-base/package.json
+++ b/packages/eslint-config-airbnb-base/package.json
@@ -51,7 +51,7 @@
     "eslint-find-rules": "^1.14.0",
     "eslint-plugin-import": "^1.16.0",
     "in-publish": "^2.0.0",
-    "safe-publish-latest": "^1.1.0",
+    "safe-publish-latest": "^1.1.1",
     "tape": "^4.6.2"
   },
   "peerDependencies": {
diff --git a/packages/eslint-config-airbnb/package.json b/packages/eslint-config-airbnb/package.json
index df09c07df8..39478f88c4 100644
--- a/packages/eslint-config-airbnb/package.json
+++ b/packages/eslint-config-airbnb/package.json
@@ -53,18 +53,18 @@
     "eslint": "^3.7.1",
     "eslint-find-rules": "^1.14.0",
     "eslint-plugin-import": "^1.16.0",
-    "eslint-plugin-jsx-a11y": "^2.2.2",
-    "eslint-plugin-react": "^6.3.0",
+    "eslint-plugin-jsx-a11y": "^2.2.3",
+    "eslint-plugin-react": "^6.4.0",
     "in-publish": "^2.0.0",
     "react": ">= 0.13.0",
-    "safe-publish-latest": "^1.1.0",
+    "safe-publish-latest": "^1.1.1",
     "tape": "^4.6.2"
   },
   "peerDependencies": {
     "eslint": "^3.7.1",
-    "eslint-plugin-jsx-a11y": "^2.2.2",
+    "eslint-plugin-jsx-a11y": "^2.2.3",
     "eslint-plugin-import": "^1.16.0",
-    "eslint-plugin-react": "^6.3.0"
+    "eslint-plugin-react": "^6.4.0"
   },
   "engines": {
     "node": ">= 4"

From 357cc46da083518498e329584795dccc0f575253 Mon Sep 17 00:00:00 2001
From: Miles Burton <milesburton@users.noreply.github.com>
Date: Tue, 11 Oct 2016 08:44:43 +0100
Subject: [PATCH 0861/1591] Update README.md

Minor oversight generating map object. Need square brackets to generate dynamic key.
---
 README.md | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/README.md b/README.md
index 26fa46e035..c7c39d9ab4 100644
--- a/README.md
+++ b/README.md
@@ -858,7 +858,7 @@ Other Style Guides
 
     // good
     [1, 2, 3].map((number, index) => ({
-      index: number
+      [index]: number
     }));
     ```
 

From b599b7c2d56e2bc4ca264729b0b177e21a4c3139 Mon Sep 17 00:00:00 2001
From: Simen Bekkhus <sbekkhus91@gmail.com>
Date: Sun, 2 Oct 2016 08:43:05 +0200
Subject: [PATCH 0862/1591] Upgrade to import plugin v2

---
 .../eslint-config-airbnb-base/package.json    |  4 ++--
 .../rules/imports.js                          | 22 +++++++++++++++++--
 2 files changed, 22 insertions(+), 4 deletions(-)

diff --git a/packages/eslint-config-airbnb-base/package.json b/packages/eslint-config-airbnb-base/package.json
index d146054ed1..44d49524ba 100644
--- a/packages/eslint-config-airbnb-base/package.json
+++ b/packages/eslint-config-airbnb-base/package.json
@@ -49,14 +49,14 @@
     "babel-tape-runner": "^2.0.1",
     "eslint": "^3.7.1",
     "eslint-find-rules": "^1.14.0",
-    "eslint-plugin-import": "^1.16.0",
+    "eslint-plugin-import": "^2.0.1",
     "in-publish": "^2.0.0",
     "safe-publish-latest": "^1.1.1",
     "tape": "^4.6.2"
   },
   "peerDependencies": {
     "eslint": "^3.7.1",
-    "eslint-plugin-import": "^1.16.0"
+    "eslint-plugin-import": "^2.0.1"
   },
   "engines": {
     "node": ">= 4"
diff --git a/packages/eslint-config-airbnb-base/rules/imports.js b/packages/eslint-config-airbnb-base/rules/imports.js
index c4b350fc66..5306e3cd4c 100644
--- a/packages/eslint-config-airbnb-base/rules/imports.js
+++ b/packages/eslint-config-airbnb-base/rules/imports.js
@@ -33,7 +33,7 @@ module.exports = {
 
     // ensure imports point to files/modules that can be resolved
     // https://github.com/benmosher/eslint-plugin-import/blob/master/docs/rules/no-unresolved.md
-    'import/no-unresolved': ['error', { commonjs: true }],
+    'import/no-unresolved': ['error', { commonjs: true, caseSensitive: true }],
 
     // ensure named imports coupled with named exports
     // https://github.com/benmosher/eslint-plugin-import/blob/master/docs/rules/named.md#when-not-to-use-it
@@ -92,9 +92,14 @@ module.exports = {
 
     // Style guide:
 
+    // disallow non-import statements appearing before import statements
+    // https://github.com/benmosher/eslint-plugin-import/blob/master/docs/rules/first.md
+    'import/first': ['error', 'absolute-first'],
+
     // disallow non-import statements appearing before import statements
     // https://github.com/benmosher/eslint-plugin-import/blob/master/docs/rules/imports-first.md
-    'import/imports-first': ['error', 'absolute-first'],
+    // deprecated: use `import/first`
+    'import/imports-first': 'off',
 
     // disallow duplicate imports
     // https://github.com/benmosher/eslint-plugin-import/blob/master/docs/rules/no-duplicates.md
@@ -149,5 +154,18 @@ module.exports = {
     'import/no-internal-modules': ['off', {
       allow: [],
     }],
+
+    // Warn if a module could be mistakenly parsed as a script by a consumer leveraging Unambiguous
+    // JavaScript Grammar
+    // https://github.com/benmosher/eslint-plugin-import/blob/master/docs/rules/unambiguous.md
+    'import/unambiguous': 'off',
+
+    // Forbid Webpack loader syntax in imports
+    // https://github.com/benmosher/eslint-plugin-import/blob/master/docs/rules/no-webpack-loader-syntax.md
+    'import/no-webpack-loader-syntax': 'off',
+
+    // Prevent unassigned imports
+    // https://github.com/benmosher/eslint-plugin-import/blob/master/docs/rules/no-unassigned-import.md
+    'import/no-unassigned-import': 'off',
   },
 };

From eb9927fb58e89ae87a8e03a5c834f50f9ab1e1b7 Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Wed, 12 Oct 2016 23:50:56 -0700
Subject: [PATCH 0863/1591] [eslint config] [deps] update `eslint-plugin-react`

---
 packages/eslint-config-airbnb/package.json | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/packages/eslint-config-airbnb/package.json b/packages/eslint-config-airbnb/package.json
index 39478f88c4..2c7a9df7f1 100644
--- a/packages/eslint-config-airbnb/package.json
+++ b/packages/eslint-config-airbnb/package.json
@@ -54,7 +54,7 @@
     "eslint-find-rules": "^1.14.0",
     "eslint-plugin-import": "^1.16.0",
     "eslint-plugin-jsx-a11y": "^2.2.3",
-    "eslint-plugin-react": "^6.4.0",
+    "eslint-plugin-react": "^6.4.1",
     "in-publish": "^2.0.0",
     "react": ">= 0.13.0",
     "safe-publish-latest": "^1.1.1",
@@ -64,7 +64,7 @@
     "eslint": "^3.7.1",
     "eslint-plugin-jsx-a11y": "^2.2.3",
     "eslint-plugin-import": "^1.16.0",
-    "eslint-plugin-react": "^6.4.0"
+    "eslint-plugin-react": "^6.4.1"
   },
   "engines": {
     "node": ">= 4"

From b59bfffac3812aef551a29720302a1ba977b3149 Mon Sep 17 00:00:00 2001
From: Simen Bekkhus <sbekkhus91@gmail.com>
Date: Thu, 13 Oct 2016 09:00:23 +0200
Subject: [PATCH 0864/1591] Enable `import/no-webpack-loader-syntax` rule

---
 README.md                                         | 15 +++++++++++++++
 .../eslint-config-airbnb-base/rules/imports.js    |  2 +-
 2 files changed, 16 insertions(+), 1 deletion(-)

diff --git a/README.md b/README.md
index c7c39d9ab4..c7f1c98d0f 100644
--- a/README.md
+++ b/README.md
@@ -1242,6 +1242,21 @@ Other Style Guides
     } from 'path';
     ```
 
+  <a name="modules--no-webpack-loader-syntax"></a>
+  - [10.9](#modules--no-webpack-loader-syntax) Disallow Webpack loader syntax in module import statements.
+ eslint: [`import/no-webpack-loader-syntax`](https://github.com/benmosher/eslint-plugin-import/blob/master/docs/rules/no-webpack-loader-syntax.md)
+    > Why? Since using Webpack syntax in the imports couples the code to a module bundler. Prefer using the loader syntax in `webpack.config.js`.
+
+    ```javascript
+    // bad
+    import fooSass from 'css!sass!foo.scss';
+    import barCss from 'style!css!bar.css';
+
+    // good
+    import fooSass from 'foo.scss';
+    import barCss from 'bar.css';
+    ```
+
 **[⬆ back to top](#table-of-contents)**
 
 ## Iterators and Generators
diff --git a/packages/eslint-config-airbnb-base/rules/imports.js b/packages/eslint-config-airbnb-base/rules/imports.js
index 5306e3cd4c..a02ef93030 100644
--- a/packages/eslint-config-airbnb-base/rules/imports.js
+++ b/packages/eslint-config-airbnb-base/rules/imports.js
@@ -162,7 +162,7 @@ module.exports = {
 
     // Forbid Webpack loader syntax in imports
     // https://github.com/benmosher/eslint-plugin-import/blob/master/docs/rules/no-webpack-loader-syntax.md
-    'import/no-webpack-loader-syntax': 'off',
+    'import/no-webpack-loader-syntax': 'error',
 
     // Prevent unassigned imports
     // https://github.com/benmosher/eslint-plugin-import/blob/master/docs/rules/no-unassigned-import.md

From 8d0fda975c1b52dd6696d8f70219a00f9703871d Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Thu, 13 Oct 2016 00:33:29 -0700
Subject: [PATCH 0865/1591] [eslint config] [base] Add comments on new import
 rules.

---
 packages/eslint-config-airbnb-base/rules/imports.js | 7 +++++--
 1 file changed, 5 insertions(+), 2 deletions(-)

diff --git a/packages/eslint-config-airbnb-base/rules/imports.js b/packages/eslint-config-airbnb-base/rules/imports.js
index a02ef93030..a8f4269cbd 100644
--- a/packages/eslint-config-airbnb-base/rules/imports.js
+++ b/packages/eslint-config-airbnb-base/rules/imports.js
@@ -155,9 +155,11 @@ module.exports = {
       allow: [],
     }],
 
-    // Warn if a module could be mistakenly parsed as a script by a consumer leveraging Unambiguous
-    // JavaScript Grammar
+    // Warn if a module could be mistakenly parsed as a script by a consumer
+    // leveraging Unambiguous JavaScript Grammar
     // https://github.com/benmosher/eslint-plugin-import/blob/master/docs/rules/unambiguous.md
+    // this should not be enabled until this proposal has at least been *presented* to TC39.
+    // At the moment, it's not a thing.
     'import/unambiguous': 'off',
 
     // Forbid Webpack loader syntax in imports
@@ -166,6 +168,7 @@ module.exports = {
 
     // Prevent unassigned imports
     // https://github.com/benmosher/eslint-plugin-import/blob/master/docs/rules/no-unassigned-import.md
+    // importing for side effects is perfectly acceptable, if you need side effects.
     'import/no-unassigned-import': 'off',
   },
 };

From baa831b4a997ca6318ec311f8ef4576f9a9d7991 Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Thu, 13 Oct 2016 10:26:31 -0700
Subject: [PATCH 0866/1591] [eslint config] [*] [docs] ensure latest version of
 config is installed

Fixes #1121.
---
 packages/eslint-config-airbnb-base/README.md | 2 +-
 packages/eslint-config-airbnb/README.md      | 2 +-
 2 files changed, 2 insertions(+), 2 deletions(-)

diff --git a/packages/eslint-config-airbnb-base/README.md b/packages/eslint-config-airbnb-base/README.md
index dabe3a6345..d293a8ad90 100644
--- a/packages/eslint-config-airbnb-base/README.md
+++ b/packages/eslint-config-airbnb-base/README.md
@@ -16,7 +16,7 @@ Our default export contains all of our ESLint rules, including ECMAScript 6+. It
   ```sh
   (
     export PKG=eslint-config-airbnb-base;
-    npm info "$PKG" peerDependencies --json | command sed 's/[\{\},]//g ; s/: /@/g' | xargs npm install --save-dev "$PKG"
+    npm info "$PKG@latest" peerDependencies --json | command sed 's/[\{\},]//g ; s/: /@/g' | xargs npm install --save-dev "$PKG@latest"
   )
   ```
 
diff --git a/packages/eslint-config-airbnb/README.md b/packages/eslint-config-airbnb/README.md
index d13133e14e..5014173d27 100644
--- a/packages/eslint-config-airbnb/README.md
+++ b/packages/eslint-config-airbnb/README.md
@@ -16,7 +16,7 @@ Our default export contains all of our ESLint rules, including ECMAScript 6+ and
   ```sh
   (
     export PKG=eslint-config-airbnb;
-    npm info "$PKG" peerDependencies --json | command sed 's/[\{\},]//g ; s/: /@/g' | xargs npm install --save-dev "$PKG"
+    npm info "$PKG@latest" peerDependencies --json | command sed 's/[\{\},]//g ; s/: /@/g' | xargs npm install --save-dev "$PKG@latest"
   )
   ```
 

From a75efdfdb0484f3e09112c2d5c381d0513f06040 Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Fri, 14 Oct 2016 22:37:14 -0700
Subject: [PATCH 0867/1591] [guide] improve ++/-- example.

Fixes #1130.
---
 README.md | 20 ++++++++++++--------
 1 file changed, 12 insertions(+), 8 deletions(-)

diff --git a/README.md b/README.md
index c7f1c98d0f..6396a48847 100644
--- a/README.md
+++ b/README.md
@@ -1521,24 +1521,28 @@ Other Style Guides
 
       let array = [1, 2, 3];
       let num = 1;
-      let increment = num ++;
-      let decrement = -- num;
+      num ++;
+      -- num;
 
+      let sum = 0;
+      let truthyCount = 0;
       for(let i = 0; i < array.length; i++){
         let value = array[i];
-        ++value;
+        sum += value;
+        if (value) {
+          truthyCount++;
+        }
       }
 
       // good
 
       let array = [1, 2, 3];
       let num = 1;
-      let increment = num += 1;
-      let decrement = num -= 1;
+      num += 1;
+      num -= 1;
 
-      array.forEach((value) => {
-        value += 1;
-      });
+      const sum = array.reduce((a, b) => a + b, 0);
+      const truthyCount = array.filter(Boolean).length;
     ```
 
 **[⬆ back to top](#table-of-contents)**

From 978c0eecc236860a23ee91e0ab3f415f45acef28 Mon Sep 17 00:00:00 2001
From: Mikael Finstad <finstaden@gmail.com>
Date: Sun, 16 Oct 2016 16:59:23 +0200
Subject: [PATCH 0868/1591] Use import instead of require

Don't recommend the use of require
(See 10.1)
---
 README.md | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/README.md b/README.md
index 6396a48847..ad08a61bb4 100644
--- a/README.md
+++ b/README.md
@@ -288,7 +288,7 @@ Other Style Guides
   // best
   const has = Object.prototype.hasOwnProperty; // cache the lookup once, in module scope.
   /* or */
-  const has = require('has');
+  import has from 'has';
   …
   console.log(has.call(object, key));
   ```

From 9c5afe58090ba014434fe3130e7c3e551b31359a Mon Sep 17 00:00:00 2001
From: Simen Bekkhus <sbekkhus91@gmail.com>
Date: Sun, 16 Oct 2016 10:02:54 +0200
Subject: [PATCH 0869/1591] Update eslint to 3.8.0

New rule called `func-name-matching` added
---
 packages/eslint-config-airbnb-base/package.json      |  4 ++--
 .../rules/best-practices.js                          |  2 +-
 packages/eslint-config-airbnb-base/rules/style.js    | 12 +++++++++++-
 packages/eslint-config-airbnb/package.json           |  4 ++--
 4 files changed, 16 insertions(+), 6 deletions(-)

diff --git a/packages/eslint-config-airbnb-base/package.json b/packages/eslint-config-airbnb-base/package.json
index 44d49524ba..b971eb2b4a 100644
--- a/packages/eslint-config-airbnb-base/package.json
+++ b/packages/eslint-config-airbnb-base/package.json
@@ -47,7 +47,7 @@
   "devDependencies": {
     "babel-preset-airbnb": "^2.1.1",
     "babel-tape-runner": "^2.0.1",
-    "eslint": "^3.7.1",
+    "eslint": "^3.8.0",
     "eslint-find-rules": "^1.14.0",
     "eslint-plugin-import": "^2.0.1",
     "in-publish": "^2.0.0",
@@ -55,7 +55,7 @@
     "tape": "^4.6.2"
   },
   "peerDependencies": {
-    "eslint": "^3.7.1",
+    "eslint": "^3.8.0",
     "eslint-plugin-import": "^2.0.1"
   },
   "engines": {
diff --git a/packages/eslint-config-airbnb-base/rules/best-practices.js b/packages/eslint-config-airbnb-base/rules/best-practices.js
index fa97fb68e3..31d06c60e0 100644
--- a/packages/eslint-config-airbnb-base/rules/best-practices.js
+++ b/packages/eslint-config-airbnb-base/rules/best-practices.js
@@ -250,7 +250,7 @@ module.exports = {
 
     // require immediate function invocation to be wrapped in parentheses
     // http://eslint.org/docs/rules/wrap-iife.html
-    'wrap-iife': ['error', 'outside'],
+    'wrap-iife': ['error', 'outside', { functionPrototypeMethods: false }],
 
     // require or disallow Yoda conditions
     yoda: 'error'
diff --git a/packages/eslint-config-airbnb-base/rules/style.js b/packages/eslint-config-airbnb-base/rules/style.js
index 5da9f34f79..5d13066512 100644
--- a/packages/eslint-config-airbnb-base/rules/style.js
+++ b/packages/eslint-config-airbnb-base/rules/style.js
@@ -32,7 +32,13 @@ module.exports = {
     // http://eslint.org/docs/rules/func-call-spacing
     'func-call-spacing': ['error', 'never'],
 
+    // requires function names to match the name of the variable or property to which they are
+    // assigned
+    // http://eslint.org/docs/rules/func-name-matching
+    'func-name-matching': ['off', { includeCommonJSModuleExports: false }],
+
     // require function expressions to have a name
+    // http://eslint.org/docs/rules/func-names
     'func-names': 'warn',
 
     // enforces use of function declarations or expressions
@@ -303,7 +309,11 @@ module.exports = {
 
     // require or disallow space before function opening parenthesis
     // http://eslint.org/docs/rules/space-before-function-paren
-    'space-before-function-paren': ['error', { anonymous: 'always', named: 'never' }],
+    'space-before-function-paren': ['error', {
+      anonymous: 'always',
+      named: 'never',
+      asyncArrow: 'always'
+    }],
 
     // require or disallow spaces inside parentheses
     'space-in-parens': ['error', 'never'],
diff --git a/packages/eslint-config-airbnb/package.json b/packages/eslint-config-airbnb/package.json
index 2c7a9df7f1..9cd7dec0ab 100644
--- a/packages/eslint-config-airbnb/package.json
+++ b/packages/eslint-config-airbnb/package.json
@@ -50,7 +50,7 @@
   "devDependencies": {
     "babel-preset-airbnb": "^2.1.1",
     "babel-tape-runner": "^2.0.1",
-    "eslint": "^3.7.1",
+    "eslint": "^3.8.0",
     "eslint-find-rules": "^1.14.0",
     "eslint-plugin-import": "^1.16.0",
     "eslint-plugin-jsx-a11y": "^2.2.3",
@@ -61,7 +61,7 @@
     "tape": "^4.6.2"
   },
   "peerDependencies": {
-    "eslint": "^3.7.1",
+    "eslint": "^3.8.0",
     "eslint-plugin-jsx-a11y": "^2.2.3",
     "eslint-plugin-import": "^1.16.0",
     "eslint-plugin-react": "^6.4.1"

From a1ca49b34c4e83ac70a583c1f64143f520d771f6 Mon Sep 17 00:00:00 2001
From: Simen Bekkhus <sbekkhus91@gmail.com>
Date: Mon, 17 Oct 2016 08:04:38 +0200
Subject: [PATCH 0870/1591] Add `ForOfStatement` to `no-restricted-syntax`

Fixes #1122
---
 packages/eslint-config-airbnb-base/rules/style.js | 1 +
 1 file changed, 1 insertion(+)

diff --git a/packages/eslint-config-airbnb-base/rules/style.js b/packages/eslint-config-airbnb-base/rules/style.js
index 5d13066512..53c76aef71 100644
--- a/packages/eslint-config-airbnb-base/rules/style.js
+++ b/packages/eslint-config-airbnb-base/rules/style.js
@@ -219,6 +219,7 @@ module.exports = {
     'no-restricted-syntax': [
       'error',
       'ForInStatement',
+      'ForOfStatement',
       'LabeledStatement',
       'WithStatement',
     ],

From d7d50bcbd0780803f00290729123a51788eb1f14 Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Sun, 16 Oct 2016 23:16:28 -0700
Subject: [PATCH 0871/1591] [eslint config] [base] v9.0.0

---
 packages/eslint-config-airbnb-base/CHANGELOG.md | 10 ++++++++++
 packages/eslint-config-airbnb-base/package.json |  2 +-
 2 files changed, 11 insertions(+), 1 deletion(-)

diff --git a/packages/eslint-config-airbnb-base/CHANGELOG.md b/packages/eslint-config-airbnb-base/CHANGELOG.md
index 7919002249..17f218bd65 100644
--- a/packages/eslint-config-airbnb-base/CHANGELOG.md
+++ b/packages/eslint-config-airbnb-base/CHANGELOG.md
@@ -1,3 +1,13 @@
+9.0.0 / 2016-10-16
+==================
+ - [breaking] Add `ForOfStatement` to `no-restricted-syntax` (#1122, #1134)
+ - [breaking] enable `import/no-webpack-loader-syntax` (#1123)
+ - [breaking] [deps] update `eslint` to `v3.8.0` (#1132)
+ - [breaking] [deps] update `eslint-plugin-import` to v2 (#1101)
+ - [patch] `new-cap`: add immutable.js exceptions
+ - [docs] ensure latest version of config is installed
+ - [dev deps] update `babel-preset-airbnb`, `eslint`, `eslint-find-rules`, `tape`, `safe-publish-latest`
+
 8.0.0 / 2016-09-24
 ==================
  - [breaking] enable rules: `no-restricted-properties`, `prefer-numeric-literals`, `lines-around-directive`, `import/extensions`, `import/no-absolute-path`, `import/no-dynamic-require`
diff --git a/packages/eslint-config-airbnb-base/package.json b/packages/eslint-config-airbnb-base/package.json
index b971eb2b4a..6acd4435a9 100644
--- a/packages/eslint-config-airbnb-base/package.json
+++ b/packages/eslint-config-airbnb-base/package.json
@@ -1,6 +1,6 @@
 {
   "name": "eslint-config-airbnb-base",
-  "version": "8.0.0",
+  "version": "9.0.0",
   "description": "Airbnb's base JS ESLint config, following our styleguide",
   "main": "index.js",
   "scripts": {

From 0bb3eb541203aee1b134bef06940557cf7a30007 Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Sun, 16 Oct 2016 23:20:02 -0700
Subject: [PATCH 0872/1591] [eslint config] [deps] [breaking] update
 `eslint-config-airbnb-base`, `eslint-plugin-import`

---
 packages/eslint-config-airbnb/package.json | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/packages/eslint-config-airbnb/package.json b/packages/eslint-config-airbnb/package.json
index 9cd7dec0ab..678a82b2a1 100644
--- a/packages/eslint-config-airbnb/package.json
+++ b/packages/eslint-config-airbnb/package.json
@@ -45,14 +45,14 @@
   },
   "homepage": "https://github.com/airbnb/javascript",
   "dependencies": {
-    "eslint-config-airbnb-base": "^8.0.0"
+    "eslint-config-airbnb-base": "^9.0.0"
   },
   "devDependencies": {
     "babel-preset-airbnb": "^2.1.1",
     "babel-tape-runner": "^2.0.1",
     "eslint": "^3.8.0",
     "eslint-find-rules": "^1.14.0",
-    "eslint-plugin-import": "^1.16.0",
+    "eslint-plugin-import": "^2.0.1",
     "eslint-plugin-jsx-a11y": "^2.2.3",
     "eslint-plugin-react": "^6.4.1",
     "in-publish": "^2.0.0",
@@ -63,7 +63,7 @@
   "peerDependencies": {
     "eslint": "^3.8.0",
     "eslint-plugin-jsx-a11y": "^2.2.3",
-    "eslint-plugin-import": "^1.16.0",
+    "eslint-plugin-import": "^2.0.1",
     "eslint-plugin-react": "^6.4.1"
   },
   "engines": {

From a06831d52c412147bd1bd590095482df49bcbea9 Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Sat, 22 Oct 2016 01:03:16 -0700
Subject: [PATCH 0873/1591] =?UTF-8?q?[eslint=20config]=20[patch]=20set=20`?=
 =?UTF-8?q?react/no-unused-prop-types`=20to=20=E2=80=9Cwarn=E2=80=9D,=20pe?=
 =?UTF-8?q?nding=20bugfixes.?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

Closes #1099.
---
 packages/eslint-config-airbnb/rules/react.js | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/packages/eslint-config-airbnb/rules/react.js b/packages/eslint-config-airbnb/rules/react.js
index 5f81e40c86..38b7dc25df 100644
--- a/packages/eslint-config-airbnb/rules/react.js
+++ b/packages/eslint-config-airbnb/rules/react.js
@@ -271,10 +271,10 @@ module.exports = {
 
     // Prevent unused propType definitions
     // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/no-unused-prop-types.md
-    'react/no-unused-prop-types': ['error', {
+    'react/no-unused-prop-types': ['warn', {
       customValidators: [
       ],
-      skipShapeProps: false,
+      skipShapeProps: true,
     }],
 
     // Require style prop value be an object or var

From 70428bdc37723167bb09792fcf013d63e2aecf37 Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Sat, 22 Oct 2016 01:04:16 -0700
Subject: [PATCH 0874/1591] [eslint config] [*] [deps] update `eslint`

---
 packages/eslint-config-airbnb-base/package.json | 4 ++--
 packages/eslint-config-airbnb/package.json      | 4 ++--
 2 files changed, 4 insertions(+), 4 deletions(-)

diff --git a/packages/eslint-config-airbnb-base/package.json b/packages/eslint-config-airbnb-base/package.json
index 6acd4435a9..71069c6c1f 100644
--- a/packages/eslint-config-airbnb-base/package.json
+++ b/packages/eslint-config-airbnb-base/package.json
@@ -47,7 +47,7 @@
   "devDependencies": {
     "babel-preset-airbnb": "^2.1.1",
     "babel-tape-runner": "^2.0.1",
-    "eslint": "^3.8.0",
+    "eslint": "^3.8.1",
     "eslint-find-rules": "^1.14.0",
     "eslint-plugin-import": "^2.0.1",
     "in-publish": "^2.0.0",
@@ -55,7 +55,7 @@
     "tape": "^4.6.2"
   },
   "peerDependencies": {
-    "eslint": "^3.8.0",
+    "eslint": "^3.8.1",
     "eslint-plugin-import": "^2.0.1"
   },
   "engines": {
diff --git a/packages/eslint-config-airbnb/package.json b/packages/eslint-config-airbnb/package.json
index 678a82b2a1..fa987a56f0 100644
--- a/packages/eslint-config-airbnb/package.json
+++ b/packages/eslint-config-airbnb/package.json
@@ -50,7 +50,7 @@
   "devDependencies": {
     "babel-preset-airbnb": "^2.1.1",
     "babel-tape-runner": "^2.0.1",
-    "eslint": "^3.8.0",
+    "eslint": "^3.8.1",
     "eslint-find-rules": "^1.14.0",
     "eslint-plugin-import": "^2.0.1",
     "eslint-plugin-jsx-a11y": "^2.2.3",
@@ -61,7 +61,7 @@
     "tape": "^4.6.2"
   },
   "peerDependencies": {
-    "eslint": "^3.8.0",
+    "eslint": "^3.8.1",
     "eslint-plugin-jsx-a11y": "^2.2.3",
     "eslint-plugin-import": "^2.0.1",
     "eslint-plugin-react": "^6.4.1"

From 0e2b74a263594d258337a424bddb49f60ec0c368 Mon Sep 17 00:00:00 2001
From: SpenUK <spen_@hotmail.co.uk>
Date: Wed, 26 Oct 2016 15:50:49 +1100
Subject: [PATCH 0875/1591] Add links to mentioned github issues

---
 react/README.md | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/react/README.md b/react/README.md
index 9d4d9da3e3..5ba21051f9 100644
--- a/react/README.md
+++ b/react/README.md
@@ -463,7 +463,7 @@
     ```
 
   - Do not use underscore prefix for internal methods of a React component.
-  > Why? Underscore prefixes are sometimes used as a convention in other languages to denote privacy. But, unlike those languages, there is no native support for privacy in JavaScript, everything is public. Regardless of your intentions, adding underscore prefixes to your properties does not actually make them private, and any property (underscore-prefixed or not) should be treated as being public. See issues #1024, and #490 for a more in-depth discussion.
+  > Why? Underscore prefixes are sometimes used as a convention in other languages to denote privacy. But, unlike those languages, there is no native support for privacy in JavaScript, everything is public. Regardless of your intentions, adding underscore prefixes to your properties does not actually make them private, and any property (underscore-prefixed or not) should be treated as being public. See issues [#1024](https://github.com/airbnb/javascript/issues/1024), and [#490](https://github.com/airbnb/javascript/issues/490) for a more in-depth discussion.
 
     ```jsx
     // bad

From adc782343eb862f313ef40849e11c7385a31da22 Mon Sep 17 00:00:00 2001
From: Pete Pirasis <1pete@users.noreply.github.com>
Date: Thu, 27 Oct 2016 01:58:42 +0700
Subject: [PATCH 0876/1591] [react] add rule references in section *Spacing*

---
 react/README.md | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/react/README.md b/react/README.md
index 5ba21051f9..7d8a32ebf1 100644
--- a/react/README.md
+++ b/react/README.md
@@ -206,7 +206,7 @@
 
 ## Spacing
 
-  - Always include a single space in your self-closing tag.
+  - Always include a single space in your self-closing tag. eslint: [`no-multi-spaces`](http://eslint.org/docs/rules/no-multi-spaces), [`react/jsx-space-before-closing`](https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/jsx-space-before-closing.md)
 
     ```jsx
     // bad

From 05d06346270fae870537a10960166f60ea8a3bf8 Mon Sep 17 00:00:00 2001
From: Pete Pirasis <1pete@users.noreply.github.com>
Date: Thu, 27 Oct 2016 03:31:58 +0700
Subject: [PATCH 0877/1591] Add reference for `Object.assign`

---
 README.md | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/README.md b/README.md
index ad08a61bb4..a81d3a0380 100644
--- a/README.md
+++ b/README.md
@@ -294,7 +294,7 @@ Other Style Guides
   ```
 
   <a name="objects--rest-spread"></a>
-  - [3.8](#objects--rest-spread) Prefer the object spread operator over `Object.assign` to shallow-copy objects. Use the object rest operator to get a new object with certain properties omitted.
+  - [3.8](#objects--rest-spread) Prefer the object spread operator over [`Object.assign`](https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Object/assign) to shallow-copy objects. Use the object rest operator to get a new object with certain properties omitted.
 
   ```javascript
   // very bad

From a23a3efba9d1661e52cfa6894d620cee965ac090 Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Mon, 31 Oct 2016 01:36:15 -0700
Subject: [PATCH 0878/1591] [eslint config] [base] [deps] [breaking] update
 `eslint`

 - enable `no-useless-return`
 - tighten up `indent`
 - loosen `max-len` with `ignoreRegExpLiterals` option
---
 .../eslint-config-airbnb-base/package.json    |  4 ++--
 .../rules/best-practices.js                   |  4 ++++
 .../eslint-config-airbnb-base/rules/style.js  | 24 +++++++++++++++++--
 3 files changed, 28 insertions(+), 4 deletions(-)

diff --git a/packages/eslint-config-airbnb-base/package.json b/packages/eslint-config-airbnb-base/package.json
index 71069c6c1f..f993986d99 100644
--- a/packages/eslint-config-airbnb-base/package.json
+++ b/packages/eslint-config-airbnb-base/package.json
@@ -47,7 +47,7 @@
   "devDependencies": {
     "babel-preset-airbnb": "^2.1.1",
     "babel-tape-runner": "^2.0.1",
-    "eslint": "^3.8.1",
+    "eslint": "^3.9.0",
     "eslint-find-rules": "^1.14.0",
     "eslint-plugin-import": "^2.0.1",
     "in-publish": "^2.0.0",
@@ -55,7 +55,7 @@
     "tape": "^4.6.2"
   },
   "peerDependencies": {
-    "eslint": "^3.8.1",
+    "eslint": "^3.9.0",
     "eslint-plugin-import": "^2.0.1"
   },
   "engines": {
diff --git a/packages/eslint-config-airbnb-base/rules/best-practices.js b/packages/eslint-config-airbnb-base/rules/best-practices.js
index 31d06c60e0..e2dd67dd57 100644
--- a/packages/eslint-config-airbnb-base/rules/best-practices.js
+++ b/packages/eslint-config-airbnb-base/rules/best-practices.js
@@ -232,6 +232,10 @@ module.exports = {
     // http://eslint.org/docs/rules/no-useless-escape
     'no-useless-escape': 'error',
 
+    // disallow redundant return; keywords
+    // http://eslint.org/docs/rules/no-useless-return
+    'no-useless-return': 'error',
+
     // disallow use of void operator
     // http://eslint.org/docs/rules/no-void
     'no-void': 'error',
diff --git a/packages/eslint-config-airbnb-base/rules/style.js b/packages/eslint-config-airbnb-base/rules/style.js
index 53c76aef71..f201d1ca8b 100644
--- a/packages/eslint-config-airbnb-base/rules/style.js
+++ b/packages/eslint-config-airbnb-base/rules/style.js
@@ -35,7 +35,10 @@ module.exports = {
     // requires function names to match the name of the variable or property to which they are
     // assigned
     // http://eslint.org/docs/rules/func-name-matching
-    'func-name-matching': ['off', { includeCommonJSModuleExports: false }],
+    'func-name-matching': ['off', {
+       includeCommonJSModuleExports: false,
+       nameMatches: 'always'
+     }],
 
     // require function expressions to have a name
     // http://eslint.org/docs/rules/func-names
@@ -59,7 +62,23 @@ module.exports = {
 
     // this option sets a specific tab width for your code
     // http://eslint.org/docs/rules/indent
-    indent: ['error', 2, { SwitchCase: 1, VariableDeclarator: 1, outerIIFEBody: 1 }],
+    indent: ['error', 2, {
+      SwitchCase: 1,
+      VariableDeclarator: 1,
+      outerIIFEBody: 1,
+      // MemberExpression: null,
+      // CallExpression: {
+        // parameters: null,
+      // },
+      FunctionDeclaration: {
+        parameters: 1,
+        body: 1
+      },
+      FunctionExpression: {
+        parameters: 1,
+        body: 1
+      }
+    }],
 
     // specify whether double or single quotes should be used in JSX attributes
     // http://eslint.org/docs/rules/jsx-quotes
@@ -110,6 +129,7 @@ module.exports = {
     'max-len': ['error', 100, 2, {
       ignoreUrls: true,
       ignoreComments: false,
+      ignoreRegExpLiterals: true,
       ignoreStrings: true,
       ignoreTemplateLiterals: true,
     }],

From 9b649c843f85509fe9d1cb3e1da894d7a29e8e1f Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Mon, 31 Oct 2016 01:37:23 -0700
Subject: [PATCH 0879/1591] [eslint config] [*] [dev deps] update
 `eslint-find-rules`

---
 packages/eslint-config-airbnb-base/package.json | 2 +-
 packages/eslint-config-airbnb/package.json      | 2 +-
 2 files changed, 2 insertions(+), 2 deletions(-)

diff --git a/packages/eslint-config-airbnb-base/package.json b/packages/eslint-config-airbnb-base/package.json
index f993986d99..783eaa5c85 100644
--- a/packages/eslint-config-airbnb-base/package.json
+++ b/packages/eslint-config-airbnb-base/package.json
@@ -48,7 +48,7 @@
     "babel-preset-airbnb": "^2.1.1",
     "babel-tape-runner": "^2.0.1",
     "eslint": "^3.9.0",
-    "eslint-find-rules": "^1.14.0",
+    "eslint-find-rules": "^1.14.3",
     "eslint-plugin-import": "^2.0.1",
     "in-publish": "^2.0.0",
     "safe-publish-latest": "^1.1.1",
diff --git a/packages/eslint-config-airbnb/package.json b/packages/eslint-config-airbnb/package.json
index fa987a56f0..17d511c20d 100644
--- a/packages/eslint-config-airbnb/package.json
+++ b/packages/eslint-config-airbnb/package.json
@@ -51,7 +51,7 @@
     "babel-preset-airbnb": "^2.1.1",
     "babel-tape-runner": "^2.0.1",
     "eslint": "^3.8.1",
-    "eslint-find-rules": "^1.14.0",
+    "eslint-find-rules": "^1.14.3",
     "eslint-plugin-import": "^2.0.1",
     "eslint-plugin-jsx-a11y": "^2.2.3",
     "eslint-plugin-react": "^6.4.1",

From 5da6fac8ccfacae8e28f4ee5d5cc74225e3da8d7 Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Mon, 31 Oct 2016 02:01:37 -0700
Subject: [PATCH 0880/1591] [eslint config] [base] correct typo from
 a23a3efba9d1661e52cfa6894d620cee965ac090

---
 packages/eslint-config-airbnb-base/rules/best-practices.js | 2 +-
 packages/eslint-config-airbnb-base/rules/style.js          | 5 ++---
 2 files changed, 3 insertions(+), 4 deletions(-)

diff --git a/packages/eslint-config-airbnb-base/rules/best-practices.js b/packages/eslint-config-airbnb-base/rules/best-practices.js
index e2dd67dd57..b7e3f60630 100644
--- a/packages/eslint-config-airbnb-base/rules/best-practices.js
+++ b/packages/eslint-config-airbnb-base/rules/best-practices.js
@@ -179,7 +179,7 @@ module.exports = {
     'no-restricted-properties': ['error', {
       object: 'arguments',
       property: 'callee',
-      message: 'arguments.callee is deprecated,'
+      message: 'arguments.callee is deprecated',
     }, {
       property: '__defineGetter__',
       message: 'Please use Object.defineProperty instead.',
diff --git a/packages/eslint-config-airbnb-base/rules/style.js b/packages/eslint-config-airbnb-base/rules/style.js
index f201d1ca8b..b3b0d6236d 100644
--- a/packages/eslint-config-airbnb-base/rules/style.js
+++ b/packages/eslint-config-airbnb-base/rules/style.js
@@ -35,9 +35,8 @@ module.exports = {
     // requires function names to match the name of the variable or property to which they are
     // assigned
     // http://eslint.org/docs/rules/func-name-matching
-    'func-name-matching': ['off', {
-       includeCommonJSModuleExports: false,
-       nameMatches: 'always'
+    'func-name-matching': ['off', 'always', {
+       includeCommonJSModuleExports: false
      }],
 
     // require function expressions to have a name

From f3878876d2733930b049c2e566b450c64fcb3fc7 Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Mon, 31 Oct 2016 02:09:09 -0700
Subject: [PATCH 0881/1591] [eslint config] [deps] update `eslint`

---
 packages/eslint-config-airbnb/package.json | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/packages/eslint-config-airbnb/package.json b/packages/eslint-config-airbnb/package.json
index 17d511c20d..12c23441f6 100644
--- a/packages/eslint-config-airbnb/package.json
+++ b/packages/eslint-config-airbnb/package.json
@@ -50,7 +50,7 @@
   "devDependencies": {
     "babel-preset-airbnb": "^2.1.1",
     "babel-tape-runner": "^2.0.1",
-    "eslint": "^3.8.1",
+    "eslint": "^3.9.0",
     "eslint-find-rules": "^1.14.3",
     "eslint-plugin-import": "^2.0.1",
     "eslint-plugin-jsx-a11y": "^2.2.3",
@@ -61,7 +61,7 @@
     "tape": "^4.6.2"
   },
   "peerDependencies": {
-    "eslint": "^3.8.1",
+    "eslint": "^3.9.0",
     "eslint-plugin-jsx-a11y": "^2.2.3",
     "eslint-plugin-import": "^2.0.1",
     "eslint-plugin-react": "^6.4.1"

From 5aec2c6691532b210fa7f5e45151e304a31fc8a8 Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Mon, 31 Oct 2016 02:22:30 -0700
Subject: [PATCH 0882/1591] [eslint config] [base] correct another typo from
 a23a3efba9d1661e52cfa6894d620cee965ac090

---
 packages/eslint-config-airbnb-base/rules/style.js | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/packages/eslint-config-airbnb-base/rules/style.js b/packages/eslint-config-airbnb-base/rules/style.js
index b3b0d6236d..7d86567a1d 100644
--- a/packages/eslint-config-airbnb-base/rules/style.js
+++ b/packages/eslint-config-airbnb-base/rules/style.js
@@ -36,8 +36,8 @@ module.exports = {
     // assigned
     // http://eslint.org/docs/rules/func-name-matching
     'func-name-matching': ['off', 'always', {
-       includeCommonJSModuleExports: false
-     }],
+      includeCommonJSModuleExports: false
+    }],
 
     // require function expressions to have a name
     // http://eslint.org/docs/rules/func-names

From 4acb48b09a48bc8b0365cb4096f076d14dcb0873 Mon Sep 17 00:00:00 2001
From: dan-h-ch <chang.daniel@gmail.com>
Date: Mon, 31 Oct 2016 12:22:40 -0700
Subject: [PATCH 0883/1591] Updated README.md - Corrected capitalize on GitHub

---
 README.md | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/README.md b/README.md
index a81d3a0380..a105d6ee4c 100644
--- a/README.md
+++ b/README.md
@@ -2918,7 +2918,7 @@ Other Style Guides
 
   - [Naming this in nested functions](https://gist.github.com/cjohansen/4135065) - Christian Johansen
   - [Conditional Callbacks](https://github.com/airbnb/javascript/issues/52) - Ross Allen
-  - [Popular JavaScript Coding Conventions on Github](http://sideeffect.kr/popularconvention/#javascript) - JeongHoon Byun
+  - [Popular JavaScript Coding Conventions on GitHub](http://sideeffect.kr/popularconvention/#javascript) - JeongHoon Byun
   - [Multiple var statements in JavaScript, not superfluous](http://benalman.com/news/2012/05/multiple-var-statements-javascript/) - Ben Alman
 
 **Further Reading**

From fbfe8812eeadc52a8b6a7eefbba49a45f520c7f5 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Gianfranc=C3=B8=20Palumbo?=
 <gianpaj@users.noreply.github.com>
Date: Mon, 31 Oct 2016 23:55:24 +0000
Subject: [PATCH 0884/1591] DailyJS is not longer being published

---
 README.md | 1 -
 1 file changed, 1 deletion(-)

diff --git a/README.md b/README.md
index a105d6ee4c..7a6c4a78c1 100644
--- a/README.md
+++ b/README.md
@@ -2950,7 +2950,6 @@ Other Style Guides
 
 **Blogs**
 
-  - [DailyJS](http://dailyjs.com/)
   - [JavaScript Weekly](http://javascriptweekly.com/)
   - [JavaScript, JavaScript...](https://javascriptweblog.wordpress.com/)
   - [Bocoup Weblog](https://bocoup.com/weblog)

From 9cbda0f0e73a17a6a63719e44b198b25c751b73d Mon Sep 17 00:00:00 2001
From: Nischay Venkatram <nischay.v@gmail.com>
Date: Mon, 31 Oct 2016 18:38:36 -0500
Subject: [PATCH 0885/1591] Updated README - Added sub-section for spaces in
 comments

---
 README.md | 42 +++++++++++++++++++++++++++++++++++++++---
 1 file changed, 39 insertions(+), 3 deletions(-)

diff --git a/README.md b/README.md
index 7a6c4a78c1..8f3fad84a1 100644
--- a/README.md
+++ b/README.md
@@ -1922,11 +1922,47 @@ Other Style Guides
     }
     ```
 
+  - [17.3](#comments--spaces) Start all comments with a space to make it easier to read.
+
+    ```javascript
+    // bad
+    //is current tab
+    const active = true;
+
+    // good
+    // is current tab
+    const active = true;
+
+    // bad
+    /**
+     *make() returns a new element
+     *based on the passed-in tag name
+     */
+    function make(tag) {
+
+      // ...stuff...
+
+      return element;
+    }
+
+    // good
+    /**
+     * make() returns a new element
+     * based on the passed-in tag name
+     */
+    function make(tag) {
+
+      // ...stuff...
+
+      return element;
+    }
+    ```
+
   <a name="comments--actionitems"></a><a name="17.3"></a>
-  - [17.3](#comments--actionitems) Prefixing your comments with `FIXME` or `TODO` helps other developers quickly understand if you're pointing out a problem that needs to be revisited, or if you're suggesting a solution to the problem that needs to be implemented. These are different than regular comments because they are actionable. The actions are `FIXME: -- need to figure this out` or `TODO: -- need to implement`.
+  - [17.4](#comments--actionitems) Prefixing your comments with `FIXME` or `TODO` helps other developers quickly understand if you're pointing out a problem that needs to be revisited, or if you're suggesting a solution to the problem that needs to be implemented. These are different than regular comments because they are actionable. The actions are `FIXME: -- need to figure this out` or `TODO: -- need to implement`.
 
   <a name="comments--fixme"></a><a name="17.4"></a>
-  - [17.4](#comments--fixme) Use `// FIXME:` to annotate problems.
+  - [17.5](#comments--fixme) Use `// FIXME:` to annotate problems.
 
     ```javascript
     class Calculator extends Abacus {
@@ -1940,7 +1976,7 @@ Other Style Guides
     ```
 
   <a name="comments--todo"></a><a name="17.5"></a>
-  - [17.5](#comments--todo) Use `// TODO:` to annotate solutions to problems.
+  - [17.6](#comments--todo) Use `// TODO:` to annotate solutions to problems.
 
     ```javascript
     class Calculator extends Abacus {

From 017dfa81fa2ffbb191ddb28240aa6098837b8d1b Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Mon, 31 Oct 2016 21:36:28 -0700
Subject: [PATCH 0886/1591] [Docs] add reference to spaced-comment rule; flesh
 out options

---
 README.md                                         |  2 +-
 packages/eslint-config-airbnb-base/rules/style.js | 13 +++++++++++--
 2 files changed, 12 insertions(+), 3 deletions(-)

diff --git a/README.md b/README.md
index 8f3fad84a1..29ba881063 100644
--- a/README.md
+++ b/README.md
@@ -1922,7 +1922,7 @@ Other Style Guides
     }
     ```
 
-  - [17.3](#comments--spaces) Start all comments with a space to make it easier to read.
+  - [17.3](#comments--spaces) Start all comments with a space to make it easier to read. eslint: [`spaced-comment`](http://eslint.org/docs/rules/spaced-comment)
 
     ```javascript
     // bad
diff --git a/packages/eslint-config-airbnb-base/rules/style.js b/packages/eslint-config-airbnb-base/rules/style.js
index 7d86567a1d..c9e7c0f7a9 100644
--- a/packages/eslint-config-airbnb-base/rules/style.js
+++ b/packages/eslint-config-airbnb-base/rules/style.js
@@ -351,9 +351,18 @@ module.exports = {
     }],
 
     // require or disallow a space immediately following the // or /* in a comment
+    // http://eslint.org/docs/rules/spaced-comment
+    // TODO: semver-major: set balanced to "false"
     'spaced-comment': ['error', 'always', {
-      exceptions: ['-', '+'],
-      markers: ['=', '!']           // space here to support sprockets directives
+      line: {
+        exceptions: ['-', '+'],
+        markers: ['=', '!'], // space here to support sprockets directives
+      },
+      block: {
+        exceptions: ['-', '+'],
+        markers: ['=', '!'], // space here to support sprockets directives
+        balanced: false,
+      }
     }],
 
     // require or disallow the Unicode Byte Order Mark

From f9a5dd4919c30d575944ded3d9e33b233041ffe4 Mon Sep 17 00:00:00 2001
From: Kevin Grandon <kevingrandon@yahoo.com>
Date: Tue, 1 Nov 2016 13:54:07 -0700
Subject: [PATCH 0887/1591] Update JSX quote style rationale.

Based on https://github.com/airbnb/javascript/issues/629#issuecomment-166384924.
---
 react/README.md | 3 +--
 1 file changed, 1 insertion(+), 2 deletions(-)

diff --git a/react/README.md b/react/README.md
index 7d8a32ebf1..dbf3b0a0a2 100644
--- a/react/README.md
+++ b/react/README.md
@@ -187,8 +187,7 @@
 
   - Always use double quotes (`"`) for JSX attributes, but single quotes for all other JS. eslint: [`jsx-quotes`](http://eslint.org/docs/rules/jsx-quotes)
 
-  > Why? JSX attributes [can't contain escaped quotes](http://eslint.org/docs/rules/jsx-quotes), so double quotes make contractions like `"don't"` easier to type.
-  > Regular HTML attributes also typically use double quotes instead of single, so JSX attributes mirror this convention.
+  > Why? Regular HTML attributes also typically use double quotes instead of single, so JSX attributes mirror this convention.
 
     ```jsx
     // bad

From c51251d17b8e38f1e8975a5e4eb13d7986229410 Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Wed, 2 Nov 2016 00:48:11 -0700
Subject: [PATCH 0888/1591] [guide] add section on multiline function
 signatures/invocations

---
 README.md | 33 +++++++++++++++++++++++++++++++++
 1 file changed, 33 insertions(+)

diff --git a/README.md b/README.md
index 29ba881063..11f6d04d97 100644
--- a/README.md
+++ b/README.md
@@ -810,6 +810,39 @@ Other Style Guides
     new Date(...[2016, 08, 05]);
     ```
 
+  <a name="functions--signature-invocation-indentation"></a>
+  - [7.15](#functions--signature-invocation-indentation) Functions with multiline signatures, or invocations, should be indented just like every other multiline list in this guide: with each item on a line by itself, with a trailing comma on the last item.
+
+    ```javascript
+    // bad
+    function foo(bar,
+      baz,
+      quux) {
+      // body
+    }
+
+    // good
+    function foo(
+      bar,
+      baz,
+      quux,
+    ) {
+      // body
+    }
+
+    // bad
+    console.log(foo,
+      bar,
+      baz);
+
+    // good
+    console.log(
+      foo,
+      bar,
+      baz,
+    );
+    ```
+
 **[⬆ back to top](#table-of-contents)**
 
 ## Arrow Functions

From 788208295469e19b806c06e01095dc8ba1b6cdc9 Mon Sep 17 00:00:00 2001
From: Thomas Grainger <tagrain@gmail.com>
Date: Tue, 1 Nov 2016 19:06:39 +0000
Subject: [PATCH 0889/1591] [eslint config] [base] [breaking] `comma-dangle`:
 require trailing commas for functions

---
 README.md                                     | 54 ++++++++++++++++++-
 .../eslint-config-airbnb-base/rules/errors.js |  8 ++-
 2 files changed, 59 insertions(+), 3 deletions(-)

diff --git a/README.md b/README.md
index 11f6d04d97..1ed011d564 100644
--- a/README.md
+++ b/README.md
@@ -816,8 +816,8 @@ Other Style Guides
     ```javascript
     // bad
     function foo(bar,
-      baz,
-      quux) {
+                 baz,
+                 quux) {
       // body
     }
 
@@ -2430,6 +2430,56 @@ Other Style Guides
       'Batman',
       'Superman',
     ];
+
+    // bad
+    function createHero(
+      firstName,
+      lastName,
+      inventorOf
+    ) {
+      // does nothing
+    }
+
+    // good
+    function createHero(
+      firstName,
+      lastName,
+      inventorOf,
+    ) {
+      // does nothing
+    }
+
+    // good (note that a comma must not appear after a "rest" element)
+    function createHero(
+      firstName,
+      lastName,
+      inventorOf,
+      ...heroArgs
+    ) {
+      // does nothing
+    }
+
+    // bad
+    createHero(
+      firstName,
+      lastName,
+      inventorOf
+    );
+
+    // good
+    createHero(
+      firstName,
+      lastName,
+      inventorOf,
+    );
+
+    // good (note that a comma must not appear after a "rest" element)
+    createHero(
+      firstName,
+      lastName,
+      inventorOf,
+      ...heroArgs
+    )
     ```
 
 **[⬆ back to top](#table-of-contents)**
diff --git a/packages/eslint-config-airbnb-base/rules/errors.js b/packages/eslint-config-airbnb-base/rules/errors.js
index de6439b5e3..1849e8db4d 100644
--- a/packages/eslint-config-airbnb-base/rules/errors.js
+++ b/packages/eslint-config-airbnb-base/rules/errors.js
@@ -1,7 +1,13 @@
 module.exports = {
   rules: {
     // require trailing commas in multiline object literals
-    'comma-dangle': ['error', 'always-multiline'],
+    'comma-dangle': ['error', {
+      arrays: 'always-multiline',
+      objects: 'always-multiline',
+      imports: 'always-multiline',
+      exports: 'always-multiline',
+      functions: 'always-multiline',
+    }],
 
     // disallow assignment in conditional expressions
     'no-cond-assign': ['error', 'always'],

From 86f52012cda6d9383f4afaf72aa3857ecaa0ce7d Mon Sep 17 00:00:00 2001
From: Ryan Busby <BusbyActual@gmail.com>
Date: Tue, 1 Nov 2016 18:42:11 -0700
Subject: [PATCH 0890/1591] [guide] quotes: corrected casing

Updated case to read the same in multiple spots. Added single quote example
---
 react/README.md | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/react/README.md b/react/README.md
index dbf3b0a0a2..714eea947a 100644
--- a/react/README.md
+++ b/react/README.md
@@ -185,7 +185,7 @@
 
 ## Quotes
 
-  - Always use double quotes (`"`) for JSX attributes, but single quotes for all other JS. eslint: [`jsx-quotes`](http://eslint.org/docs/rules/jsx-quotes)
+  - Always use double quotes (`"`) for JSX attributes, but single quotes (`'`) for all other JS. eslint: [`jsx-quotes`](http://eslint.org/docs/rules/jsx-quotes)
 
   > Why? Regular HTML attributes also typically use double quotes instead of single, so JSX attributes mirror this convention.
 
@@ -514,7 +514,7 @@
   1. `componentWillUnmount`
   1. *clickHandlers or eventHandlers* like `onClickSubmit()` or `onChangeDescription()`
   1. *getter methods for `render`* like `getSelectReason()` or `getFooterContent()`
-  1. *Optional render methods* like `renderNavigation()` or `renderProfilePicture()`
+  1. *optional render methods* like `renderNavigation()` or `renderProfilePicture()`
   1. `render`
 
   - How to define `propTypes`, `defaultProps`, `contextTypes`, etc...
@@ -569,7 +569,7 @@
   1. `componentWillUnmount`
   1. *clickHandlers or eventHandlers* like `onClickSubmit()` or `onChangeDescription()`
   1. *getter methods for `render`* like `getSelectReason()` or `getFooterContent()`
-  1. *Optional render methods* like `renderNavigation()` or `renderProfilePicture()`
+  1. *optional render methods* like `renderNavigation()` or `renderProfilePicture()`
   1. `render`
 
 ## `isMounted`

From 556846745cee3b2c9630ce69722c60986ea0c800 Mon Sep 17 00:00:00 2001
From: Mark Miyashita <negativetwelve@gmail.com>
Date: Sun, 6 Nov 2016 05:19:22 -0800
Subject: [PATCH 0891/1591] [guide] Separate 19.2 code blocks into diff +
 javascript sections

---
 README.md | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

diff --git a/README.md b/README.md
index 1ed011d564..fee8392863 100644
--- a/README.md
+++ b/README.md
@@ -2393,7 +2393,7 @@ Other Style Guides
 
     > Why? This leads to cleaner git diffs. Also, transpilers like Babel will remove the additional trailing comma in the transpiled code which means you don't have to worry about the [trailing comma problem](https://github.com/airbnb/javascript/blob/es5-deprecated/es5/README.md#commas) in legacy browsers.
 
-    ```javascript
+    ```diff
     // bad - git diff without trailing comma
     const hero = {
          firstName: 'Florence',
@@ -2408,7 +2408,9 @@ Other Style Guides
          lastName: 'Nightingale',
     +    inventorOf: ['coxcomb chart', 'modern nursing'],
     };
+    ```
 
+    ```javascript
     // bad
     const hero = {
       firstName: 'Dana',

From 535cb799a9f94d8898071c0fd161810b18c7fa08 Mon Sep 17 00:00:00 2001
From: Jonathan <vanillajonathan@users.noreply.github.com>
Date: Wed, 2 Nov 2016 16:02:35 +0100
Subject: [PATCH 0892/1591] [guide] Mention both num++ and num ++

---
 README.md | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/README.md b/README.md
index fee8392863..5bc9c49f78 100644
--- a/README.md
+++ b/README.md
@@ -1547,15 +1547,15 @@ Other Style Guides
   <a name="variables--unary-increment-decrement"></a><a name="13.6"></a>
   - [13.6](#variables--unary-increment-decrement) Avoid using unary increments and decrements (++, --). eslint [`no-plusplus`](http://eslint.org/docs/rules/no-plusplus)
 
-    > Why? Per the eslint documentation, unary increment and decrement statements are subject to automatic semicolon insertion and can cause silent errors with incrementing or decrementing values within an application. It is also more expressive to mutate your values with statements like `num += 1` instead of `num ++`. Disallowing unary increment and decrement statements also prevents you from pre-incrementing/pre-decrementing values unintentionally which can also cause unexpected behavior in your programs.
+    > Why? Per the eslint documentation, unary increment and decrement statements are subject to automatic semicolon insertion and can cause silent errors with incrementing or decrementing values within an application. It is also more expressive to mutate your values with statements like `num += 1` instead of `num++` or `num ++`. Disallowing unary increment and decrement statements also prevents you from pre-incrementing/pre-decrementing values unintentionally which can also cause unexpected behavior in your programs.
 
     ```javascript
       // bad
 
       let array = [1, 2, 3];
       let num = 1;
-      num ++;
-      -- num;
+      num++;
+      --num;
 
       let sum = 0;
       let truthyCount = 0;

From 153c02b36cb2a3c980962ae9fabadf952c3c06e3 Mon Sep 17 00:00:00 2001
From: Jonathan Chen <dijonkitchen@users.noreply.github.com>
Date: Tue, 1 Nov 2016 06:31:17 -0400
Subject: [PATCH 0893/1591] Create LICENSE.md

---
 LICENSE.md | 21 +++++++++++++++++++++
 1 file changed, 21 insertions(+)
 create mode 100644 LICENSE.md

diff --git a/LICENSE.md b/LICENSE.md
new file mode 100644
index 0000000000..87081c1339
--- /dev/null
+++ b/LICENSE.md
@@ -0,0 +1,21 @@
+MIT License
+
+Copyright (c) 2016 Airbnb
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.

From 3ab19f07f468d3606ac3656f477104d19ff616fc Mon Sep 17 00:00:00 2001
From: Andrew Smith <andrewsmith@alumni.stanford.edu>
Date: Tue, 25 Oct 2016 14:47:25 -0700
Subject: [PATCH 0894/1591] [guide] Fix inconsistency in function expression
 rules.

---
 README.md | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/README.md b/README.md
index 5bc9c49f78..63dfc192f8 100644
--- a/README.md
+++ b/README.md
@@ -576,7 +576,7 @@ Other Style Guides
   <a name="functions--declarations"></a><a name="7.1"></a>
   - [7.1](#functions--declarations) Use named function expressions instead of function declarations. eslint: [`func-style`](http://eslint.org/docs/rules/func-style) jscs: [`requireFunctionDeclarations`](http://jscs.info/rule/requireFunctionDeclarations)
 
-    > Why? Function declarations are hoisted, which means that it’s easy - too easy - to reference the function before it is defined in the file. This harms readability and maintainability. If you find that a function’s definition is large or complex enough that it is interfering with understanding the rest of the file, then perhaps it’s time to extract it to its own module! Don’t forget to name the expression - anonymous functions can make it harder to locate the problem in an Error's call stack.
+    > Why? Function declarations are hoisted, which means that it’s easy - too easy - to reference the function before it is defined in the file. This harms readability and maintainability. If you find that a function’s definition is large or complex enough that it is interfering with understanding the rest of the file, then perhaps it’s time to extract it to its own module! Don’t forget to name the expression - anonymous functions can make it harder to locate the problem in an Error's call stack. ([Discussion](https://github.com/airbnb/javascript/issues/794))
 
     ```javascript
     // bad

From 436cf3ee6366a4cf3382dbdee6078a90e92508d6 Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Sun, 6 Nov 2016 09:54:17 -0800
Subject: [PATCH 0895/1591] [eslint config] [base] [breaking] update `eslint`,
 `eslint-plugin-import`; enable `import/no-named-default`

---
 packages/eslint-config-airbnb-base/package.json     | 8 ++++----
 packages/eslint-config-airbnb-base/rules/imports.js | 4 ++++
 2 files changed, 8 insertions(+), 4 deletions(-)

diff --git a/packages/eslint-config-airbnb-base/package.json b/packages/eslint-config-airbnb-base/package.json
index 783eaa5c85..78abc8a524 100644
--- a/packages/eslint-config-airbnb-base/package.json
+++ b/packages/eslint-config-airbnb-base/package.json
@@ -47,16 +47,16 @@
   "devDependencies": {
     "babel-preset-airbnb": "^2.1.1",
     "babel-tape-runner": "^2.0.1",
-    "eslint": "^3.9.0",
+    "eslint": "^3.9.1",
     "eslint-find-rules": "^1.14.3",
-    "eslint-plugin-import": "^2.0.1",
+    "eslint-plugin-import": "^2.1.0",
     "in-publish": "^2.0.0",
     "safe-publish-latest": "^1.1.1",
     "tape": "^4.6.2"
   },
   "peerDependencies": {
-    "eslint": "^3.9.0",
-    "eslint-plugin-import": "^2.0.1"
+    "eslint": "^3.9.1",
+    "eslint-plugin-import": "^2.1.0"
   },
   "engines": {
     "node": ">= 4"
diff --git a/packages/eslint-config-airbnb-base/rules/imports.js b/packages/eslint-config-airbnb-base/rules/imports.js
index a8f4269cbd..2f9cac57ea 100644
--- a/packages/eslint-config-airbnb-base/rules/imports.js
+++ b/packages/eslint-config-airbnb-base/rules/imports.js
@@ -170,5 +170,9 @@ module.exports = {
     // https://github.com/benmosher/eslint-plugin-import/blob/master/docs/rules/no-unassigned-import.md
     // importing for side effects is perfectly acceptable, if you need side effects.
     'import/no-unassigned-import': 'off',
+
+    // Prevent importing the default as if it were named
+    // https://github.com/benmosher/eslint-plugin-import/blob/master/docs/rules/no-named-default.md
+    'import/no-named-default': 'error',
   },
 };

From 1399b3cbfa785f760c15ec63112f711b2c68fd28 Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Sun, 6 Nov 2016 09:54:42 -0800
Subject: [PATCH 0896/1591] [eslint config] [base] [breaking] prefer `**` over
 `Math.pow`

---
 packages/eslint-config-airbnb-base/rules/best-practices.js | 4 ++++
 1 file changed, 4 insertions(+)

diff --git a/packages/eslint-config-airbnb-base/rules/best-practices.js b/packages/eslint-config-airbnb-base/rules/best-practices.js
index b7e3f60630..f8cdc208d1 100644
--- a/packages/eslint-config-airbnb-base/rules/best-practices.js
+++ b/packages/eslint-config-airbnb-base/rules/best-practices.js
@@ -186,6 +186,10 @@ module.exports = {
     }, {
       property: '__defineSetter__',
       message: 'Please use Object.defineProperty instead.',
+    }, {
+      object: 'Math',
+      property: 'pow',
+      message: 'Use the exponentiation operator (**) instead.',
     }],
 
     // disallow use of assignment in return statement

From 2f9dddbe205145512978a9f07b08fe987505d4d7 Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Sun, 6 Nov 2016 10:01:36 -0800
Subject: [PATCH 0897/1591] [eslint config] [base] [patch] loosen
 `no-extraneous-dependencies` for test files.

Relates to #959, #1089.
---
 packages/eslint-config-airbnb-base/rules/imports.js | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/packages/eslint-config-airbnb-base/rules/imports.js b/packages/eslint-config-airbnb-base/rules/imports.js
index 2f9cac57ea..2fb05df41d 100644
--- a/packages/eslint-config-airbnb-base/rules/imports.js
+++ b/packages/eslint-config-airbnb-base/rules/imports.js
@@ -66,8 +66,9 @@ module.exports = {
 
     // Forbid the use of extraneous packages
     // https://github.com/benmosher/eslint-plugin-import/blob/master/docs/rules/no-extraneous-dependencies.md
+    // paths are treated both as absolute paths, and relative to process.cwd()
     'import/no-extraneous-dependencies': ['error', {
-      devDependencies: false,
+      devDependencies: ['spec/**', 'test/**', 'tests/**', '**/__tests__/**'],
       optionalDependencies: false,
     }],
 

From c4a9d28485f39005464571db45ecfe8f83dd732d Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Sun, 6 Nov 2016 10:34:29 -0800
Subject: [PATCH 0898/1591] [Tests] on `node` `v7`

---
 .travis.yml | 1 +
 1 file changed, 1 insertion(+)

diff --git a/.travis.yml b/.travis.yml
index 773761966a..f492123d64 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -1,5 +1,6 @@
 language: node_js
 node_js:
+  - "7"
   - "6"
   - "5"
   - "4"

From 9f51fd264b5b2bafb9f45bdebcef6732fefb241b Mon Sep 17 00:00:00 2001
From: Jordan Gensler <jordangens@gmail.com>
Date: Mon, 12 Sep 2016 16:12:19 -0700
Subject: [PATCH 0899/1591] [guide] Add notes on acronyms and initialisms to
 naming

---
 README.md | 30 ++++++++++++++++++++++++++++++
 1 file changed, 30 insertions(+)

diff --git a/README.md b/README.md
index 63dfc192f8..4a844bcbb0 100644
--- a/README.md
+++ b/README.md
@@ -2761,6 +2761,36 @@ Other Style Guides
     export default AirbnbStyleGuide;
     ```
 
+  <a name="naming--Acronyms-and-Initialisms"></a>
+  - [22.9](#naming--Acronyms-and-Initialisms) Acronyms and initialisms should always be all capitalized, or all lowercased.
+
+    > Why? Names are for readability, not to appease a computer algorithm.
+
+    ```javascript
+    // bad
+    import SmsContainer from './containers/SmsContainer';
+
+    // bad
+    const HttpRequests = [
+      // ...
+    ];
+
+    // good
+    import SMSContainer from './containers/SMSContainer';
+
+    // good
+    const HTTPRequests = [
+      // ...
+    ];
+
+    // best
+    import TextMessageContainer from './containers/TextMessageContainer';
+
+    // best
+    const Requests = [
+      // ...
+    ];
+    ```
 
 **[⬆ back to top](#table-of-contents)**
 

From 8c2df7493aebbf7a77778134d571e5b1f8fbd0dc Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Sun, 6 Nov 2016 10:41:38 -0800
Subject: [PATCH 0900/1591] [eslint config] [base] v10.0.0

---
 packages/eslint-config-airbnb-base/CHANGELOG.md   | 14 ++++++++++++++
 packages/eslint-config-airbnb-base/package.json   |  2 +-
 packages/eslint-config-airbnb-base/rules/style.js |  1 -
 3 files changed, 15 insertions(+), 2 deletions(-)

diff --git a/packages/eslint-config-airbnb-base/CHANGELOG.md b/packages/eslint-config-airbnb-base/CHANGELOG.md
index 17f218bd65..ad3ef6f8c6 100644
--- a/packages/eslint-config-airbnb-base/CHANGELOG.md
+++ b/packages/eslint-config-airbnb-base/CHANGELOG.md
@@ -1,3 +1,17 @@
+10.0.0 / 2016-11-06
+==================
+ - [breaking] prefer `**` over `Math.pow`
+ - [breaking] `comma-dangle`: require trailing commas for functions
+ - [breaking] enable `no-useless-return`
+ - [breaking] tighten up `indent`
+ - [breaking] tighten up `spaced-comment`
+ - [breaking] enable `import/no-named-default`
+ - [patch] loosen `max-len` with `ignoreRegExpLiterals` option
+ - [patch] loosen `no-extraneous-dependencies` for test files (#959, #1089)
+ - [deps] update `eslint`, `eslint-plugin-import`
+ - [dev deps] update `eslint-find-rules`
+ - [Tests] on `node` `v7`
+
 9.0.0 / 2016-10-16
 ==================
  - [breaking] Add `ForOfStatement` to `no-restricted-syntax` (#1122, #1134)
diff --git a/packages/eslint-config-airbnb-base/package.json b/packages/eslint-config-airbnb-base/package.json
index 78abc8a524..b057319032 100644
--- a/packages/eslint-config-airbnb-base/package.json
+++ b/packages/eslint-config-airbnb-base/package.json
@@ -1,6 +1,6 @@
 {
   "name": "eslint-config-airbnb-base",
-  "version": "9.0.0",
+  "version": "10.0.0",
   "description": "Airbnb's base JS ESLint config, following our styleguide",
   "main": "index.js",
   "scripts": {
diff --git a/packages/eslint-config-airbnb-base/rules/style.js b/packages/eslint-config-airbnb-base/rules/style.js
index c9e7c0f7a9..536cd5320b 100644
--- a/packages/eslint-config-airbnb-base/rules/style.js
+++ b/packages/eslint-config-airbnb-base/rules/style.js
@@ -352,7 +352,6 @@ module.exports = {
 
     // require or disallow a space immediately following the // or /* in a comment
     // http://eslint.org/docs/rules/spaced-comment
-    // TODO: semver-major: set balanced to "false"
     'spaced-comment': ['error', 'always', {
       line: {
         exceptions: ['-', '+'],

From 38bd170e2cd8d28c99b69b5566f50362d6548cd7 Mon Sep 17 00:00:00 2001
From: Spen Taylor <spen_@hotmail.co.uk>
Date: Mon, 7 Nov 2016 10:39:00 +1100
Subject: [PATCH 0901/1591] [guide] Update syntax in `eol-last` examples

---
 README.md | 18 +++++++++---------
 1 file changed, 9 insertions(+), 9 deletions(-)

diff --git a/README.md b/README.md
index 4a844bcbb0..274dd79ab4 100644
--- a/README.md
+++ b/README.md
@@ -2115,24 +2115,24 @@ Other Style Guides
 
     ```javascript
     // bad
-    (function (global) {
-      // ...stuff...
-    })(this);
+    import { es6 } from './AirbnbStyleGuide';
+      // ...
+    export default es6;
     ```
 
     ```javascript
     // bad
-    (function (global) {
-      // ...stuff...
-    })(this);↵
+    import { es6 } from './AirbnbStyleGuide';
+      // ...
+    export default es6;↵
     ↵
     ```
 
     ```javascript
     // good
-    (function (global) {
-      // ...stuff...
-    })(this);↵
+    import { es6 } from './AirbnbStyleGuide';
+      // ...
+    export default es6;↵
     ```
 
   <a name="whitespace--chains"></a><a name="18.6"></a>

From c3044f811e139cf68d16ea026a6603c4c5f90a79 Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Sun, 6 Nov 2016 16:02:50 -0800
Subject: [PATCH 0902/1591] [eslint config] [breaking] [deps] update
 `eslint-config-airbnb-base`, `eslint`, `eslint-plugin-import`,
 `eslint-plugin-react`

---
 packages/eslint-config-airbnb-base/test/.eslintrc |  3 ---
 packages/eslint-config-airbnb/package.json        | 14 +++++++-------
 packages/eslint-config-airbnb/test/.eslintrc      |  8 ++------
 3 files changed, 9 insertions(+), 16 deletions(-)

diff --git a/packages/eslint-config-airbnb-base/test/.eslintrc b/packages/eslint-config-airbnb-base/test/.eslintrc
index 02ab3c48bb..5808be6186 100644
--- a/packages/eslint-config-airbnb-base/test/.eslintrc
+++ b/packages/eslint-config-airbnb-base/test/.eslintrc
@@ -4,8 +4,5 @@
     "no-shadow": 0,
     // tests uses `t` for tape
     "id-length": [2, {"min": 2, "properties": "never", "exceptions": ["t"]}],
-    "import/no-extraneous-dependencies": [2, {
-      "devDependencies": true
-    }],
   }
 }
diff --git a/packages/eslint-config-airbnb/package.json b/packages/eslint-config-airbnb/package.json
index 12c23441f6..37c9d25029 100644
--- a/packages/eslint-config-airbnb/package.json
+++ b/packages/eslint-config-airbnb/package.json
@@ -45,26 +45,26 @@
   },
   "homepage": "https://github.com/airbnb/javascript",
   "dependencies": {
-    "eslint-config-airbnb-base": "^9.0.0"
+    "eslint-config-airbnb-base": "^10.0.0"
   },
   "devDependencies": {
     "babel-preset-airbnb": "^2.1.1",
     "babel-tape-runner": "^2.0.1",
-    "eslint": "^3.9.0",
+    "eslint": "^3.9.1",
     "eslint-find-rules": "^1.14.3",
-    "eslint-plugin-import": "^2.0.1",
+    "eslint-plugin-import": "^2.1.0",
     "eslint-plugin-jsx-a11y": "^2.2.3",
-    "eslint-plugin-react": "^6.4.1",
+    "eslint-plugin-react": "^6.6.0",
     "in-publish": "^2.0.0",
     "react": ">= 0.13.0",
     "safe-publish-latest": "^1.1.1",
     "tape": "^4.6.2"
   },
   "peerDependencies": {
-    "eslint": "^3.9.0",
+    "eslint": "^3.9.1",
     "eslint-plugin-jsx-a11y": "^2.2.3",
-    "eslint-plugin-import": "^2.0.1",
-    "eslint-plugin-react": "^6.4.1"
+    "eslint-plugin-import": "^2.1.0",
+    "eslint-plugin-react": "^6.6.0"
   },
   "engines": {
     "node": ">= 4"
diff --git a/packages/eslint-config-airbnb/test/.eslintrc b/packages/eslint-config-airbnb/test/.eslintrc
index eafcdbffa6..9c23197fab 100644
--- a/packages/eslint-config-airbnb/test/.eslintrc
+++ b/packages/eslint-config-airbnb/test/.eslintrc
@@ -1,13 +1,9 @@
 {
   "rules": {
-    // disabled because I find it tedious to write tests while following this
-    // rule
+    // disabled because I find it tedious to write tests while following this rule
     "no-shadow": 0,
 
     // tests uses `t` for tape
-    "id-length": [2, {"min": 2, "properties": "never", "exceptions": ["t"]}],
-
-    // tests can import things in devDependencies
-    "import/no-extraneous-dependencies": [2, {"devDependencies": true}]
+    "id-length": [2, {"min": 2, "properties": "never", "exceptions": ["t"]}]
   }
 }

From 3e656750e68acaa166fb53e4783b66b42473db9f Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Sun, 6 Nov 2016 22:07:50 -0800
Subject: [PATCH 0903/1591] [eslint config] [breaking] re-enable
 `react/no-unused-prop-types`

---
 packages/eslint-config-airbnb/rules/react.js | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/packages/eslint-config-airbnb/rules/react.js b/packages/eslint-config-airbnb/rules/react.js
index 38b7dc25df..262b30927c 100644
--- a/packages/eslint-config-airbnb/rules/react.js
+++ b/packages/eslint-config-airbnb/rules/react.js
@@ -271,7 +271,7 @@ module.exports = {
 
     // Prevent unused propType definitions
     // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/no-unused-prop-types.md
-    'react/no-unused-prop-types': ['warn', {
+    'react/no-unused-prop-types': ['error', {
       customValidators: [
       ],
       skipShapeProps: true,

From 24b8f35f18e6baab92d4da7aa2c10c4fc2374245 Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Sun, 6 Nov 2016 22:14:05 -0800
Subject: [PATCH 0904/1591] [eslint config] v13.0.0

---
 packages/eslint-config-airbnb/CHANGELOG.md | 10 ++++++++++
 packages/eslint-config-airbnb/package.json |  2 +-
 2 files changed, 11 insertions(+), 1 deletion(-)

diff --git a/packages/eslint-config-airbnb/CHANGELOG.md b/packages/eslint-config-airbnb/CHANGELOG.md
index 4dde06abe3..b2cb3456c9 100644
--- a/packages/eslint-config-airbnb/CHANGELOG.md
+++ b/packages/eslint-config-airbnb/CHANGELOG.md
@@ -1,3 +1,13 @@
+13.0.0 / 2016-11-06
+==================
+- [breaking] Enable `import/no-webpack-loader-syntax` rule (#1123)
+- [patch] `class-methods-use-this`: exempt React `getChildContext` (#1094)
+- [patch] set `react/no-unused-prop-types` skipShapeProps (#1099)
+- [deps] [breaking] update `eslint`, `eslint-config-airbnb-base`, `eslint-plugin-jsx-a11y`, `eslint-plugin-react`, `eslint-plugin-import`
+- [dev deps] update `babel-preset-airbnb`, `eslint`, `eslint-find-rules`, `tape`, `safe-publish-latest`
+- [Tests] on `node` `v7`
+- [docs] ensure latest version of config is installed (#1121)
+
 12.0.0 / 2016-09-24
 ==================
 - [breaking] Enable react rules: `react/no-unescaped-entities`, `react/no-children-prop`
diff --git a/packages/eslint-config-airbnb/package.json b/packages/eslint-config-airbnb/package.json
index 37c9d25029..4033c46f1f 100644
--- a/packages/eslint-config-airbnb/package.json
+++ b/packages/eslint-config-airbnb/package.json
@@ -1,6 +1,6 @@
 {
   "name": "eslint-config-airbnb",
-  "version": "12.0.0",
+  "version": "13.0.0",
   "description": "Airbnb's ESLint config, following our styleguide",
   "main": "index.js",
   "scripts": {

From 97575b2087a3371d6223f86960f90eee7426f7c8 Mon Sep 17 00:00:00 2001
From: Pete Pirasis <1pete@users.noreply.github.com>
Date: Thu, 27 Oct 2016 03:04:31 +0700
Subject: [PATCH 0905/1591] Fix broken rule reference link `import/first`

---
 README.md | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/README.md b/README.md
index 274dd79ab4..95dc926d06 100644
--- a/README.md
+++ b/README.md
@@ -1239,7 +1239,7 @@ Other Style Guides
 
   <a name="modules--imports-first"></a>
   - [10.7](#modules--imports-first) Put all `import`s above non-import statements.
- eslint: [`import/imports-first`](https://github.com/benmosher/eslint-plugin-import/blob/master/docs/rules/imports-first.md)
+ eslint: [`import/first`](https://github.com/benmosher/eslint-plugin-import/blob/master/docs/rules/first.md)
     > Why? Since `import`s are hoisted, keeping them all at the top prevents surprising behavior.
 
     ```javascript

From a2cb4a2cd6721672a9cd03a7d0c4d529e298e335 Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Mon, 7 Nov 2016 00:48:12 -0800
Subject: [PATCH 0906/1591] [eslint config] [base] [fix] legacy config should
 not require `**`

Per https://github.com/airbnb/javascript/commit/1399b3cbfa785f760c15ec63112f711b2c68fd28#commitcomment-19718532
---
 packages/eslint-config-airbnb-base/legacy.js | 11 +++++++++++
 1 file changed, 11 insertions(+)

diff --git a/packages/eslint-config-airbnb-base/legacy.js b/packages/eslint-config-airbnb-base/legacy.js
index 3de97acd21..a73de7d8f7 100644
--- a/packages/eslint-config-airbnb-base/legacy.js
+++ b/packages/eslint-config-airbnb-base/legacy.js
@@ -18,5 +18,16 @@ module.exports = {
   rules: {
     'comma-dangle': ['error', 'never'],
     'prefer-numeric-literals': 'off',
+    'no-restricted-properties': ['error', {
+      object: 'arguments',
+      property: 'callee',
+      message: 'arguments.callee is deprecated',
+    }, {
+      property: '__defineGetter__',
+      message: 'Please use Object.defineProperty instead.',
+    }, {
+      property: '__defineSetter__',
+      message: 'Please use Object.defineProperty instead.',
+    }],
   }
 };

From f82857512d42c89e6561d96061a6edc54becd695 Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Mon, 7 Nov 2016 00:49:02 -0800
Subject: [PATCH 0907/1591] [eslint config] [base] v10.0.1

---
 packages/eslint-config-airbnb-base/CHANGELOG.md | 4 ++++
 packages/eslint-config-airbnb-base/package.json | 2 +-
 2 files changed, 5 insertions(+), 1 deletion(-)

diff --git a/packages/eslint-config-airbnb-base/CHANGELOG.md b/packages/eslint-config-airbnb-base/CHANGELOG.md
index ad3ef6f8c6..1fa42086a7 100644
--- a/packages/eslint-config-airbnb-base/CHANGELOG.md
+++ b/packages/eslint-config-airbnb-base/CHANGELOG.md
@@ -1,3 +1,7 @@
+10.0.1 / 2016-11-07
+==================
+ - [fix] legacy config should not require `**`
+
 10.0.0 / 2016-11-06
 ==================
  - [breaking] prefer `**` over `Math.pow`
diff --git a/packages/eslint-config-airbnb-base/package.json b/packages/eslint-config-airbnb-base/package.json
index b057319032..7cde827bf3 100644
--- a/packages/eslint-config-airbnb-base/package.json
+++ b/packages/eslint-config-airbnb-base/package.json
@@ -1,6 +1,6 @@
 {
   "name": "eslint-config-airbnb-base",
-  "version": "10.0.0",
+  "version": "10.0.1",
   "description": "Airbnb's base JS ESLint config, following our styleguide",
   "main": "index.js",
   "scripts": {

From ae1c0f89cbc02610cf647896d6957bca7e7b3cc5 Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Mon, 7 Nov 2016 01:01:15 -0800
Subject: [PATCH 0908/1591] [eslint config] [deps] update
 `eslint-config-airbnb-base`

---
 packages/eslint-config-airbnb/package.json | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/packages/eslint-config-airbnb/package.json b/packages/eslint-config-airbnb/package.json
index 4033c46f1f..467267475d 100644
--- a/packages/eslint-config-airbnb/package.json
+++ b/packages/eslint-config-airbnb/package.json
@@ -45,7 +45,7 @@
   },
   "homepage": "https://github.com/airbnb/javascript",
   "dependencies": {
-    "eslint-config-airbnb-base": "^10.0.0"
+    "eslint-config-airbnb-base": "^10.0.1"
   },
   "devDependencies": {
     "babel-preset-airbnb": "^2.1.1",

From ec08ca84ba756543df99bee9c268866512634622 Mon Sep 17 00:00:00 2001
From: "C. T. Lin" <chentsulin@gmail.com>
Date: Wed, 9 Nov 2016 12:46:11 +0800
Subject: [PATCH 0909/1591] [eslint config] [base]
 `import/no-extraneous-dependencies`: added ignore patterns for config files

Fixes #1168
---
 packages/eslint-config-airbnb-base/rules/imports.js | 12 +++++++++++-
 1 file changed, 11 insertions(+), 1 deletion(-)

diff --git a/packages/eslint-config-airbnb-base/rules/imports.js b/packages/eslint-config-airbnb-base/rules/imports.js
index 2fb05df41d..f1555aca7e 100644
--- a/packages/eslint-config-airbnb-base/rules/imports.js
+++ b/packages/eslint-config-airbnb-base/rules/imports.js
@@ -68,7 +68,17 @@ module.exports = {
     // https://github.com/benmosher/eslint-plugin-import/blob/master/docs/rules/no-extraneous-dependencies.md
     // paths are treated both as absolute paths, and relative to process.cwd()
     'import/no-extraneous-dependencies': ['error', {
-      devDependencies: ['spec/**', 'test/**', 'tests/**', '**/__tests__/**'],
+      devDependencies: [
+        'spec/**',
+        'test/**',
+        'tests/**',
+        '**/__tests__/**',
+        '**/webpack.config.js',
+        '**/webpack.config.*.js',
+        '**/rollup.config.js',
+        '**/gulpfile.js',
+        '**/Gruntfile',
+      ],
       optionalDependencies: false,
     }],
 

From b73649925a43b05fc35a74de16f09df51d3370fc Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Wed, 9 Nov 2016 22:53:09 -0800
Subject: [PATCH 0910/1591] [guide] [react] add note that defaultProps must
 always be provided for non-required props

---
 react/README.md | 29 +++++++++++++++++++++++++++++
 1 file changed, 29 insertions(+)

diff --git a/react/README.md b/react/README.md
index 714eea947a..4bef241a24 100644
--- a/react/README.md
+++ b/react/README.md
@@ -337,6 +337,35 @@
   ))}
   ```
 
+  - Always define explicit defaultProps for all non-required props.
+
+  > Why? propTypes are a form of documentation, and providing defaultProps means the reader of your code doesn’t have to assume as much. In addition, it can mean that your code can omit certain type checks.
+
+  ```jsx
+  // bad
+  function SFC({ foo, bar, children }) {
+    return <div>{foo}{bar}{children}</div>;
+  }
+  SFC.propTypes = {
+    foo: PropTypes.number.isRequired,
+    bar: PropTypes.string,
+    children: PropTypes.node,
+  };
+
+  // good
+  function SFC({ foo, bar }) {
+    return <div>{foo}{bar}</div>;
+  }
+  SFC.propTypes = {
+    foo: PropTypes.number.isRequired,
+    bar: PropTypes.string,
+  };
+  SFC.defaultProps = {
+    bar: '',
+    children: null,
+  };
+  ```
+
 ## Refs
 
   - Always use ref callbacks. eslint: [`react/no-string-refs`](https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/no-string-refs.md)

From 72eb3e443e49da634a83b56660fbe56698775cbb Mon Sep 17 00:00:00 2001
From: ViZhe <vizhe.cat@ya.ru>
Date: Tue, 8 Nov 2016 19:35:36 +0300
Subject: [PATCH 0911/1591] [eslint config] [breaking] [deps] update
 `eslint-plugin-jsx-a11y` to v3

---
 packages/eslint-config-airbnb/package.json        | 4 ++--
 packages/eslint-config-airbnb/rules/react-a11y.js | 8 ++++----
 2 files changed, 6 insertions(+), 6 deletions(-)

diff --git a/packages/eslint-config-airbnb/package.json b/packages/eslint-config-airbnb/package.json
index 467267475d..0f688ca6a5 100644
--- a/packages/eslint-config-airbnb/package.json
+++ b/packages/eslint-config-airbnb/package.json
@@ -53,7 +53,7 @@
     "eslint": "^3.9.1",
     "eslint-find-rules": "^1.14.3",
     "eslint-plugin-import": "^2.1.0",
-    "eslint-plugin-jsx-a11y": "^2.2.3",
+    "eslint-plugin-jsx-a11y": "^3.0.1",
     "eslint-plugin-react": "^6.6.0",
     "in-publish": "^2.0.0",
     "react": ">= 0.13.0",
@@ -62,7 +62,7 @@
   },
   "peerDependencies": {
     "eslint": "^3.9.1",
-    "eslint-plugin-jsx-a11y": "^2.2.3",
+    "eslint-plugin-jsx-a11y": "^3.0.1",
     "eslint-plugin-import": "^2.1.0",
     "eslint-plugin-react": "^6.6.0"
   },
diff --git a/packages/eslint-config-airbnb/rules/react-a11y.js b/packages/eslint-config-airbnb/rules/react-a11y.js
index 1df39103ab..b101a93e5b 100644
--- a/packages/eslint-config-airbnb/rules/react-a11y.js
+++ b/packages/eslint-config-airbnb/rules/react-a11y.js
@@ -9,7 +9,7 @@ module.exports = {
   rules: {
     // Enforce that anchors have content
     // https://github.com/evcohen/eslint-plugin-jsx-a11y/blob/master/docs/rules/anchor-has-content.md
-    'jsx-a11y/anchor-has-content': ['error', ['']],
+    'jsx-a11y/anchor-has-content': ['error', { components: [''] }],
 
     // Require ARIA roles to be valid and non-abstract
     // https://github.com/evcohen/eslint-plugin-jsx-a11y/blob/master/docs/rules/aria-role.md
@@ -30,7 +30,7 @@ module.exports = {
 
     // disallow href "#"
     // https://github.com/evcohen/eslint-plugin-jsx-a11y/blob/master/docs/rules/href-no-hash.md
-    'jsx-a11y/href-no-hash': ['error', ['a']],
+    'jsx-a11y/href-no-hash': ['error', { components: ['a'] }],
 
     // Require <img> to have a non-empty `alt` prop, or role="presentation"
     // https://github.com/evcohen/eslint-plugin-jsx-a11y/blob/master/docs/rules/img-has-alt.md
@@ -42,7 +42,7 @@ module.exports = {
 
     // require that JSX labels use "htmlFor"
     // https://github.com/evcohen/eslint-plugin-jsx-a11y/blob/master/docs/rules/label-has-for.md
-    'jsx-a11y/label-has-for': ['error', ['label']],
+    'jsx-a11y/label-has-for': ['error', { components: ['label'] }],
 
     // require that mouseover/out come with focus/blur, for keyboard-only users
     // TODO: evaluate
@@ -82,7 +82,7 @@ module.exports = {
 
     // ensure <hX> tags have content and are not aria-hidden
     // https://github.com/evcohen/eslint-plugin-jsx-a11y/blob/master/docs/rules/heading-has-content.md
-    'jsx-a11y/heading-has-content': ['error', ['']],
+    'jsx-a11y/heading-has-content': ['error', { components: [''] }],
 
     // require HTML elements to have a "lang" prop
     // https://github.com/evcohen/eslint-plugin-jsx-a11y/blob/master/docs/rules/html-has-lang.md

From 25d03b8b67c5a77ab7a886939187460f4175a525 Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Mon, 14 Nov 2016 13:52:26 -0800
Subject: [PATCH 0912/1591] [eslint config] [*] [breaking] [deps] update
 `eslint`, `eslint-plugin-import`, `eslint-plugin-react`

---
 packages/eslint-config-airbnb-base/package.json      |  8 ++++----
 .../rules/best-practices.js                          |  3 +++
 packages/eslint-config-airbnb/package.json           | 12 ++++++------
 packages/eslint-config-airbnb/rules/react.js         | 10 +++++++++-
 4 files changed, 22 insertions(+), 11 deletions(-)

diff --git a/packages/eslint-config-airbnb-base/package.json b/packages/eslint-config-airbnb-base/package.json
index 7cde827bf3..fe729c4308 100644
--- a/packages/eslint-config-airbnb-base/package.json
+++ b/packages/eslint-config-airbnb-base/package.json
@@ -47,16 +47,16 @@
   "devDependencies": {
     "babel-preset-airbnb": "^2.1.1",
     "babel-tape-runner": "^2.0.1",
-    "eslint": "^3.9.1",
+    "eslint": "^3.10.1",
     "eslint-find-rules": "^1.14.3",
-    "eslint-plugin-import": "^2.1.0",
+    "eslint-plugin-import": "^2.2.0",
     "in-publish": "^2.0.0",
     "safe-publish-latest": "^1.1.1",
     "tape": "^4.6.2"
   },
   "peerDependencies": {
-    "eslint": "^3.9.1",
-    "eslint-plugin-import": "^2.1.0"
+    "eslint": "^3.10.1",
+    "eslint-plugin-import": "^2.2.0"
   },
   "engines": {
     "node": ">= 4"
diff --git a/packages/eslint-config-airbnb-base/rules/best-practices.js b/packages/eslint-config-airbnb-base/rules/best-practices.js
index f8cdc208d1..d909fbd5c3 100644
--- a/packages/eslint-config-airbnb-base/rules/best-practices.js
+++ b/packages/eslint-config-airbnb-base/rules/best-practices.js
@@ -195,6 +195,9 @@ module.exports = {
     // disallow use of assignment in return statement
     'no-return-assign': 'error',
 
+    // disallow redundant `return await`
+    'no-return-await': 'error',
+
     // disallow use of `javascript:` urls.
     'no-script-url': 'error',
 
diff --git a/packages/eslint-config-airbnb/package.json b/packages/eslint-config-airbnb/package.json
index 0f688ca6a5..235a39cfed 100644
--- a/packages/eslint-config-airbnb/package.json
+++ b/packages/eslint-config-airbnb/package.json
@@ -50,21 +50,21 @@
   "devDependencies": {
     "babel-preset-airbnb": "^2.1.1",
     "babel-tape-runner": "^2.0.1",
-    "eslint": "^3.9.1",
+    "eslint": "^3.10.1",
     "eslint-find-rules": "^1.14.3",
-    "eslint-plugin-import": "^2.1.0",
+    "eslint-plugin-import": "^2.2.0",
     "eslint-plugin-jsx-a11y": "^3.0.1",
-    "eslint-plugin-react": "^6.6.0",
+    "eslint-plugin-react": "^6.7.0",
     "in-publish": "^2.0.0",
     "react": ">= 0.13.0",
     "safe-publish-latest": "^1.1.1",
     "tape": "^4.6.2"
   },
   "peerDependencies": {
-    "eslint": "^3.9.1",
+    "eslint": "^3.10.1",
     "eslint-plugin-jsx-a11y": "^3.0.1",
-    "eslint-plugin-import": "^2.1.0",
-    "eslint-plugin-react": "^6.6.0"
+    "eslint-plugin-import": "^2.2.0",
+    "eslint-plugin-react": "^6.7.0"
   },
   "engines": {
     "node": ">= 4"
diff --git a/packages/eslint-config-airbnb/rules/react.js b/packages/eslint-config-airbnb/rules/react.js
index 262b30927c..50c4ba4d28 100644
--- a/packages/eslint-config-airbnb/rules/react.js
+++ b/packages/eslint-config-airbnb/rules/react.js
@@ -287,7 +287,15 @@ module.exports = {
 
     // Prevent passing of children as props
     // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/no-children-prop.md
-    'react/no-children-prop': 'error'
+    'react/no-children-prop': 'error',
+
+    // Validate whitespace in and around the JSX opening and closing brackets
+    // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/jsx-tag-spacing.md
+    'react/jsx-tag-spacing': ['error', {
+      closingSlash: 'never',
+      beforeSelfClosing: 'always',
+      afterOpening: 'never'
+    }],
   },
 
   settings: {

From 97da1f0f9d6fc5f592349317b296c74766d1d4ab Mon Sep 17 00:00:00 2001
From: Andrey Polischuk <andre.polischuk@gmail.com>
Date: Sat, 12 Nov 2016 14:32:05 +0300
Subject: [PATCH 0913/1591] [eslint config] [base] [patch] add
 `import/no-extraneous-dependencies` ignore patterns for test files

Fixes #1174
---
 packages/eslint-config-airbnb-base/rules/imports.js | 3 +++
 1 file changed, 3 insertions(+)

diff --git a/packages/eslint-config-airbnb-base/rules/imports.js b/packages/eslint-config-airbnb-base/rules/imports.js
index f1555aca7e..2eb76e8f98 100644
--- a/packages/eslint-config-airbnb-base/rules/imports.js
+++ b/packages/eslint-config-airbnb-base/rules/imports.js
@@ -73,6 +73,9 @@ module.exports = {
         'test/**',
         'tests/**',
         '**/__tests__/**',
+        'test.js',
+        'test-*.js',
+        '**/*.test.js',
         '**/webpack.config.js',
         '**/webpack.config.*.js',
         '**/rollup.config.js',

From f3f7124fcc7a97048f14148554219150cd0c76df Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Mon, 14 Nov 2016 17:58:12 -0800
Subject: [PATCH 0914/1591] [eslint config] [base] [patch]
 `import/no-extraneous-dependencies`: add some comments to ignore patterns.

---
 .../rules/imports.js                          | 24 +++++++++----------
 1 file changed, 12 insertions(+), 12 deletions(-)

diff --git a/packages/eslint-config-airbnb-base/rules/imports.js b/packages/eslint-config-airbnb-base/rules/imports.js
index 2eb76e8f98..59970d877f 100644
--- a/packages/eslint-config-airbnb-base/rules/imports.js
+++ b/packages/eslint-config-airbnb-base/rules/imports.js
@@ -69,18 +69,18 @@ module.exports = {
     // paths are treated both as absolute paths, and relative to process.cwd()
     'import/no-extraneous-dependencies': ['error', {
       devDependencies: [
-        'spec/**',
-        'test/**',
-        'tests/**',
-        '**/__tests__/**',
-        'test.js',
-        'test-*.js',
-        '**/*.test.js',
-        '**/webpack.config.js',
-        '**/webpack.config.*.js',
-        '**/rollup.config.js',
-        '**/gulpfile.js',
-        '**/Gruntfile',
+        'test/**', // tape, common npm pattern
+        'tests/**', // also common npm pattern
+        'spec/**', // mocha, rspec-like pattern
+        '**/__tests__/**', // jest pattern
+        'test.js', // repos with a single test file
+        'test-*.js', // repos with multiple top-level test files
+        '**/*.test.js', // tests where the extension denotes that it is a test
+        '**/webpack.config.js', // webpack config
+        '**/webpack.config.*.js', // webpack config
+        '**/rollup.config.js', // rollup config
+        '**/gulpfile.js', // gulp config
+        '**/Gruntfile', // grunt config
       ],
       optionalDependencies: false,
     }],

From 1ab6aaede9b146235d22b643d5f5076f7daa9b2e Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Fri, 18 Nov 2016 10:39:38 -0800
Subject: [PATCH 0915/1591] [eslint config] [*] [deps] update `eslint`,
 `eslint-plugin-react`

---
 packages/eslint-config-airbnb-base/package.json | 4 ++--
 packages/eslint-config-airbnb/package.json      | 8 ++++----
 2 files changed, 6 insertions(+), 6 deletions(-)

diff --git a/packages/eslint-config-airbnb-base/package.json b/packages/eslint-config-airbnb-base/package.json
index fe729c4308..07305d68cd 100644
--- a/packages/eslint-config-airbnb-base/package.json
+++ b/packages/eslint-config-airbnb-base/package.json
@@ -47,7 +47,7 @@
   "devDependencies": {
     "babel-preset-airbnb": "^2.1.1",
     "babel-tape-runner": "^2.0.1",
-    "eslint": "^3.10.1",
+    "eslint": "^3.10.2",
     "eslint-find-rules": "^1.14.3",
     "eslint-plugin-import": "^2.2.0",
     "in-publish": "^2.0.0",
@@ -55,7 +55,7 @@
     "tape": "^4.6.2"
   },
   "peerDependencies": {
-    "eslint": "^3.10.1",
+    "eslint": "^3.10.2",
     "eslint-plugin-import": "^2.2.0"
   },
   "engines": {
diff --git a/packages/eslint-config-airbnb/package.json b/packages/eslint-config-airbnb/package.json
index 235a39cfed..51d89c84d7 100644
--- a/packages/eslint-config-airbnb/package.json
+++ b/packages/eslint-config-airbnb/package.json
@@ -50,21 +50,21 @@
   "devDependencies": {
     "babel-preset-airbnb": "^2.1.1",
     "babel-tape-runner": "^2.0.1",
-    "eslint": "^3.10.1",
+    "eslint": "^3.10.2",
     "eslint-find-rules": "^1.14.3",
     "eslint-plugin-import": "^2.2.0",
     "eslint-plugin-jsx-a11y": "^3.0.1",
-    "eslint-plugin-react": "^6.7.0",
+    "eslint-plugin-react": "^6.7.1",
     "in-publish": "^2.0.0",
     "react": ">= 0.13.0",
     "safe-publish-latest": "^1.1.1",
     "tape": "^4.6.2"
   },
   "peerDependencies": {
-    "eslint": "^3.10.1",
+    "eslint": "^3.10.2",
     "eslint-plugin-jsx-a11y": "^3.0.1",
     "eslint-plugin-import": "^2.2.0",
-    "eslint-plugin-react": "^6.7.0"
+    "eslint-plugin-react": "^6.7.1"
   },
   "engines": {
     "node": ">= 4"

From 54aa8f1b3580d397b4ba77faa806e75e77705cb1 Mon Sep 17 00:00:00 2001
From: Giuseppe Burtini <giuseppeburtini@gmail.com>
Date: Mon, 29 Aug 2016 08:16:34 -0700
Subject: [PATCH 0916/1591] [guide] Fix no-interpolation template string
 example

The example showed a template string being used with no interpolation as "good". While it met the rule being described, it violated another rule for no reason.
---
 README.md | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/README.md b/README.md
index 95dc926d06..6c3db4c02d 100644
--- a/README.md
+++ b/README.md
@@ -565,7 +565,7 @@ Other Style Guides
 
     // good
     const foo = '\'this\' is "quoted"';
-    const foo = `'this' is "quoted"`;
+    const foo = `my name is '${name}'`;		
     ```
 
 **[⬆ back to top](#table-of-contents)**

From 664877a60149dbeb5065f5487d7ffcefc0158850 Mon Sep 17 00:00:00 2001
From: Joe Lencioni <joe.lencioni@airbnb.com>
Date: Thu, 1 Dec 2016 09:11:00 -0800
Subject: [PATCH 0917/1591] Avoid i++ in array spreads example

This style guide recommends using `i += 1` over `i++`. Even though this
appears in a "bad" example, the example will be clearest if it is "bad"
in fewer ways.
---
 README.md | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/README.md b/README.md
index 6c3db4c02d..04ef1903c2 100644
--- a/README.md
+++ b/README.md
@@ -350,7 +350,7 @@ Other Style Guides
     const itemsCopy = [];
     let i;
 
-    for (i = 0; i < len; i++) {
+    for (i = 0; i < len; i += 1) {
       itemsCopy[i] = items[i];
     }
 
@@ -565,7 +565,7 @@ Other Style Guides
 
     // good
     const foo = '\'this\' is "quoted"';
-    const foo = `my name is '${name}'`;		
+    const foo = `my name is '${name}'`;
     ```
 
 **[⬆ back to top](#table-of-contents)**

From 780be0dcd9df8942660f707c072ae3766493ac29 Mon Sep 17 00:00:00 2001
From: soulchainer <soulchainer@gmail.com>
Date: Sun, 4 Dec 2016 02:11:48 +0100
Subject: [PATCH 0918/1591] =?UTF-8?q?[guide][react]=20Add=20missing=20pare?=
 =?UTF-8?q?nthesis=20in=20=C2=ABRefs=C2=BB=20recommendation?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

As is, actual «good» usage fires the arrow-parens rule.
Parenthesis are needed to follow the current style guide.
---
 react/README.md | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/react/README.md b/react/README.md
index 4bef241a24..851e233302 100644
--- a/react/README.md
+++ b/react/README.md
@@ -378,7 +378,7 @@
 
     // good
     <Foo
-      ref={ref => { this.myRef = ref; }}
+      ref={(ref) => { this.myRef = ref; }}
     />
     ```
 

From 0b3b5a178fb32bfc60096738369e069c8cfcfa91 Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Tue, 6 Dec 2016 01:58:13 -0800
Subject: [PATCH 0919/1591] [eslint config] [base] [deps] update `eslint`,
 `tape`

---
 packages/eslint-config-airbnb-base/package.json   |  6 +++---
 .../rules/best-practices.js                       |  4 ++++
 packages/eslint-config-airbnb-base/rules/style.js | 15 +++++++++++++++
 3 files changed, 22 insertions(+), 3 deletions(-)

diff --git a/packages/eslint-config-airbnb-base/package.json b/packages/eslint-config-airbnb-base/package.json
index 07305d68cd..51c99818bb 100644
--- a/packages/eslint-config-airbnb-base/package.json
+++ b/packages/eslint-config-airbnb-base/package.json
@@ -47,15 +47,15 @@
   "devDependencies": {
     "babel-preset-airbnb": "^2.1.1",
     "babel-tape-runner": "^2.0.1",
-    "eslint": "^3.10.2",
+    "eslint": "^3.11.1",
     "eslint-find-rules": "^1.14.3",
     "eslint-plugin-import": "^2.2.0",
     "in-publish": "^2.0.0",
     "safe-publish-latest": "^1.1.1",
-    "tape": "^4.6.2"
+    "tape": "^4.6.3"
   },
   "peerDependencies": {
-    "eslint": "^3.10.2",
+    "eslint": "^3.11.1",
     "eslint-plugin-import": "^2.2.0"
   },
   "engines": {
diff --git a/packages/eslint-config-airbnb-base/rules/best-practices.js b/packages/eslint-config-airbnb-base/rules/best-practices.js
index d909fbd5c3..def0b9fb6f 100644
--- a/packages/eslint-config-airbnb-base/rules/best-practices.js
+++ b/packages/eslint-config-airbnb-base/rules/best-practices.js
@@ -256,6 +256,10 @@ module.exports = {
     // require use of the second argument for parseInt()
     radix: 'error',
 
+    // require `await` in `async function` (note: this is a horrible rule that should never be used)
+    // http://eslint.org/docs/rules/require-await
+    'require-await': 'off',
+
     // requires to declare all vars on top of their containing scope
     'vars-on-top': 'error',
 
diff --git a/packages/eslint-config-airbnb-base/rules/style.js b/packages/eslint-config-airbnb-base/rules/style.js
index 536cd5320b..9ea0f0f759 100644
--- a/packages/eslint-config-airbnb-base/rules/style.js
+++ b/packages/eslint-config-airbnb-base/rules/style.js
@@ -13,6 +13,21 @@ module.exports = {
     // require camel case names
     camelcase: ['error', { properties: 'never' }],
 
+    // enforce or disallow capitalization of the first letter of a comment
+    // http://eslint.org/docs/rules/capitalized-comments
+    'capitalized-comments': ['off', 'never', {
+      line: {
+        ignorePattern: '.*',
+        ignoreInlineComments: true,
+        ignoreConsecutiveComments: true,
+      },
+      block: {
+        ignorePattern: '.*',
+        ignoreInlineComments: true,
+        ignoreConsecutiveComments: true,
+      },
+    }],
+
     // enforce spacing before and after comma
     'comma-spacing': ['error', { before: false, after: true }],
 

From 243d824fb446b01feb0edcdcf567e44cf0d87827 Mon Sep 17 00:00:00 2001
From: alejandro garcia <agarcia@app-press.com>
Date: Wed, 7 Dec 2016 19:19:54 +0100
Subject: [PATCH 0920/1591] [guide] [react] Added react jsx guide in spanish

---
 react/README.md | 1 +
 1 file changed, 1 insertion(+)

diff --git a/react/README.md b/react/README.md
index 851e233302..419033de18 100644
--- a/react/README.md
+++ b/react/README.md
@@ -618,5 +618,6 @@
   - ![kr](https://raw.githubusercontent.com/gosquared/flags/master/flags/flags/shiny/24/South-Korea.png) **Korean**: [apple77y/javascript](https://github.com/apple77y/javascript/tree/master/react)
   - ![Br](https://raw.githubusercontent.com/gosquared/flags/master/flags/flags/shiny/24/Brazil.png) **Portuguese**: [ronal2do/javascript](https://github.com/ronal2do/airbnb-react-styleguide)
   - ![jp](https://raw.githubusercontent.com/gosquared/flags/master/flags/flags/shiny/24/Japan.png) **Japanese**: [mitsuruog/javascript-style-guide](https://github.com/mitsuruog/javascript-style-guide/tree/master/react)
+  - ![es](https://raw.githubusercontent.com/gosquared/flags/master/flags/flags/shiny/24/Spain.png) **Español**: [agrcrobles/javascript](https://github.com/agrcrobles/javascript/tree/master/react)
 
 **[⬆ back to top](#table-of-contents)**

From a56f239b953a11ce490c7f3d07f22cb3cbb58766 Mon Sep 17 00:00:00 2001
From: Kevin Boudot <kevin.boudot@gmail.com>
Date: Thu, 8 Dec 2016 15:29:06 +0100
Subject: [PATCH 0921/1591] [inthewild] Add Bonhomme

---
 README.md | 1 +
 1 file changed, 1 insertion(+)

diff --git a/README.md b/README.md
index 04ef1903c2..203feb1657 100644
--- a/README.md
+++ b/README.md
@@ -3135,6 +3135,7 @@ Other Style Guides
   - **Billabong**: [billabong/javascript](https://github.com/billabong/javascript)
   - **Bisk**: [bisk/javascript](https://github.com/Bisk/javascript/)
   - **Blendle**: [blendle/javascript](https://github.com/blendle/javascript)
+  - **Bonhomme**: [bonhommeparis/javascript](https://github.com/bonhommeparis/javascript)
   - **Brainshark**: [brainshark/javascript](https://github.com/brainshark/javascript)
   - **Chartboost**: [ChartBoost/javascript-style-guide](https://github.com/ChartBoost/javascript-style-guide)
   - **ComparaOnline**: [comparaonline/javascript](https://github.com/comparaonline/javascript-style-guide)

From 1df98256d0ea57049f118d4e8f83a493211bc9dd Mon Sep 17 00:00:00 2001
From: Sara Gudeman <sgudeman982@gmail.com>
Date: Fri, 9 Dec 2016 11:29:03 -0800
Subject: [PATCH 0922/1591] [guide] add map example to iterators

---
 README.md | 14 +++++++++++++-
 1 file changed, 13 insertions(+), 1 deletion(-)

diff --git a/README.md b/README.md
index 203feb1657..621f79fe39 100644
--- a/README.md
+++ b/README.md
@@ -1309,7 +1309,6 @@ Other Style Guides
     for (let num of numbers) {
       sum += num;
     }
-
     sum === 15;
 
     // good
@@ -1320,6 +1319,19 @@ Other Style Guides
     // best (use the functional force)
     const sum = numbers.reduce((total, num) => total + num, 0);
     sum === 15;
+
+    // bad
+    const modified = [];
+    for (let i = 0; i < numbers.length; i++) {
+      modified.push(numbers[i] + 1);
+    }
+
+    // good
+    const modified = [];
+    numbers.forEach(num => modified.push(num + 1));
+
+    // best (keeping it functional)
+    const modified = numbers.map(num => num + 1);
     ```
 
   <a name="generators--nope"></a><a name="11.2"></a>

From 4d68ddc4bb774584b50ca893887ef9219a41128a Mon Sep 17 00:00:00 2001
From: Eric Churchill <eric.churchill2@gmail.com>
Date: Sat, 10 Dec 2016 23:17:10 -0800
Subject: [PATCH 0923/1591] Change "modified" to "increasedByOne" to minimize
 ambiguity

---
 README.md | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/README.md b/README.md
index 621f79fe39..66ea1bd300 100644
--- a/README.md
+++ b/README.md
@@ -1321,17 +1321,17 @@ Other Style Guides
     sum === 15;
 
     // bad
-    const modified = [];
+    const increasedByOne = [];
     for (let i = 0; i < numbers.length; i++) {
       modified.push(numbers[i] + 1);
     }
 
     // good
-    const modified = [];
+    const increasedByOne = [];
     numbers.forEach(num => modified.push(num + 1));
 
     // best (keeping it functional)
-    const modified = numbers.map(num => num + 1);
+    const increasedByOne = numbers.map(num => num + 1);
     ```
 
   <a name="generators--nope"></a><a name="11.2"></a>

From 898a70e7fe90dd6239a09a445b5cf750d041c3fb Mon Sep 17 00:00:00 2001
From: Arturo Pie <arturotd08@yahoo.ca>
Date: Sun, 11 Dec 2016 11:42:07 -0500
Subject: [PATCH 0924/1591] [inthewild] Add Nulogy (https://nulogy.com/)

---
 README.md | 1 +
 1 file changed, 1 insertion(+)

diff --git a/README.md b/README.md
index 66ea1bd300..fe5be0921b 100644
--- a/README.md
+++ b/README.md
@@ -3188,6 +3188,7 @@ Other Style Guides
   - **National Geographic**: [natgeo/javascript](https://github.com/natgeo/javascript)
   - **National Park Service**: [nationalparkservice/javascript](https://github.com/nationalparkservice/javascript)
   - **Nimbl3**: [nimbl3/javascript](https://github.com/nimbl3/javascript)
+  - **Nulogy**: [nulogy/javascript](https://github.com/nulogy/javascript)
   - **Orion Health**: [orionhealth/javascript](https://github.com/orionhealth/javascript)
   - **OutBoxSoft**: [OutBoxSoft/javascript](https://github.com/OutBoxSoft/javascript)
   - **Peerby**: [Peerby/javascript](https://github.com/Peerby/javascript)

From e037d29b93e5b61434deb9ba485f76c6406b7cb3 Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Sun, 11 Dec 2016 10:44:37 -0800
Subject: [PATCH 0925/1591] [eslint config] [base] [deps] [breaking] update
 `eslint`; enable `no-await-in-loop`

---
 packages/eslint-config-airbnb-base/package.json    | 4 ++--
 packages/eslint-config-airbnb-base/rules/errors.js | 4 ++++
 2 files changed, 6 insertions(+), 2 deletions(-)

diff --git a/packages/eslint-config-airbnb-base/package.json b/packages/eslint-config-airbnb-base/package.json
index 51c99818bb..982d27bcd9 100644
--- a/packages/eslint-config-airbnb-base/package.json
+++ b/packages/eslint-config-airbnb-base/package.json
@@ -47,7 +47,7 @@
   "devDependencies": {
     "babel-preset-airbnb": "^2.1.1",
     "babel-tape-runner": "^2.0.1",
-    "eslint": "^3.11.1",
+    "eslint": "^3.12.0",
     "eslint-find-rules": "^1.14.3",
     "eslint-plugin-import": "^2.2.0",
     "in-publish": "^2.0.0",
@@ -55,7 +55,7 @@
     "tape": "^4.6.3"
   },
   "peerDependencies": {
-    "eslint": "^3.11.1",
+    "eslint": "^3.12.0",
     "eslint-plugin-import": "^2.2.0"
   },
   "engines": {
diff --git a/packages/eslint-config-airbnb-base/rules/errors.js b/packages/eslint-config-airbnb-base/rules/errors.js
index 1849e8db4d..bade2a1cec 100644
--- a/packages/eslint-config-airbnb-base/rules/errors.js
+++ b/packages/eslint-config-airbnb-base/rules/errors.js
@@ -9,6 +9,10 @@ module.exports = {
       functions: 'always-multiline',
     }],
 
+    // Disallow await inside of loops
+    // http://eslint.org/docs/rules/no-await-in-loop
+    'no-await-in-loop': 'error',
+
     // disallow assignment in conditional expressions
     'no-cond-assign': ['error', 'always'],
 

From 4a005b1322e8baecec4b4951ce8974af641922f9 Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Sun, 11 Dec 2016 23:03:53 -0800
Subject: [PATCH 0926/1591] [eslint config] [base] disable
 `no-duplicate-imports` rule - obsoleted by `import/no-duplicates`.

Closes #1188. Closes #1195. Closes #1054.
---
 packages/eslint-config-airbnb-base/rules/es6.js | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/packages/eslint-config-airbnb-base/rules/es6.js b/packages/eslint-config-airbnb-base/rules/es6.js
index 063ee2cfa5..ff90669dd0 100644
--- a/packages/eslint-config-airbnb-base/rules/es6.js
+++ b/packages/eslint-config-airbnb-base/rules/es6.js
@@ -55,7 +55,8 @@ module.exports = {
 
     // disallow importing from the same path more than once
     // http://eslint.org/docs/rules/no-duplicate-imports
-    'no-duplicate-imports': 'error',
+    // replaced by https://github.com/benmosher/eslint-plugin-import/blob/master/docs/rules/no-duplicates.md
+    'no-duplicate-imports': 'off',
 
     // disallow symbol constructor
     // http://eslint.org/docs/rules/no-new-symbol

From b178cf9be021c3eab1eac0124476054a4334ab90 Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Sun, 11 Dec 2016 23:09:49 -0800
Subject: [PATCH 0927/1591] [eslint config] [base] v11.0.0

---
 packages/eslint-config-airbnb-base/CHANGELOG.md | 9 +++++++++
 packages/eslint-config-airbnb-base/package.json | 2 +-
 2 files changed, 10 insertions(+), 1 deletion(-)

diff --git a/packages/eslint-config-airbnb-base/CHANGELOG.md b/packages/eslint-config-airbnb-base/CHANGELOG.md
index 1fa42086a7..2d1b1618a5 100644
--- a/packages/eslint-config-airbnb-base/CHANGELOG.md
+++ b/packages/eslint-config-airbnb-base/CHANGELOG.md
@@ -1,3 +1,12 @@
+11.0.0 / 2016-12-11
+==================
+ - [breaking] enable `no-await-in-loop`
+ - [patch]  disable `no-duplicate-imports` rule (#1188, #1195, #1054)
+ - [patch] `import/no-extraneous-dependencies`: add some comments to ignore patterns
+ - [patch] add `import/no-extraneous-dependencies` ignore patterns for test files (#1174)
+ - [patch] `import/no-extraneous-dependencies`: added ignore patterns for config files (#1168)
+ - [deps] update `eslint`, `eslint-plugin-import`, `tape`
+
 10.0.1 / 2016-11-07
 ==================
  - [fix] legacy config should not require `**`
diff --git a/packages/eslint-config-airbnb-base/package.json b/packages/eslint-config-airbnb-base/package.json
index 982d27bcd9..8a10a06b28 100644
--- a/packages/eslint-config-airbnb-base/package.json
+++ b/packages/eslint-config-airbnb-base/package.json
@@ -1,6 +1,6 @@
 {
   "name": "eslint-config-airbnb-base",
-  "version": "10.0.1",
+  "version": "11.0.0",
   "description": "Airbnb's base JS ESLint config, following our styleguide",
   "main": "index.js",
   "scripts": {

From 6c4456d354ad4c49923806c52f5f8412e6ca2952 Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Sun, 11 Dec 2016 23:16:12 -0800
Subject: [PATCH 0928/1591] [eslint config] [deps] update `eslint`,
 `eslint-plugin-react`, `tape`, `eslint-config-airbnb-base`

---
 packages/eslint-config-airbnb/package.json | 12 ++++++------
 1 file changed, 6 insertions(+), 6 deletions(-)

diff --git a/packages/eslint-config-airbnb/package.json b/packages/eslint-config-airbnb/package.json
index 51d89c84d7..92cb1365d4 100644
--- a/packages/eslint-config-airbnb/package.json
+++ b/packages/eslint-config-airbnb/package.json
@@ -45,26 +45,26 @@
   },
   "homepage": "https://github.com/airbnb/javascript",
   "dependencies": {
-    "eslint-config-airbnb-base": "^10.0.1"
+    "eslint-config-airbnb-base": "^11.0.0"
   },
   "devDependencies": {
     "babel-preset-airbnb": "^2.1.1",
     "babel-tape-runner": "^2.0.1",
-    "eslint": "^3.10.2",
+    "eslint": "^3.12.0",
     "eslint-find-rules": "^1.14.3",
     "eslint-plugin-import": "^2.2.0",
     "eslint-plugin-jsx-a11y": "^3.0.1",
-    "eslint-plugin-react": "^6.7.1",
+    "eslint-plugin-react": "^6.8.0",
     "in-publish": "^2.0.0",
     "react": ">= 0.13.0",
     "safe-publish-latest": "^1.1.1",
-    "tape": "^4.6.2"
+    "tape": "^4.6.3"
   },
   "peerDependencies": {
-    "eslint": "^3.10.2",
+    "eslint": "^3.12.0",
     "eslint-plugin-jsx-a11y": "^3.0.1",
     "eslint-plugin-import": "^2.2.0",
-    "eslint-plugin-react": "^6.7.1"
+    "eslint-plugin-react": "^6.8.0"
   },
   "engines": {
     "node": ">= 4"

From e1a307ae0a1eab781d310ead825b7e8f6c85d022 Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Sun, 11 Dec 2016 23:25:40 -0800
Subject: [PATCH 0929/1591] [eslint config] [breaking] enable
 `react/no-array-index-key`, `react/require-default-props`

---
 packages/eslint-config-airbnb/rules/react.js | 8 ++++++++
 1 file changed, 8 insertions(+)

diff --git a/packages/eslint-config-airbnb/rules/react.js b/packages/eslint-config-airbnb/rules/react.js
index 50c4ba4d28..ad717eab61 100644
--- a/packages/eslint-config-airbnb/rules/react.js
+++ b/packages/eslint-config-airbnb/rules/react.js
@@ -296,6 +296,14 @@ module.exports = {
       beforeSelfClosing: 'always',
       afterOpening: 'never'
     }],
+
+    // Prevent usage of Array index in keys
+    // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/no-array-index-key.md
+    'react/no-array-index-key': 'error',
+
+    // Enforce a defaultProps definition for every prop that is not a required prop
+    // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/require-default-props.md
+    'react/require-default-props': 'error',
   },
 
   settings: {

From 24f004027bfb97050c46a031e4291f84f58d5d2d Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Mon, 12 Dec 2016 14:33:55 -0800
Subject: [PATCH 0930/1591] [eslint config] [*] [deps] update `eslint`

---
 packages/eslint-config-airbnb-base/package.json | 4 ++--
 packages/eslint-config-airbnb/package.json      | 4 ++--
 2 files changed, 4 insertions(+), 4 deletions(-)

diff --git a/packages/eslint-config-airbnb-base/package.json b/packages/eslint-config-airbnb-base/package.json
index 8a10a06b28..6189f9e88f 100644
--- a/packages/eslint-config-airbnb-base/package.json
+++ b/packages/eslint-config-airbnb-base/package.json
@@ -47,7 +47,7 @@
   "devDependencies": {
     "babel-preset-airbnb": "^2.1.1",
     "babel-tape-runner": "^2.0.1",
-    "eslint": "^3.12.0",
+    "eslint": "^3.12.1",
     "eslint-find-rules": "^1.14.3",
     "eslint-plugin-import": "^2.2.0",
     "in-publish": "^2.0.0",
@@ -55,7 +55,7 @@
     "tape": "^4.6.3"
   },
   "peerDependencies": {
-    "eslint": "^3.12.0",
+    "eslint": "^3.12.1",
     "eslint-plugin-import": "^2.2.0"
   },
   "engines": {
diff --git a/packages/eslint-config-airbnb/package.json b/packages/eslint-config-airbnb/package.json
index 92cb1365d4..3caa6bcf67 100644
--- a/packages/eslint-config-airbnb/package.json
+++ b/packages/eslint-config-airbnb/package.json
@@ -50,7 +50,7 @@
   "devDependencies": {
     "babel-preset-airbnb": "^2.1.1",
     "babel-tape-runner": "^2.0.1",
-    "eslint": "^3.12.0",
+    "eslint": "^3.12.1",
     "eslint-find-rules": "^1.14.3",
     "eslint-plugin-import": "^2.2.0",
     "eslint-plugin-jsx-a11y": "^3.0.1",
@@ -61,7 +61,7 @@
     "tape": "^4.6.3"
   },
   "peerDependencies": {
-    "eslint": "^3.12.0",
+    "eslint": "^3.12.1",
     "eslint-plugin-jsx-a11y": "^3.0.1",
     "eslint-plugin-import": "^2.2.0",
     "eslint-plugin-react": "^6.8.0"

From e947cace2c998b2872c09fd59efa88ecb0188701 Mon Sep 17 00:00:00 2001
From: David Knaack <davidkna@users.noreply.github.com>
Date: Mon, 12 Dec 2016 17:49:00 +0100
Subject: [PATCH 0931/1591] [eslint config] [base] [patch] add gulpfile.*.js to
 import/no-extraneous-dependencies

Otherwise e.g. gulpfile.babel.js won't be matched
---
 packages/eslint-config-airbnb-base/rules/imports.js | 1 +
 1 file changed, 1 insertion(+)

diff --git a/packages/eslint-config-airbnb-base/rules/imports.js b/packages/eslint-config-airbnb-base/rules/imports.js
index 59970d877f..42706a506c 100644
--- a/packages/eslint-config-airbnb-base/rules/imports.js
+++ b/packages/eslint-config-airbnb-base/rules/imports.js
@@ -80,6 +80,7 @@ module.exports = {
         '**/webpack.config.*.js', // webpack config
         '**/rollup.config.js', // rollup config
         '**/gulpfile.js', // gulp config
+        '**/gulpfile.*.js', // gulp config
         '**/Gruntfile', // grunt config
       ],
       optionalDependencies: false,

From c30adcc60de1d8ae3448bac64ebc7058e929343c Mon Sep 17 00:00:00 2001
From: Simen Bekkhus <sbekkhus91@gmail.com>
Date: Sun, 2 Oct 2016 23:50:41 +0200
Subject: [PATCH 0932/1591] Add editorconfig

---
 .editorconfig                                    | 11 +++++++++++
 packages/eslint-config-airbnb-base/.editorconfig |  1 +
 packages/eslint-config-airbnb-base/package.json  |  2 ++
 packages/eslint-config-airbnb/.editorconfig      |  1 +
 packages/eslint-config-airbnb/package.json       |  2 ++
 5 files changed, 17 insertions(+)
 create mode 100644 .editorconfig
 create mode 120000 packages/eslint-config-airbnb-base/.editorconfig
 create mode 120000 packages/eslint-config-airbnb/.editorconfig

diff --git a/.editorconfig b/.editorconfig
new file mode 100644
index 0000000000..49c154da45
--- /dev/null
+++ b/.editorconfig
@@ -0,0 +1,11 @@
+root = true
+
+[*]
+indent_style = space
+indent_size = 2
+charset = utf-8
+trim_trailing_whitespace = true
+insert_final_newline = true
+end_of_line = lf
+# editorconfig-tools is unable to ignore longs strings or urls
+max_line_length = null
diff --git a/packages/eslint-config-airbnb-base/.editorconfig b/packages/eslint-config-airbnb-base/.editorconfig
new file mode 120000
index 0000000000..1b3ce07def
--- /dev/null
+++ b/packages/eslint-config-airbnb-base/.editorconfig
@@ -0,0 +1 @@
+../../.editorconfig
\ No newline at end of file
diff --git a/packages/eslint-config-airbnb-base/package.json b/packages/eslint-config-airbnb-base/package.json
index 6189f9e88f..3594335618 100644
--- a/packages/eslint-config-airbnb-base/package.json
+++ b/packages/eslint-config-airbnb-base/package.json
@@ -4,6 +4,7 @@
   "description": "Airbnb's base JS ESLint config, following our styleguide",
   "main": "index.js",
   "scripts": {
+    "prelint": "editorconfig-tools check * rules/* test/*",
     "lint": "eslint .",
     "tests-only": "babel-tape-runner ./test/test-*.js",
     "prepublish": "(in-install || eslint-find-rules --unused) && (not-in-publish || npm test) && safe-publish-latest",
@@ -47,6 +48,7 @@
   "devDependencies": {
     "babel-preset-airbnb": "^2.1.1",
     "babel-tape-runner": "^2.0.1",
+    "editorconfig-tools": "^0.1.1",
     "eslint": "^3.12.1",
     "eslint-find-rules": "^1.14.3",
     "eslint-plugin-import": "^2.2.0",
diff --git a/packages/eslint-config-airbnb/.editorconfig b/packages/eslint-config-airbnb/.editorconfig
new file mode 120000
index 0000000000..1b3ce07def
--- /dev/null
+++ b/packages/eslint-config-airbnb/.editorconfig
@@ -0,0 +1 @@
+../../.editorconfig
\ No newline at end of file
diff --git a/packages/eslint-config-airbnb/package.json b/packages/eslint-config-airbnb/package.json
index 3caa6bcf67..bb96633dfe 100644
--- a/packages/eslint-config-airbnb/package.json
+++ b/packages/eslint-config-airbnb/package.json
@@ -4,6 +4,7 @@
   "description": "Airbnb's ESLint config, following our styleguide",
   "main": "index.js",
   "scripts": {
+    "prelint": "editorconfig-tools check * rules/* test/*",
     "lint": "eslint .",
     "tests-only": "babel-tape-runner ./test/test-*.js",
     "prepublish": "(in-install || eslint-find-rules --unused) && (not-in-publish || npm test) && safe-publish-latest",
@@ -50,6 +51,7 @@
   "devDependencies": {
     "babel-preset-airbnb": "^2.1.1",
     "babel-tape-runner": "^2.0.1",
+    "editorconfig-tools": "^0.1.1",
     "eslint": "^3.12.1",
     "eslint-find-rules": "^1.14.3",
     "eslint-plugin-import": "^2.2.0",

From 019a6edaaaa6d0c4c69b9ef10870962c9279a9e0 Mon Sep 17 00:00:00 2001
From: woojoo666 <maxithewoowoo@gmail.com>
Date: Mon, 19 Dec 2016 07:24:50 -0800
Subject: [PATCH 0933/1591] [eslint config] [*] [docs] Updated instructions to
 support non-bash users

---
 packages/eslint-config-airbnb-base/README.md | 16 ++++++++++++++--
 packages/eslint-config-airbnb/README.md      |  9 ++++++++-
 2 files changed, 22 insertions(+), 3 deletions(-)

diff --git a/packages/eslint-config-airbnb-base/README.md b/packages/eslint-config-airbnb-base/README.md
index d293a8ad90..68fb1b1c03 100644
--- a/packages/eslint-config-airbnb-base/README.md
+++ b/packages/eslint-config-airbnb-base/README.md
@@ -12,7 +12,13 @@ We export two ESLint configurations for your usage.
 
 Our default export contains all of our ESLint rules, including ECMAScript 6+. It requires `eslint` and `eslint-plugin-import`.
 
-1. Ensure packages are installed with correct version numbers by running:
+1. Install the correct versions of each package, which are listed by the command:
+
+  ```sh
+  npm info "eslint-config-airbnb@latest" peerDependencies
+  ```
+
+  Linux/OSX users can simply run
   ```sh
   (
     export PKG=eslint-config-airbnb-base;
@@ -32,7 +38,13 @@ Our default export contains all of our ESLint rules, including ECMAScript 6+. It
 
 Lints ES5 and below. Requires `eslint` and `eslint-plugin-import`.
 
-1. Ensure packages are installed with correct version numbers by running:
+1. Install the correct versions of each package, which are listed by the command:
+
+  ```sh
+  npm info "eslint-config-airbnb@latest" peerDependencies
+  ```
+
+  Linux/OSX users can simply run
   ```sh
   (
     export PKG=eslint-config-airbnb-base;
diff --git a/packages/eslint-config-airbnb/README.md b/packages/eslint-config-airbnb/README.md
index 5014173d27..e8d66eca0c 100644
--- a/packages/eslint-config-airbnb/README.md
+++ b/packages/eslint-config-airbnb/README.md
@@ -12,7 +12,14 @@ We export three ESLint configurations for your usage.
 
 Our default export contains all of our ESLint rules, including ECMAScript 6+ and React. It requires `eslint`, `eslint-plugin-import`, `eslint-plugin-react`, and `eslint-plugin-jsx-a11y`.
 
-1. Ensure packages are installed with correct version numbers by running:
+1. Install the correct versions of each package, which are listed by the command:
+
+  ```sh
+  npm info "eslint-config-airbnb@latest" peerDependencies
+  ```
+
+  Linux/OSX users can simply run
+
   ```sh
   (
     export PKG=eslint-config-airbnb;

From 6eacbc2aad2d3c8d424b93861c5b6ea7ab44b3b5 Mon Sep 17 00:00:00 2001
From: Pedro Pablo Aste Kompen <wachunei@gmail.com>
Date: Wed, 21 Dec 2016 16:06:56 -0300
Subject: [PATCH 0934/1591] [guide] Fix chaining example to be consistent with
 string interpolation

---
 README.md | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/README.md b/README.md
index fe5be0921b..be89682471 100644
--- a/README.md
+++ b/README.md
@@ -2174,7 +2174,7 @@ Other Style Guides
     // bad
     const leds = stage.selectAll('.led').data(data).enter().append('svg:svg').classed('led', true)
         .attr('width', (radius + margin) * 2).append('svg:g')
-        .attr('transform', 'translate(' + (radius + margin) + ',' + (radius + margin) + ')')
+        .attr('transform', `translate(${radius + margin},${radius + margin})`)
         .call(tron.led);
 
     // good
@@ -2184,7 +2184,7 @@ Other Style Guides
         .classed('led', true)
         .attr('width', (radius + margin) * 2)
       .append('svg:g')
-        .attr('transform', 'translate(' + (radius + margin) + ',' + (radius + margin) + ')')
+        .attr('transform', `translate(${radius + margin},${radius + margin})`)
         .call(tron.led);
 
     // good

From c9edc92a800490b42d4aba07dfc5f52761876581 Mon Sep 17 00:00:00 2001
From: Giang Nguyen <nguyengiangdev@gmail.com>
Date: Fri, 23 Dec 2016 18:24:50 +0700
Subject: [PATCH 0935/1591] [guide] update vietnamese translation link

---
 README.md | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/README.md b/README.md
index be89682471..a64dd80df9 100644
--- a/README.md
+++ b/README.md
@@ -3235,7 +3235,7 @@ Other Style Guides
   - ![ru](https://raw.githubusercontent.com/gosquared/flags/master/flags/flags/shiny/24/Russia.png) **Russian**: [uprock/javascript](https://github.com/uprock/javascript)
   - ![es](https://raw.githubusercontent.com/gosquared/flags/master/flags/flags/shiny/24/Spain.png) **Spanish**: [paolocarrasco/javascript-style-guide](https://github.com/paolocarrasco/javascript-style-guide)
   - ![th](https://raw.githubusercontent.com/gosquared/flags/master/flags/flags/shiny/24/Thailand.png) **Thai**: [lvarayut/javascript-style-guide](https://github.com/lvarayut/javascript-style-guide)
-  - ![vn](https://raw.githubusercontent.com/gosquared/flags/master/flags/flags/shiny/24/Vietnam.png) **Vietnam**: [giangpii/javascript-style-guide](https://github.com/giangpii/javascript-style-guide)
+  - ![vn](https://raw.githubusercontent.com/gosquared/flags/master/flags/flags/shiny/24/Vietnam.png) **Vietnam**: [hngiang/javascript-style-guide](https://github.com/hngiang/javascript-style-guide)
 
 ## The JavaScript Style Guide Guide
 

From b7cc2dc89f1e3b3aa10288ca6c2178a564facb0c Mon Sep 17 00:00:00 2001
From: Maxim Samoilov <samoilowmaxim@gmail.com>
Date: Sun, 25 Dec 2016 06:27:52 +0300
Subject: [PATCH 0936/1591] [docs] Fix package name in
 eslint-config-airbnb-base

---
 packages/eslint-config-airbnb-base/README.md | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/packages/eslint-config-airbnb-base/README.md b/packages/eslint-config-airbnb-base/README.md
index 68fb1b1c03..a79376be85 100644
--- a/packages/eslint-config-airbnb-base/README.md
+++ b/packages/eslint-config-airbnb-base/README.md
@@ -15,7 +15,7 @@ Our default export contains all of our ESLint rules, including ECMAScript 6+. It
 1. Install the correct versions of each package, which are listed by the command:
 
   ```sh
-  npm info "eslint-config-airbnb@latest" peerDependencies
+  npm info "eslint-config-airbnb-base@latest" peerDependencies
   ```
 
   Linux/OSX users can simply run
@@ -41,7 +41,7 @@ Lints ES5 and below. Requires `eslint` and `eslint-plugin-import`.
 1. Install the correct versions of each package, which are listed by the command:
 
   ```sh
-  npm info "eslint-config-airbnb@latest" peerDependencies
+  npm info "eslint-config-airbnb-base@latest" peerDependencies
   ```
 
   Linux/OSX users can simply run

From c6b7c9ef94571bf458d4f7aae98806cfbdb55fc0 Mon Sep 17 00:00:00 2001
From: Kamron Batman <kamronbatman@users.noreply.github.com>
Date: Wed, 28 Dec 2016 11:57:14 -0800
Subject: [PATCH 0937/1591] [eslint config] [*] [deps] update `eslint`,
 `eslint-plugin-jsx-a11y`

---
 packages/eslint-config-airbnb-base/package.json | 4 ++--
 packages/eslint-config-airbnb/package.json      | 8 ++++----
 2 files changed, 6 insertions(+), 6 deletions(-)

diff --git a/packages/eslint-config-airbnb-base/package.json b/packages/eslint-config-airbnb-base/package.json
index 3594335618..256ef85084 100644
--- a/packages/eslint-config-airbnb-base/package.json
+++ b/packages/eslint-config-airbnb-base/package.json
@@ -49,7 +49,7 @@
     "babel-preset-airbnb": "^2.1.1",
     "babel-tape-runner": "^2.0.1",
     "editorconfig-tools": "^0.1.1",
-    "eslint": "^3.12.1",
+    "eslint": "^3.12.2",
     "eslint-find-rules": "^1.14.3",
     "eslint-plugin-import": "^2.2.0",
     "in-publish": "^2.0.0",
@@ -57,7 +57,7 @@
     "tape": "^4.6.3"
   },
   "peerDependencies": {
-    "eslint": "^3.12.1",
+    "eslint": "^3.12.2",
     "eslint-plugin-import": "^2.2.0"
   },
   "engines": {
diff --git a/packages/eslint-config-airbnb/package.json b/packages/eslint-config-airbnb/package.json
index bb96633dfe..a4d699bd02 100644
--- a/packages/eslint-config-airbnb/package.json
+++ b/packages/eslint-config-airbnb/package.json
@@ -52,10 +52,10 @@
     "babel-preset-airbnb": "^2.1.1",
     "babel-tape-runner": "^2.0.1",
     "editorconfig-tools": "^0.1.1",
-    "eslint": "^3.12.1",
+    "eslint": "^3.12.2",
     "eslint-find-rules": "^1.14.3",
     "eslint-plugin-import": "^2.2.0",
-    "eslint-plugin-jsx-a11y": "^3.0.1",
+    "eslint-plugin-jsx-a11y": "^3.0.2",
     "eslint-plugin-react": "^6.8.0",
     "in-publish": "^2.0.0",
     "react": ">= 0.13.0",
@@ -63,8 +63,8 @@
     "tape": "^4.6.3"
   },
   "peerDependencies": {
-    "eslint": "^3.12.1",
-    "eslint-plugin-jsx-a11y": "^3.0.1",
+    "eslint": "^3.12.2",
+    "eslint-plugin-jsx-a11y": "^3.0.2",
     "eslint-plugin-import": "^2.2.0",
     "eslint-plugin-react": "^6.8.0"
   },

From 6593964080c68e3b6d1975fc8c1b77c575933c3b Mon Sep 17 00:00:00 2001
From: Felix Sanz <me@felixsanz.com>
Date: Thu, 29 Dec 2016 02:25:03 +0100
Subject: [PATCH 0938/1591] Fixed Functions (7.1) JSCS rule

---
 README.md | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/README.md b/README.md
index a64dd80df9..2404cd5000 100644
--- a/README.md
+++ b/README.md
@@ -574,7 +574,7 @@ Other Style Guides
 ## Functions
 
   <a name="functions--declarations"></a><a name="7.1"></a>
-  - [7.1](#functions--declarations) Use named function expressions instead of function declarations. eslint: [`func-style`](http://eslint.org/docs/rules/func-style) jscs: [`requireFunctionDeclarations`](http://jscs.info/rule/requireFunctionDeclarations)
+  - [7.1](#functions--declarations) Use named function expressions instead of function declarations. eslint: [`func-style`](http://eslint.org/docs/rules/func-style) jscs: [`disallowFunctionDeclarations`](http://jscs.info/rule/disallowFunctionDeclarations)
 
     > Why? Function declarations are hoisted, which means that it’s easy - too easy - to reference the function before it is defined in the file. This harms readability and maintainability. If you find that a function’s definition is large or complex enough that it is interfering with understanding the rest of the file, then perhaps it’s time to extract it to its own module! Don’t forget to name the expression - anonymous functions can make it harder to locate the problem in an Error's call stack. ([Discussion](https://github.com/airbnb/javascript/issues/794))
 

From b48438141c799cd1cae6fa2a4f9ec303bbe810a9 Mon Sep 17 00:00:00 2001
From: Kamron Batman <kamronbatman@users.noreply.github.com>
Date: Wed, 28 Dec 2016 12:53:51 -0800
Subject: [PATCH 0939/1591] [inthewild] Adds BashPros

---
 README.md | 1 +
 1 file changed, 1 insertion(+)

diff --git a/README.md b/README.md
index 2404cd5000..b56f1b7401 100644
--- a/README.md
+++ b/README.md
@@ -3144,6 +3144,7 @@ Other Style Guides
   - **Ascribe**: [ascribe/javascript](https://github.com/ascribe/javascript)
   - **Avalara**: [avalara/javascript](https://github.com/avalara/javascript)
   - **Avant**: [avantcredit/javascript](https://github.com/avantcredit/javascript)
+  - **BashPros**: [BashPros/javascript](https://github.com/BashPros/javascript)
   - **Billabong**: [billabong/javascript](https://github.com/billabong/javascript)
   - **Bisk**: [bisk/javascript](https://github.com/Bisk/javascript/)
   - **Blendle**: [blendle/javascript](https://github.com/blendle/javascript)

From 266860b597a7b341d337f7f44195fac63b677ba2 Mon Sep 17 00:00:00 2001
From: nathanhleung <nathanhleung@users.noreply.github.com>
Date: Fri, 6 Jan 2017 17:04:28 -0500
Subject: [PATCH 0940/1591] [eslint config] [*] [docs] add note about
 `install-peerdeps`

Closes #1233.
---
 packages/eslint-config-airbnb-base/README.md | 13 +++++++++++++
 packages/eslint-config-airbnb/README.md      | 13 +++++++++++++
 2 files changed, 26 insertions(+)

diff --git a/packages/eslint-config-airbnb-base/README.md b/packages/eslint-config-airbnb-base/README.md
index a79376be85..4350a5dbd6 100644
--- a/packages/eslint-config-airbnb-base/README.md
+++ b/packages/eslint-config-airbnb-base/README.md
@@ -32,6 +32,19 @@ Our default export contains all of our ESLint rules, including ECMAScript 6+. It
     npm install --save-dev eslint-config-airbnb-base eslint@^#.#.# eslint-plugin-import@^#.#.#
   ```
 
+  Windows users can either install all the peer dependencies manually, or use the [install-peerdeps](https://github.com/nathanhleung/install-peerdeps) cli tool.
+
+  ```sh
+  npm install -g install-peerdeps
+  install-peerdeps --dev eslint-config-airbnb-base
+  ```
+
+  The cli will produce and run a command like:
+
+  ```sh
+  npm install --save-dev eslint-config-airbnb-base eslint@^#.#.# eslint-plugin-import@^#.#.#
+  ```
+
 2. Add `"extends": "airbnb-base"` to your .eslintrc
 
 ### eslint-config-airbnb-base/legacy
diff --git a/packages/eslint-config-airbnb/README.md b/packages/eslint-config-airbnb/README.md
index e8d66eca0c..122eaf2e7f 100644
--- a/packages/eslint-config-airbnb/README.md
+++ b/packages/eslint-config-airbnb/README.md
@@ -33,6 +33,19 @@ Our default export contains all of our ESLint rules, including ECMAScript 6+ and
   npm install --save-dev eslint-config-airbnb eslint@^#.#.# eslint-plugin-jsx-a11y@^#.#.# eslint-plugin-import@^#.#.# eslint-plugin-react@^#.#.#
   ```
 
+  Windows users can either install all the peer dependencies manually, or use the [install-peerdeps](https://github.com/nathanhleung/install-peerdeps) cli tool.
+
+  ```sh
+  npm install -g install-peerdeps
+  install-peerdeps --dev eslint-config-airbnb
+  ```
+
+  The cli will produce and run a command like:
+
+  ```sh
+  npm install --save-dev eslint-config-airbnb eslint@^#.#.# eslint-plugin-jsx-a11y@^#.#.# eslint-plugin-import@^#.#.# eslint-plugin-react@^#.#.#
+  ```
+
 2. Add `"extends": "airbnb"` to your .eslintrc
 
 ### eslint-config-airbnb/base

From 097047202edd77b40d473aef1c648aef034f1863 Mon Sep 17 00:00:00 2001
From: Ricardo Ambrogi <ricardo.ambrogi@gmail.com>
Date: Sun, 8 Jan 2017 11:19:15 -0200
Subject: [PATCH 0941/1591] [guide] fix Array name in examples

---
 README.md | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/README.md b/README.md
index b56f1b7401..873a0a3ee4 100644
--- a/README.md
+++ b/README.md
@@ -1323,12 +1323,12 @@ Other Style Guides
     // bad
     const increasedByOne = [];
     for (let i = 0; i < numbers.length; i++) {
-      modified.push(numbers[i] + 1);
+      increasedByOne.push(numbers[i] + 1);
     }
 
     // good
     const increasedByOne = [];
-    numbers.forEach(num => modified.push(num + 1));
+    numbers.forEach(num => increasedByOne.push(num + 1));
 
     // best (keeping it functional)
     const increasedByOne = numbers.map(num => num + 1);

From 7e865a4e8ab5e26062fcdc9437166c6e1c269599 Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Sun, 8 Jan 2017 14:55:09 -0800
Subject: [PATCH 0942/1591] [eslint config] [base] [deps] update `eslint`

---
 packages/eslint-config-airbnb-base/package.json |  4 ++--
 packages/eslint-config-airbnb-base/rules/es6.js | 10 ++++++++++
 2 files changed, 12 insertions(+), 2 deletions(-)

diff --git a/packages/eslint-config-airbnb-base/package.json b/packages/eslint-config-airbnb-base/package.json
index 256ef85084..055228843f 100644
--- a/packages/eslint-config-airbnb-base/package.json
+++ b/packages/eslint-config-airbnb-base/package.json
@@ -49,7 +49,7 @@
     "babel-preset-airbnb": "^2.1.1",
     "babel-tape-runner": "^2.0.1",
     "editorconfig-tools": "^0.1.1",
-    "eslint": "^3.12.2",
+    "eslint": "^3.13.0",
     "eslint-find-rules": "^1.14.3",
     "eslint-plugin-import": "^2.2.0",
     "in-publish": "^2.0.0",
@@ -57,7 +57,7 @@
     "tape": "^4.6.3"
   },
   "peerDependencies": {
-    "eslint": "^3.12.2",
+    "eslint": "^3.13.0",
     "eslint-plugin-import": "^2.2.0"
   },
   "engines": {
diff --git a/packages/eslint-config-airbnb-base/rules/es6.js b/packages/eslint-config-airbnb-base/rules/es6.js
index ff90669dd0..8b7ac24d14 100644
--- a/packages/eslint-config-airbnb-base/rules/es6.js
+++ b/packages/eslint-config-airbnb-base/rules/es6.js
@@ -108,6 +108,16 @@ module.exports = {
       ignoreReadBeforeAssign: true,
     }],
 
+    // Prefer destructuring from arrays and objects
+    // http://eslint.org/docs/rules/prefer-destructuring
+    // TODO: enable
+    'prefer-destructuring': ['off', {
+      array: true,
+      object: true,
+    }, {
+      enforceForRenamedProperties: false,
+    }],
+
     // disallow parseInt() in favor of binary, octal, and hexadecimal literals
     // http://eslint.org/docs/rules/prefer-numeric-literals
     'prefer-numeric-literals': 'error',

From 7963b97438d7a5d8c82af4f267528b7be912d736 Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Sun, 8 Jan 2017 15:00:08 -0800
Subject: [PATCH 0943/1591] [eslint config] [base] v11.0.1

---
 packages/eslint-config-airbnb-base/CHANGELOG.md | 6 ++++++
 packages/eslint-config-airbnb-base/package.json | 2 +-
 2 files changed, 7 insertions(+), 1 deletion(-)

diff --git a/packages/eslint-config-airbnb-base/CHANGELOG.md b/packages/eslint-config-airbnb-base/CHANGELOG.md
index 2d1b1618a5..58bc3468b8 100644
--- a/packages/eslint-config-airbnb-base/CHANGELOG.md
+++ b/packages/eslint-config-airbnb-base/CHANGELOG.md
@@ -1,3 +1,9 @@
+11.0.1 / 2017-01-08
+==================
+ - [deps] update `eslint`
+ - [docs] add note about `install-peerdeps` (#1234)
+ - [docs] Updated instructions to support non-bash users (#1214)
+
 11.0.0 / 2016-12-11
 ==================
  - [breaking] enable `no-await-in-loop`
diff --git a/packages/eslint-config-airbnb-base/package.json b/packages/eslint-config-airbnb-base/package.json
index 055228843f..b6e3da2c6c 100644
--- a/packages/eslint-config-airbnb-base/package.json
+++ b/packages/eslint-config-airbnb-base/package.json
@@ -1,6 +1,6 @@
 {
   "name": "eslint-config-airbnb-base",
-  "version": "11.0.0",
+  "version": "11.0.1",
   "description": "Airbnb's base JS ESLint config, following our styleguide",
   "main": "index.js",
   "scripts": {

From 7ec81d2a9457bad1db0bf5b9cc17599a47b5bd17 Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Sun, 8 Jan 2017 14:57:32 -0800
Subject: [PATCH 0944/1591] [eslint config] [deps] update `eslint`,
 `eslint-plugin-react`, `eslint-config-airbnb-base`

---
 packages/eslint-config-airbnb/package.json | 10 +++++-----
 1 file changed, 5 insertions(+), 5 deletions(-)

diff --git a/packages/eslint-config-airbnb/package.json b/packages/eslint-config-airbnb/package.json
index a4d699bd02..526b74d98f 100644
--- a/packages/eslint-config-airbnb/package.json
+++ b/packages/eslint-config-airbnb/package.json
@@ -46,27 +46,27 @@
   },
   "homepage": "https://github.com/airbnb/javascript",
   "dependencies": {
-    "eslint-config-airbnb-base": "^11.0.0"
+    "eslint-config-airbnb-base": "^11.0.1"
   },
   "devDependencies": {
     "babel-preset-airbnb": "^2.1.1",
     "babel-tape-runner": "^2.0.1",
     "editorconfig-tools": "^0.1.1",
-    "eslint": "^3.12.2",
+    "eslint": "^3.13.0",
     "eslint-find-rules": "^1.14.3",
     "eslint-plugin-import": "^2.2.0",
     "eslint-plugin-jsx-a11y": "^3.0.2",
-    "eslint-plugin-react": "^6.8.0",
+    "eslint-plugin-react": "^6.9.0",
     "in-publish": "^2.0.0",
     "react": ">= 0.13.0",
     "safe-publish-latest": "^1.1.1",
     "tape": "^4.6.3"
   },
   "peerDependencies": {
-    "eslint": "^3.12.2",
+    "eslint": "^3.13.0",
     "eslint-plugin-jsx-a11y": "^3.0.2",
     "eslint-plugin-import": "^2.2.0",
-    "eslint-plugin-react": "^6.8.0"
+    "eslint-plugin-react": "^6.9.0"
   },
   "engines": {
     "node": ">= 4"

From 846d687936fa68f3fdf213f724719f01bfe97cdf Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Sun, 8 Jan 2017 15:19:26 -0800
Subject: [PATCH 0945/1591] [eslint config] v14.0.0

---
 packages/eslint-config-airbnb/CHANGELOG.md | 8 ++++++++
 packages/eslint-config-airbnb/package.json | 2 +-
 2 files changed, 9 insertions(+), 1 deletion(-)

diff --git a/packages/eslint-config-airbnb/CHANGELOG.md b/packages/eslint-config-airbnb/CHANGELOG.md
index b2cb3456c9..e3025d5a28 100644
--- a/packages/eslint-config-airbnb/CHANGELOG.md
+++ b/packages/eslint-config-airbnb/CHANGELOG.md
@@ -1,3 +1,11 @@
+14.0.0 / 2017-01-08
+==================
+- [breaking] enable `react/no-array-index-key`, `react/require-default-props`
+- [breaking] [deps] update `eslint`, `eslint-plugin-import`, `eslint-plugin-react`, `eslint-config-airbnb-base`
+- [breaking] [deps] update `eslint-plugin-jsx-a11y` to v3 (#1166)
+- [docs] add note about `install-peerdeps` (#1234)
+- [docs] Updated instructions to support non-bash users (#1214)
+
 13.0.0 / 2016-11-06
 ==================
 - [breaking] Enable `import/no-webpack-loader-syntax` rule (#1123)
diff --git a/packages/eslint-config-airbnb/package.json b/packages/eslint-config-airbnb/package.json
index 526b74d98f..ce821f90b3 100644
--- a/packages/eslint-config-airbnb/package.json
+++ b/packages/eslint-config-airbnb/package.json
@@ -1,6 +1,6 @@
 {
   "name": "eslint-config-airbnb",
-  "version": "13.0.0",
+  "version": "14.0.0",
   "description": "Airbnb's ESLint config, following our styleguide",
   "main": "index.js",
   "scripts": {

From 2df021eb8398de90ce5f3e02b2623e559e38e0e7 Mon Sep 17 00:00:00 2001
From: Ivan Zusko <IvanZusko@ecenglish.com>
Date: Wed, 4 Jan 2017 10:58:43 +0200
Subject: [PATCH 0946/1591] [guide] [react] Added React/JSX Style Guide in
 Ukrainian

---
 react/README.md | 1 +
 1 file changed, 1 insertion(+)

diff --git a/react/README.md b/react/README.md
index 419033de18..0264768f3f 100644
--- a/react/README.md
+++ b/react/README.md
@@ -619,5 +619,6 @@
   - ![Br](https://raw.githubusercontent.com/gosquared/flags/master/flags/flags/shiny/24/Brazil.png) **Portuguese**: [ronal2do/javascript](https://github.com/ronal2do/airbnb-react-styleguide)
   - ![jp](https://raw.githubusercontent.com/gosquared/flags/master/flags/flags/shiny/24/Japan.png) **Japanese**: [mitsuruog/javascript-style-guide](https://github.com/mitsuruog/javascript-style-guide/tree/master/react)
   - ![es](https://raw.githubusercontent.com/gosquared/flags/master/flags/flags/shiny/24/Spain.png) **Español**: [agrcrobles/javascript](https://github.com/agrcrobles/javascript/tree/master/react)
+  - ![ua](https://raw.githubusercontent.com/gosquared/flags/master/flags/flags/shiny/24/Ukraine.png) **Ukrainian**: [ivanzusko/javascript](https://github.com/ivanzusko/javascript/tree/master/react)
 
 **[⬆ back to top](#table-of-contents)**

From b7aabb938d20f61ba3d617f473dc9006e6e48a59 Mon Sep 17 00:00:00 2001
From: Jeff Cousins <jeffcousins@me.com>
Date: Mon, 9 Jan 2017 17:10:10 -0600
Subject: [PATCH 0947/1591] Add semicolon to named function expression variable
 declaration

---
 README.md | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/README.md b/README.md
index 873a0a3ee4..3667c6128e 100644
--- a/README.md
+++ b/README.md
@@ -1671,7 +1671,7 @@ Other Style Guides
 
       var named = function named() {
         console.log('named');
-      }
+      };
     }
     ```
 

From d892cc9117c08f14e58a544a0556cc7147023b7d Mon Sep 17 00:00:00 2001
From: Wooram Jun <chatii2412@gmail.com>
Date: Tue, 10 Jan 2017 20:33:04 +0900
Subject: [PATCH 0948/1591] [eslint config] [base] Update a deprecated option

---
 packages/eslint-config-airbnb-base/rules/best-practices.js | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/packages/eslint-config-airbnb-base/rules/best-practices.js b/packages/eslint-config-airbnb-base/rules/best-practices.js
index def0b9fb6f..5d35f67431 100644
--- a/packages/eslint-config-airbnb-base/rules/best-practices.js
+++ b/packages/eslint-config-airbnb-base/rules/best-practices.js
@@ -37,7 +37,7 @@ module.exports = {
 
     // require the use of === and !==
     // http://eslint.org/docs/rules/eqeqeq
-    eqeqeq: ['error', 'allow-null'],
+    eqeqeq: ['error', 'always', { null: 'ignore' }],
 
     // make sure for-in loops have an if statement
     'guard-for-in': 'error',

From 73e27ef03624fdaeb44033d17015858379967302 Mon Sep 17 00:00:00 2001
From: Greg Werner <gwerner@3blades.io>
Date: Tue, 10 Jan 2017 23:27:55 -0500
Subject: [PATCH 0949/1591] add 3blades reference

---
 README.md | 1 +
 1 file changed, 1 insertion(+)

diff --git a/README.md b/README.md
index 3667c6128e..4e84dd550b 100644
--- a/README.md
+++ b/README.md
@@ -3136,6 +3136,7 @@ Other Style Guides
 
   This is a list of organizations that are using this style guide. Send us a pull request and we'll add you to the list.
 
+  - **3blades**: [3Blades/javascript](https://github.com/3blades/javascript)
   - **4Catalyzer**: [4Catalyzer/javascript](https://github.com/4Catalyzer/javascript)
   - **Aan Zee**: [AanZee/javascript](https://github.com/AanZee/javascript)
   - **Adult Swim**: [adult-swim/javascript](https://github.com/adult-swim/javascript)

From 712e010f2921237113bf6af6f9131302092d785f Mon Sep 17 00:00:00 2001
From: oshalygin <oshalygin@gmail.com>
Date: Wed, 11 Jan 2017 15:36:59 -0800
Subject: [PATCH 0950/1591] Update common function body comment

- This commit provides a canonical way of describing
  that the function body contains code of some sort.
- The convention chosen was '// ...'.
- This change is persisted throughout the readme file
  where appropriate
---
 README.md | 73 ++++++++++++++++++++++++++++++++++++++-----------------
 1 file changed, 51 insertions(+), 22 deletions(-)

diff --git a/README.md b/README.md
index 4e84dd550b..639a62e550 100644
--- a/README.md
+++ b/README.md
@@ -581,14 +581,17 @@ Other Style Guides
     ```javascript
     // bad
     const foo = function () {
+      // ...
     };
 
     // bad
     function foo() {
+      // ...
     }
 
     // good
     const foo = function bar() {
+      // ...
     };
     ```
 
@@ -632,13 +635,13 @@ Other Style Guides
 
     ```javascript
     // bad
-    function nope(name, options, arguments) {
-      // ...stuff...
+    function foo(name, options, arguments) {
+      // ...
     }
 
     // good
-    function yup(name, options, args) {
-      // ...stuff...
+    function foo(name, options, args) {
+      // ...
     }
     ```
 
@@ -774,18 +777,22 @@ Other Style Guides
     // bad
     function f1(a) {
       a = 1;
+      // ...
     }
 
     function f2(a) {
       if (!a) { a = 1; }
+      // ...
     }
 
     // good
     function f3(a) {
       const b = a || 1;
+      // ...
     }
 
     function f4(a = 1) {
+      // ...
     }
     ```
 
@@ -818,7 +825,7 @@ Other Style Guides
     function foo(bar,
                  baz,
                  quux) {
-      // body
+      // ...
     }
 
     // good
@@ -827,7 +834,7 @@ Other Style Guides
       baz,
       quux,
     ) {
-      // body
+      // ...
     }
 
     // bad
@@ -1347,39 +1354,56 @@ Other Style Guides
     ```js
     // bad
     function * foo() {
+      // ...
     }
 
+    // bad
     const bar = function * () {
+      // ...
     }
 
+    // bad
     const baz = function *() {
+      // ...
     }
 
+    // bad
     const quux = function*() {
+      // ...
     }
 
+    // bad
     function*foo() {
+      // ...
     }
 
+    // bad
     function *foo() {
+      // ...
     }
 
     // very bad
     function
     *
     foo() {
+      // ...
     }
 
+    // very bad
     const wat = function
     *
     () {
+      // ...
     }
 
     // good
     function* foo() {
+      // ...
     }
 
+    // good
     const foo = function* () {
+      // ...
     }
     ```
 
@@ -1721,32 +1745,32 @@ Other Style Guides
     ```javascript
     // bad
     if (isValid === true) {
-      // ...stuff...
+      // ...
     }
 
     // good
     if (isValid) {
-      // ...stuff...
+      // ...
     }
 
     // bad
     if (name) {
-      // ...stuff...
+      // ...
     }
 
     // good
     if (name !== '') {
-      // ...stuff...
+      // ...
     }
 
     // bad
     if (collection.length) {
-      // ...stuff...
+      // ...
     }
 
     // good
     if (collection.length > 0) {
-      // ...stuff...
+      // ...
     }
     ```
 
@@ -1770,7 +1794,9 @@ Other Style Guides
         const y = 2;
         break;
       case 3:
-        function f() {}
+        function f() {
+          // ...
+        }
         break;
       default:
         class C {}
@@ -1787,7 +1813,9 @@ Other Style Guides
         break;
       }
       case 3: {
-        function f() {}
+        function f() {
+          // ...
+        }
         break;
       }
       case 4:
@@ -1910,7 +1938,7 @@ Other Style Guides
     // @return {Element} element
     function make(tag) {
 
-      // ...stuff...
+      // ...
 
       return element;
     }
@@ -1922,7 +1950,7 @@ Other Style Guides
      */
     function make(tag) {
 
-      // ...stuff...
+      // ...
 
       return element;
     }
@@ -1985,7 +2013,7 @@ Other Style Guides
      */
     function make(tag) {
 
-      // ...stuff...
+      // ...
 
       return element;
     }
@@ -1997,7 +2025,7 @@ Other Style Guides
      */
     function make(tag) {
 
-      // ...stuff...
+      // ...
 
       return element;
     }
@@ -2624,12 +2652,12 @@ Other Style Guides
     ```javascript
     // bad
     function q() {
-      // ...stuff...
+      // ...
     }
 
     // good
     function query() {
-      // ..stuff..
+      // ...
     }
     ```
 
@@ -2756,6 +2784,7 @@ Other Style Guides
 
     ```javascript
     function makeStyleGuide() {
+      // ...
     }
 
     export default makeStyleGuide;
@@ -2933,7 +2962,7 @@ Other Style Guides
     function setSidebar() {
       $('.sidebar').hide();
 
-      // ...stuff...
+      // ...
 
       $('.sidebar').css({
         'background-color': 'pink'
@@ -2945,7 +2974,7 @@ Other Style Guides
       const $sidebar = $('.sidebar');
       $sidebar.hide();
 
-      // ...stuff...
+      // ...
 
       $sidebar.css({
         'background-color': 'pink'

From b06c5c6621942f512ceac6150be93d79c7dfd3ba Mon Sep 17 00:00:00 2001
From: Olivier Tassinari <olivier.tassinari@gmail.com>
Date: Sun, 15 Jan 2017 12:39:30 +0100
Subject: [PATCH 0951/1591] Avoid octal number interpretation

Some JavaScript versions interpret numbers as octal if they are written with a leading zero.
Babel interpreter throws with an `Invalid number` message.
---
 README.md | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/README.md b/README.md
index 639a62e550..6428f82088 100644
--- a/README.md
+++ b/README.md
@@ -811,10 +811,10 @@ Other Style Guides
     console.log(...x);
 
     // bad
-    new (Function.prototype.bind.apply(Date, [null, 2016, 08, 05]));
+    new (Function.prototype.bind.apply(Date, [null, 2016, 8, 5]));
 
     // good
-    new Date(...[2016, 08, 05]);
+    new Date(...[2016, 8, 5]);
     ```
 
   <a name="functions--signature-invocation-indentation"></a>

From a6a6f4b488806edec59cd92b97f6a0680091474c Mon Sep 17 00:00:00 2001
From: Christian Oliff <christianoliff@yahoo.com>
Date: Tue, 17 Jan 2017 17:09:27 +0900
Subject: [PATCH 0952/1591] Update copyright year

---
 README.md | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/README.md b/README.md
index 6428f82088..dc2e8fe9d7 100644
--- a/README.md
+++ b/README.md
@@ -3285,7 +3285,7 @@ Other Style Guides
 
 (The MIT License)
 
-Copyright (c) 2014-2016 Airbnb
+Copyright (c) 2014-2017 Airbnb
 
 Permission is hereby granted, free of charge, to any person obtaining
 a copy of this software and associated documentation files (the

From cdbe705fc486cb8e18b8cd8a6723fc17326dd521 Mon Sep 17 00:00:00 2001
From: Irving Barajas <irvingb232@gmail.com>
Date: Wed, 18 Jan 2017 18:32:23 -0800
Subject: [PATCH 0953/1591] [inthewild] Adds SwoopApp

---
 README.md | 1 +
 1 file changed, 1 insertion(+)

diff --git a/README.md b/README.md
index dc2e8fe9d7..9edd321c29 100644
--- a/README.md
+++ b/README.md
@@ -3234,6 +3234,7 @@ Other Style Guides
   - **StratoDem Analytics**: [stratodem/javascript](https://github.com/stratodem/javascript)
   - **SteelKiwi Development**: [steelkiwi/javascript](https://github.com/steelkiwi/javascript)
   - **StudentSphere**: [studentsphere/javascript](https://github.com/studentsphere/guide-javascript)
+  - **SwoopApp**: [swoopapp/javascript](https://github.com/swoopapp/javascript)
   - **SysGarage**: [sysgarage/javascript-style-guide](https://github.com/sysgarage/javascript-style-guide)
   - **Syzygy Warsaw**: [syzygypl/javascript](https://github.com/syzygypl/javascript)
   - **Target**: [target/javascript](https://github.com/target/javascript)

From 40d5797b353354265d8a32c943cb6958f1b60749 Mon Sep 17 00:00:00 2001
From: Harkirat Saluja <saluja.harkirat@gmail.com>
Date: Tue, 17 Jan 2017 14:59:41 +0530
Subject: [PATCH 0954/1591] [guide] [react] Add missing trailing comma

---
 react/README.md | 1 +
 1 file changed, 1 insertion(+)

diff --git a/react/README.md b/react/README.md
index 0264768f3f..9401b72596 100644
--- a/react/README.md
+++ b/react/README.md
@@ -359,6 +359,7 @@
   SFC.propTypes = {
     foo: PropTypes.number.isRequired,
     bar: PropTypes.string,
+    children: PropTypes.node,
   };
   SFC.defaultProps = {
     bar: '',

From d8c3048f247f3d7cb0d3bf27d901bd5819ef9ce3 Mon Sep 17 00:00:00 2001
From: Vse Mozhet Byt <vsemozhetbyt@gmail.com>
Date: Wed, 18 Jan 2017 06:56:07 +0200
Subject: [PATCH 0955/1591] [guide] ```js -> ```javascript for consistency

---
 README.md | 8 ++++----
 1 file changed, 4 insertions(+), 4 deletions(-)

diff --git a/README.md b/README.md
index 9edd321c29..aa38130a80 100644
--- a/README.md
+++ b/README.md
@@ -907,7 +907,7 @@ Other Style Guides
 
     > Why? It shows clearly where the function starts and ends.
 
-    ```js
+    ```javascript
     // bad
     ['get', 'post', 'put'].map(httpMethod => Object.prototype.hasOwnProperty.call(
         httpMagicObjectWithAVeryLongName,
@@ -929,7 +929,7 @@ Other Style Guides
 
     > Why? Less visual clutter.
 
-    ```js
+    ```javascript
     // bad
     [1, 2, 3].map((x) => x * x);
 
@@ -957,7 +957,7 @@ Other Style Guides
   <a name="arrows--confusing"></a><a name="8.5"></a>
   - [8.5](#arrows--confusing) Avoid confusing arrow function syntax (`=>`) with comparison operators (`<=`, `>=`). eslint: [`no-confusing-arrow`](http://eslint.org/docs/rules/no-confusing-arrow)
 
-    ```js
+    ```javascript
     // bad
     const itemHeight = item => item.height > 256 ? item.largeSize : item.smallSize;
 
@@ -1351,7 +1351,7 @@ Other Style Guides
 
     > Why? `function` and `*` are part of the same conceptual keyword - `*` is not a modifier for `function`, `function*` is a unique construct, different from `function`.
 
-    ```js
+    ```javascript
     // bad
     function * foo() {
       // ...

From 41fa95eef91b59048a8d0e9f055d41f98e20b27e Mon Sep 17 00:00:00 2001
From: Vse Mozhet Byt <vsemozhetbyt@gmail.com>
Date: Wed, 18 Jan 2017 07:02:56 +0200
Subject: [PATCH 0956/1591] [guide] fix indentation for consistency

---
 README.md | 130 +++++++++++++++++++++++++++---------------------------
 1 file changed, 65 insertions(+), 65 deletions(-)

diff --git a/README.md b/README.md
index aa38130a80..ec1044a809 100644
--- a/README.md
+++ b/README.md
@@ -255,63 +255,63 @@ Other Style Guides
   <a name="objects--quoted-props"></a><a name="3.8"></a>
   - [3.6](#objects--quoted-props) Only quote properties that are invalid identifiers. eslint: [`quote-props`](http://eslint.org/docs/rules/quote-props.html) jscs: [`disallowQuotedKeysInObjects`](http://jscs.info/rule/disallowQuotedKeysInObjects)
 
-  > Why? In general we consider it subjectively easier to read. It improves syntax highlighting, and is also more easily optimized by many JS engines.
-
-  ```javascript
-  // bad
-  const bad = {
-    'foo': 3,
-    'bar': 4,
-    'data-blah': 5,
-  };
-
-  // good
-  const good = {
-    foo: 3,
-    bar: 4,
-    'data-blah': 5,
-  };
-  ```
+    > Why? In general we consider it subjectively easier to read. It improves syntax highlighting, and is also more easily optimized by many JS engines.
+
+    ```javascript
+    // bad
+    const bad = {
+      'foo': 3,
+      'bar': 4,
+      'data-blah': 5,
+    };
+
+    // good
+    const good = {
+      foo: 3,
+      bar: 4,
+      'data-blah': 5,
+    };
+    ```
 
   <a name="objects--prototype-builtins"></a>
   - [3.7](#objects--prototype-builtins) Do not call `Object.prototype` methods directly, such as `hasOwnProperty`, `propertyIsEnumerable`, and `isPrototypeOf`.
 
-  > Why? These methods may be shadowed by properties on the object in question - consider `{ hasOwnProperty: false }` - or, the object may be a null object (`Object.create(null)`).
+    > Why? These methods may be shadowed by properties on the object in question - consider `{ hasOwnProperty: false }` - or, the object may be a null object (`Object.create(null)`).
 
-  ```javascript
-  // bad
-  console.log(object.hasOwnProperty(key));
+    ```javascript
+    // bad
+    console.log(object.hasOwnProperty(key));
 
-  // good
-  console.log(Object.prototype.hasOwnProperty.call(object, key));
+    // good
+    console.log(Object.prototype.hasOwnProperty.call(object, key));
 
-  // best
-  const has = Object.prototype.hasOwnProperty; // cache the lookup once, in module scope.
-  /* or */
-  import has from 'has';
-  …
-  console.log(has.call(object, key));
-  ```
+    // best
+    const has = Object.prototype.hasOwnProperty; // cache the lookup once, in module scope.
+    /* or */
+    import has from 'has';
+    …
+    console.log(has.call(object, key));
+    ```
 
   <a name="objects--rest-spread"></a>
   - [3.8](#objects--rest-spread) Prefer the object spread operator over [`Object.assign`](https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Object/assign) to shallow-copy objects. Use the object rest operator to get a new object with certain properties omitted.
 
-  ```javascript
-  // very bad
-  const original = { a: 1, b: 2 };
-  const copy = Object.assign(original, { c: 3 }); // this mutates `original` ಠ_ಠ
-  delete copy.a; // so does this
+    ```javascript
+    // very bad
+    const original = { a: 1, b: 2 };
+    const copy = Object.assign(original, { c: 3 }); // this mutates `original` ಠ_ಠ
+    delete copy.a; // so does this
 
-  // bad
-  const original = { a: 1, b: 2 };
-  const copy = Object.assign({}, original, { c: 3 }); // copy => { a: 1, b: 2, c: 3 }
+    // bad
+    const original = { a: 1, b: 2 };
+    const copy = Object.assign({}, original, { c: 3 }); // copy => { a: 1, b: 2, c: 3 }
 
-  // good
-  const original = { a: 1, b: 2 };
-  const copy = { ...original, c: 3 }; // copy => { a: 1, b: 2, c: 3 }
+    // good
+    const original = { a: 1, b: 2 };
+    const copy = { ...original, c: 3 }; // copy => { a: 1, b: 2, c: 3 }
 
-  const { a, ...noA } = copy; // noA => { b: 2, c: 3 }
-  ```
+    const { a, ...noA } = copy; // noA => { b: 2, c: 3 }
+    ```
 
 **[⬆ back to top](#table-of-contents)**
 
@@ -1586,32 +1586,32 @@ Other Style Guides
     > Why? Per the eslint documentation, unary increment and decrement statements are subject to automatic semicolon insertion and can cause silent errors with incrementing or decrementing values within an application. It is also more expressive to mutate your values with statements like `num += 1` instead of `num++` or `num ++`. Disallowing unary increment and decrement statements also prevents you from pre-incrementing/pre-decrementing values unintentionally which can also cause unexpected behavior in your programs.
 
     ```javascript
-      // bad
+    // bad
 
-      let array = [1, 2, 3];
-      let num = 1;
-      num++;
-      --num;
+    let array = [1, 2, 3];
+    let num = 1;
+    num++;
+    --num;
 
-      let sum = 0;
-      let truthyCount = 0;
-      for(let i = 0; i < array.length; i++){
-        let value = array[i];
-        sum += value;
-        if (value) {
-          truthyCount++;
-        }
+    let sum = 0;
+    let truthyCount = 0;
+    for(let i = 0; i < array.length; i++){
+      let value = array[i];
+      sum += value;
+      if (value) {
+        truthyCount++;
       }
+    }
 
-      // good
+    // good
 
-      let array = [1, 2, 3];
-      let num = 1;
-      num += 1;
-      num -= 1;
+    let array = [1, 2, 3];
+    let num = 1;
+    num += 1;
+    num -= 1;
 
-      const sum = array.reduce((a, b) => a + b, 0);
-      const truthyCount = array.filter(Boolean).length;
+    const sum = array.reduce((a, b) => a + b, 0);
+    const truthyCount = array.filter(Boolean).length;
     ```
 
 **[⬆ back to top](#table-of-contents)**
@@ -1780,9 +1780,9 @@ Other Style Guides
   <a name="comparison--switch-blocks"></a><a name="15.5"></a>
   - [15.5](#comparison--switch-blocks) Use braces to create blocks in `case` and `default` clauses that contain lexical declarations (e.g. `let`, `const`, `function`, and `class`).
 
-  > Why? Lexical declarations are visible in the entire `switch` block but only get initialized when assigned, which only happens when its `case` is reached. This causes problems when multiple `case` clauses attempt to define the same thing.
+    > Why? Lexical declarations are visible in the entire `switch` block but only get initialized when assigned, which only happens when its `case` is reached. This causes problems when multiple `case` clauses attempt to define the same thing.
 
-  eslint rules: [`no-case-declarations`](http://eslint.org/docs/rules/no-case-declarations.html).
+    eslint rules: [`no-case-declarations`](http://eslint.org/docs/rules/no-case-declarations.html).
 
     ```javascript
     // bad

From ee492a73baeb66f226a2bcbc61317035243d2da3 Mon Sep 17 00:00:00 2001
From: Vse Mozhet Byt <vsemozhetbyt@gmail.com>
Date: Wed, 18 Jan 2017 07:06:04 +0200
Subject: [PATCH 0957/1591] [guide] comment out ellipses

---
 README.md | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/README.md b/README.md
index ec1044a809..a448e91b29 100644
--- a/README.md
+++ b/README.md
@@ -289,7 +289,7 @@ Other Style Guides
     const has = Object.prototype.hasOwnProperty; // cache the lookup once, in module scope.
     /* or */
     import has from 'has';
-    …
+    // ...
     console.log(has.call(object, key));
     ```
 
@@ -2915,7 +2915,7 @@ Other Style Guides
     // bad
     $(this).trigger('listingUpdated', listing.id);
 
-    ...
+    // ...
 
     $(this).on('listingUpdated', (e, listingId) => {
       // do something with listingId
@@ -2928,7 +2928,7 @@ Other Style Guides
     // good
     $(this).trigger('listingUpdated', { listingId: listing.id });
 
-    ...
+    // ...
 
     $(this).on('listingUpdated', (e, data) => {
       // do something with data.listingId

From d9284873a8107212bd21b6493697ee0dc362c20a Mon Sep 17 00:00:00 2001
From: Vse Mozhet Byt <vsemozhetbyt@gmail.com>
Date: Wed, 18 Jan 2017 07:10:09 +0200
Subject: [PATCH 0958/1591] [guide] const -> let

---
 README.md | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/README.md b/README.md
index a448e91b29..c9daa7c3a5 100644
--- a/README.md
+++ b/README.md
@@ -2073,17 +2073,17 @@ Other Style Guides
     ```javascript
     // bad
     function foo() {
-    ∙∙∙∙const name;
+    ∙∙∙∙let name;
     }
 
     // bad
     function bar() {
-    ∙const name;
+    ∙let name;
     }
 
     // good
     function baz() {
-    ∙∙const name;
+    ∙∙let name;
     }
     ```
 

From 9fdd6d6ffac6928fdcb00b2db98e3bf152c4acd9 Mon Sep 17 00:00:00 2001
From: Vse Mozhet Byt <vsemozhetbyt@gmail.com>
Date: Wed, 18 Jan 2017 07:15:57 +0200
Subject: [PATCH 0959/1591] [guide] add / remove semicolons

---
 README.md | 28 ++++++++++++++--------------
 1 file changed, 14 insertions(+), 14 deletions(-)

diff --git a/README.md b/README.md
index c9daa7c3a5..c82feb9312 100644
--- a/README.md
+++ b/README.md
@@ -760,12 +760,12 @@ Other Style Guides
     // bad
     function f1(obj) {
       obj.key = 1;
-    };
+    }
 
     // good
     function f2(obj) {
       const key = Object.prototype.hasOwnProperty.call(obj, 'key') ? obj.key : 1;
-    };
+    }
     ```
 
   <a name="functions--reassign-params"></a><a name="7.13"></a>
@@ -1023,7 +1023,7 @@ Other Style Guides
     inherits(PeekableQueue, Queue);
     PeekableQueue.prototype.peek = function () {
       return this._queue[0];
-    }
+    };
 
     // good
     class PeekableQueue extends Queue {
@@ -1225,11 +1225,11 @@ Other Style Guides
     ```javascript
     // bad
     let foo = 3;
-    export { foo }
+    export { foo };
 
     // good
     const foo = 3;
-    export { foo }
+    export { foo };
     ```
 
   <a name="modules--prefer-default-export"></a>
@@ -1360,17 +1360,17 @@ Other Style Guides
     // bad
     const bar = function * () {
       // ...
-    }
+    };
 
     // bad
     const baz = function *() {
       // ...
-    }
+    };
 
     // bad
     const quux = function*() {
       // ...
-    }
+    };
 
     // bad
     function*foo() {
@@ -1394,7 +1394,7 @@ Other Style Guides
     *
     () {
       // ...
-    }
+    };
 
     // good
     function* foo() {
@@ -1404,7 +1404,7 @@ Other Style Guides
     // good
     const foo = function* () {
       // ...
-    }
+    };
     ```
 
 **[⬆ back to top](#table-of-contents)**
@@ -2521,7 +2521,7 @@ Other Style Guides
       lastName,
       inventorOf,
       ...heroArgs
-    )
+    );
     ```
 
 **[⬆ back to top](#table-of-contents)**
@@ -2620,9 +2620,9 @@ Other Style Guides
   - [21.5](#coercion--bitwise) **Note:** Be careful when using bitshift operations. Numbers are represented as [64-bit values](https://es5.github.io/#x4.3.19), but bitshift operations always return a 32-bit integer ([source](https://es5.github.io/#x11.7)). Bitshift can lead to unexpected behavior for integer values larger than 32 bits. [Discussion](https://github.com/airbnb/javascript/issues/109). Largest signed 32-bit Int is 2,147,483,647:
 
     ```javascript
-    2147483647 >> 0 //=> 2147483647
-    2147483648 >> 0 //=> -2147483648
-    2147483649 >> 0 //=> -2147483647
+    2147483647 >> 0; //=> 2147483647
+    2147483648 >> 0; //=> -2147483648
+    2147483649 >> 0; //=> -2147483647
     ```
 
   <a name="coercion--booleans"></a><a name="21.6"></a>

From 9bb29860bc79e9e0420b502fd82ef9632848c856 Mon Sep 17 00:00:00 2001
From: Vse Mozhet Byt <vsemozhetbyt@gmail.com>
Date: Wed, 18 Jan 2017 07:17:30 +0200
Subject: [PATCH 0960/1591] [guide] add spaces

---
 README.md | 8 ++++----
 1 file changed, 4 insertions(+), 4 deletions(-)

diff --git a/README.md b/README.md
index c82feb9312..247fbc70f5 100644
--- a/README.md
+++ b/README.md
@@ -1595,7 +1595,7 @@ Other Style Guides
 
     let sum = 0;
     let truthyCount = 0;
-    for(let i = 0; i < array.length; i++){
+    for (let i = 0; i < array.length; i++) {
       let value = array[i];
       sum += value;
       if (value) {
@@ -2620,9 +2620,9 @@ Other Style Guides
   - [21.5](#coercion--bitwise) **Note:** Be careful when using bitshift operations. Numbers are represented as [64-bit values](https://es5.github.io/#x4.3.19), but bitshift operations always return a 32-bit integer ([source](https://es5.github.io/#x11.7)). Bitshift can lead to unexpected behavior for integer values larger than 32 bits. [Discussion](https://github.com/airbnb/javascript/issues/109). Largest signed 32-bit Int is 2,147,483,647:
 
     ```javascript
-    2147483647 >> 0; //=> 2147483647
-    2147483648 >> 0; //=> -2147483648
-    2147483649 >> 0; //=> -2147483647
+    2147483647 >> 0; // => 2147483647
+    2147483648 >> 0; // => -2147483648
+    2147483649 >> 0; // => -2147483647
     ```
 
   <a name="coercion--booleans"></a><a name="21.6"></a>

From 231317408f7501f22108768ae05a9c2016765d61 Mon Sep 17 00:00:00 2001
From: Vse Mozhet Byt <vsemozhetbyt@gmail.com>
Date: Wed, 18 Jan 2017 07:27:18 +0200
Subject: [PATCH 0961/1591] [guide] add trailing commas

---
 README.md | 12 ++++++------
 1 file changed, 6 insertions(+), 6 deletions(-)

diff --git a/README.md b/README.md
index 247fbc70f5..09c9293b12 100644
--- a/README.md
+++ b/README.md
@@ -898,7 +898,7 @@ Other Style Guides
 
     // good
     [1, 2, 3].map((number, index) => ({
-      [index]: number
+      [index]: number,
     }));
     ```
 
@@ -911,7 +911,7 @@ Other Style Guides
     // bad
     ['get', 'post', 'put'].map(httpMethod => Object.prototype.hasOwnProperty.call(
         httpMagicObjectWithAVeryLongName,
-        httpMethod
+        httpMethod,
       )
     );
 
@@ -919,7 +919,7 @@ Other Style Guides
     ['get', 'post', 'put'].map(httpMethod => (
       Object.prototype.hasOwnProperty.call(
         httpMagicObjectWithAVeryLongName,
-        httpMethod
+        httpMethod,
       )
     ));
     ```
@@ -2796,7 +2796,7 @@ Other Style Guides
     ```javascript
     const AirbnbStyleGuide = {
       es6: {
-      }
+      },
     };
 
     export default AirbnbStyleGuide;
@@ -2965,7 +2965,7 @@ Other Style Guides
       // ...
 
       $('.sidebar').css({
-        'background-color': 'pink'
+        'background-color': 'pink',
       });
     }
 
@@ -2977,7 +2977,7 @@ Other Style Guides
       // ...
 
       $sidebar.css({
-        'background-color': 'pink'
+        'background-color': 'pink',
       });
     }
     ```

From 6e4859d7c694afcc45366a26f1818d416db5764b Mon Sep 17 00:00:00 2001
From: Vse Mozhet Byt <vsemozhetbyt@gmail.com>
Date: Wed, 18 Jan 2017 07:33:11 +0200
Subject: [PATCH 0962/1591] [guide] remove trailing or leading underscores

---
 README.md | 10 +++++-----
 1 file changed, 5 insertions(+), 5 deletions(-)

diff --git a/README.md b/README.md
index 09c9293b12..6d28041dca 100644
--- a/README.md
+++ b/README.md
@@ -1022,13 +1022,13 @@ Other Style Guides
     }
     inherits(PeekableQueue, Queue);
     PeekableQueue.prototype.peek = function () {
-      return this._queue[0];
+      return this.queue[0];
     };
 
     // good
     class PeekableQueue extends Queue {
       peek() {
-        return this._queue[0];
+        return this.queue[0];
       }
     }
     ```
@@ -1971,7 +1971,7 @@ Other Style Guides
     function getType() {
       console.log('fetching type...');
       // set the default type to 'no type'
-      const type = this._type || 'no type';
+      const type = this.type || 'no type';
 
       return type;
     }
@@ -1981,7 +1981,7 @@ Other Style Guides
       console.log('fetching type...');
 
       // set the default type to 'no type'
-      const type = this._type || 'no type';
+      const type = this.type || 'no type';
 
       return type;
     }
@@ -1989,7 +1989,7 @@ Other Style Guides
     // also good
     function getType() {
       // set the default type to 'no type'
-      const type = this._type || 'no type';
+      const type = this.type || 'no type';
 
       return type;
     }

From cb32f443c9ea94c6b25f9c183776eebf8445c87e Mon Sep 17 00:00:00 2001
From: Vse Mozhet Byt <vsemozhetbyt@gmail.com>
Date: Wed, 18 Jan 2017 07:42:53 +0200
Subject: [PATCH 0963/1591] [guide] fix arrow IIFE call

Currently, it throws.
---
 README.md | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/README.md b/README.md
index 6d28041dca..b8785cb852 100644
--- a/README.md
+++ b/README.md
@@ -2546,10 +2546,10 @@ Other Style Guides
     }());
 
     // good, but legacy (guards against the function becoming an argument when two files with IIFEs are concatenated)
-    ;(() => {
+    ;((() => {
       const name = 'Skywalker';
       return name;
-    }());
+    })());
     ```
 
     [Read more](https://stackoverflow.com/questions/7365172/semicolon-before-self-invoking-function/7365214%237365214).

From 8e12091e8ff05c304e34e28944596bebfb3f75a0 Mon Sep 17 00:00:00 2001
From: Leonid Lebedev <lix.lebedev@yandex.ru>
Date: Wed, 18 Jan 2017 21:00:35 +0300
Subject: [PATCH 0964/1591] [guide] Update russian translation

---
 README.md | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/README.md b/README.md
index b8785cb852..775fc6fb07 100644
--- a/README.md
+++ b/README.md
@@ -3264,7 +3264,7 @@ Other Style Guides
   - ![jp](https://raw.githubusercontent.com/gosquared/flags/master/flags/flags/shiny/24/Japan.png) **Japanese**: [mitsuruog/javascript-style-guide](https://github.com/mitsuruog/javascript-style-guide)
   - ![kr](https://raw.githubusercontent.com/gosquared/flags/master/flags/flags/shiny/24/South-Korea.png) **Korean**: [tipjs/javascript-style-guide](https://github.com/tipjs/javascript-style-guide)
   - ![pl](https://raw.githubusercontent.com/gosquared/flags/master/flags/flags/shiny/24/Poland.png) **Polish**: [mjurczyk/javascript](https://github.com/mjurczyk/javascript)
-  - ![ru](https://raw.githubusercontent.com/gosquared/flags/master/flags/flags/shiny/24/Russia.png) **Russian**: [uprock/javascript](https://github.com/uprock/javascript)
+  - ![ru](https://raw.githubusercontent.com/gosquared/flags/master/flags/flags/shiny/24/Russia.png) **Russian**: [leonidlebedev/javascript-airbnb](https://github.com/leonidlebedev/javascript-airbnb)
   - ![es](https://raw.githubusercontent.com/gosquared/flags/master/flags/flags/shiny/24/Spain.png) **Spanish**: [paolocarrasco/javascript-style-guide](https://github.com/paolocarrasco/javascript-style-guide)
   - ![th](https://raw.githubusercontent.com/gosquared/flags/master/flags/flags/shiny/24/Thailand.png) **Thai**: [lvarayut/javascript-style-guide](https://github.com/lvarayut/javascript-style-guide)
   - ![vn](https://raw.githubusercontent.com/gosquared/flags/master/flags/flags/shiny/24/Vietnam.png) **Vietnam**: [hngiang/javascript-style-guide](https://github.com/hngiang/javascript-style-guide)

From 62a1edecdbb13dc821ff9a63bd03875c0e6f4181 Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Fri, 20 Jan 2017 13:44:25 -0800
Subject: [PATCH 0965/1591] [eslint config] [base] [deps] update `eslint`

---
 packages/eslint-config-airbnb-base/package.json            | 4 ++--
 packages/eslint-config-airbnb-base/rules/best-practices.js | 5 +++++
 packages/eslint-config-airbnb-base/rules/style.js          | 5 +++++
 3 files changed, 12 insertions(+), 2 deletions(-)

diff --git a/packages/eslint-config-airbnb-base/package.json b/packages/eslint-config-airbnb-base/package.json
index b6e3da2c6c..988669c5c1 100644
--- a/packages/eslint-config-airbnb-base/package.json
+++ b/packages/eslint-config-airbnb-base/package.json
@@ -49,7 +49,7 @@
     "babel-preset-airbnb": "^2.1.1",
     "babel-tape-runner": "^2.0.1",
     "editorconfig-tools": "^0.1.1",
-    "eslint": "^3.13.0",
+    "eslint": "^3.14.0",
     "eslint-find-rules": "^1.14.3",
     "eslint-plugin-import": "^2.2.0",
     "in-publish": "^2.0.0",
@@ -57,7 +57,7 @@
     "tape": "^4.6.3"
   },
   "peerDependencies": {
-    "eslint": "^3.13.0",
+    "eslint": "^3.14.0",
     "eslint-plugin-import": "^2.2.0"
   },
   "engines": {
diff --git a/packages/eslint-config-airbnb-base/rules/best-practices.js b/packages/eslint-config-airbnb-base/rules/best-practices.js
index 5d35f67431..2587bc55e9 100644
--- a/packages/eslint-config-airbnb-base/rules/best-practices.js
+++ b/packages/eslint-config-airbnb-base/rules/best-practices.js
@@ -253,6 +253,11 @@ module.exports = {
     // disallow use of the with statement
     'no-with': 'error',
 
+    // require using Error objects as Promise rejection reasons
+    // http://eslint.org/docs/rules/prefer-promise-reject-errors
+    // TODO: enable, semver-major
+    'prefer-promise-reject-errors': ['off', { allowEmptyReject: true }],
+
     // require use of the second argument for parseInt()
     radix: 'error',
 
diff --git a/packages/eslint-config-airbnb-base/rules/style.js b/packages/eslint-config-airbnb-base/rules/style.js
index 9ea0f0f759..c02baa0f7c 100644
--- a/packages/eslint-config-airbnb-base/rules/style.js
+++ b/packages/eslint-config-airbnb-base/rules/style.js
@@ -231,6 +231,11 @@ module.exports = {
     // disallow mixed spaces and tabs for indentation
     'no-mixed-spaces-and-tabs': 'error',
 
+    // disallow use of chained assignment expressions
+    // http://eslint.org/docs/rules/no-multi-assign
+    // TODO: enable, semver-minor
+    'no-multi-assign': ['off'],
+
     // disallow multiple empty lines and only one newline at the end
     'no-multiple-empty-lines': ['error', { max: 2, maxEOF: 1 }],
 

From d0fb7635bc421cebc4a317bcd12bc853dd8875ef Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Fri, 20 Jan 2017 13:45:50 -0800
Subject: [PATCH 0966/1591] [eslint config] [base] enable `no-multi-assign`

---
 packages/eslint-config-airbnb-base/rules/style.js | 3 +--
 1 file changed, 1 insertion(+), 2 deletions(-)

diff --git a/packages/eslint-config-airbnb-base/rules/style.js b/packages/eslint-config-airbnb-base/rules/style.js
index c02baa0f7c..f5b7ab8d1d 100644
--- a/packages/eslint-config-airbnb-base/rules/style.js
+++ b/packages/eslint-config-airbnb-base/rules/style.js
@@ -233,8 +233,7 @@ module.exports = {
 
     // disallow use of chained assignment expressions
     // http://eslint.org/docs/rules/no-multi-assign
-    // TODO: enable, semver-minor
-    'no-multi-assign': ['off'],
+    'no-multi-assign': ['error'],
 
     // disallow multiple empty lines and only one newline at the end
     'no-multiple-empty-lines': ['error', { max: 2, maxEOF: 1 }],

From 897b8fcc1cdf5356dbcf7f0a5aa111abdad118e6 Mon Sep 17 00:00:00 2001
From: Florian Berger <fbergr@gmail.com>
Date: Wed, 1 Feb 2017 18:30:47 +0200
Subject: [PATCH 0967/1591] Change function order in functions (7.1) example

Part 7.1 says first why function declarations are not good and
after that it recommends to give a name to function expression.
The same order could be used in example too.
---
 README.md | 8 ++++----
 1 file changed, 4 insertions(+), 4 deletions(-)

diff --git a/README.md b/README.md
index 775fc6fb07..ec99a55ec0 100644
--- a/README.md
+++ b/README.md
@@ -580,14 +580,14 @@ Other Style Guides
 
     ```javascript
     // bad
-    const foo = function () {
+    function foo() {
       // ...
-    };
+    }
 
     // bad
-    function foo() {
+    const foo = function () {
       // ...
-    }
+    };
 
     // good
     const foo = function bar() {

From e22f02cda3ab7bcf30a149480bcc8beedce90c4f Mon Sep 17 00:00:00 2001
From: Florian Berger <fbergr@gmail.com>
Date: Wed, 1 Feb 2017 19:22:34 +0200
Subject: [PATCH 0968/1591] Update React link in organizations

---
 README.md | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/README.md b/README.md
index ec99a55ec0..92a1e7cec2 100644
--- a/README.md
+++ b/README.md
@@ -3225,7 +3225,7 @@ Other Style Guides
   - **Peerby**: [Peerby/javascript](https://github.com/Peerby/javascript)
   - **Razorfish**: [razorfish/javascript-style-guide](https://github.com/razorfish/javascript-style-guide)
   - **reddit**: [reddit/styleguide/javascript](https://github.com/reddit/styleguide/tree/master/javascript)
-  - **React**: [/facebook/react/blob/master/CONTRIBUTING.md#style-guide](https://github.com/facebook/react/blob/master/CONTRIBUTING.md#style-guide)
+  - **React**: [facebook.github.io/react/contributing/how-to-contribute.html#style-guide](https://facebook.github.io/react/contributing/how-to-contribute.html#style-guide)
   - **REI**: [reidev/js-style-guide](https://github.com/rei/code-style-guides/blob/master/docs/javascript.md)
   - **Ripple**: [ripple/javascript-style-guide](https://github.com/ripple/javascript-style-guide)
   - **SeekingAlpha**: [seekingalpha/javascript-style-guide](https://github.com/seekingalpha/javascript-style-guide)

From 9375fb59b3fe958d11a446e3ef2673c6771930eb Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Robin=20Pokorn=C3=BD?= <me@robinpokorny.com>
Date: Thu, 2 Feb 2017 13:31:10 +0100
Subject: [PATCH 0969/1591] [guide] Use const when not reassigning reference

---
 README.md | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/README.md b/README.md
index 92a1e7cec2..9906ed7fa4 100644
--- a/README.md
+++ b/README.md
@@ -1588,7 +1588,7 @@ Other Style Guides
     ```javascript
     // bad
 
-    let array = [1, 2, 3];
+    const array = [1, 2, 3];
     let num = 1;
     num++;
     --num;
@@ -1605,7 +1605,7 @@ Other Style Guides
 
     // good
 
-    let array = [1, 2, 3];
+    const array = [1, 2, 3];
     let num = 1;
     num += 1;
     num -= 1;

From 4d024be5a48bf7038c5fa5fe3b3eb3c284a7f665 Mon Sep 17 00:00:00 2001
From: Eric Martin <ericmark26@gmail.com>
Date: Thu, 2 Feb 2017 19:13:13 -0500
Subject: [PATCH 0970/1591] [guide] Added documentation for arrow function
 parens with one arg

Added explanation for using parentheses with explicit returns and alternatives with the eslint "always" option.
---
 README.md | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/README.md b/README.md
index 9906ed7fa4..a1a0cc57e4 100644
--- a/README.md
+++ b/README.md
@@ -925,7 +925,7 @@ Other Style Guides
     ```
 
   <a name="arrows--one-arg-parens"></a><a name="8.4"></a>
-  - [8.4](#arrows--one-arg-parens) If your function takes a single argument and doesn’t use braces, omit the parentheses. Otherwise, always include parentheses around arguments. eslint: [`arrow-parens`](http://eslint.org/docs/rules/arrow-parens.html) jscs:  [`disallowParenthesesAroundArrowParam`](http://jscs.info/rule/disallowParenthesesAroundArrowParam)
+  - [8.4](#arrows--one-arg-parens) If your function takes a single argument and doesn’t use braces, omit the parentheses. Otherwise, always include parentheses around arguments for clarity and consistency. Note: it is also acceptable to always use parentheses, in which case use the ["always" option](http://eslint.org/docs/rules/arrow-parens#always) for eslint or do not include [`disallowParenthesesAroundArrowParam`](http://jscs.info/rule/disallowParenthesesAroundArrowParam) for jscs. eslint: [`arrow-parens`](http://eslint.org/docs/rules/arrow-parens.html) jscs:  [`disallowParenthesesAroundArrowParam`](http://jscs.info/rule/disallowParenthesesAroundArrowParam)
 
     > Why? Less visual clutter.
 

From a8d2f94884e3f4fdd435f3810f68193739c40523 Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Sun, 5 Feb 2017 10:28:13 -0800
Subject: [PATCH 0971/1591] [eslint config] [base] update `eslint`,
 `babel-preset-airbnb`

---
 packages/eslint-config-airbnb-base/package.json   | 6 +++---
 packages/eslint-config-airbnb-base/rules/style.js | 5 +++++
 2 files changed, 8 insertions(+), 3 deletions(-)

diff --git a/packages/eslint-config-airbnb-base/package.json b/packages/eslint-config-airbnb-base/package.json
index 988669c5c1..49b8ad3896 100644
--- a/packages/eslint-config-airbnb-base/package.json
+++ b/packages/eslint-config-airbnb-base/package.json
@@ -46,10 +46,10 @@
   },
   "homepage": "https://github.com/airbnb/javascript",
   "devDependencies": {
-    "babel-preset-airbnb": "^2.1.1",
+    "babel-preset-airbnb": "^2.2.3",
     "babel-tape-runner": "^2.0.1",
     "editorconfig-tools": "^0.1.1",
-    "eslint": "^3.14.0",
+    "eslint": "^3.15.0",
     "eslint-find-rules": "^1.14.3",
     "eslint-plugin-import": "^2.2.0",
     "in-publish": "^2.0.0",
@@ -57,7 +57,7 @@
     "tape": "^4.6.3"
   },
   "peerDependencies": {
-    "eslint": "^3.14.0",
+    "eslint": "^3.15.0",
     "eslint-plugin-import": "^2.2.0"
   },
   "engines": {
diff --git a/packages/eslint-config-airbnb-base/rules/style.js b/packages/eslint-config-airbnb-base/rules/style.js
index f5b7ab8d1d..1d315bc51a 100644
--- a/packages/eslint-config-airbnb-base/rules/style.js
+++ b/packages/eslint-config-airbnb-base/rules/style.js
@@ -383,6 +383,11 @@ module.exports = {
       }
     }],
 
+    // Require or disallow spacing between template tags and their literals
+    // http://eslint.org/docs/rules/template-tag-spacing
+    // TODO: enable, semver-major
+    'template-tag-spacing': ['off', 'never'],
+
     // require or disallow the Unicode Byte Order Mark
     // http://eslint.org/docs/rules/unicode-bom
     'unicode-bom': ['error', 'never'],

From b6fc6dc7c3cb76497db0bb81edaa54d8f3427796 Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Sun, 5 Feb 2017 10:31:04 -0800
Subject: [PATCH 0972/1591] [eslint config] [base] v11.1.0

---
 packages/eslint-config-airbnb-base/CHANGELOG.md | 6 ++++++
 packages/eslint-config-airbnb-base/package.json | 2 +-
 2 files changed, 7 insertions(+), 1 deletion(-)

diff --git a/packages/eslint-config-airbnb-base/CHANGELOG.md b/packages/eslint-config-airbnb-base/CHANGELOG.md
index 58bc3468b8..b14a4d6b26 100644
--- a/packages/eslint-config-airbnb-base/CHANGELOG.md
+++ b/packages/eslint-config-airbnb-base/CHANGELOG.md
@@ -1,3 +1,9 @@
+11.1.0 / 2017-01-08
+==================
+ - [minor] enable `no-multi-assign`
+ - [deps] update `eslint`, `babel-preset-airbnb`
+ - Update a deprecated option (`eqeqeq`) (#1244)
+
 11.0.1 / 2017-01-08
 ==================
  - [deps] update `eslint`
diff --git a/packages/eslint-config-airbnb-base/package.json b/packages/eslint-config-airbnb-base/package.json
index 49b8ad3896..63efb3588d 100644
--- a/packages/eslint-config-airbnb-base/package.json
+++ b/packages/eslint-config-airbnb-base/package.json
@@ -1,6 +1,6 @@
 {
   "name": "eslint-config-airbnb-base",
-  "version": "11.0.1",
+  "version": "11.1.0",
   "description": "Airbnb's base JS ESLint config, following our styleguide",
   "main": "index.js",
   "scripts": {

From de5cd510b8beaef5ecd66b4d5dc924467ba2ec55 Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Sun, 5 Feb 2017 10:43:32 -0800
Subject: [PATCH 0973/1591] [eslint config] [deps] update
 `eslint-config-airbnb-base`, `babel-preset-airbnb`, `eslint`

---
 packages/eslint-config-airbnb/package.json | 8 ++++----
 1 file changed, 4 insertions(+), 4 deletions(-)

diff --git a/packages/eslint-config-airbnb/package.json b/packages/eslint-config-airbnb/package.json
index ce821f90b3..c11bc564cd 100644
--- a/packages/eslint-config-airbnb/package.json
+++ b/packages/eslint-config-airbnb/package.json
@@ -46,13 +46,13 @@
   },
   "homepage": "https://github.com/airbnb/javascript",
   "dependencies": {
-    "eslint-config-airbnb-base": "^11.0.1"
+    "eslint-config-airbnb-base": "^11.1.0"
   },
   "devDependencies": {
-    "babel-preset-airbnb": "^2.1.1",
+    "babel-preset-airbnb": "^2.2.3",
     "babel-tape-runner": "^2.0.1",
     "editorconfig-tools": "^0.1.1",
-    "eslint": "^3.13.0",
+    "eslint": "^3.15.0",
     "eslint-find-rules": "^1.14.3",
     "eslint-plugin-import": "^2.2.0",
     "eslint-plugin-jsx-a11y": "^3.0.2",
@@ -63,7 +63,7 @@
     "tape": "^4.6.3"
   },
   "peerDependencies": {
-    "eslint": "^3.13.0",
+    "eslint": "^3.15.0",
     "eslint-plugin-jsx-a11y": "^3.0.2",
     "eslint-plugin-import": "^2.2.0",
     "eslint-plugin-react": "^6.9.0"

From a8ecaa8a5aa40b59409f8c026e77aad3452fd1a3 Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Sun, 5 Feb 2017 10:50:34 -0800
Subject: [PATCH 0974/1591] [eslint config] [deps] [patch] allow
 `eslint-plugin-jsx-a11y` to be v3 or v4. Remove `no-marquee` rule
 temporarily.

---
 packages/eslint-config-airbnb/package.json        | 4 ++--
 packages/eslint-config-airbnb/rules/react-a11y.js | 4 ----
 2 files changed, 2 insertions(+), 6 deletions(-)

diff --git a/packages/eslint-config-airbnb/package.json b/packages/eslint-config-airbnb/package.json
index c11bc564cd..4c3df79318 100644
--- a/packages/eslint-config-airbnb/package.json
+++ b/packages/eslint-config-airbnb/package.json
@@ -55,7 +55,7 @@
     "eslint": "^3.15.0",
     "eslint-find-rules": "^1.14.3",
     "eslint-plugin-import": "^2.2.0",
-    "eslint-plugin-jsx-a11y": "^3.0.2",
+    "eslint-plugin-jsx-a11y": "^4.0.0",
     "eslint-plugin-react": "^6.9.0",
     "in-publish": "^2.0.0",
     "react": ">= 0.13.0",
@@ -64,7 +64,7 @@
   },
   "peerDependencies": {
     "eslint": "^3.15.0",
-    "eslint-plugin-jsx-a11y": "^3.0.2",
+    "eslint-plugin-jsx-a11y": "^3.0.2 || ^4.0.0",
     "eslint-plugin-import": "^2.2.0",
     "eslint-plugin-react": "^6.9.0"
   },
diff --git a/packages/eslint-config-airbnb/rules/react-a11y.js b/packages/eslint-config-airbnb/rules/react-a11y.js
index b101a93e5b..8418cecf63 100644
--- a/packages/eslint-config-airbnb/rules/react-a11y.js
+++ b/packages/eslint-config-airbnb/rules/react-a11y.js
@@ -92,10 +92,6 @@ module.exports = {
     // https://github.com/evcohen/eslint-plugin-jsx-a11y/blob/master/docs/rules/lang.md
     'jsx-a11y/lang': 'error',
 
-    // prevent marquee elements
-    // https://github.com/evcohen/eslint-plugin-jsx-a11y/blob/master/docs/rules/no-marquee.md
-    'jsx-a11y/no-marquee': 'error',
-
     // only allow <th> to have the "scope" attr
     // https://github.com/evcohen/eslint-plugin-jsx-a11y/blob/master/docs/rules/scope.md
     'jsx-a11y/scope': 'error',

From 7e35c2dbfcc7f60fc07743d0966b4724da69f6e7 Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Sun, 5 Feb 2017 13:07:53 -0800
Subject: [PATCH 0975/1591] [eslint config] v14.1.0

---
 packages/eslint-config-airbnb/CHANGELOG.md | 5 +++++
 packages/eslint-config-airbnb/package.json | 2 +-
 2 files changed, 6 insertions(+), 1 deletion(-)

diff --git a/packages/eslint-config-airbnb/CHANGELOG.md b/packages/eslint-config-airbnb/CHANGELOG.md
index e3025d5a28..487e14b5fd 100644
--- a/packages/eslint-config-airbnb/CHANGELOG.md
+++ b/packages/eslint-config-airbnb/CHANGELOG.md
@@ -1,3 +1,8 @@
+14.1.0 / 2017-02-05
+==================
+- [patch] allow `eslint-plugin-jsx-a11y` to be v3 or v4. Remove `no-marquee` rule temporarily.
+- [deps] update `eslint-config-airbnb-base`, `babel-preset-airbnb`, `eslint`
+
 14.0.0 / 2017-01-08
 ==================
 - [breaking] enable `react/no-array-index-key`, `react/require-default-props`
diff --git a/packages/eslint-config-airbnb/package.json b/packages/eslint-config-airbnb/package.json
index 4c3df79318..18924cdebd 100644
--- a/packages/eslint-config-airbnb/package.json
+++ b/packages/eslint-config-airbnb/package.json
@@ -1,6 +1,6 @@
 {
   "name": "eslint-config-airbnb",
-  "version": "14.0.0",
+  "version": "14.1.0",
   "description": "Airbnb's ESLint config, following our styleguide",
   "main": "index.js",
   "scripts": {

From 6435f8ff23f5606e4c454b985abace51c586d9fe Mon Sep 17 00:00:00 2001
From: Colin Hamer <colinc.hamer@gmail.com>
Date: Thu, 9 Feb 2017 10:16:00 +0100
Subject: [PATCH 0976/1591] [inthewild] Adds CaseNine

---
 README.md | 1 +
 1 file changed, 1 insertion(+)

diff --git a/README.md b/README.md
index a1a0cc57e4..f41cf2b4de 100644
--- a/README.md
+++ b/README.md
@@ -3180,6 +3180,7 @@ Other Style Guides
   - **Blendle**: [blendle/javascript](https://github.com/blendle/javascript)
   - **Bonhomme**: [bonhommeparis/javascript](https://github.com/bonhommeparis/javascript)
   - **Brainshark**: [brainshark/javascript](https://github.com/brainshark/javascript)
+  - **CaseNine**: [CaseNine/javascript](https://github.com/CaseNine/javascript)
   - **Chartboost**: [ChartBoost/javascript-style-guide](https://github.com/ChartBoost/javascript-style-guide)
   - **ComparaOnline**: [comparaonline/javascript](https://github.com/comparaonline/javascript-style-guide)
   - **Compass Learning**: [compasslearning/javascript-style-guide](https://github.com/compasslearning/javascript-style-guide)

From 2c390ecea94772a61ce616b9ece45695f0216d68 Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Sun, 5 Feb 2017 14:00:41 -0800
Subject: [PATCH 0977/1591] [eslint config] [breaking] update
 eslint-plugin-jsx-a11y to v4, enable new rules

---
 packages/eslint-config-airbnb/package.json    |  2 +-
 .../eslint-config-airbnb/rules/react-a11y.js  | 28 ++++++++++++++++++-
 2 files changed, 28 insertions(+), 2 deletions(-)

diff --git a/packages/eslint-config-airbnb/package.json b/packages/eslint-config-airbnb/package.json
index 18924cdebd..2ef0d65c51 100644
--- a/packages/eslint-config-airbnb/package.json
+++ b/packages/eslint-config-airbnb/package.json
@@ -64,7 +64,7 @@
   },
   "peerDependencies": {
     "eslint": "^3.15.0",
-    "eslint-plugin-jsx-a11y": "^3.0.2 || ^4.0.0",
+    "eslint-plugin-jsx-a11y": "^4.0.0",
     "eslint-plugin-import": "^2.2.0",
     "eslint-plugin-react": "^6.9.0"
   },
diff --git a/packages/eslint-config-airbnb/rules/react-a11y.js b/packages/eslint-config-airbnb/rules/react-a11y.js
index 8418cecf63..a5443645de 100644
--- a/packages/eslint-config-airbnb/rules/react-a11y.js
+++ b/packages/eslint-config-airbnb/rules/react-a11y.js
@@ -13,7 +13,7 @@ module.exports = {
 
     // Require ARIA roles to be valid and non-abstract
     // https://github.com/evcohen/eslint-plugin-jsx-a11y/blob/master/docs/rules/aria-role.md
-    'jsx-a11y/aria-role': 'error',
+    'jsx-a11y/aria-role': ['error', { ignoreNonDom: false }],
 
     // Enforce all aria-* props are valid.
     // https://github.com/evcohen/eslint-plugin-jsx-a11y/blob/master/docs/rules/aria-props.md
@@ -92,6 +92,12 @@ module.exports = {
     // https://github.com/evcohen/eslint-plugin-jsx-a11y/blob/master/docs/rules/lang.md
     'jsx-a11y/lang': 'error',
 
+    // prevent distracting elements, like <marquee> and <blink>
+    // https://github.com/evcohen/eslint-plugin-jsx-a11y/blob/master/docs/rules/no-distracting-elements.md
+    'jsx-a11y/no-distracting-elements': ['error', {
+      elements: ['marquee', 'blink'],
+    }],
+
     // only allow <th> to have the "scope" attr
     // https://github.com/evcohen/eslint-plugin-jsx-a11y/blob/master/docs/rules/scope.md
     'jsx-a11y/scope': 'error',
@@ -104,5 +110,25 @@ module.exports = {
     // Enforce that DOM elements without semantic behavior not have interaction handlers
     // https://github.com/evcohen/eslint-plugin-jsx-a11y/blob/master/docs/rules/no-static-element-interactions.md
     'jsx-a11y/no-static-element-interactions': 'error',
+
+    // ensure emoji are accessible
+    // https://github.com/evcohen/eslint-plugin-jsx-a11y/blob/master/docs/rules/accessible-emoji.md
+    'jsx-a11y/accessible-emoji': 'error',
+
+    // elements with aria-activedescendant must be tabbable
+    // https://github.com/evcohen/eslint-plugin-jsx-a11y/blob/master/docs/rules/aria-activedescendant-has-tabindex.md
+    'jsx-a11y/aria-activedescendant-has-tabindex': 'error',
+
+    // ensure iframe elements have a unique title
+    // https://github.com/evcohen/eslint-plugin-jsx-a11y/blob/master/docs/rules/iframe-has-title.md
+    'jsx-a11y/iframe-has-title': 'error',
+
+    // prohibit autoFocus prop
+    // https://github.com/evcohen/eslint-plugin-jsx-a11y/blob/master/docs/rules/no-autofocus.md
+    'jsx-a11y/no-autofocus': 'error',
+
+    // ensure HTML elements do not specify redundant ARIA roles
+    // https://github.com/evcohen/eslint-plugin-jsx-a11y/blob/master/docs/rules/no-redundant-roles.md
+    'jsx-a11y/no-redundant-roles': 'error',
   },
 };

From ec42fbecbfb1149c5b5e936f4144bdffa0b6fee0 Mon Sep 17 00:00:00 2001
From: nprescott <nprescott@icct.com>
Date: Sun, 22 Jan 2017 11:11:08 -0500
Subject: [PATCH 0978/1591] [guide] README update for JSCS deprecated links

---
 README.md | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/README.md b/README.md
index f41cf2b4de..ea04f360a4 100644
--- a/README.md
+++ b/README.md
@@ -3098,7 +3098,7 @@ Other Style Guides
   - Code Style Linters
     + [ESlint](http://eslint.org/) - [Airbnb Style .eslintrc](https://github.com/airbnb/javascript/blob/master/linters/.eslintrc)
     + [JSHint](http://jshint.com/) - [Airbnb Style .jshintrc](https://github.com/airbnb/javascript/blob/master/linters/.jshintrc)
-    + [JSCS](https://github.com/jscs-dev/node-jscs) - [Airbnb Style Preset](https://github.com/jscs-dev/node-jscs/blob/master/presets/airbnb.json)
+    + [JSCS](https://github.com/jscs-dev/node-jscs) - [Airbnb Style Preset](https://github.com/jscs-dev/node-jscs/blob/master/presets/airbnb.json) (Deprecated, please use [ESlint](https://github.com/airbnb/javascript/tree/master/packages/eslint-config-airbnb-base))
 
 **Other Style Guides**
 

From c29e615be497767264b09fa826229f71fd015c38 Mon Sep 17 00:00:00 2001
From: Sota Yamashita <sota.yamashita@gmail.com>
Date: Sun, 12 Feb 2017 12:13:35 +0900
Subject: [PATCH 0979/1591] [inthewild] remove deleted repositories

---
 README.md | 4 ----
 1 file changed, 4 deletions(-)

diff --git a/README.md b/README.md
index ea04f360a4..686ca5d461 100644
--- a/README.md
+++ b/README.md
@@ -3177,7 +3177,6 @@ Other Style Guides
   - **BashPros**: [BashPros/javascript](https://github.com/BashPros/javascript)
   - **Billabong**: [billabong/javascript](https://github.com/billabong/javascript)
   - **Bisk**: [bisk/javascript](https://github.com/Bisk/javascript/)
-  - **Blendle**: [blendle/javascript](https://github.com/blendle/javascript)
   - **Bonhomme**: [bonhommeparis/javascript](https://github.com/bonhommeparis/javascript)
   - **Brainshark**: [brainshark/javascript](https://github.com/brainshark/javascript)
   - **CaseNine**: [CaseNine/javascript](https://github.com/CaseNine/javascript)
@@ -3202,8 +3201,6 @@ Other Style Guides
   - **Huballin**: [huballin/javascript](https://github.com/huballin/javascript)
   - **HubSpot**: [HubSpot/javascript](https://github.com/HubSpot/javascript)
   - **Hyper**: [hyperoslo/javascript-playbook](https://github.com/hyperoslo/javascript-playbook/blob/master/style.md)
-  - **InfoJobs**: [InfoJobs/JavaScript-Style-Guide](https://github.com/InfoJobs/JavaScript-Style-Guide)
-  - **Intent Media**: [intentmedia/javascript](https://github.com/intentmedia/javascript)
   - **Jam3**: [Jam3/Javascript-Code-Conventions](https://github.com/Jam3/Javascript-Code-Conventions)
   - **JeopardyBot**: [kesne/jeopardy-bot](https://github.com/kesne/jeopardy-bot/blob/master/STYLEGUIDE.md)
   - **JSSolutions**: [JSSolutions/javascript](https://github.com/JSSolutions/javascript)
@@ -3218,7 +3215,6 @@ Other Style Guides
   - **Money Advice Service**: [moneyadviceservice/javascript](https://github.com/moneyadviceservice/javascript)
   - **Muber**: [muber/javascript](https://github.com/muber/javascript)
   - **National Geographic**: [natgeo/javascript](https://github.com/natgeo/javascript)
-  - **National Park Service**: [nationalparkservice/javascript](https://github.com/nationalparkservice/javascript)
   - **Nimbl3**: [nimbl3/javascript](https://github.com/nimbl3/javascript)
   - **Nulogy**: [nulogy/javascript](https://github.com/nulogy/javascript)
   - **Orion Health**: [orionhealth/javascript](https://github.com/orionhealth/javascript)

From 8cab89e792e2fc457ab177cdf2d97e767e03ecb6 Mon Sep 17 00:00:00 2001
From: Josh Duck <github@joshduck.com>
Date: Tue, 14 Feb 2017 10:44:25 +1000
Subject: [PATCH 0980/1591] Add note to explain what a soft tab is

A quick Google search shows that the name "soft tab" causes some confusion. Added a brief clarification.
---
 README.md | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/README.md b/README.md
index 686ca5d461..6e6c2d8eaa 100644
--- a/README.md
+++ b/README.md
@@ -2068,7 +2068,7 @@ Other Style Guides
 ## Whitespace
 
   <a name="whitespace--spaces"></a><a name="18.1"></a>
-  - [18.1](#whitespace--spaces) Use soft tabs set to 2 spaces. eslint: [`indent`](http://eslint.org/docs/rules/indent.html) jscs: [`validateIndentation`](http://jscs.info/rule/validateIndentation)
+  - [18.1](#whitespace--spaces) Use soft tabs (space character) set to 2 spaces. eslint: [`indent`](http://eslint.org/docs/rules/indent.html) jscs: [`validateIndentation`](http://jscs.info/rule/validateIndentation)
 
     ```javascript
     // bad

From 1841d2fb99287f01c2ed98f1ca6c6350b509ad11 Mon Sep 17 00:00:00 2001
From: Joe Lencioni <joe.lencioni@airbnb.com>
Date: Tue, 14 Feb 2017 10:31:45 -0800
Subject: [PATCH 0981/1591] Add guidance around not using mixins

Mixins will hopefully be removed from React eventually. In the meantime,
we can avoid the damage they cause by not using them. Most of this was
borrowed from @gaearon's blog post "Mixins Considered Harmful".

https://facebook.github.io/react/blog/2016/07/13/mixins-considered-harmful.html
---
 react/README.md | 8 +++++++-
 1 file changed, 7 insertions(+), 1 deletion(-)

diff --git a/react/README.md b/react/README.md
index 9401b72596..5e481aa992 100644
--- a/react/README.md
+++ b/react/README.md
@@ -28,7 +28,7 @@
 
 ## Class vs `React.createClass` vs stateless
 
-  - If you have internal state and/or refs, prefer `class extends React.Component` over `React.createClass` unless you have a very good reason to use mixins. eslint: [`react/prefer-es6-class`](https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/prefer-es6-class.md) [`react/prefer-stateless-function`](https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/prefer-stateless-function.md)
+  - If you have internal state and/or refs, prefer `class extends React.Component` over `React.createClass`. eslint: [`react/prefer-es6-class`](https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/prefer-es6-class.md) [`react/prefer-stateless-function`](https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/prefer-stateless-function.md)
 
     ```jsx
     // bad
@@ -69,6 +69,12 @@
     }
     ```
 
+## Mixins
+
+  - [Do not use mixins](https://facebook.github.io/react/blog/2016/07/13/mixins-considered-harmful.html).
+
+  > Why? Mixins introduce implicit dependencies, cause name clashes, and cause snowballing complexity. Most use cases for mixins can be accomplished in better ways via components, higher-order components, or utility modules.
+
 ## Naming
 
   - **Extensions**: Use `.jsx` extension for React components.

From d23b442799d591468100d19eab1344190e0b11ed Mon Sep 17 00:00:00 2001
From: Joe Lencioni <joe.lencioni@gmail.com>
Date: Tue, 14 Feb 2017 10:46:19 -0800
Subject: [PATCH 0982/1591] Add link to Mixins section in TOC

I forgot this when I created the section.
---
 react/README.md | 1 +
 1 file changed, 1 insertion(+)

diff --git a/react/README.md b/react/README.md
index 5e481aa992..c982f53787 100644
--- a/react/README.md
+++ b/react/README.md
@@ -6,6 +6,7 @@
 
   1. [Basic Rules](#basic-rules)
   1. [Class vs `React.createClass` vs stateless](#class-vs-reactcreateclass-vs-stateless)
+  1. [Mixins](#mixins)
   1. [Naming](#naming)
   1. [Declaration](#declaration)
   1. [Alignment](#alignment)

From bbbabf32f811dd8989e27cec4fbcc18025d9a515 Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Sun, 19 Feb 2017 16:51:19 -0800
Subject: [PATCH 0983/1591] [eslint config] [deps] update `eslint-plugin-react`
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

 - semver-patch: `jsx-max-props-per-line` “when” set to “multiline”, but left off for now.
---
 packages/eslint-config-airbnb/package.json   |  4 ++--
 packages/eslint-config-airbnb/rules/react.js | 20 ++++++++++++++++++--
 2 files changed, 20 insertions(+), 4 deletions(-)

diff --git a/packages/eslint-config-airbnb/package.json b/packages/eslint-config-airbnb/package.json
index 2ef0d65c51..51e0877b7e 100644
--- a/packages/eslint-config-airbnb/package.json
+++ b/packages/eslint-config-airbnb/package.json
@@ -56,7 +56,7 @@
     "eslint-find-rules": "^1.14.3",
     "eslint-plugin-import": "^2.2.0",
     "eslint-plugin-jsx-a11y": "^4.0.0",
-    "eslint-plugin-react": "^6.9.0",
+    "eslint-plugin-react": "^6.10.0",
     "in-publish": "^2.0.0",
     "react": ">= 0.13.0",
     "safe-publish-latest": "^1.1.1",
@@ -66,7 +66,7 @@
     "eslint": "^3.15.0",
     "eslint-plugin-jsx-a11y": "^4.0.0",
     "eslint-plugin-import": "^2.2.0",
-    "eslint-plugin-react": "^6.9.0"
+    "eslint-plugin-react": "^6.10.0"
   },
   "engines": {
     "node": ">= 4"
diff --git a/packages/eslint-config-airbnb/rules/react.js b/packages/eslint-config-airbnb/rules/react.js
index ad717eab61..407bf8fc78 100644
--- a/packages/eslint-config-airbnb/rules/react.js
+++ b/packages/eslint-config-airbnb/rules/react.js
@@ -71,7 +71,8 @@ module.exports = {
 
     // Limit maximum of props on a single line in JSX
     // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/jsx-max-props-per-line.md
-    'react/jsx-max-props-per-line': ['off', { maximum: 1 }],
+    // TODO: enable (semver-minor)
+    'react/jsx-max-props-per-line': ['off', { maximum: 1, when: 'multiline' }],
 
     // Prevent usage of .bind() in JSX props
     // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/jsx-no-bind.md
@@ -118,6 +119,7 @@ module.exports = {
       callbacksLast: false,
       shorthandFirst: false,
       shorthandLast: false,
+      noSortAlphabetically: false,
     }],
 
     // Prevent React to be incorrectly marked as unused
@@ -178,7 +180,7 @@ module.exports = {
 
     // Prevent missing props validation in a React component definition
     // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/prop-types.md
-    'react/prop-types': ['error', { ignore: [], customValidators: [] }],
+    'react/prop-types': ['error', { ignore: [], customValidators: [], skipUndeclared: false }],
 
     // Prevent missing React when using JSX
     // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/react-in-jsx-scope.md
@@ -304,6 +306,20 @@ module.exports = {
     // Enforce a defaultProps definition for every prop that is not a required prop
     // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/require-default-props.md
     'react/require-default-props': 'error',
+
+    'react/forbid-elements': ['off', {
+      forbid: [
+      ],
+    }],
+
+    // Forbids using non-exported propTypes
+    // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/forbid-foreign-prop-types.md
+    'react/forbid-foreign-prop-types': 'off',
+
+    // Prevent void DOM elements from receiving children
+    // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/void-dom-elements-no-children.md
+    // TODO: enable (semver-minor)
+    'react/void-dom-elements-no-children': 'off',
   },
 
   settings: {

From 840d021d07e5dcc036e458e78f9a1f7201e20ba9 Mon Sep 17 00:00:00 2001
From: Adam Walsh <walshie4@users.noreply.github.com>
Date: Wed, 22 Feb 2017 10:08:38 -0800
Subject: [PATCH 0984/1591] Add Honey to list of users

---
 README.md | 1 +
 1 file changed, 1 insertion(+)

diff --git a/README.md b/README.md
index 6e6c2d8eaa..57ef0ed0cb 100644
--- a/README.md
+++ b/README.md
@@ -3197,6 +3197,7 @@ Other Style Guides
   - **General Electric**: [GeneralElectric/javascript](https://github.com/GeneralElectric/javascript)
   - **GoodData**: [gooddata/gdc-js-style](https://github.com/gooddata/gdc-js-style)
   - **Grooveshark**: [grooveshark/javascript](https://github.com/grooveshark/javascript)
+  - **Honey**: [honeyscience/javascript](https://github.com/honeyscience/javascript)
   - **How About We**: [howaboutwe/javascript](https://github.com/howaboutwe/javascript-style-guide)
   - **Huballin**: [huballin/javascript](https://github.com/huballin/javascript)
   - **HubSpot**: [HubSpot/javascript](https://github.com/HubSpot/javascript)

From bc21501cc7f5549c3d33fb94682eae9d2ce01c47 Mon Sep 17 00:00:00 2001
From: Steve Mao <maochenyan@gmail.com>
Date: Thu, 23 Feb 2017 14:13:39 +1100
Subject: [PATCH 0985/1591] [eslint config] [base] [minor] add `**/*.spec.js`
 as a test files pattern

(see #1131)
---
 packages/eslint-config-airbnb-base/rules/imports.js | 1 +
 1 file changed, 1 insertion(+)

diff --git a/packages/eslint-config-airbnb-base/rules/imports.js b/packages/eslint-config-airbnb-base/rules/imports.js
index 42706a506c..20b282a004 100644
--- a/packages/eslint-config-airbnb-base/rules/imports.js
+++ b/packages/eslint-config-airbnb-base/rules/imports.js
@@ -76,6 +76,7 @@ module.exports = {
         'test.js', // repos with a single test file
         'test-*.js', // repos with multiple top-level test files
         '**/*.test.js', // tests where the extension denotes that it is a test
+        '**/*.spec.js', // tests where the extension denotes that it is a test
         '**/webpack.config.js', // webpack config
         '**/webpack.config.*.js', // webpack config
         '**/rollup.config.js', // rollup config

From b153231867170e28c199d6216d36b6367018aab0 Mon Sep 17 00:00:00 2001
From: Raj Nigam <rajington@users.noreply.github.com>
Date: Thu, 23 Feb 2017 11:36:24 -0500
Subject: [PATCH 0986/1591] Update renamed jsx-wrap-multilines

`react/wrap-multilines` has been renamed to `react/jsx-wrap-multilines`
---
 react/README.md | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/react/README.md b/react/README.md
index c982f53787..6accbc0445 100644
--- a/react/README.md
+++ b/react/README.md
@@ -392,7 +392,7 @@
 
 ## Parentheses
 
-  - Wrap JSX tags in parentheses when they span more than one line. eslint: [`react/wrap-multilines`](https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/wrap-multilines.md)
+  - Wrap JSX tags in parentheses when they span more than one line. eslint: [`react/jsx-wrap-multilines`](https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/jsx-wrap-multilines.md)
 
     ```jsx
     // bad

From 5ca6d46b7caf4a5bc75868cf769da9ce30b02a64 Mon Sep 17 00:00:00 2001
From: Harrison Shoff <hi@hshoff.com>
Date: Sat, 25 Feb 2017 14:12:37 -0800
Subject: [PATCH 0987/1591] [resources] add link to neutrino preset

https://neutrino.js.org/presets/neutrino-preset-airbnb-base/
---
 README.md | 1 +
 1 file changed, 1 insertion(+)

diff --git a/README.md b/README.md
index 57ef0ed0cb..e67c51ba61 100644
--- a/README.md
+++ b/README.md
@@ -3099,6 +3099,7 @@ Other Style Guides
     + [ESlint](http://eslint.org/) - [Airbnb Style .eslintrc](https://github.com/airbnb/javascript/blob/master/linters/.eslintrc)
     + [JSHint](http://jshint.com/) - [Airbnb Style .jshintrc](https://github.com/airbnb/javascript/blob/master/linters/.jshintrc)
     + [JSCS](https://github.com/jscs-dev/node-jscs) - [Airbnb Style Preset](https://github.com/jscs-dev/node-jscs/blob/master/presets/airbnb.json) (Deprecated, please use [ESlint](https://github.com/airbnb/javascript/tree/master/packages/eslint-config-airbnb-base))
+  - Neutrino preset - [neutrino-preset-airbnb-base](https://neutrino.js.org/presets/neutrino-preset-airbnb-base/)
 
 **Other Style Guides**
 

From 5ad25766fb33736af1c0f150533c11771928c156 Mon Sep 17 00:00:00 2001
From: Tihomir Opacic <tihomir.opacic@orangehilldev.com>
Date: Wed, 1 Mar 2017 20:31:43 +0100
Subject: [PATCH 0988/1591] Added OHD to a list of style guide users.

---
 README.md | 1 +
 1 file changed, 1 insertion(+)

diff --git a/README.md b/README.md
index e67c51ba61..65f932a201 100644
--- a/README.md
+++ b/README.md
@@ -3219,6 +3219,7 @@ Other Style Guides
   - **National Geographic**: [natgeo/javascript](https://github.com/natgeo/javascript)
   - **Nimbl3**: [nimbl3/javascript](https://github.com/nimbl3/javascript)
   - **Nulogy**: [nulogy/javascript](https://github.com/nulogy/javascript)
+  - **Orange Hill Development**: [orangehill/javascript](https://github.com/orangehill/javascript)
   - **Orion Health**: [orionhealth/javascript](https://github.com/orionhealth/javascript)
   - **OutBoxSoft**: [OutBoxSoft/javascript](https://github.com/OutBoxSoft/javascript)
   - **Peerby**: [Peerby/javascript](https://github.com/Peerby/javascript)

From 93e91d3eb94ee24a82c013527b31d5b83f151025 Mon Sep 17 00:00:00 2001
From: Tom Wrenn <tfw62192@gmail.com>
Date: Fri, 3 Mar 2017 11:36:09 -0800
Subject: [PATCH 0989/1591] Add AltSchool to the "In The Wild" section of the
 README

---
 README.md | 1 +
 1 file changed, 1 insertion(+)

diff --git a/README.md b/README.md
index 65f932a201..6e09c01a23 100644
--- a/README.md
+++ b/README.md
@@ -3171,6 +3171,7 @@ Other Style Guides
   - **Aan Zee**: [AanZee/javascript](https://github.com/AanZee/javascript)
   - **Adult Swim**: [adult-swim/javascript](https://github.com/adult-swim/javascript)
   - **Airbnb**: [airbnb/javascript](https://github.com/airbnb/javascript)
+  - **AltSchool**: [AltSchool/javascript](https://github.com/AltSchool/javascript)
   - **Apartmint**: [apartmint/javascript](https://github.com/apartmint/javascript)
   - **Ascribe**: [ascribe/javascript](https://github.com/ascribe/javascript)
   - **Avalara**: [avalara/javascript](https://github.com/avalara/javascript)

From c9490c698e50c428b5dbb64775684061ba86082d Mon Sep 17 00:00:00 2001
From: David Cameron <flyingace@users.noreply.github.com>
Date: Fri, 3 Mar 2017 14:44:34 -0500
Subject: [PATCH 0990/1591] [guide] Added 'let' to rule defs regarding
 variables

---
 README.md | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/README.md b/README.md
index 6e09c01a23..15f4b92962 100644
--- a/README.md
+++ b/README.md
@@ -1450,7 +1450,7 @@ Other Style Guides
 ## Variables
 
   <a name="variables--const"></a><a name="13.1"></a>
-  - [13.1](#variables--const) Always use `const` to declare variables. Not doing so will result in global variables. We want to avoid polluting the global namespace. Captain Planet warned us of that. eslint: [`no-undef`](http://eslint.org/docs/rules/no-undef) [`prefer-const`](http://eslint.org/docs/rules/prefer-const)
+  - [13.1](#variables--const) Always use `const` or `let` to declare variables. Not doing so will result in global variables. We want to avoid polluting the global namespace. Captain Planet warned us of that. eslint: [`no-undef`](http://eslint.org/docs/rules/no-undef) [`prefer-const`](http://eslint.org/docs/rules/prefer-const)
 
     ```javascript
     // bad
@@ -1461,7 +1461,7 @@ Other Style Guides
     ```
 
   <a name="variables--one-const"></a><a name="13.2"></a>
-  - [13.2](#variables--one-const) Use one `const` declaration per variable. eslint: [`one-var`](http://eslint.org/docs/rules/one-var.html) jscs: [`disallowMultipleVarDecl`](http://jscs.info/rule/disallowMultipleVarDecl)
+  - [13.2](#variables--one-const) Use one `const` or `let` declaration per variable. eslint: [`one-var`](http://eslint.org/docs/rules/one-var.html) jscs: [`disallowMultipleVarDecl`](http://jscs.info/rule/disallowMultipleVarDecl)
 
     > Why? It's easier to add new variable declarations this way, and you never have to worry about swapping out a `;` for a `,` or introducing punctuation-only diffs. You can also step through each declaration with the debugger, instead of jumping through all of them at once.
 

From 1a2edb9e9efe3c50ecaa7c4fa3295b24c68cc9c5 Mon Sep 17 00:00:00 2001
From: Ivan Zusko <IvanZusko@ecenglish.com>
Date: Wed, 4 Jan 2017 10:58:43 +0200
Subject: [PATCH 0991/1591] Add ukrainian translation

---
 README.md | 1 +
 1 file changed, 1 insertion(+)

diff --git a/README.md b/README.md
index 15f4b92962..2680c19a4d 100644
--- a/README.md
+++ b/README.md
@@ -3254,6 +3254,7 @@ Other Style Guides
 
   This style guide is also available in other languages:
 
+  - ![ua](https://raw.githubusercontent.com/gosquared/flags/master/flags/flags/shiny/24/Ukraine.png) **Ukrainian**: [ivanzusko/javascript](https://github.com/ivanzusko/javascript)
   - ![br](https://raw.githubusercontent.com/gosquared/flags/master/flags/flags/shiny/24/Brazil.png) **Brazilian Portuguese**: [armoucar/javascript-style-guide](https://github.com/armoucar/javascript-style-guide)
   - ![bg](https://raw.githubusercontent.com/gosquared/flags/master/flags/flags/shiny/24/Bulgaria.png) **Bulgarian**: [borislavvv/javascript](https://github.com/borislavvv/javascript)
   - ![ca](https://raw.githubusercontent.com/fpmweb/javascript-style-guide/master/img/catala.png) **Catalan**: [fpmweb/javascript-style-guide](https://github.com/fpmweb/javascript-style-guide)

From 1f5999b2ed832bdf341b15a7a0a564e6c2684a0d Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Fri, 3 Mar 2017 13:33:24 -0800
Subject: [PATCH 0992/1591] [eslint config] [base] [deps] update `eslint`

 - fill out options in `no-use-before-define`
 - enable `ignoreRestSiblings` in `no-unused-vars`
---
 packages/eslint-config-airbnb-base/package.json       | 4 ++--
 packages/eslint-config-airbnb-base/rules/variables.js | 4 ++--
 2 files changed, 4 insertions(+), 4 deletions(-)

diff --git a/packages/eslint-config-airbnb-base/package.json b/packages/eslint-config-airbnb-base/package.json
index 63efb3588d..ccab07d9b2 100644
--- a/packages/eslint-config-airbnb-base/package.json
+++ b/packages/eslint-config-airbnb-base/package.json
@@ -49,7 +49,7 @@
     "babel-preset-airbnb": "^2.2.3",
     "babel-tape-runner": "^2.0.1",
     "editorconfig-tools": "^0.1.1",
-    "eslint": "^3.15.0",
+    "eslint": "^3.16.1",
     "eslint-find-rules": "^1.14.3",
     "eslint-plugin-import": "^2.2.0",
     "in-publish": "^2.0.0",
@@ -57,7 +57,7 @@
     "tape": "^4.6.3"
   },
   "peerDependencies": {
-    "eslint": "^3.15.0",
+    "eslint": "^3.16.1",
     "eslint-plugin-import": "^2.2.0"
   },
   "engines": {
diff --git a/packages/eslint-config-airbnb-base/rules/variables.js b/packages/eslint-config-airbnb-base/rules/variables.js
index 8af041c082..1eb7528aa8 100644
--- a/packages/eslint-config-airbnb-base/rules/variables.js
+++ b/packages/eslint-config-airbnb-base/rules/variables.js
@@ -34,9 +34,9 @@ module.exports = {
     'no-undefined': 'off',
 
     // disallow declaration of variables that are not used in the code
-    'no-unused-vars': ['error', { vars: 'local', args: 'after-used' }],
+    'no-unused-vars': ['error', { vars: 'local', args: 'after-used', ignoreRestSiblings: true }],
 
     // disallow use of variables before they are defined
-    'no-use-before-define': 'error'
+    'no-use-before-define': ['error', { functions: true, classes: true, variables: true }],
   }
 };

From be0315eda1f0cbda7c4b5b1ad65fa9456f51ef8b Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Fri, 3 Mar 2017 13:35:36 -0800
Subject: [PATCH 0993/1591] [eslint config] [base] v11.1.1

---
 packages/eslint-config-airbnb-base/CHANGELOG.md | 5 +++++
 packages/eslint-config-airbnb-base/package.json | 2 +-
 2 files changed, 6 insertions(+), 1 deletion(-)

diff --git a/packages/eslint-config-airbnb-base/CHANGELOG.md b/packages/eslint-config-airbnb-base/CHANGELOG.md
index b14a4d6b26..841ee45ce7 100644
--- a/packages/eslint-config-airbnb-base/CHANGELOG.md
+++ b/packages/eslint-config-airbnb-base/CHANGELOG.md
@@ -1,3 +1,8 @@
+11.1.1 / 2017-03-03
+==================
+ - [deps] update `eslint`
+ - [patch] enable `ignoreRestSiblings` in `no-unused-vars`
+
 11.1.0 / 2017-01-08
 ==================
  - [minor] enable `no-multi-assign`
diff --git a/packages/eslint-config-airbnb-base/package.json b/packages/eslint-config-airbnb-base/package.json
index ccab07d9b2..959c88a568 100644
--- a/packages/eslint-config-airbnb-base/package.json
+++ b/packages/eslint-config-airbnb-base/package.json
@@ -1,6 +1,6 @@
 {
   "name": "eslint-config-airbnb-base",
-  "version": "11.1.0",
+  "version": "11.1.1",
   "description": "Airbnb's base JS ESLint config, following our styleguide",
   "main": "index.js",
   "scripts": {

From f9aff60f5327134f23655df24f74918083485a67 Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Fri, 3 Mar 2017 14:14:46 -0800
Subject: [PATCH 0994/1591] [eslint config] [deps] update `eslint`,
 `eslint-config-airbnb-base`

---
 packages/eslint-config-airbnb/package.json | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/packages/eslint-config-airbnb/package.json b/packages/eslint-config-airbnb/package.json
index 51e0877b7e..e279e45186 100644
--- a/packages/eslint-config-airbnb/package.json
+++ b/packages/eslint-config-airbnb/package.json
@@ -46,13 +46,13 @@
   },
   "homepage": "https://github.com/airbnb/javascript",
   "dependencies": {
-    "eslint-config-airbnb-base": "^11.1.0"
+    "eslint-config-airbnb-base": "^11.1.1"
   },
   "devDependencies": {
     "babel-preset-airbnb": "^2.2.3",
     "babel-tape-runner": "^2.0.1",
     "editorconfig-tools": "^0.1.1",
-    "eslint": "^3.15.0",
+    "eslint": "^3.16.1",
     "eslint-find-rules": "^1.14.3",
     "eslint-plugin-import": "^2.2.0",
     "eslint-plugin-jsx-a11y": "^4.0.0",
@@ -63,7 +63,7 @@
     "tape": "^4.6.3"
   },
   "peerDependencies": {
-    "eslint": "^3.15.0",
+    "eslint": "^3.16.1",
     "eslint-plugin-jsx-a11y": "^4.0.0",
     "eslint-plugin-import": "^2.2.0",
     "eslint-plugin-react": "^6.10.0"

From 772bbb5b7d2f6990e519c3d70539f807257492fe Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Fri, 3 Mar 2017 15:08:41 -0800
Subject: [PATCH 0995/1591] [eslint config] [base] [deps] update `eslint`

---
 packages/eslint-config-airbnb-base/package.json    | 4 ++--
 packages/eslint-config-airbnb-base/rules/errors.js | 5 +++++
 packages/eslint-config-airbnb-base/rules/style.js  | 4 ++++
 3 files changed, 11 insertions(+), 2 deletions(-)

diff --git a/packages/eslint-config-airbnb-base/package.json b/packages/eslint-config-airbnb-base/package.json
index 959c88a568..4efe9b9365 100644
--- a/packages/eslint-config-airbnb-base/package.json
+++ b/packages/eslint-config-airbnb-base/package.json
@@ -49,7 +49,7 @@
     "babel-preset-airbnb": "^2.2.3",
     "babel-tape-runner": "^2.0.1",
     "editorconfig-tools": "^0.1.1",
-    "eslint": "^3.16.1",
+    "eslint": "^3.17.0",
     "eslint-find-rules": "^1.14.3",
     "eslint-plugin-import": "^2.2.0",
     "in-publish": "^2.0.0",
@@ -57,7 +57,7 @@
     "tape": "^4.6.3"
   },
   "peerDependencies": {
-    "eslint": "^3.16.1",
+    "eslint": "^3.17.0",
     "eslint-plugin-import": "^2.2.0"
   },
   "engines": {
diff --git a/packages/eslint-config-airbnb-base/rules/errors.js b/packages/eslint-config-airbnb-base/rules/errors.js
index bade2a1cec..8f618e0661 100644
--- a/packages/eslint-config-airbnb-base/rules/errors.js
+++ b/packages/eslint-config-airbnb-base/rules/errors.js
@@ -13,6 +13,11 @@ module.exports = {
     // http://eslint.org/docs/rules/no-await-in-loop
     'no-await-in-loop': 'error',
 
+    // Disallow comparisons to negative zero
+    // http://eslint.org/docs/rules/no-compare-neg-zero
+    // TODO: enable (semver-major)
+    'no-compare-neg-zero': 'off',
+
     // disallow assignment in conditional expressions
     'no-cond-assign': ['error', 'always'],
 
diff --git a/packages/eslint-config-airbnb-base/rules/style.js b/packages/eslint-config-airbnb-base/rules/style.js
index 1d315bc51a..610caa218a 100644
--- a/packages/eslint-config-airbnb-base/rules/style.js
+++ b/packages/eslint-config-airbnb-base/rules/style.js
@@ -286,6 +286,10 @@ module.exports = {
     // http://eslint.org/docs/rules/no-whitespace-before-property
     'no-whitespace-before-property': 'error',
 
+    // enforce the location of single-line statements
+    // http://eslint.org/docs/rules/nonblock-statement-body-position
+    'nonblock-statement-body-position': 'off',
+
     // require padding inside curly braces
     'object-curly-spacing': ['error', 'always'],
 

From 34752644c395ff1d23dd8ce1a3bd040bf65e2b1f Mon Sep 17 00:00:00 2001
From: Christian Bundy <christianbundy@fraction.io>
Date: Wed, 15 Mar 2017 14:27:08 +0000
Subject: [PATCH 0996/1591] [eslint config] [base] Add
 ignorePropertyModificationsFor

---
 .../rules/best-practices.js                      | 16 ++++++++++++++--
 1 file changed, 14 insertions(+), 2 deletions(-)

diff --git a/packages/eslint-config-airbnb-base/rules/best-practices.js b/packages/eslint-config-airbnb-base/rules/best-practices.js
index 2587bc55e9..a3a9e1eaa6 100644
--- a/packages/eslint-config-airbnb-base/rules/best-practices.js
+++ b/packages/eslint-config-airbnb-base/rules/best-practices.js
@@ -164,9 +164,21 @@ module.exports = {
     'no-octal-escape': 'error',
 
     // disallow reassignment of function parameters
-    // disallow parameter object manipulation
+    // disallow parameter object manipulation except for specific exclusions
     // rule: http://eslint.org/docs/rules/no-param-reassign.html
-    'no-param-reassign': ['error', { props: true }],
+    'no-param-reassign': ['error', {
+      props: true,
+      ignorePropertyModificationsFor: [
+        'acc', // for reduce accumulators
+        'e', // for e.returnvalue
+        'ctx', // for Koa routing
+        'req', // for Express requests
+        'request', // for Express requests
+        'res', // for Express responses
+        'response', // for Express responses
+        '$scope', // for Angular 1 scopes
+      ]
+    }],
 
     // disallow usage of __proto__ property
     'no-proto': 'error',

From 321fb271bd6ca826040ef59690396132bde714ce Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Wed, 15 Mar 2017 18:03:56 -0700
Subject: [PATCH 0997/1591] [eslint config] [*] [deps] update `eslint`

---
 packages/eslint-config-airbnb-base/package.json | 4 ++--
 packages/eslint-config-airbnb/package.json      | 4 ++--
 2 files changed, 4 insertions(+), 4 deletions(-)

diff --git a/packages/eslint-config-airbnb-base/package.json b/packages/eslint-config-airbnb-base/package.json
index 4efe9b9365..1182a06dd3 100644
--- a/packages/eslint-config-airbnb-base/package.json
+++ b/packages/eslint-config-airbnb-base/package.json
@@ -49,7 +49,7 @@
     "babel-preset-airbnb": "^2.2.3",
     "babel-tape-runner": "^2.0.1",
     "editorconfig-tools": "^0.1.1",
-    "eslint": "^3.17.0",
+    "eslint": "^3.17.1",
     "eslint-find-rules": "^1.14.3",
     "eslint-plugin-import": "^2.2.0",
     "in-publish": "^2.0.0",
@@ -57,7 +57,7 @@
     "tape": "^4.6.3"
   },
   "peerDependencies": {
-    "eslint": "^3.17.0",
+    "eslint": "^3.17.1",
     "eslint-plugin-import": "^2.2.0"
   },
   "engines": {
diff --git a/packages/eslint-config-airbnb/package.json b/packages/eslint-config-airbnb/package.json
index e279e45186..1e80289881 100644
--- a/packages/eslint-config-airbnb/package.json
+++ b/packages/eslint-config-airbnb/package.json
@@ -52,7 +52,7 @@
     "babel-preset-airbnb": "^2.2.3",
     "babel-tape-runner": "^2.0.1",
     "editorconfig-tools": "^0.1.1",
-    "eslint": "^3.16.1",
+    "eslint": "^3.17.1",
     "eslint-find-rules": "^1.14.3",
     "eslint-plugin-import": "^2.2.0",
     "eslint-plugin-jsx-a11y": "^4.0.0",
@@ -63,7 +63,7 @@
     "tape": "^4.6.3"
   },
   "peerDependencies": {
-    "eslint": "^3.16.1",
+    "eslint": "^3.17.1",
     "eslint-plugin-jsx-a11y": "^4.0.0",
     "eslint-plugin-import": "^2.2.0",
     "eslint-plugin-react": "^6.10.0"

From 5797f545d8c0840feadc6d1464120d8eb5f47c38 Mon Sep 17 00:00:00 2001
From: JPeer264 <jan.oster94@gmail.com>
Date: Thu, 16 Mar 2017 09:05:59 +0100
Subject: [PATCH 0998/1591] [guide] Add array-bracket-newline (close #1338)

---
 README.md | 39 +++++++++++++++++++++++++++++++++++++++
 1 file changed, 39 insertions(+)

diff --git a/README.md b/README.md
index 2680c19a4d..48afd4b0e3 100644
--- a/README.md
+++ b/README.md
@@ -417,6 +417,45 @@ Other Style Guides
 
 **[⬆ back to top](#table-of-contents)**
 
+<a name="arrays--bracket-newline"></a>
+  - [4.6](#arrays--bracket-newline) Use line breaks after open and before close array brackets if an array has multiple lines
+
+  ```javascript
+  // bad
+  const arr = [
+    [0, 1], [2, 3], [4, 5],
+  ];
+
+  const objectInArray = [{
+    id: 1,
+  }, {
+    id: 2,
+  }];
+
+  const numberInArray = [
+    1, 2,
+  ];
+
+  // good
+  const arr = [[0, 1], [2, 3], [4, 5]];
+
+  const objectInArray = [
+    {
+      id: 1,
+    },
+    {
+      id: 2,
+    },
+  ];
+
+  const numberInArray = [
+    1,
+    2,
+  ];
+  ```
+
+**[⬆ back to top](#table-of-contents)**
+
 ## Destructuring
 
   <a name="destructuring--object"></a><a name="5.1"></a>

From 13dc420a9eb5447330bcee75f615f280bc20bf3e Mon Sep 17 00:00:00 2001
From: Hugo <github@hu.md>
Date: Tue, 21 Mar 2017 12:46:21 +1100
Subject: [PATCH 0999/1591] Fix Gitter badge in README.md

---
 README.md | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/README.md b/README.md
index 48afd4b0e3..5d9a9073d1 100644
--- a/README.md
+++ b/README.md
@@ -4,7 +4,7 @@
 
 [![Downloads](https://img.shields.io/npm/dm/eslint-config-airbnb.svg)](https://www.npmjs.com/package/eslint-config-airbnb)
 [![Downloads](https://img.shields.io/npm/dm/eslint-config-airbnb-base.svg)](https://www.npmjs.com/package/eslint-config-airbnb-base)
-[![Gitter](https://badges.gitter.im/Join Chat.svg)](https://gitter.im/airbnb/javascript?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge)
+[![Gitter](https://badges.gitter.im/Join%20Chat.svg)](https://gitter.im/airbnb/javascript?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge)
 
 Other Style Guides
  - [ES5 (Deprecated)](https://github.com/airbnb/javascript/tree/es5-deprecated/es5)

From 98f1b19d9524cdf8b8e4de52cedfa6ec98c094dd Mon Sep 17 00:00:00 2001
From: Jaden Dessureault <jaden@blackpixel.com>
Date: Wed, 22 Mar 2017 19:55:14 -0500
Subject: [PATCH 1000/1591] Indent blockquotes in markdown guides

This is required to make sure all code blocks have proper syntax highlighting
---
 css-in-javascript/README.md | 18 +++++++++---------
 react/README.md             | 12 ++++++------
 2 files changed, 15 insertions(+), 15 deletions(-)

diff --git a/css-in-javascript/README.md b/css-in-javascript/README.md
index 59c1c7bcbd..9c53bc3e0e 100644
--- a/css-in-javascript/README.md
+++ b/css-in-javascript/README.md
@@ -14,7 +14,7 @@
 
   - Use camelCase for object keys (i.e. "selectors").
 
-  > Why? We access these keys as properties on the `styles` object in the component, so it is most convenient to use camelCase.
+    > Why? We access these keys as properties on the `styles` object in the component, so it is most convenient to use camelCase.
 
     ```js
     // bad
@@ -34,7 +34,7 @@
 
   - Use an underscore for modifiers to other styles.
 
-  > Why? Similar to BEM, this naming convention makes it clear that the styles are intended to modify the element preceded by the underscore. Underscores do not need to be quoted, so they are preferred over other characters, such as dashes.
+    > Why? Similar to BEM, this naming convention makes it clear that the styles are intended to modify the element preceded by the underscore. Underscores do not need to be quoted, so they are preferred over other characters, such as dashes.
 
     ```js
     // bad
@@ -64,7 +64,7 @@
 
   - Use `selectorName_fallback` for sets of fallback styles.
 
-  > Why? Similar to modifiers, keeping the naming consistent helps reveal the relationship of these styles to the styles that override them in more adequate browsers.
+    > Why? Similar to modifiers, keeping the naming consistent helps reveal the relationship of these styles to the styles that override them in more adequate browsers.
 
     ```js
     // bad
@@ -92,7 +92,7 @@
 
   - Use a separate selector for sets of fallback styles.
 
-  > Why? Keeping fallback styles contained in a separate object clarifies their purpose, which improves readability.
+    > Why? Keeping fallback styles contained in a separate object clarifies their purpose, which improves readability.
 
     ```js
     // bad
@@ -133,7 +133,7 @@
 
   - Use device-agnostic names (e.g. "small", "medium", and "large") to name media query breakpoints.
 
-  > Why? Commonly used names like "phone", "tablet", and "desktop" do not match the characteristics of the devices in the real world. Using these names sets the wrong expectations.
+    > Why? Commonly used names like "phone", "tablet", and "desktop" do not match the characteristics of the devices in the real world. Using these names sets the wrong expectations.
 
     ```js
     // bad
@@ -155,7 +155,7 @@
 
   - Define styles after the component.
 
-  > Why? We use a higher-order component to theme our styles, which is naturally used after the component definition. Passing the styles object directly to this function reduces indirection.
+    > Why? We use a higher-order component to theme our styles, which is naturally used after the component definition. Passing the styles object directly to this function reduces indirection.
 
     ```jsx
     // bad
@@ -198,7 +198,7 @@
 
   - Leave a blank line between adjacent blocks at the same indentation level.
 
-  > Why? The whitespace improves readability and reduces the likelihood of merge conflicts.
+    > Why? The whitespace improves readability and reduces the likelihood of merge conflicts.
 
     ```js
     // bad
@@ -234,7 +234,7 @@
 
   - Use inline styles for styles that have a high cardinality (e.g. uses the value of a prop) and not for styles that have a low cardinality.
 
-  > Why? Generating themed stylesheets can be expensive, so they are best for discrete sets of styles.
+    > Why? Generating themed stylesheets can be expensive, so they are best for discrete sets of styles.
 
     ```jsx
     // bad
@@ -373,7 +373,7 @@
 
   - Define tricky fallback properties in themes.
 
-  > Why? Many CSS-in-JavaScript implementations merge style objects together which makes specifying fallbacks for the same property (e.g. `display`) a little tricky. To keep the approach unified, put these fallbacks in the theme.
+    > Why? Many CSS-in-JavaScript implementations merge style objects together which makes specifying fallbacks for the same property (e.g. `display`) a little tricky. To keep the approach unified, put these fallbacks in the theme.
 
     ```js
     // bad
diff --git a/react/README.md b/react/README.md
index 6accbc0445..1af002d8cc 100644
--- a/react/README.md
+++ b/react/README.md
@@ -110,7 +110,7 @@
     ```
   - **Higher-order Component Naming**: Use a composite of the higher-order component's name and the passed-in component's name as the `displayName` on the generated component. For example, the higher-order component `withFoo()`, when passed a component `Bar` should produce a component with a `displayName` of `withFoo(Bar)`.
 
-  > Why? A component's `displayName` may be used by developer tools or in error messages, and having a value that clearly expresses this relationship helps people understand what is happening.
+    > Why? A component's `displayName` may be used by developer tools or in error messages, and having a value that clearly expresses this relationship helps people understand what is happening.
 
     ```jsx
     // bad
@@ -137,7 +137,7 @@
 
   - **Props Naming**: Avoid using DOM component prop names for different purposes.
 
-  > Why? People expect props like `style` and `className` to mean one specific thing. Varying this API for a subset of your app makes the code less readable and less maintainable, and may cause bugs.
+    > Why? People expect props like `style` and `className` to mean one specific thing. Varying this API for a subset of your app makes the code less readable and less maintainable, and may cause bugs.
 
     ```jsx
     // bad
@@ -194,7 +194,7 @@
 
   - Always use double quotes (`"`) for JSX attributes, but single quotes (`'`) for all other JS. eslint: [`jsx-quotes`](http://eslint.org/docs/rules/jsx-quotes)
 
-  > Why? Regular HTML attributes also typically use double quotes instead of single, so JSX attributes mirror this convention.
+    > Why? Regular HTML attributes also typically use double quotes instead of single, so JSX attributes mirror this convention.
 
     ```jsx
     // bad
@@ -289,7 +289,7 @@
 
   - Do not use words like "image", "photo", or "picture" in `<img>` `alt` props. eslint: [`jsx-a11y/img-redundant-alt`](https://github.com/evcohen/eslint-plugin-jsx-a11y/blob/master/docs/rules/img-redundant-alt.md)
 
-  > Why? Screenreaders already announce `img` elements as images, so there is no need to include this information in the alt text.
+    > Why? Screenreaders already announce `img` elements as images, so there is no need to include this information in the alt text.
 
     ```jsx
     // bad
@@ -466,7 +466,7 @@
 
   - Bind event handlers for the render method in the constructor. eslint: [`react/jsx-no-bind`](https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/jsx-no-bind.md)
 
-  > Why? A bind call in the render path creates a brand new function on every single render.
+    > Why? A bind call in the render path creates a brand new function on every single render.
 
     ```jsx
     // bad
@@ -499,7 +499,7 @@
     ```
 
   - Do not use underscore prefix for internal methods of a React component.
-  > Why? Underscore prefixes are sometimes used as a convention in other languages to denote privacy. But, unlike those languages, there is no native support for privacy in JavaScript, everything is public. Regardless of your intentions, adding underscore prefixes to your properties does not actually make them private, and any property (underscore-prefixed or not) should be treated as being public. See issues [#1024](https://github.com/airbnb/javascript/issues/1024), and [#490](https://github.com/airbnb/javascript/issues/490) for a more in-depth discussion.
+    > Why? Underscore prefixes are sometimes used as a convention in other languages to denote privacy. But, unlike those languages, there is no native support for privacy in JavaScript, everything is public. Regardless of your intentions, adding underscore prefixes to your properties does not actually make them private, and any property (underscore-prefixed or not) should be treated as being public. See issues [#1024](https://github.com/airbnb/javascript/issues/1024), and [#490](https://github.com/airbnb/javascript/issues/490) for a more in-depth discussion.
 
     ```jsx
     // bad

From ae1c919cd4e8e13d5728a2beb3b38bff36eea0cd Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Sat, 25 Mar 2017 18:40:06 -0700
Subject: [PATCH 1001/1591] [eslint config] [base] [deps] update `eslint`

---
 packages/eslint-config-airbnb-base/package.json            | 4 ++--
 packages/eslint-config-airbnb-base/rules/best-practices.js | 1 +
 2 files changed, 3 insertions(+), 2 deletions(-)

diff --git a/packages/eslint-config-airbnb-base/package.json b/packages/eslint-config-airbnb-base/package.json
index 1182a06dd3..38be15baa4 100644
--- a/packages/eslint-config-airbnb-base/package.json
+++ b/packages/eslint-config-airbnb-base/package.json
@@ -49,7 +49,7 @@
     "babel-preset-airbnb": "^2.2.3",
     "babel-tape-runner": "^2.0.1",
     "editorconfig-tools": "^0.1.1",
-    "eslint": "^3.17.1",
+    "eslint": "^3.18.0",
     "eslint-find-rules": "^1.14.3",
     "eslint-plugin-import": "^2.2.0",
     "in-publish": "^2.0.0",
@@ -57,7 +57,7 @@
     "tape": "^4.6.3"
   },
   "peerDependencies": {
-    "eslint": "^3.17.1",
+    "eslint": "^3.18.0",
     "eslint-plugin-import": "^2.2.0"
   },
   "engines": {
diff --git a/packages/eslint-config-airbnb-base/rules/best-practices.js b/packages/eslint-config-airbnb-base/rules/best-practices.js
index a3a9e1eaa6..c9f729c75f 100644
--- a/packages/eslint-config-airbnb-base/rules/best-practices.js
+++ b/packages/eslint-config-airbnb-base/rules/best-practices.js
@@ -234,6 +234,7 @@ module.exports = {
     'no-unused-expressions': ['error', {
       allowShortCircuit: false,
       allowTernary: false,
+      allowTaggedTemplates: false,
     }],
 
     // disallow unused labels

From 75d48c7570b2c5336c75c454ce91991a34d0554e Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Sat, 25 Mar 2017 18:43:29 -0700
Subject: [PATCH 1002/1591] [eslint config] [base] v11.1.2

---
 packages/eslint-config-airbnb-base/CHANGELOG.md | 5 +++++
 packages/eslint-config-airbnb-base/package.json | 2 +-
 2 files changed, 6 insertions(+), 1 deletion(-)

diff --git a/packages/eslint-config-airbnb-base/CHANGELOG.md b/packages/eslint-config-airbnb-base/CHANGELOG.md
index 841ee45ce7..83a1763796 100644
--- a/packages/eslint-config-airbnb-base/CHANGELOG.md
+++ b/packages/eslint-config-airbnb-base/CHANGELOG.md
@@ -1,3 +1,8 @@
+11.1.2 / 2017-03-25
+==================
+ - [patch] `no-param-reassign`: add ignorePropertyModificationsFor (#1325)
+ - [deps] update `eslint`
+
 11.1.1 / 2017-03-03
 ==================
  - [deps] update `eslint`
diff --git a/packages/eslint-config-airbnb-base/package.json b/packages/eslint-config-airbnb-base/package.json
index 38be15baa4..e4f92cb6b0 100644
--- a/packages/eslint-config-airbnb-base/package.json
+++ b/packages/eslint-config-airbnb-base/package.json
@@ -1,6 +1,6 @@
 {
   "name": "eslint-config-airbnb-base",
-  "version": "11.1.1",
+  "version": "11.1.2",
   "description": "Airbnb's base JS ESLint config, following our styleguide",
   "main": "index.js",
   "scripts": {

From b8d8d6e56f0c1d817af002da0f81b57f45ba24db Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Sat, 25 Mar 2017 21:32:09 -0700
Subject: [PATCH 1003/1591] [eslint config] [deps] update
 `eslint-config-airbnb-base`, `eslint`, `eslint-plugin-react`

---
 packages/eslint-config-airbnb/package.json | 10 +++++-----
 1 file changed, 5 insertions(+), 5 deletions(-)

diff --git a/packages/eslint-config-airbnb/package.json b/packages/eslint-config-airbnb/package.json
index 1e80289881..c1a5d90df6 100644
--- a/packages/eslint-config-airbnb/package.json
+++ b/packages/eslint-config-airbnb/package.json
@@ -46,27 +46,27 @@
   },
   "homepage": "https://github.com/airbnb/javascript",
   "dependencies": {
-    "eslint-config-airbnb-base": "^11.1.1"
+    "eslint-config-airbnb-base": "^11.1.2"
   },
   "devDependencies": {
     "babel-preset-airbnb": "^2.2.3",
     "babel-tape-runner": "^2.0.1",
     "editorconfig-tools": "^0.1.1",
-    "eslint": "^3.17.1",
+    "eslint": "^3.18.0",
     "eslint-find-rules": "^1.14.3",
     "eslint-plugin-import": "^2.2.0",
     "eslint-plugin-jsx-a11y": "^4.0.0",
-    "eslint-plugin-react": "^6.10.0",
+    "eslint-plugin-react": "^6.10.3",
     "in-publish": "^2.0.0",
     "react": ">= 0.13.0",
     "safe-publish-latest": "^1.1.1",
     "tape": "^4.6.3"
   },
   "peerDependencies": {
-    "eslint": "^3.17.1",
+    "eslint": "^3.18.0",
     "eslint-plugin-jsx-a11y": "^4.0.0",
     "eslint-plugin-import": "^2.2.0",
-    "eslint-plugin-react": "^6.10.0"
+    "eslint-plugin-react": "^6.10.3"
   },
   "engines": {
     "node": ">= 4"

From aa9bbf9f49f9eb2dfca152b25200e0893a9dbedb Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Mon, 3 Apr 2017 15:22:34 -0700
Subject: [PATCH 1004/1591] [eslint config] [base] [deps] update `eslint`

---
 packages/eslint-config-airbnb-base/package.json | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/packages/eslint-config-airbnb-base/package.json b/packages/eslint-config-airbnb-base/package.json
index e4f92cb6b0..14e9063b54 100644
--- a/packages/eslint-config-airbnb-base/package.json
+++ b/packages/eslint-config-airbnb-base/package.json
@@ -49,7 +49,7 @@
     "babel-preset-airbnb": "^2.2.3",
     "babel-tape-runner": "^2.0.1",
     "editorconfig-tools": "^0.1.1",
-    "eslint": "^3.18.0",
+    "eslint": "^3.19.0",
     "eslint-find-rules": "^1.14.3",
     "eslint-plugin-import": "^2.2.0",
     "in-publish": "^2.0.0",
@@ -57,7 +57,7 @@
     "tape": "^4.6.3"
   },
   "peerDependencies": {
-    "eslint": "^3.18.0",
+    "eslint": "^3.19.0",
     "eslint-plugin-import": "^2.2.0"
   },
   "engines": {

From 74071a809c22fa1104fe5d86bcd1eda949e1d0d9 Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Mon, 3 Apr 2017 15:23:00 -0700
Subject: [PATCH 1005/1591] [eslint config] [base] [patch] add error messages
 to `no-restricted-syntax`

Fixes #1353.
---
 .../eslint-config-airbnb-base/rules/style.js  | 20 +++++++++++++++----
 1 file changed, 16 insertions(+), 4 deletions(-)

diff --git a/packages/eslint-config-airbnb-base/rules/style.js b/packages/eslint-config-airbnb-base/rules/style.js
index 610caa218a..237f16899d 100644
--- a/packages/eslint-config-airbnb-base/rules/style.js
+++ b/packages/eslint-config-airbnb-base/rules/style.js
@@ -256,10 +256,22 @@ module.exports = {
     // http://eslint.org/docs/rules/no-restricted-syntax
     'no-restricted-syntax': [
       'error',
-      'ForInStatement',
-      'ForOfStatement',
-      'LabeledStatement',
-      'WithStatement',
+      {
+        selector: 'ForInStatement',
+        message: 'for..in loops iterate over the entire prototype chain, which is virtually never what you want. Use Object.{keys,values,entries}, and iterate over the resulting array.',
+      },
+      {
+        selector: 'ForOfStatement',
+        message: 'iterators/generators require regenerator-runtime, which is too heavyweight for this guide to allow them. Separately, loops should be avoided in favor of array iterations.',
+      },
+      {
+        selector: 'LabeledStatement',
+        message: 'Labels are a form of GOTO; using them makes code confusing and hard to maintain and understand.',
+      },
+      {
+        selector: 'WithStatement',
+        message: '`with` is disallowed in strict mode because it makes code impossible to predict and optimize.',
+      },
     ],
 
     // disallow space between function identifier and application

From e43bdd98d52c3b248aef932645e4a431e598544d Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Mon, 3 Apr 2017 15:44:14 -0700
Subject: [PATCH 1006/1591] [eslint config] [base] v11.1.3

---
 packages/eslint-config-airbnb-base/CHANGELOG.md | 5 +++++
 packages/eslint-config-airbnb-base/package.json | 2 +-
 2 files changed, 6 insertions(+), 1 deletion(-)

diff --git a/packages/eslint-config-airbnb-base/CHANGELOG.md b/packages/eslint-config-airbnb-base/CHANGELOG.md
index 83a1763796..8559e2277c 100644
--- a/packages/eslint-config-airbnb-base/CHANGELOG.md
+++ b/packages/eslint-config-airbnb-base/CHANGELOG.md
@@ -1,3 +1,8 @@
+11.1.3 / 2017-04-03
+==================
+ - [patch] add error messages to `no-restricted-syntax` (#1353)
+ - [deps] update `eslint`
+
 11.1.2 / 2017-03-25
 ==================
  - [patch] `no-param-reassign`: add ignorePropertyModificationsFor (#1325)
diff --git a/packages/eslint-config-airbnb-base/package.json b/packages/eslint-config-airbnb-base/package.json
index 14e9063b54..d4f8951317 100644
--- a/packages/eslint-config-airbnb-base/package.json
+++ b/packages/eslint-config-airbnb-base/package.json
@@ -1,6 +1,6 @@
 {
   "name": "eslint-config-airbnb-base",
-  "version": "11.1.2",
+  "version": "11.1.3",
   "description": "Airbnb's base JS ESLint config, following our styleguide",
   "main": "index.js",
   "scripts": {

From fa0a82373eb46ff8e99ccc43ba80c2c18c319e01 Mon Sep 17 00:00:00 2001
From: Max Kaplan <mekapl03@syr.edu>
Date: Tue, 4 Apr 2017 09:52:16 -0400
Subject: [PATCH 1007/1591] adding sourcetoad to users

---
 README.md | 1 +
 1 file changed, 1 insertion(+)

diff --git a/README.md b/README.md
index 5d9a9073d1..17c09a3c67 100644
--- a/README.md
+++ b/README.md
@@ -3270,6 +3270,7 @@ Other Style Guides
   - **Ripple**: [ripple/javascript-style-guide](https://github.com/ripple/javascript-style-guide)
   - **SeekingAlpha**: [seekingalpha/javascript-style-guide](https://github.com/seekingalpha/javascript-style-guide)
   - **Shutterfly**: [shutterfly/javascript](https://github.com/shutterfly/javascript)
+  - **Sourcetoad**: [sourcetoad/javascript](https://github.com/sourcetoad/javascript)
   - **Springload**: [springload/javascript](https://github.com/springload/javascript)
   - **StratoDem Analytics**: [stratodem/javascript](https://github.com/stratodem/javascript)
   - **SteelKiwi Development**: [steelkiwi/javascript](https://github.com/steelkiwi/javascript)

From cb027cd0020e5f792015dbe3eeb25bc2dda2a99d Mon Sep 17 00:00:00 2001
From: Nikita <bloomber111@gmail.com>
Date: Wed, 12 Apr 2017 02:01:16 +0500
Subject: [PATCH 1008/1591] translation links sorted

---
 README.md       | 2 +-
 react/README.md | 6 +++---
 2 files changed, 4 insertions(+), 4 deletions(-)

diff --git a/README.md b/README.md
index 17c09a3c67..538086c147 100644
--- a/README.md
+++ b/README.md
@@ -3294,7 +3294,6 @@ Other Style Guides
 
   This style guide is also available in other languages:
 
-  - ![ua](https://raw.githubusercontent.com/gosquared/flags/master/flags/flags/shiny/24/Ukraine.png) **Ukrainian**: [ivanzusko/javascript](https://github.com/ivanzusko/javascript)
   - ![br](https://raw.githubusercontent.com/gosquared/flags/master/flags/flags/shiny/24/Brazil.png) **Brazilian Portuguese**: [armoucar/javascript-style-guide](https://github.com/armoucar/javascript-style-guide)
   - ![bg](https://raw.githubusercontent.com/gosquared/flags/master/flags/flags/shiny/24/Bulgaria.png) **Bulgarian**: [borislavvv/javascript](https://github.com/borislavvv/javascript)
   - ![ca](https://raw.githubusercontent.com/fpmweb/javascript-style-guide/master/img/catala.png) **Catalan**: [fpmweb/javascript-style-guide](https://github.com/fpmweb/javascript-style-guide)
@@ -3309,6 +3308,7 @@ Other Style Guides
   - ![ru](https://raw.githubusercontent.com/gosquared/flags/master/flags/flags/shiny/24/Russia.png) **Russian**: [leonidlebedev/javascript-airbnb](https://github.com/leonidlebedev/javascript-airbnb)
   - ![es](https://raw.githubusercontent.com/gosquared/flags/master/flags/flags/shiny/24/Spain.png) **Spanish**: [paolocarrasco/javascript-style-guide](https://github.com/paolocarrasco/javascript-style-guide)
   - ![th](https://raw.githubusercontent.com/gosquared/flags/master/flags/flags/shiny/24/Thailand.png) **Thai**: [lvarayut/javascript-style-guide](https://github.com/lvarayut/javascript-style-guide)
+  - ![ua](https://raw.githubusercontent.com/gosquared/flags/master/flags/flags/shiny/24/Ukraine.png) **Ukrainian**: [ivanzusko/javascript](https://github.com/ivanzusko/javascript)
   - ![vn](https://raw.githubusercontent.com/gosquared/flags/master/flags/flags/shiny/24/Vietnam.png) **Vietnam**: [hngiang/javascript-style-guide](https://github.com/hngiang/javascript-style-guide)
 
 ## The JavaScript Style Guide Guide
diff --git a/react/README.md b/react/README.md
index 1af002d8cc..9525bfbda1 100644
--- a/react/README.md
+++ b/react/README.md
@@ -622,11 +622,11 @@
   This JSX/React style guide is also available in other languages:
 
   - ![cn](https://raw.githubusercontent.com/gosquared/flags/master/flags/flags/shiny/24/China.png) **Chinese (Simplified)**: [JasonBoy/javascript](https://github.com/JasonBoy/javascript/tree/master/react)
-  - ![pl](https://raw.githubusercontent.com/gosquared/flags/master/flags/flags/shiny/24/Poland.png) **Polish**: [pietraszekl/javascript](https://github.com/pietraszekl/javascript/tree/master/react)
+  - ![es](https://raw.githubusercontent.com/gosquared/flags/master/flags/flags/shiny/24/Spain.png) **Español**: [agrcrobles/javascript](https://github.com/agrcrobles/javascript/tree/master/react)
+  - ![jp](https://raw.githubusercontent.com/gosquared/flags/master/flags/flags/shiny/24/Japan.png) **Japanese**: [mitsuruog/javascript-style-guide](https://github.com/mitsuruog/javascript-style-guide/tree/master/react)
   - ![kr](https://raw.githubusercontent.com/gosquared/flags/master/flags/flags/shiny/24/South-Korea.png) **Korean**: [apple77y/javascript](https://github.com/apple77y/javascript/tree/master/react)
+  - ![pl](https://raw.githubusercontent.com/gosquared/flags/master/flags/flags/shiny/24/Poland.png) **Polish**: [pietraszekl/javascript](https://github.com/pietraszekl/javascript/tree/master/react)
   - ![Br](https://raw.githubusercontent.com/gosquared/flags/master/flags/flags/shiny/24/Brazil.png) **Portuguese**: [ronal2do/javascript](https://github.com/ronal2do/airbnb-react-styleguide)
-  - ![jp](https://raw.githubusercontent.com/gosquared/flags/master/flags/flags/shiny/24/Japan.png) **Japanese**: [mitsuruog/javascript-style-guide](https://github.com/mitsuruog/javascript-style-guide/tree/master/react)
-  - ![es](https://raw.githubusercontent.com/gosquared/flags/master/flags/flags/shiny/24/Spain.png) **Español**: [agrcrobles/javascript](https://github.com/agrcrobles/javascript/tree/master/react)
   - ![ua](https://raw.githubusercontent.com/gosquared/flags/master/flags/flags/shiny/24/Ukraine.png) **Ukrainian**: [ivanzusko/javascript](https://github.com/ivanzusko/javascript/tree/master/react)
 
 **[⬆ back to top](#table-of-contents)**

From 462ea7dd0ae82e2ab3f95f2761ccd7ddf210bcb5 Mon Sep 17 00:00:00 2001
From: Nikita <bloomber111@gmail.com>
Date: Wed, 12 Apr 2017 02:05:40 +0500
Subject: [PATCH 1009/1591] translation links in react guide updated

---
 react/README.md | 3 +++
 1 file changed, 3 insertions(+)

diff --git a/react/README.md b/react/README.md
index 9525bfbda1..4f31fc2110 100644
--- a/react/README.md
+++ b/react/README.md
@@ -622,11 +622,14 @@
   This JSX/React style guide is also available in other languages:
 
   - ![cn](https://raw.githubusercontent.com/gosquared/flags/master/flags/flags/shiny/24/China.png) **Chinese (Simplified)**: [JasonBoy/javascript](https://github.com/JasonBoy/javascript/tree/master/react)
+  - ![tw](https://raw.githubusercontent.com/gosquared/flags/master/flags/flags/shiny/24/Taiwan.png) **Chinese (Traditional)**: [jigsawye/javascript](https://github.com/jigsawye/javascript/tree/master/react)
   - ![es](https://raw.githubusercontent.com/gosquared/flags/master/flags/flags/shiny/24/Spain.png) **Español**: [agrcrobles/javascript](https://github.com/agrcrobles/javascript/tree/master/react)
   - ![jp](https://raw.githubusercontent.com/gosquared/flags/master/flags/flags/shiny/24/Japan.png) **Japanese**: [mitsuruog/javascript-style-guide](https://github.com/mitsuruog/javascript-style-guide/tree/master/react)
   - ![kr](https://raw.githubusercontent.com/gosquared/flags/master/flags/flags/shiny/24/South-Korea.png) **Korean**: [apple77y/javascript](https://github.com/apple77y/javascript/tree/master/react)
   - ![pl](https://raw.githubusercontent.com/gosquared/flags/master/flags/flags/shiny/24/Poland.png) **Polish**: [pietraszekl/javascript](https://github.com/pietraszekl/javascript/tree/master/react)
   - ![Br](https://raw.githubusercontent.com/gosquared/flags/master/flags/flags/shiny/24/Brazil.png) **Portuguese**: [ronal2do/javascript](https://github.com/ronal2do/airbnb-react-styleguide)
+  - ![ru](https://raw.githubusercontent.com/gosquared/flags/master/flags/flags/shiny/24/Russia.png) **Russian**: [leonidlebedev/javascript-airbnb](https://github.com/leonidlebedev/javascript-airbnb/tree/master/react)
+  - ![th](https://raw.githubusercontent.com/gosquared/flags/master/flags/flags/shiny/24/Thailand.png) **Thai**: [lvarayut/javascript-style-guide](https://github.com/lvarayut/javascript-style-guide/tree/master/react)
   - ![ua](https://raw.githubusercontent.com/gosquared/flags/master/flags/flags/shiny/24/Ukraine.png) **Ukrainian**: [ivanzusko/javascript](https://github.com/ivanzusko/javascript/tree/master/react)
 
 **[⬆ back to top](#table-of-contents)**

From 2c0da30904d842e80d2b7d0404a65867ba19b6df Mon Sep 17 00:00:00 2001
From: Kaka <hanzhijue@users.noreply.github.com>
Date: Wed, 12 Apr 2017 16:43:12 +0800
Subject: [PATCH 1010/1591] Fix the example of "propTypes"

This example makes me confused. I guess it missed the use of "children" of good code.
Is the example to explain that you should specify default values for non-required props?

Thanks
---
 react/README.md | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/react/README.md b/react/README.md
index 4f31fc2110..ce6bbbd764 100644
--- a/react/README.md
+++ b/react/README.md
@@ -360,8 +360,8 @@
   };
 
   // good
-  function SFC({ foo, bar }) {
-    return <div>{foo}{bar}</div>;
+  function SFC({ foo, bar, children }) {
+    return <div>{foo}{bar}{children}</div>;
   }
   SFC.propTypes = {
     foo: PropTypes.number.isRequired,

From 71932e1eed314dee508bdd7b3044c8e1e2d3609c Mon Sep 17 00:00:00 2001
From: Thomas Rix <tom@rixth.org>
Date: Thu, 20 Apr 2017 16:51:02 -0400
Subject: [PATCH 1011/1591] [eslint config] Turn `ignorePureComponent` option
 on for react/prefer-stateless-function

Otherwise, there is no way to write pure components that don't use state, refs, or lifecycle methods.

Stateless functions are not treated internally as pure components, and are rerendered every time.
---
 packages/eslint-config-airbnb/rules/react.js | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/packages/eslint-config-airbnb/rules/react.js b/packages/eslint-config-airbnb/rules/react.js
index 407bf8fc78..caf62dd81c 100644
--- a/packages/eslint-config-airbnb/rules/react.js
+++ b/packages/eslint-config-airbnb/rules/react.js
@@ -176,7 +176,7 @@ module.exports = {
 
     // Require stateless functions when not using lifecycle methods, setState or ref
     // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/prefer-stateless-function.md
-    'react/prefer-stateless-function': 'error',
+    'react/prefer-stateless-function': ['error', { ignorePureComponent: true }],
 
     // Prevent missing props validation in a React component definition
     // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/prop-types.md

From 8eee1f1b6927dcc7afe04b1ffbb5283a18017972 Mon Sep 17 00:00:00 2001
From: Martin Veith <ndresx@gmail.com>
Date: Sat, 22 Apr 2017 18:16:18 +0200
Subject: [PATCH 1012/1591] [guide] [react] Add missing semicolons

---
 react/README.md | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/react/README.md b/react/README.md
index ce6bbbd764..65f1aeb68b 100644
--- a/react/README.md
+++ b/react/README.md
@@ -476,7 +476,7 @@
       }
 
       render() {
-        return <div onClick={this.onClickDiv.bind(this)} />
+        return <div onClick={this.onClickDiv.bind(this)} />;
       }
     }
 
@@ -493,7 +493,7 @@
       }
 
       render() {
-        return <div onClick={this.onClickDiv} />
+        return <div onClick={this.onClickDiv} />;
       }
     }
     ```
@@ -575,7 +575,7 @@
       }
 
       render() {
-        return <a href={this.props.url} data-id={this.props.id}>{this.props.text}</a>
+        return <a href={this.props.url} data-id={this.props.id}>{this.props.text}</a>;
       }
     }
 

From 7abd9a929ca94468d6b5393986b5ca1695e3cf92 Mon Sep 17 00:00:00 2001
From: Nicolas Jakob <nicow.jakob@gmail.com>
Date: Mon, 24 Apr 2017 16:24:54 +0200
Subject: [PATCH 1013/1591] Add rollup.config.*.js to
 import/no-extraneous-dependencies ignore list

---
 packages/eslint-config-airbnb-base/rules/imports.js | 1 +
 1 file changed, 1 insertion(+)

diff --git a/packages/eslint-config-airbnb-base/rules/imports.js b/packages/eslint-config-airbnb-base/rules/imports.js
index 20b282a004..b081b59b6b 100644
--- a/packages/eslint-config-airbnb-base/rules/imports.js
+++ b/packages/eslint-config-airbnb-base/rules/imports.js
@@ -80,6 +80,7 @@ module.exports = {
         '**/webpack.config.js', // webpack config
         '**/webpack.config.*.js', // webpack config
         '**/rollup.config.js', // rollup config
+        '**/rollup.config.*.js', // rollup config
         '**/gulpfile.js', // gulp config
         '**/gulpfile.*.js', // gulp config
         '**/Gruntfile', // grunt config

From 88a070cd0df0951b9282cd8f329ad7fc0eed434f Mon Sep 17 00:00:00 2001
From: Jonathan Dubin <jonathandubin@gmail.com>
Date: Tue, 25 Apr 2017 10:37:54 -0700
Subject: [PATCH 1014/1591] Remove "simply" from Readme

---
 packages/eslint-config-airbnb/README.md | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/packages/eslint-config-airbnb/README.md b/packages/eslint-config-airbnb/README.md
index 122eaf2e7f..173e5c324c 100644
--- a/packages/eslint-config-airbnb/README.md
+++ b/packages/eslint-config-airbnb/README.md
@@ -18,7 +18,7 @@ Our default export contains all of our ESLint rules, including ECMAScript 6+ and
   npm info "eslint-config-airbnb@latest" peerDependencies
   ```
 
-  Linux/OSX users can simply run
+  Linux/OSX users can run
 
   ```sh
   (

From 1997f8ee85f634d3fd02e179daaf6c74875aacbc Mon Sep 17 00:00:00 2001
From: Jonathan Dubin <jonathandubin@gmail.com>
Date: Tue, 25 Apr 2017 10:47:50 -0700
Subject: [PATCH 1015/1591] Remove "simply" from Readme in base

---
 packages/eslint-config-airbnb-base/README.md | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/packages/eslint-config-airbnb-base/README.md b/packages/eslint-config-airbnb-base/README.md
index 4350a5dbd6..e27f3f3431 100644
--- a/packages/eslint-config-airbnb-base/README.md
+++ b/packages/eslint-config-airbnb-base/README.md
@@ -57,7 +57,7 @@ Lints ES5 and below. Requires `eslint` and `eslint-plugin-import`.
   npm info "eslint-config-airbnb-base@latest" peerDependencies
   ```
 
-  Linux/OSX users can simply run
+  Linux/OSX users can run
   ```sh
   (
     export PKG=eslint-config-airbnb-base;

From 83711e089a5fb8a33f5454a8ddc2f6e29b98137c Mon Sep 17 00:00:00 2001
From: Diego Teliz <diegoteliz007@gmail.com>
Date: Thu, 27 Apr 2017 15:03:28 +1200
Subject: [PATCH 1016/1591] Add 'InterCity Group' on 'In the Wild' list

---
 README.md | 1 +
 1 file changed, 1 insertion(+)

diff --git a/README.md b/README.md
index 538086c147..19ff63449b 100644
--- a/README.md
+++ b/README.md
@@ -3243,6 +3243,7 @@ Other Style Guides
   - **Huballin**: [huballin/javascript](https://github.com/huballin/javascript)
   - **HubSpot**: [HubSpot/javascript](https://github.com/HubSpot/javascript)
   - **Hyper**: [hyperoslo/javascript-playbook](https://github.com/hyperoslo/javascript-playbook/blob/master/style.md)
+  - **InterCity Group**: [intercitygroup/javascript-style-guide](https://github.com/intercitygroup/javascript-style-guide)
   - **Jam3**: [Jam3/Javascript-Code-Conventions](https://github.com/Jam3/Javascript-Code-Conventions)
   - **JeopardyBot**: [kesne/jeopardy-bot](https://github.com/kesne/jeopardy-bot/blob/master/STYLEGUIDE.md)
   - **JSSolutions**: [JSSolutions/javascript](https://github.com/JSSolutions/javascript)

From 3fe99604e625460d09a7d855bfe843a8c58f4e50 Mon Sep 17 00:00:00 2001
From: Denis Izmaylov <izmaylov.dm@gmail.com>
Date: Sat, 29 Apr 2017 18:20:56 +0300
Subject: [PATCH 1017/1591] Add 'Axept' into 'In the Wild' section

---
 README.md | 1 +
 1 file changed, 1 insertion(+)

diff --git a/README.md b/README.md
index 19ff63449b..e7821f0d4a 100644
--- a/README.md
+++ b/README.md
@@ -3215,6 +3215,7 @@ Other Style Guides
   - **Ascribe**: [ascribe/javascript](https://github.com/ascribe/javascript)
   - **Avalara**: [avalara/javascript](https://github.com/avalara/javascript)
   - **Avant**: [avantcredit/javascript](https://github.com/avantcredit/javascript)
+  - **Axept**: [axept/javascript](https://github.com/axept/javascript)
   - **BashPros**: [BashPros/javascript](https://github.com/BashPros/javascript)
   - **Billabong**: [billabong/javascript](https://github.com/billabong/javascript)
   - **Bisk**: [bisk/javascript](https://github.com/Bisk/javascript/)

From ee6b23d862bdf5e33934a658d117a157734d11cc Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Sun, 30 Apr 2017 21:19:58 -0700
Subject: [PATCH 1018/1591] [guide] remove remaining numbered links used as
 targets.

---
 README.md | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/README.md b/README.md
index e7821f0d4a..3ab5d2f793 100644
--- a/README.md
+++ b/README.md
@@ -367,7 +367,7 @@ Other Style Guides
     ```
 
   <a name="arrays--callback-return"></a><a name="4.5"></a>
-  - [4.5](#arrays--callback-return) Use return statements in array method callbacks. It's ok to omit the return if the function body consists of a single statement following [8.2](#8.2). eslint: [`array-callback-return`](http://eslint.org/docs/rules/array-callback-return)
+  - [4.5](#arrays--callback-return) Use return statements in array method callbacks. It's ok to omit the return if the function body consists of a single statement following [8.2](#arrows--implicit-return). eslint: [`array-callback-return`](http://eslint.org/docs/rules/array-callback-return)
 
     ```javascript
     // good
@@ -2569,7 +2569,7 @@ Other Style Guides
 ## Semicolons
 
   <a name="semicolons--required"></a><a name="20.1"></a>
-  - [20.1](#20.1) **Yup.** eslint: [`semi`](http://eslint.org/docs/rules/semi.html) jscs: [`requireSemicolons`](http://jscs.info/rule/requireSemicolons)
+  - [20.1](#semicolons--required) **Yup.** eslint: [`semi`](http://eslint.org/docs/rules/semi.html) jscs: [`requireSemicolons`](http://jscs.info/rule/requireSemicolons)
 
     ```javascript
     // bad

From 275d4bba983b76b1e9293751b7700380bc7e8696 Mon Sep 17 00:00:00 2001
From: Martin Veith <ndresx@gmail.com>
Date: Sat, 29 Apr 2017 21:03:35 +0200
Subject: [PATCH 1019/1591] Add "Control statements" section

---
 README.md | 161 +++++++++++++++++++++++++++++++++++++-----------------
 1 file changed, 110 insertions(+), 51 deletions(-)

diff --git a/README.md b/README.md
index 3ab5d2f793..ded9acf2f4 100644
--- a/README.md
+++ b/README.md
@@ -31,6 +31,7 @@ Other Style Guides
   1. [Hoisting](#hoisting)
   1. [Comparison Operators & Equality](#comparison-operators--equality)
   1. [Blocks](#blocks)
+  1. [Control Statements](#control-statements)
   1. [Comments](#comments)
   1. [Whitespace](#whitespace)
   1. [Commas](#commas)
@@ -647,7 +648,7 @@ Other Style Guides
     ```
 
   <a name="functions--in-blocks"></a><a name="7.3"></a>
-  - [7.3](#functions--in-blocks) Never declare a function in a non-function block (if, while, etc). Assign the function to a variable instead. Browsers will allow you to do it, but they all interpret it differently, which is bad news bears. eslint: [`no-loop-func`](http://eslint.org/docs/rules/no-loop-func.html)
+  - [7.3](#functions--in-blocks) Never declare a function in a non-function block (`if`, `while`, etc). Assign the function to a variable instead. Browsers will allow you to do it, but they all interpret it differently, which is bad news bears. eslint: [`no-loop-func`](http://eslint.org/docs/rules/no-loop-func.html)
 
   <a name="functions--note-on-blocks"></a><a name="7.4"></a>
   - [7.4](#functions--note-on-blocks) **Note:** ECMA-262 defines a `block` as a list of statements. A function declaration is not a statement. [Read ECMA-262's note on this issue](http://www.ecma-international.org/publications/files/ECMA-ST/Ecma-262.pdf#page=97).
@@ -1963,10 +1964,68 @@ Other Style Guides
 **[⬆ back to top](#table-of-contents)**
 
 
+## Control Statements
+
+  <a name="control-statements"></a>
+  - [17.1](#control-statements) In case your control statement (`if`, `while` etc.) gets too long or exceeds the maximum line length, each (grouped) condition could be put into a new line. It's up to you whether the logical operator should begin or end the line.
+
+    ```javascript
+    // bad
+    if ((foo === 123 || bar === 'abc') && doesItLookGoodWhenItBecomesThatLong() && isThisReallyHappening()) {
+      thing1();
+    }
+
+    // bad
+    if (foo === 123 &&
+      bar === 'abc') {
+      thing1();
+    }
+
+    // bad
+    if (foo === 123
+      && bar === 'abc') {
+      thing1();
+    }
+
+    // good
+    if (
+      (foo === 123 || bar === "abc") &&
+      doesItLookGoodWhenItBecomesThatLong() &&
+      isThisReallyHappening()
+    ) {
+      thing1();
+    }
+
+    // good
+    if (foo === 123 && bar === 'abc') {
+      thing1();
+    }
+
+    // good
+    if (
+      foo === 123 &&
+      bar === 'abc'
+    ) {
+      thing1();
+    }
+
+    // good
+    if (
+      foo === 123
+      && bar === 'abc'
+    ) {
+      thing1();
+    }
+    ```
+
+
+**[⬆ back to top](#table-of-contents)**
+
+
 ## Comments
 
   <a name="comments--multiline"></a><a name="17.1"></a>
-  - [17.1](#comments--multiline) Use `/** ... */` for multi-line comments.
+  - [18.1](#comments--multiline) Use `/** ... */` for multi-line comments.
 
     ```javascript
     // bad
@@ -1996,7 +2055,7 @@ Other Style Guides
     ```
 
   <a name="comments--singleline"></a><a name="17.2"></a>
-  - [17.2](#comments--singleline) Use `//` for single line comments. Place single line comments on a newline above the subject of the comment. Put an empty line before the comment unless it's on the first line of a block.
+  - [18.2](#comments--singleline) Use `//` for single line comments. Place single line comments on a newline above the subject of the comment. Put an empty line before the comment unless it's on the first line of a block.
 
     ```javascript
     // bad
@@ -2034,7 +2093,7 @@ Other Style Guides
     }
     ```
 
-  - [17.3](#comments--spaces) Start all comments with a space to make it easier to read. eslint: [`spaced-comment`](http://eslint.org/docs/rules/spaced-comment)
+  - [18.3](#comments--spaces) Start all comments with a space to make it easier to read. eslint: [`spaced-comment`](http://eslint.org/docs/rules/spaced-comment)
 
     ```javascript
     // bad
@@ -2071,10 +2130,10 @@ Other Style Guides
     ```
 
   <a name="comments--actionitems"></a><a name="17.3"></a>
-  - [17.4](#comments--actionitems) Prefixing your comments with `FIXME` or `TODO` helps other developers quickly understand if you're pointing out a problem that needs to be revisited, or if you're suggesting a solution to the problem that needs to be implemented. These are different than regular comments because they are actionable. The actions are `FIXME: -- need to figure this out` or `TODO: -- need to implement`.
+  - [18.4](#comments--actionitems) Prefixing your comments with `FIXME` or `TODO` helps other developers quickly understand if you're pointing out a problem that needs to be revisited, or if you're suggesting a solution to the problem that needs to be implemented. These are different than regular comments because they are actionable. The actions are `FIXME: -- need to figure this out` or `TODO: -- need to implement`.
 
   <a name="comments--fixme"></a><a name="17.4"></a>
-  - [17.5](#comments--fixme) Use `// FIXME:` to annotate problems.
+  - [18.5](#comments--fixme) Use `// FIXME:` to annotate problems.
 
     ```javascript
     class Calculator extends Abacus {
@@ -2088,7 +2147,7 @@ Other Style Guides
     ```
 
   <a name="comments--todo"></a><a name="17.5"></a>
-  - [17.6](#comments--todo) Use `// TODO:` to annotate solutions to problems.
+  - [18.6](#comments--todo) Use `// TODO:` to annotate solutions to problems.
 
     ```javascript
     class Calculator extends Abacus {
@@ -2107,7 +2166,7 @@ Other Style Guides
 ## Whitespace
 
   <a name="whitespace--spaces"></a><a name="18.1"></a>
-  - [18.1](#whitespace--spaces) Use soft tabs (space character) set to 2 spaces. eslint: [`indent`](http://eslint.org/docs/rules/indent.html) jscs: [`validateIndentation`](http://jscs.info/rule/validateIndentation)
+  - [19.1](#whitespace--spaces) Use soft tabs (space character) set to 2 spaces. eslint: [`indent`](http://eslint.org/docs/rules/indent.html) jscs: [`validateIndentation`](http://jscs.info/rule/validateIndentation)
 
     ```javascript
     // bad
@@ -2127,7 +2186,7 @@ Other Style Guides
     ```
 
   <a name="whitespace--before-blocks"></a><a name="18.2"></a>
-  - [18.2](#whitespace--before-blocks) Place 1 space before the leading brace. eslint: [`space-before-blocks`](http://eslint.org/docs/rules/space-before-blocks.html) jscs: [`requireSpaceBeforeBlockStatements`](http://jscs.info/rule/requireSpaceBeforeBlockStatements)
+  - [19.2](#whitespace--before-blocks) Place 1 space before the leading brace. eslint: [`space-before-blocks`](http://eslint.org/docs/rules/space-before-blocks.html) jscs: [`requireSpaceBeforeBlockStatements`](http://jscs.info/rule/requireSpaceBeforeBlockStatements)
 
     ```javascript
     // bad
@@ -2154,7 +2213,7 @@ Other Style Guides
     ```
 
   <a name="whitespace--around-keywords"></a><a name="18.3"></a>
-  - [18.3](#whitespace--around-keywords) Place 1 space before the opening parenthesis in control statements (`if`, `while` etc.). Place no space between the argument list and the function name in function calls and declarations. eslint: [`keyword-spacing`](http://eslint.org/docs/rules/keyword-spacing.html) jscs: [`requireSpaceAfterKeywords`](http://jscs.info/rule/requireSpaceAfterKeywords)
+  - [19.3](#whitespace--around-keywords) Place 1 space before the opening parenthesis in control statements (`if`, `while` etc.). Place no space between the argument list and the function name in function calls and declarations. eslint: [`keyword-spacing`](http://eslint.org/docs/rules/keyword-spacing.html) jscs: [`requireSpaceAfterKeywords`](http://jscs.info/rule/requireSpaceAfterKeywords)
 
     ```javascript
     // bad
@@ -2179,7 +2238,7 @@ Other Style Guides
     ```
 
   <a name="whitespace--infix-ops"></a><a name="18.4"></a>
-  - [18.4](#whitespace--infix-ops) Set off operators with spaces. eslint: [`space-infix-ops`](http://eslint.org/docs/rules/space-infix-ops.html) jscs: [`requireSpaceBeforeBinaryOperators`](http://jscs.info/rule/requireSpaceBeforeBinaryOperators), [`requireSpaceAfterBinaryOperators`](http://jscs.info/rule/requireSpaceAfterBinaryOperators)
+  - [19.4](#whitespace--infix-ops) Set off operators with spaces. eslint: [`space-infix-ops`](http://eslint.org/docs/rules/space-infix-ops.html) jscs: [`requireSpaceBeforeBinaryOperators`](http://jscs.info/rule/requireSpaceBeforeBinaryOperators), [`requireSpaceAfterBinaryOperators`](http://jscs.info/rule/requireSpaceAfterBinaryOperators)
 
     ```javascript
     // bad
@@ -2190,7 +2249,7 @@ Other Style Guides
     ```
 
   <a name="whitespace--newline-at-end"></a><a name="18.5"></a>
-  - [18.5](#whitespace--newline-at-end) End files with a single newline character. eslint: [`eol-last`](https://github.com/eslint/eslint/blob/master/docs/rules/eol-last.md)
+  - [19.5](#whitespace--newline-at-end) End files with a single newline character. eslint: [`eol-last`](https://github.com/eslint/eslint/blob/master/docs/rules/eol-last.md)
 
     ```javascript
     // bad
@@ -2215,7 +2274,7 @@ Other Style Guides
     ```
 
   <a name="whitespace--chains"></a><a name="18.6"></a>
-  - [18.6](#whitespace--chains) Use indentation when making long method chains (more than 2 method chains). Use a leading dot, which
+  - [19.6](#whitespace--chains) Use indentation when making long method chains (more than 2 method chains). Use a leading dot, which
     emphasizes that the line is a method call, not a new statement. eslint: [`newline-per-chained-call`](http://eslint.org/docs/rules/newline-per-chained-call) [`no-whitespace-before-property`](http://eslint.org/docs/rules/no-whitespace-before-property)
 
     ```javascript
@@ -2259,7 +2318,7 @@ Other Style Guides
     ```
 
   <a name="whitespace--after-blocks"></a><a name="18.7"></a>
-  - [18.7](#whitespace--after-blocks) Leave a blank line after blocks and before the next statement. jscs: [`requirePaddingNewLinesAfterBlocks`](http://jscs.info/rule/requirePaddingNewLinesAfterBlocks)
+  - [19.7](#whitespace--after-blocks) Leave a blank line after blocks and before the next statement. jscs: [`requirePaddingNewLinesAfterBlocks`](http://jscs.info/rule/requirePaddingNewLinesAfterBlocks)
 
     ```javascript
     // bad
@@ -2317,7 +2376,7 @@ Other Style Guides
     ```
 
   <a name="whitespace--padded-blocks"></a><a name="18.8"></a>
-  - [18.8](#whitespace--padded-blocks) Do not pad your blocks with blank lines. eslint: [`padded-blocks`](http://eslint.org/docs/rules/padded-blocks.html) jscs:  [`disallowPaddingNewlinesInBlocks`](http://jscs.info/rule/disallowPaddingNewlinesInBlocks)
+  - [19.8](#whitespace--padded-blocks) Do not pad your blocks with blank lines. eslint: [`padded-blocks`](http://eslint.org/docs/rules/padded-blocks.html) jscs:  [`disallowPaddingNewlinesInBlocks`](http://jscs.info/rule/disallowPaddingNewlinesInBlocks)
 
     ```javascript
     // bad
@@ -2350,7 +2409,7 @@ Other Style Guides
     ```
 
   <a name="whitespace--in-parens"></a><a name="18.9"></a>
-  - [18.9](#whitespace--in-parens) Do not add spaces inside parentheses. eslint: [`space-in-parens`](http://eslint.org/docs/rules/space-in-parens.html) jscs: [`disallowSpacesInsideParentheses`](http://jscs.info/rule/disallowSpacesInsideParentheses)
+  - [19.9](#whitespace--in-parens) Do not add spaces inside parentheses. eslint: [`space-in-parens`](http://eslint.org/docs/rules/space-in-parens.html) jscs: [`disallowSpacesInsideParentheses`](http://jscs.info/rule/disallowSpacesInsideParentheses)
 
     ```javascript
     // bad
@@ -2375,7 +2434,7 @@ Other Style Guides
     ```
 
   <a name="whitespace--in-brackets"></a><a name="18.10"></a>
-  - [18.10](#whitespace--in-brackets) Do not add spaces inside brackets. eslint: [`array-bracket-spacing`](http://eslint.org/docs/rules/array-bracket-spacing.html) jscs: [`disallowSpacesInsideArrayBrackets`](http://jscs.info/rule/disallowSpacesInsideArrayBrackets)
+  - [19.10](#whitespace--in-brackets) Do not add spaces inside brackets. eslint: [`array-bracket-spacing`](http://eslint.org/docs/rules/array-bracket-spacing.html) jscs: [`disallowSpacesInsideArrayBrackets`](http://jscs.info/rule/disallowSpacesInsideArrayBrackets)
 
     ```javascript
     // bad
@@ -2388,7 +2447,7 @@ Other Style Guides
     ```
 
   <a name="whitespace--in-braces"></a><a name="18.11"></a>
-  - [18.11](#whitespace--in-braces) Add spaces inside curly braces. eslint: [`object-curly-spacing`](http://eslint.org/docs/rules/object-curly-spacing.html) jscs: [`requireSpacesInsideObjectBrackets`](http://jscs.info/rule/requireSpacesInsideObjectBrackets)
+  - [19.11](#whitespace--in-braces) Add spaces inside curly braces. eslint: [`object-curly-spacing`](http://eslint.org/docs/rules/object-curly-spacing.html) jscs: [`requireSpacesInsideObjectBrackets`](http://jscs.info/rule/requireSpacesInsideObjectBrackets)
 
     ```javascript
     // bad
@@ -2399,7 +2458,7 @@ Other Style Guides
     ```
 
   <a name="whitespace--max-len"></a><a name="18.12"></a>
-  - [18.12](#whitespace--max-len) Avoid having lines of code that are longer than 100 characters (including whitespace). Note: per [above](#strings--line-length), long strings are exempt from this rule, and should not be broken up. eslint: [`max-len`](http://eslint.org/docs/rules/max-len.html) jscs: [`maximumLineLength`](http://jscs.info/rule/maximumLineLength)
+  - [19.12](#whitespace--max-len) Avoid having lines of code that are longer than 100 characters (including whitespace). Note: per [above](#strings--line-length), long strings are exempt from this rule, and should not be broken up. eslint: [`max-len`](http://eslint.org/docs/rules/max-len.html) jscs: [`maximumLineLength`](http://jscs.info/rule/maximumLineLength)
 
     > Why? This ensures readability and maintainability.
 
@@ -2433,7 +2492,7 @@ Other Style Guides
 ## Commas
 
 <a name="commas--leading-trailing"></a><a name="19.1"></a>
-  - [19.1](#commas--leading-trailing) Leading commas: **Nope.** eslint: [`comma-style`](http://eslint.org/docs/rules/comma-style.html) jscs: [`requireCommaBeforeLineBreak`](http://jscs.info/rule/requireCommaBeforeLineBreak)
+  - [20.1](#commas--leading-trailing) Leading commas: **Nope.** eslint: [`comma-style`](http://eslint.org/docs/rules/comma-style.html) jscs: [`requireCommaBeforeLineBreak`](http://jscs.info/rule/requireCommaBeforeLineBreak)
 
     ```javascript
     // bad
@@ -2468,7 +2527,7 @@ Other Style Guides
     ```
 
   <a name="commas--dangling"></a><a name="19.2"></a>
-  - [19.2](#commas--dangling) Additional trailing comma: **Yup.** eslint: [`comma-dangle`](http://eslint.org/docs/rules/comma-dangle.html) jscs: [`requireTrailingComma`](http://jscs.info/rule/requireTrailingComma)
+  - [20.2](#commas--dangling) Additional trailing comma: **Yup.** eslint: [`comma-dangle`](http://eslint.org/docs/rules/comma-dangle.html) jscs: [`requireTrailingComma`](http://jscs.info/rule/requireTrailingComma)
 
     > Why? This leads to cleaner git diffs. Also, transpilers like Babel will remove the additional trailing comma in the transpiled code which means you don't have to worry about the [trailing comma problem](https://github.com/airbnb/javascript/blob/es5-deprecated/es5/README.md#commas) in legacy browsers.
 
@@ -2569,7 +2628,7 @@ Other Style Guides
 ## Semicolons
 
   <a name="semicolons--required"></a><a name="20.1"></a>
-  - [20.1](#semicolons--required) **Yup.** eslint: [`semi`](http://eslint.org/docs/rules/semi.html) jscs: [`requireSemicolons`](http://jscs.info/rule/requireSemicolons)
+  - [21.1](#semicolons--required) **Yup.** eslint: [`semi`](http://eslint.org/docs/rules/semi.html) jscs: [`requireSemicolons`](http://jscs.info/rule/requireSemicolons)
 
     ```javascript
     // bad
@@ -2599,10 +2658,10 @@ Other Style Guides
 ## Type Casting & Coercion
 
   <a name="coercion--explicit"></a><a name="21.1"></a>
-  - [21.1](#coercion--explicit) Perform type coercion at the beginning of the statement.
+  - [22.1](#coercion--explicit) Perform type coercion at the beginning of the statement.
 
   <a name="coercion--strings"></a><a name="21.2"></a>
-  - [21.2](#coercion--strings)  Strings:
+  - [22.2](#coercion--strings)  Strings:
 
     ```javascript
     // => this.reviewScore = 9;
@@ -2618,7 +2677,7 @@ Other Style Guides
     ```
 
   <a name="coercion--numbers"></a><a name="21.3"></a>
-  - [21.3](#coercion--numbers) Numbers: Use `Number` for type casting and `parseInt` always with a radix for parsing strings. eslint: [`radix`](http://eslint.org/docs/rules/radix)
+  - [22.3](#coercion--numbers) Numbers: Use `Number` for type casting and `parseInt` always with a radix for parsing strings. eslint: [`radix`](http://eslint.org/docs/rules/radix)
 
     ```javascript
     const inputValue = '4';
@@ -2643,7 +2702,7 @@ Other Style Guides
     ```
 
   <a name="coercion--comment-deviations"></a><a name="21.4"></a>
-  - [21.4](#coercion--comment-deviations) If for whatever reason you are doing something wild and `parseInt` is your bottleneck and need to use Bitshift for [performance reasons](https://jsperf.com/coercion-vs-casting/3), leave a comment explaining why and what you're doing.
+  - [22.4](#coercion--comment-deviations) If for whatever reason you are doing something wild and `parseInt` is your bottleneck and need to use Bitshift for [performance reasons](https://jsperf.com/coercion-vs-casting/3), leave a comment explaining why and what you're doing.
 
     ```javascript
     // good
@@ -2656,7 +2715,7 @@ Other Style Guides
     ```
 
   <a name="coercion--bitwise"></a><a name="21.5"></a>
-  - [21.5](#coercion--bitwise) **Note:** Be careful when using bitshift operations. Numbers are represented as [64-bit values](https://es5.github.io/#x4.3.19), but bitshift operations always return a 32-bit integer ([source](https://es5.github.io/#x11.7)). Bitshift can lead to unexpected behavior for integer values larger than 32 bits. [Discussion](https://github.com/airbnb/javascript/issues/109). Largest signed 32-bit Int is 2,147,483,647:
+  - [22.5](#coercion--bitwise) **Note:** Be careful when using bitshift operations. Numbers are represented as [64-bit values](https://es5.github.io/#x4.3.19), but bitshift operations always return a 32-bit integer ([source](https://es5.github.io/#x11.7)). Bitshift can lead to unexpected behavior for integer values larger than 32 bits. [Discussion](https://github.com/airbnb/javascript/issues/109). Largest signed 32-bit Int is 2,147,483,647:
 
     ```javascript
     2147483647 >> 0; // => 2147483647
@@ -2665,7 +2724,7 @@ Other Style Guides
     ```
 
   <a name="coercion--booleans"></a><a name="21.6"></a>
-  - [21.6](#coercion--booleans) Booleans:
+  - [22.6](#coercion--booleans) Booleans:
 
     ```javascript
     const age = 0;
@@ -2686,7 +2745,7 @@ Other Style Guides
 ## Naming Conventions
 
   <a name="naming--descriptive"></a><a name="22.1"></a>
-  - [22.1](#naming--descriptive) Avoid single letter names. Be descriptive with your naming. eslint: [`id-length`](http://eslint.org/docs/rules/id-length)
+  - [23.1](#naming--descriptive) Avoid single letter names. Be descriptive with your naming. eslint: [`id-length`](http://eslint.org/docs/rules/id-length)
 
     ```javascript
     // bad
@@ -2701,7 +2760,7 @@ Other Style Guides
     ```
 
   <a name="naming--camelCase"></a><a name="22.2"></a>
-  - [22.2](#naming--camelCase) Use camelCase when naming objects, functions, and instances. eslint: [`camelcase`](http://eslint.org/docs/rules/camelcase.html) jscs: [`requireCamelCaseOrUpperCaseIdentifiers`](http://jscs.info/rule/requireCamelCaseOrUpperCaseIdentifiers)
+  - [23.2](#naming--camelCase) Use camelCase when naming objects, functions, and instances. eslint: [`camelcase`](http://eslint.org/docs/rules/camelcase.html) jscs: [`requireCamelCaseOrUpperCaseIdentifiers`](http://jscs.info/rule/requireCamelCaseOrUpperCaseIdentifiers)
 
     ```javascript
     // bad
@@ -2715,7 +2774,7 @@ Other Style Guides
     ```
 
   <a name="naming--PascalCase"></a><a name="22.3"></a>
-  - [22.3](#naming--PascalCase) Use PascalCase only when naming constructors or classes. eslint: [`new-cap`](http://eslint.org/docs/rules/new-cap.html) jscs: [`requireCapitalizedConstructors`](http://jscs.info/rule/requireCapitalizedConstructors)
+  - [23.3](#naming--PascalCase) Use PascalCase only when naming constructors or classes. eslint: [`new-cap`](http://eslint.org/docs/rules/new-cap.html) jscs: [`requireCapitalizedConstructors`](http://jscs.info/rule/requireCapitalizedConstructors)
 
     ```javascript
     // bad
@@ -2740,7 +2799,7 @@ Other Style Guides
     ```
 
   <a name="naming--leading-underscore"></a><a name="22.4"></a>
-  - [22.4](#naming--leading-underscore) Do not use trailing or leading underscores. eslint: [`no-underscore-dangle`](http://eslint.org/docs/rules/no-underscore-dangle.html) jscs: [`disallowDanglingUnderscores`](http://jscs.info/rule/disallowDanglingUnderscores)
+  - [23.4](#naming--leading-underscore) Do not use trailing or leading underscores. eslint: [`no-underscore-dangle`](http://eslint.org/docs/rules/no-underscore-dangle.html) jscs: [`disallowDanglingUnderscores`](http://jscs.info/rule/disallowDanglingUnderscores)
 
     > Why? JavaScript does not have the concept of privacy in terms of properties or methods. Although a leading underscore is a common convention to mean “private”, in fact, these properties are fully public, and as such, are part of your public API contract. This convention might lead developers to wrongly think that a change won't count as breaking, or that tests aren't needed. tl;dr: if you want something to be “private”, it must not be observably present.
 
@@ -2755,7 +2814,7 @@ Other Style Guides
     ```
 
   <a name="naming--self-this"></a><a name="22.5"></a>
-  - [22.5](#naming--self-this) Don't save references to `this`. Use arrow functions or [Function#bind](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/bind). jscs: [`disallowNodeTypes`](http://jscs.info/rule/disallowNodeTypes)
+  - [23.5](#naming--self-this) Don't save references to `this`. Use arrow functions or [Function#bind](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/bind). jscs: [`disallowNodeTypes`](http://jscs.info/rule/disallowNodeTypes)
 
     ```javascript
     // bad
@@ -2783,7 +2842,7 @@ Other Style Guides
     ```
 
   <a name="naming--filename-matches-export"></a><a name="22.6"></a>
-  - [22.6](#naming--filename-matches-export) A base filename should exactly match the name of its default export.
+  - [23.6](#naming--filename-matches-export) A base filename should exactly match the name of its default export.
 
     ```javascript
     // file 1 contents
@@ -2819,7 +2878,7 @@ Other Style Guides
     ```
 
   <a name="naming--camelCase-default-export"></a><a name="22.7"></a>
-  - [22.7](#naming--camelCase-default-export) Use camelCase when you export-default a function. Your filename should be identical to your function's name.
+  - [23.7](#naming--camelCase-default-export) Use camelCase when you export-default a function. Your filename should be identical to your function's name.
 
     ```javascript
     function makeStyleGuide() {
@@ -2830,7 +2889,7 @@ Other Style Guides
     ```
 
   <a name="naming--PascalCase-singleton"></a><a name="22.8"></a>
-  - [22.8](#naming--PascalCase-singleton) Use PascalCase when you export a constructor / class / singleton / function library / bare object.
+  - [23.8](#naming--PascalCase-singleton) Use PascalCase when you export a constructor / class / singleton / function library / bare object.
 
     ```javascript
     const AirbnbStyleGuide = {
@@ -2842,7 +2901,7 @@ Other Style Guides
     ```
 
   <a name="naming--Acronyms-and-Initialisms"></a>
-  - [22.9](#naming--Acronyms-and-Initialisms) Acronyms and initialisms should always be all capitalized, or all lowercased.
+  - [23.9](#naming--Acronyms-and-Initialisms) Acronyms and initialisms should always be all capitalized, or all lowercased.
 
     > Why? Names are for readability, not to appease a computer algorithm.
 
@@ -2878,10 +2937,10 @@ Other Style Guides
 ## Accessors
 
   <a name="accessors--not-required"></a><a name="23.1"></a>
-  - [23.1](#accessors--not-required) Accessor functions for properties are not required.
+  - [24.1](#accessors--not-required) Accessor functions for properties are not required.
 
   <a name="accessors--no-getters-setters"></a><a name="23.2"></a>
-  - [23.2](#accessors--no-getters-setters) Do not use JavaScript getters/setters as they cause unexpected side effects and are harder to test, maintain, and reason about. Instead, if you do make accessor functions, use getVal() and setVal('hello').
+  - [24.2](#accessors--no-getters-setters) Do not use JavaScript getters/setters as they cause unexpected side effects and are harder to test, maintain, and reason about. Instead, if you do make accessor functions, use getVal() and setVal('hello').
 
     ```javascript
     // bad
@@ -2908,7 +2967,7 @@ Other Style Guides
     ```
 
   <a name="accessors--boolean-prefix"></a><a name="23.3"></a>
-  - [23.3](#accessors--boolean-prefix) If the property/method is a `boolean`, use `isVal()` or `hasVal()`.
+  - [24.3](#accessors--boolean-prefix) If the property/method is a `boolean`, use `isVal()` or `hasVal()`.
 
     ```javascript
     // bad
@@ -2923,7 +2982,7 @@ Other Style Guides
     ```
 
   <a name="accessors--consistent"></a><a name="23.4"></a>
-  - [23.4](#accessors--consistent) It's okay to create get() and set() functions, but be consistent.
+  - [24.4](#accessors--consistent) It's okay to create get() and set() functions, but be consistent.
 
     ```javascript
     class Jedi {
@@ -2948,7 +3007,7 @@ Other Style Guides
 ## Events
 
   <a name="events--hash"></a><a name="24.1"></a>
-  - [24.1](#events--hash) When attaching data payloads to events (whether DOM events or something more proprietary like Backbone events), pass a hash instead of a raw value. This allows a subsequent contributor to add more data to the event payload without finding and updating every handler for the event. For example, instead of:
+  - [25.1](#events--hash) When attaching data payloads to events (whether DOM events or something more proprietary like Backbone events), pass a hash instead of a raw value. This allows a subsequent contributor to add more data to the event payload without finding and updating every handler for the event. For example, instead of:
 
     ```javascript
     // bad
@@ -2980,7 +3039,7 @@ Other Style Guides
 ## jQuery
 
   <a name="jquery--dollar-prefix"></a><a name="25.1"></a>
-  - [25.1](#jquery--dollar-prefix) Prefix jQuery object variables with a `$`. jscs: [`requireDollarBeforejQueryAssignment`](http://jscs.info/rule/requireDollarBeforejQueryAssignment)
+  - [26.1](#jquery--dollar-prefix) Prefix jQuery object variables with a `$`. jscs: [`requireDollarBeforejQueryAssignment`](http://jscs.info/rule/requireDollarBeforejQueryAssignment)
 
     ```javascript
     // bad
@@ -2994,7 +3053,7 @@ Other Style Guides
     ```
 
   <a name="jquery--cache"></a><a name="25.2"></a>
-  - [25.2](#jquery--cache) Cache jQuery lookups.
+  - [26.2](#jquery--cache) Cache jQuery lookups.
 
     ```javascript
     // bad
@@ -3022,10 +3081,10 @@ Other Style Guides
     ```
 
   <a name="jquery--queries"></a><a name="25.3"></a>
-  - [25.3](#jquery--queries) For DOM queries use Cascading `$('.sidebar ul')` or parent > child `$('.sidebar > ul')`. [jsPerf](http://jsperf.com/jquery-find-vs-context-sel/16)
+  - [26.3](#jquery--queries) For DOM queries use Cascading `$('.sidebar ul')` or parent > child `$('.sidebar > ul')`. [jsPerf](http://jsperf.com/jquery-find-vs-context-sel/16)
 
   <a name="jquery--find"></a><a name="25.4"></a>
-  - [25.4](#jquery--find) Use `find` with scoped jQuery object queries.
+  - [26.4](#jquery--find) Use `find` with scoped jQuery object queries.
 
     ```javascript
     // bad
@@ -3050,7 +3109,7 @@ Other Style Guides
 ## ECMAScript 5 Compatibility
 
   <a name="es5-compat--kangax"></a><a name="26.1"></a>
-  - [26.1](#es5-compat--kangax) Refer to [Kangax](https://twitter.com/kangax/)'s ES5 [compatibility table](https://kangax.github.io/es5-compat-table/).
+  - [27.1](#es5-compat--kangax) Refer to [Kangax](https://twitter.com/kangax/)'s ES5 [compatibility table](https://kangax.github.io/es5-compat-table/).
 
 **[⬆ back to top](#table-of-contents)**
 
@@ -3058,7 +3117,7 @@ Other Style Guides
 ## ECMAScript 6+ (ES 2015+) Styles
 
   <a name="es6-styles"></a><a name="27.1"></a>
-  - [27.1](#es6-styles) This is a collection of links to the various ES6 features.
+  - [28.1](#es6-styles) This is a collection of links to the various ES6 features.
 
 1. [Arrow Functions](#arrow-functions)
 1. [Classes](#classes--constructors)
@@ -3075,7 +3134,7 @@ Other Style Guides
 1. [Modules](#modules)
 
   <a name="tc39-proposals"></a>
-  - [27.2](#tc39-proposals) Do not use [TC39 proposals](https://github.com/tc39/proposals) that have not reached stage 3.
+  - [28.2](#tc39-proposals) Do not use [TC39 proposals](https://github.com/tc39/proposals) that have not reached stage 3.
 
     > Why? [They are not finalized](https://tc39.github.io/process-document/), and they are subject to change or to be withdrawn entirely. We want to use JavaScript, and proposals are not JavaScript yet.
 
@@ -3084,7 +3143,7 @@ Other Style Guides
 ## Testing
 
   <a name="testing--yup"></a><a name="28.1"></a>
-  - [28.1](#testing--yup) **Yup.**
+  - [29.1](#testing--yup) **Yup.**
 
     ```javascript
     function foo() {
@@ -3093,7 +3152,7 @@ Other Style Guides
     ```
 
   <a name="testing--for-real"></a><a name="28.2"></a>
-  - [28.2](#testing--for-real) **No, but seriously**:
+  - [29.2](#testing--for-real) **No, but seriously**:
    - Whichever testing framework you use, you should be writing tests!
    - Strive to write many small pure functions, and minimize where mutations occur.
    - Be cautious about stubs and mocks - they can make your tests more brittle.

From b87cb5cdad74199d3fcb83d135e466c29a56ff4e Mon Sep 17 00:00:00 2001
From: Vlad Shcherbin <vlad.shcherbin@gmail.com>
Date: Mon, 1 May 2017 10:57:49 +0300
Subject: [PATCH 1020/1591] [guide] [Fix] react/prefer-stateless-function
 "ignorePureComponents" option typo

---
 packages/eslint-config-airbnb/rules/react.js | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/packages/eslint-config-airbnb/rules/react.js b/packages/eslint-config-airbnb/rules/react.js
index caf62dd81c..63da3865fa 100644
--- a/packages/eslint-config-airbnb/rules/react.js
+++ b/packages/eslint-config-airbnb/rules/react.js
@@ -176,7 +176,7 @@ module.exports = {
 
     // Require stateless functions when not using lifecycle methods, setState or ref
     // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/prefer-stateless-function.md
-    'react/prefer-stateless-function': ['error', { ignorePureComponent: true }],
+    'react/prefer-stateless-function': ['error', { ignorePureComponents: true }],
 
     // Prevent missing props validation in a React component definition
     // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/prop-types.md

From 3ca86a4a3c3d9db3295dffb4f6c53affe194a491 Mon Sep 17 00:00:00 2001
From: thomas Bell <thomasbell@Thomas-Macbook.local>
Date: Wed, 3 May 2017 14:16:32 -0400
Subject: [PATCH 1021/1591] added generation tux as in the wild

---
 README.md | 1 +
 1 file changed, 1 insertion(+)

diff --git a/README.md b/README.md
index ded9acf2f4..b902d4ddd8 100644
--- a/README.md
+++ b/README.md
@@ -3296,6 +3296,7 @@ Other Style Guides
   - **Flexberry**: [Flexberry/javascript-style-guide](https://github.com/Flexberry/javascript-style-guide)
   - **Gawker Media**: [gawkermedia/javascript](https://github.com/gawkermedia/javascript)
   - **General Electric**: [GeneralElectric/javascript](https://github.com/GeneralElectric/javascript)
+  - **Generation Tux**: [GenerationTux/javascript](https://github.com/generationtux/styleguide)
   - **GoodData**: [gooddata/gdc-js-style](https://github.com/gooddata/gdc-js-style)
   - **Grooveshark**: [grooveshark/javascript](https://github.com/grooveshark/javascript)
   - **Honey**: [honeyscience/javascript](https://github.com/honeyscience/javascript)

From bfc85bddba7b62098798bcbb07d475f2801f3ddf Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Mon, 1 May 2017 12:21:54 -0700
Subject: [PATCH 1022/1591] [eslint config] [deps] update
 `eslint-config-airbnb-base`, `eslint`

---
 packages/eslint-config-airbnb/package.json | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/packages/eslint-config-airbnb/package.json b/packages/eslint-config-airbnb/package.json
index c1a5d90df6..28e2ae4ec9 100644
--- a/packages/eslint-config-airbnb/package.json
+++ b/packages/eslint-config-airbnb/package.json
@@ -46,13 +46,13 @@
   },
   "homepage": "https://github.com/airbnb/javascript",
   "dependencies": {
-    "eslint-config-airbnb-base": "^11.1.2"
+    "eslint-config-airbnb-base": "^11.1.3"
   },
   "devDependencies": {
     "babel-preset-airbnb": "^2.2.3",
     "babel-tape-runner": "^2.0.1",
     "editorconfig-tools": "^0.1.1",
-    "eslint": "^3.18.0",
+    "eslint": "^3.19.0",
     "eslint-find-rules": "^1.14.3",
     "eslint-plugin-import": "^2.2.0",
     "eslint-plugin-jsx-a11y": "^4.0.0",
@@ -63,7 +63,7 @@
     "tape": "^4.6.3"
   },
   "peerDependencies": {
-    "eslint": "^3.18.0",
+    "eslint": "^3.19.0",
     "eslint-plugin-jsx-a11y": "^4.0.0",
     "eslint-plugin-import": "^2.2.0",
     "eslint-plugin-react": "^6.10.3"

From c9c5f7efbf91a7d00c0696f5d4318d6c58f81c5c Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Mon, 1 May 2017 12:22:24 -0700
Subject: [PATCH 1023/1591] [eslint config] [minor] enable rules:

 - `jsx-max-props-per-line`
 - `void-dom-elements-no-children`
---
 packages/eslint-config-airbnb/rules/react.js | 6 ++----
 1 file changed, 2 insertions(+), 4 deletions(-)

diff --git a/packages/eslint-config-airbnb/rules/react.js b/packages/eslint-config-airbnb/rules/react.js
index 63da3865fa..393132869d 100644
--- a/packages/eslint-config-airbnb/rules/react.js
+++ b/packages/eslint-config-airbnb/rules/react.js
@@ -71,8 +71,7 @@ module.exports = {
 
     // Limit maximum of props on a single line in JSX
     // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/jsx-max-props-per-line.md
-    // TODO: enable (semver-minor)
-    'react/jsx-max-props-per-line': ['off', { maximum: 1, when: 'multiline' }],
+    'react/jsx-max-props-per-line': ['error', { maximum: 1, when: 'multiline' }],
 
     // Prevent usage of .bind() in JSX props
     // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/jsx-no-bind.md
@@ -318,8 +317,7 @@ module.exports = {
 
     // Prevent void DOM elements from receiving children
     // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/void-dom-elements-no-children.md
-    // TODO: enable (semver-minor)
-    'react/void-dom-elements-no-children': 'off',
+    'react/void-dom-elements-no-children': 'error',
   },
 
   settings: {

From ba35e31c76d3c1ab4aeaa7f7967fc4cb98a82787 Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Mon, 1 May 2017 12:22:41 -0700
Subject: [PATCH 1024/1591] [eslint config] [breaking] set default React
 version to 0.15

---
 packages/eslint-config-airbnb/rules/react.js | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/packages/eslint-config-airbnb/rules/react.js b/packages/eslint-config-airbnb/rules/react.js
index 393132869d..70ede782e4 100644
--- a/packages/eslint-config-airbnb/rules/react.js
+++ b/packages/eslint-config-airbnb/rules/react.js
@@ -328,7 +328,7 @@ module.exports = {
     },
     react: {
       pragma: 'React',
-      version: '0.14'
+      version: '0.15'
     },
   }
 };

From 7cef8dad848c5648c6b843e26ea683b9b1f4d43d Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Mon, 1 May 2017 12:31:57 -0700
Subject: [PATCH 1025/1591] [eslint config] [docs] add rule documentation to
 `forbid-elements` entry

---
 packages/eslint-config-airbnb/rules/react.js | 9 ++++-----
 1 file changed, 4 insertions(+), 5 deletions(-)

diff --git a/packages/eslint-config-airbnb/rules/react.js b/packages/eslint-config-airbnb/rules/react.js
index 70ede782e4..aaa2eec733 100644
--- a/packages/eslint-config-airbnb/rules/react.js
+++ b/packages/eslint-config-airbnb/rules/react.js
@@ -266,6 +266,10 @@ module.exports = {
     // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/forbid-component-props.md
     'react/forbid-component-props': ['off', { forbid: [] }],
 
+    // Forbid certain elements
+    // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/forbid-elements.md
+    'react/forbid-elements': ['off', { forbid: [], }],
+
     // Prevent problem with children and props.dangerouslySetInnerHTML
     // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/no-danger-with-children.md
     'react/no-danger-with-children': 'error',
@@ -306,11 +310,6 @@ module.exports = {
     // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/require-default-props.md
     'react/require-default-props': 'error',
 
-    'react/forbid-elements': ['off', {
-      forbid: [
-      ],
-    }],
-
     // Forbids using non-exported propTypes
     // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/forbid-foreign-prop-types.md
     'react/forbid-foreign-prop-types': 'off',

From 5dec8272e03ce792f3c1a5dc8cf94042609e0615 Mon Sep 17 00:00:00 2001
From: koooge <koooooge@gmail.com>
Date: Thu, 3 Aug 2017 17:57:58 +0200
Subject: [PATCH 1026/1591] [eslint config] [base] [breaking] move
 `comma-dangle` to Stylistic Issues

---
 packages/eslint-config-airbnb-base/rules/errors.js | 9 ---------
 packages/eslint-config-airbnb-base/rules/style.js  | 9 +++++++++
 2 files changed, 9 insertions(+), 9 deletions(-)

diff --git a/packages/eslint-config-airbnb-base/rules/errors.js b/packages/eslint-config-airbnb-base/rules/errors.js
index 02befbb5af..786b88ae1e 100644
--- a/packages/eslint-config-airbnb-base/rules/errors.js
+++ b/packages/eslint-config-airbnb-base/rules/errors.js
@@ -1,14 +1,5 @@
 module.exports = {
   rules: {
-    // require trailing commas in multiline object literals
-    'comma-dangle': ['error', {
-      arrays: 'always-multiline',
-      objects: 'always-multiline',
-      imports: 'always-multiline',
-      exports: 'always-multiline',
-      functions: 'always-multiline',
-    }],
-
     // Enforce “for” loop update clause moving the counter in the right direction
     // http://eslint.org/docs/rules/for-direction
     // TODO: enable, semver-major until v3 is dropped; semver-minor otherwise
diff --git a/packages/eslint-config-airbnb-base/rules/style.js b/packages/eslint-config-airbnb-base/rules/style.js
index 42e820870e..82ef7018c2 100644
--- a/packages/eslint-config-airbnb-base/rules/style.js
+++ b/packages/eslint-config-airbnb-base/rules/style.js
@@ -38,6 +38,15 @@ module.exports = {
       },
     }],
 
+    // require trailing commas in multiline object literals
+    'comma-dangle': ['error', {
+      arrays: 'always-multiline',
+      objects: 'always-multiline',
+      imports: 'always-multiline',
+      exports: 'always-multiline',
+      functions: 'always-multiline',
+    }],
+
     // enforce spacing before and after comma
     'comma-spacing': ['error', { before: false, after: true }],
 

From f5cd2869d35268cc158409195b561b28feca5d94 Mon Sep 17 00:00:00 2001
From: David Walsh <dlwalsh@gmail.com>
Date: Tue, 4 Jul 2017 12:40:53 +1000
Subject: [PATCH 1027/1591] [guide] [eslint config] [base] [breaking] Rules
 prohibiting global isNaN, isFinite.

 - Update README with new Standard Library section.
---
 README.md                                     | 45 ++++++++++++++++++-
 .../rules/best-practices.js                   | 24 ++++++++++
 .../rules/variables.js                        |  3 +-
 3 files changed, 68 insertions(+), 4 deletions(-)

diff --git a/README.md b/README.md
index b9887ff20a..4125081c2f 100644
--- a/README.md
+++ b/README.md
@@ -44,6 +44,7 @@ Other Style Guides
   1. [jQuery](#jquery)
   1. [ECMAScript 5 Compatibility](#ecmascript-5-compatibility)
   1. [ECMAScript 6+ (ES 2015+) Styles](#ecmascript-6-es-2015-styles)
+  1. [Standard Library](#standard-library)
   1. [Testing](#testing)
   1. [Performance](#performance)
   1. [Resources](#resources)
@@ -3148,10 +3149,50 @@ Other Style Guides
 
 **[⬆ back to top](#table-of-contents)**
 
+## Standard Library
+
+  The [Standard Library](https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects)
+  contains utilities that are functionally broken but remain for legacy reasons.
+
+  <a name="standard-library--isnan"></a>
+  - [29.1](#standard-library--isnan) Use `Number.isNaN` instead of global `isNaN`.
+    eslint: [`no-restricted-globals`](http://eslint.org/docs/rules/no-restricted-globals)
+
+    > Why? The global `isNaN` coerces non-numbers to numbers, returning true for anything that coerces to NaN.
+    If this behavior is desired, make it explicit.
+
+    ```javascript
+    // bad
+    isNaN('1.2'); // false
+    isNaN('1.2.3'); // true
+
+    // good
+    Number.isNaN('1.2.3'); // false
+    Number.isNaN(Number('1.2.3')); // true
+    ```
+
+  <a name="standard-library--isfinite"></a>
+  - [29.2](#standard-library--isfinite) Use `Number.isFinite` instead of global `isFinite`.
+    eslint: [`no-restricted-globals`](http://eslint.org/docs/rules/no-restricted-globals)
+
+    > Why? The global `isFinite` coerces non-numbers to numbers, returning true for anything that coerces to a finite number.
+    If this behavior is desired, make it explicit.
+
+    ```javascript
+    // bad
+    isFinite('2e3'); // true
+
+    // good
+    Number.isFinite('2e3'); // false
+    Number.isFinite(parseInt('2e3', 10)); // true
+    ```
+
+**[⬆ back to top](#table-of-contents)**
+
 ## Testing
 
   <a name="testing--yup"></a><a name="28.1"></a>
-  - [29.1](#testing--yup) **Yup.**
+  - [30.1](#testing--yup) **Yup.**
 
     ```javascript
     function foo() {
@@ -3160,7 +3201,7 @@ Other Style Guides
     ```
 
   <a name="testing--for-real"></a><a name="28.2"></a>
-  - [29.2](#testing--for-real) **No, but seriously**:
+  - [30.2](#testing--for-real) **No, but seriously**:
     - Whichever testing framework you use, you should be writing tests!
     - Strive to write many small pure functions, and minimize where mutations occur.
     - Be cautious about stubs and mocks - they can make your tests more brittle.
diff --git a/packages/eslint-config-airbnb-base/rules/best-practices.js b/packages/eslint-config-airbnb-base/rules/best-practices.js
index 02ea3e23b3..11b18a2efd 100644
--- a/packages/eslint-config-airbnb-base/rules/best-practices.js
+++ b/packages/eslint-config-airbnb-base/rules/best-practices.js
@@ -194,6 +194,30 @@ module.exports = {
       object: 'arguments',
       property: 'callee',
       message: 'arguments.callee is deprecated',
+    }, {
+      object: 'global',
+      property: 'isFinite',
+      message: 'Please use Number.isFinite instead',
+    }, {
+      object: 'self',
+      property: 'isFinite',
+      message: 'Please use Number.isFinite instead',
+    }, {
+      object: 'window',
+      property: 'isFinite',
+      message: 'Please use Number.isFinite instead',
+    }, {
+      object: 'global',
+      property: 'isNaN',
+      message: 'Please use Number.isNaN instead',
+    }, {
+      object: 'self',
+      property: 'isNaN',
+      message: 'Please use Number.isNaN instead',
+    }, {
+      object: 'window',
+      property: 'isNaN',
+      message: 'Please use Number.isNaN instead',
     }, {
       property: '__defineGetter__',
       message: 'Please use Object.defineProperty instead.',
diff --git a/packages/eslint-config-airbnb-base/rules/variables.js b/packages/eslint-config-airbnb-base/rules/variables.js
index fe38ea5d60..805563a51a 100644
--- a/packages/eslint-config-airbnb-base/rules/variables.js
+++ b/packages/eslint-config-airbnb-base/rules/variables.js
@@ -16,8 +16,7 @@ module.exports = {
     'no-label-var': 'error',
 
     // disallow specific globals
-    // TODO: enable, semver-major
-    'no-restricted-globals': ['off'].concat(restrictedGlobals),
+    'no-restricted-globals': ['error', 'isFinite', 'isNaN'].concat(restrictedGlobals),
 
     // disallow declaration of variables already declared in the outer scope
     'no-shadow': 'error',

From 5aa203eaa88fb7febfb1ccf8736e896ca0959049 Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Fri, 1 Sep 2017 22:25:31 -0700
Subject: [PATCH 1028/1591] [eslint config] [base] [deps] [breaking] require
 `eslint` v4

 - enable `function-paren-newline`, `for-direction`, `getter-return`, `no-compare-neg-zero`, `semi-style`, `object-curly-newline`, `no-buffer-constructor`, `no-restricted-globals`, `switch-colon-spacing`, `template-tag-spacing`, `prefer-promise-reject-errors`, `prefer-restructuring`
 - improve `indent`, `no-multi-spaces`, `no-trailing-spaces`, `no-underscore-dangle`
---
 .travis.yml                                   |  4 ---
 .../eslint-config-airbnb-base/package.json    |  4 +--
 .../rules/best-practices.js                   |  5 ++-
 .../eslint-config-airbnb-base/rules/errors.js |  9 ++---
 .../eslint-config-airbnb-base/rules/es6.js    |  3 +-
 .../eslint-config-airbnb-base/rules/node.js   |  3 +-
 .../eslint-config-airbnb-base/rules/style.js  | 33 +++++++++++--------
 7 files changed, 28 insertions(+), 33 deletions(-)

diff --git a/.travis.yml b/.travis.yml
index 7d887ca685..9e1091574d 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -19,7 +19,6 @@ env:
   matrix:
     - 'TEST=true ESLINT=3 PACKAGE=eslint-config-airbnb'
     - 'TEST=true ESLINT=4 PACKAGE=eslint-config-airbnb'
-    - 'TEST=true ESLINT=3 PACKAGE=eslint-config-airbnb-base'
     - 'TEST=true ESLINT=4 PACKAGE=eslint-config-airbnb-base'
 matrix:
   fast_finish: true
@@ -28,8 +27,6 @@ matrix:
       env: PREPUBLISH=true ESLINT=3 PACKAGE=eslint-config-airbnb
     - node_js: "node"
       env: PREPUBLISH=true ESLINT=4 PACKAGE=eslint-config-airbnb
-    - node_js: "node"
-      env: PREPUBLISH=true ESLINT=3 PACKAGE=eslint-config-airbnb-base
     - node_js: "node"
       env: PREPUBLISH=true ESLINT=4 PACKAGE=eslint-config-airbnb-base
   allow_failures:
@@ -37,5 +34,4 @@ matrix:
     - node_js: "5"
     - env: PREPUBLISH=true ESLINT=3 PACKAGE=eslint-config-airbnb
     - env: PREPUBLISH=true ESLINT=4 PACKAGE=eslint-config-airbnb
-    - env: PREPUBLISH=true ESLINT=3 PACKAGE=eslint-config-airbnb-base
     - env: PREPUBLISH=true ESLINT=4 PACKAGE=eslint-config-airbnb-base
diff --git a/packages/eslint-config-airbnb-base/package.json b/packages/eslint-config-airbnb-base/package.json
index 90078eb1d0..f23359e969 100644
--- a/packages/eslint-config-airbnb-base/package.json
+++ b/packages/eslint-config-airbnb-base/package.json
@@ -51,7 +51,7 @@
     "babel-preset-airbnb": "^2.4.0",
     "babel-tape-runner": "^2.0.1",
     "editorconfig-tools": "^0.1.1",
-    "eslint": "^4.5.0",
+    "eslint": "^4.6.0",
     "eslint-find-rules": "^3.1.1",
     "eslint-plugin-import": "^2.7.0",
     "in-publish": "^2.0.0",
@@ -59,7 +59,7 @@
     "tape": "^4.8.0"
   },
   "peerDependencies": {
-    "eslint": "^3.19.0 || ^4.5.0",
+    "eslint": "^4.6.0",
     "eslint-plugin-import": "^2.7.0"
   },
   "engines": {
diff --git a/packages/eslint-config-airbnb-base/rules/best-practices.js b/packages/eslint-config-airbnb-base/rules/best-practices.js
index 11b18a2efd..83808bb879 100644
--- a/packages/eslint-config-airbnb-base/rules/best-practices.js
+++ b/packages/eslint-config-airbnb-base/rules/best-practices.js
@@ -143,7 +143,7 @@ module.exports = {
 
     // disallow use of multiple spaces
     'no-multi-spaces': ['error', {
-      // ignoreEOLComments: false, // TODO: uncomment once v3 is dropped
+      ignoreEOLComments: false,
     }],
 
     // disallow use of multiline strings
@@ -294,8 +294,7 @@ module.exports = {
 
     // require using Error objects as Promise rejection reasons
     // http://eslint.org/docs/rules/prefer-promise-reject-errors
-    // TODO: enable, semver-major
-    'prefer-promise-reject-errors': ['off', { allowEmptyReject: true }],
+    'prefer-promise-reject-errors': ['error', { allowEmptyReject: true }],
 
     // require use of the second argument for parseInt()
     radix: 'error',
diff --git a/packages/eslint-config-airbnb-base/rules/errors.js b/packages/eslint-config-airbnb-base/rules/errors.js
index 786b88ae1e..19b815a09b 100644
--- a/packages/eslint-config-airbnb-base/rules/errors.js
+++ b/packages/eslint-config-airbnb-base/rules/errors.js
@@ -2,13 +2,11 @@ module.exports = {
   rules: {
     // Enforce “for” loop update clause moving the counter in the right direction
     // http://eslint.org/docs/rules/for-direction
-    // TODO: enable, semver-major until v3 is dropped; semver-minor otherwise
-    'for-direction': 'off',
+    'for-direction': 'error',
 
     // Enforces that a return statement is present in property getters
     // http://eslint.org/docs/rules/getter-return
-    // TODO: enable, semver-major when v3 is dropped
-    'getter-return': ['off', { allowImplicit: true }],
+    'getter-return': ['error', { allowImplicit: true }],
 
     // Disallow await inside of loops
     // http://eslint.org/docs/rules/no-await-in-loop
@@ -16,8 +14,7 @@ module.exports = {
 
     // Disallow comparisons to negative zero
     // http://eslint.org/docs/rules/no-compare-neg-zero
-    // TODO: enable (semver-major)
-    'no-compare-neg-zero': 'off',
+    'no-compare-neg-zero': 'error',
 
     // disallow assignment in conditional expressions
     'no-cond-assign': ['error', 'always'],
diff --git a/packages/eslint-config-airbnb-base/rules/es6.js b/packages/eslint-config-airbnb-base/rules/es6.js
index a77f3a6641..f53814d1e7 100644
--- a/packages/eslint-config-airbnb-base/rules/es6.js
+++ b/packages/eslint-config-airbnb-base/rules/es6.js
@@ -110,8 +110,7 @@ module.exports = {
 
     // Prefer destructuring from arrays and objects
     // http://eslint.org/docs/rules/prefer-destructuring
-    // TODO: enable
-    'prefer-destructuring': ['off', {
+    'prefer-destructuring': ['error', {
       VariableDeclarator: {
         array: false,
         object: true,
diff --git a/packages/eslint-config-airbnb-base/rules/node.js b/packages/eslint-config-airbnb-base/rules/node.js
index d890a67c1b..9413b5483a 100644
--- a/packages/eslint-config-airbnb-base/rules/node.js
+++ b/packages/eslint-config-airbnb-base/rules/node.js
@@ -16,8 +16,7 @@ module.exports = {
 
     // disallow use of the Buffer() constructor
     // http://eslint.org/docs/rules/no-buffer-constructor
-    // TODO: enable, semver-major
-    'no-buffer-constructor': 'off',
+    'no-buffer-constructor': 'error',
 
     // disallow mixing regular variable and require declarations
     'no-mixed-requires': ['off', false],
diff --git a/packages/eslint-config-airbnb-base/rules/style.js b/packages/eslint-config-airbnb-base/rules/style.js
index 82ef7018c2..bcd83778e1 100644
--- a/packages/eslint-config-airbnb-base/rules/style.js
+++ b/packages/eslint-config-airbnb-base/rules/style.js
@@ -82,6 +82,10 @@ module.exports = {
     // TODO: enable
     'func-style': ['off', 'expression'],
 
+    // enforce consistent line breaks inside function parentheses
+    // https://eslint.org/docs/rules/function-paren-newline
+    'function-paren-newline': ['error', 'multiline'],
+
     // Blacklist certain identifiers to prevent them being used
     // http://eslint.org/docs/rules/id-blacklist
     'id-blacklist': 'off',
@@ -100,9 +104,6 @@ module.exports = {
       VariableDeclarator: 1,
       outerIIFEBody: 1,
       // MemberExpression: null,
-      // CallExpression: {
-      //   parameters: null,
-      // },
       FunctionDeclaration: {
         parameters: 1,
         body: 1
@@ -110,7 +111,15 @@ module.exports = {
       FunctionExpression: {
         parameters: 1,
         body: 1
-      }
+      },
+      CallExpression: {
+        'arguments': 1
+      },
+      ArrayExpression: 1,
+      ObjectExpression: 1,
+      ImportDeclaration: 1,
+      flatTernaryExpressions: false,
+      ignoredNodes: ['JSXElement *']
     }],
 
     // specify whether double or single quotes should be used in JSX attributes
@@ -305,7 +314,7 @@ module.exports = {
     // disallow trailing whitespace at the end of lines
     'no-trailing-spaces': ['error', {
       skipBlankLines: false,
-      // ignoreComments: false, // TODO: uncomment once v3 is dropped
+      ignoreComments: false,
     }],
 
     // disallow dangling underscores in identifiers
@@ -313,7 +322,7 @@ module.exports = {
       allow: [],
       allowAfterThis: false,
       allowAfterSuper: false,
-      // enforceInMethodNames: false, // TODO: uncoment and enable, semver-minor once v3 is dropped
+      enforceInMethodNames: false,
     }],
 
     // disallow the use of Boolean literals in conditional expressions
@@ -334,8 +343,7 @@ module.exports = {
 
     // enforce line breaks between braces
     // http://eslint.org/docs/rules/object-curly-newline
-    // TODO: enable once https://github.com/eslint/eslint/issues/6488 is resolved and v3 is dropped
-    'object-curly-newline': ['off', {
+    'object-curly-newline': ['error', {
       ObjectExpression: { minProperties: 3, multiline: true, consistent: true },
       ObjectPattern: { minProperties: 3, multiline: true, consistent: true }
     }],
@@ -386,8 +394,7 @@ module.exports = {
 
     // Enforce location of semicolons
     // http://eslint.org/docs/rules/semi-style
-    // TODO: enable, semver-major until v3 is dropped, semver-minor otherwise
-    'semi-style': ['off', 'last'],
+    'semi-style': ['error', 'last'],
 
     // requires object keys to be sorted
     'sort-keys': ['off', 'asc', { caseSensitive: false, natural: true }],
@@ -437,13 +444,11 @@ module.exports = {
 
     // Enforce spacing around colons of switch statements
     // http://eslint.org/docs/rules/switch-colon-spacing
-    // TODO: enable, semver-major
-    'switch-colon-spacing': ['off', { after: true, before: false }],
+    'switch-colon-spacing': ['error', { after: true, before: false }],
 
     // Require or disallow spacing between template tags and their literals
     // http://eslint.org/docs/rules/template-tag-spacing
-    // TODO: enable, semver-major
-    'template-tag-spacing': ['off', 'never'],
+    'template-tag-spacing': ['error', 'never'],
 
     // require or disallow the Unicode Byte Order Mark
     // http://eslint.org/docs/rules/unicode-bom

From f878edad256fabd4fdcdfdffabd884744b0924d4 Mon Sep 17 00:00:00 2001
From: Thomas Grainger <tom@procensus.com>
Date: Fri, 5 May 2017 11:42:43 +0100
Subject: [PATCH 1029/1591] [eslint config] [base] [patch] also disallow
 padding in classes and switches

---
 README.md                                         | 10 +++++++++-
 packages/eslint-config-airbnb-base/rules/style.js |  4 ++--
 2 files changed, 11 insertions(+), 3 deletions(-)

diff --git a/README.md b/README.md
index 4125081c2f..27070b7792 100644
--- a/README.md
+++ b/README.md
@@ -2396,7 +2396,7 @@ Other Style Guides
 
     }
 
-    // also bad
+    // bad
     if (baz) {
 
       console.log(qux);
@@ -2405,6 +2405,14 @@ Other Style Guides
 
     }
 
+    // bad
+    class Foo {
+
+      constructor(bar) {
+        this.bar = bar;
+      }
+    }
+
     // good
     function bar() {
       console.log(foo);
diff --git a/packages/eslint-config-airbnb-base/rules/style.js b/packages/eslint-config-airbnb-base/rules/style.js
index bcd83778e1..d36309a808 100644
--- a/packages/eslint-config-airbnb-base/rules/style.js
+++ b/packages/eslint-config-airbnb-base/rules/style.js
@@ -368,8 +368,8 @@ module.exports = {
     // enforce operators to be placed before or after line breaks
     'operator-linebreak': 'off',
 
-    // enforce padding within blocks
-    'padded-blocks': ['error', 'never'],
+    // disallow padding within blocks
+    'padded-blocks': ['error', { blocks: 'never', classes: 'never', switches: 'never' }],
 
     // Require or disallow padding lines between statements
     // http://eslint.org/docs/rules/padding-line-between-statements

From 121a95d71524032bfa858271b318aa6e19553dfc Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Fri, 5 May 2017 12:16:58 -0700
Subject: [PATCH 1030/1591] [eslint config] [deps] [breaking] update
 `eslint-plugin-jsx-a11y`

---
 packages/eslint-config-airbnb/package.json | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/packages/eslint-config-airbnb/package.json b/packages/eslint-config-airbnb/package.json
index 28e2ae4ec9..d6635e2c0c 100644
--- a/packages/eslint-config-airbnb/package.json
+++ b/packages/eslint-config-airbnb/package.json
@@ -55,7 +55,7 @@
     "eslint": "^3.19.0",
     "eslint-find-rules": "^1.14.3",
     "eslint-plugin-import": "^2.2.0",
-    "eslint-plugin-jsx-a11y": "^4.0.0",
+    "eslint-plugin-jsx-a11y": "^5.0.0",
     "eslint-plugin-react": "^6.10.3",
     "in-publish": "^2.0.0",
     "react": ">= 0.13.0",
@@ -64,7 +64,7 @@
   },
   "peerDependencies": {
     "eslint": "^3.19.0",
-    "eslint-plugin-jsx-a11y": "^4.0.0",
+    "eslint-plugin-jsx-a11y": "^5.0.0",
     "eslint-plugin-import": "^2.2.0",
     "eslint-plugin-react": "^6.10.3"
   },

From 01e39775972e3457defd64af2e94843a848d4fe2 Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Fri, 5 May 2017 12:34:00 -0700
Subject: [PATCH 1031/1591] [eslint config] [breaking] enable rules:

 - `no-autofocus`: enable `ignoreNonDOM`
 - add options to `no-static-element-interactions`

 - remove `onclick-has-role`

 - add `alt-text` (replaces `img-has-alt`)
 - add `interactive-supports-focus` (replaces `onclick-has-focus`)

 - add `no-noninteractive-element-interactions`
 - add `media-has-caption`
 - add `no-interactive-element-to-noninteractive-role`
 - add `no-noninteractive-element-to-interactive-role`
 - add `no-noninteractive-tabindex`
---
 .../eslint-config-airbnb/rules/react-a11y.js  | 80 ++++++++++++++++---
 1 file changed, 67 insertions(+), 13 deletions(-)

diff --git a/packages/eslint-config-airbnb/rules/react-a11y.js b/packages/eslint-config-airbnb/rules/react-a11y.js
index a5443645de..8bc1426f0f 100644
--- a/packages/eslint-config-airbnb/rules/react-a11y.js
+++ b/packages/eslint-config-airbnb/rules/react-a11y.js
@@ -32,9 +32,15 @@ module.exports = {
     // https://github.com/evcohen/eslint-plugin-jsx-a11y/blob/master/docs/rules/href-no-hash.md
     'jsx-a11y/href-no-hash': ['error', { components: ['a'] }],
 
-    // Require <img> to have a non-empty `alt` prop, or role="presentation"
-    // https://github.com/evcohen/eslint-plugin-jsx-a11y/blob/master/docs/rules/img-has-alt.md
-    'jsx-a11y/img-has-alt': 'error',
+    // Enforce that all elements that require alternative text have meaningful information
+    // https://github.com/evcohen/eslint-plugin-jsx-a11y/blob/master/docs/rules/alt-text.md
+    'jsx-a11y/alt-text': ['error', {
+      elements: ['img', 'object', 'area', 'input[type="image"]'],
+      img: [],
+      object: [],
+      area: [],
+      'input[type="image"]': [],
+    }],
 
     // Prevent img alt text from containing redundant words like "image", "picture", or "photo"
     // https://github.com/evcohen/eslint-plugin-jsx-a11y/blob/master/docs/rules/img-redundant-alt.md
@@ -57,14 +63,9 @@ module.exports = {
     // https://github.com/evcohen/eslint-plugin-jsx-a11y/blob/master/docs/rules/no-onchange.md
     'jsx-a11y/no-onchange': 'off',
 
-    // Enforce that elements with onClick handlers must be focusable.
-    // TODO: evaluate
-    // https://github.com/evcohen/eslint-plugin-jsx-a11y/blob/master/docs/rules/onclick-has-focus.md
-    'jsx-a11y/onclick-has-focus': 'off',
-
-    // require things with onClick to have an aria role
-    // https://github.com/evcohen/eslint-plugin-jsx-a11y/blob/master/docs/rules/onclick-has-role.md
-    'jsx-a11y/onclick-has-role': 'off',
+    // Elements with an interactive role and interaction handlers must be focusable
+    // https://github.com/evcohen/eslint-plugin-jsx-a11y/blob/master/docs/rules/interactive-supports-focus.md
+    'jsx-a11y/interactive-supports-focus': 'error',
 
     // Enforce that elements with ARIA roles must have all required attributes
     // for that role.
@@ -109,7 +110,29 @@ module.exports = {
 
     // Enforce that DOM elements without semantic behavior not have interaction handlers
     // https://github.com/evcohen/eslint-plugin-jsx-a11y/blob/master/docs/rules/no-static-element-interactions.md
-    'jsx-a11y/no-static-element-interactions': 'error',
+    'jsx-a11y/no-static-element-interactions': ['error', {
+      handlers: [
+        'onClick',
+        'onMouseDown',
+        'onMouseUp',
+        'onKeyPress',
+        'onKeyDown',
+        'onKeyUp',
+      ]
+    }],
+
+    // A non-interactive element does not support event handlers (mouse and key handlers)
+    // https://github.com/evcohen/eslint-plugin-jsx-a11y/blob/master/docs/rules/no-noninteractive-element-interactions.md
+    'jsx-a11y/no-noninteractive-element-interactions': ['error', {
+      handlers: [
+        'onClick',
+        'onMouseDown',
+        'onMouseUp',
+        'onKeyPress',
+        'onKeyDown',
+        'onKeyUp',
+      ]
+    }],
 
     // ensure emoji are accessible
     // https://github.com/evcohen/eslint-plugin-jsx-a11y/blob/master/docs/rules/accessible-emoji.md
@@ -125,10 +148,41 @@ module.exports = {
 
     // prohibit autoFocus prop
     // https://github.com/evcohen/eslint-plugin-jsx-a11y/blob/master/docs/rules/no-autofocus.md
-    'jsx-a11y/no-autofocus': 'error',
+    'jsx-a11y/no-autofocus': ['error', { ignoreNonDOM: true }],
 
     // ensure HTML elements do not specify redundant ARIA roles
     // https://github.com/evcohen/eslint-plugin-jsx-a11y/blob/master/docs/rules/no-redundant-roles.md
     'jsx-a11y/no-redundant-roles': 'error',
+
+    // media elements must have captions
+    // https://github.com/evcohen/eslint-plugin-jsx-a11y/blob/master/docs/rules/media-has-caption.md
+    'jsx-a11y/media-has-caption': ['error', {
+      audio: [],
+      video: [],
+      track: [],
+    }],
+
+    // WAI-ARIA roles should not be used to convert an interactive element to non-interactive
+    // https://github.com/evcohen/eslint-plugin-jsx-a11y/blob/master/docs/rules/no-interactive-element-to-noninteractive-role.md
+    'jsx-a11y/no-interactive-element-to-noninteractive-role': ['error', {
+      tr: ['none', 'presentation'],
+    }],
+
+    // WAI-ARIA roles should not be used to convert a non-interactive element to interactive
+    // https://github.com/evcohen/eslint-plugin-jsx-a11y/blob/master/docs/rules/no-noninteractive-element-to-interactive-role.md
+    'jsx-a11y/no-noninteractive-element-to-interactive-role': ['error', {
+      ul: ['listbox', 'menu', 'menubar', 'radiogroup', 'tablist', 'tree', 'treegrid'],
+      ol: ['listbox', 'menu', 'menubar', 'radiogroup', 'tablist', 'tree', 'treegrid'],
+      li: ['menuitem', 'option', 'row', 'tab', 'treeitem'],
+      table: ['grid'],
+      td: ['gridcell'],
+    }],
+
+    // Tab key navigation should be limited to elements on the page that can be interacted with.
+    // https://github.com/evcohen/eslint-plugin-jsx-a11y/blob/master/docs/rules/no-noninteractive-tabindex.md
+    'jsx-a11y/no-noninteractive-tabindex': ['error', {
+      tags: [],
+      roles: ['tabpanel'],
+    }],
   },
 };

From d469bb25c1e8b762de65bbb5e21ed98d9bf934f7 Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Fri, 5 May 2017 23:52:17 -0700
Subject: [PATCH 1032/1591] [eslint config] [deps] [breaking] update
 `eslint-plugin-react`

 - enable `react/no-will-update-set-state`
 - delete removed rules
 - `jsx-wrap-multilines`: enable `arrow` option
 - `jsx-first-prop-new-line`: change to `multiline-multiprop`
 - disable `jsx-space-before-closing` in favor of `jsx-tag-spacing`
---
 packages/eslint-config-airbnb/package.json   |  4 +--
 packages/eslint-config-airbnb/rules/react.js | 30 ++++++++++----------
 2 files changed, 17 insertions(+), 17 deletions(-)

diff --git a/packages/eslint-config-airbnb/package.json b/packages/eslint-config-airbnb/package.json
index d6635e2c0c..d246d23e45 100644
--- a/packages/eslint-config-airbnb/package.json
+++ b/packages/eslint-config-airbnb/package.json
@@ -56,7 +56,7 @@
     "eslint-find-rules": "^1.14.3",
     "eslint-plugin-import": "^2.2.0",
     "eslint-plugin-jsx-a11y": "^5.0.0",
-    "eslint-plugin-react": "^6.10.3",
+    "eslint-plugin-react": "^7.0.0",
     "in-publish": "^2.0.0",
     "react": ">= 0.13.0",
     "safe-publish-latest": "^1.1.1",
@@ -66,7 +66,7 @@
     "eslint": "^3.19.0",
     "eslint-plugin-jsx-a11y": "^5.0.0",
     "eslint-plugin-import": "^2.2.0",
-    "eslint-plugin-react": "^6.10.3"
+    "eslint-plugin-react": "^7.0.0"
   },
   "engines": {
     "node": ">= 4"
diff --git a/packages/eslint-config-airbnb/rules/react.js b/packages/eslint-config-airbnb/rules/react.js
index aaa2eec733..de9ba3aed3 100644
--- a/packages/eslint-config-airbnb/rules/react.js
+++ b/packages/eslint-config-airbnb/rules/react.js
@@ -119,6 +119,7 @@ module.exports = {
       shorthandFirst: false,
       shorthandLast: false,
       noSortAlphabetically: false,
+      reservedFirst: true,
     }],
 
     // Prevent React to be incorrectly marked as unused
@@ -139,11 +140,15 @@ module.exports = {
 
     // Prevent usage of setState in componentDidMount
     // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/no-did-mount-set-state.md
-    'react/no-did-mount-set-state': ['error'],
+    'react/no-did-mount-set-state': 'error',
 
     // Prevent usage of setState in componentDidUpdate
     // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/no-did-update-set-state.md
-    'react/no-did-update-set-state': ['error'],
+    'react/no-did-update-set-state': 'error',
+
+    // Prevent usage of setState in componentWillUpdate
+    // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/no-will-update-set-state.md
+    'react/no-will-update-set-state': 'error',
 
     // Prevent direct mutation of this.state
     // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/no-direct-mutation-state.md
@@ -185,11 +190,6 @@ module.exports = {
     // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/react-in-jsx-scope.md
     'react/react-in-jsx-scope': 'error',
 
-    // Restrict file extensions that may be required
-    // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/require-extension.md
-    // deprecated in favor of import/extensions
-    'react/require-extension': ['off', { extensions: ['.jsx', '.js'] }],
-
     // Require render() methods to return something
     // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/require-render-return.md
     'react/require-render-return': 'error',
@@ -198,10 +198,6 @@ module.exports = {
     // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/self-closing-comp.md
     'react/self-closing-comp': 'error',
 
-    // Enforce spaces before the closing bracket of self-closing JSX elements
-    // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/jsx-space-before-closing.md
-    'react/jsx-space-before-closing': ['error', 'always'],
-
     // Enforce component methods order
     // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/sort-comp.md
     'react/sort-comp': ['error', {
@@ -221,13 +217,13 @@ module.exports = {
     'react/jsx-wrap-multilines': ['error', {
       declaration: true,
       assignment: true,
-      return: true
+      return: true,
+      arrow: true,
     }],
-    'react/wrap-multilines': 'off', // deprecated version
 
     // Require that the first prop in a JSX element be on a new line when the element is multiline
     // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/jsx-first-prop-new-line.md
-    'react/jsx-first-prop-new-line': ['error', 'multiline'],
+    'react/jsx-first-prop-new-line': ['error', 'multiline-multiprop'],
 
     // Enforce spacing around jsx equals signs
     // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/jsx-equals-spacing.md
@@ -248,7 +244,6 @@ module.exports = {
     // prevent accidental JS comments from being injected into JSX as text
     // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/jsx-no-comment-textnodes.md
     'react/jsx-no-comment-textnodes': 'error',
-    'react/no-comment-textnodes': 'off', // deprecated version
 
     // disallow using React.render/ReactDOM.render's return value
     // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/no-render-return-value.md
@@ -302,6 +297,11 @@ module.exports = {
       afterOpening: 'never'
     }],
 
+    // Enforce spaces before the closing bracket of self-closing JSX elements
+    // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/jsx-space-before-closing.md
+    // Deprecated in favor of jsx-tag-spacing
+    'react/jsx-space-before-closing': ['off', 'always'],
+
     // Prevent usage of Array index in keys
     // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/no-array-index-key.md
     'react/no-array-index-key': 'error',

From 18e5ac9a8c95ce055d0c99e090d5ff38b0ca3691 Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Tue, 9 May 2017 10:30:16 -0700
Subject: [PATCH 1033/1591] [eslint config] [deps] update
 `eslint-plugin-jsx-a11y`

---
 packages/eslint-config-airbnb/package.json | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/packages/eslint-config-airbnb/package.json b/packages/eslint-config-airbnb/package.json
index d246d23e45..1e6a334810 100644
--- a/packages/eslint-config-airbnb/package.json
+++ b/packages/eslint-config-airbnb/package.json
@@ -55,7 +55,7 @@
     "eslint": "^3.19.0",
     "eslint-find-rules": "^1.14.3",
     "eslint-plugin-import": "^2.2.0",
-    "eslint-plugin-jsx-a11y": "^5.0.0",
+    "eslint-plugin-jsx-a11y": "^5.0.1",
     "eslint-plugin-react": "^7.0.0",
     "in-publish": "^2.0.0",
     "react": ">= 0.13.0",
@@ -64,7 +64,7 @@
   },
   "peerDependencies": {
     "eslint": "^3.19.0",
-    "eslint-plugin-jsx-a11y": "^5.0.0",
+    "eslint-plugin-jsx-a11y": "^5.0.1",
     "eslint-plugin-import": "^2.2.0",
     "eslint-plugin-react": "^7.0.0"
   },

From 2f912c1dd37fb34419fb14698653442e31e19235 Mon Sep 17 00:00:00 2001
From: Trevor Sayre <sayret@gmail.com>
Date: Tue, 9 May 2017 13:12:09 -0400
Subject: [PATCH 1034/1591] [guide] [react] Update React README ref to
 jsx-a11y/img-has-alt

https://github.com/evcohen/eslint-plugin-jsx-a11y/pull/220
---
 react/README.md | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/react/README.md b/react/README.md
index 65f1aeb68b..e5581b9788 100644
--- a/react/README.md
+++ b/react/README.md
@@ -271,7 +271,7 @@
     />
     ```
 
-  - Always include an `alt` prop on `<img>` tags. If the image is presentational, `alt` can be an empty string or the `<img>` must have `role="presentation"`. eslint: [`jsx-a11y/img-has-alt`](https://github.com/evcohen/eslint-plugin-jsx-a11y/blob/master/docs/rules/img-has-alt.md)
+  - Always include an `alt` prop on `<img>` tags. If the image is presentational, `alt` can be an empty string or the `<img>` must have `role="presentation"`. eslint: [`jsx-a11y/alt-text`](https://github.com/evcohen/eslint-plugin-jsx-a11y/blob/master/docs/rules/alt-text.md)
 
     ```jsx
     // bad

From 152eaa6669c353d16f606cc29b324a59761979f5 Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Tue, 9 May 2017 10:39:35 -0700
Subject: [PATCH 1035/1591] [guide] [react] Update React README ref to
 jsx-a11y/jsx-space-before-closing

---
 react/README.md | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/react/README.md b/react/README.md
index e5581b9788..16bf2420ac 100644
--- a/react/README.md
+++ b/react/README.md
@@ -212,7 +212,7 @@
 
 ## Spacing
 
-  - Always include a single space in your self-closing tag. eslint: [`no-multi-spaces`](http://eslint.org/docs/rules/no-multi-spaces), [`react/jsx-space-before-closing`](https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/jsx-space-before-closing.md)
+  - Always include a single space in your self-closing tag. eslint: [`no-multi-spaces`](http://eslint.org/docs/rules/no-multi-spaces), [`react/jsx-tag-spacing`](https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/jsx-tag-spacing.md)
 
     ```jsx
     // bad

From 655886fc8762a5ab3c2b467bccba56da6488888e Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Sat, 13 May 2017 14:12:21 -0700
Subject: [PATCH 1036/1591] [eslint config] [deps] update `eslint-plugin-react`

---
 packages/eslint-config-airbnb/package.json | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/packages/eslint-config-airbnb/package.json b/packages/eslint-config-airbnb/package.json
index 1e6a334810..b780bfad30 100644
--- a/packages/eslint-config-airbnb/package.json
+++ b/packages/eslint-config-airbnb/package.json
@@ -56,7 +56,7 @@
     "eslint-find-rules": "^1.14.3",
     "eslint-plugin-import": "^2.2.0",
     "eslint-plugin-jsx-a11y": "^5.0.1",
-    "eslint-plugin-react": "^7.0.0",
+    "eslint-plugin-react": "^7.0.1",
     "in-publish": "^2.0.0",
     "react": ">= 0.13.0",
     "safe-publish-latest": "^1.1.1",
@@ -66,7 +66,7 @@
     "eslint": "^3.19.0",
     "eslint-plugin-jsx-a11y": "^5.0.1",
     "eslint-plugin-import": "^2.2.0",
-    "eslint-plugin-react": "^7.0.0"
+    "eslint-plugin-react": "^7.0.1"
   },
   "engines": {
     "node": ">= 4"

From 5bcb840abe438a76c37e2b37f8cb9fe223d263bd Mon Sep 17 00:00:00 2001
From: Siddharth Doshi <sidoshi510@gmail.com>
Date: Fri, 12 May 2017 01:08:33 +0530
Subject: [PATCH 1037/1591] [eslint config] [base] [minor] Disallow unused
 global variables

---
 packages/eslint-config-airbnb-base/rules/variables.js | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/packages/eslint-config-airbnb-base/rules/variables.js b/packages/eslint-config-airbnb-base/rules/variables.js
index 1eb7528aa8..3fc5f6ef93 100644
--- a/packages/eslint-config-airbnb-base/rules/variables.js
+++ b/packages/eslint-config-airbnb-base/rules/variables.js
@@ -34,7 +34,7 @@ module.exports = {
     'no-undefined': 'off',
 
     // disallow declaration of variables that are not used in the code
-    'no-unused-vars': ['error', { vars: 'local', args: 'after-used', ignoreRestSiblings: true }],
+    'no-unused-vars': ['error', { vars: 'all', args: 'after-used', ignoreRestSiblings: true }],
 
     // disallow use of variables before they are defined
     'no-use-before-define': ['error', { functions: true, classes: true, variables: true }],

From d48083796c3a1442e44c86b050cc65a353f9bf43 Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Sun, 14 May 2017 16:53:50 -0700
Subject: [PATCH 1038/1591] [eslint config] [base] v11.2.0

---
 packages/eslint-config-airbnb-base/CHANGELOG.md | 4 ++++
 packages/eslint-config-airbnb-base/package.json | 2 +-
 2 files changed, 5 insertions(+), 1 deletion(-)

diff --git a/packages/eslint-config-airbnb-base/CHANGELOG.md b/packages/eslint-config-airbnb-base/CHANGELOG.md
index 8559e2277c..9407b90a6d 100644
--- a/packages/eslint-config-airbnb-base/CHANGELOG.md
+++ b/packages/eslint-config-airbnb-base/CHANGELOG.md
@@ -1,3 +1,7 @@
+11.2.0 / 2017-05-14
+==================
+ - [minor] Disallow unused global variables
+
 11.1.3 / 2017-04-03
 ==================
  - [patch] add error messages to `no-restricted-syntax` (#1353)
diff --git a/packages/eslint-config-airbnb-base/package.json b/packages/eslint-config-airbnb-base/package.json
index d4f8951317..d604e51ea8 100644
--- a/packages/eslint-config-airbnb-base/package.json
+++ b/packages/eslint-config-airbnb-base/package.json
@@ -1,6 +1,6 @@
 {
   "name": "eslint-config-airbnb-base",
-  "version": "11.1.3",
+  "version": "11.2.0",
   "description": "Airbnb's base JS ESLint config, following our styleguide",
   "main": "index.js",
   "scripts": {

From 0449d9b5711c3135ec479b03f8928ec35e06d882 Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Sun, 14 May 2017 16:58:38 -0700
Subject: [PATCH 1039/1591] [eslint config] [deps] update
 `eslint-config-airbnb-base`

---
 packages/eslint-config-airbnb/package.json | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/packages/eslint-config-airbnb/package.json b/packages/eslint-config-airbnb/package.json
index b780bfad30..a48d8c0bb7 100644
--- a/packages/eslint-config-airbnb/package.json
+++ b/packages/eslint-config-airbnb/package.json
@@ -46,7 +46,7 @@
   },
   "homepage": "https://github.com/airbnb/javascript",
   "dependencies": {
-    "eslint-config-airbnb-base": "^11.1.3"
+    "eslint-config-airbnb-base": "^11.2.0"
   },
   "devDependencies": {
     "babel-preset-airbnb": "^2.2.3",

From 58e6cd323ad1d010e81fb5d064a40c35e5370556 Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Sun, 14 May 2017 17:05:45 -0700
Subject: [PATCH 1040/1591] [eslint config] v15.0.0

---
 packages/eslint-config-airbnb/CHANGELOG.md | 9 +++++++++
 packages/eslint-config-airbnb/package.json | 2 +-
 2 files changed, 10 insertions(+), 1 deletion(-)

diff --git a/packages/eslint-config-airbnb/CHANGELOG.md b/packages/eslint-config-airbnb/CHANGELOG.md
index 487e14b5fd..26af9a5317 100644
--- a/packages/eslint-config-airbnb/CHANGELOG.md
+++ b/packages/eslint-config-airbnb/CHANGELOG.md
@@ -1,3 +1,12 @@
+15.0.0 / 2017-05-14
+==================
+- [breaking] set default React version to 0.15
+- [breaking] `update eslint-plugin-jsx-a11y` to v5, enable new rules
+- [breaking] `update eslint-plugin-react` to v7, enable new rules
+- [minor] enable rules: `jsx-max-props-per-line`, `void-dom-elements-no-children`
+- [patch] Turn `ignorePureComponent` option on for react/prefer-stateless-function (#1378, #1398)
+- [deps] update `eslint`, `eslint-plugin-react`, `eslint-config-airbnb-base`
+
 14.1.0 / 2017-02-05
 ==================
 - [patch] allow `eslint-plugin-jsx-a11y` to be v3 or v4. Remove `no-marquee` rule temporarily.
diff --git a/packages/eslint-config-airbnb/package.json b/packages/eslint-config-airbnb/package.json
index a48d8c0bb7..a5c9954ca4 100644
--- a/packages/eslint-config-airbnb/package.json
+++ b/packages/eslint-config-airbnb/package.json
@@ -1,6 +1,6 @@
 {
   "name": "eslint-config-airbnb",
-  "version": "14.1.0",
+  "version": "15.0.0",
   "description": "Airbnb's ESLint config, following our styleguide",
   "main": "index.js",
   "scripts": {

From fe65e4b6492342dd40d3b163090ce82a51863033 Mon Sep 17 00:00:00 2001
From: Billy Janitsch <billy@kensho.com>
Date: Mon, 15 May 2017 12:39:37 -0400
Subject: [PATCH 1041/1591] [eslint config] [patch] Fix reported React version

Fixes #1414.
---
 packages/eslint-config-airbnb/rules/react.js | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/packages/eslint-config-airbnb/rules/react.js b/packages/eslint-config-airbnb/rules/react.js
index de9ba3aed3..0b159de81e 100644
--- a/packages/eslint-config-airbnb/rules/react.js
+++ b/packages/eslint-config-airbnb/rules/react.js
@@ -327,7 +327,7 @@ module.exports = {
     },
     react: {
       pragma: 'React',
-      version: '0.15'
+      version: '15.0'
     },
   }
 };

From 8cabe49b943b6407ac4a16f776c6945b6e0b34e4 Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Mon, 15 May 2017 17:54:47 -0700
Subject: [PATCH 1042/1591] [eslint config] v15.0.1

---
 packages/eslint-config-airbnb/CHANGELOG.md | 4 ++++
 packages/eslint-config-airbnb/package.json | 2 +-
 2 files changed, 5 insertions(+), 1 deletion(-)

diff --git a/packages/eslint-config-airbnb/CHANGELOG.md b/packages/eslint-config-airbnb/CHANGELOG.md
index 26af9a5317..770f56fefb 100644
--- a/packages/eslint-config-airbnb/CHANGELOG.md
+++ b/packages/eslint-config-airbnb/CHANGELOG.md
@@ -1,3 +1,7 @@
+15.0.1 / 2017-05-15
+==================
+- [fix] set default React version to 15.0 (#1415)
+
 15.0.0 / 2017-05-14
 ==================
 - [breaking] set default React version to 0.15
diff --git a/packages/eslint-config-airbnb/package.json b/packages/eslint-config-airbnb/package.json
index a5c9954ca4..eb656660d2 100644
--- a/packages/eslint-config-airbnb/package.json
+++ b/packages/eslint-config-airbnb/package.json
@@ -1,6 +1,6 @@
 {
   "name": "eslint-config-airbnb",
-  "version": "15.0.0",
+  "version": "15.0.1",
   "description": "Airbnb's ESLint config, following our styleguide",
   "main": "index.js",
   "scripts": {

From 324bf9c834dead53d6c06ffdf50f764e7d35beb3 Mon Sep 17 00:00:00 2001
From: Vlad Shcherbin <vlad.shcherbin@gmail.com>
Date: Fri, 19 May 2017 15:04:22 +0300
Subject: [PATCH 1043/1591] Fix option typo

---
 packages/eslint-config-airbnb/CHANGELOG.md | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/packages/eslint-config-airbnb/CHANGELOG.md b/packages/eslint-config-airbnb/CHANGELOG.md
index 770f56fefb..4900db6c74 100644
--- a/packages/eslint-config-airbnb/CHANGELOG.md
+++ b/packages/eslint-config-airbnb/CHANGELOG.md
@@ -8,7 +8,7 @@
 - [breaking] `update eslint-plugin-jsx-a11y` to v5, enable new rules
 - [breaking] `update eslint-plugin-react` to v7, enable new rules
 - [minor] enable rules: `jsx-max-props-per-line`, `void-dom-elements-no-children`
-- [patch] Turn `ignorePureComponent` option on for react/prefer-stateless-function (#1378, #1398)
+- [patch] Turn `ignorePureComponents` option on for react/prefer-stateless-function (#1378, #1398)
 - [deps] update `eslint`, `eslint-plugin-react`, `eslint-config-airbnb-base`
 
 14.1.0 / 2017-02-05

From 0dd3dbd7b62061e1ca3d1c5467ed3fbca1e5daf6 Mon Sep 17 00:00:00 2001
From: Siddharth Doshi <sidoshi510@gmail.com>
Date: Sat, 20 May 2017 15:41:37 +0530
Subject: [PATCH 1044/1591] [eslint config] [base] [breaking] Blacklist
 confusing globals

---
 packages/eslint-config-airbnb-base/package.json       | 3 +++
 packages/eslint-config-airbnb-base/rules/variables.js | 4 +++-
 2 files changed, 6 insertions(+), 1 deletion(-)

diff --git a/packages/eslint-config-airbnb-base/package.json b/packages/eslint-config-airbnb-base/package.json
index d604e51ea8..92fa71298c 100644
--- a/packages/eslint-config-airbnb-base/package.json
+++ b/packages/eslint-config-airbnb-base/package.json
@@ -62,5 +62,8 @@
   },
   "engines": {
     "node": ">= 4"
+  },
+  "dependencies": {
+    "eslint-restricted-globals": "^0.1.1"
   }
 }
diff --git a/packages/eslint-config-airbnb-base/rules/variables.js b/packages/eslint-config-airbnb-base/rules/variables.js
index 3fc5f6ef93..fc0b5b11d4 100644
--- a/packages/eslint-config-airbnb-base/rules/variables.js
+++ b/packages/eslint-config-airbnb-base/rules/variables.js
@@ -1,3 +1,5 @@
+const restrictedGlobals = require('eslint-restricted-globals');
+
 module.exports = {
   rules: {
     // enforce or disallow variable initializations at definition
@@ -14,7 +16,7 @@ module.exports = {
     'no-label-var': 'error',
 
     // disallow specific globals
-    'no-restricted-globals': 'off',
+    'no-restricted-globals': ['error'].concat(restrictedGlobals),
 
     // disallow declaration of variables already declared in the outer scope
     'no-shadow': 'error',

From f86aacae447725d6d0edd787d620fad54ac1b187 Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Tue, 23 May 2017 12:53:26 -0700
Subject: [PATCH 1045/1591] [eslint config] [fix] jsx should be enabled via
 parserOptions, not via a root ecmaFeatures.

From https://github.com/airbnb/javascript/issues/1410#issuecomment-303368921
---
 packages/eslint-config-airbnb/rules/react-a11y.js | 8 ++++++--
 packages/eslint-config-airbnb/rules/react.js      | 4 +---
 2 files changed, 7 insertions(+), 5 deletions(-)

diff --git a/packages/eslint-config-airbnb/rules/react-a11y.js b/packages/eslint-config-airbnb/rules/react-a11y.js
index 8bc1426f0f..77fcb93d9c 100644
--- a/packages/eslint-config-airbnb/rules/react-a11y.js
+++ b/packages/eslint-config-airbnb/rules/react-a11y.js
@@ -3,9 +3,13 @@ module.exports = {
     'jsx-a11y',
     'react'
   ],
-  ecmaFeatures: {
-    jsx: true
+
+  parserOptions: {
+    ecmaFeatures: {
+      jsx: true,
+    },
   },
+
   rules: {
     // Enforce that anchors have content
     // https://github.com/evcohen/eslint-plugin-jsx-a11y/blob/master/docs/rules/anchor-has-content.md
diff --git a/packages/eslint-config-airbnb/rules/react.js b/packages/eslint-config-airbnb/rules/react.js
index 0b159de81e..4392d678ea 100644
--- a/packages/eslint-config-airbnb/rules/react.js
+++ b/packages/eslint-config-airbnb/rules/react.js
@@ -2,14 +2,12 @@ module.exports = {
   plugins: [
     'react',
   ],
+
   parserOptions: {
     ecmaFeatures: {
       jsx: true,
     },
   },
-  ecmaFeatures: {
-    jsx: true,
-  },
 
   // View link below for react rules documentation
   // https://github.com/yannickcr/eslint-plugin-react#list-of-supported-rules

From 44ca3c2b3a1650ae5b8961ff3d5f3d166fde52db Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Tue, 23 May 2017 12:54:02 -0700
Subject: [PATCH 1046/1591] [eslint config] [deps] update
 `eslint-plugin-jsx-a11y`

---
 packages/eslint-config-airbnb/package.json | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/packages/eslint-config-airbnb/package.json b/packages/eslint-config-airbnb/package.json
index eb656660d2..dd5c99a010 100644
--- a/packages/eslint-config-airbnb/package.json
+++ b/packages/eslint-config-airbnb/package.json
@@ -55,7 +55,7 @@
     "eslint": "^3.19.0",
     "eslint-find-rules": "^1.14.3",
     "eslint-plugin-import": "^2.2.0",
-    "eslint-plugin-jsx-a11y": "^5.0.1",
+    "eslint-plugin-jsx-a11y": "^5.0.3",
     "eslint-plugin-react": "^7.0.1",
     "in-publish": "^2.0.0",
     "react": ">= 0.13.0",
@@ -64,7 +64,7 @@
   },
   "peerDependencies": {
     "eslint": "^3.19.0",
-    "eslint-plugin-jsx-a11y": "^5.0.1",
+    "eslint-plugin-jsx-a11y": "^5.0.3",
     "eslint-plugin-import": "^2.2.0",
     "eslint-plugin-react": "^7.0.1"
   },

From 0f8f30dcd0b8292a9e49148fa6f77046aadbeee2 Mon Sep 17 00:00:00 2001
From: Daniel Axelrod <git@danonline.net>
Date: Sun, 21 May 2017 16:10:51 -0400
Subject: [PATCH 1047/1591] [6.5] Add no-eval eslint rule to docs

Add reference to the eslint `no-eval` rule to the README.

This rule is already set to `error` in best-practices.js in eslint-airbnb-config-base.
---
 README.md | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/README.md b/README.md
index b902d4ddd8..2a851fae40 100644
--- a/README.md
+++ b/README.md
@@ -592,7 +592,7 @@ Other Style Guides
     ```
 
   <a name="strings--eval"></a><a name="6.5"></a>
-  - [6.4](#strings--eval) Never use `eval()` on a string, it opens too many vulnerabilities.
+  - [6.4](#strings--eval) Never use `eval()` on a string, it opens too many vulnerabilities. eslint: [`no-eval`](http://eslint.org/docs/rules/no-eval)
 
   <a name="strings--escaping"></a>
   - [6.5](#strings--escaping) Do not unnecessarily escape characters in strings. eslint: [`no-useless-escape`](http://eslint.org/docs/rules/no-useless-escape)

From f3c9639abe26bd03339f13dc1ab21868399c5beb Mon Sep 17 00:00:00 2001
From: Ken Powers <ken@kenpowers.net>
Date: Wed, 24 May 2017 15:43:56 -0400
Subject: [PATCH 1048/1591] [eslint config] [base] [patch] Allow jsx extensions
 for test files

---
 packages/eslint-config-airbnb-base/rules/imports.js | 7 +++----
 1 file changed, 3 insertions(+), 4 deletions(-)

diff --git a/packages/eslint-config-airbnb-base/rules/imports.js b/packages/eslint-config-airbnb-base/rules/imports.js
index b081b59b6b..3b6c6cef60 100644
--- a/packages/eslint-config-airbnb-base/rules/imports.js
+++ b/packages/eslint-config-airbnb-base/rules/imports.js
@@ -73,10 +73,9 @@ module.exports = {
         'tests/**', // also common npm pattern
         'spec/**', // mocha, rspec-like pattern
         '**/__tests__/**', // jest pattern
-        'test.js', // repos with a single test file
-        'test-*.js', // repos with multiple top-level test files
-        '**/*.test.js', // tests where the extension denotes that it is a test
-        '**/*.spec.js', // tests where the extension denotes that it is a test
+        'test.{js,jsx}', // repos with a single test file
+        'test-*.{js,jsx}', // repos with multiple top-level test files
+        '**/*.{test,spec}.{js,jsx}', // tests where the extension denotes that it is a test
         '**/webpack.config.js', // webpack config
         '**/webpack.config.*.js', // webpack config
         '**/rollup.config.js', // rollup config

From ac6de2fdb8c185597998aa4bf1cc35358d4a3d28 Mon Sep 17 00:00:00 2001
From: Joe Lencioni <joe.lencioni@gmail.com>
Date: Fri, 2 Jun 2017 12:05:41 -0700
Subject: [PATCH 1049/1591] Bump copyright year 2016 -> 2017 in license

---
 LICENSE.md | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/LICENSE.md b/LICENSE.md
index 87081c1339..2867dece2b 100644
--- a/LICENSE.md
+++ b/LICENSE.md
@@ -1,6 +1,6 @@
 MIT License
 
-Copyright (c) 2016 Airbnb
+Copyright (c) 2017 Airbnb
 
 Permission is hereby granted, free of charge, to any person obtaining a copy
 of this software and associated documentation files (the "Software"), to deal

From 98f2224ec2f4378028cbb61a62dbbaa44a2fcc56 Mon Sep 17 00:00:00 2001
From: Daniel Axelrod <git@danonline.net>
Date: Fri, 2 Jun 2017 17:10:16 +0000
Subject: [PATCH 1050/1591] Add linting for Markdown prose

Codify existing practices for writing Markdown in style guides and
enforce them via Markdownlint. A new npm script "lint" in the top level
package.json runs before tests or as the first step of the "travis"
script.

Only modify documents in cases where they had bugs or isolated cases of
inconsistency:

README.md: 10: MD007 Unordered list indentation
Inconsistent with all other top level lists

README.md: 10: MD032 Lists should be surrounded by blank lines
Some Markdown parsers don't handle this correctly

README.md: 3156-3161: MD005 Inconsistent indentation for list items at
                      the same level
Bug, looks like it's intended to be another list level but GitHub
renders it at the same level as the "No but seriously"

README.md & css-in-javascript/README.md: throughout: MD012 Multiple
          consecutive blank lines

README.md: throughout: MD004 Unordered list style
Some nested lists used plusses, now everything consistently uses
dashes.
---
 README.md                   |  85 +++++++-------------
 css-in-javascript/README.md |   1 -
 linters/.markdownlint.json  | 154 ++++++++++++++++++++++++++++++++++++
 package.json                |   8 +-
 4 files changed, 190 insertions(+), 58 deletions(-)
 create mode 100644 linters/.markdownlint.json

diff --git a/README.md b/README.md
index 2a851fae40..00742a0855 100644
--- a/README.md
+++ b/README.md
@@ -7,11 +7,12 @@
 [![Gitter](https://badges.gitter.im/Join%20Chat.svg)](https://gitter.im/airbnb/javascript?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge)
 
 Other Style Guides
- - [ES5 (Deprecated)](https://github.com/airbnb/javascript/tree/es5-deprecated/es5)
- - [React](react/)
- - [CSS-in-JavaScript](css-in-javascript/)
- - [CSS & Sass](https://github.com/airbnb/css)
- - [Ruby](https://github.com/airbnb/ruby)
+
+  - [ES5 (Deprecated)](https://github.com/airbnb/javascript/tree/es5-deprecated/es5)
+  - [React](react/)
+  - [CSS-in-JavaScript](css-in-javascript/)
+  - [CSS & Sass](https://github.com/airbnb/css)
+  - [Ruby](https://github.com/airbnb/ruby)
 
 ## Table of Contents
 
@@ -58,11 +59,11 @@ Other Style Guides
   <a name="types--primitives"></a><a name="1.1"></a>
   - [1.1](#types--primitives) **Primitives**: When you access a primitive type you work directly on its value.
 
-    + `string`
-    + `number`
-    + `boolean`
-    + `null`
-    + `undefined`
+    - `string`
+    - `number`
+    - `boolean`
+    - `null`
+    - `undefined`
 
     ```javascript
     const foo = 1;
@@ -76,9 +77,9 @@ Other Style Guides
   <a name="types--complex"></a><a name="1.2"></a>
   - [1.2](#types--complex)  **Complex**: When you access a complex type you work on a reference to its value.
 
-    + `object`
-    + `array`
-    + `function`
+    - `object`
+    - `array`
+    - `function`
 
     ```javascript
     const foo = [1, 2];
@@ -524,7 +525,6 @@ Other Style Guides
     const { left, top } = processInput(input);
     ```
 
-
 **[⬆ back to top](#table-of-contents)**
 
 ## Strings
@@ -610,7 +610,6 @@ Other Style Guides
 
 **[⬆ back to top](#table-of-contents)**
 
-
 ## Functions
 
   <a name="functions--declarations"></a><a name="7.1"></a>
@@ -1016,7 +1015,6 @@ Other Style Guides
 
 **[⬆ back to top](#table-of-contents)**
 
-
 ## Classes & Constructors
 
   <a name="constructors--use-class"></a><a name="9.1"></a>
@@ -1035,7 +1033,6 @@ Other Style Guides
       return value;
     };
 
-
     // good
     class Queue {
       constructor(contents = []) {
@@ -1110,7 +1107,6 @@ Other Style Guides
       .setHeight(20);
     ```
 
-
   <a name="constructors--tostring"></a><a name="9.4"></a>
   - [9.4](#constructors--tostring) It's okay to write a custom toString() method, just make sure it works successfully and causes no side effects.
 
@@ -1182,10 +1178,8 @@ Other Style Guides
     }
     ```
 
-
 **[⬆ back to top](#table-of-contents)**
 
-
 ## Modules
 
   <a name="modules--use-them"></a><a name="10.1"></a>
@@ -1449,7 +1443,6 @@ Other Style Guides
 
 **[⬆ back to top](#table-of-contents)**
 
-
 ## Properties
 
   <a name="properties--dot"></a><a name="12.1"></a>
@@ -1486,7 +1479,6 @@ Other Style Guides
 
 **[⬆ back to top](#table-of-contents)**
 
-
 ## Variables
 
   <a name="variables--const"></a><a name="13.1"></a>
@@ -1656,7 +1648,6 @@ Other Style Guides
 
 **[⬆ back to top](#table-of-contents)**
 
-
 ## Hoisting
 
   <a name="hoisting--about"></a><a name="14.1"></a>
@@ -1756,7 +1747,6 @@ Other Style Guides
 
 **[⬆ back to top](#table-of-contents)**
 
-
 ## Comparison Operators & Equality
 
   <a name="comparison--eqeqeq"></a><a name="15.1"></a>
@@ -1765,12 +1755,12 @@ Other Style Guides
   <a name="comparison--if"></a><a name="15.2"></a>
   - [15.2](#comparison--if) Conditional statements such as the `if` statement evaluate their expression using coercion with the `ToBoolean` abstract method and always follow these simple rules:
 
-    + **Objects** evaluate to **true**
-    + **Undefined** evaluates to **false**
-    + **Null** evaluates to **false**
-    + **Booleans** evaluate to **the value of the boolean**
-    + **Numbers** evaluate to **false** if **+0, -0, or NaN**, otherwise **true**
-    + **Strings** evaluate to **false** if an empty string `''`, otherwise **true**
+    - **Objects** evaluate to **true**
+    - **Undefined** evaluates to **false**
+    - **Null** evaluates to **false**
+    - **Booleans** evaluate to **the value of the boolean**
+    - **Numbers** evaluate to **false** if **+0, -0, or NaN**, otherwise **true**
+    - **Strings** evaluate to **false** if an empty string `''`, otherwise **true**
 
     ```javascript
     if ([0] && []) {
@@ -1910,7 +1900,6 @@ Other Style Guides
 
 **[⬆ back to top](#table-of-contents)**
 
-
 ## Blocks
 
   <a name="blocks--braces"></a><a name="16.1"></a>
@@ -1960,10 +1949,8 @@ Other Style Guides
     }
     ```
 
-
 **[⬆ back to top](#table-of-contents)**
 
-
 ## Control Statements
 
   <a name="control-statements"></a>
@@ -2018,10 +2005,8 @@ Other Style Guides
     }
     ```
 
-
 **[⬆ back to top](#table-of-contents)**
 
-
 ## Comments
 
   <a name="comments--multiline"></a><a name="17.1"></a>
@@ -2162,7 +2147,6 @@ Other Style Guides
 
 **[⬆ back to top](#table-of-contents)**
 
-
 ## Whitespace
 
   <a name="whitespace--spaces"></a><a name="18.1"></a>
@@ -2624,7 +2608,6 @@ Other Style Guides
 
 **[⬆ back to top](#table-of-contents)**
 
-
 ## Semicolons
 
   <a name="semicolons--required"></a><a name="20.1"></a>
@@ -2654,7 +2637,6 @@ Other Style Guides
 
 **[⬆ back to top](#table-of-contents)**
 
-
 ## Type Casting & Coercion
 
   <a name="coercion--explicit"></a><a name="21.1"></a>
@@ -2741,7 +2723,6 @@ Other Style Guides
 
 **[⬆ back to top](#table-of-contents)**
 
-
 ## Naming Conventions
 
   <a name="naming--descriptive"></a><a name="22.1"></a>
@@ -2933,7 +2914,6 @@ Other Style Guides
 
 **[⬆ back to top](#table-of-contents)**
 
-
 ## Accessors
 
   <a name="accessors--not-required"></a><a name="23.1"></a>
@@ -3003,7 +2983,6 @@ Other Style Guides
 
 **[⬆ back to top](#table-of-contents)**
 
-
 ## Events
 
   <a name="events--hash"></a><a name="24.1"></a>
@@ -3035,7 +3014,6 @@ Other Style Guides
 
   **[⬆ back to top](#table-of-contents)**
 
-
 ## jQuery
 
   <a name="jquery--dollar-prefix"></a><a name="25.1"></a>
@@ -3105,7 +3083,6 @@ Other Style Guides
 
 **[⬆ back to top](#table-of-contents)**
 
-
 ## ECMAScript 5 Compatibility
 
   <a name="es5-compat--kangax"></a><a name="26.1"></a>
@@ -3153,16 +3130,15 @@ Other Style Guides
 
   <a name="testing--for-real"></a><a name="28.2"></a>
   - [29.2](#testing--for-real) **No, but seriously**:
-   - Whichever testing framework you use, you should be writing tests!
-   - Strive to write many small pure functions, and minimize where mutations occur.
-   - Be cautious about stubs and mocks - they can make your tests more brittle.
-   - We primarily use [`mocha`](https://www.npmjs.com/package/mocha) at Airbnb. [`tape`](https://www.npmjs.com/package/tape) is also used occasionally for small, separate modules.
-   - 100% test coverage is a good goal to strive for, even if it's not always practical to reach it.
-   - Whenever you fix a bug, _write a regression test_. A bug fixed without a regression test is almost certainly going to break again in the future.
+    - Whichever testing framework you use, you should be writing tests!
+    - Strive to write many small pure functions, and minimize where mutations occur.
+    - Be cautious about stubs and mocks - they can make your tests more brittle.
+    - We primarily use [`mocha`](https://www.npmjs.com/package/mocha) at Airbnb. [`tape`](https://www.npmjs.com/package/tape) is also used occasionally for small, separate modules.
+    - 100% test coverage is a good goal to strive for, even if it's not always practical to reach it.
+    - Whenever you fix a bug, _write a regression test_. A bug fixed without a regression test is almost certainly going to break again in the future.
 
 **[⬆ back to top](#table-of-contents)**
 
-
 ## Performance
 
   - [On Layout & Web Performance](https://www.kellegous.com/j/2013/01/26/layout-performance/)
@@ -3177,7 +3153,6 @@ Other Style Guides
 
 **[⬆ back to top](#table-of-contents)**
 
-
 ## Resources
 
 **Learning ES6**
@@ -3194,9 +3169,9 @@ Other Style Guides
 **Tools**
 
   - Code Style Linters
-    + [ESlint](http://eslint.org/) - [Airbnb Style .eslintrc](https://github.com/airbnb/javascript/blob/master/linters/.eslintrc)
-    + [JSHint](http://jshint.com/) - [Airbnb Style .jshintrc](https://github.com/airbnb/javascript/blob/master/linters/.jshintrc)
-    + [JSCS](https://github.com/jscs-dev/node-jscs) - [Airbnb Style Preset](https://github.com/jscs-dev/node-jscs/blob/master/presets/airbnb.json) (Deprecated, please use [ESlint](https://github.com/airbnb/javascript/tree/master/packages/eslint-config-airbnb-base))
+    - [ESlint](http://eslint.org/) - [Airbnb Style .eslintrc](https://github.com/airbnb/javascript/blob/master/linters/.eslintrc)
+    - [JSHint](http://jshint.com/) - [Airbnb Style .jshintrc](https://github.com/airbnb/javascript/blob/master/linters/.jshintrc)
+    - [JSCS](https://github.com/jscs-dev/node-jscs) - [Airbnb Style Preset](https://github.com/jscs-dev/node-jscs/blob/master/presets/airbnb.json) (Deprecated, please use [ESlint](https://github.com/airbnb/javascript/tree/master/packages/eslint-config-airbnb-base))
   - Neutrino preset - [neutrino-preset-airbnb-base](https://neutrino.js.org/presets/neutrino-preset-airbnb-base/)
 
 **Other Style Guides**
@@ -3257,7 +3232,6 @@ Other Style Guides
   - [JavaScript Air](https://javascriptair.com/)
   - [JavaScript Jabber](https://devchat.tv/js-jabber/)
 
-
 **[⬆ back to top](#table-of-contents)**
 
 ## In the Wild
@@ -3385,7 +3359,6 @@ Other Style Guides
 
   - [View Contributors](https://github.com/airbnb/javascript/graphs/contributors)
 
-
 ## License
 
 (The MIT License)
diff --git a/css-in-javascript/README.md b/css-in-javascript/README.md
index 9c53bc3e0e..13099410a9 100644
--- a/css-in-javascript/README.md
+++ b/css-in-javascript/README.md
@@ -176,7 +176,6 @@
 
     export default withStyles(() => styles)(MyComponent);
 
-
     // good
     function MyComponent({ styles }) {
       return (
diff --git a/linters/.markdownlint.json b/linters/.markdownlint.json
new file mode 100644
index 0000000000..e7a019fed8
--- /dev/null
+++ b/linters/.markdownlint.json
@@ -0,0 +1,154 @@
+{
+  "comment": "Be explicit by listing every available rule. https://github.com/DavidAnson/markdownlint/blob/master/doc/Rules.md",
+  "comment": "Note that there will be numeric gaps, not every MD number is implemented in markdownlint.",
+
+  "comment": "MD001: Header levels should only increment by one level at a time",
+  "header-increment": true,
+
+  "comment": "MD002: First header should be a top level header",
+  "first-header-h1": true,
+
+  "comment": "MD003: Header style: start with hashes",
+  "header-style": {
+    "style": "atx"
+  },
+
+  "comment": "MD004: Unordered list style",
+  "ul-style": {
+    "style": "dash"
+  },
+
+  "comment": "MD005: Consistent indentation for list items at the same level",
+  "list-indent": true,
+
+  "comment": "MD006: Consider starting bulleted lists at the beginning of the line",
+  "ul-start-left": false,
+
+  "comment": "MD007: Unordered list indentation: 2 spaces",
+  "ul-indent": {
+    "indent": 2
+  },
+
+  "comment": "MD009: Disallow trailing spaces",
+  "no-trailing-spaces": {
+    "br-spaces": 0,
+    "comment": "Empty lines inside list items should not be indented",
+    "list_item_empty_lines": false
+  },
+
+  "comment": "MD010: No hard tabs, not even in code blocks",
+  "no-hard-tabs": {
+    "code_blocks": true
+  },
+
+  "comment": "MD011: Prevent reversed link syntax",
+  "no-reversed-links": true,
+
+  "comment": "MD012: Disallow multiple consecutive blank lines",
+  "no-multiple-blanks": {
+    "maximum": 1
+   },
+
+  "comment": "MD013: Line length",
+  "line-length": false,
+
+  "comment": "MD014: Disallow dollar signs used before commands without showing output",
+  "commands-show-output": true,
+
+  "comment": "MD018: Disallow space after hash on atx style header",
+  "no-missing-space-atx": true,
+
+  "comment": "MD019: Dissalow multiple spaces after hash on atx style header",
+  "no-multiple-space-atx": true,
+
+  "comment": "MD020: No space inside hashes on closed atx style header",
+  "no-missing-space-closed-atx": true,
+
+  "comment": "MD021: Disallow multiple spaces inside hashes on closed atx style header",
+  "no-multiple-space-closed-atx": true,
+
+  "comment": "MD022: Headers should be surrounded by blank lines",
+  "comment": "Some headers have preceeding HTML anchors. Unfortunate that we have to disable this, as it otherwise catches a real problem that trips up some Markdown renderers",
+  "blanks-around-headers": false,
+
+  "comment": "MD023: Headers must start at the beginning of the line",
+  "header-start-left": true,
+
+  "comment": "MD024: Disallow multiple headers with the same content",
+  "no-duplicate-header": true,
+
+  "comment": "MD025: Disallow multiple top level headers in the same document",
+  "comment": "Gotta have a matching closing brace at the end",
+  "single-h1": false,
+
+  "comment": "MD026: Disallow trailing punctuation in header",
+  "comment": "Gotta have a semicolon after the ending closing brace",
+  "no-trailing-punctuation": {
+    "punctuation" : ".,:!?"
+  },
+  "comment": "MD027: Dissalow multiple spaces after blockquote symbol",
+  "no-multiple-space-blockquote": true,
+
+  "comment": "MD028: Blank line inside blockquote",
+  "comment": "Some 'Why?' and 'Why not?' blocks are separated by a blank line",
+  "no-blanks-blockquote": false,
+
+  "comment": "MD029: Ordered list item prefix",
+  "ol-prefix": {
+    "style": "one"
+  },
+
+  "comment": "MD030: Spaces after list markers",
+  "list-marker-space": {
+    "ul_single": 1,
+    "ol_single": 1,
+    "ul_multi": 1,
+    "ol_multi": 1
+  },
+
+  "comment": "MD031: Fenced code blocks should be surrounded by blank lines",
+  "blanks-around-fences": true,
+
+  "comment": "MD032: Lists should be surrounded by blank lines",
+  "comment": "Some lists have preceeding HTML anchors. Unfortunate that we have to disable this, as it otherwise catches a real problem that trips up some Markdown renderers",
+  "blanks-around-lists": false,
+
+  "comment": "MD033: Disallow inline HTML",
+  "comment": "HTML is needed for explicit anchors",
+  "no-inline-html": false,
+
+  "comment": "MD034: No bare URLs used",
+  "no-bare-urls": true,
+
+  "comment": "MD035: Horizontal rule style",
+  "hr-style": {
+    "style": "consistent"
+  },
+
+  "comment": "MD036: Do not use emphasis instead of a header",
+  "no-emphasis-as-header": false,
+
+  "comment": "MD037: Disallow spaces inside emphasis markers",
+  "no-space-in-emphasis": true,
+
+  "comment": "MD038: Disallow spaces inside code span elements",
+  "no-space-in-code": true,
+
+  "comment": "MD039: Disallow spaces inside link text",
+  "no-space-in-links": true,
+
+  "comment": "MD040: Fenced code blocks should have a language specified",
+  "fenced-code-language": true,
+
+  "comment": "MD041: First line in file should be a top level header",
+  "first-line-h1": true,
+
+  "comment": "MD042: No empty links",
+  "no-empty-links": true,
+
+  "comment": "MD043: Required header structure",
+  "required-headers": false,
+
+  "comment": "MD044: Proper names should have the correct capitalization",
+  "proper-names": false
+}
diff --git a/package.json b/package.json
index a977f26b3d..b50dd7a121 100644
--- a/package.json
+++ b/package.json
@@ -6,9 +6,12 @@
     "preinstall": "npm run install:config && npm run install:config:base",
     "install:config": "cd packages/eslint-config-airbnb && npm prune && npm install",
     "install:config:base": "cd packages/eslint-config-airbnb-base && npm prune && npm install",
+    "lint": "markdownlint --config linters/.markdownlint.json README.md */README.md",
+    "pretest": "npm run --silent lint",
     "test": "npm run --silent test:config && npm run --silent test:config:base",
     "test:config": "cd packages/eslint-config-airbnb; npm test",
     "test:config:base": "cd packages/eslint-config-airbnb-base; npm test",
+    "pretravis": "npm run --silent lint",
     "travis": "npm run --silent travis:config && npm run --silent travis:config:base",
     "travis:config": "cd packages/eslint-config-airbnb; npm run travis",
     "travis:config:base": "cd packages/eslint-config-airbnb-base; npm run travis"
@@ -31,5 +34,8 @@
   "bugs": {
     "url": "https://github.com/airbnb/javascript/issues"
   },
-  "homepage": "https://github.com/airbnb/javascript"
+  "homepage": "https://github.com/airbnb/javascript",
+  "devDependencies": {
+    "markdownlint-cli": "^0.3.1"
+  }
 }

From 5ba31498feaec1c977008b62c2768f4ea5d498df Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Sat, 3 Jun 2017 23:37:10 -0700
Subject: [PATCH 1051/1591] Only apps should have lockfiles.

---
 .gitignore                                | 6 ++++++
 .npmrc                                    | 1 +
 packages/eslint-config-airbnb-base/.npmrc | 1 +
 packages/eslint-config-airbnb/.npmrc      | 1 +
 4 files changed, 9 insertions(+)
 create mode 100644 .npmrc
 create mode 120000 packages/eslint-config-airbnb-base/.npmrc
 create mode 120000 packages/eslint-config-airbnb/.npmrc

diff --git a/.gitignore b/.gitignore
index 3c3629e647..ac10dfe528 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1 +1,7 @@
+# gitignore
+
 node_modules
+
+# Only apps should have lockfiles
+yarn.lock
+package-lock.json
diff --git a/.npmrc b/.npmrc
new file mode 100644
index 0000000000..43c97e719a
--- /dev/null
+++ b/.npmrc
@@ -0,0 +1 @@
+package-lock=false
diff --git a/packages/eslint-config-airbnb-base/.npmrc b/packages/eslint-config-airbnb-base/.npmrc
new file mode 120000
index 0000000000..cba44bb384
--- /dev/null
+++ b/packages/eslint-config-airbnb-base/.npmrc
@@ -0,0 +1 @@
+../../.npmrc
\ No newline at end of file
diff --git a/packages/eslint-config-airbnb/.npmrc b/packages/eslint-config-airbnb/.npmrc
new file mode 120000
index 0000000000..cba44bb384
--- /dev/null
+++ b/packages/eslint-config-airbnb/.npmrc
@@ -0,0 +1 @@
+../../.npmrc
\ No newline at end of file

From 1a38734d63a3624887de6c5ffa5602b4da9d3db4 Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Sat, 3 Jun 2017 23:38:22 -0700
Subject: [PATCH 1052/1591] [Tests] npm v4.6+ breaks in node < v1; npm 5+
 breaks in node < v4

---
 .travis.yml | 6 ++++--
 1 file changed, 4 insertions(+), 2 deletions(-)

diff --git a/.travis.yml b/.travis.yml
index f492123d64..ba1b67ece5 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -9,8 +9,10 @@ env:
   - 'TEST_DIR=packages/eslint-config-airbnb-base'
 before_install:
   - 'cd $TEST_DIR'
-  - 'if [ "${TRAVIS_NODE_VERSION}" != "0.9" ]; then case "$(npm --version)" in 1.*) npm install -g npm@1.4.28 ;; 2.*) npm install -g npm@2 ;; esac ; fi'
-  - 'if [ "${TRAVIS_NODE_VERSION}" != "0.6" ] && [ "${TRAVIS_NODE_VERSION}" != "0.9" ]; then npm install -g npm; fi'
+  - 'if [ "${TRAVIS_NODE_VERSION}" = "0.6" ]; then npm install -g npm@1.3 ; elif [ "${TRAVIS_NODE_VERSION}" != "0.9" ]; then case "$(npm --version)" in 1.*) npm install -g npm@1.4.28 ;; 2.*) npm install -g npm@2 ;; esac ; fi'
+  - 'if [ "${TRAVIS_NODE_VERSION%${TRAVIS_NODE_VERSION#[0-9]}}" = "0" ] || [ "${TRAVIS_NODE_VERSION:0:4}" = "iojs" ]; then npm install -g npm@4.5 ; elif [ "${TRAVIS_NODE_VERSION}" != "0.6" ] && [ "${TRAVIS_NODE_VERSION}" != "0.9" ]; then npm install -g npm; fi'
+install:
+  - 'if [ "${TRAVIS_NODE_VERSION}" = "0.6" ]; then nvm install 0.8 && npm install -g npm@1.3 && npm install -g npm@1.4.28 && npm install -g npm@2 && npm install && nvm use "${TRAVIS_NODE_VERSION}"; else npm install; fi;'
 script:
   - 'npm run travis'
 sudo: false

From 721af5498fade08b3a5fe9e613aa6e33baa51e37 Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Sat, 3 Jun 2017 23:39:24 -0700
Subject: [PATCH 1053/1591] [Tests] on `node` `v8`

---
 .travis.yml | 4 ++++
 1 file changed, 4 insertions(+)

diff --git a/.travis.yml b/.travis.yml
index ba1b67ece5..d28e6fd12e 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -1,5 +1,6 @@
 language: node_js
 node_js:
+  - "8"
   - "7"
   - "6"
   - "5"
@@ -18,3 +19,6 @@ script:
 sudo: false
 matrix:
   fast_finish: true
+  allow_failures:
+    - node_js: "7"
+    - node_js: "5"

From 00c9e52aec17b9a44fbf03494a931346e8f090de Mon Sep 17 00:00:00 2001
From: Radu Serbanescu <radu.serbanescu@webdesignhome.ro>
Date: Wed, 7 Jun 2017 13:18:38 +0300
Subject: [PATCH 1054/1591] [eslint config] [base] [minor] Balanced spacing for
 inline block comments

Fixes #1425.
---
 packages/eslint-config-airbnb-base/rules/style.js | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/packages/eslint-config-airbnb-base/rules/style.js b/packages/eslint-config-airbnb-base/rules/style.js
index 237f16899d..c617e57fd3 100644
--- a/packages/eslint-config-airbnb-base/rules/style.js
+++ b/packages/eslint-config-airbnb-base/rules/style.js
@@ -395,7 +395,7 @@ module.exports = {
       block: {
         exceptions: ['-', '+'],
         markers: ['=', '!'], // space here to support sprockets directives
-        balanced: false,
+        balanced: true,
       }
     }],
 

From 1bbac742862720fd6905712ccf87cae45f327307 Mon Sep 17 00:00:00 2001
From: Gustavo Isensee <gustavo.isensee@gmail.com>
Date: Tue, 13 Jun 2017 00:59:43 -0300
Subject: [PATCH 1055/1591] Updated "how to define propTypes..."

Imported from new prop-types module.
---
 react/README.md | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/react/README.md b/react/README.md
index 16bf2420ac..b86f743f23 100644
--- a/react/README.md
+++ b/react/README.md
@@ -557,7 +557,8 @@
   - How to define `propTypes`, `defaultProps`, `contextTypes`, etc...
 
     ```jsx
-    import React, { PropTypes } from 'react';
+    import React from 'react';
+    import PropTypes from 'prop-types';
 
     const propTypes = {
       id: PropTypes.number.isRequired,

From fd8cbec8e0b312dcf31a579fe3b1e7098ae0bfe7 Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Tue, 13 Jun 2017 01:06:34 -0700
Subject: [PATCH 1056/1591] [guide] change straight quotes to curly quotes

---
 README.md | 38 +++++++++++++++++++-------------------
 1 file changed, 19 insertions(+), 19 deletions(-)

diff --git a/README.md b/README.md
index 00742a0855..69a7b9982f 100644
--- a/README.md
+++ b/README.md
@@ -227,7 +227,7 @@ Other Style Guides
   <a name="objects--grouped-shorthand"></a><a name="3.7"></a>
   - [3.5](#objects--grouped-shorthand) Group your shorthand properties at the beginning of your object declaration.
 
-    > Why? It's easier to tell which properties are using the shorthand.
+    > Why? It’s easier to tell which properties are using the shorthand.
 
     ```javascript
     const anakinSkywalker = 'Anakin Skywalker';
@@ -369,7 +369,7 @@ Other Style Guides
     ```
 
   <a name="arrays--callback-return"></a><a name="4.5"></a>
-  - [4.5](#arrays--callback-return) Use return statements in array method callbacks. It's ok to omit the return if the function body consists of a single statement following [8.2](#arrows--implicit-return). eslint: [`array-callback-return`](http://eslint.org/docs/rules/array-callback-return)
+  - [4.5](#arrays--callback-return) Use return statements in array method callbacks. It’s ok to omit the return if the function body consists of a single statement following [8.2](#arrows--implicit-return). eslint: [`array-callback-return`](http://eslint.org/docs/rules/array-callback-return)
 
     ```javascript
     // good
@@ -615,7 +615,7 @@ Other Style Guides
   <a name="functions--declarations"></a><a name="7.1"></a>
   - [7.1](#functions--declarations) Use named function expressions instead of function declarations. eslint: [`func-style`](http://eslint.org/docs/rules/func-style) jscs: [`disallowFunctionDeclarations`](http://jscs.info/rule/disallowFunctionDeclarations)
 
-    > Why? Function declarations are hoisted, which means that it’s easy - too easy - to reference the function before it is defined in the file. This harms readability and maintainability. If you find that a function’s definition is large or complex enough that it is interfering with understanding the rest of the file, then perhaps it’s time to extract it to its own module! Don’t forget to name the expression - anonymous functions can make it harder to locate the problem in an Error's call stack. ([Discussion](https://github.com/airbnb/javascript/issues/794))
+    > Why? Function declarations are hoisted, which means that it’s easy - too easy - to reference the function before it is defined in the file. This harms readability and maintainability. If you find that a function’s definition is large or complex enough that it is interfering with understanding the rest of the file, then perhaps it’s time to extract it to its own module! Don’t forget to name the expression - anonymous functions can make it harder to locate the problem in an Error’s call stack. ([Discussion](https://github.com/airbnb/javascript/issues/794))
 
     ```javascript
     // bad
@@ -650,7 +650,7 @@ Other Style Guides
   - [7.3](#functions--in-blocks) Never declare a function in a non-function block (`if`, `while`, etc). Assign the function to a variable instead. Browsers will allow you to do it, but they all interpret it differently, which is bad news bears. eslint: [`no-loop-func`](http://eslint.org/docs/rules/no-loop-func.html)
 
   <a name="functions--note-on-blocks"></a><a name="7.4"></a>
-  - [7.4](#functions--note-on-blocks) **Note:** ECMA-262 defines a `block` as a list of statements. A function declaration is not a statement. [Read ECMA-262's note on this issue](http://www.ecma-international.org/publications/files/ECMA-ST/Ecma-262.pdf#page=97).
+  - [7.4](#functions--note-on-blocks) **Note:** ECMA-262 defines a `block` as a list of statements. A function declaration is not a statement. [Read ECMA-262’s note on this issue](http://www.ecma-international.org/publications/files/ECMA-ST/Ecma-262.pdf#page=97).
 
     ```javascript
     // bad
@@ -838,7 +838,7 @@ Other Style Guides
   <a name="functions--spread-vs-apply"></a><a name="7.14"></a>
   - [7.14](#functions--spread-vs-apply) Prefer the use of the spread operator `...` to call variadic functions. eslint: [`prefer-spread`](http://eslint.org/docs/rules/prefer-spread)
 
-    > Why? It's cleaner, you don't need to supply a context, and you can not easily compose `new` with `apply`.
+    > Why? It’s cleaner, you don't need to supply a context, and you can not easily compose `new` with `apply`.
 
     ```javascript
     // bad
@@ -964,7 +964,7 @@ Other Style Guides
     ```
 
   <a name="arrows--one-arg-parens"></a><a name="8.4"></a>
-  - [8.4](#arrows--one-arg-parens) If your function takes a single argument and doesn’t use braces, omit the parentheses. Otherwise, always include parentheses around arguments for clarity and consistency. Note: it is also acceptable to always use parentheses, in which case use the ["always" option](http://eslint.org/docs/rules/arrow-parens#always) for eslint or do not include [`disallowParenthesesAroundArrowParam`](http://jscs.info/rule/disallowParenthesesAroundArrowParam) for jscs. eslint: [`arrow-parens`](http://eslint.org/docs/rules/arrow-parens.html) jscs:  [`disallowParenthesesAroundArrowParam`](http://jscs.info/rule/disallowParenthesesAroundArrowParam)
+  - [8.4](#arrows--one-arg-parens) If your function takes a single argument and doesn’t use braces, omit the parentheses. Otherwise, always include parentheses around arguments for clarity and consistency. Note: it is also acceptable to always use parentheses, in which case use the [“always” option](http://eslint.org/docs/rules/arrow-parens#always) for eslint or do not include [`disallowParenthesesAroundArrowParam`](http://jscs.info/rule/disallowParenthesesAroundArrowParam) for jscs. eslint: [`arrow-parens`](http://eslint.org/docs/rules/arrow-parens.html) jscs:  [`disallowParenthesesAroundArrowParam`](http://jscs.info/rule/disallowParenthesesAroundArrowParam)
 
     > Why? Less visual clutter.
 
@@ -1108,7 +1108,7 @@ Other Style Guides
     ```
 
   <a name="constructors--tostring"></a><a name="9.4"></a>
-  - [9.4](#constructors--tostring) It's okay to write a custom toString() method, just make sure it works successfully and causes no side effects.
+  - [9.4](#constructors--tostring) It’s okay to write a custom toString() method, just make sure it works successfully and causes no side effects.
 
     ```javascript
     class Jedi {
@@ -1185,7 +1185,7 @@ Other Style Guides
   <a name="modules--use-them"></a><a name="10.1"></a>
   - [10.1](#modules--use-them) Always use modules (`import`/`export`) over a non-standard module system. You can always transpile to your preferred module system.
 
-    > Why? Modules are the future, let's start using the future now.
+    > Why? Modules are the future, let’s start using the future now.
 
     ```javascript
     // bad
@@ -1336,7 +1336,7 @@ Other Style Guides
 ## Iterators and Generators
 
   <a name="iterators--nope"></a><a name="11.1"></a>
-  - [11.1](#iterators--nope) Don't use iterators. Prefer JavaScript's higher-order functions instead of loops like `for-in` or `for-of`. eslint: [`no-iterator`](http://eslint.org/docs/rules/no-iterator.html) [`no-restricted-syntax`](http://eslint.org/docs/rules/no-restricted-syntax)
+  - [11.1](#iterators--nope) Don't use iterators. Prefer JavaScript’s higher-order functions instead of loops like `for-in` or `for-of`. eslint: [`no-iterator`](http://eslint.org/docs/rules/no-iterator.html) [`no-restricted-syntax`](http://eslint.org/docs/rules/no-restricted-syntax)
 
     > Why? This enforces our immutable rule. Dealing with pure functions that return values is easier to reason about than side effects.
 
@@ -1495,7 +1495,7 @@ Other Style Guides
   <a name="variables--one-const"></a><a name="13.2"></a>
   - [13.2](#variables--one-const) Use one `const` or `let` declaration per variable. eslint: [`one-var`](http://eslint.org/docs/rules/one-var.html) jscs: [`disallowMultipleVarDecl`](http://jscs.info/rule/disallowMultipleVarDecl)
 
-    > Why? It's easier to add new variable declarations this way, and you never have to worry about swapping out a `;` for a `,` or introducing punctuation-only diffs. You can also step through each declaration with the debugger, instead of jumping through all of them at once.
+    > Why? It’s easier to add new variable declarations this way, and you never have to worry about swapping out a `;` for a `,` or introducing punctuation-only diffs. You can also step through each declaration with the debugger, instead of jumping through all of them at once.
 
     ```javascript
     // bad
@@ -1651,7 +1651,7 @@ Other Style Guides
 ## Hoisting
 
   <a name="hoisting--about"></a><a name="14.1"></a>
-  - [14.1](#hoisting--about) `var` declarations get hoisted to the top of their scope, their assignment does not. `const` and `let` declarations are blessed with a new concept called [Temporal Dead Zones (TDZ)](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/let#Temporal_dead_zone_and_errors_with_let). It's important to know why [typeof is no longer safe](http://es-discourse.com/t/why-typeof-is-no-longer-safe/15).
+  - [14.1](#hoisting--about) `var` declarations get hoisted to the top of their scope, their assignment does not. `const` and `let` declarations are blessed with a new concept called [Temporal Dead Zones (TDZ)](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/let#Temporal_dead_zone_and_errors_with_let). It’s important to know why [typeof is no longer safe](http://es-discourse.com/t/why-typeof-is-no-longer-safe/15).
 
     ```javascript
     // we know this wouldn't work (assuming there
@@ -1928,7 +1928,7 @@ Other Style Guides
     ```
 
   <a name="blocks--cuddled-elses"></a><a name="16.2"></a>
-  - [16.2](#blocks--cuddled-elses) If you're using multi-line blocks with `if` and `else`, put `else` on the same line as your `if` block's closing brace. eslint: [`brace-style`](http://eslint.org/docs/rules/brace-style.html) jscs:  [`disallowNewlineBeforeBlockStatements`](http://jscs.info/rule/disallowNewlineBeforeBlockStatements)
+  - [16.2](#blocks--cuddled-elses) If you're using multi-line blocks with `if` and `else`, put `else` on the same line as your `if` block’s closing brace. eslint: [`brace-style`](http://eslint.org/docs/rules/brace-style.html) jscs:  [`disallowNewlineBeforeBlockStatements`](http://jscs.info/rule/disallowNewlineBeforeBlockStatements)
 
     ```javascript
     // bad
@@ -1954,7 +1954,7 @@ Other Style Guides
 ## Control Statements
 
   <a name="control-statements"></a>
-  - [17.1](#control-statements) In case your control statement (`if`, `while` etc.) gets too long or exceeds the maximum line length, each (grouped) condition could be put into a new line. It's up to you whether the logical operator should begin or end the line.
+  - [17.1](#control-statements) In case your control statement (`if`, `while` etc.) gets too long or exceeds the maximum line length, each (grouped) condition could be put into a new line. It’s up to you whether the logical operator should begin or end the line.
 
     ```javascript
     // bad
@@ -2040,7 +2040,7 @@ Other Style Guides
     ```
 
   <a name="comments--singleline"></a><a name="17.2"></a>
-  - [18.2](#comments--singleline) Use `//` for single line comments. Place single line comments on a newline above the subject of the comment. Put an empty line before the comment unless it's on the first line of a block.
+  - [18.2](#comments--singleline) Use `//` for single line comments. Place single line comments on a newline above the subject of the comment. Put an empty line before the comment unless it’s on the first line of a block.
 
     ```javascript
     // bad
@@ -2859,7 +2859,7 @@ Other Style Guides
     ```
 
   <a name="naming--camelCase-default-export"></a><a name="22.7"></a>
-  - [23.7](#naming--camelCase-default-export) Use camelCase when you export-default a function. Your filename should be identical to your function's name.
+  - [23.7](#naming--camelCase-default-export) Use camelCase when you export-default a function. Your filename should be identical to your function’s name.
 
     ```javascript
     function makeStyleGuide() {
@@ -2962,7 +2962,7 @@ Other Style Guides
     ```
 
   <a name="accessors--consistent"></a><a name="23.4"></a>
-  - [24.4](#accessors--consistent) It's okay to create get() and set() functions, but be consistent.
+  - [24.4](#accessors--consistent) It’s okay to create get() and set() functions, but be consistent.
 
     ```javascript
     class Jedi {
@@ -3086,7 +3086,7 @@ Other Style Guides
 ## ECMAScript 5 Compatibility
 
   <a name="es5-compat--kangax"></a><a name="26.1"></a>
-  - [27.1](#es5-compat--kangax) Refer to [Kangax](https://twitter.com/kangax/)'s ES5 [compatibility table](https://kangax.github.io/es5-compat-table/).
+  - [27.1](#es5-compat--kangax) Refer to [Kangax](https://twitter.com/kangax/)’s ES5 [compatibility table](https://kangax.github.io/es5-compat-table/).
 
 **[⬆ back to top](#table-of-contents)**
 
@@ -3134,7 +3134,7 @@ Other Style Guides
     - Strive to write many small pure functions, and minimize where mutations occur.
     - Be cautious about stubs and mocks - they can make your tests more brittle.
     - We primarily use [`mocha`](https://www.npmjs.com/package/mocha) at Airbnb. [`tape`](https://www.npmjs.com/package/tape) is also used occasionally for small, separate modules.
-    - 100% test coverage is a good goal to strive for, even if it's not always practical to reach it.
+    - 100% test coverage is a good goal to strive for, even if it’s not always practical to reach it.
     - Whenever you fix a bug, _write a regression test_. A bug fixed without a regression test is almost certainly going to break again in the future.
 
 **[⬆ back to top](#table-of-contents)**
@@ -3388,6 +3388,6 @@ SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 
 ## Amendments
 
-We encourage you to fork this guide and change the rules to fit your team's style guide. Below, you may list some amendments to the style guide. This allows you to periodically update your style guide without having to deal with merge conflicts.
+We encourage you to fork this guide and change the rules to fit your team’s style guide. Below, you may list some amendments to the style guide. This allows you to periodically update your style guide without having to deal with merge conflicts.
 
 # };

From c43fc749c4213e4574a4b4a3d0fe8784d5cd5b5e Mon Sep 17 00:00:00 2001
From: Fernando Pasik <fernando@pasik.com.ar>
Date: Tue, 13 Jun 2017 22:06:55 +0100
Subject: [PATCH 1057/1591] [eslint config] [docs] Remove TODO in
 prefer-reflect as it's deprecated

---
 packages/eslint-config-airbnb-base/rules/es6.js | 1 -
 1 file changed, 1 deletion(-)

diff --git a/packages/eslint-config-airbnb-base/rules/es6.js b/packages/eslint-config-airbnb-base/rules/es6.js
index 8b7ac24d14..14d777e640 100644
--- a/packages/eslint-config-airbnb-base/rules/es6.js
+++ b/packages/eslint-config-airbnb-base/rules/es6.js
@@ -124,7 +124,6 @@ module.exports = {
 
     // suggest using Reflect methods where applicable
     // http://eslint.org/docs/rules/prefer-reflect
-    // TODO: enable?
     'prefer-reflect': 'off',
 
     // use rest parameters instead of arguments

From 4499ee0094239c1e02506ee30c2a3945aa032591 Mon Sep 17 00:00:00 2001
From: Felipe Vargas <git@fvgs.ai>
Date: Mon, 12 Jun 2017 15:41:11 -0700
Subject: [PATCH 1058/1591] [guide] No arrow function implicit return with side
 effects

---
 README.md | 30 ++++++++++++++++++++++++++----
 1 file changed, 26 insertions(+), 4 deletions(-)

diff --git a/README.md b/README.md
index 69a7b9982f..8ff1a8f2ce 100644
--- a/README.md
+++ b/README.md
@@ -369,7 +369,7 @@ Other Style Guides
     ```
 
   <a name="arrays--callback-return"></a><a name="4.5"></a>
-  - [4.5](#arrays--callback-return) Use return statements in array method callbacks. It’s ok to omit the return if the function body consists of a single statement following [8.2](#arrows--implicit-return). eslint: [`array-callback-return`](http://eslint.org/docs/rules/array-callback-return)
+  - [4.5](#arrays--callback-return) Use return statements in array method callbacks. It’s ok to omit the return if the function body consists of a single statement returning an expression without side effects, following [8.2](#arrows--implicit-return). eslint: [`array-callback-return`](http://eslint.org/docs/rules/array-callback-return)
 
     ```javascript
     // good
@@ -915,7 +915,7 @@ Other Style Guides
     ```
 
   <a name="arrows--implicit-return"></a><a name="8.2"></a>
-  - [8.2](#arrows--implicit-return) If the function body consists of a single expression, omit the braces and use the implicit return. Otherwise, keep the braces and use a `return` statement. eslint: [`arrow-parens`](http://eslint.org/docs/rules/arrow-parens.html), [`arrow-body-style`](http://eslint.org/docs/rules/arrow-body-style.html) jscs:  [`disallowParenthesesAroundArrowParam`](http://jscs.info/rule/disallowParenthesesAroundArrowParam), [`requireShorthandArrowFunctions`](http://jscs.info/rule/requireShorthandArrowFunctions)
+  - [8.2](#arrows--implicit-return) If the function body consists of a single statement returning an [expression](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Expressions_and_Operators#Expressions) without side effects, omit the braces and use the implicit return. Otherwise, keep the braces and use a `return` statement. eslint: [`arrow-parens`](http://eslint.org/docs/rules/arrow-parens.html), [`arrow-body-style`](http://eslint.org/docs/rules/arrow-body-style.html) jscs:  [`disallowParenthesesAroundArrowParam`](http://jscs.info/rule/disallowParenthesesAroundArrowParam), [`requireShorthandArrowFunctions`](http://jscs.info/rule/requireShorthandArrowFunctions)
 
     > Why? Syntactic sugar. It reads well when multiple functions are chained together.
 
@@ -939,6 +939,24 @@ Other Style Guides
     [1, 2, 3].map((number, index) => ({
       [index]: number,
     }));
+
+    // No implicit return with side effects
+    function foo(callback) {
+      const val = callback();
+      if (val === true) {
+        // Do something if callback returns true
+      }
+    }
+
+    let bool = false;
+
+    // bad
+    foo(() => bool = true);
+
+    // good
+    foo(() => {
+      bool = true;
+    }
     ```
 
   <a name="arrows--paren-wrap"></a><a name="8.3"></a>
@@ -1354,7 +1372,9 @@ Other Style Guides
 
     // good
     let sum = 0;
-    numbers.forEach(num => sum += num);
+    numbers.forEach((num) => {
+      sum += num;
+    );
     sum === 15;
 
     // best (use the functional force)
@@ -1369,7 +1389,9 @@ Other Style Guides
 
     // good
     const increasedByOne = [];
-    numbers.forEach(num => increasedByOne.push(num + 1));
+    numbers.forEach((num) => {
+      increasedByOne.push(num + 1);
+    );
 
     // best (keeping it functional)
     const increasedByOne = numbers.map(num => num + 1);

From cd4ec6245ef0b3d3fcb9bbef89bf34ea0ec0c7fb Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Wed, 14 Jun 2017 12:09:46 -0700
Subject: [PATCH 1059/1591] [guide] change more straight quotes to curly quotes

---
 README.md | 28 ++++++++++++++--------------
 1 file changed, 14 insertions(+), 14 deletions(-)

diff --git a/README.md b/README.md
index 8ff1a8f2ce..21e17fae7e 100644
--- a/README.md
+++ b/README.md
@@ -97,7 +97,7 @@ Other Style Guides
   <a name="references--prefer-const"></a><a name="2.1"></a>
   - [2.1](#references--prefer-const) Use `const` for all of your references; avoid using `var`. eslint: [`prefer-const`](http://eslint.org/docs/rules/prefer-const.html), [`no-const-assign`](http://eslint.org/docs/rules/no-const-assign.html)
 
-    > Why? This ensures that you can't reassign your references, which can lead to bugs and difficult to comprehend code.
+    > Why? This ensures that you can’t reassign your references, which can lead to bugs and difficult to comprehend code.
 
     ```javascript
     // bad
@@ -708,7 +708,7 @@ Other Style Guides
     ```javascript
     // really bad
     function handleThings(opts) {
-      // No! We shouldn't mutate function arguments.
+      // No! We shouldn’t mutate function arguments.
       // Double bad: if opts is falsy it'll be set to an object which may
       // be what you want but it can introduce subtle bugs.
       opts = opts || {};
@@ -838,7 +838,7 @@ Other Style Guides
   <a name="functions--spread-vs-apply"></a><a name="7.14"></a>
   - [7.14](#functions--spread-vs-apply) Prefer the use of the spread operator `...` to call variadic functions. eslint: [`prefer-spread`](http://eslint.org/docs/rules/prefer-spread)
 
-    > Why? It’s cleaner, you don't need to supply a context, and you can not easily compose `new` with `apply`.
+    > Why? It’s cleaner, you don’t need to supply a context, and you can not easily compose `new` with `apply`.
 
     ```javascript
     // bad
@@ -1354,7 +1354,7 @@ Other Style Guides
 ## Iterators and Generators
 
   <a name="iterators--nope"></a><a name="11.1"></a>
-  - [11.1](#iterators--nope) Don't use iterators. Prefer JavaScript’s higher-order functions instead of loops like `for-in` or `for-of`. eslint: [`no-iterator`](http://eslint.org/docs/rules/no-iterator.html) [`no-restricted-syntax`](http://eslint.org/docs/rules/no-restricted-syntax)
+  - [11.1](#iterators--nope) Don’t use iterators. Prefer JavaScript’s higher-order functions instead of loops like `for-in` or `for-of`. eslint: [`no-iterator`](http://eslint.org/docs/rules/no-iterator.html) [`no-restricted-syntax`](http://eslint.org/docs/rules/no-restricted-syntax)
 
     > Why? This enforces our immutable rule. Dealing with pure functions that return values is easier to reason about than side effects.
 
@@ -1398,9 +1398,9 @@ Other Style Guides
     ```
 
   <a name="generators--nope"></a><a name="11.2"></a>
-  - [11.2](#generators--nope) Don't use generators for now.
+  - [11.2](#generators--nope) Don’t use generators for now.
 
-    > Why? They don't transpile well to ES5.
+    > Why? They don’t transpile well to ES5.
 
   <a name="generators--spacing"></a>
   - [11.3](#generators--spacing) If you must use generators, or if you disregard [our advice](#generators--nope), make sure their function signature is spaced properly. eslint: [`generator-star-spacing`](http://eslint.org/docs/rules/generator-star-spacing)
@@ -1602,7 +1602,7 @@ Other Style Guides
     }
     ```
   <a name="variables--no-chain-assignment"></a><a name="13.5"></a>
-  - [13.5](#variables--no-chain-assignment) Don't chain variable assignments.
+  - [13.5](#variables--no-chain-assignment) Don’t chain variable assignments.
 
     > Why? Chaining variable assignments creates implicit global variables.
 
@@ -1676,7 +1676,7 @@ Other Style Guides
   - [14.1](#hoisting--about) `var` declarations get hoisted to the top of their scope, their assignment does not. `const` and `let` declarations are blessed with a new concept called [Temporal Dead Zones (TDZ)](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/let#Temporal_dead_zone_and_errors_with_let). It’s important to know why [typeof is no longer safe](http://es-discourse.com/t/why-typeof-is-no-longer-safe/15).
 
     ```javascript
-    // we know this wouldn't work (assuming there
+    // we know this wouldn’t work (assuming there
     // is no notDefined global variable)
     function example() {
       console.log(notDefined); // => throws a ReferenceError
@@ -2147,7 +2147,7 @@ Other Style Guides
       constructor() {
         super();
 
-        // FIXME: shouldn't use a global here
+        // FIXME: shouldn’t use a global here
         total = 0;
       }
     }
@@ -2535,7 +2535,7 @@ Other Style Guides
   <a name="commas--dangling"></a><a name="19.2"></a>
   - [20.2](#commas--dangling) Additional trailing comma: **Yup.** eslint: [`comma-dangle`](http://eslint.org/docs/rules/comma-dangle.html) jscs: [`requireTrailingComma`](http://jscs.info/rule/requireTrailingComma)
 
-    > Why? This leads to cleaner git diffs. Also, transpilers like Babel will remove the additional trailing comma in the transpiled code which means you don't have to worry about the [trailing comma problem](https://github.com/airbnb/javascript/blob/es5-deprecated/es5/README.md#commas) in legacy browsers.
+    > Why? This leads to cleaner git diffs. Also, transpilers like Babel will remove the additional trailing comma in the transpiled code which means you don’t have to worry about the [trailing comma problem](https://github.com/airbnb/javascript/blob/es5-deprecated/es5/README.md#commas) in legacy browsers.
 
     ```diff
     // bad - git diff without trailing comma
@@ -2674,7 +2674,7 @@ Other Style Guides
     const totalScore = this.reviewScore + ''; // invokes this.reviewScore.valueOf()
 
     // bad
-    const totalScore = this.reviewScore.toString(); // isn't guaranteed to return a string
+    const totalScore = this.reviewScore.toString(); // isn’t guaranteed to return a string
 
     // good
     const totalScore = String(this.reviewScore);
@@ -2804,7 +2804,7 @@ Other Style Guides
   <a name="naming--leading-underscore"></a><a name="22.4"></a>
   - [23.4](#naming--leading-underscore) Do not use trailing or leading underscores. eslint: [`no-underscore-dangle`](http://eslint.org/docs/rules/no-underscore-dangle.html) jscs: [`disallowDanglingUnderscores`](http://jscs.info/rule/disallowDanglingUnderscores)
 
-    > Why? JavaScript does not have the concept of privacy in terms of properties or methods. Although a leading underscore is a common convention to mean “private”, in fact, these properties are fully public, and as such, are part of your public API contract. This convention might lead developers to wrongly think that a change won't count as breaking, or that tests aren't needed. tl;dr: if you want something to be “private”, it must not be observably present.
+    > Why? JavaScript does not have the concept of privacy in terms of properties or methods. Although a leading underscore is a common convention to mean “private”, in fact, these properties are fully public, and as such, are part of your public API contract. This convention might lead developers to wrongly think that a change won’t count as breaking, or that tests aren’t needed. tl;dr: if you want something to be “private”, it must not be observably present.
 
     ```javascript
     // bad
@@ -2817,7 +2817,7 @@ Other Style Guides
     ```
 
   <a name="naming--self-this"></a><a name="22.5"></a>
-  - [23.5](#naming--self-this) Don't save references to `this`. Use arrow functions or [Function#bind](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/bind). jscs: [`disallowNodeTypes`](http://jscs.info/rule/disallowNodeTypes)
+  - [23.5](#naming--self-this) Don’t save references to `this`. Use arrow functions or [Function#bind](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/bind). jscs: [`disallowNodeTypes`](http://jscs.info/rule/disallowNodeTypes)
 
     ```javascript
     // bad
@@ -3234,7 +3234,7 @@ Other Style Guides
   - [Third Party JavaScript](https://www.manning.com/books/third-party-javascript) - Ben Vinegar and Anton Kovalyov
   - [Effective JavaScript: 68 Specific Ways to Harness the Power of JavaScript](http://amzn.com/0321812182) - David Herman
   - [Eloquent JavaScript](http://eloquentjavascript.net/) - Marijn Haverbeke
-  - [You Don't Know JS: ES6 & Beyond](http://shop.oreilly.com/product/0636920033769.do) - Kyle Simpson
+  - [You Don’t Know JS: ES6 & Beyond](http://shop.oreilly.com/product/0636920033769.do) - Kyle Simpson
 
 **Blogs**
 

From 7bb8c9f905b4bc34e57ef39002cbfb32818cd003 Mon Sep 17 00:00:00 2001
From: Ben Schroeder <btpschroeder@gmail.com>
Date: Wed, 14 Jun 2017 09:13:43 -0400
Subject: [PATCH 1060/1591] [guide] Fix iterator code example error

The first "good" example was missing a closing bracket (line 1377).
---
 README.md | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/README.md b/README.md
index 21e17fae7e..6a64de53af 100644
--- a/README.md
+++ b/README.md
@@ -1374,7 +1374,7 @@ Other Style Guides
     let sum = 0;
     numbers.forEach((num) => {
       sum += num;
-    );
+    });
     sum === 15;
 
     // best (use the functional force)

From 0c9e22e039d7a1ad8a522768991db2ad431d3d69 Mon Sep 17 00:00:00 2001
From: Rahul Gandhi <rahulgandhi38@gmail.com>
Date: Sat, 17 Jun 2017 18:18:40 +0530
Subject: [PATCH 1061/1591] [guide] replacing undefined with ReferenceError

Fixes #1457
---
 README.md | 8 ++++----
 1 file changed, 4 insertions(+), 4 deletions(-)

diff --git a/README.md b/README.md
index 6a64de53af..06347f5708 100644
--- a/README.md
+++ b/README.md
@@ -1616,7 +1616,7 @@ Other Style Guides
       let a = b = c = 1;
     }());
 
-    console.log(a); // undefined
+    console.log(a); // throws ReferenceError
     console.log(b); // 1
     console.log(c); // 1
 
@@ -1627,9 +1627,9 @@ Other Style Guides
       let c = a;
     }());
 
-    console.log(a); // undefined
-    console.log(b); // undefined
-    console.log(c); // undefined
+    console.log(a); // throws ReferenceError
+    console.log(b); // throws ReferenceError
+    console.log(c); // throws ReferenceError
 
     // the same applies for `const`
     ```

From 3a9e1c830f9141207322254fc83ec3efae7b790b Mon Sep 17 00:00:00 2001
From: elmehri <elmehri@trusttic.com>
Date: Thu, 15 Jun 2017 16:52:48 +0100
Subject: [PATCH 1062/1591] [eslint config] [base] [patch] Support Protractor
 config files in import/no-extraneous-dependencies

---
 packages/eslint-config-airbnb-base/rules/imports.js | 1 +
 1 file changed, 1 insertion(+)

diff --git a/packages/eslint-config-airbnb-base/rules/imports.js b/packages/eslint-config-airbnb-base/rules/imports.js
index 3b6c6cef60..ab324b79ca 100644
--- a/packages/eslint-config-airbnb-base/rules/imports.js
+++ b/packages/eslint-config-airbnb-base/rules/imports.js
@@ -83,6 +83,7 @@ module.exports = {
         '**/gulpfile.js', // gulp config
         '**/gulpfile.*.js', // gulp config
         '**/Gruntfile', // grunt config
+        '**/protractor.conf.*.js', // protractor config
       ],
       optionalDependencies: false,
     }],

From 57ff032b0740ba2a46af4bc40cf5638a3e62a365 Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Sun, 18 Jun 2017 09:27:33 -0700
Subject: [PATCH 1063/1591] [eslint config] [base] [minor] `no-return-assign`:
 strengthen linting against returning assignments.

---
 packages/eslint-config-airbnb-base/rules/best-practices.js | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/packages/eslint-config-airbnb-base/rules/best-practices.js b/packages/eslint-config-airbnb-base/rules/best-practices.js
index c9f729c75f..3d97bb6e55 100644
--- a/packages/eslint-config-airbnb-base/rules/best-practices.js
+++ b/packages/eslint-config-airbnb-base/rules/best-practices.js
@@ -205,7 +205,7 @@ module.exports = {
     }],
 
     // disallow use of assignment in return statement
-    'no-return-assign': 'error',
+    'no-return-assign': ['error', 'always'],
 
     // disallow redundant `return await`
     'no-return-await': 'error',

From 4380284b05337f6e48798ff4fd76ab606d5adf94 Mon Sep 17 00:00:00 2001
From: Jason Ellis <jason.c.ellis@gmail.com>
Date: Tue, 20 Jun 2017 09:37:19 -0500
Subject: [PATCH 1064/1591] [guide] Add missing close parenthesis and semicolon
 to section 8.2

---
 README.md | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/README.md b/README.md
index 06347f5708..e59dc9b940 100644
--- a/README.md
+++ b/README.md
@@ -956,7 +956,7 @@ Other Style Guides
     // good
     foo(() => {
       bool = true;
-    }
+    });
     ```
 
   <a name="arrows--paren-wrap"></a><a name="8.3"></a>

From cd720b4c7bededa4edda232e9e9e6b5e3b5a438d Mon Sep 17 00:00:00 2001
From: Dan Dascalescu <ddascalescu+github@gmail.com>
Date: Thu, 22 Jun 2017 09:19:08 -0700
Subject: [PATCH 1065/1591] [eslint config] [*] [docs] add yarn instructions

Fixes #1462.
---
 packages/eslint-config-airbnb-base/README.md | 8 +++++---
 packages/eslint-config-airbnb/README.md      | 4 +++-
 2 files changed, 8 insertions(+), 4 deletions(-)

diff --git a/packages/eslint-config-airbnb-base/README.md b/packages/eslint-config-airbnb-base/README.md
index e27f3f3431..968cec06cd 100644
--- a/packages/eslint-config-airbnb-base/README.md
+++ b/packages/eslint-config-airbnb-base/README.md
@@ -2,7 +2,7 @@
 
 [![npm version](https://badge.fury.io/js/eslint-config-airbnb-base.svg)](http://badge.fury.io/js/eslint-config-airbnb-base)
 
-This package provides Airbnb's base JS .eslintrc as an extensible shared config.
+This package provides Airbnb's base JS .eslintrc (without React plugins) as an extensible shared config.
 
 ## Usage
 
@@ -12,13 +12,15 @@ We export two ESLint configurations for your usage.
 
 Our default export contains all of our ESLint rules, including ECMAScript 6+. It requires `eslint` and `eslint-plugin-import`.
 
+If you use yarn, run `yarn add --dev eslint-config-airbnb-base eslint-plugin-import`, or see below for npm instructions.
+
 1. Install the correct versions of each package, which are listed by the command:
 
   ```sh
   npm info "eslint-config-airbnb-base@latest" peerDependencies
   ```
 
-  Linux/OSX users can simply run
+  Linux/OSX users can run
   ```sh
   (
     export PKG=eslint-config-airbnb-base;
@@ -45,7 +47,7 @@ Our default export contains all of our ESLint rules, including ECMAScript 6+. It
   npm install --save-dev eslint-config-airbnb-base eslint@^#.#.# eslint-plugin-import@^#.#.#
   ```
 
-2. Add `"extends": "airbnb-base"` to your .eslintrc
+2. Add `"extends": "airbnb-base"` to your .eslintrc.
 
 ### eslint-config-airbnb-base/legacy
 
diff --git a/packages/eslint-config-airbnb/README.md b/packages/eslint-config-airbnb/README.md
index 173e5c324c..7996b4ac56 100644
--- a/packages/eslint-config-airbnb/README.md
+++ b/packages/eslint-config-airbnb/README.md
@@ -10,7 +10,9 @@ We export three ESLint configurations for your usage.
 
 ### eslint-config-airbnb
 
-Our default export contains all of our ESLint rules, including ECMAScript 6+ and React. It requires `eslint`, `eslint-plugin-import`, `eslint-plugin-react`, and `eslint-plugin-jsx-a11y`.
+Our default export contains all of our ESLint rules, including ECMAScript 6+ and React. It requires `eslint`, `eslint-plugin-import`, `eslint-plugin-react`, and `eslint-plugin-jsx-a11y`. If you don't need React, see [eslint-config-airbnb-base](https://npmjs.com/eslint-config-airbnb-base).
+
+If you use yarn, run `yarn add --dev eslint-config-airbnb-base eslint-plugin-import eslint-plugin-react eslint-plugin-jsx-a11`, and see below for npm instructions.
 
 1. Install the correct versions of each package, which are listed by the command:
 

From 2666db559dc0ef41887a1138cff4f59b3879892a Mon Sep 17 00:00:00 2001
From: Dan Dascalescu <ddascalescu+github@gmail.com>
Date: Fri, 23 Jun 2017 22:16:35 -0700
Subject: [PATCH 1066/1591] Fix typo in a11y for yarn

---
 packages/eslint-config-airbnb/README.md | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/packages/eslint-config-airbnb/README.md b/packages/eslint-config-airbnb/README.md
index 7996b4ac56..a3a7c71340 100644
--- a/packages/eslint-config-airbnb/README.md
+++ b/packages/eslint-config-airbnb/README.md
@@ -12,7 +12,7 @@ We export three ESLint configurations for your usage.
 
 Our default export contains all of our ESLint rules, including ECMAScript 6+ and React. It requires `eslint`, `eslint-plugin-import`, `eslint-plugin-react`, and `eslint-plugin-jsx-a11y`. If you don't need React, see [eslint-config-airbnb-base](https://npmjs.com/eslint-config-airbnb-base).
 
-If you use yarn, run `yarn add --dev eslint-config-airbnb-base eslint-plugin-import eslint-plugin-react eslint-plugin-jsx-a11`, and see below for npm instructions.
+If you use yarn, run `yarn add --dev eslint-config-airbnb-base eslint-plugin-import eslint-plugin-react eslint-plugin-jsx-a11y`, and see below for npm instructions.
 
 1. Install the correct versions of each package, which are listed by the command:
 

From 84487061205285be7aa2e22a8ba704da4d99e6cc Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Tue, 4 Jul 2017 12:32:01 -0700
Subject: [PATCH 1067/1591] [eslint config] [deps] update
 `babel-preset-airbnb`, `eslint-find-rules`, `eslint-plugin-import`,
 `eslint-plugin-jsx-a11y`, `eslint-plugin-react`, `tape`

---
 packages/eslint-config-airbnb/package.json | 18 +++++++++---------
 1 file changed, 9 insertions(+), 9 deletions(-)

diff --git a/packages/eslint-config-airbnb/package.json b/packages/eslint-config-airbnb/package.json
index dd5c99a010..993b476495 100644
--- a/packages/eslint-config-airbnb/package.json
+++ b/packages/eslint-config-airbnb/package.json
@@ -49,24 +49,24 @@
     "eslint-config-airbnb-base": "^11.2.0"
   },
   "devDependencies": {
-    "babel-preset-airbnb": "^2.2.3",
+    "babel-preset-airbnb": "^2.4.0",
     "babel-tape-runner": "^2.0.1",
     "editorconfig-tools": "^0.1.1",
     "eslint": "^3.19.0",
-    "eslint-find-rules": "^1.14.3",
-    "eslint-plugin-import": "^2.2.0",
-    "eslint-plugin-jsx-a11y": "^5.0.3",
-    "eslint-plugin-react": "^7.0.1",
+    "eslint-find-rules": "^3.1.1",
+    "eslint-plugin-import": "^2.6.1",
+    "eslint-plugin-jsx-a11y": "^5.1.1",
+    "eslint-plugin-react": "^7.1.0",
     "in-publish": "^2.0.0",
     "react": ">= 0.13.0",
     "safe-publish-latest": "^1.1.1",
-    "tape": "^4.6.3"
+    "tape": "^4.7.0"
   },
   "peerDependencies": {
     "eslint": "^3.19.0",
-    "eslint-plugin-jsx-a11y": "^5.0.3",
-    "eslint-plugin-import": "^2.2.0",
-    "eslint-plugin-react": "^7.0.1"
+    "eslint-plugin-jsx-a11y": "^5.1.1",
+    "eslint-plugin-import": "^2.6.1",
+    "eslint-plugin-react": "^7.1.0"
   },
   "engines": {
     "node": ">= 4"

From c68fa632624f088b4bbe81192a50554b0c6af970 Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Tue, 4 Jul 2017 12:36:18 -0700
Subject: [PATCH 1068/1591] [eslint config] v15.0.2

---
 packages/eslint-config-airbnb/CHANGELOG.md | 5 +++++
 packages/eslint-config-airbnb/package.json | 2 +-
 2 files changed, 6 insertions(+), 1 deletion(-)

diff --git a/packages/eslint-config-airbnb/CHANGELOG.md b/packages/eslint-config-airbnb/CHANGELOG.md
index 4900db6c74..ca35490985 100644
--- a/packages/eslint-config-airbnb/CHANGELOG.md
+++ b/packages/eslint-config-airbnb/CHANGELOG.md
@@ -1,3 +1,8 @@
+15.0.2 / 2017-07-04
+==================
+- [fix] jsx should be enabled via parserOptions, not via a root ecmaFeatures
+- [deps] update `babel-preset-airbnb`, `eslint-find-rules`, `eslint-plugin-import`, `eslint-plugin-jsx-a11y`, `eslint-plugin-react`, `tape`
+
 15.0.1 / 2017-05-15
 ==================
 - [fix] set default React version to 15.0 (#1415)
diff --git a/packages/eslint-config-airbnb/package.json b/packages/eslint-config-airbnb/package.json
index 993b476495..7d4f0b941e 100644
--- a/packages/eslint-config-airbnb/package.json
+++ b/packages/eslint-config-airbnb/package.json
@@ -1,6 +1,6 @@
 {
   "name": "eslint-config-airbnb",
-  "version": "15.0.1",
+  "version": "15.0.2",
   "description": "Airbnb's ESLint config, following our styleguide",
   "main": "index.js",
   "scripts": {

From d806859320b198eeb850966ed5d091828bc55b64 Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Tue, 4 Jul 2017 12:49:09 -0700
Subject: [PATCH 1069/1591] [Tests] run prepublish tests as allowed failures

---
 .travis.yml | 18 +++++++++++++-----
 1 file changed, 13 insertions(+), 5 deletions(-)

diff --git a/.travis.yml b/.travis.yml
index d28e6fd12e..cc7f3495a7 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -5,20 +5,28 @@ node_js:
   - "6"
   - "5"
   - "4"
-env:
-  - 'TEST_DIR=packages/eslint-config-airbnb'
-  - 'TEST_DIR=packages/eslint-config-airbnb-base'
 before_install:
-  - 'cd $TEST_DIR'
   - 'if [ "${TRAVIS_NODE_VERSION}" = "0.6" ]; then npm install -g npm@1.3 ; elif [ "${TRAVIS_NODE_VERSION}" != "0.9" ]; then case "$(npm --version)" in 1.*) npm install -g npm@1.4.28 ;; 2.*) npm install -g npm@2 ;; esac ; fi'
   - 'if [ "${TRAVIS_NODE_VERSION%${TRAVIS_NODE_VERSION#[0-9]}}" = "0" ] || [ "${TRAVIS_NODE_VERSION:0:4}" = "iojs" ]; then npm install -g npm@4.5 ; elif [ "${TRAVIS_NODE_VERSION}" != "0.6" ] && [ "${TRAVIS_NODE_VERSION}" != "0.9" ]; then npm install -g npm; fi'
 install:
+  - 'cd "packages/${PACKAGE}"'
   - 'if [ "${TRAVIS_NODE_VERSION}" = "0.6" ]; then nvm install 0.8 && npm install -g npm@1.3 && npm install -g npm@1.4.28 && npm install -g npm@2 && npm install && nvm use "${TRAVIS_NODE_VERSION}"; else npm install; fi;'
 script:
-  - 'npm run travis'
+  - 'if [ -n "${PREPUBLISH-}" ]; then npm run prepublish; else npm run travis; fi'
 sudo: false
+env:
+  matrix:
+    - 'TEST=true PACKAGE=eslint-config-airbnb'
+    - 'TEST=true PACKAGE=eslint-config-airbnb-base'
 matrix:
   fast_finish: true
+  include:
+    - node_js: "node"
+      env: PREPUBLISH=true PACKAGE=eslint-config-airbnb
+    - node_js: "node"
+      env: PREPUBLISH=true PACKAGE=eslint-config-airbnb-base
   allow_failures:
     - node_js: "7"
     - node_js: "5"
+    - env: PREPUBLISH=true PACKAGE=eslint-config-airbnb
+    - env: PREPUBLISH=true PACKAGE=eslint-config-airbnb-base

From e5b403cd49aa2aa44a592d8fdfe0b6dd61ff9553 Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Tue, 4 Jul 2017 14:36:47 -0700
Subject: [PATCH 1070/1591] [eslint config] [base] [deps] update
 `babel-preset-airbnb`, `eslint-find-rules`, `eslint-plugin-import`, `tape`

---
 packages/eslint-config-airbnb-base/package.json | 10 +++++-----
 1 file changed, 5 insertions(+), 5 deletions(-)

diff --git a/packages/eslint-config-airbnb-base/package.json b/packages/eslint-config-airbnb-base/package.json
index 92fa71298c..2424f2a857 100644
--- a/packages/eslint-config-airbnb-base/package.json
+++ b/packages/eslint-config-airbnb-base/package.json
@@ -46,19 +46,19 @@
   },
   "homepage": "https://github.com/airbnb/javascript",
   "devDependencies": {
-    "babel-preset-airbnb": "^2.2.3",
+    "babel-preset-airbnb": "^2.4.0",
     "babel-tape-runner": "^2.0.1",
     "editorconfig-tools": "^0.1.1",
     "eslint": "^3.19.0",
-    "eslint-find-rules": "^1.14.3",
-    "eslint-plugin-import": "^2.2.0",
+    "eslint-find-rules": "^3.1.1",
+    "eslint-plugin-import": "^2.6.1",
     "in-publish": "^2.0.0",
     "safe-publish-latest": "^1.1.1",
-    "tape": "^4.6.3"
+    "tape": "^4.7.0"
   },
   "peerDependencies": {
     "eslint": "^3.19.0",
-    "eslint-plugin-import": "^2.2.0"
+    "eslint-plugin-import": "^2.6.1"
   },
   "engines": {
     "node": ">= 4"

From 7768e01625fd7136872dca2a8bf7ef407fd19df5 Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Tue, 4 Jul 2017 14:30:29 -0700
Subject: [PATCH 1071/1591] [eslint config] [*] Add missing rules

---
 .../eslint-config-airbnb-base/rules/imports.js    | 11 +++++++++++
 packages/eslint-config-airbnb/rules/react-a11y.js |  9 +++++++++
 packages/eslint-config-airbnb/rules/react.js      | 15 +++++++++++++++
 3 files changed, 35 insertions(+)

diff --git a/packages/eslint-config-airbnb-base/rules/imports.js b/packages/eslint-config-airbnb-base/rules/imports.js
index ab324b79ca..0150724f6b 100644
--- a/packages/eslint-config-airbnb-base/rules/imports.js
+++ b/packages/eslint-config-airbnb-base/rules/imports.js
@@ -191,5 +191,16 @@ module.exports = {
     // Prevent importing the default as if it were named
     // https://github.com/benmosher/eslint-plugin-import/blob/master/docs/rules/no-named-default.md
     'import/no-named-default': 'error',
+
+    // Reports if a module's default export is unnamed
+    // https://github.com/benmosher/eslint-plugin-import/blob/d9b712ac7fd1fddc391f7b234827925c160d956f/docs/rules/no-anonymous-default-export.md
+    'import/no-anonymous-default-export': ['off', {
+      allowArray: false,
+      allowArrowFunction: false,
+      allowAnonymousClass: false,
+      allowAnonymousFunction: false,
+      allowLiteral: false,
+      allowObject: false,
+    }],
   },
 };
diff --git a/packages/eslint-config-airbnb/rules/react-a11y.js b/packages/eslint-config-airbnb/rules/react-a11y.js
index 77fcb93d9c..4cdf1cf39c 100644
--- a/packages/eslint-config-airbnb/rules/react-a11y.js
+++ b/packages/eslint-config-airbnb/rules/react-a11y.js
@@ -188,5 +188,14 @@ module.exports = {
       tags: [],
       roles: ['tabpanel'],
     }],
+
+    // ensure <a> tags are valid
+    // https://github.com/evcohen/eslint-plugin-jsx-a11y/blob/0745af376cdc8686d85a361ce36952b1fb1ccf6e/docs/rules/anchor-is-valid.md
+    // TODO: enable, semver-major
+    'jsx-a11y/anchor-is-valid': ['off', {
+      components: ['Link'],
+      specialLink: [],
+      aspects: ['noHref', 'invalidHref', 'preferButton'],
+    }],
   },
 };
diff --git a/packages/eslint-config-airbnb/rules/react.js b/packages/eslint-config-airbnb/rules/react.js
index 4392d678ea..96e5f4a75d 100644
--- a/packages/eslint-config-airbnb/rules/react.js
+++ b/packages/eslint-config-airbnb/rules/react.js
@@ -48,6 +48,11 @@ module.exports = {
     // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/jsx-closing-bracket-location.md
     'react/jsx-closing-bracket-location': ['error', 'line-aligned'],
 
+    // Validate closing tag location in JSX
+    // https://github.com/yannickcr/eslint-plugin-react/blob/9e13ae2c51e44872b45cc15bf1ac3a72105bdd0e/docs/rules/jsx-closing-tag-location.md
+    // TODO: enable, semver-minor
+    'react/jsx-closing-tag-location': 'off',
+
     // Enforce or disallow spaces inside of curly braces in JSX attributes
     // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/jsx-curly-spacing.md
     'react/jsx-curly-spacing': ['error', 'never', { allowMultiline: true }],
@@ -315,6 +320,16 @@ module.exports = {
     // Prevent void DOM elements from receiving children
     // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/void-dom-elements-no-children.md
     'react/void-dom-elements-no-children': 'error',
+
+    // Enforce all defaultProps have a corresponding non-required PropType
+    // https://github.com/yannickcr/eslint-plugin-react/blob/9e13ae2c51e44872b45cc15bf1ac3a72105bdd0e/docs/rules/default-props-match-prop-types.md
+    // TODO: enable, semver-minor
+    'react/default-props-match-prop-types': ['off', { allowRequiredDefaults: false }],
+
+    // Prevent usage of shouldComponentUpdate when extending React.PureComponent
+    // https://github.com/yannickcr/eslint-plugin-react/blob/9e13ae2c51e44872b45cc15bf1ac3a72105bdd0e/docs/rules/no-redundant-should-component-update.md
+    // TODO: enable, semver-major
+    'react/no-redundant-should-component-update': 'off',
   },
 
   settings: {

From fc7fae620f625701a5614fb9cf9ec1e9c49bcc70 Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Tue, 4 Jul 2017 16:15:18 -0700
Subject: [PATCH 1072/1591] [Tests] add pretravis/posttravis scripts

---
 .travis.yml                                     | 2 +-
 packages/eslint-config-airbnb-base/package.json | 4 +++-
 packages/eslint-config-airbnb/package.json      | 4 +++-
 3 files changed, 7 insertions(+), 3 deletions(-)

diff --git a/.travis.yml b/.travis.yml
index cc7f3495a7..27a719227a 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -12,7 +12,7 @@ install:
   - 'cd "packages/${PACKAGE}"'
   - 'if [ "${TRAVIS_NODE_VERSION}" = "0.6" ]; then nvm install 0.8 && npm install -g npm@1.3 && npm install -g npm@1.4.28 && npm install -g npm@2 && npm install && nvm use "${TRAVIS_NODE_VERSION}"; else npm install; fi;'
 script:
-  - 'if [ -n "${PREPUBLISH-}" ]; then npm run prepublish; else npm run travis; fi'
+  - 'if [ -n "${PREPUBLISH-}" ]; then npm run pretravis && npm run prepublish && npm run posttravis; else npm run travis; fi'
 sudo: false
 env:
   matrix:
diff --git a/packages/eslint-config-airbnb-base/package.json b/packages/eslint-config-airbnb-base/package.json
index 2424f2a857..70ff6a46b4 100644
--- a/packages/eslint-config-airbnb-base/package.json
+++ b/packages/eslint-config-airbnb-base/package.json
@@ -10,7 +10,9 @@
     "prepublish": "(in-install || eslint-find-rules --unused) && (not-in-publish || npm test) && safe-publish-latest",
     "pretest": "npm run --silent lint",
     "test": "npm run --silent tests-only",
-    "travis": "npm run --silent test"
+    "pretravis": ":",
+    "travis": "npm run --silent test",
+    "posttravis": ":"
   },
   "repository": {
     "type": "git",
diff --git a/packages/eslint-config-airbnb/package.json b/packages/eslint-config-airbnb/package.json
index 7d4f0b941e..7c5df67583 100644
--- a/packages/eslint-config-airbnb/package.json
+++ b/packages/eslint-config-airbnb/package.json
@@ -10,7 +10,9 @@
     "prepublish": "(in-install || eslint-find-rules --unused) && (not-in-publish || npm test) && safe-publish-latest",
     "pretest": "npm run --silent lint",
     "test": "npm run --silent tests-only",
-    "travis": "cd ../eslint-config-airbnb-base && npm install && npm link && cd - && npm link eslint-config-airbnb-base && npm run --silent test ; npm unlink eslint-config-airbnb-base >/dev/null &"
+    "pretravis": "cd ../eslint-config-airbnb-base && npm install && npm link && cd - && npm link --no-save eslint-config-airbnb-base",
+    "travis": "npm run --silent test",
+    "posttravis": "npm unlink eslint-config-airbnb-base >/dev/null &"
   },
   "repository": {
     "type": "git",

From 22c97fa6787ce7df7124782bea1b3fe29fe76e01 Mon Sep 17 00:00:00 2001
From: Valentina Pegler <valentina.pegler@gmail.com>
Date: Wed, 12 Jul 2017 18:12:38 +0200
Subject: [PATCH 1073/1591] [inthewild] Add LEINWAND to the organizations list

---
 README.md | 1 +
 1 file changed, 1 insertion(+)

diff --git a/README.md b/README.md
index e59dc9b940..d2098852ff 100644
--- a/README.md
+++ b/README.md
@@ -3306,6 +3306,7 @@ Other Style Guides
   - **JSSolutions**: [JSSolutions/javascript](https://github.com/JSSolutions/javascript)
   - **KickorStick**: [kickorstick/javascript](https://github.com/kickorstick/javascript)
   - **Kinetica Solutions**: [kinetica/javascript](https://github.com/kinetica/Javascript-style-guide)
+  - **LEINWAND**: [LEINWAND/javascript](https://github.com/LEINWAND/javascript)
   - **Lonely Planet**: [lonelyplanet/javascript](https://github.com/lonelyplanet/javascript)
   - **M2GEN**: [M2GEN/javascript](https://github.com/M2GEN/javascript)
   - **Mighty Spring**: [mightyspring/javascript](https://github.com/mightyspring/javascript)

From 6331c2c3e2751b02af2636bce88bbb4a5489e9a5 Mon Sep 17 00:00:00 2001
From: Chaitanya Mutyala <chaitanya.mutyala@gmail.com>
Date: Wed, 12 Jul 2017 10:43:11 -0700
Subject: [PATCH 1074/1591] [guide] Typo fix on example

---
 README.md | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/README.md b/README.md
index d2098852ff..0a9103e958 100644
--- a/README.md
+++ b/README.md
@@ -1391,7 +1391,7 @@ Other Style Guides
     const increasedByOne = [];
     numbers.forEach((num) => {
       increasedByOne.push(num + 1);
-    );
+    });
 
     // best (keeping it functional)
     const increasedByOne = numbers.map(num => num + 1);

From cdc1c4fb76a67827c0aa52fd67cdda122828f583 Mon Sep 17 00:00:00 2001
From: Chris Atkin <atkinchris@gmail.com>
Date: Sun, 23 Jul 2017 14:30:32 +0100
Subject: [PATCH 1075/1591] [inthewild] Add Sainsbury's Supermarkets to the
 organizations list

---
 README.md | 1 +
 1 file changed, 1 insertion(+)

diff --git a/README.md b/README.md
index 0a9103e958..0fbd0ffe8f 100644
--- a/README.md
+++ b/README.md
@@ -3327,6 +3327,7 @@ Other Style Guides
   - **React**: [facebook.github.io/react/contributing/how-to-contribute.html#style-guide](https://facebook.github.io/react/contributing/how-to-contribute.html#style-guide)
   - **REI**: [reidev/js-style-guide](https://github.com/rei/code-style-guides/blob/master/docs/javascript.md)
   - **Ripple**: [ripple/javascript-style-guide](https://github.com/ripple/javascript-style-guide)
+  - **Sainsbury's Supermarkets**: [github/jsainsburyplc](https://github.com/jsainsburyplc)
   - **SeekingAlpha**: [seekingalpha/javascript-style-guide](https://github.com/seekingalpha/javascript-style-guide)
   - **Shutterfly**: [shutterfly/javascript](https://github.com/shutterfly/javascript)
   - **Sourcetoad**: [sourcetoad/javascript](https://github.com/sourcetoad/javascript)

From b4995b6416faa714299a39976a0b7107ad7b2afe Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Sun, 23 Jul 2017 13:04:22 -0700
Subject: [PATCH 1076/1591] [eslint config] [base] revert breaking part of
 #1420
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

I’ll re-enable it in the next major.
---
 packages/eslint-config-airbnb-base/rules/variables.js | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/packages/eslint-config-airbnb-base/rules/variables.js b/packages/eslint-config-airbnb-base/rules/variables.js
index fc0b5b11d4..fe38ea5d60 100644
--- a/packages/eslint-config-airbnb-base/rules/variables.js
+++ b/packages/eslint-config-airbnb-base/rules/variables.js
@@ -16,7 +16,8 @@ module.exports = {
     'no-label-var': 'error',
 
     // disallow specific globals
-    'no-restricted-globals': ['error'].concat(restrictedGlobals),
+    // TODO: enable, semver-major
+    'no-restricted-globals': ['off'].concat(restrictedGlobals),
 
     // disallow declaration of variables already declared in the outer scope
     'no-shadow': 'error',

From 399420f46f1c1161106655ade5f7c9b95723574b Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Sun, 23 Jul 2017 10:39:12 -0700
Subject: [PATCH 1077/1591] [Tests] add an explicit eslint version to
 travis.yml

---
 .travis.yml                                     | 13 +++++++------
 packages/eslint-config-airbnb-base/package.json |  2 +-
 2 files changed, 8 insertions(+), 7 deletions(-)

diff --git a/.travis.yml b/.travis.yml
index 27a719227a..ae03a0ee56 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -11,22 +11,23 @@ before_install:
 install:
   - 'cd "packages/${PACKAGE}"'
   - 'if [ "${TRAVIS_NODE_VERSION}" = "0.6" ]; then nvm install 0.8 && npm install -g npm@1.3 && npm install -g npm@1.4.28 && npm install -g npm@2 && npm install && nvm use "${TRAVIS_NODE_VERSION}"; else npm install; fi;'
+  - 'if [ -n "${ESLINT}" ]; then npm install --no-save "eslint@${ESLINT}"; fi'
 script:
   - 'if [ -n "${PREPUBLISH-}" ]; then npm run pretravis && npm run prepublish && npm run posttravis; else npm run travis; fi'
 sudo: false
 env:
   matrix:
-    - 'TEST=true PACKAGE=eslint-config-airbnb'
-    - 'TEST=true PACKAGE=eslint-config-airbnb-base'
+    - 'TEST=true ESLINT=3 PACKAGE=eslint-config-airbnb'
+    - 'TEST=true ESLINT=3 PACKAGE=eslint-config-airbnb-base'
 matrix:
   fast_finish: true
   include:
     - node_js: "node"
-      env: PREPUBLISH=true PACKAGE=eslint-config-airbnb
+      env: PREPUBLISH=true ESLINT=3 PACKAGE=eslint-config-airbnb
     - node_js: "node"
-      env: PREPUBLISH=true PACKAGE=eslint-config-airbnb-base
+      env: PREPUBLISH=true ESLINT=3 PACKAGE=eslint-config-airbnb-base
   allow_failures:
     - node_js: "7"
     - node_js: "5"
-    - env: PREPUBLISH=true PACKAGE=eslint-config-airbnb
-    - env: PREPUBLISH=true PACKAGE=eslint-config-airbnb-base
+    - env: PREPUBLISH=true ESLINT=3 PACKAGE=eslint-config-airbnb
+    - env: PREPUBLISH=true ESLINT=3 PACKAGE=eslint-config-airbnb-base
diff --git a/packages/eslint-config-airbnb-base/package.json b/packages/eslint-config-airbnb-base/package.json
index 70ff6a46b4..d57b9e579d 100644
--- a/packages/eslint-config-airbnb-base/package.json
+++ b/packages/eslint-config-airbnb-base/package.json
@@ -51,7 +51,7 @@
     "babel-preset-airbnb": "^2.4.0",
     "babel-tape-runner": "^2.0.1",
     "editorconfig-tools": "^0.1.1",
-    "eslint": "^3.19.0",
+    "eslint": "^4.3.0",
     "eslint-find-rules": "^3.1.1",
     "eslint-plugin-import": "^2.6.1",
     "in-publish": "^2.0.0",

From 811392725efde953d8126ed22c3b475e4f8b3ea9 Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Sun, 23 Jul 2017 11:35:51 -0700
Subject: [PATCH 1078/1591] [Deps] allow eslint v3 or v4; update
 `eslint-plugin-import`

Part of #1447.
---
 .travis.yml                                   |  4 ++
 .../eslint-config-airbnb-base/package.json    |  6 +--
 .../rules/best-practices.js                   |  4 +-
 .../eslint-config-airbnb-base/rules/errors.js | 12 +++++
 .../eslint-config-airbnb-base/rules/es6.js    | 10 ++++-
 .../eslint-config-airbnb-base/rules/node.js   |  5 +++
 .../eslint-config-airbnb-base/rules/style.js  | 44 ++++++++++++++++---
 7 files changed, 73 insertions(+), 12 deletions(-)

diff --git a/.travis.yml b/.travis.yml
index ae03a0ee56..4256a0dcfd 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -19,6 +19,7 @@ env:
   matrix:
     - 'TEST=true ESLINT=3 PACKAGE=eslint-config-airbnb'
     - 'TEST=true ESLINT=3 PACKAGE=eslint-config-airbnb-base'
+    - 'TEST=true ESLINT=4 PACKAGE=eslint-config-airbnb-base'
 matrix:
   fast_finish: true
   include:
@@ -26,8 +27,11 @@ matrix:
       env: PREPUBLISH=true ESLINT=3 PACKAGE=eslint-config-airbnb
     - node_js: "node"
       env: PREPUBLISH=true ESLINT=3 PACKAGE=eslint-config-airbnb-base
+    - node_js: "node"
+      env: PREPUBLISH=true ESLINT=4 PACKAGE=eslint-config-airbnb-base
   allow_failures:
     - node_js: "7"
     - node_js: "5"
     - env: PREPUBLISH=true ESLINT=3 PACKAGE=eslint-config-airbnb
     - env: PREPUBLISH=true ESLINT=3 PACKAGE=eslint-config-airbnb-base
+    - env: PREPUBLISH=true ESLINT=4 PACKAGE=eslint-config-airbnb-base
diff --git a/packages/eslint-config-airbnb-base/package.json b/packages/eslint-config-airbnb-base/package.json
index d57b9e579d..8fe35062fd 100644
--- a/packages/eslint-config-airbnb-base/package.json
+++ b/packages/eslint-config-airbnb-base/package.json
@@ -53,14 +53,14 @@
     "editorconfig-tools": "^0.1.1",
     "eslint": "^4.3.0",
     "eslint-find-rules": "^3.1.1",
-    "eslint-plugin-import": "^2.6.1",
+    "eslint-plugin-import": "^2.7.0",
     "in-publish": "^2.0.0",
     "safe-publish-latest": "^1.1.1",
     "tape": "^4.7.0"
   },
   "peerDependencies": {
-    "eslint": "^3.19.0",
-    "eslint-plugin-import": "^2.6.1"
+    "eslint": "^3.19.0 || ^4.3.0",
+    "eslint-plugin-import": "^2.7.0"
   },
   "engines": {
     "node": ">= 4"
diff --git a/packages/eslint-config-airbnb-base/rules/best-practices.js b/packages/eslint-config-airbnb-base/rules/best-practices.js
index 3d97bb6e55..02ea3e23b3 100644
--- a/packages/eslint-config-airbnb-base/rules/best-practices.js
+++ b/packages/eslint-config-airbnb-base/rules/best-practices.js
@@ -142,7 +142,9 @@ module.exports = {
     }],
 
     // disallow use of multiple spaces
-    'no-multi-spaces': 'error',
+    'no-multi-spaces': ['error', {
+      // ignoreEOLComments: false, // TODO: uncomment once v3 is dropped
+    }],
 
     // disallow use of multiline strings
     'no-multi-str': 'error',
diff --git a/packages/eslint-config-airbnb-base/rules/errors.js b/packages/eslint-config-airbnb-base/rules/errors.js
index 8f618e0661..02befbb5af 100644
--- a/packages/eslint-config-airbnb-base/rules/errors.js
+++ b/packages/eslint-config-airbnb-base/rules/errors.js
@@ -9,6 +9,16 @@ module.exports = {
       functions: 'always-multiline',
     }],
 
+    // Enforce “for” loop update clause moving the counter in the right direction
+    // http://eslint.org/docs/rules/for-direction
+    // TODO: enable, semver-major until v3 is dropped; semver-minor otherwise
+    'for-direction': 'off',
+
+    // Enforces that a return statement is present in property getters
+    // http://eslint.org/docs/rules/getter-return
+    // TODO: enable, semver-major when v3 is dropped
+    'getter-return': ['off', { allowImplicit: true }],
+
     // Disallow await inside of loops
     // http://eslint.org/docs/rules/no-await-in-loop
     'no-await-in-loop': 'error',
@@ -61,6 +71,8 @@ module.exports = {
       conditionalAssign: true,
       nestedBinaryExpressions: false,
       returnAssign: false,
+      ignoreJSX: 'all', // delegate to eslint-plugin-react
+      enforceForArrowConditionals: false,
     }],
 
     // disallow unnecessary semicolons
diff --git a/packages/eslint-config-airbnb-base/rules/es6.js b/packages/eslint-config-airbnb-base/rules/es6.js
index 14d777e640..a77f3a6641 100644
--- a/packages/eslint-config-airbnb-base/rules/es6.js
+++ b/packages/eslint-config-airbnb-base/rules/es6.js
@@ -112,8 +112,14 @@ module.exports = {
     // http://eslint.org/docs/rules/prefer-destructuring
     // TODO: enable
     'prefer-destructuring': ['off', {
-      array: true,
-      object: true,
+      VariableDeclarator: {
+        array: false,
+        object: true,
+      },
+      AssignmentExpression: {
+        array: true,
+        object: true,
+      },
     }, {
       enforceForRenamedProperties: false,
     }],
diff --git a/packages/eslint-config-airbnb-base/rules/node.js b/packages/eslint-config-airbnb-base/rules/node.js
index e4a71a6a5a..d890a67c1b 100644
--- a/packages/eslint-config-airbnb-base/rules/node.js
+++ b/packages/eslint-config-airbnb-base/rules/node.js
@@ -14,6 +14,11 @@ module.exports = {
     // enforces error handling in callbacks (node environment)
     'handle-callback-err': 'off',
 
+    // disallow use of the Buffer() constructor
+    // http://eslint.org/docs/rules/no-buffer-constructor
+    // TODO: enable, semver-major
+    'no-buffer-constructor': 'off',
+
     // disallow mixing regular variable and require declarations
     'no-mixed-requires': ['off', false],
 
diff --git a/packages/eslint-config-airbnb-base/rules/style.js b/packages/eslint-config-airbnb-base/rules/style.js
index c617e57fd3..42e820870e 100644
--- a/packages/eslint-config-airbnb-base/rules/style.js
+++ b/packages/eslint-config-airbnb-base/rules/style.js
@@ -1,5 +1,15 @@
 module.exports = {
   rules: {
+    // enforce line breaks after opening and before closing array brackets
+    // http://eslint.org/docs/rules/array-bracket-newline
+    // TODO: enable? semver-major
+    'array-bracket-newline': ['off', { multiline: true, minItems: 3 }],
+
+    // enforce line breaks between array elements
+    // http://eslint.org/docs/rules/array-element-newline
+    // TODO: enable? semver-major
+    'array-element-newline': ['off', { multiline: true, minItems: 3 }],
+
     // enforce spacing inside array brackets
     'array-bracket-spacing': ['error', 'never'],
 
@@ -82,7 +92,7 @@ module.exports = {
       outerIIFEBody: 1,
       // MemberExpression: null,
       // CallExpression: {
-        // parameters: null,
+      //   parameters: null,
       // },
       FunctionDeclaration: {
         parameters: 1,
@@ -284,10 +294,18 @@ module.exports = {
     'no-ternary': 'off',
 
     // disallow trailing whitespace at the end of lines
-    'no-trailing-spaces': 'error',
+    'no-trailing-spaces': ['error', {
+      skipBlankLines: false,
+      // ignoreComments: false, // TODO: uncomment once v3 is dropped
+    }],
 
     // disallow dangling underscores in identifiers
-    'no-underscore-dangle': ['error', { allowAfterThis: false }],
+    'no-underscore-dangle': ['error', {
+      allow: [],
+      allowAfterThis: false,
+      allowAfterSuper: false,
+      // enforceInMethodNames: false, // TODO: uncoment and enable, semver-minor once v3 is dropped
+    }],
 
     // disallow the use of Boolean literals in conditional expressions
     // also, prefer `a || b` over `a ? a : b`
@@ -307,10 +325,10 @@ module.exports = {
 
     // enforce line breaks between braces
     // http://eslint.org/docs/rules/object-curly-newline
-    // TODO: enable once https://github.com/eslint/eslint/issues/6488 is resolved
+    // TODO: enable once https://github.com/eslint/eslint/issues/6488 is resolved and v3 is dropped
     'object-curly-newline': ['off', {
-      ObjectExpression: { minProperties: 0, multiline: true },
-      ObjectPattern: { minProperties: 0, multiline: true }
+      ObjectExpression: { minProperties: 3, multiline: true, consistent: true },
+      ObjectPattern: { minProperties: 3, multiline: true, consistent: true }
     }],
 
     // enforce "same line" or "multiple line" on object properties.
@@ -336,6 +354,10 @@ module.exports = {
     // enforce padding within blocks
     'padded-blocks': ['error', 'never'],
 
+    // Require or disallow padding lines between statements
+    // http://eslint.org/docs/rules/padding-line-between-statements
+    'padding-line-between-statements': 'off',
+
     // require quotes around object literal property names
     // http://eslint.org/docs/rules/quote-props.html
     'quote-props': ['error', 'as-needed', { keywords: false, unnecessary: true, numbers: false }],
@@ -353,6 +375,11 @@ module.exports = {
     // enforce spacing before and after semicolons
     'semi-spacing': ['error', { before: false, after: true }],
 
+    // Enforce location of semicolons
+    // http://eslint.org/docs/rules/semi-style
+    // TODO: enable, semver-major until v3 is dropped, semver-minor otherwise
+    'semi-style': ['off', 'last'],
+
     // requires object keys to be sorted
     'sort-keys': ['off', 'asc', { caseSensitive: false, natural: true }],
 
@@ -399,6 +426,11 @@ module.exports = {
       }
     }],
 
+    // Enforce spacing around colons of switch statements
+    // http://eslint.org/docs/rules/switch-colon-spacing
+    // TODO: enable, semver-major
+    'switch-colon-spacing': ['off', { after: true, before: false }],
+
     // Require or disallow spacing between template tags and their literals
     // http://eslint.org/docs/rules/template-tag-spacing
     // TODO: enable, semver-major

From 55219bfdcf417700f677c5f31a8584a6b8c34c6b Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Sun, 23 Jul 2017 13:08:57 -0700
Subject: [PATCH 1079/1591] v11.3.0

---
 packages/eslint-config-airbnb-base/CHANGELOG.md | 12 ++++++++++++
 packages/eslint-config-airbnb-base/package.json |  2 +-
 2 files changed, 13 insertions(+), 1 deletion(-)

diff --git a/packages/eslint-config-airbnb-base/CHANGELOG.md b/packages/eslint-config-airbnb-base/CHANGELOG.md
index 9407b90a6d..80e394da8d 100644
--- a/packages/eslint-config-airbnb-base/CHANGELOG.md
+++ b/packages/eslint-config-airbnb-base/CHANGELOG.md
@@ -1,3 +1,15 @@
+11.3.0 / 2017-07-23
+==================
+ - [deps] allow eslint v3 or v4 (#1447)
+ - [deps] update `eslint-plugin-import`
+ - [minor] Balanced spacing for inline block comments (#1440)
+ - [minor] `no-return-assign`: strengthen linting against returning assignments
+ - [patch] Allow jsx extensions for test files (#1427)
+ - [patch] `no-restricted-globals`: add confusing globals; leave disabled for now (#1420)
+ - [patch] Support Protractor config files in import/no-extraneous-dependencies (#1456)
+ - [docs] Remove TODO in prefer-reflect as it's deprecated (#1452)
+ - [docs] add yarn instructions (#1463, #1464)
+
 11.2.0 / 2017-05-14
 ==================
  - [minor] Disallow unused global variables
diff --git a/packages/eslint-config-airbnb-base/package.json b/packages/eslint-config-airbnb-base/package.json
index 8fe35062fd..008b1e198b 100644
--- a/packages/eslint-config-airbnb-base/package.json
+++ b/packages/eslint-config-airbnb-base/package.json
@@ -1,6 +1,6 @@
 {
   "name": "eslint-config-airbnb-base",
-  "version": "11.2.0",
+  "version": "11.3.0",
   "description": "Airbnb's base JS ESLint config, following our styleguide",
   "main": "index.js",
   "scripts": {

From 18255d14d45bafd17038b2d9032006fe9e1e1003 Mon Sep 17 00:00:00 2001
From: Tonni <hby3387@gmail.com>
Date: Mon, 26 Jun 2017 23:00:26 +0800
Subject: [PATCH 1080/1591] [guide] Add documentation for exponentiation
 operator (`**`).

---
 README.md | 13 ++++++++++++-
 1 file changed, 12 insertions(+), 1 deletion(-)

diff --git a/README.md b/README.md
index 0fbd0ffe8f..59d2c994ac 100644
--- a/README.md
+++ b/README.md
@@ -1498,6 +1498,16 @@ Other Style Guides
 
     const isJedi = getProp('jedi');
     ```
+  <a name="es2016-properties--exponentiation-operator"></a>
+  - [12.3](#es2016-properties--exponentiation-operator) Use exponentiation operator `**` when calculating exponentiations. eslint: [`no-restricted-properties`](http://eslint.org/docs/rules/no-restricted-properties).
+
+    ```javascript
+    // bad
+    const binary = Math.pow(2, 10);
+
+    // good
+    const binary = 2 ** 10;
+    ```
 
 **[⬆ back to top](#table-of-contents)**
 
@@ -3116,7 +3126,7 @@ Other Style Guides
 ## ECMAScript 6+ (ES 2015+) Styles
 
   <a name="es6-styles"></a><a name="27.1"></a>
-  - [28.1](#es6-styles) This is a collection of links to the various ES6 features.
+  - [28.1](#es6-styles) This is a collection of links to the various ES6+ features.
 
 1. [Arrow Functions](#arrow-functions)
 1. [Classes](#classes--constructors)
@@ -3129,6 +3139,7 @@ Other Style Guides
 1. [Rest](#es6-rest)
 1. [Array Spreads](#es6-array-spreads)
 1. [Let and Const](#references)
+1. [Exponentiation Operator](#es2016-properties--exponentiation-operator)
 1. [Iterators and Generators](#iterators-and-generators)
 1. [Modules](#modules)
 

From b687a9ceb8030dcdc467adb51c33e37a9a1c6101 Mon Sep 17 00:00:00 2001
From: elmehri <elmehri@trusttic.com>
Date: Tue, 29 Aug 2017 15:27:08 +0100
Subject: [PATCH 1081/1591] [eslint config] [base] [patch] support Protractor
 config files in import/no-extraneous-dependencies

---
 packages/eslint-config-airbnb-base/rules/imports.js | 1 +
 1 file changed, 1 insertion(+)

diff --git a/packages/eslint-config-airbnb-base/rules/imports.js b/packages/eslint-config-airbnb-base/rules/imports.js
index 2700194efe..81b845a871 100644
--- a/packages/eslint-config-airbnb-base/rules/imports.js
+++ b/packages/eslint-config-airbnb-base/rules/imports.js
@@ -84,6 +84,7 @@ module.exports = {
         '**/gulpfile.js', // gulp config
         '**/gulpfile.*.js', // gulp config
         '**/Gruntfile{,.js}', // grunt config
+        '**/protractor.conf.js', // protractor config
         '**/protractor.conf.*.js', // protractor config
       ],
       optionalDependencies: false,

From 9d91990221d47b2782f586370451033460e0a32b Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Fri, 1 Sep 2017 22:59:54 -0700
Subject: [PATCH 1082/1591] [Tests] stop testing on eslint v3

---
 .travis.yml | 4 ----
 1 file changed, 4 deletions(-)

diff --git a/.travis.yml b/.travis.yml
index 9e1091574d..c083bda347 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -17,14 +17,11 @@ script:
 sudo: false
 env:
   matrix:
-    - 'TEST=true ESLINT=3 PACKAGE=eslint-config-airbnb'
     - 'TEST=true ESLINT=4 PACKAGE=eslint-config-airbnb'
     - 'TEST=true ESLINT=4 PACKAGE=eslint-config-airbnb-base'
 matrix:
   fast_finish: true
   include:
-    - node_js: "node"
-      env: PREPUBLISH=true ESLINT=3 PACKAGE=eslint-config-airbnb
     - node_js: "node"
       env: PREPUBLISH=true ESLINT=4 PACKAGE=eslint-config-airbnb
     - node_js: "node"
@@ -32,6 +29,5 @@ matrix:
   allow_failures:
     - node_js: "7"
     - node_js: "5"
-    - env: PREPUBLISH=true ESLINT=3 PACKAGE=eslint-config-airbnb
     - env: PREPUBLISH=true ESLINT=4 PACKAGE=eslint-config-airbnb
     - env: PREPUBLISH=true ESLINT=4 PACKAGE=eslint-config-airbnb-base

From 63d1ae175e01391ded18c0a4d03c0eca4c49edbe Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Fri, 1 Sep 2017 23:00:41 -0700
Subject: [PATCH 1083/1591] [Tests] fix linting error caused by updated base
 config

---
 packages/eslint-config-airbnb-base/rules/style.js    | 6 +++---
 packages/eslint-config-airbnb-base/test/test-base.js | 4 ++--
 packages/eslint-config-airbnb/rules/react.js         | 6 +++++-
 3 files changed, 10 insertions(+), 6 deletions(-)

diff --git a/packages/eslint-config-airbnb-base/rules/style.js b/packages/eslint-config-airbnb-base/rules/style.js
index d36309a808..4aa35aeafe 100644
--- a/packages/eslint-config-airbnb-base/rules/style.js
+++ b/packages/eslint-config-airbnb-base/rules/style.js
@@ -113,7 +113,7 @@ module.exports = {
         body: 1
       },
       CallExpression: {
-        'arguments': 1
+        arguments: 1
       },
       ArrayExpression: 1,
       ObjectExpression: 1,
@@ -344,8 +344,8 @@ module.exports = {
     // enforce line breaks between braces
     // http://eslint.org/docs/rules/object-curly-newline
     'object-curly-newline': ['error', {
-      ObjectExpression: { minProperties: 3, multiline: true, consistent: true },
-      ObjectPattern: { minProperties: 3, multiline: true, consistent: true }
+      ObjectExpression: { minProperties: 4, multiline: true, consistent: true },
+      ObjectPattern: { minProperties: 4, multiline: true, consistent: true }
     }],
 
     // enforce "same line" or "multiple line" on object properties.
diff --git a/packages/eslint-config-airbnb-base/test/test-base.js b/packages/eslint-config-airbnb-base/test/test-base.js
index 810c8000b0..6936e0eb24 100644
--- a/packages/eslint-config-airbnb-base/test/test-base.js
+++ b/packages/eslint-config-airbnb-base/test/test-base.js
@@ -11,9 +11,9 @@ fs.readdirSync(path.join(__dirname, '../rules')).forEach((name) => {
   files[name] = require(`../rules/${name}`); // eslint-disable-line global-require
 });
 
-Object.keys(files).forEach((
+Object.keys(files).forEach(( // eslint-disable-line function-paren-newline
   name, // trailing function comma is to test parsing
-) => {
+) => { // eslint-disable-line function-paren-newline
   const config = files[name];
 
   test(`${name}: does not reference react`, (t) => {
diff --git a/packages/eslint-config-airbnb/rules/react.js b/packages/eslint-config-airbnb/rules/react.js
index 96b1d25644..15324c8608 100644
--- a/packages/eslint-config-airbnb/rules/react.js
+++ b/packages/eslint-config-airbnb/rules/react.js
@@ -186,7 +186,11 @@ module.exports = {
 
     // Prevent missing props validation in a React component definition
     // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/prop-types.md
-    'react/prop-types': ['error', { ignore: [], customValidators: [], skipUndeclared: false }],
+    'react/prop-types': ['error', {
+      ignore: [],
+      customValidators: [],
+      skipUndeclared: false
+    }],
 
     // Prevent missing React when using JSX
     // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/react-in-jsx-scope.md

From 1f5ca4c976b906a94d4faa2e01dfff2c9a106bfb Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Fri, 1 Sep 2017 22:57:11 -0700
Subject: [PATCH 1084/1591] [eslint config] [base] v12.0.0

---
 packages/eslint-config-airbnb-base/CHANGELOG.md | 10 ++++++++++
 packages/eslint-config-airbnb-base/package.json |  2 +-
 2 files changed, 11 insertions(+), 1 deletion(-)

diff --git a/packages/eslint-config-airbnb-base/CHANGELOG.md b/packages/eslint-config-airbnb-base/CHANGELOG.md
index 6dcd4587a5..5e268d704b 100644
--- a/packages/eslint-config-airbnb-base/CHANGELOG.md
+++ b/packages/eslint-config-airbnb-base/CHANGELOG.md
@@ -1,3 +1,13 @@
+12.0.0 / 2017-09-02
+==================
+ - [deps] [breaking] require `eslint` v4
+   - enable `function-paren-newline`, `for-direction`, `getter-return`, `no-compare-neg-zero`, `semi-style`, `object-curly-newline`, `no-buffer-constructor`, `no-restricted-globals`, `switch-colon-spacing`, `template-tag-spacing`, `prefer-promise-reject-errors`, `prefer-restructuring`
+   - improve `indent`, `no-multi-spaces`, `no-trailing-spaces`, `no-underscore-dangle`
+ - [breaking] move `comma-dangle` to Stylistic Issues (#1514)
+ - [breaking] Rules prohibiting global isNaN, isFinite (#1477)
+ - [patch] also disallow padding in classes and switches (#1403)
+ - [patch] support Protractor config files in import/no-extraneous-dependencies (#1543)
+
 11.3.2 / 2017-08-22
 ==================
  - [patch] Add jest.config.js to import/no-extraneous-dependencies devDeps (#1522)
diff --git a/packages/eslint-config-airbnb-base/package.json b/packages/eslint-config-airbnb-base/package.json
index f23359e969..6c18415998 100644
--- a/packages/eslint-config-airbnb-base/package.json
+++ b/packages/eslint-config-airbnb-base/package.json
@@ -1,6 +1,6 @@
 {
   "name": "eslint-config-airbnb-base",
-  "version": "11.3.2",
+  "version": "12.0.0",
   "description": "Airbnb's base JS ESLint config, following our styleguide",
   "main": "index.js",
   "scripts": {

From 7b30681227ffec7e5ff958a43f0ba31633ad045d Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Sat, 2 Sep 2017 10:24:51 -0700
Subject: [PATCH 1085/1591] [eslint config] [breaking] [deps] require `eslint`
 `v4`, update `eslint-config-airbnb-base`

---
 packages/eslint-config-airbnb/package.json | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/packages/eslint-config-airbnb/package.json b/packages/eslint-config-airbnb/package.json
index d1aa120358..e424218002 100644
--- a/packages/eslint-config-airbnb/package.json
+++ b/packages/eslint-config-airbnb/package.json
@@ -48,13 +48,13 @@
   },
   "homepage": "https://github.com/airbnb/javascript",
   "dependencies": {
-    "eslint-config-airbnb-base": "^11.3.2"
+    "eslint-config-airbnb-base": "^12.0.0"
   },
   "devDependencies": {
     "babel-preset-airbnb": "^2.4.0",
     "babel-tape-runner": "^2.0.1",
     "editorconfig-tools": "^0.1.1",
-    "eslint": "^3.19.0 || ^4.5.0",
+    "eslint": "^4.6.0",
     "eslint-find-rules": "^3.1.1",
     "eslint-plugin-import": "^2.7.0",
     "eslint-plugin-jsx-a11y": "^5.1.1",
@@ -65,7 +65,7 @@
     "tape": "^4.8.0"
   },
   "peerDependencies": {
-    "eslint": "^3.19.0 || ^4.5.0",
+    "eslint": "^4.6.0",
     "eslint-plugin-jsx-a11y": "^5.1.1",
     "eslint-plugin-import": "^2.7.0",
     "eslint-plugin-react": "^7.3.0"

From 074b2f81b810519421a875bff94e15be118c2cd2 Mon Sep 17 00:00:00 2001
From: Stephen Wyatt Bush <stephen.bush@airbnb.com>
Date: Wed, 5 Jul 2017 15:47:54 -0700
Subject: [PATCH 1086/1591] [eslint config] [breaking] [deps] Upgrade
 `eslint-plugin-jsx-a11y` to `v6`

 - enable more a11y rules
---
 packages/eslint-config-airbnb/package.json        |  4 ++--
 packages/eslint-config-airbnb/rules/react-a11y.js | 15 ++++-----------
 2 files changed, 6 insertions(+), 13 deletions(-)

diff --git a/packages/eslint-config-airbnb/package.json b/packages/eslint-config-airbnb/package.json
index e424218002..5edc1665fe 100644
--- a/packages/eslint-config-airbnb/package.json
+++ b/packages/eslint-config-airbnb/package.json
@@ -57,7 +57,7 @@
     "eslint": "^4.6.0",
     "eslint-find-rules": "^3.1.1",
     "eslint-plugin-import": "^2.7.0",
-    "eslint-plugin-jsx-a11y": "^5.1.1",
+    "eslint-plugin-jsx-a11y": "^6.0.2",
     "eslint-plugin-react": "^7.3.0",
     "in-publish": "^2.0.0",
     "react": ">= 0.13.0",
@@ -66,7 +66,7 @@
   },
   "peerDependencies": {
     "eslint": "^4.6.0",
-    "eslint-plugin-jsx-a11y": "^5.1.1",
+    "eslint-plugin-jsx-a11y": "^6.0.2",
     "eslint-plugin-import": "^2.7.0",
     "eslint-plugin-react": "^7.3.0"
   },
diff --git a/packages/eslint-config-airbnb/rules/react-a11y.js b/packages/eslint-config-airbnb/rules/react-a11y.js
index 4cdf1cf39c..6e1c395656 100644
--- a/packages/eslint-config-airbnb/rules/react-a11y.js
+++ b/packages/eslint-config-airbnb/rules/react-a11y.js
@@ -13,7 +13,7 @@ module.exports = {
   rules: {
     // Enforce that anchors have content
     // https://github.com/evcohen/eslint-plugin-jsx-a11y/blob/master/docs/rules/anchor-has-content.md
-    'jsx-a11y/anchor-has-content': ['error', { components: [''] }],
+    'jsx-a11y/anchor-has-content': ['error', { components: [] }],
 
     // Require ARIA roles to be valid and non-abstract
     // https://github.com/evcohen/eslint-plugin-jsx-a11y/blob/master/docs/rules/aria-role.md
@@ -32,10 +32,6 @@ module.exports = {
     // https://github.com/evcohen/eslint-plugin-jsx-a11y/blob/master/docs/rules/aria-unsupported-elements.md
     'jsx-a11y/aria-unsupported-elements': 'error',
 
-    // disallow href "#"
-    // https://github.com/evcohen/eslint-plugin-jsx-a11y/blob/master/docs/rules/href-no-hash.md
-    'jsx-a11y/href-no-hash': ['error', { components: ['a'] }],
-
     // Enforce that all elements that require alternative text have meaningful information
     // https://github.com/evcohen/eslint-plugin-jsx-a11y/blob/master/docs/rules/alt-text.md
     'jsx-a11y/alt-text': ['error', {
@@ -55,9 +51,8 @@ module.exports = {
     'jsx-a11y/label-has-for': ['error', { components: ['label'] }],
 
     // require that mouseover/out come with focus/blur, for keyboard-only users
-    // TODO: evaluate
     // https://github.com/evcohen/eslint-plugin-jsx-a11y/blob/master/docs/rules/mouse-events-have-key-events.md
-    'jsx-a11y/mouse-events-have-key-events': 'off',
+    'jsx-a11y/mouse-events-have-key-events': 'error',
 
     // Prevent use of `accessKey`
     // https://github.com/evcohen/eslint-plugin-jsx-a11y/blob/master/docs/rules/no-access-key.md
@@ -109,8 +104,7 @@ module.exports = {
 
     // require onClick be accompanied by onKeyUp/onKeyDown/onKeyPress
     // https://github.com/evcohen/eslint-plugin-jsx-a11y/blob/master/docs/rules/click-events-have-key-events.md
-    // TODO: enable?
-    'jsx-a11y/click-events-have-key-events': 'off',
+    'jsx-a11y/click-events-have-key-events': 'error',
 
     // Enforce that DOM elements without semantic behavior not have interaction handlers
     // https://github.com/evcohen/eslint-plugin-jsx-a11y/blob/master/docs/rules/no-static-element-interactions.md
@@ -191,8 +185,7 @@ module.exports = {
 
     // ensure <a> tags are valid
     // https://github.com/evcohen/eslint-plugin-jsx-a11y/blob/0745af376cdc8686d85a361ce36952b1fb1ccf6e/docs/rules/anchor-is-valid.md
-    // TODO: enable, semver-major
-    'jsx-a11y/anchor-is-valid': ['off', {
+    'jsx-a11y/anchor-is-valid': ['error', {
       components: ['Link'],
       specialLink: [],
       aspects: ['noHref', 'invalidHref', 'preferButton'],

From 583544356ad043da72eea26045b20471ea00885e Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Sun, 23 Jul 2017 22:26:33 -0700
Subject: [PATCH 1087/1591] [eslint config] [deps] update
 `eslint-plugin-import`, `eslint-config-airbnb-base`

---
 packages/eslint-config-airbnb/package.json | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/packages/eslint-config-airbnb/package.json b/packages/eslint-config-airbnb/package.json
index 7c5df67583..161581986c 100644
--- a/packages/eslint-config-airbnb/package.json
+++ b/packages/eslint-config-airbnb/package.json
@@ -48,7 +48,7 @@
   },
   "homepage": "https://github.com/airbnb/javascript",
   "dependencies": {
-    "eslint-config-airbnb-base": "^11.2.0"
+    "eslint-config-airbnb-base": "^11.3.0"
   },
   "devDependencies": {
     "babel-preset-airbnb": "^2.4.0",
@@ -56,7 +56,7 @@
     "editorconfig-tools": "^0.1.1",
     "eslint": "^3.19.0",
     "eslint-find-rules": "^3.1.1",
-    "eslint-plugin-import": "^2.6.1",
+    "eslint-plugin-import": "^2.7.0",
     "eslint-plugin-jsx-a11y": "^5.1.1",
     "eslint-plugin-react": "^7.1.0",
     "in-publish": "^2.0.0",
@@ -67,7 +67,7 @@
   "peerDependencies": {
     "eslint": "^3.19.0",
     "eslint-plugin-jsx-a11y": "^5.1.1",
-    "eslint-plugin-import": "^2.6.1",
+    "eslint-plugin-import": "^2.7.0",
     "eslint-plugin-react": "^7.1.0"
   },
   "engines": {

From 16c73d0a7a92c38d7a03db621dbf42f0c5576fd2 Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Sun, 23 Jul 2017 22:33:05 -0700
Subject: [PATCH 1088/1591] [eslint config] [deps] allow eslint v3 or v4

Closes #1447.
---
 .travis.yml                                            | 4 ++++
 packages/eslint-config-airbnb/package.json             | 4 ++--
 packages/eslint-config-airbnb/test/test-react-order.js | 3 +--
 3 files changed, 7 insertions(+), 4 deletions(-)

diff --git a/.travis.yml b/.travis.yml
index 4256a0dcfd..7d887ca685 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -18,6 +18,7 @@ sudo: false
 env:
   matrix:
     - 'TEST=true ESLINT=3 PACKAGE=eslint-config-airbnb'
+    - 'TEST=true ESLINT=4 PACKAGE=eslint-config-airbnb'
     - 'TEST=true ESLINT=3 PACKAGE=eslint-config-airbnb-base'
     - 'TEST=true ESLINT=4 PACKAGE=eslint-config-airbnb-base'
 matrix:
@@ -25,6 +26,8 @@ matrix:
   include:
     - node_js: "node"
       env: PREPUBLISH=true ESLINT=3 PACKAGE=eslint-config-airbnb
+    - node_js: "node"
+      env: PREPUBLISH=true ESLINT=4 PACKAGE=eslint-config-airbnb
     - node_js: "node"
       env: PREPUBLISH=true ESLINT=3 PACKAGE=eslint-config-airbnb-base
     - node_js: "node"
@@ -33,5 +36,6 @@ matrix:
     - node_js: "7"
     - node_js: "5"
     - env: PREPUBLISH=true ESLINT=3 PACKAGE=eslint-config-airbnb
+    - env: PREPUBLISH=true ESLINT=4 PACKAGE=eslint-config-airbnb
     - env: PREPUBLISH=true ESLINT=3 PACKAGE=eslint-config-airbnb-base
     - env: PREPUBLISH=true ESLINT=4 PACKAGE=eslint-config-airbnb-base
diff --git a/packages/eslint-config-airbnb/package.json b/packages/eslint-config-airbnb/package.json
index 161581986c..1b06b38a97 100644
--- a/packages/eslint-config-airbnb/package.json
+++ b/packages/eslint-config-airbnb/package.json
@@ -54,7 +54,7 @@
     "babel-preset-airbnb": "^2.4.0",
     "babel-tape-runner": "^2.0.1",
     "editorconfig-tools": "^0.1.1",
-    "eslint": "^3.19.0",
+    "eslint": "^3.19.0 || ^4.3.0",
     "eslint-find-rules": "^3.1.1",
     "eslint-plugin-import": "^2.7.0",
     "eslint-plugin-jsx-a11y": "^5.1.1",
@@ -65,7 +65,7 @@
     "tape": "^4.7.0"
   },
   "peerDependencies": {
-    "eslint": "^3.19.0",
+    "eslint": "^3.19.0 || ^4.3.0",
     "eslint-plugin-jsx-a11y": "^5.1.1",
     "eslint-plugin-import": "^2.7.0",
     "eslint-plugin-react": "^7.1.0"
diff --git a/packages/eslint-config-airbnb/test/test-react-order.js b/packages/eslint-config-airbnb/test/test-react-order.js
index 0257a40a92..0e7fd9e6ec 100644
--- a/packages/eslint-config-airbnb/test/test-react-order.js
+++ b/packages/eslint-config-airbnb/test/test-react-order.js
@@ -49,8 +49,7 @@ test('validate react prop order', (t) => {
   setBar() {}
   someMethod() {}
   renderDogs() {}
-  render() { return <div />; }
-`));
+  render() { return <div />; }`));
 
     t.notOk(result.warningCount, 'no warnings');
     t.notOk(result.errorCount, 'no errors');

From 2c0126543ff93e060e00faf9c3e98e40f58b0d1e Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Mon, 24 Jul 2017 00:00:58 -0700
Subject: [PATCH 1089/1591] [eslint config] v15.1.0

---
 packages/eslint-config-airbnb/CHANGELOG.md | 5 +++++
 packages/eslint-config-airbnb/package.json | 2 +-
 2 files changed, 6 insertions(+), 1 deletion(-)

diff --git a/packages/eslint-config-airbnb/CHANGELOG.md b/packages/eslint-config-airbnb/CHANGELOG.md
index ca35490985..a1c3b5d188 100644
--- a/packages/eslint-config-airbnb/CHANGELOG.md
+++ b/packages/eslint-config-airbnb/CHANGELOG.md
@@ -1,3 +1,8 @@
+15.1.0 / 2017-07-24
+==================
+- [deps] allow eslint v3 or v4 (#1447)
+- [deps] update `eslint-plugin-import`, `eslint-config-airbnb-base`
+
 15.0.2 / 2017-07-04
 ==================
 - [fix] jsx should be enabled via parserOptions, not via a root ecmaFeatures
diff --git a/packages/eslint-config-airbnb/package.json b/packages/eslint-config-airbnb/package.json
index 1b06b38a97..4f48b8fee2 100644
--- a/packages/eslint-config-airbnb/package.json
+++ b/packages/eslint-config-airbnb/package.json
@@ -1,6 +1,6 @@
 {
   "name": "eslint-config-airbnb",
-  "version": "15.0.2",
+  "version": "15.1.0",
   "description": "Airbnb's ESLint config, following our styleguide",
   "main": "index.js",
   "scripts": {

From 0d938aecf20e2a6ad586e08155e177a25d12bc5e Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Mon, 24 Jul 2017 11:58:15 -0700
Subject: [PATCH 1090/1591] [eslint config] [base] [fix] `legacy`: remove
 top-level `ecmaFeatures`

---
 packages/eslint-config-airbnb-base/legacy.js | 2 --
 1 file changed, 2 deletions(-)

diff --git a/packages/eslint-config-airbnb-base/legacy.js b/packages/eslint-config-airbnb-base/legacy.js
index a73de7d8f7..7cc2441ab3 100644
--- a/packages/eslint-config-airbnb-base/legacy.js
+++ b/packages/eslint-config-airbnb-base/legacy.js
@@ -13,8 +13,6 @@ module.exports = {
     mocha: false,
     jasmine: false
   },
-  ecmaFeatures: {},
-  globals: {},
   rules: {
     'comma-dangle': ['error', 'never'],
     'prefer-numeric-literals': 'off',

From 106a58ec1ad903d702c2490880793aac577d8fb4 Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Mon, 24 Jul 2017 12:07:43 -0700
Subject: [PATCH 1091/1591] [eslint config] [base] v11.3.1

---
 packages/eslint-config-airbnb-base/CHANGELOG.md | 4 ++++
 packages/eslint-config-airbnb-base/package.json | 2 +-
 2 files changed, 5 insertions(+), 1 deletion(-)

diff --git a/packages/eslint-config-airbnb-base/CHANGELOG.md b/packages/eslint-config-airbnb-base/CHANGELOG.md
index 80e394da8d..b238e2e329 100644
--- a/packages/eslint-config-airbnb-base/CHANGELOG.md
+++ b/packages/eslint-config-airbnb-base/CHANGELOG.md
@@ -1,3 +1,7 @@
+11.3.1 / 2017-07-24
+==================
+ - [fix] `legacy`: remove top-level `ecmaFeatures`
+
 11.3.0 / 2017-07-23
 ==================
  - [deps] allow eslint v3 or v4 (#1447)
diff --git a/packages/eslint-config-airbnb-base/package.json b/packages/eslint-config-airbnb-base/package.json
index 008b1e198b..b4a676ac05 100644
--- a/packages/eslint-config-airbnb-base/package.json
+++ b/packages/eslint-config-airbnb-base/package.json
@@ -1,6 +1,6 @@
 {
   "name": "eslint-config-airbnb-base",
-  "version": "11.3.0",
+  "version": "11.3.1",
   "description": "Airbnb's base JS ESLint config, following our styleguide",
   "main": "index.js",
   "scripts": {

From 3cc6269c86ab5eb5cf4f307eb6573a7734b7fbfd Mon Sep 17 00:00:00 2001
From: Asher Dale <asher@dales.org>
Date: Thu, 20 Jul 2017 11:21:29 -0400
Subject: [PATCH 1092/1591] Updated README, deleted extra 'back to top'

There was an extra 'back to top' link in between sections 4.5 and 4.6 in the 'Arrays' section.
---
 README.md | 2 --
 1 file changed, 2 deletions(-)

diff --git a/README.md b/README.md
index 59d2c994ac..6a7f905af9 100644
--- a/README.md
+++ b/README.md
@@ -417,8 +417,6 @@ Other Style Guides
     });
     ```
 
-**[⬆ back to top](#table-of-contents)**
-
 <a name="arrays--bracket-newline"></a>
   - [4.6](#arrays--bracket-newline) Use line breaks after open and before close array brackets if an array has multiple lines
 

From a371d73414bfe534ce24d852877bed8135ebcc0a Mon Sep 17 00:00:00 2001
From: Asher Dale <asher@dales.org>
Date: Tue, 25 Jul 2017 15:46:30 -0400
Subject: [PATCH 1093/1591] Update README, fixed badly-styled eslint links

There were links to eslint rules in a style that didn't match the style of the rest of the document. Specifically, most links in the document use the following style: "eslint: ['no-unneeded-ternary']", but there were badly styled links that looks like this: "eslint rule: ['no-unneeded-ternary']." Additionally, the badly styled links were on their own line, whereas all the other links are not placed on their own line.
---
 README.md | 12 +++---------
 1 file changed, 3 insertions(+), 9 deletions(-)

diff --git a/README.md b/README.md
index 6a7f905af9..2264a12558 100644
--- a/README.md
+++ b/README.md
@@ -1838,12 +1838,10 @@ Other Style Guides
   - [15.4](#comparison--moreinfo) For more information see [Truth Equality and JavaScript](https://javascriptweblog.wordpress.com/2011/02/07/truth-equality-and-javascript/#more-2108) by Angus Croll.
 
   <a name="comparison--switch-blocks"></a><a name="15.5"></a>
-  - [15.5](#comparison--switch-blocks) Use braces to create blocks in `case` and `default` clauses that contain lexical declarations (e.g. `let`, `const`, `function`, and `class`).
+  - [15.5](#comparison--switch-blocks) Use braces to create blocks in `case` and `default` clauses that contain lexical declarations (e.g. `let`, `const`, `function`, and `class`). eslint rules: [`no-case-declarations`](http://eslint.org/docs/rules/no-case-declarations.html)
 
     > Why? Lexical declarations are visible in the entire `switch` block but only get initialized when assigned, which only happens when its `case` is reached. This causes problems when multiple `case` clauses attempt to define the same thing.
 
-    eslint rules: [`no-case-declarations`](http://eslint.org/docs/rules/no-case-declarations.html).
-
     ```javascript
     // bad
     switch (foo) {
@@ -1888,9 +1886,7 @@ Other Style Guides
     ```
 
   <a name="comparison--nested-ternaries"></a><a name="15.6"></a>
-  - [15.6](#comparison--nested-ternaries) Ternaries should not be nested and generally be single line expressions.
-
-    eslint rules: [`no-nested-ternary`](http://eslint.org/docs/rules/no-nested-ternary.html).
+  - [15.6](#comparison--nested-ternaries) Ternaries should not be nested and generally be single line expressions. eslint: [`no-nested-ternary`](http://eslint.org/docs/rules/no-nested-ternary.html)
 
     ```javascript
     // bad
@@ -1912,9 +1908,7 @@ Other Style Guides
     ```
 
   <a name="comparison--unneeded-ternary"></a><a name="15.7"></a>
-  - [15.7](#comparison--unneeded-ternary) Avoid unneeded ternary statements.
-
-    eslint rules: [`no-unneeded-ternary`](http://eslint.org/docs/rules/no-unneeded-ternary.html).
+  - [15.7](#comparison--unneeded-ternary) Avoid unneeded ternary statements. eslint: [`no-unneeded-ternary`](http://eslint.org/docs/rules/no-unneeded-ternary.html)
 
     ```javascript
     // bad

From 9393e6ab10f38dbf4b020fed81c20152ac9b8558 Mon Sep 17 00:00:00 2001
From: Asher Dale <asher@dales.org>
Date: Tue, 25 Jul 2017 15:50:10 -0400
Subject: [PATCH 1094/1591] Update README, finished fixing eslint styling

Update README, finished fixing eslint styling (look at previous commit description for info).
---
 README.md | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/README.md b/README.md
index 2264a12558..f0b3eaa6c6 100644
--- a/README.md
+++ b/README.md
@@ -1838,7 +1838,7 @@ Other Style Guides
   - [15.4](#comparison--moreinfo) For more information see [Truth Equality and JavaScript](https://javascriptweblog.wordpress.com/2011/02/07/truth-equality-and-javascript/#more-2108) by Angus Croll.
 
   <a name="comparison--switch-blocks"></a><a name="15.5"></a>
-  - [15.5](#comparison--switch-blocks) Use braces to create blocks in `case` and `default` clauses that contain lexical declarations (e.g. `let`, `const`, `function`, and `class`). eslint rules: [`no-case-declarations`](http://eslint.org/docs/rules/no-case-declarations.html)
+  - [15.5](#comparison--switch-blocks) Use braces to create blocks in `case` and `default` clauses that contain lexical declarations (e.g. `let`, `const`, `function`, and `class`). eslint: [`no-case-declarations`](http://eslint.org/docs/rules/no-case-declarations.html)
 
     > Why? Lexical declarations are visible in the entire `switch` block but only get initialized when assigned, which only happens when its `case` is reached. This causes problems when multiple `case` clauses attempt to define the same thing.
 

From a206c52854ec8de387289ceb3d88fefc7ff2b030 Mon Sep 17 00:00:00 2001
From: Will Clark <willclarktech@users.noreply.github.com>
Date: Tue, 25 Jul 2017 11:41:34 +0200
Subject: [PATCH 1095/1591] [eslint config] [base] [patch] Improve Gruntfile
 glob pattern

To cover `Gruntfile` and `Gruntfile.js` instead of just `Gruntfile`.
---
 packages/eslint-config-airbnb-base/rules/imports.js | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/packages/eslint-config-airbnb-base/rules/imports.js b/packages/eslint-config-airbnb-base/rules/imports.js
index 0150724f6b..6116c6f67c 100644
--- a/packages/eslint-config-airbnb-base/rules/imports.js
+++ b/packages/eslint-config-airbnb-base/rules/imports.js
@@ -82,7 +82,7 @@ module.exports = {
         '**/rollup.config.*.js', // rollup config
         '**/gulpfile.js', // gulp config
         '**/gulpfile.*.js', // gulp config
-        '**/Gruntfile', // grunt config
+        '**/Gruntfile{,.js}', // grunt config
         '**/protractor.conf.*.js', // protractor config
       ],
       optionalDependencies: false,

From e4f35ac959ce531e128d97cea051ddd76dd5aa6c Mon Sep 17 00:00:00 2001
From: Chris Atkin <atkinchris@gmail.com>
Date: Mon, 31 Jul 2017 17:12:27 +0100
Subject: [PATCH 1096/1591] Removing "GitHub" from In The Wild reference

This removes the word "GitHub" from an In The Wild reference link, to prevent association with the main GitHub organisation.
---
 README.md | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/README.md b/README.md
index f0b3eaa6c6..408a150cb6 100644
--- a/README.md
+++ b/README.md
@@ -3330,7 +3330,7 @@ Other Style Guides
   - **React**: [facebook.github.io/react/contributing/how-to-contribute.html#style-guide](https://facebook.github.io/react/contributing/how-to-contribute.html#style-guide)
   - **REI**: [reidev/js-style-guide](https://github.com/rei/code-style-guides/blob/master/docs/javascript.md)
   - **Ripple**: [ripple/javascript-style-guide](https://github.com/ripple/javascript-style-guide)
-  - **Sainsbury's Supermarkets**: [github/jsainsburyplc](https://github.com/jsainsburyplc)
+  - **Sainsbury's Supermarkets**: [jsainsburyplc](https://github.com/jsainsburyplc)
   - **SeekingAlpha**: [seekingalpha/javascript-style-guide](https://github.com/seekingalpha/javascript-style-guide)
   - **Shutterfly**: [shutterfly/javascript](https://github.com/shutterfly/javascript)
   - **Sourcetoad**: [sourcetoad/javascript](https://github.com/sourcetoad/javascript)

From 16faade698a185d3a84f4c2c8ef70ec4cf712936 Mon Sep 17 00:00:00 2001
From: Eric Pan <epan@users.noreply.github.com>
Date: Mon, 31 Jul 2017 11:19:07 -0700
Subject: [PATCH 1097/1591] [eslint config] [*] [docs] Specify yarn-specific
 install instructions

Attempts to clarify and address issue https://github.com/airbnb/javascript/issues/1508#issuecomment-319113807

Recommends yarn users to list peer dependencies and then install each peer dependency with specified version.

Prior yarn instructions led users to install the latest version of each peer dependency which, in some cases, led to errors if the latest version of a peer dependency did not have rules that this package uses.
---
 packages/eslint-config-airbnb-base/README.md | 2 +-
 packages/eslint-config-airbnb/README.md      | 2 +-
 2 files changed, 2 insertions(+), 2 deletions(-)

diff --git a/packages/eslint-config-airbnb-base/README.md b/packages/eslint-config-airbnb-base/README.md
index 968cec06cd..881b86b2db 100644
--- a/packages/eslint-config-airbnb-base/README.md
+++ b/packages/eslint-config-airbnb-base/README.md
@@ -12,7 +12,7 @@ We export two ESLint configurations for your usage.
 
 Our default export contains all of our ESLint rules, including ECMAScript 6+. It requires `eslint` and `eslint-plugin-import`.
 
-If you use yarn, run `yarn add --dev eslint-config-airbnb-base eslint-plugin-import`, or see below for npm instructions.
+If you use yarn, run `npm info "eslint-config-airbnb-base@latest" peerDependencies` to list the peer dependencies and versions, then run `yarn add --dev <dependency>@<version>` for each listed peer dependency. See below for npm instructions.
 
 1. Install the correct versions of each package, which are listed by the command:
 
diff --git a/packages/eslint-config-airbnb/README.md b/packages/eslint-config-airbnb/README.md
index a3a7c71340..567c929a31 100644
--- a/packages/eslint-config-airbnb/README.md
+++ b/packages/eslint-config-airbnb/README.md
@@ -12,7 +12,7 @@ We export three ESLint configurations for your usage.
 
 Our default export contains all of our ESLint rules, including ECMAScript 6+ and React. It requires `eslint`, `eslint-plugin-import`, `eslint-plugin-react`, and `eslint-plugin-jsx-a11y`. If you don't need React, see [eslint-config-airbnb-base](https://npmjs.com/eslint-config-airbnb-base).
 
-If you use yarn, run `yarn add --dev eslint-config-airbnb-base eslint-plugin-import eslint-plugin-react eslint-plugin-jsx-a11y`, and see below for npm instructions.
+If you use yarn, run `npm info "eslint-config-airbnb@latest" peerDependencies` to list the peer dependencies and versions, then run `yarn add --dev <dependency>@<version>` for each listed peer dependency. See below for npm instructions.
 
 1. Install the correct versions of each package, which are listed by the command:
 

From dbdbde0b81622d2f76c3babb9ddcfdbdf880190e Mon Sep 17 00:00:00 2001
From: marhub <hubert.m.j@gmail.com>
Date: Mon, 7 Aug 2017 12:48:54 +0200
Subject: [PATCH 1098/1591] Remove polish translation
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

Remove link to polish translation as it's outdated ( last commit from 2-3 years ago ).
For example in polish translation you can read that you should use one "var" keyword to declare your vars.
example:
```js
// źle ( bad )
var items = getItems();
var goSportsTeam = true;
var dragonball = 'z';

// dobrze ( good )
var items = getItems(),
    goSportsTeam = true,
    dragonball = 'z';
```
---
 README.md | 1 -
 1 file changed, 1 deletion(-)

diff --git a/README.md b/README.md
index 408a150cb6..f1cfe81db2 100644
--- a/README.md
+++ b/README.md
@@ -3367,7 +3367,6 @@ Other Style Guides
   - ![it](https://raw.githubusercontent.com/gosquared/flags/master/flags/flags/shiny/24/Italy.png) **Italian**: [sinkswim/javascript-style-guide](https://github.com/sinkswim/javascript-style-guide)
   - ![jp](https://raw.githubusercontent.com/gosquared/flags/master/flags/flags/shiny/24/Japan.png) **Japanese**: [mitsuruog/javascript-style-guide](https://github.com/mitsuruog/javascript-style-guide)
   - ![kr](https://raw.githubusercontent.com/gosquared/flags/master/flags/flags/shiny/24/South-Korea.png) **Korean**: [tipjs/javascript-style-guide](https://github.com/tipjs/javascript-style-guide)
-  - ![pl](https://raw.githubusercontent.com/gosquared/flags/master/flags/flags/shiny/24/Poland.png) **Polish**: [mjurczyk/javascript](https://github.com/mjurczyk/javascript)
   - ![ru](https://raw.githubusercontent.com/gosquared/flags/master/flags/flags/shiny/24/Russia.png) **Russian**: [leonidlebedev/javascript-airbnb](https://github.com/leonidlebedev/javascript-airbnb)
   - ![es](https://raw.githubusercontent.com/gosquared/flags/master/flags/flags/shiny/24/Spain.png) **Spanish**: [paolocarrasco/javascript-style-guide](https://github.com/paolocarrasco/javascript-style-guide)
   - ![th](https://raw.githubusercontent.com/gosquared/flags/master/flags/flags/shiny/24/Thailand.png) **Thai**: [lvarayut/javascript-style-guide](https://github.com/lvarayut/javascript-style-guide)

From b5e14dc5d06ddbadc0bc932b7f988f9552fb667e Mon Sep 17 00:00:00 2001
From: Jared Deckard <jared.deckard@gmail.com>
Date: Mon, 7 Aug 2017 15:36:22 -0500
Subject: [PATCH 1099/1591] Explain why default exports are preferred

---
 README.md | 1 +
 1 file changed, 1 insertion(+)

diff --git a/README.md b/README.md
index f1cfe81db2..562eebc955 100644
--- a/README.md
+++ b/README.md
@@ -1285,6 +1285,7 @@ Other Style Guides
   <a name="modules--prefer-default-export"></a>
   - [10.6](#modules--prefer-default-export) In modules with a single export, prefer default export over named export.
  eslint: [`import/prefer-default-export`](https://github.com/benmosher/eslint-plugin-import/blob/master/docs/rules/prefer-default-export.md)
+    > Why? To encourage more files that only ever export one thing, which is better for readability and maintainability.
 
     ```javascript
     // bad

From 6bd73560eea8f3c00c8185f96799f69ad4ba1fcb Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Wed, 9 Aug 2017 17:35:23 -0700
Subject: [PATCH 1100/1591] [eslint config] [deps] update `eslint` v4,
 `eslint-plugin-react`, `tape`

---
 packages/eslint-config-airbnb/package.json   | 10 ++++-----
 packages/eslint-config-airbnb/rules/react.js | 23 ++++++++++++++++++--
 2 files changed, 26 insertions(+), 7 deletions(-)

diff --git a/packages/eslint-config-airbnb/package.json b/packages/eslint-config-airbnb/package.json
index 4f48b8fee2..41fa65abbb 100644
--- a/packages/eslint-config-airbnb/package.json
+++ b/packages/eslint-config-airbnb/package.json
@@ -54,21 +54,21 @@
     "babel-preset-airbnb": "^2.4.0",
     "babel-tape-runner": "^2.0.1",
     "editorconfig-tools": "^0.1.1",
-    "eslint": "^3.19.0 || ^4.3.0",
+    "eslint": "^3.19.0 || ^4.4.1",
     "eslint-find-rules": "^3.1.1",
     "eslint-plugin-import": "^2.7.0",
     "eslint-plugin-jsx-a11y": "^5.1.1",
-    "eslint-plugin-react": "^7.1.0",
+    "eslint-plugin-react": "^7.2.0",
     "in-publish": "^2.0.0",
     "react": ">= 0.13.0",
     "safe-publish-latest": "^1.1.1",
-    "tape": "^4.7.0"
+    "tape": "^4.8.0"
   },
   "peerDependencies": {
-    "eslint": "^3.19.0 || ^4.3.0",
+    "eslint": "^3.19.0 || ^4.4.1",
     "eslint-plugin-jsx-a11y": "^5.1.1",
     "eslint-plugin-import": "^2.7.0",
-    "eslint-plugin-react": "^7.1.0"
+    "eslint-plugin-react": "^7.2.0"
   },
   "engines": {
     "node": ">= 4"
diff --git a/packages/eslint-config-airbnb/rules/react.js b/packages/eslint-config-airbnb/rules/react.js
index 96e5f4a75d..c5503a17b1 100644
--- a/packages/eslint-config-airbnb/rules/react.js
+++ b/packages/eslint-config-airbnb/rules/react.js
@@ -42,7 +42,7 @@ module.exports = {
 
     // Enforce boolean attributes notation in JSX
     // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/jsx-boolean-value.md
-    'react/jsx-boolean-value': ['error', 'never'],
+    'react/jsx-boolean-value': ['error', 'never', { always: [] }],
 
     // Validate closing bracket location in JSX
     // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/jsx-closing-bracket-location.md
@@ -90,7 +90,7 @@ module.exports = {
 
     // Prevent usage of unwrapped JSX strings
     // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/jsx-no-literals.md
-    'react/jsx-no-literals': 'off',
+    'react/jsx-no-literals': ['off', { noStrings: true }],
 
     // Disallow undeclared variables in JSX
     // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/jsx-no-undef.md
@@ -208,6 +208,8 @@ module.exports = {
         'static-methods',
         'lifecycle',
         '/^on.+$/',
+        'getters',
+        'setters',
         '/^(get|set)(?!(InitialState$|DefaultProps$|ChildContext$)).+$/',
         'everything-else',
         '/^render.+$/',
@@ -330,6 +332,23 @@ module.exports = {
     // https://github.com/yannickcr/eslint-plugin-react/blob/9e13ae2c51e44872b45cc15bf1ac3a72105bdd0e/docs/rules/no-redundant-should-component-update.md
     // TODO: enable, semver-major
     'react/no-redundant-should-component-update': 'off',
+
+    // Prevent unused state values
+    // https://github.com/yannickcr/eslint-plugin-react/pull/1103/files
+    // TODO: enable? semver-major
+    'react/no-unused-state': 'off',
+
+    // Enforces consistent naming for boolean props
+    // https://github.com/yannickcr/eslint-plugin-react/blob/73abadb697034b5ccb514d79fb4689836fe61f91/docs/rules/boolean-prop-naming.md
+    'react/boolean-prop-naming': ['off', {
+      propTypeNames: ['bool', 'mutuallyExclusiveTrueProps'],
+      rule: '^(is|has)[A-Z]([A-Za-z0-9]?)+',
+    }],
+
+    // Prevents common casing typos
+    // https://github.com/yannickcr/eslint-plugin-react/blob/73abadb697034b5ccb514d79fb4689836fe61f91/docs/rules/no-typos.md
+    // TODO: enable, semver-major
+    'react/no-typos': 'off',
   },
 
   settings: {

From 1cddb4f2c0069000c235817069cc4449ce2ed681 Mon Sep 17 00:00:00 2001
From: Mark Larah <mark@larah.me>
Date: Mon, 14 Aug 2017 19:49:29 -0700
Subject: [PATCH 1101/1591] [eslint config] [base] [patch] Add jest.config.js
 to import/no-extraneous-dependencies devDeps

---
 packages/eslint-config-airbnb-base/rules/imports.js | 1 +
 1 file changed, 1 insertion(+)

diff --git a/packages/eslint-config-airbnb-base/rules/imports.js b/packages/eslint-config-airbnb-base/rules/imports.js
index 6116c6f67c..2700194efe 100644
--- a/packages/eslint-config-airbnb-base/rules/imports.js
+++ b/packages/eslint-config-airbnb-base/rules/imports.js
@@ -76,6 +76,7 @@ module.exports = {
         'test.{js,jsx}', // repos with a single test file
         'test-*.{js,jsx}', // repos with multiple top-level test files
         '**/*.{test,spec}.{js,jsx}', // tests where the extension denotes that it is a test
+        '**/jest.config.js', // jest config
         '**/webpack.config.js', // webpack config
         '**/webpack.config.*.js', // webpack config
         '**/rollup.config.js', // rollup config

From 344c25d83a91c7a9c456e6fc9d5b40d1b924f8d3 Mon Sep 17 00:00:00 2001
From: Wooram Jun <chatii2412@gmail.com>
Date: Thu, 17 Aug 2017 15:35:14 +0900
Subject: [PATCH 1102/1591] Fix a wrong link

---
 README.md | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/README.md b/README.md
index 562eebc955..65309ed421 100644
--- a/README.md
+++ b/README.md
@@ -2658,7 +2658,7 @@ Other Style Guides
     })());
     ```
 
-    [Read more](https://stackoverflow.com/questions/7365172/semicolon-before-self-invoking-function/7365214%237365214).
+    [Read more](https://stackoverflow.com/questions/7365172/semicolon-before-self-invoking-function/7365214#7365214).
 
 **[⬆ back to top](#table-of-contents)**
 

From 855426b3db99b07469962b4d1515757d8284dda0 Mon Sep 17 00:00:00 2001
From: Anton Vasyunin <thevasya@gmail.com>
Date: Fri, 18 Aug 2017 00:05:21 +0700
Subject: [PATCH 1103/1591] Update section on naming conventions for acronyms

- Fix array name starting with a capital
- Add alternative good example
---
 README.md | 7 ++++++-
 1 file changed, 6 insertions(+), 1 deletion(-)

diff --git a/README.md b/README.md
index 65309ed421..69ff656e32 100644
--- a/README.md
+++ b/README.md
@@ -2928,11 +2928,16 @@ Other Style Guides
       // ...
     ];
 
+    // also good
+    const httpRequests = [
+      // ...
+    ];
+
     // best
     import TextMessageContainer from './containers/TextMessageContainer';
 
     // best
-    const Requests = [
+    const requests = [
       // ...
     ];
     ```

From 09988e34b4d580af8f6988b438ce492686ad2759 Mon Sep 17 00:00:00 2001
From: Max Kaplan <mekapl03@syr.edu>
Date: Sun, 20 Aug 2017 09:24:03 -0400
Subject: [PATCH 1104/1591] [inthewild] adding kaplan komputing

---
 README.md | 1 +
 1 file changed, 1 insertion(+)

diff --git a/README.md b/README.md
index 69ff656e32..b9887ff20a 100644
--- a/README.md
+++ b/README.md
@@ -3313,6 +3313,7 @@ Other Style Guides
   - **Jam3**: [Jam3/Javascript-Code-Conventions](https://github.com/Jam3/Javascript-Code-Conventions)
   - **JeopardyBot**: [kesne/jeopardy-bot](https://github.com/kesne/jeopardy-bot/blob/master/STYLEGUIDE.md)
   - **JSSolutions**: [JSSolutions/javascript](https://github.com/JSSolutions/javascript)
+  - **Kaplan Komputing**: [kaplankomputing/javascript](https://github.com/kaplankomputing/javascript)
   - **KickorStick**: [kickorstick/javascript](https://github.com/kickorstick/javascript)
   - **Kinetica Solutions**: [kinetica/javascript](https://github.com/kinetica/Javascript-style-guide)
   - **LEINWAND**: [LEINWAND/javascript](https://github.com/LEINWAND/javascript)

From a79237b02090df922f54b1082515139a59f04874 Mon Sep 17 00:00:00 2001
From: Dhruvdutt Jadhav <dhruvdutt.jadhav@gmail.com>
Date: Thu, 17 Aug 2017 22:54:31 +0530
Subject: [PATCH 1105/1591] =?UTF-8?q?[guide]=20[react]=20add=20another=20?=
 =?UTF-8?q?=E2=80=9Cgood=E2=80=9D=20example?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 react/README.md | 3 +++
 1 file changed, 3 insertions(+)

diff --git a/react/README.md b/react/README.md
index b86f743f23..b1ba2ac7a7 100644
--- a/react/README.md
+++ b/react/README.md
@@ -269,6 +269,9 @@
     <Foo
       hidden
     />
+
+    // good
+    <Foo hidden />
     ```
 
   - Always include an `alt` prop on `<img>` tags. If the image is presentational, `alt` can be an empty string or the `<img>` must have `role="presentation"`. eslint: [`jsx-a11y/alt-text`](https://github.com/evcohen/eslint-plugin-jsx-a11y/blob/master/docs/rules/alt-text.md)

From 5637c8f4c09b68ed2164c056c1611561cc010f24 Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Tue, 22 Aug 2017 15:43:40 -0700
Subject: [PATCH 1106/1591] [eslint config] [base] [deps] update `eslint`,
 `tape`

---
 packages/eslint-config-airbnb-base/package.json | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/packages/eslint-config-airbnb-base/package.json b/packages/eslint-config-airbnb-base/package.json
index b4a676ac05..69181fae72 100644
--- a/packages/eslint-config-airbnb-base/package.json
+++ b/packages/eslint-config-airbnb-base/package.json
@@ -51,15 +51,15 @@
     "babel-preset-airbnb": "^2.4.0",
     "babel-tape-runner": "^2.0.1",
     "editorconfig-tools": "^0.1.1",
-    "eslint": "^4.3.0",
+    "eslint": "^4.5.0",
     "eslint-find-rules": "^3.1.1",
     "eslint-plugin-import": "^2.7.0",
     "in-publish": "^2.0.0",
     "safe-publish-latest": "^1.1.1",
-    "tape": "^4.7.0"
+    "tape": "^4.8.0"
   },
   "peerDependencies": {
-    "eslint": "^3.19.0 || ^4.3.0",
+    "eslint": "^3.19.0 || ^4.5.0",
     "eslint-plugin-import": "^2.7.0"
   },
   "engines": {

From f1cc91c88a9feb9d120a61897c2285821afea634 Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Tue, 22 Aug 2017 15:54:17 -0700
Subject: [PATCH 1107/1591] [eslint config] [base] v11.3.2

---
 packages/eslint-config-airbnb-base/CHANGELOG.md | 7 +++++++
 packages/eslint-config-airbnb-base/package.json | 2 +-
 2 files changed, 8 insertions(+), 1 deletion(-)

diff --git a/packages/eslint-config-airbnb-base/CHANGELOG.md b/packages/eslint-config-airbnb-base/CHANGELOG.md
index b238e2e329..6dcd4587a5 100644
--- a/packages/eslint-config-airbnb-base/CHANGELOG.md
+++ b/packages/eslint-config-airbnb-base/CHANGELOG.md
@@ -1,3 +1,10 @@
+11.3.2 / 2017-08-22
+==================
+ - [patch] Add jest.config.js to import/no-extraneous-dependencies devDeps (#1522)
+ - [patch] Improve Gruntfile glob pattern (#1503)
+ - [deps] update `eslint` v4, `tape`
+ - [docs] Specify yarn-specific install instructions (#1511)
+
 11.3.1 / 2017-07-24
 ==================
  - [fix] `legacy`: remove top-level `ecmaFeatures`
diff --git a/packages/eslint-config-airbnb-base/package.json b/packages/eslint-config-airbnb-base/package.json
index 69181fae72..90078eb1d0 100644
--- a/packages/eslint-config-airbnb-base/package.json
+++ b/packages/eslint-config-airbnb-base/package.json
@@ -1,6 +1,6 @@
 {
   "name": "eslint-config-airbnb-base",
-  "version": "11.3.1",
+  "version": "11.3.2",
   "description": "Airbnb's base JS ESLint config, following our styleguide",
   "main": "index.js",
   "scripts": {

From 68cdc593620f2cdc3b5a0e9a7b960bc519db9eb9 Mon Sep 17 00:00:00 2001
From: Joe Lencioni <joe.lencioni@airbnb.com>
Date: Tue, 22 Aug 2017 15:38:13 -0700
Subject: [PATCH 1108/1591] [eslint config] [new] Enable
 `react/jsx-closing-tag-location`

---
 packages/eslint-config-airbnb/rules/react.js | 5 ++---
 react/README.md                              | 2 +-
 2 files changed, 3 insertions(+), 4 deletions(-)

diff --git a/packages/eslint-config-airbnb/rules/react.js b/packages/eslint-config-airbnb/rules/react.js
index c5503a17b1..e0a5587f7c 100644
--- a/packages/eslint-config-airbnb/rules/react.js
+++ b/packages/eslint-config-airbnb/rules/react.js
@@ -49,9 +49,8 @@ module.exports = {
     'react/jsx-closing-bracket-location': ['error', 'line-aligned'],
 
     // Validate closing tag location in JSX
-    // https://github.com/yannickcr/eslint-plugin-react/blob/9e13ae2c51e44872b45cc15bf1ac3a72105bdd0e/docs/rules/jsx-closing-tag-location.md
-    // TODO: enable, semver-minor
-    'react/jsx-closing-tag-location': 'off',
+    // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/jsx-closing-tag-location.md
+    'react/jsx-closing-tag-location': 'error',
 
     // Enforce or disallow spaces inside of curly braces in JSX attributes
     // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/jsx-curly-spacing.md
diff --git a/react/README.md b/react/README.md
index b1ba2ac7a7..6ade245c42 100644
--- a/react/README.md
+++ b/react/README.md
@@ -165,7 +165,7 @@
 
 ## Alignment
 
-  - Follow these alignment styles for JSX syntax. eslint: [`react/jsx-closing-bracket-location`](https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/jsx-closing-bracket-location.md)
+  - Follow these alignment styles for JSX syntax. eslint: [`react/jsx-closing-bracket-location`](https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/jsx-closing-bracket-location.md) [`react/jsx-closing-tag-location`](https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/jsx-closing-tag-location.md)
 
     ```jsx
     // bad

From db719a20338f8ec059df561b6b61634121de4f43 Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Tue, 22 Aug 2017 17:10:01 -0700
Subject: [PATCH 1109/1591] [eslint config] [deps] update
 `eslint-config-airbnb-base`

---
 packages/eslint-config-airbnb/package.json | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/packages/eslint-config-airbnb/package.json b/packages/eslint-config-airbnb/package.json
index 41fa65abbb..4c86673c8a 100644
--- a/packages/eslint-config-airbnb/package.json
+++ b/packages/eslint-config-airbnb/package.json
@@ -48,7 +48,7 @@
   },
   "homepage": "https://github.com/airbnb/javascript",
   "dependencies": {
-    "eslint-config-airbnb-base": "^11.3.0"
+    "eslint-config-airbnb-base": "^11.3.2"
   },
   "devDependencies": {
     "babel-preset-airbnb": "^2.4.0",

From f93ca2f71dd6f83bc060bf5e4304442501263685 Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Tue, 22 Aug 2017 17:16:31 -0700
Subject: [PATCH 1110/1591] [eslint config] [deps] update `eslint` v4,
 `eslint-plugin-react`

---
 packages/eslint-config-airbnb/package.json | 8 ++++----
 1 file changed, 4 insertions(+), 4 deletions(-)

diff --git a/packages/eslint-config-airbnb/package.json b/packages/eslint-config-airbnb/package.json
index 4c86673c8a..d1aa120358 100644
--- a/packages/eslint-config-airbnb/package.json
+++ b/packages/eslint-config-airbnb/package.json
@@ -54,21 +54,21 @@
     "babel-preset-airbnb": "^2.4.0",
     "babel-tape-runner": "^2.0.1",
     "editorconfig-tools": "^0.1.1",
-    "eslint": "^3.19.0 || ^4.4.1",
+    "eslint": "^3.19.0 || ^4.5.0",
     "eslint-find-rules": "^3.1.1",
     "eslint-plugin-import": "^2.7.0",
     "eslint-plugin-jsx-a11y": "^5.1.1",
-    "eslint-plugin-react": "^7.2.0",
+    "eslint-plugin-react": "^7.3.0",
     "in-publish": "^2.0.0",
     "react": ">= 0.13.0",
     "safe-publish-latest": "^1.1.1",
     "tape": "^4.8.0"
   },
   "peerDependencies": {
-    "eslint": "^3.19.0 || ^4.4.1",
+    "eslint": "^3.19.0 || ^4.5.0",
     "eslint-plugin-jsx-a11y": "^5.1.1",
     "eslint-plugin-import": "^2.7.0",
-    "eslint-plugin-react": "^7.2.0"
+    "eslint-plugin-react": "^7.3.0"
   },
   "engines": {
     "node": ">= 4"

From 22672c1cdcae9b717ca2710b42f6572f45dea8b5 Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Tue, 22 Aug 2017 19:44:12 -0700
Subject: [PATCH 1111/1591] [eslint config] [new] add `propWrapperFunctions`
 default settings for `eslint-plugin-react`

---
 packages/eslint-config-airbnb/rules/react.js | 5 +++++
 1 file changed, 5 insertions(+)

diff --git a/packages/eslint-config-airbnb/rules/react.js b/packages/eslint-config-airbnb/rules/react.js
index e0a5587f7c..96b1d25644 100644
--- a/packages/eslint-config-airbnb/rules/react.js
+++ b/packages/eslint-config-airbnb/rules/react.js
@@ -360,5 +360,10 @@ module.exports = {
       pragma: 'React',
       version: '15.0'
     },
+    propWrapperFunctions: [
+      'forbidExtraProps', // https://www.npmjs.com/package/airbnb-prop-types
+      'exact', // https://www.npmjs.com/package/prop-types-exact
+      'Object.freeze', // https://tc39.github.io/ecma262/#sec-object.freeze
+    ],
   }
 };

From d493a04d7f79b2439c68f854f934513d77ebdcff Mon Sep 17 00:00:00 2001
From: Lance Li <lyfuture@gmail.com>
Date: Sat, 26 Aug 2017 14:49:14 +0800
Subject: [PATCH 1112/1591] Change Simplified Chinese translation link

Currently the Simplified Chinese translation is for ES5, it's out of date, use another one instead of it.
---
 README.md | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/README.md b/README.md
index b9887ff20a..1d671247e0 100644
--- a/README.md
+++ b/README.md
@@ -3367,7 +3367,7 @@ Other Style Guides
   - ![br](https://raw.githubusercontent.com/gosquared/flags/master/flags/flags/shiny/24/Brazil.png) **Brazilian Portuguese**: [armoucar/javascript-style-guide](https://github.com/armoucar/javascript-style-guide)
   - ![bg](https://raw.githubusercontent.com/gosquared/flags/master/flags/flags/shiny/24/Bulgaria.png) **Bulgarian**: [borislavvv/javascript](https://github.com/borislavvv/javascript)
   - ![ca](https://raw.githubusercontent.com/fpmweb/javascript-style-guide/master/img/catala.png) **Catalan**: [fpmweb/javascript-style-guide](https://github.com/fpmweb/javascript-style-guide)
-  - ![cn](https://raw.githubusercontent.com/gosquared/flags/master/flags/flags/shiny/24/China.png) **Chinese (Simplified)**: [sivan/javascript-style-guide](https://github.com/sivan/javascript-style-guide)
+  - ![cn](https://raw.githubusercontent.com/gosquared/flags/master/flags/flags/shiny/24/China.png) **Chinese (Simplified)**: [yuche/javascript](https://github.com/yuche/javascript)
   - ![tw](https://raw.githubusercontent.com/gosquared/flags/master/flags/flags/shiny/24/Taiwan.png) **Chinese (Traditional)**: [jigsawye/javascript](https://github.com/jigsawye/javascript)
   - ![fr](https://raw.githubusercontent.com/gosquared/flags/master/flags/flags/shiny/24/France.png) **French**: [nmussy/javascript-style-guide](https://github.com/nmussy/javascript-style-guide)
   - ![de](https://raw.githubusercontent.com/gosquared/flags/master/flags/flags/shiny/24/Germany.png) **German**: [timofurrer/javascript-style-guide](https://github.com/timofurrer/javascript-style-guide)

From 9dee84796bfcf3ab88cd4603869c7c7c6ada13b1 Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Sat, 2 Sep 2017 11:28:53 -0700
Subject: [PATCH 1113/1591] [Docs] add note about requiring
 `babel-preset-airbnb` and `airbnb-browser-shims`.

Fixes #1544.
---
 README.md | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/README.md b/README.md
index 27070b7792..8b5aa0ae6d 100644
--- a/README.md
+++ b/README.md
@@ -2,6 +2,8 @@
 
 *A mostly reasonable approach to JavaScript*
 
+> **Note**: this guide assumes you are using [Babel](https://babeljs.io), and requires that you use [babel-preset-airbnb](https://npmjs.com/babel-preset-airbnb) or the equivalent. It also assumes you are installing shims/polyfills in your app, with [airbnb-browser-shims](https://npmjs.com/airbnb-browser-shims) or the equivalent.
+
 [![Downloads](https://img.shields.io/npm/dm/eslint-config-airbnb.svg)](https://www.npmjs.com/package/eslint-config-airbnb)
 [![Downloads](https://img.shields.io/npm/dm/eslint-config-airbnb-base.svg)](https://www.npmjs.com/package/eslint-config-airbnb-base)
 [![Gitter](https://badges.gitter.im/Join%20Chat.svg)](https://gitter.im/airbnb/javascript?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge)

From 138aafd2a0afe9054df904bbe1dbe72b3784e4ea Mon Sep 17 00:00:00 2001
From: Vitaly Makarevich <vitalymak@users.noreply.github.com>
Date: Thu, 7 Sep 2017 17:26:11 +0300
Subject: [PATCH 1114/1591] Update CHANGELOG.md

Typo: prefer-restructuring => prefer-destructuring
---
 packages/eslint-config-airbnb-base/CHANGELOG.md | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/packages/eslint-config-airbnb-base/CHANGELOG.md b/packages/eslint-config-airbnb-base/CHANGELOG.md
index 5e268d704b..99bfab9d7b 100644
--- a/packages/eslint-config-airbnb-base/CHANGELOG.md
+++ b/packages/eslint-config-airbnb-base/CHANGELOG.md
@@ -1,7 +1,7 @@
 12.0.0 / 2017-09-02
 ==================
  - [deps] [breaking] require `eslint` v4
-   - enable `function-paren-newline`, `for-direction`, `getter-return`, `no-compare-neg-zero`, `semi-style`, `object-curly-newline`, `no-buffer-constructor`, `no-restricted-globals`, `switch-colon-spacing`, `template-tag-spacing`, `prefer-promise-reject-errors`, `prefer-restructuring`
+   - enable `function-paren-newline`, `for-direction`, `getter-return`, `no-compare-neg-zero`, `semi-style`, `object-curly-newline`, `no-buffer-constructor`, `no-restricted-globals`, `switch-colon-spacing`, `template-tag-spacing`, `prefer-promise-reject-errors`, `prefer-destructuring`
    - improve `indent`, `no-multi-spaces`, `no-trailing-spaces`, `no-underscore-dangle`
  - [breaking] move `comma-dangle` to Stylistic Issues (#1514)
  - [breaking] Rules prohibiting global isNaN, isFinite (#1477)

From 5b338e1937725758e03ed21d589177e61ad5d1a9 Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Sat, 2 Sep 2017 11:33:45 -0700
Subject: [PATCH 1115/1591] [Tests] lint our markdown

---
 .travis.yml | 6 ++++--
 README.md   | 4 ++--
 2 files changed, 6 insertions(+), 4 deletions(-)

diff --git a/.travis.yml b/.travis.yml
index c083bda347..aa05d1d238 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -9,11 +9,11 @@ before_install:
   - 'if [ "${TRAVIS_NODE_VERSION}" = "0.6" ]; then npm install -g npm@1.3 ; elif [ "${TRAVIS_NODE_VERSION}" != "0.9" ]; then case "$(npm --version)" in 1.*) npm install -g npm@1.4.28 ;; 2.*) npm install -g npm@2 ;; esac ; fi'
   - 'if [ "${TRAVIS_NODE_VERSION%${TRAVIS_NODE_VERSION#[0-9]}}" = "0" ] || [ "${TRAVIS_NODE_VERSION:0:4}" = "iojs" ]; then npm install -g npm@4.5 ; elif [ "${TRAVIS_NODE_VERSION}" != "0.6" ] && [ "${TRAVIS_NODE_VERSION}" != "0.9" ]; then npm install -g npm; fi'
 install:
-  - 'cd "packages/${PACKAGE}"'
+  - 'if [ -n "${PACKAGE-}" ]; then cd "packages/${PACKAGE}"; fi'
   - 'if [ "${TRAVIS_NODE_VERSION}" = "0.6" ]; then nvm install 0.8 && npm install -g npm@1.3 && npm install -g npm@1.4.28 && npm install -g npm@2 && npm install && nvm use "${TRAVIS_NODE_VERSION}"; else npm install; fi;'
   - 'if [ -n "${ESLINT}" ]; then npm install --no-save "eslint@${ESLINT}"; fi'
 script:
-  - 'if [ -n "${PREPUBLISH-}" ]; then npm run pretravis && npm run prepublish && npm run posttravis; else npm run travis; fi'
+  - 'if [ -n "${PREPUBLISH-}" ]; then npm run pretravis && npm run prepublish && npm run posttravis; elif [ -n "${LINT-}" ]; then npm run lint; else npm run travis; fi'
 sudo: false
 env:
   matrix:
@@ -26,6 +26,8 @@ matrix:
       env: PREPUBLISH=true ESLINT=4 PACKAGE=eslint-config-airbnb
     - node_js: "node"
       env: PREPUBLISH=true ESLINT=4 PACKAGE=eslint-config-airbnb-base
+    - node_js: "node"
+      env: LINT=true
   allow_failures:
     - node_js: "7"
     - node_js: "5"
diff --git a/README.md b/README.md
index 8b5aa0ae6d..adf57fc96b 100644
--- a/README.md
+++ b/README.md
@@ -3169,7 +3169,7 @@ Other Style Guides
     eslint: [`no-restricted-globals`](http://eslint.org/docs/rules/no-restricted-globals)
 
     > Why? The global `isNaN` coerces non-numbers to numbers, returning true for anything that coerces to NaN.
-    If this behavior is desired, make it explicit.
+    > If this behavior is desired, make it explicit.
 
     ```javascript
     // bad
@@ -3186,7 +3186,7 @@ Other Style Guides
     eslint: [`no-restricted-globals`](http://eslint.org/docs/rules/no-restricted-globals)
 
     > Why? The global `isFinite` coerces non-numbers to numbers, returning true for anything that coerces to a finite number.
-    If this behavior is desired, make it explicit.
+    > If this behavior is desired, make it explicit.
 
     ```javascript
     // bad

From 0aab14c3648511e555da3137e2971201a2f6e338 Mon Sep 17 00:00:00 2001
From: Carlos Soria <cultome@protonmail.com>
Date: Thu, 14 Sep 2017 16:09:30 -0500
Subject: [PATCH 1116/1591] Add Grupo Abraxas to In The Wild section

---
 README.md | 1 +
 1 file changed, 1 insertion(+)

diff --git a/README.md b/README.md
index adf57fc96b..e03261ebab 100644
--- a/README.md
+++ b/README.md
@@ -3355,6 +3355,7 @@ Other Style Guides
   - **Generation Tux**: [GenerationTux/javascript](https://github.com/generationtux/styleguide)
   - **GoodData**: [gooddata/gdc-js-style](https://github.com/gooddata/gdc-js-style)
   - **Grooveshark**: [grooveshark/javascript](https://github.com/grooveshark/javascript)
+  - **Grupo-Abraxas**: [Grupo-Abraxas/javascript](https://github.com/Grupo-Abraxas/javascript)
   - **Honey**: [honeyscience/javascript](https://github.com/honeyscience/javascript)
   - **How About We**: [howaboutwe/javascript](https://github.com/howaboutwe/javascript-style-guide)
   - **Huballin**: [huballin/javascript](https://github.com/huballin/javascript)

From e16b03b841b20e510a203cf7d213d4d75d9d21df Mon Sep 17 00:00:00 2001
From: Nikita Lebedev <bloomber111@gmail.com>
Date: Sat, 9 Sep 2017 06:07:29 +0500
Subject: [PATCH 1117/1591] [guide] require array spread operator or
 `Array.from`

Fixes #1084.
---
 README.md | 26 +++++++++++++++++++++-----
 1 file changed, 21 insertions(+), 5 deletions(-)

diff --git a/README.md b/README.md
index e03261ebab..c9c412e86a 100644
--- a/README.md
+++ b/README.md
@@ -364,15 +364,31 @@ Other Style Guides
     ```
 
   <a name="arrays--from"></a><a name="4.4"></a>
-  - [4.4](#arrays--from) To convert an array-like object to an array, use [Array.from](https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Array/from).
+  - [4.4](#arrays--from) To convert an array-like object to an array, use spreads `...` instead of [Array.from](https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Array/from).
 
     ```javascript
     const foo = document.querySelectorAll('.foo');
+
+    // good
     const nodes = Array.from(foo);
+
+    // best
+    const nodes = [...foo];
+    ```
+
+  <a name="arrays--mapping"></a>
+  - [4.5](#arrays--mapping) Use [Array.from](https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Array/from) instead of spread `...` for mapping over iterables, because it avoids creating an intermediate array.
+
+    ```javascript
+    // bad
+    const bar = [...foo].map(bar);
+
+    // good
+    const bar = Array.from(foo, bar);
     ```
 
   <a name="arrays--callback-return"></a><a name="4.5"></a>
-  - [4.5](#arrays--callback-return) Use return statements in array method callbacks. It’s ok to omit the return if the function body consists of a single statement returning an expression without side effects, following [8.2](#arrows--implicit-return). eslint: [`array-callback-return`](http://eslint.org/docs/rules/array-callback-return)
+  - [4.6](#arrays--callback-return) Use return statements in array method callbacks. It’s ok to omit the return if the function body consists of a single statement returning an expression without side effects, following [8.2](#arrows--implicit-return). eslint: [`array-callback-return`](http://eslint.org/docs/rules/array-callback-return)
 
     ```javascript
     // good
@@ -420,8 +436,8 @@ Other Style Guides
     });
     ```
 
-<a name="arrays--bracket-newline"></a>
-  - [4.6](#arrays--bracket-newline) Use line breaks after open and before close array brackets if an array has multiple lines
+  <a name="arrays--bracket-newline"></a>
+  - [4.7](#arrays--bracket-newline) Use line breaks after open and before close array brackets if an array has multiple lines
 
   ```javascript
   // bad
@@ -2511,7 +2527,7 @@ Other Style Guides
 
 ## Commas
 
-<a name="commas--leading-trailing"></a><a name="19.1"></a>
+  <a name="commas--leading-trailing"></a><a name="19.1"></a>
   - [20.1](#commas--leading-trailing) Leading commas: **Nope.** eslint: [`comma-style`](http://eslint.org/docs/rules/comma-style.html) jscs: [`requireCommaBeforeLineBreak`](http://jscs.info/rule/requireCommaBeforeLineBreak)
 
     ```javascript

From 3ad1ad1a6a130377cffdda2c1d00c0ded940e2b3 Mon Sep 17 00:00:00 2001
From: Vladimir Kovpak <cn007b@gmail.com>
Date: Thu, 21 Sep 2017 02:11:14 +0300
Subject: [PATCH 1118/1591] [guide] Updated example in ternaries.

---
 README.md | 5 ++---
 1 file changed, 2 insertions(+), 3 deletions(-)

diff --git a/README.md b/README.md
index c9c412e86a..ffa841039b 100644
--- a/README.md
+++ b/README.md
@@ -1914,16 +1914,15 @@ Other Style Guides
       ? "bar"
       : value1 > value2 ? "baz" : null;
 
-    // better
+    // split into 2 separated ternary expressions
     const maybeNull = value1 > value2 ? 'baz' : null;
 
+    // better
     const foo = maybe1 > maybe2
       ? 'bar'
       : maybeNull;
 
     // best
-    const maybeNull = value1 > value2 ? 'baz' : null;
-
     const foo = maybe1 > maybe2 ? 'bar' : maybeNull;
     ```
 

From 2380c0ddb849c61d61db92331cc0255f2c68c02b Mon Sep 17 00:00:00 2001
From: Josh <thepeoplesbourgeois@users.noreply.github.com>
Date: Wed, 27 Sep 2017 12:51:40 -0700
Subject: [PATCH 1119/1591] [guide] Improve severity of warning comment

---
 README.md | 10 +++++-----
 1 file changed, 5 insertions(+), 5 deletions(-)

diff --git a/README.md b/README.md
index ffa841039b..f0186becac 100644
--- a/README.md
+++ b/README.md
@@ -381,10 +381,10 @@ Other Style Guides
 
     ```javascript
     // bad
-    const bar = [...foo].map(bar);
+    const baz = [...foo].map(bar);
 
     // good
-    const bar = Array.from(foo, bar);
+    const baz = Array.from(foo, bar);
     ```
 
   <a name="arrays--callback-return"></a><a name="4.5"></a>
@@ -400,18 +400,18 @@ Other Style Guides
     // good
     [1, 2, 3].map(x => x + 1);
 
-    // bad
+    // bad - no returned value means `memo` becomes undefined after the first iteration
     const flat = {};
     [[0, 1], [2, 3], [4, 5]].reduce((memo, item, index) => {
       const flatten = memo.concat(item);
-      flat[index] = flatten;
+      memo[index] = flatten;
     });
 
     // good
     const flat = {};
     [[0, 1], [2, 3], [4, 5]].reduce((memo, item, index) => {
       const flatten = memo.concat(item);
-      flat[index] = flatten;
+      memo[index] = flatten;
       return flatten;
     });
 

From 8e29a161f91cb0e190ebe3f955073f3c16894d9f Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Wed, 27 Sep 2017 16:33:51 -0400
Subject: [PATCH 1120/1591] [eslint config] [base] [fix] ensure all JSX
 elements are ignored by `indent`

Fixes #1569.
---
 packages/eslint-config-airbnb-base/rules/style.js | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/packages/eslint-config-airbnb-base/rules/style.js b/packages/eslint-config-airbnb-base/rules/style.js
index 4aa35aeafe..328468dd38 100644
--- a/packages/eslint-config-airbnb-base/rules/style.js
+++ b/packages/eslint-config-airbnb-base/rules/style.js
@@ -119,7 +119,7 @@ module.exports = {
       ObjectExpression: 1,
       ImportDeclaration: 1,
       flatTernaryExpressions: false,
-      ignoredNodes: ['JSXElement *']
+      ignoredNodes: ['JSXElement', 'JSXElement *']
     }],
 
     // specify whether double or single quotes should be used in JSX attributes

From b7ff33e79c886581a92dccfc51011f6a9f7cc704 Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Wed, 27 Sep 2017 16:37:54 -0400
Subject: [PATCH 1121/1591] [eslint config] [base] [deps] update `eslint`

---
 packages/eslint-config-airbnb-base/package.json | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/packages/eslint-config-airbnb-base/package.json b/packages/eslint-config-airbnb-base/package.json
index 6c18415998..f5a447f4fb 100644
--- a/packages/eslint-config-airbnb-base/package.json
+++ b/packages/eslint-config-airbnb-base/package.json
@@ -51,7 +51,7 @@
     "babel-preset-airbnb": "^2.4.0",
     "babel-tape-runner": "^2.0.1",
     "editorconfig-tools": "^0.1.1",
-    "eslint": "^4.6.0",
+    "eslint": "^4.7.2",
     "eslint-find-rules": "^3.1.1",
     "eslint-plugin-import": "^2.7.0",
     "in-publish": "^2.0.0",
@@ -59,7 +59,7 @@
     "tape": "^4.8.0"
   },
   "peerDependencies": {
-    "eslint": "^4.6.0",
+    "eslint": "^4.7.2",
     "eslint-plugin-import": "^2.7.0"
   },
   "engines": {

From cd038fb89bf4f5cc6596a9c4cb58302e11cf7125 Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Wed, 27 Sep 2017 16:38:49 -0400
Subject: [PATCH 1122/1591] v12.0.1

---
 packages/eslint-config-airbnb-base/CHANGELOG.md | 5 +++++
 packages/eslint-config-airbnb-base/package.json | 2 +-
 2 files changed, 6 insertions(+), 1 deletion(-)

diff --git a/packages/eslint-config-airbnb-base/CHANGELOG.md b/packages/eslint-config-airbnb-base/CHANGELOG.md
index 99bfab9d7b..4296651735 100644
--- a/packages/eslint-config-airbnb-base/CHANGELOG.md
+++ b/packages/eslint-config-airbnb-base/CHANGELOG.md
@@ -1,3 +1,8 @@
+12.0.1 / 2017-09-27
+==================
+ - [fix] ensure all JSX elements are ignored by `indent` (#1569)
+ - [deps] update `eslint`
+
 12.0.0 / 2017-09-02
 ==================
  - [deps] [breaking] require `eslint` v4
diff --git a/packages/eslint-config-airbnb-base/package.json b/packages/eslint-config-airbnb-base/package.json
index f5a447f4fb..cd7037ff75 100644
--- a/packages/eslint-config-airbnb-base/package.json
+++ b/packages/eslint-config-airbnb-base/package.json
@@ -1,6 +1,6 @@
 {
   "name": "eslint-config-airbnb-base",
-  "version": "12.0.0",
+  "version": "12.0.1",
   "description": "Airbnb's base JS ESLint config, following our styleguide",
   "main": "index.js",
   "scripts": {

From faedb670429755a2a3f082f610177571db329307 Mon Sep 17 00:00:00 2001
From: Leonid Lebedev <lix.lebedev@yandex.ru>
Date: Sun, 1 Oct 2017 17:36:45 +0300
Subject: [PATCH 1123/1591] Add Amendments

---
 README.md | 1 +
 1 file changed, 1 insertion(+)

diff --git a/README.md b/README.md
index f0186becac..fdfcca7a59 100644
--- a/README.md
+++ b/README.md
@@ -56,6 +56,7 @@ Other Style Guides
   1. [Chat With Us About JavaScript](#chat-with-us-about-javascript)
   1. [Contributors](#contributors)
   1. [License](#license)
+  1. [Amendments](#amendments)
 
 ## Types
 

From a8155091ff4ecffc55848d3f79db376ecf8bdb24 Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Thu, 5 Oct 2017 00:02:31 -0700
Subject: [PATCH 1124/1591] [eslint config] [base] [deps] update `eslint`

---
 packages/eslint-config-airbnb-base/package.json | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/packages/eslint-config-airbnb-base/package.json b/packages/eslint-config-airbnb-base/package.json
index cd7037ff75..e4c349948f 100644
--- a/packages/eslint-config-airbnb-base/package.json
+++ b/packages/eslint-config-airbnb-base/package.json
@@ -51,7 +51,7 @@
     "babel-preset-airbnb": "^2.4.0",
     "babel-tape-runner": "^2.0.1",
     "editorconfig-tools": "^0.1.1",
-    "eslint": "^4.7.2",
+    "eslint": "^4.8.0",
     "eslint-find-rules": "^3.1.1",
     "eslint-plugin-import": "^2.7.0",
     "in-publish": "^2.0.0",
@@ -59,7 +59,7 @@
     "tape": "^4.8.0"
   },
   "peerDependencies": {
-    "eslint": "^4.7.2",
+    "eslint": "^4.8.0",
     "eslint-plugin-import": "^2.7.0"
   },
   "engines": {

From ad3746672e5bd79f77159c4e2612077651e9af17 Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Thu, 5 Oct 2017 00:03:21 -0700
Subject: [PATCH 1125/1591] [eslint config] [base] v12.0.2

---
 packages/eslint-config-airbnb-base/CHANGELOG.md | 4 ++++
 packages/eslint-config-airbnb-base/package.json | 2 +-
 2 files changed, 5 insertions(+), 1 deletion(-)

diff --git a/packages/eslint-config-airbnb-base/CHANGELOG.md b/packages/eslint-config-airbnb-base/CHANGELOG.md
index 4296651735..68275e325d 100644
--- a/packages/eslint-config-airbnb-base/CHANGELOG.md
+++ b/packages/eslint-config-airbnb-base/CHANGELOG.md
@@ -1,3 +1,7 @@
+12.0.2 / 2017-10-05
+==================
+ - [deps] update `eslint`
+
 12.0.1 / 2017-09-27
 ==================
  - [fix] ensure all JSX elements are ignored by `indent` (#1569)
diff --git a/packages/eslint-config-airbnb-base/package.json b/packages/eslint-config-airbnb-base/package.json
index e4c349948f..81c1011774 100644
--- a/packages/eslint-config-airbnb-base/package.json
+++ b/packages/eslint-config-airbnb-base/package.json
@@ -1,6 +1,6 @@
 {
   "name": "eslint-config-airbnb-base",
-  "version": "12.0.1",
+  "version": "12.0.2",
   "description": "Airbnb's base JS ESLint config, following our styleguide",
   "main": "index.js",
   "scripts": {

From 2c228825a808b6c782e4b79c80db3c28cfceae4d Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Thu, 5 Oct 2017 00:55:14 -0700
Subject: [PATCH 1126/1591] [eslint config] [deps] update `eslint`,
 `eslint-config-airbnb-base`, `eslint-plugin-react`

---
 packages/eslint-config-airbnb/package.json | 10 +++++-----
 1 file changed, 5 insertions(+), 5 deletions(-)

diff --git a/packages/eslint-config-airbnb/package.json b/packages/eslint-config-airbnb/package.json
index 5edc1665fe..1723a6934e 100644
--- a/packages/eslint-config-airbnb/package.json
+++ b/packages/eslint-config-airbnb/package.json
@@ -48,27 +48,27 @@
   },
   "homepage": "https://github.com/airbnb/javascript",
   "dependencies": {
-    "eslint-config-airbnb-base": "^12.0.0"
+    "eslint-config-airbnb-base": "^12.0.2"
   },
   "devDependencies": {
     "babel-preset-airbnb": "^2.4.0",
     "babel-tape-runner": "^2.0.1",
     "editorconfig-tools": "^0.1.1",
-    "eslint": "^4.6.0",
+    "eslint": "^4.8.0",
     "eslint-find-rules": "^3.1.1",
     "eslint-plugin-import": "^2.7.0",
     "eslint-plugin-jsx-a11y": "^6.0.2",
-    "eslint-plugin-react": "^7.3.0",
+    "eslint-plugin-react": "^7.4.0",
     "in-publish": "^2.0.0",
     "react": ">= 0.13.0",
     "safe-publish-latest": "^1.1.1",
     "tape": "^4.8.0"
   },
   "peerDependencies": {
-    "eslint": "^4.6.0",
+    "eslint": "^4.8.0",
     "eslint-plugin-jsx-a11y": "^6.0.2",
     "eslint-plugin-import": "^2.7.0",
-    "eslint-plugin-react": "^7.3.0"
+    "eslint-plugin-react": "^7.4.0"
   },
   "engines": {
     "node": ">= 4"

From e5b5aeeb6bfc2402969360e9537c40ba42b1d137 Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Thu, 5 Oct 2017 01:01:01 -0700
Subject: [PATCH 1127/1591] [eslint config] [breaking] enable/add react rules:

 - `react/jsx-curly-brace-presence`
 - `react/no-typos`
 - `react/no-unused-state`
 - `react/no-redundant-should-component-update`
 - `react/default-props-match-prop-types`
---
 packages/eslint-config-airbnb/rules/react.js | 18 +++++++++---------
 1 file changed, 9 insertions(+), 9 deletions(-)

diff --git a/packages/eslint-config-airbnb/rules/react.js b/packages/eslint-config-airbnb/rules/react.js
index 15324c8608..f6e3528079 100644
--- a/packages/eslint-config-airbnb/rules/react.js
+++ b/packages/eslint-config-airbnb/rules/react.js
@@ -328,18 +328,15 @@ module.exports = {
 
     // Enforce all defaultProps have a corresponding non-required PropType
     // https://github.com/yannickcr/eslint-plugin-react/blob/9e13ae2c51e44872b45cc15bf1ac3a72105bdd0e/docs/rules/default-props-match-prop-types.md
-    // TODO: enable, semver-minor
-    'react/default-props-match-prop-types': ['off', { allowRequiredDefaults: false }],
+    'react/default-props-match-prop-types': ['error', { allowRequiredDefaults: false }],
 
     // Prevent usage of shouldComponentUpdate when extending React.PureComponent
     // https://github.com/yannickcr/eslint-plugin-react/blob/9e13ae2c51e44872b45cc15bf1ac3a72105bdd0e/docs/rules/no-redundant-should-component-update.md
-    // TODO: enable, semver-major
-    'react/no-redundant-should-component-update': 'off',
+    'react/no-redundant-should-component-update': 'error',
 
     // Prevent unused state values
-    // https://github.com/yannickcr/eslint-plugin-react/pull/1103/files
-    // TODO: enable? semver-major
-    'react/no-unused-state': 'off',
+    // https://github.com/yannickcr/eslint-plugin-react/pull/1103/
+    'react/no-unused-state': 'error',
 
     // Enforces consistent naming for boolean props
     // https://github.com/yannickcr/eslint-plugin-react/blob/73abadb697034b5ccb514d79fb4689836fe61f91/docs/rules/boolean-prop-naming.md
@@ -350,8 +347,11 @@ module.exports = {
 
     // Prevents common casing typos
     // https://github.com/yannickcr/eslint-plugin-react/blob/73abadb697034b5ccb514d79fb4689836fe61f91/docs/rules/no-typos.md
-    // TODO: enable, semver-major
-    'react/no-typos': 'off',
+    'react/no-typos': 'error',
+
+    // Enforce curly braces or disallow unnecessary curly braces in JSX props and/or children
+    // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/jsx-curly-brace-presence.md
+    'react/jsx-curly-brace-presence': ['error', { props: 'never', children: 'never' }]
   },
 
   settings: {

From dfbeaaea4bf09be28463eea15979dd8c862fc10a Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Fri, 6 Oct 2017 10:40:05 -0700
Subject: [PATCH 1128/1591] [eslint config] v16.0.0

---
 packages/eslint-config-airbnb/CHANGELOG.md | 10 ++++++++++
 packages/eslint-config-airbnb/package.json |  2 +-
 2 files changed, 11 insertions(+), 1 deletion(-)

diff --git a/packages/eslint-config-airbnb/CHANGELOG.md b/packages/eslint-config-airbnb/CHANGELOG.md
index a1c3b5d188..8bba950e66 100644
--- a/packages/eslint-config-airbnb/CHANGELOG.md
+++ b/packages/eslint-config-airbnb/CHANGELOG.md
@@ -1,3 +1,13 @@
+16.0.0 / 2017-10-06
+==================
+- [breaking] [deps] require `eslint` `v4`, update `eslint-config-airbnb-base`
+- [breaking] [deps] Upgrade `eslint-plugin-jsx-a11y` to `v6`; enable more a11y rules (#1482)
+- [breaking] enable/add react rules: `react/jsx-curly-brace-presence`, `react/no-typos`, `react/no-unused-state`, `react/no-redundant-should-component-update`, `react/default-props-match-prop-types`
+- [new] add `propWrapperFunctions` default settings for `eslint-plugin-react`
+- [new] Enable `react/jsx-closing-tag-location` (#1533)
+- [deps] update `eslint` v4, `eslint-plugin-react`, `tape`
+- [docs] Specify yarn-specific install instructions (#1511)
+
 15.1.0 / 2017-07-24
 ==================
 - [deps] allow eslint v3 or v4 (#1447)
diff --git a/packages/eslint-config-airbnb/package.json b/packages/eslint-config-airbnb/package.json
index 1723a6934e..e9b1550511 100644
--- a/packages/eslint-config-airbnb/package.json
+++ b/packages/eslint-config-airbnb/package.json
@@ -1,6 +1,6 @@
 {
   "name": "eslint-config-airbnb",
-  "version": "15.1.0",
+  "version": "16.0.0",
   "description": "Airbnb's ESLint config, following our styleguide",
   "main": "index.js",
   "scripts": {

From ac2ed5a749ea9649105dc52f1bdefead46f2c73d Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?David=20K=C3=BCnnen?=
 <7766565+DavidKuennen@users.noreply.github.com>
Date: Thu, 12 Oct 2017 13:30:18 +0200
Subject: [PATCH 1129/1591] Added our company to "In The Wild"

---
 README.md | 1 +
 1 file changed, 1 insertion(+)

diff --git a/README.md b/README.md
index fdfcca7a59..adc3fae08c 100644
--- a/README.md
+++ b/README.md
@@ -3336,6 +3336,7 @@ Other Style Guides
 
   This is a list of organizations that are using this style guide. Send us a pull request and we'll add you to the list.
 
+  - **123erfasst**: [123erfasst/javascript](https://github.com/123erfasst/javascript)
   - **3blades**: [3Blades/javascript](https://github.com/3blades/javascript)
   - **4Catalyzer**: [4Catalyzer/javascript](https://github.com/4Catalyzer/javascript)
   - **Aan Zee**: [AanZee/javascript](https://github.com/AanZee/javascript)

From 62d8d66049b04d35a87e86a8bcd2425a2fc0243c Mon Sep 17 00:00:00 2001
From: Pirasis Leelatanon <1pete@users.noreply.github.com>
Date: Fri, 13 Oct 2017 10:33:59 +0700
Subject: [PATCH 1130/1591] [eslint config] sort peerDependencies in
 alphabetical order

---
 packages/eslint-config-airbnb/package.json | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/packages/eslint-config-airbnb/package.json b/packages/eslint-config-airbnb/package.json
index e9b1550511..041464a23c 100644
--- a/packages/eslint-config-airbnb/package.json
+++ b/packages/eslint-config-airbnb/package.json
@@ -66,8 +66,8 @@
   },
   "peerDependencies": {
     "eslint": "^4.8.0",
-    "eslint-plugin-jsx-a11y": "^6.0.2",
     "eslint-plugin-import": "^2.7.0",
+    "eslint-plugin-jsx-a11y": "^6.0.2",
     "eslint-plugin-react": "^7.4.0"
   },
   "engines": {

From 3581bac32fdeeefca4dee4ceabbf879ae585462b Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Mon, 16 Oct 2017 11:42:13 -0700
Subject: [PATCH 1131/1591] [eslint config] [base] [deps] update `eslint` to
 `v4.9`

---
 packages/eslint-config-airbnb-base/package.json       |  6 +++---
 .../eslint-config-airbnb-base/rules/best-practices.js |  4 +++-
 packages/eslint-config-airbnb-base/rules/style.js     | 11 ++++++++++-
 3 files changed, 16 insertions(+), 5 deletions(-)

diff --git a/packages/eslint-config-airbnb-base/package.json b/packages/eslint-config-airbnb-base/package.json
index 81c1011774..6fc7d259b7 100644
--- a/packages/eslint-config-airbnb-base/package.json
+++ b/packages/eslint-config-airbnb-base/package.json
@@ -5,7 +5,7 @@
   "main": "index.js",
   "scripts": {
     "prelint": "editorconfig-tools check * rules/* test/*",
-    "lint": "eslint .",
+    "lint": "eslint --report-unused-disable-directives .",
     "tests-only": "babel-tape-runner ./test/test-*.js",
     "prepublish": "(in-install || eslint-find-rules --unused) && (not-in-publish || npm test) && safe-publish-latest",
     "pretest": "npm run --silent lint",
@@ -51,7 +51,7 @@
     "babel-preset-airbnb": "^2.4.0",
     "babel-tape-runner": "^2.0.1",
     "editorconfig-tools": "^0.1.1",
-    "eslint": "^4.8.0",
+    "eslint": "^4.9.0",
     "eslint-find-rules": "^3.1.1",
     "eslint-plugin-import": "^2.7.0",
     "in-publish": "^2.0.0",
@@ -59,7 +59,7 @@
     "tape": "^4.8.0"
   },
   "peerDependencies": {
-    "eslint": "^4.8.0",
+    "eslint": "^4.9.0",
     "eslint-plugin-import": "^2.7.0"
   },
   "engines": {
diff --git a/packages/eslint-config-airbnb-base/rules/best-practices.js b/packages/eslint-config-airbnb-base/rules/best-practices.js
index 83808bb879..d712e8a9a4 100644
--- a/packages/eslint-config-airbnb-base/rules/best-practices.js
+++ b/packages/eslint-config-airbnb-base/rules/best-practices.js
@@ -57,7 +57,9 @@ module.exports = {
     'no-div-regex': 'off',
 
     // disallow else after a return in an if
-    'no-else-return': 'error',
+    // https://eslint.org/docs/rules/no-else-return
+    // TODO: semver-major, set allowElseIf to false
+    'no-else-return': ['error', { allowElseIf: true }],
 
     // disallow empty functions, except for standalone funcs/arrows
     // http://eslint.org/docs/rules/no-empty-function
diff --git a/packages/eslint-config-airbnb-base/rules/style.js b/packages/eslint-config-airbnb-base/rules/style.js
index 328468dd38..88f4210dba 100644
--- a/packages/eslint-config-airbnb-base/rules/style.js
+++ b/packages/eslint-config-airbnb-base/rules/style.js
@@ -3,7 +3,7 @@ module.exports = {
     // enforce line breaks after opening and before closing array brackets
     // http://eslint.org/docs/rules/array-bracket-newline
     // TODO: enable? semver-major
-    'array-bracket-newline': ['off', { multiline: true, minItems: 3 }],
+    'array-bracket-newline': ['off', 'consistent'], // object option alternative: { multiline: true, minItems: 3 }
 
     // enforce line breaks between array elements
     // http://eslint.org/docs/rules/array-element-newline
@@ -153,6 +153,11 @@ module.exports = {
     // http://eslint.org/docs/rules/linebreak-style
     'linebreak-style': ['error', 'unix'],
 
+    // require or disallow an empty line between class members
+    // https://eslint.org/docs/rules/lines-between-class-members
+    // TODO: semver-major: enable
+    'lines-between-class-members': ['off', 'always', { exceptAfterSingleLine: false }],
+
     // enforces empty lines around comments
     'lines-around-comment': 'off',
 
@@ -197,6 +202,10 @@ module.exports = {
     // http://eslint.org/docs/rules/max-statements-per-line
     'max-statements-per-line': ['off', { max: 1 }],
 
+    // enforce a particular style for multiline comments
+    // https://eslint.org/docs/rules/multiline-comment-style
+    'multiline-comment-style': ['off', 'starred-block'],
+
     // require multiline ternary
     // http://eslint.org/docs/rules/multiline-ternary
     // TODO: enable?

From 9025c52a73dd5dfc1f4fc4f490d453830ff735f4 Mon Sep 17 00:00:00 2001
From: Pirasis Leelatanon <1pete@users.noreply.github.com>
Date: Mon, 16 Oct 2017 21:18:48 +0700
Subject: [PATCH 1132/1591] [doc] add eslint rule reference for
 `prefer-destructuring`

---
 README.md | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/README.md b/README.md
index adc3fae08c..3391bdcffe 100644
--- a/README.md
+++ b/README.md
@@ -479,7 +479,7 @@ Other Style Guides
 ## Destructuring
 
   <a name="destructuring--object"></a><a name="5.1"></a>
-  - [5.1](#destructuring--object) Use object destructuring when accessing and using multiple properties of an object. jscs: [`requireObjectDestructuring`](http://jscs.info/rule/requireObjectDestructuring)
+  - [5.1](#destructuring--object) Use object destructuring when accessing and using multiple properties of an object. eslint: [`prefer-destructuring`](https://eslint.org/docs/rules/prefer-destructuring) jscs: [`requireObjectDestructuring`](http://jscs.info/rule/requireObjectDestructuring)
 
     > Why? Destructuring saves you from creating temporary references for those properties.
 
@@ -505,7 +505,7 @@ Other Style Guides
     ```
 
   <a name="destructuring--array"></a><a name="5.2"></a>
-  - [5.2](#destructuring--array) Use array destructuring. jscs: [`requireArrayDestructuring`](http://jscs.info/rule/requireArrayDestructuring)
+  - [5.2](#destructuring--array) Use array destructuring. eslint: [`prefer-destructuring`](https://eslint.org/docs/rules/prefer-destructuring) jscs: [`requireArrayDestructuring`](http://jscs.info/rule/requireArrayDestructuring)
 
     ```javascript
     const arr = [1, 2, 3, 4];

From 7f61af685c928d5e1b5e7a9bb6bbdb5cd781a861 Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Mon, 16 Oct 2017 11:50:50 -0700
Subject: [PATCH 1133/1591] [eslint config] [base] v12.1.0

---
 packages/eslint-config-airbnb-base/CHANGELOG.md | 4 ++++
 packages/eslint-config-airbnb-base/package.json | 2 +-
 2 files changed, 5 insertions(+), 1 deletion(-)

diff --git a/packages/eslint-config-airbnb-base/CHANGELOG.md b/packages/eslint-config-airbnb-base/CHANGELOG.md
index 68275e325d..6dd34427fc 100644
--- a/packages/eslint-config-airbnb-base/CHANGELOG.md
+++ b/packages/eslint-config-airbnb-base/CHANGELOG.md
@@ -1,3 +1,7 @@
+12.1.0 / 2017-10-16
+==================
+ - [deps] update `eslint` to `v4.9`
+
 12.0.2 / 2017-10-05
 ==================
  - [deps] update `eslint`
diff --git a/packages/eslint-config-airbnb-base/package.json b/packages/eslint-config-airbnb-base/package.json
index 6fc7d259b7..cf83b916ae 100644
--- a/packages/eslint-config-airbnb-base/package.json
+++ b/packages/eslint-config-airbnb-base/package.json
@@ -1,6 +1,6 @@
 {
   "name": "eslint-config-airbnb-base",
-  "version": "12.0.2",
+  "version": "12.1.0",
   "description": "Airbnb's base JS ESLint config, following our styleguide",
   "main": "index.js",
   "scripts": {

From ec4b9b109a6e5b2fa836be2c2ec7c1d581e9743d Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Mon, 16 Oct 2017 12:00:49 -0700
Subject: [PATCH 1134/1591] [eslint config] [deps] update
 `eslint-config-airbnb-base`, `eslint` to v4.9

---
 packages/eslint-config-airbnb/package.json | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/packages/eslint-config-airbnb/package.json b/packages/eslint-config-airbnb/package.json
index 041464a23c..f48b81931d 100644
--- a/packages/eslint-config-airbnb/package.json
+++ b/packages/eslint-config-airbnb/package.json
@@ -48,13 +48,13 @@
   },
   "homepage": "https://github.com/airbnb/javascript",
   "dependencies": {
-    "eslint-config-airbnb-base": "^12.0.2"
+    "eslint-config-airbnb-base": "^12.1.0"
   },
   "devDependencies": {
     "babel-preset-airbnb": "^2.4.0",
     "babel-tape-runner": "^2.0.1",
     "editorconfig-tools": "^0.1.1",
-    "eslint": "^4.8.0",
+    "eslint": "^4.9.0",
     "eslint-find-rules": "^3.1.1",
     "eslint-plugin-import": "^2.7.0",
     "eslint-plugin-jsx-a11y": "^6.0.2",
@@ -65,7 +65,7 @@
     "tape": "^4.8.0"
   },
   "peerDependencies": {
-    "eslint": "^4.8.0",
+    "eslint": "^4.9.0",
     "eslint-plugin-import": "^2.7.0",
     "eslint-plugin-jsx-a11y": "^6.0.2",
     "eslint-plugin-react": "^7.4.0"

From cf9e17efee72121b17507b030c04f9b11c521a9b Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Mon, 16 Oct 2017 12:01:21 -0700
Subject: [PATCH 1135/1591] [eslint config] v16.1.0

---
 packages/eslint-config-airbnb/CHANGELOG.md | 4 ++++
 packages/eslint-config-airbnb/package.json | 2 +-
 2 files changed, 5 insertions(+), 1 deletion(-)

diff --git a/packages/eslint-config-airbnb/CHANGELOG.md b/packages/eslint-config-airbnb/CHANGELOG.md
index 8bba950e66..ae38f3c048 100644
--- a/packages/eslint-config-airbnb/CHANGELOG.md
+++ b/packages/eslint-config-airbnb/CHANGELOG.md
@@ -1,3 +1,7 @@
+16.1.0 / 2017-10-16
+==================
+- [deps] update `eslint-config-airbnb-base`, `eslint` to v4.9
+
 16.0.0 / 2017-10-06
 ==================
 - [breaking] [deps] require `eslint` `v4`, update `eslint-config-airbnb-base`
diff --git a/packages/eslint-config-airbnb/package.json b/packages/eslint-config-airbnb/package.json
index f48b81931d..14746226d7 100644
--- a/packages/eslint-config-airbnb/package.json
+++ b/packages/eslint-config-airbnb/package.json
@@ -1,6 +1,6 @@
 {
   "name": "eslint-config-airbnb",
-  "version": "16.0.0",
+  "version": "16.1.0",
   "description": "Airbnb's ESLint config, following our styleguide",
   "main": "index.js",
   "scripts": {

From 6e1f11185d95432ba90a647efc027bd32983f17d Mon Sep 17 00:00:00 2001
From: Sharmila <sharmila.jesupaul@airbnb.com>
Date: Wed, 18 Oct 2017 11:42:26 -0700
Subject: [PATCH 1136/1591] [eslint config] [base] Enables eslint rule for
 operator-linebreak

Requiring operators at the beginning of the line makes code more readable. When operators are on the left hand side they mirror the syntax of method chaining and it is easy to see the build of logic in a statement.
---
 packages/eslint-config-airbnb-base/rules/style.js | 5 +++--
 1 file changed, 3 insertions(+), 2 deletions(-)

diff --git a/packages/eslint-config-airbnb-base/rules/style.js b/packages/eslint-config-airbnb-base/rules/style.js
index 88f4210dba..3195e875ae 100644
--- a/packages/eslint-config-airbnb-base/rules/style.js
+++ b/packages/eslint-config-airbnb-base/rules/style.js
@@ -374,8 +374,9 @@ module.exports = {
     // http://eslint.org/docs/rules/operator-assignment
     'operator-assignment': ['error', 'always'],
 
-    // enforce operators to be placed before or after line breaks
-    'operator-linebreak': 'off',
+    // Requires operator at the beginning of the line in multiline statements
+    // https://eslint.org/docs/rules/operator-linebreak
+    'operator-linebreak': ['error', 'before'],
 
     // disallow padding within blocks
     'padded-blocks': ['error', { blocks: 'never', classes: 'never', switches: 'never' }],

From 2ab0e618582f5b64e406fe81fb5c9540b3be9824 Mon Sep 17 00:00:00 2001
From: Sharmila <sharmila.jesupaul@airbnb.com>
Date: Wed, 18 Oct 2017 11:56:06 -0700
Subject: [PATCH 1137/1591] Updates Control Statements section to reflect
 eslint config change

---
 README.md | 26 ++++++++++++++------------
 1 file changed, 14 insertions(+), 12 deletions(-)

diff --git a/README.md b/README.md
index 3391bdcffe..50212d6d8b 100644
--- a/README.md
+++ b/README.md
@@ -1998,7 +1998,9 @@ Other Style Guides
 ## Control Statements
 
   <a name="control-statements"></a>
-  - [17.1](#control-statements) In case your control statement (`if`, `while` etc.) gets too long or exceeds the maximum line length, each (grouped) condition could be put into a new line. It’s up to you whether the logical operator should begin or end the line.
+  - [17.1](#control-statements) In case your control statement (`if`, `while` etc.) gets too long or exceeds the maximum line length, each (grouped) condition could be put into a new line. The logical operator should begin the line.
+
+  > Why? This ensures readability.
 
     ```javascript
     // bad
@@ -2018,33 +2020,33 @@ Other Style Guides
       thing1();
     }
 
-    // good
+    // bad
     if (
-      (foo === 123 || bar === "abc") &&
-      doesItLookGoodWhenItBecomesThatLong() &&
-      isThisReallyHappening()
+      foo === 123 &&
+      bar === 'abc'
     ) {
       thing1();
     }
 
     // good
-    if (foo === 123 && bar === 'abc') {
+    if (
+      foo === 123
+      && bar === 'abc'
+    ) {
       thing1();
     }
 
     // good
     if (
-      foo === 123 &&
-      bar === 'abc'
+      (foo === 123 || bar === "abc")
+      && doesItLookGoodWhenItBecomesThatLong()
+      && isThisReallyHappening()
     ) {
       thing1();
     }
 
     // good
-    if (
-      foo === 123
-      && bar === 'abc'
-    ) {
+    if (foo === 123 && bar === 'abc') {
       thing1();
     }
     ```

From 6fbc47256ef0671be7f11cb3016489f6a9afa16a Mon Sep 17 00:00:00 2001
From: Sharmila <sharmila.jesupaul@airbnb.com>
Date: Wed, 18 Oct 2017 13:34:15 -0700
Subject: [PATCH 1138/1591] Fixes test syles

---
 packages/eslint-config-airbnb-base/test/test-base.js | 4 ++--
 packages/eslint-config-airbnb/test/test-base.js      | 4 ++--
 2 files changed, 4 insertions(+), 4 deletions(-)

diff --git a/packages/eslint-config-airbnb-base/test/test-base.js b/packages/eslint-config-airbnb-base/test/test-base.js
index 6936e0eb24..01b5dd12d3 100644
--- a/packages/eslint-config-airbnb-base/test/test-base.js
+++ b/packages/eslint-config-airbnb-base/test/test-base.js
@@ -20,8 +20,8 @@ Object.keys(files).forEach(( // eslint-disable-line function-paren-newline
     t.plan(2);
 
     // scan plugins for react and fail if it is found
-    const hasReactPlugin = Object.prototype.hasOwnProperty.call(config, 'plugins') &&
-      config.plugins.indexOf('react') !== -1;
+    const hasReactPlugin = Object.prototype.hasOwnProperty.call(config, 'plugins')
+      && config.plugins.indexOf('react') !== -1;
     t.notOk(hasReactPlugin, 'there is no react plugin');
 
     // scan rules for react/ and fail if any exist
diff --git a/packages/eslint-config-airbnb/test/test-base.js b/packages/eslint-config-airbnb/test/test-base.js
index 2b946a462c..807191dfe3 100644
--- a/packages/eslint-config-airbnb/test/test-base.js
+++ b/packages/eslint-config-airbnb/test/test-base.js
@@ -22,8 +22,8 @@ Object.keys(files).forEach((name) => {
     t.plan(2);
 
     // scan plugins for react and fail if it is found
-    const hasReactPlugin = Object.prototype.hasOwnProperty.call(config, 'plugins') &&
-      config.plugins.indexOf('react') !== -1;
+    const hasReactPlugin = Object.prototype.hasOwnProperty.call(config, 'plugins')
+      && config.plugins.indexOf('react') !== -1;
     t.notOk(hasReactPlugin, 'there is no react plugin');
 
     // scan rules for react/ and fail if any exist

From f2a65c689831185975c97abc9558d96e4e8bbc46 Mon Sep 17 00:00:00 2001
From: Sharmila <sharmila.jesupaul@airbnb.com>
Date: Wed, 18 Oct 2017 13:41:24 -0700
Subject: [PATCH 1139/1591] Improves 'Why?' message

---
 README.md | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/README.md b/README.md
index 50212d6d8b..f0607fa1e8 100644
--- a/README.md
+++ b/README.md
@@ -2000,7 +2000,7 @@ Other Style Guides
   <a name="control-statements"></a>
   - [17.1](#control-statements) In case your control statement (`if`, `while` etc.) gets too long or exceeds the maximum line length, each (grouped) condition could be put into a new line. The logical operator should begin the line.
 
-  > Why? This ensures readability.
+  > Why? Having operators at the beginning of the line keeps the operators aligned and follows a pattern similar to method chaining. This also improves readability by making it easier to visually follow complex logic.
 
     ```javascript
     // bad

From 01e72b9963bd8ff6567001d6be1612701a79383d Mon Sep 17 00:00:00 2001
From: Thomas Grainger <tom@procensus.com>
Date: Mon, 16 Oct 2017 21:12:47 +0100
Subject: [PATCH 1140/1591] [eslint config] [base] [breaking] `no-else-return`:
 disallow else-if

---
 packages/eslint-config-airbnb-base/rules/best-practices.js | 3 +--
 1 file changed, 1 insertion(+), 2 deletions(-)

diff --git a/packages/eslint-config-airbnb-base/rules/best-practices.js b/packages/eslint-config-airbnb-base/rules/best-practices.js
index d712e8a9a4..559338074a 100644
--- a/packages/eslint-config-airbnb-base/rules/best-practices.js
+++ b/packages/eslint-config-airbnb-base/rules/best-practices.js
@@ -58,8 +58,7 @@ module.exports = {
 
     // disallow else after a return in an if
     // https://eslint.org/docs/rules/no-else-return
-    // TODO: semver-major, set allowElseIf to false
-    'no-else-return': ['error', { allowElseIf: true }],
+    'no-else-return': ['error', { allowElseIf: false }],
 
     // disallow empty functions, except for standalone funcs/arrows
     // http://eslint.org/docs/rules/no-empty-function

From cd4ec29ed33fde4f81184f81eeddbda0b561dcd2 Mon Sep 17 00:00:00 2001
From: Sharmila <sharmila.jesupaul@airbnb.com>
Date: Wed, 18 Oct 2017 11:42:26 -0700
Subject: [PATCH 1141/1591] [eslint config] [base] Enables eslint rule for
 operator-linebreak

Requiring operators at the beginning of the line makes code more readable. When operators are on the left hand side they mirror the syntax of method chaining and it is easy to see the build of logic in a statement. This also updates the readme and fixes a style violation as a result of adding this rule in eslint-config-airbnb/test/test-base.js and eslint-config-airbnb-base/test/test-base.js.
---
 README.md | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/README.md b/README.md
index f0607fa1e8..360d445742 100644
--- a/README.md
+++ b/README.md
@@ -2000,7 +2000,7 @@ Other Style Guides
   <a name="control-statements"></a>
   - [17.1](#control-statements) In case your control statement (`if`, `while` etc.) gets too long or exceeds the maximum line length, each (grouped) condition could be put into a new line. The logical operator should begin the line.
 
-  > Why? Having operators at the beginning of the line keeps the operators aligned and follows a pattern similar to method chaining. This also improves readability by making it easier to visually follow complex logic.
+  > Why? Requiring operators at the beginning of the line keeps the operators aligned and follows a pattern similar to method chaining. This also improves readability by making it easier to visually follow complex logic.
 
     ```javascript
     // bad

From 2b3c86d8124729eb2207e596512222dd3f5f82fe Mon Sep 17 00:00:00 2001
From: Sharmila <sharmila.jesupaul@airbnb.com>
Date: Wed, 18 Oct 2017 14:50:58 -0700
Subject: [PATCH 1142/1591] Fixes indentation

---
 README.md | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/README.md b/README.md
index 360d445742..6cbacc3b25 100644
--- a/README.md
+++ b/README.md
@@ -2000,7 +2000,7 @@ Other Style Guides
   <a name="control-statements"></a>
   - [17.1](#control-statements) In case your control statement (`if`, `while` etc.) gets too long or exceeds the maximum line length, each (grouped) condition could be put into a new line. The logical operator should begin the line.
 
-  > Why? Requiring operators at the beginning of the line keeps the operators aligned and follows a pattern similar to method chaining. This also improves readability by making it easier to visually follow complex logic.
+    > Why? Requiring operators at the beginning of the line keeps the operators aligned and follows a pattern similar to method chaining. This also improves readability by making it easier to visually follow complex logic.
 
     ```javascript
     // bad

From b66d6e42f3224cc4f8a138ecce34bf704e7a320c Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Wed, 18 Oct 2017 14:27:41 -0700
Subject: [PATCH 1143/1591] =?UTF-8?q?[eslint=20config]=20[base]=20[breakin?=
 =?UTF-8?q?g]=20`lines-between-class-members`:=20set=20to=20=E2=80=9Calway?=
 =?UTF-8?q?s=E2=80=9D?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 packages/eslint-config-airbnb-base/rules/style.js | 3 +--
 1 file changed, 1 insertion(+), 2 deletions(-)

diff --git a/packages/eslint-config-airbnb-base/rules/style.js b/packages/eslint-config-airbnb-base/rules/style.js
index 3195e875ae..2ce7582a03 100644
--- a/packages/eslint-config-airbnb-base/rules/style.js
+++ b/packages/eslint-config-airbnb-base/rules/style.js
@@ -155,8 +155,7 @@ module.exports = {
 
     // require or disallow an empty line between class members
     // https://eslint.org/docs/rules/lines-between-class-members
-    // TODO: semver-major: enable
-    'lines-between-class-members': ['off', 'always', { exceptAfterSingleLine: false }],
+    'lines-between-class-members': ['error', 'always', { exceptAfterSingleLine: false }],
 
     // enforces empty lines around comments
     'lines-around-comment': 'off',

From 6f2395a3f146863f4cba86cbf2433618828fa9f3 Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Wed, 18 Oct 2017 14:28:58 -0700
Subject: [PATCH 1144/1591] [eslint config] [base] [breaking] `import/named`:
 enable

---
 packages/eslint-config-airbnb-base/rules/imports.js | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/packages/eslint-config-airbnb-base/rules/imports.js b/packages/eslint-config-airbnb-base/rules/imports.js
index 81b845a871..6636d771ce 100644
--- a/packages/eslint-config-airbnb-base/rules/imports.js
+++ b/packages/eslint-config-airbnb-base/rules/imports.js
@@ -37,7 +37,7 @@ module.exports = {
 
     // ensure named imports coupled with named exports
     // https://github.com/benmosher/eslint-plugin-import/blob/master/docs/rules/named.md#when-not-to-use-it
-    'import/named': 'off',
+    'import/named': 'error',
 
     // ensure default import coupled with default export
     // https://github.com/benmosher/eslint-plugin-import/blob/master/docs/rules/default.md#when-not-to-use-it

From 8cfc97eee9e18efcca308115b21c075cff687b7c Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Wed, 18 Oct 2017 21:28:52 -0700
Subject: [PATCH 1145/1591] [Tests] fix linting tests

---
 packages/eslint-config-airbnb/package.json             | 2 +-
 packages/eslint-config-airbnb/test/test-react-order.js | 2 ++
 2 files changed, 3 insertions(+), 1 deletion(-)

diff --git a/packages/eslint-config-airbnb/package.json b/packages/eslint-config-airbnb/package.json
index 14746226d7..b35110c18b 100644
--- a/packages/eslint-config-airbnb/package.json
+++ b/packages/eslint-config-airbnb/package.json
@@ -12,7 +12,7 @@
     "test": "npm run --silent tests-only",
     "pretravis": "cd ../eslint-config-airbnb-base && npm install && npm link && cd - && npm link --no-save eslint-config-airbnb-base",
     "travis": "npm run --silent test",
-    "posttravis": "npm unlink eslint-config-airbnb-base >/dev/null &"
+    "posttravis": "npm unlink --no-save eslint-config-airbnb-base >/dev/null &"
   },
   "repository": {
     "type": "git",
diff --git a/packages/eslint-config-airbnb/test/test-react-order.js b/packages/eslint-config-airbnb/test/test-react-order.js
index 0e7fd9e6ec..e8fa989dbd 100644
--- a/packages/eslint-config-airbnb/test/test-react-order.js
+++ b/packages/eslint-config-airbnb/test/test-react-order.js
@@ -11,6 +11,8 @@ const cli = new CLIEngine({
   rules: {
     // It is okay to import devDependencies in tests.
     'import/no-extraneous-dependencies': [2, { devDependencies: true }],
+    // this doesn't matter for tests
+    'lines-between-class-members': 0,
   },
 });
 

From 67e34433e441779d18957b22329284b6d61d5920 Mon Sep 17 00:00:00 2001
From: Sharmila <sharmila.jesupaul@airbnb.com>
Date: Wed, 18 Oct 2017 21:16:01 -0700
Subject: [PATCH 1146/1591] Adds guide section for no-return-else

---
 README.md | 65 +++++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 65 insertions(+)

diff --git a/README.md b/README.md
index 6cbacc3b25..f1fbeb6e01 100644
--- a/README.md
+++ b/README.md
@@ -1993,6 +1993,71 @@ Other Style Guides
     }
     ```
 
+  <a name="blocks--no-else-return"></a><a name="16.3"></a>
+  - [16.3](#blocks--no-else-return) If an `if` block always executes a `return` statement, the subsequent `else` block is unnecessary. A `return` in an `else if` block following an `if` block that contains a `return` can be separated into multiple `if` blocks. eslint: [`no-else-return`](https://eslint.org/docs/rules/no-else-return)
+
+    ```javascript
+    // bad
+    function foo() {
+      if (x) {
+        return x;
+      } else {
+        return y;
+      }
+    }
+
+    // bad
+    function cats() {
+      if (x) {
+        return x;
+      } else if (y) {
+        return y;
+      }
+    }
+
+    // bad
+    function dogs() {
+      if (x) {
+        return x;
+      } else {
+        if (y) {
+          return y;
+        }
+      }
+    }
+
+    // good
+    function foo() {
+      if (x) {
+        return x;
+      }
+
+      return y;
+    }
+
+    // good
+    function cats() {
+      if (x) {
+        return x;
+      }
+
+      if (y) {
+        return y;
+      }
+    }
+
+    //good
+    function dogs(x) {
+      if (x) {
+        if (z) {
+          return y;
+        }
+      } else {
+        return z;
+      }
+    }
+    ```
+
 **[⬆ back to top](#table-of-contents)**
 
 ## Control Statements

From 39cf84f43b5abc921a339ef453669be4f7c69544 Mon Sep 17 00:00:00 2001
From: jabacchetta <jabacchetta@gmail.com>
Date: Thu, 19 Oct 2017 18:59:41 -0500
Subject: [PATCH 1147/1591] [guide] Add clarification to arrow functions
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

Clarify and correct explanation — to be consistent with section 7.1 (use named function expressions).
---
 README.md | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/README.md b/README.md
index f1fbeb6e01..f7d8a77e1b 100644
--- a/README.md
+++ b/README.md
@@ -912,11 +912,11 @@ Other Style Guides
 ## Arrow Functions
 
   <a name="arrows--use-them"></a><a name="8.1"></a>
-  - [8.1](#arrows--use-them) When you must use function expressions (as when passing an anonymous function), use arrow function notation. eslint: [`prefer-arrow-callback`](http://eslint.org/docs/rules/prefer-arrow-callback.html), [`arrow-spacing`](http://eslint.org/docs/rules/arrow-spacing.html) jscs: [`requireArrowFunctions`](http://jscs.info/rule/requireArrowFunctions)
+  - [8.1](#arrows--use-them) When you must use an anonymous function (as when passing an inline callback), use arrow function notation. eslint: [`prefer-arrow-callback`](http://eslint.org/docs/rules/prefer-arrow-callback.html), [`arrow-spacing`](http://eslint.org/docs/rules/arrow-spacing.html) jscs: [`requireArrowFunctions`](http://jscs.info/rule/requireArrowFunctions)
 
     > Why? It creates a version of the function that executes in the context of `this`, which is usually what you want, and is a more concise syntax.
 
-    > Why not? If you have a fairly complicated function, you might move that logic out into its own function declaration.
+    > Why not? If you have a fairly complicated function, you might move that logic out into its own named function expression.
 
     ```javascript
     // bad

From 3c6d40ccca6c436b7628c6fd3d2fe6a7eb9aae1a Mon Sep 17 00:00:00 2001
From: jabacchetta <jabacchetta@gmail.com>
Date: Thu, 19 Oct 2017 19:46:28 -0500
Subject: [PATCH 1148/1591] [docs] Clarify reasoning for named function
 expressions

For convenience, added brief explanations that are given in the linked discussion (mostly eliminating the need to scroll through the comments).
---
 README.md | 5 +++--
 1 file changed, 3 insertions(+), 2 deletions(-)

diff --git a/README.md b/README.md
index f7d8a77e1b..f2fe1dc135 100644
--- a/README.md
+++ b/README.md
@@ -633,7 +633,7 @@ Other Style Guides
   <a name="functions--declarations"></a><a name="7.1"></a>
   - [7.1](#functions--declarations) Use named function expressions instead of function declarations. eslint: [`func-style`](http://eslint.org/docs/rules/func-style) jscs: [`disallowFunctionDeclarations`](http://jscs.info/rule/disallowFunctionDeclarations)
 
-    > Why? Function declarations are hoisted, which means that it’s easy - too easy - to reference the function before it is defined in the file. This harms readability and maintainability. If you find that a function’s definition is large or complex enough that it is interfering with understanding the rest of the file, then perhaps it’s time to extract it to its own module! Don’t forget to name the expression - anonymous functions can make it harder to locate the problem in an Error’s call stack. ([Discussion](https://github.com/airbnb/javascript/issues/794))
+    > Why? Function declarations are hoisted, which means that it’s easy - too easy - to reference the function before it is defined in the file. This harms readability and maintainability. If you find that a function’s definition is large or complex enough that it is interfering with understanding the rest of the file, then perhaps it’s time to extract it to its own module! Don’t forget to explicitly name the expression, regardless of whether or not the name is inferred from the containing variable (which is often the case in modern browsers or when using compilers such as Babel). This eliminates any assumptions made about the Error's call stack. ([Discussion](https://github.com/airbnb/javascript/issues/794))
 
     ```javascript
     // bad
@@ -647,7 +647,8 @@ Other Style Guides
     };
 
     // good
-    const foo = function bar() {
+    //  lexical name distinguished from the variable-referenced invocation(s)
+    const foo = function uniqueMoreDescriptiveLexicalFoo() {
       // ...
     };
     ```

From 94c47734e8ee11f720ddd1df28b9fa9d481a4941 Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Fri, 20 Oct 2017 15:48:09 -0700
Subject: [PATCH 1149/1591] [eslint config] [*] [deps] update
 `eslint-plugin-import`

---
 packages/eslint-config-airbnb-base/package.json     | 4 ++--
 packages/eslint-config-airbnb-base/rules/imports.js | 5 +++++
 packages/eslint-config-airbnb/package.json          | 4 ++--
 3 files changed, 9 insertions(+), 4 deletions(-)

diff --git a/packages/eslint-config-airbnb-base/package.json b/packages/eslint-config-airbnb-base/package.json
index cf83b916ae..2066ad1ab0 100644
--- a/packages/eslint-config-airbnb-base/package.json
+++ b/packages/eslint-config-airbnb-base/package.json
@@ -53,14 +53,14 @@
     "editorconfig-tools": "^0.1.1",
     "eslint": "^4.9.0",
     "eslint-find-rules": "^3.1.1",
-    "eslint-plugin-import": "^2.7.0",
+    "eslint-plugin-import": "^2.8.0",
     "in-publish": "^2.0.0",
     "safe-publish-latest": "^1.1.1",
     "tape": "^4.8.0"
   },
   "peerDependencies": {
     "eslint": "^4.9.0",
-    "eslint-plugin-import": "^2.7.0"
+    "eslint-plugin-import": "^2.8.0"
   },
   "engines": {
     "node": ">= 4"
diff --git a/packages/eslint-config-airbnb-base/rules/imports.js b/packages/eslint-config-airbnb-base/rules/imports.js
index 6636d771ce..54e158f57f 100644
--- a/packages/eslint-config-airbnb-base/rules/imports.js
+++ b/packages/eslint-config-airbnb-base/rules/imports.js
@@ -204,5 +204,10 @@ module.exports = {
       allowLiteral: false,
       allowObject: false,
     }],
+
+    // This rule enforces that all exports are declared at the bottom of the file.
+    // https://github.com/benmosher/eslint-plugin-import/blob/98acd6afd04dcb6920b81330114e146dc8532ea4/docs/rules/exports-last.md
+    // TODO: enable?
+    'import/exports-last': 'off',
   },
 };
diff --git a/packages/eslint-config-airbnb/package.json b/packages/eslint-config-airbnb/package.json
index b35110c18b..bdf9700026 100644
--- a/packages/eslint-config-airbnb/package.json
+++ b/packages/eslint-config-airbnb/package.json
@@ -56,7 +56,7 @@
     "editorconfig-tools": "^0.1.1",
     "eslint": "^4.9.0",
     "eslint-find-rules": "^3.1.1",
-    "eslint-plugin-import": "^2.7.0",
+    "eslint-plugin-import": "^2.8.0",
     "eslint-plugin-jsx-a11y": "^6.0.2",
     "eslint-plugin-react": "^7.4.0",
     "in-publish": "^2.0.0",
@@ -66,7 +66,7 @@
   },
   "peerDependencies": {
     "eslint": "^4.9.0",
-    "eslint-plugin-import": "^2.7.0",
+    "eslint-plugin-import": "^2.8.0",
     "eslint-plugin-jsx-a11y": "^6.0.2",
     "eslint-plugin-react": "^7.4.0"
   },

From 232b719fc5192075c03dd1fc07445982df718486 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E5=88=98=E5=86=B2?= <liuchong@users.noreply.github.com>
Date: Sat, 21 Oct 2017 22:11:18 +0800
Subject: [PATCH 1150/1591] To Clarify the func-style description

As "foo" is still meaningless, but with "short", we can see that, we are intend to use a short alias name to make our coding happily.
---
 README.md | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/README.md b/README.md
index f2fe1dc135..2af76733c7 100644
--- a/README.md
+++ b/README.md
@@ -648,7 +648,7 @@ Other Style Guides
 
     // good
     //  lexical name distinguished from the variable-referenced invocation(s)
-    const foo = function uniqueMoreDescriptiveLexicalFoo() {
+    const short = function longUniqueMoreDescriptiveLexicalFoo() {
       // ...
     };
     ```

From 97a68836215914c0ece2f221d1896a2e01f56a22 Mon Sep 17 00:00:00 2001
From: Liu Chong <mail@clojure.cn>
Date: Sun, 22 Oct 2017 14:10:35 +0800
Subject: [PATCH 1151/1591] Fix markdown style breaking

It came from the special characters "M-BM-":

```
diff README.md README.md.new | cat -A
651c651$
<     const foo = function uniqueMoreDescriptiveLexicalFoo() {$
---$
>  M-BM-  M-BM- const short = function longUniqueMoreDescriptiveLexicalFoo() {$
```
---
 README.md | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/README.md b/README.md
index 2af76733c7..134abe9e3c 100644
--- a/README.md
+++ b/README.md
@@ -647,8 +647,8 @@ Other Style Guides
     };
 
     // good
-    //  lexical name distinguished from the variable-referenced invocation(s)
-    const short = function longUniqueMoreDescriptiveLexicalFoo() {
+    // lexical name distinguished from the variable-referenced invocation(s)
+    const short = function longUniqueMoreDescriptiveLexicalFoo() {
       // ...
     };
     ```

From 8161f32f1ff7afb1d382a304db2690cee4d6a3e7 Mon Sep 17 00:00:00 2001
From: Sharmila <sharmila.jesupaul@airbnb.com>
Date: Fri, 20 Oct 2017 16:09:16 -0700
Subject: [PATCH 1152/1591] [eslint config] [base] [breaking]
 `no-mixed-operators`: only warn on `**` and `%` mixed with arithmetic
 operators; removes violation against mixing common math operators.

Fixes #1071.
---
 README.md                                     | 32 +++++++++++++++++++
 .../eslint-config-airbnb-base/rules/style.js  | 12 ++++++-
 2 files changed, 43 insertions(+), 1 deletion(-)

diff --git a/README.md b/README.md
index 134abe9e3c..4c304fcf4f 100644
--- a/README.md
+++ b/README.md
@@ -1943,6 +1943,38 @@ Other Style Guides
     const baz = !c;
     ```
 
+  <a name="comparison--no-mixed-operators"></a><a name="15.8"></a>
+  - [15.7](#comparison--no-mixed-operators) Enclose operators in parentheses when they are mixed in a statement. When mixing arithmetic operators, do not mix `**` and `%` with themselves or with `+`, `-`, `*`, & `/`. eslint: [`no-mixed-operators`](http://eslint.org/docs/rules/no-mixed-operators.html)
+
+    > Why? This improves readability and clarifies the developer’s intention.
+
+    ```javascript
+    // bad
+    const foo = a && b < 0 || c > 0 || d + 1 === 0;
+
+    // bad
+    const bar = a ** b - 5 % d;
+
+    // bad
+    if (a || b && c) {
+      return d;
+    }
+
+    // good
+    const foo = (a && b < 0) || c > 0 || (d + 1 === 0);
+
+    // good
+    const bar = (a ** b) - (5 % d);
+
+    // good
+    if ((a || b) && c) {
+      return d;
+    }
+
+    // good
+    const bar = a + b / c * d;
+    ```
+
 **[⬆ back to top](#table-of-contents)**
 
 ## Blocks
diff --git a/packages/eslint-config-airbnb-base/rules/style.js b/packages/eslint-config-airbnb-base/rules/style.js
index 2ce7582a03..fe621239fd 100644
--- a/packages/eslint-config-airbnb-base/rules/style.js
+++ b/packages/eslint-config-airbnb-base/rules/style.js
@@ -254,8 +254,18 @@ module.exports = {
     // disallow un-paren'd mixes of different operators
     // http://eslint.org/docs/rules/no-mixed-operators
     'no-mixed-operators': ['error', {
+      // the list of arthmetic groups disallows mixing `%` and `**`
+      // with other arithmetic operators.
       groups: [
-        ['+', '-', '*', '/', '%', '**'],
+        ['%', '**'],
+        ['%', '+'],
+        ['%', '-'],
+        ['%', '*'],
+        ['%', '/'],
+        ['**', '+'],
+        ['**', '-'],
+        ['**', '*'],
+        ['**', '/'],
         ['&', '|', '^', '~', '<<', '>>', '>>>'],
         ['==', '!=', '===', '!==', '>', '>=', '<', '<='],
         ['&&', '||'],

From dbd69346bde8b7edebfed3c2b092148bf3f449e1 Mon Sep 17 00:00:00 2001
From: Vse Mozhet Byt <vsemozhetbyt@gmail.com>
Date: Tue, 24 Oct 2017 00:07:05 +0300
Subject: [PATCH 1153/1591] [guide] Fix a numeration typo in README.md

 - also remove legacy numbered link
---
 README.md | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/README.md b/README.md
index 4c304fcf4f..677948fa09 100644
--- a/README.md
+++ b/README.md
@@ -1943,8 +1943,8 @@ Other Style Guides
     const baz = !c;
     ```
 
-  <a name="comparison--no-mixed-operators"></a><a name="15.8"></a>
-  - [15.7](#comparison--no-mixed-operators) Enclose operators in parentheses when they are mixed in a statement. When mixing arithmetic operators, do not mix `**` and `%` with themselves or with `+`, `-`, `*`, & `/`. eslint: [`no-mixed-operators`](http://eslint.org/docs/rules/no-mixed-operators.html)
+  <a name="comparison--no-mixed-operators"></a>
+  - [15.8](#comparison--no-mixed-operators) Enclose operators in parentheses when they are mixed in a statement. When mixing arithmetic operators, do not mix `**` and `%` with themselves or with `+`, `-`, `*`, & `/`. eslint: [`no-mixed-operators`](http://eslint.org/docs/rules/no-mixed-operators.html)
 
     > Why? This improves readability and clarifies the developer’s intention.
 

From bd3ba6edfe0f0fb907008a90c83846ced21a5c4d Mon Sep 17 00:00:00 2001
From: Arnav <arnav.aggarwal@thecontrolgroup.com>
Date: Mon, 23 Oct 2017 15:04:58 -0700
Subject: [PATCH 1154/1591] Add symbol as a primitive type

- Also add note that symbols cannot by polyfilled and should not be used in environments that don't support them
---
 README.md | 3 +++
 1 file changed, 3 insertions(+)

diff --git a/README.md b/README.md
index 677948fa09..282bd173f9 100644
--- a/README.md
+++ b/README.md
@@ -68,6 +68,7 @@ Other Style Guides
     - `boolean`
     - `null`
     - `undefined`
+    - `symbol`
 
     ```javascript
     const foo = 1;
@@ -78,6 +79,8 @@ Other Style Guides
     console.log(foo, bar); // => 1, 9
     ```
 
+    - Symbols cannot be faithfully polyfilled, so they should not be used when targeting browsers/environments that don't support them natively.
+
   <a name="types--complex"></a><a name="1.2"></a>
   - [1.2](#types--complex)  **Complex**: When you access a complex type you work on a reference to its value.
 

From ecf8e077a7d97695d17fab9f58f0948869a4672c Mon Sep 17 00:00:00 2001
From: Leonid Lebedev <lix.lebedev@yandex.ru>
Date: Tue, 24 Oct 2017 14:33:47 +0300
Subject: [PATCH 1155/1591] Remove unnecessary variables

---
 README.md | 2 --
 1 file changed, 2 deletions(-)

diff --git a/README.md b/README.md
index 282bd173f9..116e6a5762 100644
--- a/README.md
+++ b/README.md
@@ -405,14 +405,12 @@ Other Style Guides
     [1, 2, 3].map(x => x + 1);
 
     // bad - no returned value means `memo` becomes undefined after the first iteration
-    const flat = {};
     [[0, 1], [2, 3], [4, 5]].reduce((memo, item, index) => {
       const flatten = memo.concat(item);
       memo[index] = flatten;
     });
 
     // good
-    const flat = {};
     [[0, 1], [2, 3], [4, 5]].reduce((memo, item, index) => {
       const flatten = memo.concat(item);
       memo[index] = flatten;

From 2676cbfb2f9cae832f02f0ea43a9df3f024a24f9 Mon Sep 17 00:00:00 2001
From: Sharmila <sharmila.jesupaul@airbnb.com>
Date: Tue, 24 Oct 2017 17:36:18 -0700
Subject: [PATCH 1156/1591] [eslint config] [base] [breaking] Enables
 `nonblock-statement-body-position` rule and adds link to guide

---
 README.md                                         | 2 +-
 packages/eslint-config-airbnb-base/rules/style.js | 2 +-
 2 files changed, 2 insertions(+), 2 deletions(-)

diff --git a/README.md b/README.md
index 116e6a5762..c5f79a6f48 100644
--- a/README.md
+++ b/README.md
@@ -1981,7 +1981,7 @@ Other Style Guides
 ## Blocks
 
   <a name="blocks--braces"></a><a name="16.1"></a>
-  - [16.1](#blocks--braces) Use braces with all multi-line blocks.
+  - [16.1](#blocks--braces) Use braces with all multi-line blocks. eslint: [`nonblock-statement-body-position`](https://eslint.org/docs/rules/nonblock-statement-body-position)
 
     ```javascript
     // bad
diff --git a/packages/eslint-config-airbnb-base/rules/style.js b/packages/eslint-config-airbnb-base/rules/style.js
index fe621239fd..e358e2a417 100644
--- a/packages/eslint-config-airbnb-base/rules/style.js
+++ b/packages/eslint-config-airbnb-base/rules/style.js
@@ -354,7 +354,7 @@ module.exports = {
 
     // enforce the location of single-line statements
     // http://eslint.org/docs/rules/nonblock-statement-body-position
-    'nonblock-statement-body-position': 'off',
+    'nonblock-statement-body-position': ['error', 'beside', { overrides: {} }],
 
     // require padding inside curly braces
     'object-curly-spacing': ['error', 'always'],

From 999fe3b83ac9cb41bb7f1514baeb68c007a369a3 Mon Sep 17 00:00:00 2001
From: Piotr Lasota <lasota.piotr1@gmail.com>
Date: Wed, 25 Oct 2017 20:03:56 +0200
Subject: [PATCH 1157/1591] Change className to variant in examples

---
 react/README.md | 8 ++++----
 1 file changed, 4 insertions(+), 4 deletions(-)

diff --git a/react/README.md b/react/README.md
index 6ade245c42..d172990bf6 100644
--- a/react/README.md
+++ b/react/README.md
@@ -400,7 +400,7 @@
     ```jsx
     // bad
     render() {
-      return <MyComponent className="long body" foo="bar">
+      return <MyComponent variant="long body" foo="bar">
                <MyChild />
              </MyComponent>;
     }
@@ -408,7 +408,7 @@
     // good
     render() {
       return (
-        <MyComponent className="long body" foo="bar">
+        <MyComponent variant="long body" foo="bar">
           <MyChild />
         </MyComponent>
       );
@@ -427,10 +427,10 @@
 
     ```jsx
     // bad
-    <Foo className="stuff"></Foo>
+    <Foo variant="stuff"></Foo>
 
     // good
-    <Foo className="stuff" />
+    <Foo variant="stuff" />
     ```
 
   - If your component has multi-line properties, close its tag on a new line. eslint: [`react/jsx-closing-bracket-location`](https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/jsx-closing-bracket-location.md)

From 9d3e7e0a2c47dedf6032d77418a531e8abfd7762 Mon Sep 17 00:00:00 2001
From: Piotr Lasota <lasota.piotr1@gmail.com>
Date: Wed, 25 Oct 2017 20:05:40 +0200
Subject: [PATCH 1158/1591] Add component with className as anti-pattern
 example

---
 react/README.md | 3 +++
 1 file changed, 3 insertions(+)

diff --git a/react/README.md b/react/README.md
index d172990bf6..ee440e9b11 100644
--- a/react/README.md
+++ b/react/README.md
@@ -143,6 +143,9 @@
     // bad
     <MyComponent style="fancy" />
 
+    // bad
+    <MyComponent className="fancy" />
+
     // good
     <MyComponent variant="fancy" />
     ```

From 327795bf3c9bb8e4777d7b36387d01304dd7f46d Mon Sep 17 00:00:00 2001
From: Pirasis Leelatanon <1pete@users.noreply.github.com>
Date: Thu, 26 Oct 2017 02:36:13 +0700
Subject: [PATCH 1159/1591] [doc] add eslint rule reference for
 `no-new-wrappers`

---
 README.md | 9 ++++++---
 1 file changed, 6 insertions(+), 3 deletions(-)

diff --git a/README.md b/README.md
index c5f79a6f48..dd9e33241d 100644
--- a/README.md
+++ b/README.md
@@ -2796,11 +2796,14 @@ Other Style Guides
   - [22.1](#coercion--explicit) Perform type coercion at the beginning of the statement.
 
   <a name="coercion--strings"></a><a name="21.2"></a>
-  - [22.2](#coercion--strings)  Strings:
+  - [22.2](#coercion--strings)  Strings: eslint: [`no-new-wrappers`](https://eslint.org/docs/rules/no-new-wrappers)
 
     ```javascript
     // => this.reviewScore = 9;
 
+    // bad
+    const totalScore = new String(this.reviewScore); // typeof totalScore is "object" not "string"
+
     // bad
     const totalScore = this.reviewScore + ''; // invokes this.reviewScore.valueOf()
 
@@ -2812,7 +2815,7 @@ Other Style Guides
     ```
 
   <a name="coercion--numbers"></a><a name="21.3"></a>
-  - [22.3](#coercion--numbers) Numbers: Use `Number` for type casting and `parseInt` always with a radix for parsing strings. eslint: [`radix`](http://eslint.org/docs/rules/radix)
+  - [22.3](#coercion--numbers) Numbers: Use `Number` for type casting and `parseInt` always with a radix for parsing strings. eslint: [`radix`](http://eslint.org/docs/rules/radix) [`no-new-wrappers`](https://eslint.org/docs/rules/no-new-wrappers)
 
     ```javascript
     const inputValue = '4';
@@ -2859,7 +2862,7 @@ Other Style Guides
     ```
 
   <a name="coercion--booleans"></a><a name="21.6"></a>
-  - [22.6](#coercion--booleans) Booleans:
+  - [22.6](#coercion--booleans) Booleans: eslint: [`no-new-wrappers`](https://eslint.org/docs/rules/no-new-wrappers)
 
     ```javascript
     const age = 0;

From dbdf8ea0ef966903968230d7ee11de6fa084ea9c Mon Sep 17 00:00:00 2001
From: Pirasis Leelatanon <1pete@users.noreply.github.com>
Date: Thu, 26 Oct 2017 02:21:23 +0700
Subject: [PATCH 1160/1591] [doc] add eslint rule reference for
 `no-multi-assign`

---
 README.md | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/README.md b/README.md
index dd9e33241d..feac6b354f 100644
--- a/README.md
+++ b/README.md
@@ -1633,7 +1633,7 @@ Other Style Guides
     }
     ```
   <a name="variables--no-chain-assignment"></a><a name="13.5"></a>
-  - [13.5](#variables--no-chain-assignment) Don’t chain variable assignments.
+  - [13.5](#variables--no-chain-assignment) Don’t chain variable assignments. eslint: [`no-multi-assign`](https://eslint.org/docs/rules/no-multi-assign)
 
     > Why? Chaining variable assignments creates implicit global variables.
 

From c40d0d1f8444ba838e7550622334ad4418abf991 Mon Sep 17 00:00:00 2001
From: Vse Mozhet Byt <vsemozhetbyt@gmail.com>
Date: Sat, 28 Oct 2017 03:41:29 +0300
Subject: [PATCH 1161/1591] [guide] Fix a link, add an anchor

---
 README.md | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/README.md b/README.md
index feac6b354f..e23c729b0b 100644
--- a/README.md
+++ b/README.md
@@ -1704,7 +1704,7 @@ Other Style Guides
 ## Hoisting
 
   <a name="hoisting--about"></a><a name="14.1"></a>
-  - [14.1](#hoisting--about) `var` declarations get hoisted to the top of their scope, their assignment does not. `const` and `let` declarations are blessed with a new concept called [Temporal Dead Zones (TDZ)](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/let#Temporal_dead_zone_and_errors_with_let). It’s important to know why [typeof is no longer safe](http://es-discourse.com/t/why-typeof-is-no-longer-safe/15).
+  - [14.1](#hoisting--about) `var` declarations get hoisted to the top of their scope, their assignment does not. `const` and `let` declarations are blessed with a new concept called [Temporal Dead Zones (TDZ)](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/let#Temporal_Dead_Zone_and_errors_with_let). It’s important to know why [typeof is no longer safe](http://es-discourse.com/t/why-typeof-is-no-longer-safe/15).
 
     ```javascript
     // we know this wouldn’t work (assuming there
@@ -2223,6 +2223,7 @@ Other Style Guides
     }
     ```
 
+  <a name="comments--spaces"></a>
   - [18.3](#comments--spaces) Start all comments with a space to make it easier to read. eslint: [`spaced-comment`](http://eslint.org/docs/rules/spaced-comment)
 
     ```javascript

From 2d4343acd19bd7700a69b514d01889c7041d65fb Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Fri, 27 Oct 2017 22:10:32 -0700
Subject: [PATCH 1162/1591] [guide] remove/update outdated links.

Fixes #1626.
---
 README.md | 25 ++++++++++++-------------
 1 file changed, 12 insertions(+), 13 deletions(-)

diff --git a/README.md b/README.md
index e23c729b0b..d26d1824be 100644
--- a/README.md
+++ b/README.md
@@ -670,7 +670,7 @@ Other Style Guides
   - [7.3](#functions--in-blocks) Never declare a function in a non-function block (`if`, `while`, etc). Assign the function to a variable instead. Browsers will allow you to do it, but they all interpret it differently, which is bad news bears. eslint: [`no-loop-func`](http://eslint.org/docs/rules/no-loop-func.html)
 
   <a name="functions--note-on-blocks"></a><a name="7.4"></a>
-  - [7.4](#functions--note-on-blocks) **Note:** ECMA-262 defines a `block` as a list of statements. A function declaration is not a statement. [Read ECMA-262’s note on this issue](http://www.ecma-international.org/publications/files/ECMA-ST/Ecma-262.pdf#page=97).
+  - [7.4](#functions--note-on-blocks) **Note:** ECMA-262 defines a `block` as a list of statements. A function declaration is not a statement.
 
     ```javascript
     // bad
@@ -3358,9 +3358,9 @@ Other Style Guides
 
 ## Resources
 
-**Learning ES6**
+**Learning ES6+**
 
-  - [Draft ECMA 2015 (ES6) Spec](https://people.mozilla.org/~jorendorff/es6-draft.html)
+  - [Latest ECMA spec](https://tc39.github.io/ecma262/)
   - [ExploringJS](http://exploringjs.com/)
   - [ES6 Compatibility Table](https://kangax.github.io/compat-table/es6/)
   - [Comprehensive Overview of ES6 Features](http://es6-features.org/)
@@ -3427,7 +3427,6 @@ Other Style Guides
   - [Perfection Kills](http://perfectionkills.com/)
   - [Ben Alman](http://benalman.com/)
   - [Dmitry Baranovskiy](http://dmitry.baranovskiy.com/)
-  - [Dustin Diaz](http://dustindiaz.com/)
   - [nettuts](http://code.tutsplus.com/?s=javascript)
 
 **Podcasts**
@@ -3442,7 +3441,7 @@ Other Style Guides
   This is a list of organizations that are using this style guide. Send us a pull request and we'll add you to the list.
 
   - **123erfasst**: [123erfasst/javascript](https://github.com/123erfasst/javascript)
-  - **3blades**: [3Blades/javascript](https://github.com/3blades/javascript)
+  - **3blades**: [3Blades](https://github.com/3blades)
   - **4Catalyzer**: [4Catalyzer/javascript](https://github.com/4Catalyzer/javascript)
   - **Aan Zee**: [AanZee/javascript](https://github.com/AanZee/javascript)
   - **Adult Swim**: [adult-swim/javascript](https://github.com/adult-swim/javascript)
@@ -3455,7 +3454,7 @@ Other Style Guides
   - **Axept**: [axept/javascript](https://github.com/axept/javascript)
   - **BashPros**: [BashPros/javascript](https://github.com/BashPros/javascript)
   - **Billabong**: [billabong/javascript](https://github.com/billabong/javascript)
-  - **Bisk**: [bisk/javascript](https://github.com/Bisk/javascript/)
+  - **Bisk**: [bisk](https://github.com/Bisk/)
   - **Bonhomme**: [bonhommeparis/javascript](https://github.com/bonhommeparis/javascript)
   - **Brainshark**: [brainshark/javascript](https://github.com/brainshark/javascript)
   - **CaseNine**: [CaseNine/javascript](https://github.com/CaseNine/javascript)
@@ -3472,7 +3471,7 @@ Other Style Guides
   - **ExactTarget**: [ExactTarget/javascript](https://github.com/ExactTarget/javascript)
   - **Expensify** [Expensify/Style-Guide](https://github.com/Expensify/Style-Guide/blob/master/javascript.md)
   - **Flexberry**: [Flexberry/javascript-style-guide](https://github.com/Flexberry/javascript-style-guide)
-  - **Gawker Media**: [gawkermedia/javascript](https://github.com/gawkermedia/javascript)
+  - **Gawker Media**: [gawkermedia](https://github.com/gawkermedia/)
   - **General Electric**: [GeneralElectric/javascript](https://github.com/GeneralElectric/javascript)
   - **Generation Tux**: [GenerationTux/javascript](https://github.com/generationtux/styleguide)
   - **GoodData**: [gooddata/gdc-js-style](https://github.com/gooddata/gdc-js-style)
@@ -3480,7 +3479,7 @@ Other Style Guides
   - **Grupo-Abraxas**: [Grupo-Abraxas/javascript](https://github.com/Grupo-Abraxas/javascript)
   - **Honey**: [honeyscience/javascript](https://github.com/honeyscience/javascript)
   - **How About We**: [howaboutwe/javascript](https://github.com/howaboutwe/javascript-style-guide)
-  - **Huballin**: [huballin/javascript](https://github.com/huballin/javascript)
+  - **Huballin**: [huballin](https://github.com/huballin/)
   - **HubSpot**: [HubSpot/javascript](https://github.com/HubSpot/javascript)
   - **Hyper**: [hyperoslo/javascript-playbook](https://github.com/hyperoslo/javascript-playbook/blob/master/style.md)
   - **InterCity Group**: [intercitygroup/javascript-style-guide](https://github.com/intercitygroup/javascript-style-guide)
@@ -3488,7 +3487,7 @@ Other Style Guides
   - **JeopardyBot**: [kesne/jeopardy-bot](https://github.com/kesne/jeopardy-bot/blob/master/STYLEGUIDE.md)
   - **JSSolutions**: [JSSolutions/javascript](https://github.com/JSSolutions/javascript)
   - **Kaplan Komputing**: [kaplankomputing/javascript](https://github.com/kaplankomputing/javascript)
-  - **KickorStick**: [kickorstick/javascript](https://github.com/kickorstick/javascript)
+  - **KickorStick**: [kickorstick](https://github.com/kickorstick/)
   - **Kinetica Solutions**: [kinetica/javascript](https://github.com/kinetica/Javascript-style-guide)
   - **LEINWAND**: [LEINWAND/javascript](https://github.com/LEINWAND/javascript)
   - **Lonely Planet**: [lonelyplanet/javascript](https://github.com/lonelyplanet/javascript)
@@ -3498,8 +3497,8 @@ Other Style Guides
   - **MitocGroup**: [MitocGroup/javascript](https://github.com/MitocGroup/javascript)
   - **ModCloth**: [modcloth/javascript](https://github.com/modcloth/javascript)
   - **Money Advice Service**: [moneyadviceservice/javascript](https://github.com/moneyadviceservice/javascript)
-  - **Muber**: [muber/javascript](https://github.com/muber/javascript)
-  - **National Geographic**: [natgeo/javascript](https://github.com/natgeo/javascript)
+  - **Muber**: [muber](https://github.com/muber/)
+  - **National Geographic**: [natgeo](https://github.com/natgeo/)
   - **Nimbl3**: [nimbl3/javascript](https://github.com/nimbl3/javascript)
   - **Nulogy**: [nulogy/javascript](https://github.com/nulogy/javascript)
   - **Orange Hill Development**: [orangehill/javascript](https://github.com/orangehill/javascript)
@@ -3509,13 +3508,13 @@ Other Style Guides
   - **Razorfish**: [razorfish/javascript-style-guide](https://github.com/razorfish/javascript-style-guide)
   - **reddit**: [reddit/styleguide/javascript](https://github.com/reddit/styleguide/tree/master/javascript)
   - **React**: [facebook.github.io/react/contributing/how-to-contribute.html#style-guide](https://facebook.github.io/react/contributing/how-to-contribute.html#style-guide)
-  - **REI**: [reidev/js-style-guide](https://github.com/rei/code-style-guides/blob/master/docs/javascript.md)
+  - **REI**: [reidev/js-style-guide](https://github.com/rei/code-style-guides/)
   - **Ripple**: [ripple/javascript-style-guide](https://github.com/ripple/javascript-style-guide)
   - **Sainsbury's Supermarkets**: [jsainsburyplc](https://github.com/jsainsburyplc)
   - **SeekingAlpha**: [seekingalpha/javascript-style-guide](https://github.com/seekingalpha/javascript-style-guide)
   - **Shutterfly**: [shutterfly/javascript](https://github.com/shutterfly/javascript)
   - **Sourcetoad**: [sourcetoad/javascript](https://github.com/sourcetoad/javascript)
-  - **Springload**: [springload/javascript](https://github.com/springload/javascript)
+  - **Springload**: [springload](https://github.com/springload/)
   - **StratoDem Analytics**: [stratodem/javascript](https://github.com/stratodem/javascript)
   - **SteelKiwi Development**: [steelkiwi/javascript](https://github.com/steelkiwi/javascript)
   - **StudentSphere**: [studentsphere/javascript](https://github.com/studentsphere/guide-javascript)

From 7ff6303513b46e8b7dd0bc03327b138a6db7b3b4 Mon Sep 17 00:00:00 2001
From: Ed Morley <501702+edmorley@users.noreply.github.com>
Date: Mon, 30 Oct 2017 13:10:30 +0000
Subject: [PATCH 1163/1591] [guide] Use HTTPS for links to ESLint documentation

The result of a `s_http://eslint\.org_https://eslint\.org_g`.
Avoids the HTTP 302s of the non-HTTPs URLs.
---
 README.md                                     | 126 +++++++++---------
 packages/eslint-config-airbnb-base/README.md  |   2 +-
 .../rules/best-practices.js                   |  50 +++----
 .../eslint-config-airbnb-base/rules/errors.js |  26 ++--
 .../eslint-config-airbnb-base/rules/es6.js    |  54 ++++----
 .../eslint-config-airbnb-base/rules/node.js   |   6 +-
 .../eslint-config-airbnb-base/rules/style.js  |  92 ++++++-------
 .../rules/variables.js                        |   4 +-
 packages/eslint-config-airbnb/CHANGELOG.md    |  60 ++++-----
 packages/eslint-config-airbnb/README.md       |   2 +-
 packages/eslint-config-airbnb/rules/react.js  |   2 +-
 .../test/test-react-order.js                  |   4 +-
 react/README.md                               |   4 +-
 13 files changed, 216 insertions(+), 216 deletions(-)

diff --git a/README.md b/README.md
index d26d1824be..52b5ed4a8f 100644
--- a/README.md
+++ b/README.md
@@ -102,7 +102,7 @@ Other Style Guides
 ## References
 
   <a name="references--prefer-const"></a><a name="2.1"></a>
-  - [2.1](#references--prefer-const) Use `const` for all of your references; avoid using `var`. eslint: [`prefer-const`](http://eslint.org/docs/rules/prefer-const.html), [`no-const-assign`](http://eslint.org/docs/rules/no-const-assign.html)
+  - [2.1](#references--prefer-const) Use `const` for all of your references; avoid using `var`. eslint: [`prefer-const`](https://eslint.org/docs/rules/prefer-const.html), [`no-const-assign`](https://eslint.org/docs/rules/no-const-assign.html)
 
     > Why? This ensures that you can’t reassign your references, which can lead to bugs and difficult to comprehend code.
 
@@ -117,7 +117,7 @@ Other Style Guides
     ```
 
   <a name="references--disallow-var"></a><a name="2.2"></a>
-  - [2.2](#references--disallow-var) If you must reassign references, use `let` instead of `var`. eslint: [`no-var`](http://eslint.org/docs/rules/no-var.html) jscs: [`disallowVar`](http://jscs.info/rule/disallowVar)
+  - [2.2](#references--disallow-var) If you must reassign references, use `let` instead of `var`. eslint: [`no-var`](https://eslint.org/docs/rules/no-var.html) jscs: [`disallowVar`](http://jscs.info/rule/disallowVar)
 
     > Why? `let` is block-scoped rather than function-scoped like `var`.
 
@@ -153,7 +153,7 @@ Other Style Guides
 ## Objects
 
   <a name="objects--no-new"></a><a name="3.1"></a>
-  - [3.1](#objects--no-new) Use the literal syntax for object creation. eslint: [`no-new-object`](http://eslint.org/docs/rules/no-new-object.html)
+  - [3.1](#objects--no-new) Use the literal syntax for object creation. eslint: [`no-new-object`](https://eslint.org/docs/rules/no-new-object.html)
 
     ```javascript
     // bad
@@ -190,7 +190,7 @@ Other Style Guides
     ```
 
   <a name="es6-object-shorthand"></a><a name="3.5"></a>
-  - [3.3](#es6-object-shorthand) Use object method shorthand. eslint: [`object-shorthand`](http://eslint.org/docs/rules/object-shorthand.html) jscs: [`requireEnhancedObjectLiterals`](http://jscs.info/rule/requireEnhancedObjectLiterals)
+  - [3.3](#es6-object-shorthand) Use object method shorthand. eslint: [`object-shorthand`](https://eslint.org/docs/rules/object-shorthand.html) jscs: [`requireEnhancedObjectLiterals`](http://jscs.info/rule/requireEnhancedObjectLiterals)
 
     ```javascript
     // bad
@@ -213,7 +213,7 @@ Other Style Guides
     ```
 
   <a name="es6-object-concise"></a><a name="3.6"></a>
-  - [3.4](#es6-object-concise) Use property value shorthand. eslint: [`object-shorthand`](http://eslint.org/docs/rules/object-shorthand.html) jscs: [`requireEnhancedObjectLiterals`](http://jscs.info/rule/requireEnhancedObjectLiterals)
+  - [3.4](#es6-object-concise) Use property value shorthand. eslint: [`object-shorthand`](https://eslint.org/docs/rules/object-shorthand.html) jscs: [`requireEnhancedObjectLiterals`](http://jscs.info/rule/requireEnhancedObjectLiterals)
 
     > Why? It is shorter to write and descriptive.
 
@@ -262,7 +262,7 @@ Other Style Guides
     ```
 
   <a name="objects--quoted-props"></a><a name="3.8"></a>
-  - [3.6](#objects--quoted-props) Only quote properties that are invalid identifiers. eslint: [`quote-props`](http://eslint.org/docs/rules/quote-props.html) jscs: [`disallowQuotedKeysInObjects`](http://jscs.info/rule/disallowQuotedKeysInObjects)
+  - [3.6](#objects--quoted-props) Only quote properties that are invalid identifiers. eslint: [`quote-props`](https://eslint.org/docs/rules/quote-props.html) jscs: [`disallowQuotedKeysInObjects`](http://jscs.info/rule/disallowQuotedKeysInObjects)
 
     > Why? In general we consider it subjectively easier to read. It improves syntax highlighting, and is also more easily optimized by many JS engines.
 
@@ -327,7 +327,7 @@ Other Style Guides
 ## Arrays
 
   <a name="arrays--literals"></a><a name="4.1"></a>
-  - [4.1](#arrays--literals) Use the literal syntax for array creation. eslint: [`no-array-constructor`](http://eslint.org/docs/rules/no-array-constructor.html)
+  - [4.1](#arrays--literals) Use the literal syntax for array creation. eslint: [`no-array-constructor`](https://eslint.org/docs/rules/no-array-constructor.html)
 
     ```javascript
     // bad
@@ -392,7 +392,7 @@ Other Style Guides
     ```
 
   <a name="arrays--callback-return"></a><a name="4.5"></a>
-  - [4.6](#arrays--callback-return) Use return statements in array method callbacks. It’s ok to omit the return if the function body consists of a single statement returning an expression without side effects, following [8.2](#arrows--implicit-return). eslint: [`array-callback-return`](http://eslint.org/docs/rules/array-callback-return)
+  - [4.6](#arrays--callback-return) Use return statements in array method callbacks. It’s ok to omit the return if the function body consists of a single statement returning an expression without side effects, following [8.2](#arrows--implicit-return). eslint: [`array-callback-return`](https://eslint.org/docs/rules/array-callback-return)
 
     ```javascript
     // good
@@ -549,7 +549,7 @@ Other Style Guides
 ## Strings
 
   <a name="strings--quotes"></a><a name="6.1"></a>
-  - [6.1](#strings--quotes) Use single quotes `''` for strings. eslint: [`quotes`](http://eslint.org/docs/rules/quotes.html) jscs: [`validateQuoteMarks`](http://jscs.info/rule/validateQuoteMarks)
+  - [6.1](#strings--quotes) Use single quotes `''` for strings. eslint: [`quotes`](https://eslint.org/docs/rules/quotes.html) jscs: [`validateQuoteMarks`](http://jscs.info/rule/validateQuoteMarks)
 
     ```javascript
     // bad
@@ -584,7 +584,7 @@ Other Style Guides
     ```
 
   <a name="es6-template-literals"></a><a name="6.4"></a>
-  - [6.3](#es6-template-literals) When programmatically building up strings, use template strings instead of concatenation. eslint: [`prefer-template`](http://eslint.org/docs/rules/prefer-template.html) [`template-curly-spacing`](http://eslint.org/docs/rules/template-curly-spacing) jscs: [`requireTemplateStrings`](http://jscs.info/rule/requireTemplateStrings)
+  - [6.3](#es6-template-literals) When programmatically building up strings, use template strings instead of concatenation. eslint: [`prefer-template`](https://eslint.org/docs/rules/prefer-template.html) [`template-curly-spacing`](https://eslint.org/docs/rules/template-curly-spacing) jscs: [`requireTemplateStrings`](http://jscs.info/rule/requireTemplateStrings)
 
     > Why? Template strings give you a readable, concise syntax with proper newlines and string interpolation features.
 
@@ -611,10 +611,10 @@ Other Style Guides
     ```
 
   <a name="strings--eval"></a><a name="6.5"></a>
-  - [6.4](#strings--eval) Never use `eval()` on a string, it opens too many vulnerabilities. eslint: [`no-eval`](http://eslint.org/docs/rules/no-eval)
+  - [6.4](#strings--eval) Never use `eval()` on a string, it opens too many vulnerabilities. eslint: [`no-eval`](https://eslint.org/docs/rules/no-eval)
 
   <a name="strings--escaping"></a>
-  - [6.5](#strings--escaping) Do not unnecessarily escape characters in strings. eslint: [`no-useless-escape`](http://eslint.org/docs/rules/no-useless-escape)
+  - [6.5](#strings--escaping) Do not unnecessarily escape characters in strings. eslint: [`no-useless-escape`](https://eslint.org/docs/rules/no-useless-escape)
 
     > Why? Backslashes harm readability, thus they should only be present when necessary.
 
@@ -632,7 +632,7 @@ Other Style Guides
 ## Functions
 
   <a name="functions--declarations"></a><a name="7.1"></a>
-  - [7.1](#functions--declarations) Use named function expressions instead of function declarations. eslint: [`func-style`](http://eslint.org/docs/rules/func-style) jscs: [`disallowFunctionDeclarations`](http://jscs.info/rule/disallowFunctionDeclarations)
+  - [7.1](#functions--declarations) Use named function expressions instead of function declarations. eslint: [`func-style`](https://eslint.org/docs/rules/func-style) jscs: [`disallowFunctionDeclarations`](http://jscs.info/rule/disallowFunctionDeclarations)
 
     > Why? Function declarations are hoisted, which means that it’s easy - too easy - to reference the function before it is defined in the file. This harms readability and maintainability. If you find that a function’s definition is large or complex enough that it is interfering with understanding the rest of the file, then perhaps it’s time to extract it to its own module! Don’t forget to explicitly name the expression, regardless of whether or not the name is inferred from the containing variable (which is often the case in modern browsers or when using compilers such as Babel). This eliminates any assumptions made about the Error's call stack. ([Discussion](https://github.com/airbnb/javascript/issues/794))
 
@@ -655,7 +655,7 @@ Other Style Guides
     ```
 
   <a name="functions--iife"></a><a name="7.2"></a>
-  - [7.2](#functions--iife) Wrap immediately invoked function expressions in parentheses. eslint: [`wrap-iife`](http://eslint.org/docs/rules/wrap-iife.html) jscs: [`requireParenthesesAroundIIFE`](http://jscs.info/rule/requireParenthesesAroundIIFE)
+  - [7.2](#functions--iife) Wrap immediately invoked function expressions in parentheses. eslint: [`wrap-iife`](https://eslint.org/docs/rules/wrap-iife.html) jscs: [`requireParenthesesAroundIIFE`](http://jscs.info/rule/requireParenthesesAroundIIFE)
 
     > Why? An immediately invoked function expression is a single unit - wrapping both it, and its invocation parens, in parens, cleanly expresses this. Note that in a world with modules everywhere, you almost never need an IIFE.
 
@@ -667,7 +667,7 @@ Other Style Guides
     ```
 
   <a name="functions--in-blocks"></a><a name="7.3"></a>
-  - [7.3](#functions--in-blocks) Never declare a function in a non-function block (`if`, `while`, etc). Assign the function to a variable instead. Browsers will allow you to do it, but they all interpret it differently, which is bad news bears. eslint: [`no-loop-func`](http://eslint.org/docs/rules/no-loop-func.html)
+  - [7.3](#functions--in-blocks) Never declare a function in a non-function block (`if`, `while`, etc). Assign the function to a variable instead. Browsers will allow you to do it, but they all interpret it differently, which is bad news bears. eslint: [`no-loop-func`](https://eslint.org/docs/rules/no-loop-func.html)
 
   <a name="functions--note-on-blocks"></a><a name="7.4"></a>
   - [7.4](#functions--note-on-blocks) **Note:** ECMA-262 defines a `block` as a list of statements. A function declaration is not a statement.
@@ -705,7 +705,7 @@ Other Style Guides
     ```
 
   <a name="es6-rest"></a><a name="7.6"></a>
-  - [7.6](#es6-rest) Never use `arguments`, opt to use rest syntax `...` instead. eslint: [`prefer-rest-params`](http://eslint.org/docs/rules/prefer-rest-params)
+  - [7.6](#es6-rest) Never use `arguments`, opt to use rest syntax `...` instead. eslint: [`prefer-rest-params`](https://eslint.org/docs/rules/prefer-rest-params)
 
     > Why? `...` is explicit about which arguments you want pulled. Plus, rest arguments are a real Array, and not merely Array-like like `arguments`.
 
@@ -782,7 +782,7 @@ Other Style Guides
     ```
 
   <a name="functions--constructor"></a><a name="7.10"></a>
-  - [7.10](#functions--constructor) Never use the Function constructor to create a new function. eslint: [`no-new-func`](http://eslint.org/docs/rules/no-new-func)
+  - [7.10](#functions--constructor) Never use the Function constructor to create a new function. eslint: [`no-new-func`](https://eslint.org/docs/rules/no-new-func)
 
     > Why? Creating a function in this way evaluates a string similarly to eval(), which opens vulnerabilities.
 
@@ -795,7 +795,7 @@ Other Style Guides
     ```
 
   <a name="functions--signature-spacing"></a><a name="7.11"></a>
-  - [7.11](#functions--signature-spacing) Spacing in a function signature. eslint: [`space-before-function-paren`](http://eslint.org/docs/rules/space-before-function-paren) [`space-before-blocks`](http://eslint.org/docs/rules/space-before-blocks)
+  - [7.11](#functions--signature-spacing) Spacing in a function signature. eslint: [`space-before-function-paren`](https://eslint.org/docs/rules/space-before-function-paren) [`space-before-blocks`](https://eslint.org/docs/rules/space-before-blocks)
 
     > Why? Consistency is good, and you shouldn’t have to add or remove a space when adding or removing a name.
 
@@ -811,7 +811,7 @@ Other Style Guides
     ```
 
   <a name="functions--mutate-params"></a><a name="7.12"></a>
-  - [7.12](#functions--mutate-params) Never mutate parameters. eslint: [`no-param-reassign`](http://eslint.org/docs/rules/no-param-reassign.html)
+  - [7.12](#functions--mutate-params) Never mutate parameters. eslint: [`no-param-reassign`](https://eslint.org/docs/rules/no-param-reassign.html)
 
     > Why? Manipulating objects passed in as parameters can cause unwanted variable side effects in the original caller.
 
@@ -828,7 +828,7 @@ Other Style Guides
     ```
 
   <a name="functions--reassign-params"></a><a name="7.13"></a>
-  - [7.13](#functions--reassign-params) Never reassign parameters. eslint: [`no-param-reassign`](http://eslint.org/docs/rules/no-param-reassign.html)
+  - [7.13](#functions--reassign-params) Never reassign parameters. eslint: [`no-param-reassign`](https://eslint.org/docs/rules/no-param-reassign.html)
 
     > Why? Reassigning parameters can lead to unexpected behavior, especially when accessing the `arguments` object. It can also cause optimization issues, especially in V8.
 
@@ -856,7 +856,7 @@ Other Style Guides
     ```
 
   <a name="functions--spread-vs-apply"></a><a name="7.14"></a>
-  - [7.14](#functions--spread-vs-apply) Prefer the use of the spread operator `...` to call variadic functions. eslint: [`prefer-spread`](http://eslint.org/docs/rules/prefer-spread)
+  - [7.14](#functions--spread-vs-apply) Prefer the use of the spread operator `...` to call variadic functions. eslint: [`prefer-spread`](https://eslint.org/docs/rules/prefer-spread)
 
     > Why? It’s cleaner, you don’t need to supply a context, and you can not easily compose `new` with `apply`.
 
@@ -914,7 +914,7 @@ Other Style Guides
 ## Arrow Functions
 
   <a name="arrows--use-them"></a><a name="8.1"></a>
-  - [8.1](#arrows--use-them) When you must use an anonymous function (as when passing an inline callback), use arrow function notation. eslint: [`prefer-arrow-callback`](http://eslint.org/docs/rules/prefer-arrow-callback.html), [`arrow-spacing`](http://eslint.org/docs/rules/arrow-spacing.html) jscs: [`requireArrowFunctions`](http://jscs.info/rule/requireArrowFunctions)
+  - [8.1](#arrows--use-them) When you must use an anonymous function (as when passing an inline callback), use arrow function notation. eslint: [`prefer-arrow-callback`](https://eslint.org/docs/rules/prefer-arrow-callback.html), [`arrow-spacing`](https://eslint.org/docs/rules/arrow-spacing.html) jscs: [`requireArrowFunctions`](http://jscs.info/rule/requireArrowFunctions)
 
     > Why? It creates a version of the function that executes in the context of `this`, which is usually what you want, and is a more concise syntax.
 
@@ -935,7 +935,7 @@ Other Style Guides
     ```
 
   <a name="arrows--implicit-return"></a><a name="8.2"></a>
-  - [8.2](#arrows--implicit-return) If the function body consists of a single statement returning an [expression](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Expressions_and_Operators#Expressions) without side effects, omit the braces and use the implicit return. Otherwise, keep the braces and use a `return` statement. eslint: [`arrow-parens`](http://eslint.org/docs/rules/arrow-parens.html), [`arrow-body-style`](http://eslint.org/docs/rules/arrow-body-style.html) jscs:  [`disallowParenthesesAroundArrowParam`](http://jscs.info/rule/disallowParenthesesAroundArrowParam), [`requireShorthandArrowFunctions`](http://jscs.info/rule/requireShorthandArrowFunctions)
+  - [8.2](#arrows--implicit-return) If the function body consists of a single statement returning an [expression](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Expressions_and_Operators#Expressions) without side effects, omit the braces and use the implicit return. Otherwise, keep the braces and use a `return` statement. eslint: [`arrow-parens`](https://eslint.org/docs/rules/arrow-parens.html), [`arrow-body-style`](https://eslint.org/docs/rules/arrow-body-style.html) jscs:  [`disallowParenthesesAroundArrowParam`](http://jscs.info/rule/disallowParenthesesAroundArrowParam), [`requireShorthandArrowFunctions`](http://jscs.info/rule/requireShorthandArrowFunctions)
 
     > Why? Syntactic sugar. It reads well when multiple functions are chained together.
 
@@ -1002,7 +1002,7 @@ Other Style Guides
     ```
 
   <a name="arrows--one-arg-parens"></a><a name="8.4"></a>
-  - [8.4](#arrows--one-arg-parens) If your function takes a single argument and doesn’t use braces, omit the parentheses. Otherwise, always include parentheses around arguments for clarity and consistency. Note: it is also acceptable to always use parentheses, in which case use the [“always” option](http://eslint.org/docs/rules/arrow-parens#always) for eslint or do not include [`disallowParenthesesAroundArrowParam`](http://jscs.info/rule/disallowParenthesesAroundArrowParam) for jscs. eslint: [`arrow-parens`](http://eslint.org/docs/rules/arrow-parens.html) jscs:  [`disallowParenthesesAroundArrowParam`](http://jscs.info/rule/disallowParenthesesAroundArrowParam)
+  - [8.4](#arrows--one-arg-parens) If your function takes a single argument and doesn’t use braces, omit the parentheses. Otherwise, always include parentheses around arguments for clarity and consistency. Note: it is also acceptable to always use parentheses, in which case use the [“always” option](https://eslint.org/docs/rules/arrow-parens#always) for eslint or do not include [`disallowParenthesesAroundArrowParam`](http://jscs.info/rule/disallowParenthesesAroundArrowParam) for jscs. eslint: [`arrow-parens`](https://eslint.org/docs/rules/arrow-parens.html) jscs:  [`disallowParenthesesAroundArrowParam`](http://jscs.info/rule/disallowParenthesesAroundArrowParam)
 
     > Why? Less visual clutter.
 
@@ -1032,7 +1032,7 @@ Other Style Guides
     ```
 
   <a name="arrows--confusing"></a><a name="8.5"></a>
-  - [8.5](#arrows--confusing) Avoid confusing arrow function syntax (`=>`) with comparison operators (`<=`, `>=`). eslint: [`no-confusing-arrow`](http://eslint.org/docs/rules/no-confusing-arrow)
+  - [8.5](#arrows--confusing) Avoid confusing arrow function syntax (`=>`) with comparison operators (`<=`, `>=`). eslint: [`no-confusing-arrow`](https://eslint.org/docs/rules/no-confusing-arrow)
 
     ```javascript
     // bad
@@ -1165,7 +1165,7 @@ Other Style Guides
     ```
 
   <a name="constructors--no-useless"></a><a name="9.5"></a>
-  - [9.5](#constructors--no-useless) Classes have a default constructor if one is not specified. An empty constructor function or one that just delegates to a parent class is unnecessary. eslint: [`no-useless-constructor`](http://eslint.org/docs/rules/no-useless-constructor)
+  - [9.5](#constructors--no-useless) Classes have a default constructor if one is not specified. An empty constructor function or one that just delegates to a parent class is unnecessary. eslint: [`no-useless-constructor`](https://eslint.org/docs/rules/no-useless-constructor)
 
     ```javascript
     // bad
@@ -1194,7 +1194,7 @@ Other Style Guides
     ```
 
   <a name="classes--no-duplicate-members"></a>
-  - [9.6](#classes--no-duplicate-members) Avoid duplicate class members. eslint: [`no-dupe-class-members`](http://eslint.org/docs/rules/no-dupe-class-members)
+  - [9.6](#classes--no-duplicate-members) Avoid duplicate class members. eslint: [`no-dupe-class-members`](https://eslint.org/docs/rules/no-dupe-class-members)
 
     > Why? Duplicate class member declarations will silently prefer the last one - having duplicates is almost certainly a bug.
 
@@ -1270,7 +1270,7 @@ Other Style Guides
 
   <a name="modules--no-duplicate-imports"></a>
   - [10.4](#modules--no-duplicate-imports) Only import from a path in one place.
- eslint: [`no-duplicate-imports`](http://eslint.org/docs/rules/no-duplicate-imports)
+ eslint: [`no-duplicate-imports`](https://eslint.org/docs/rules/no-duplicate-imports)
     > Why? Having multiple lines that import from the same path can make code harder to maintain.
 
     ```javascript
@@ -1375,7 +1375,7 @@ Other Style Guides
 ## Iterators and Generators
 
   <a name="iterators--nope"></a><a name="11.1"></a>
-  - [11.1](#iterators--nope) Don’t use iterators. Prefer JavaScript’s higher-order functions instead of loops like `for-in` or `for-of`. eslint: [`no-iterator`](http://eslint.org/docs/rules/no-iterator.html) [`no-restricted-syntax`](http://eslint.org/docs/rules/no-restricted-syntax)
+  - [11.1](#iterators--nope) Don’t use iterators. Prefer JavaScript’s higher-order functions instead of loops like `for-in` or `for-of`. eslint: [`no-iterator`](https://eslint.org/docs/rules/no-iterator.html) [`no-restricted-syntax`](https://eslint.org/docs/rules/no-restricted-syntax)
 
     > Why? This enforces our immutable rule. Dealing with pure functions that return values is easier to reason about than side effects.
 
@@ -1424,7 +1424,7 @@ Other Style Guides
     > Why? They don’t transpile well to ES5.
 
   <a name="generators--spacing"></a>
-  - [11.3](#generators--spacing) If you must use generators, or if you disregard [our advice](#generators--nope), make sure their function signature is spaced properly. eslint: [`generator-star-spacing`](http://eslint.org/docs/rules/generator-star-spacing)
+  - [11.3](#generators--spacing) If you must use generators, or if you disregard [our advice](#generators--nope), make sure their function signature is spaced properly. eslint: [`generator-star-spacing`](https://eslint.org/docs/rules/generator-star-spacing)
 
     > Why? `function` and `*` are part of the same conceptual keyword - `*` is not a modifier for `function`, `function*` is a unique construct, different from `function`.
 
@@ -1489,7 +1489,7 @@ Other Style Guides
 ## Properties
 
   <a name="properties--dot"></a><a name="12.1"></a>
-  - [12.1](#properties--dot) Use dot notation when accessing properties. eslint: [`dot-notation`](http://eslint.org/docs/rules/dot-notation.html) jscs: [`requireDotNotation`](http://jscs.info/rule/requireDotNotation)
+  - [12.1](#properties--dot) Use dot notation when accessing properties. eslint: [`dot-notation`](https://eslint.org/docs/rules/dot-notation.html) jscs: [`requireDotNotation`](http://jscs.info/rule/requireDotNotation)
 
     ```javascript
     const luke = {
@@ -1520,7 +1520,7 @@ Other Style Guides
     const isJedi = getProp('jedi');
     ```
   <a name="es2016-properties--exponentiation-operator"></a>
-  - [12.3](#es2016-properties--exponentiation-operator) Use exponentiation operator `**` when calculating exponentiations. eslint: [`no-restricted-properties`](http://eslint.org/docs/rules/no-restricted-properties).
+  - [12.3](#es2016-properties--exponentiation-operator) Use exponentiation operator `**` when calculating exponentiations. eslint: [`no-restricted-properties`](https://eslint.org/docs/rules/no-restricted-properties).
 
     ```javascript
     // bad
@@ -1535,7 +1535,7 @@ Other Style Guides
 ## Variables
 
   <a name="variables--const"></a><a name="13.1"></a>
-  - [13.1](#variables--const) Always use `const` or `let` to declare variables. Not doing so will result in global variables. We want to avoid polluting the global namespace. Captain Planet warned us of that. eslint: [`no-undef`](http://eslint.org/docs/rules/no-undef) [`prefer-const`](http://eslint.org/docs/rules/prefer-const)
+  - [13.1](#variables--const) Always use `const` or `let` to declare variables. Not doing so will result in global variables. We want to avoid polluting the global namespace. Captain Planet warned us of that. eslint: [`no-undef`](https://eslint.org/docs/rules/no-undef) [`prefer-const`](https://eslint.org/docs/rules/prefer-const)
 
     ```javascript
     // bad
@@ -1546,7 +1546,7 @@ Other Style Guides
     ```
 
   <a name="variables--one-const"></a><a name="13.2"></a>
-  - [13.2](#variables--one-const) Use one `const` or `let` declaration per variable. eslint: [`one-var`](http://eslint.org/docs/rules/one-var.html) jscs: [`disallowMultipleVarDecl`](http://jscs.info/rule/disallowMultipleVarDecl)
+  - [13.2](#variables--one-const) Use one `const` or `let` declaration per variable. eslint: [`one-var`](https://eslint.org/docs/rules/one-var.html) jscs: [`disallowMultipleVarDecl`](http://jscs.info/rule/disallowMultipleVarDecl)
 
     > Why? It’s easier to add new variable declarations this way, and you never have to worry about swapping out a `;` for a `,` or introducing punctuation-only diffs. You can also step through each declaration with the debugger, instead of jumping through all of them at once.
 
@@ -1666,7 +1666,7 @@ Other Style Guides
     ```
 
   <a name="variables--unary-increment-decrement"></a><a name="13.6"></a>
-  - [13.6](#variables--unary-increment-decrement) Avoid using unary increments and decrements (++, --). eslint [`no-plusplus`](http://eslint.org/docs/rules/no-plusplus)
+  - [13.6](#variables--unary-increment-decrement) Avoid using unary increments and decrements (++, --). eslint [`no-plusplus`](https://eslint.org/docs/rules/no-plusplus)
 
     > Why? Per the eslint documentation, unary increment and decrement statements are subject to automatic semicolon insertion and can cause silent errors with incrementing or decrementing values within an application. It is also more expressive to mutate your values with statements like `num += 1` instead of `num++` or `num ++`. Disallowing unary increment and decrement statements also prevents you from pre-incrementing/pre-decrementing values unintentionally which can also cause unexpected behavior in your programs.
 
@@ -1803,7 +1803,7 @@ Other Style Guides
 ## Comparison Operators & Equality
 
   <a name="comparison--eqeqeq"></a><a name="15.1"></a>
-  - [15.1](#comparison--eqeqeq) Use `===` and `!==` over `==` and `!=`. eslint: [`eqeqeq`](http://eslint.org/docs/rules/eqeqeq.html)
+  - [15.1](#comparison--eqeqeq) Use `===` and `!==` over `==` and `!=`. eslint: [`eqeqeq`](https://eslint.org/docs/rules/eqeqeq.html)
 
   <a name="comparison--if"></a><a name="15.2"></a>
   - [15.2](#comparison--if) Conditional statements such as the `if` statement evaluate their expression using coercion with the `ToBoolean` abstract method and always follow these simple rules:
@@ -1861,7 +1861,7 @@ Other Style Guides
   - [15.4](#comparison--moreinfo) For more information see [Truth Equality and JavaScript](https://javascriptweblog.wordpress.com/2011/02/07/truth-equality-and-javascript/#more-2108) by Angus Croll.
 
   <a name="comparison--switch-blocks"></a><a name="15.5"></a>
-  - [15.5](#comparison--switch-blocks) Use braces to create blocks in `case` and `default` clauses that contain lexical declarations (e.g. `let`, `const`, `function`, and `class`). eslint: [`no-case-declarations`](http://eslint.org/docs/rules/no-case-declarations.html)
+  - [15.5](#comparison--switch-blocks) Use braces to create blocks in `case` and `default` clauses that contain lexical declarations (e.g. `let`, `const`, `function`, and `class`). eslint: [`no-case-declarations`](https://eslint.org/docs/rules/no-case-declarations.html)
 
     > Why? Lexical declarations are visible in the entire `switch` block but only get initialized when assigned, which only happens when its `case` is reached. This causes problems when multiple `case` clauses attempt to define the same thing.
 
@@ -1909,7 +1909,7 @@ Other Style Guides
     ```
 
   <a name="comparison--nested-ternaries"></a><a name="15.6"></a>
-  - [15.6](#comparison--nested-ternaries) Ternaries should not be nested and generally be single line expressions. eslint: [`no-nested-ternary`](http://eslint.org/docs/rules/no-nested-ternary.html)
+  - [15.6](#comparison--nested-ternaries) Ternaries should not be nested and generally be single line expressions. eslint: [`no-nested-ternary`](https://eslint.org/docs/rules/no-nested-ternary.html)
 
     ```javascript
     // bad
@@ -1930,7 +1930,7 @@ Other Style Guides
     ```
 
   <a name="comparison--unneeded-ternary"></a><a name="15.7"></a>
-  - [15.7](#comparison--unneeded-ternary) Avoid unneeded ternary statements. eslint: [`no-unneeded-ternary`](http://eslint.org/docs/rules/no-unneeded-ternary.html)
+  - [15.7](#comparison--unneeded-ternary) Avoid unneeded ternary statements. eslint: [`no-unneeded-ternary`](https://eslint.org/docs/rules/no-unneeded-ternary.html)
 
     ```javascript
     // bad
@@ -1945,7 +1945,7 @@ Other Style Guides
     ```
 
   <a name="comparison--no-mixed-operators"></a>
-  - [15.8](#comparison--no-mixed-operators) Enclose operators in parentheses when they are mixed in a statement. When mixing arithmetic operators, do not mix `**` and `%` with themselves or with `+`, `-`, `*`, & `/`. eslint: [`no-mixed-operators`](http://eslint.org/docs/rules/no-mixed-operators.html)
+  - [15.8](#comparison--no-mixed-operators) Enclose operators in parentheses when they are mixed in a statement. When mixing arithmetic operators, do not mix `**` and `%` with themselves or with `+`, `-`, `*`, & `/`. eslint: [`no-mixed-operators`](https://eslint.org/docs/rules/no-mixed-operators.html)
 
     > Why? This improves readability and clarifies the developer’s intention.
 
@@ -2006,7 +2006,7 @@ Other Style Guides
     ```
 
   <a name="blocks--cuddled-elses"></a><a name="16.2"></a>
-  - [16.2](#blocks--cuddled-elses) If you're using multi-line blocks with `if` and `else`, put `else` on the same line as your `if` block’s closing brace. eslint: [`brace-style`](http://eslint.org/docs/rules/brace-style.html) jscs:  [`disallowNewlineBeforeBlockStatements`](http://jscs.info/rule/disallowNewlineBeforeBlockStatements)
+  - [16.2](#blocks--cuddled-elses) If you're using multi-line blocks with `if` and `else`, put `else` on the same line as your `if` block’s closing brace. eslint: [`brace-style`](https://eslint.org/docs/rules/brace-style.html) jscs:  [`disallowNewlineBeforeBlockStatements`](http://jscs.info/rule/disallowNewlineBeforeBlockStatements)
 
     ```javascript
     // bad
@@ -2224,7 +2224,7 @@ Other Style Guides
     ```
 
   <a name="comments--spaces"></a>
-  - [18.3](#comments--spaces) Start all comments with a space to make it easier to read. eslint: [`spaced-comment`](http://eslint.org/docs/rules/spaced-comment)
+  - [18.3](#comments--spaces) Start all comments with a space to make it easier to read. eslint: [`spaced-comment`](https://eslint.org/docs/rules/spaced-comment)
 
     ```javascript
     // bad
@@ -2296,7 +2296,7 @@ Other Style Guides
 ## Whitespace
 
   <a name="whitespace--spaces"></a><a name="18.1"></a>
-  - [19.1](#whitespace--spaces) Use soft tabs (space character) set to 2 spaces. eslint: [`indent`](http://eslint.org/docs/rules/indent.html) jscs: [`validateIndentation`](http://jscs.info/rule/validateIndentation)
+  - [19.1](#whitespace--spaces) Use soft tabs (space character) set to 2 spaces. eslint: [`indent`](https://eslint.org/docs/rules/indent.html) jscs: [`validateIndentation`](http://jscs.info/rule/validateIndentation)
 
     ```javascript
     // bad
@@ -2316,7 +2316,7 @@ Other Style Guides
     ```
 
   <a name="whitespace--before-blocks"></a><a name="18.2"></a>
-  - [19.2](#whitespace--before-blocks) Place 1 space before the leading brace. eslint: [`space-before-blocks`](http://eslint.org/docs/rules/space-before-blocks.html) jscs: [`requireSpaceBeforeBlockStatements`](http://jscs.info/rule/requireSpaceBeforeBlockStatements)
+  - [19.2](#whitespace--before-blocks) Place 1 space before the leading brace. eslint: [`space-before-blocks`](https://eslint.org/docs/rules/space-before-blocks.html) jscs: [`requireSpaceBeforeBlockStatements`](http://jscs.info/rule/requireSpaceBeforeBlockStatements)
 
     ```javascript
     // bad
@@ -2343,7 +2343,7 @@ Other Style Guides
     ```
 
   <a name="whitespace--around-keywords"></a><a name="18.3"></a>
-  - [19.3](#whitespace--around-keywords) Place 1 space before the opening parenthesis in control statements (`if`, `while` etc.). Place no space between the argument list and the function name in function calls and declarations. eslint: [`keyword-spacing`](http://eslint.org/docs/rules/keyword-spacing.html) jscs: [`requireSpaceAfterKeywords`](http://jscs.info/rule/requireSpaceAfterKeywords)
+  - [19.3](#whitespace--around-keywords) Place 1 space before the opening parenthesis in control statements (`if`, `while` etc.). Place no space between the argument list and the function name in function calls and declarations. eslint: [`keyword-spacing`](https://eslint.org/docs/rules/keyword-spacing.html) jscs: [`requireSpaceAfterKeywords`](http://jscs.info/rule/requireSpaceAfterKeywords)
 
     ```javascript
     // bad
@@ -2368,7 +2368,7 @@ Other Style Guides
     ```
 
   <a name="whitespace--infix-ops"></a><a name="18.4"></a>
-  - [19.4](#whitespace--infix-ops) Set off operators with spaces. eslint: [`space-infix-ops`](http://eslint.org/docs/rules/space-infix-ops.html) jscs: [`requireSpaceBeforeBinaryOperators`](http://jscs.info/rule/requireSpaceBeforeBinaryOperators), [`requireSpaceAfterBinaryOperators`](http://jscs.info/rule/requireSpaceAfterBinaryOperators)
+  - [19.4](#whitespace--infix-ops) Set off operators with spaces. eslint: [`space-infix-ops`](https://eslint.org/docs/rules/space-infix-ops.html) jscs: [`requireSpaceBeforeBinaryOperators`](http://jscs.info/rule/requireSpaceBeforeBinaryOperators), [`requireSpaceAfterBinaryOperators`](http://jscs.info/rule/requireSpaceAfterBinaryOperators)
 
     ```javascript
     // bad
@@ -2405,7 +2405,7 @@ Other Style Guides
 
   <a name="whitespace--chains"></a><a name="18.6"></a>
   - [19.6](#whitespace--chains) Use indentation when making long method chains (more than 2 method chains). Use a leading dot, which
-    emphasizes that the line is a method call, not a new statement. eslint: [`newline-per-chained-call`](http://eslint.org/docs/rules/newline-per-chained-call) [`no-whitespace-before-property`](http://eslint.org/docs/rules/no-whitespace-before-property)
+    emphasizes that the line is a method call, not a new statement. eslint: [`newline-per-chained-call`](https://eslint.org/docs/rules/newline-per-chained-call) [`no-whitespace-before-property`](https://eslint.org/docs/rules/no-whitespace-before-property)
 
     ```javascript
     // bad
@@ -2506,7 +2506,7 @@ Other Style Guides
     ```
 
   <a name="whitespace--padded-blocks"></a><a name="18.8"></a>
-  - [19.8](#whitespace--padded-blocks) Do not pad your blocks with blank lines. eslint: [`padded-blocks`](http://eslint.org/docs/rules/padded-blocks.html) jscs:  [`disallowPaddingNewlinesInBlocks`](http://jscs.info/rule/disallowPaddingNewlinesInBlocks)
+  - [19.8](#whitespace--padded-blocks) Do not pad your blocks with blank lines. eslint: [`padded-blocks`](https://eslint.org/docs/rules/padded-blocks.html) jscs:  [`disallowPaddingNewlinesInBlocks`](http://jscs.info/rule/disallowPaddingNewlinesInBlocks)
 
     ```javascript
     // bad
@@ -2547,7 +2547,7 @@ Other Style Guides
     ```
 
   <a name="whitespace--in-parens"></a><a name="18.9"></a>
-  - [19.9](#whitespace--in-parens) Do not add spaces inside parentheses. eslint: [`space-in-parens`](http://eslint.org/docs/rules/space-in-parens.html) jscs: [`disallowSpacesInsideParentheses`](http://jscs.info/rule/disallowSpacesInsideParentheses)
+  - [19.9](#whitespace--in-parens) Do not add spaces inside parentheses. eslint: [`space-in-parens`](https://eslint.org/docs/rules/space-in-parens.html) jscs: [`disallowSpacesInsideParentheses`](http://jscs.info/rule/disallowSpacesInsideParentheses)
 
     ```javascript
     // bad
@@ -2572,7 +2572,7 @@ Other Style Guides
     ```
 
   <a name="whitespace--in-brackets"></a><a name="18.10"></a>
-  - [19.10](#whitespace--in-brackets) Do not add spaces inside brackets. eslint: [`array-bracket-spacing`](http://eslint.org/docs/rules/array-bracket-spacing.html) jscs: [`disallowSpacesInsideArrayBrackets`](http://jscs.info/rule/disallowSpacesInsideArrayBrackets)
+  - [19.10](#whitespace--in-brackets) Do not add spaces inside brackets. eslint: [`array-bracket-spacing`](https://eslint.org/docs/rules/array-bracket-spacing.html) jscs: [`disallowSpacesInsideArrayBrackets`](http://jscs.info/rule/disallowSpacesInsideArrayBrackets)
 
     ```javascript
     // bad
@@ -2585,7 +2585,7 @@ Other Style Guides
     ```
 
   <a name="whitespace--in-braces"></a><a name="18.11"></a>
-  - [19.11](#whitespace--in-braces) Add spaces inside curly braces. eslint: [`object-curly-spacing`](http://eslint.org/docs/rules/object-curly-spacing.html) jscs: [`requireSpacesInsideObjectBrackets`](http://jscs.info/rule/requireSpacesInsideObjectBrackets)
+  - [19.11](#whitespace--in-braces) Add spaces inside curly braces. eslint: [`object-curly-spacing`](https://eslint.org/docs/rules/object-curly-spacing.html) jscs: [`requireSpacesInsideObjectBrackets`](http://jscs.info/rule/requireSpacesInsideObjectBrackets)
 
     ```javascript
     // bad
@@ -2596,7 +2596,7 @@ Other Style Guides
     ```
 
   <a name="whitespace--max-len"></a><a name="18.12"></a>
-  - [19.12](#whitespace--max-len) Avoid having lines of code that are longer than 100 characters (including whitespace). Note: per [above](#strings--line-length), long strings are exempt from this rule, and should not be broken up. eslint: [`max-len`](http://eslint.org/docs/rules/max-len.html) jscs: [`maximumLineLength`](http://jscs.info/rule/maximumLineLength)
+  - [19.12](#whitespace--max-len) Avoid having lines of code that are longer than 100 characters (including whitespace). Note: per [above](#strings--line-length), long strings are exempt from this rule, and should not be broken up. eslint: [`max-len`](https://eslint.org/docs/rules/max-len.html) jscs: [`maximumLineLength`](http://jscs.info/rule/maximumLineLength)
 
     > Why? This ensures readability and maintainability.
 
@@ -2630,7 +2630,7 @@ Other Style Guides
 ## Commas
 
   <a name="commas--leading-trailing"></a><a name="19.1"></a>
-  - [20.1](#commas--leading-trailing) Leading commas: **Nope.** eslint: [`comma-style`](http://eslint.org/docs/rules/comma-style.html) jscs: [`requireCommaBeforeLineBreak`](http://jscs.info/rule/requireCommaBeforeLineBreak)
+  - [20.1](#commas--leading-trailing) Leading commas: **Nope.** eslint: [`comma-style`](https://eslint.org/docs/rules/comma-style.html) jscs: [`requireCommaBeforeLineBreak`](http://jscs.info/rule/requireCommaBeforeLineBreak)
 
     ```javascript
     // bad
@@ -2665,7 +2665,7 @@ Other Style Guides
     ```
 
   <a name="commas--dangling"></a><a name="19.2"></a>
-  - [20.2](#commas--dangling) Additional trailing comma: **Yup.** eslint: [`comma-dangle`](http://eslint.org/docs/rules/comma-dangle.html) jscs: [`requireTrailingComma`](http://jscs.info/rule/requireTrailingComma)
+  - [20.2](#commas--dangling) Additional trailing comma: **Yup.** eslint: [`comma-dangle`](https://eslint.org/docs/rules/comma-dangle.html) jscs: [`requireTrailingComma`](http://jscs.info/rule/requireTrailingComma)
 
     > Why? This leads to cleaner git diffs. Also, transpilers like Babel will remove the additional trailing comma in the transpiled code which means you don’t have to worry about the [trailing comma problem](https://github.com/airbnb/javascript/blob/es5-deprecated/es5/README.md#commas) in legacy browsers.
 
@@ -2765,7 +2765,7 @@ Other Style Guides
 ## Semicolons
 
   <a name="semicolons--required"></a><a name="20.1"></a>
-  - [21.1](#semicolons--required) **Yup.** eslint: [`semi`](http://eslint.org/docs/rules/semi.html) jscs: [`requireSemicolons`](http://jscs.info/rule/requireSemicolons)
+  - [21.1](#semicolons--required) **Yup.** eslint: [`semi`](https://eslint.org/docs/rules/semi.html) jscs: [`requireSemicolons`](http://jscs.info/rule/requireSemicolons)
 
     ```javascript
     // bad
@@ -2816,7 +2816,7 @@ Other Style Guides
     ```
 
   <a name="coercion--numbers"></a><a name="21.3"></a>
-  - [22.3](#coercion--numbers) Numbers: Use `Number` for type casting and `parseInt` always with a radix for parsing strings. eslint: [`radix`](http://eslint.org/docs/rules/radix) [`no-new-wrappers`](https://eslint.org/docs/rules/no-new-wrappers)
+  - [22.3](#coercion--numbers) Numbers: Use `Number` for type casting and `parseInt` always with a radix for parsing strings. eslint: [`radix`](https://eslint.org/docs/rules/radix) [`no-new-wrappers`](https://eslint.org/docs/rules/no-new-wrappers)
 
     ```javascript
     const inputValue = '4';
@@ -2883,7 +2883,7 @@ Other Style Guides
 ## Naming Conventions
 
   <a name="naming--descriptive"></a><a name="22.1"></a>
-  - [23.1](#naming--descriptive) Avoid single letter names. Be descriptive with your naming. eslint: [`id-length`](http://eslint.org/docs/rules/id-length)
+  - [23.1](#naming--descriptive) Avoid single letter names. Be descriptive with your naming. eslint: [`id-length`](https://eslint.org/docs/rules/id-length)
 
     ```javascript
     // bad
@@ -2898,7 +2898,7 @@ Other Style Guides
     ```
 
   <a name="naming--camelCase"></a><a name="22.2"></a>
-  - [23.2](#naming--camelCase) Use camelCase when naming objects, functions, and instances. eslint: [`camelcase`](http://eslint.org/docs/rules/camelcase.html) jscs: [`requireCamelCaseOrUpperCaseIdentifiers`](http://jscs.info/rule/requireCamelCaseOrUpperCaseIdentifiers)
+  - [23.2](#naming--camelCase) Use camelCase when naming objects, functions, and instances. eslint: [`camelcase`](https://eslint.org/docs/rules/camelcase.html) jscs: [`requireCamelCaseOrUpperCaseIdentifiers`](http://jscs.info/rule/requireCamelCaseOrUpperCaseIdentifiers)
 
     ```javascript
     // bad
@@ -2912,7 +2912,7 @@ Other Style Guides
     ```
 
   <a name="naming--PascalCase"></a><a name="22.3"></a>
-  - [23.3](#naming--PascalCase) Use PascalCase only when naming constructors or classes. eslint: [`new-cap`](http://eslint.org/docs/rules/new-cap.html) jscs: [`requireCapitalizedConstructors`](http://jscs.info/rule/requireCapitalizedConstructors)
+  - [23.3](#naming--PascalCase) Use PascalCase only when naming constructors or classes. eslint: [`new-cap`](https://eslint.org/docs/rules/new-cap.html) jscs: [`requireCapitalizedConstructors`](http://jscs.info/rule/requireCapitalizedConstructors)
 
     ```javascript
     // bad
@@ -2937,7 +2937,7 @@ Other Style Guides
     ```
 
   <a name="naming--leading-underscore"></a><a name="22.4"></a>
-  - [23.4](#naming--leading-underscore) Do not use trailing or leading underscores. eslint: [`no-underscore-dangle`](http://eslint.org/docs/rules/no-underscore-dangle.html) jscs: [`disallowDanglingUnderscores`](http://jscs.info/rule/disallowDanglingUnderscores)
+  - [23.4](#naming--leading-underscore) Do not use trailing or leading underscores. eslint: [`no-underscore-dangle`](https://eslint.org/docs/rules/no-underscore-dangle.html) jscs: [`disallowDanglingUnderscores`](http://jscs.info/rule/disallowDanglingUnderscores)
 
     > Why? JavaScript does not have the concept of privacy in terms of properties or methods. Although a leading underscore is a common convention to mean “private”, in fact, these properties are fully public, and as such, are part of your public API contract. This convention might lead developers to wrongly think that a change won’t count as breaking, or that tests aren’t needed. tl;dr: if you want something to be “private”, it must not be observably present.
 
@@ -3287,7 +3287,7 @@ Other Style Guides
 
   <a name="standard-library--isnan"></a>
   - [29.1](#standard-library--isnan) Use `Number.isNaN` instead of global `isNaN`.
-    eslint: [`no-restricted-globals`](http://eslint.org/docs/rules/no-restricted-globals)
+    eslint: [`no-restricted-globals`](https://eslint.org/docs/rules/no-restricted-globals)
 
     > Why? The global `isNaN` coerces non-numbers to numbers, returning true for anything that coerces to NaN.
     > If this behavior is desired, make it explicit.
@@ -3304,7 +3304,7 @@ Other Style Guides
 
   <a name="standard-library--isfinite"></a>
   - [29.2](#standard-library--isfinite) Use `Number.isFinite` instead of global `isFinite`.
-    eslint: [`no-restricted-globals`](http://eslint.org/docs/rules/no-restricted-globals)
+    eslint: [`no-restricted-globals`](https://eslint.org/docs/rules/no-restricted-globals)
 
     > Why? The global `isFinite` coerces non-numbers to numbers, returning true for anything that coerces to a finite number.
     > If this behavior is desired, make it explicit.
@@ -3372,7 +3372,7 @@ Other Style Guides
 **Tools**
 
   - Code Style Linters
-    - [ESlint](http://eslint.org/) - [Airbnb Style .eslintrc](https://github.com/airbnb/javascript/blob/master/linters/.eslintrc)
+    - [ESlint](https://eslint.org/) - [Airbnb Style .eslintrc](https://github.com/airbnb/javascript/blob/master/linters/.eslintrc)
     - [JSHint](http://jshint.com/) - [Airbnb Style .jshintrc](https://github.com/airbnb/javascript/blob/master/linters/.jshintrc)
     - [JSCS](https://github.com/jscs-dev/node-jscs) - [Airbnb Style Preset](https://github.com/jscs-dev/node-jscs/blob/master/presets/airbnb.json) (Deprecated, please use [ESlint](https://github.com/airbnb/javascript/tree/master/packages/eslint-config-airbnb-base))
   - Neutrino preset - [neutrino-preset-airbnb-base](https://neutrino.js.org/presets/neutrino-preset-airbnb-base/)
diff --git a/packages/eslint-config-airbnb-base/README.md b/packages/eslint-config-airbnb-base/README.md
index 881b86b2db..a28a40a302 100644
--- a/packages/eslint-config-airbnb-base/README.md
+++ b/packages/eslint-config-airbnb-base/README.md
@@ -75,7 +75,7 @@ Lints ES5 and below. Requires `eslint` and `eslint-plugin-import`.
 
 2. Add `"extends": "airbnb-base/legacy"` to your .eslintrc
 
-See [Airbnb's overarching ESLint config](https://npmjs.com/eslint-config-airbnb), [Airbnb's Javascript styleguide](https://github.com/airbnb/javascript), and the [ESlint config docs](http://eslint.org/docs/user-guide/configuring#extending-configuration-files) for more information.
+See [Airbnb's overarching ESLint config](https://npmjs.com/eslint-config-airbnb), [Airbnb's Javascript styleguide](https://github.com/airbnb/javascript), and the [ESlint config docs](https://eslint.org/docs/user-guide/configuring#extending-configuration-files) for more information.
 
 ## Improving this config
 
diff --git a/packages/eslint-config-airbnb-base/rules/best-practices.js b/packages/eslint-config-airbnb-base/rules/best-practices.js
index 559338074a..3fd0ff105d 100644
--- a/packages/eslint-config-airbnb-base/rules/best-practices.js
+++ b/packages/eslint-config-airbnb-base/rules/best-practices.js
@@ -4,7 +4,7 @@ module.exports = {
     'accessor-pairs': 'off',
 
     // enforces return statements in callbacks of array's methods
-    // http://eslint.org/docs/rules/array-callback-return
+    // https://eslint.org/docs/rules/array-callback-return
     'array-callback-return': 'error',
 
     // treat var statements as if they were block scoped
@@ -14,7 +14,7 @@ module.exports = {
     complexity: ['off', 11],
 
     // enforce that class methods use "this"
-    // http://eslint.org/docs/rules/class-methods-use-this
+    // https://eslint.org/docs/rules/class-methods-use-this
     'class-methods-use-this': ['error', {
       exceptMethods: [],
     }],
@@ -32,11 +32,11 @@ module.exports = {
     'dot-notation': ['error', { allowKeywords: true }],
 
     // enforces consistent newlines before or after dots
-    // http://eslint.org/docs/rules/dot-location
+    // https://eslint.org/docs/rules/dot-location
     'dot-location': ['error', 'property'],
 
     // require the use of === and !==
-    // http://eslint.org/docs/rules/eqeqeq
+    // https://eslint.org/docs/rules/eqeqeq
     eqeqeq: ['error', 'always', { null: 'ignore' }],
 
     // make sure for-in loops have an if statement
@@ -49,11 +49,11 @@ module.exports = {
     'no-caller': 'error',
 
     // disallow lexical declarations in case/default clauses
-    // http://eslint.org/docs/rules/no-case-declarations.html
+    // https://eslint.org/docs/rules/no-case-declarations.html
     'no-case-declarations': 'error',
 
     // disallow division operators explicitly at beginning of regular expression
-    // http://eslint.org/docs/rules/no-div-regex
+    // https://eslint.org/docs/rules/no-div-regex
     'no-div-regex': 'off',
 
     // disallow else after a return in an if
@@ -61,7 +61,7 @@ module.exports = {
     'no-else-return': ['error', { allowElseIf: false }],
 
     // disallow empty functions, except for standalone funcs/arrows
-    // http://eslint.org/docs/rules/no-empty-function
+    // https://eslint.org/docs/rules/no-empty-function
     'no-empty-function': ['error', {
       allow: [
         'arrowFunctions',
@@ -71,7 +71,7 @@ module.exports = {
     }],
 
     // disallow empty destructuring patterns
-    // http://eslint.org/docs/rules/no-empty-pattern
+    // https://eslint.org/docs/rules/no-empty-pattern
     'no-empty-pattern': 'error',
 
     // disallow comparisons to null without a type-checking operator
@@ -87,7 +87,7 @@ module.exports = {
     'no-extra-bind': 'error',
 
     // disallow Unnecessary Labels
-    // http://eslint.org/docs/rules/no-extra-label
+    // https://eslint.org/docs/rules/no-extra-label
     'no-extra-label': 'error',
 
     // disallow fallthrough of case statements
@@ -97,13 +97,13 @@ module.exports = {
     'no-floating-decimal': 'error',
 
     // disallow reassignments of native objects or read-only globals
-    // http://eslint.org/docs/rules/no-global-assign
+    // https://eslint.org/docs/rules/no-global-assign
     'no-global-assign': ['error', { exceptions: [] }],
     // deprecated in favor of no-global-assign
     'no-native-reassign': 'off',
 
     // disallow implicit type conversions
-    // http://eslint.org/docs/rules/no-implicit-coercion
+    // https://eslint.org/docs/rules/no-implicit-coercion
     'no-implicit-coercion': ['off', {
       boolean: false,
       number: true,
@@ -112,7 +112,7 @@ module.exports = {
     }],
 
     // disallow var and named functions in global scope
-    // http://eslint.org/docs/rules/no-implicit-globals
+    // https://eslint.org/docs/rules/no-implicit-globals
     'no-implicit-globals': 'off',
 
     // disallow use of eval()-like methods
@@ -134,7 +134,7 @@ module.exports = {
     'no-loop-func': 'error',
 
     // disallow magic numbers
-    // http://eslint.org/docs/rules/no-magic-numbers
+    // https://eslint.org/docs/rules/no-magic-numbers
     'no-magic-numbers': ['off', {
       ignore: [],
       ignoreArrayIndexes: true,
@@ -168,7 +168,7 @@ module.exports = {
 
     // disallow reassignment of function parameters
     // disallow parameter object manipulation except for specific exclusions
-    // rule: http://eslint.org/docs/rules/no-param-reassign.html
+    // rule: https://eslint.org/docs/rules/no-param-reassign.html
     'no-param-reassign': ['error', {
       props: true,
       ignorePropertyModificationsFor: [
@@ -190,7 +190,7 @@ module.exports = {
     'no-redeclare': 'error',
 
     // disallow certain object properties
-    // http://eslint.org/docs/rules/no-restricted-properties
+    // https://eslint.org/docs/rules/no-restricted-properties
     'no-restricted-properties': ['error', {
       object: 'arguments',
       property: 'callee',
@@ -241,7 +241,7 @@ module.exports = {
     'no-script-url': 'error',
 
     // disallow self assignment
-    // http://eslint.org/docs/rules/no-self-assign
+    // https://eslint.org/docs/rules/no-self-assign
     'no-self-assign': 'error',
 
     // disallow comparisons where both sides are exactly the same
@@ -254,7 +254,7 @@ module.exports = {
     'no-throw-literal': 'error',
 
     // disallow unmodified conditions of loops
-    // http://eslint.org/docs/rules/no-unmodified-loop-condition
+    // https://eslint.org/docs/rules/no-unmodified-loop-condition
     'no-unmodified-loop-condition': 'off',
 
     // disallow usage of expressions in statement position
@@ -265,26 +265,26 @@ module.exports = {
     }],
 
     // disallow unused labels
-    // http://eslint.org/docs/rules/no-unused-labels
+    // https://eslint.org/docs/rules/no-unused-labels
     'no-unused-labels': 'error',
 
     // disallow unnecessary .call() and .apply()
     'no-useless-call': 'off',
 
     // disallow useless string concatenation
-    // http://eslint.org/docs/rules/no-useless-concat
+    // https://eslint.org/docs/rules/no-useless-concat
     'no-useless-concat': 'error',
 
     // disallow unnecessary string escaping
-    // http://eslint.org/docs/rules/no-useless-escape
+    // https://eslint.org/docs/rules/no-useless-escape
     'no-useless-escape': 'error',
 
     // disallow redundant return; keywords
-    // http://eslint.org/docs/rules/no-useless-return
+    // https://eslint.org/docs/rules/no-useless-return
     'no-useless-return': 'error',
 
     // disallow use of void operator
-    // http://eslint.org/docs/rules/no-void
+    // https://eslint.org/docs/rules/no-void
     'no-void': 'error',
 
     // disallow usage of configurable warning terms in comments: e.g. todo
@@ -294,21 +294,21 @@ module.exports = {
     'no-with': 'error',
 
     // require using Error objects as Promise rejection reasons
-    // http://eslint.org/docs/rules/prefer-promise-reject-errors
+    // https://eslint.org/docs/rules/prefer-promise-reject-errors
     'prefer-promise-reject-errors': ['error', { allowEmptyReject: true }],
 
     // require use of the second argument for parseInt()
     radix: 'error',
 
     // require `await` in `async function` (note: this is a horrible rule that should never be used)
-    // http://eslint.org/docs/rules/require-await
+    // https://eslint.org/docs/rules/require-await
     'require-await': 'off',
 
     // requires to declare all vars on top of their containing scope
     'vars-on-top': 'error',
 
     // require immediate function invocation to be wrapped in parentheses
-    // http://eslint.org/docs/rules/wrap-iife.html
+    // https://eslint.org/docs/rules/wrap-iife.html
     'wrap-iife': ['error', 'outside', { functionPrototypeMethods: false }],
 
     // require or disallow Yoda conditions
diff --git a/packages/eslint-config-airbnb-base/rules/errors.js b/packages/eslint-config-airbnb-base/rules/errors.js
index 19b815a09b..8cae2b525e 100644
--- a/packages/eslint-config-airbnb-base/rules/errors.js
+++ b/packages/eslint-config-airbnb-base/rules/errors.js
@@ -1,19 +1,19 @@
 module.exports = {
   rules: {
     // Enforce “for” loop update clause moving the counter in the right direction
-    // http://eslint.org/docs/rules/for-direction
+    // https://eslint.org/docs/rules/for-direction
     'for-direction': 'error',
 
     // Enforces that a return statement is present in property getters
-    // http://eslint.org/docs/rules/getter-return
+    // https://eslint.org/docs/rules/getter-return
     'getter-return': ['error', { allowImplicit: true }],
 
     // Disallow await inside of loops
-    // http://eslint.org/docs/rules/no-await-in-loop
+    // https://eslint.org/docs/rules/no-await-in-loop
     'no-await-in-loop': 'error',
 
     // Disallow comparisons to negative zero
-    // http://eslint.org/docs/rules/no-compare-neg-zero
+    // https://eslint.org/docs/rules/no-compare-neg-zero
     'no-compare-neg-zero': 'error',
 
     // disallow assignment in conditional expressions
@@ -50,11 +50,11 @@ module.exports = {
     'no-ex-assign': 'error',
 
     // disallow double-negation boolean casts in a boolean context
-    // http://eslint.org/docs/rules/no-extra-boolean-cast
+    // https://eslint.org/docs/rules/no-extra-boolean-cast
     'no-extra-boolean-cast': 'error',
 
     // disallow unnecessary parentheses
-    // http://eslint.org/docs/rules/no-extra-parens
+    // https://eslint.org/docs/rules/no-extra-parens
     'no-extra-parens': ['off', 'all', {
       conditionalAssign: true,
       nestedBinaryExpressions: false,
@@ -82,7 +82,7 @@ module.exports = {
     'no-obj-calls': 'error',
 
     // disallow use of Object.prototypes builtins directly
-    // http://eslint.org/docs/rules/no-prototype-builtins
+    // https://eslint.org/docs/rules/no-prototype-builtins
     'no-prototype-builtins': 'error',
 
     // disallow multiple spaces in a regular expression literal
@@ -92,22 +92,22 @@ module.exports = {
     'no-sparse-arrays': 'error',
 
     // Disallow template literal placeholder syntax in regular strings
-    // http://eslint.org/docs/rules/no-template-curly-in-string
+    // https://eslint.org/docs/rules/no-template-curly-in-string
     'no-template-curly-in-string': 'error',
 
     // Avoid code that looks like two expressions but is actually one
-    // http://eslint.org/docs/rules/no-unexpected-multiline
+    // https://eslint.org/docs/rules/no-unexpected-multiline
     'no-unexpected-multiline': 'error',
 
     // disallow unreachable statements after a return, throw, continue, or break statement
     'no-unreachable': 'error',
 
     // disallow return/throw/break/continue inside finally blocks
-    // http://eslint.org/docs/rules/no-unsafe-finally
+    // https://eslint.org/docs/rules/no-unsafe-finally
     'no-unsafe-finally': 'error',
 
     // disallow negating the left operand of relational operators
-    // http://eslint.org/docs/rules/no-unsafe-negation
+    // https://eslint.org/docs/rules/no-unsafe-negation
     'no-unsafe-negation': 'error',
     // disallow negation of the left operand of an in expression
     // deprecated in favor of no-unsafe-negation
@@ -117,11 +117,11 @@ module.exports = {
     'use-isnan': 'error',
 
     // ensure JSDoc comments are valid
-    // http://eslint.org/docs/rules/valid-jsdoc
+    // https://eslint.org/docs/rules/valid-jsdoc
     'valid-jsdoc': 'off',
 
     // ensure that the results of typeof are compared against a valid string
-    // http://eslint.org/docs/rules/valid-typeof
+    // https://eslint.org/docs/rules/valid-typeof
     'valid-typeof': ['error', { requireStringLiterals: true }],
   }
 };
diff --git a/packages/eslint-config-airbnb-base/rules/es6.js b/packages/eslint-config-airbnb-base/rules/es6.js
index f53814d1e7..cf81d198d9 100644
--- a/packages/eslint-config-airbnb-base/rules/es6.js
+++ b/packages/eslint-config-airbnb-base/rules/es6.js
@@ -13,35 +13,35 @@ module.exports = {
 
   rules: {
     // enforces no braces where they can be omitted
-    // http://eslint.org/docs/rules/arrow-body-style
+    // https://eslint.org/docs/rules/arrow-body-style
     // TODO: enable requireReturnForObjectLiteral?
     'arrow-body-style': ['error', 'as-needed', {
       requireReturnForObjectLiteral: false,
     }],
 
     // require parens in arrow function arguments
-    // http://eslint.org/docs/rules/arrow-parens
+    // https://eslint.org/docs/rules/arrow-parens
     'arrow-parens': ['error', 'as-needed', {
       requireForBlockBody: true,
     }],
 
     // require space before/after arrow function's arrow
-    // http://eslint.org/docs/rules/arrow-spacing
+    // https://eslint.org/docs/rules/arrow-spacing
     'arrow-spacing': ['error', { before: true, after: true }],
 
     // verify super() callings in constructors
     'constructor-super': 'error',
 
     // enforce the spacing around the * in generator functions
-    // http://eslint.org/docs/rules/generator-star-spacing
+    // https://eslint.org/docs/rules/generator-star-spacing
     'generator-star-spacing': ['error', { before: false, after: true }],
 
     // disallow modifying variables of class declarations
-    // http://eslint.org/docs/rules/no-class-assign
+    // https://eslint.org/docs/rules/no-class-assign
     'no-class-assign': 'error',
 
     // disallow arrow functions where they could be confused with comparisons
-    // http://eslint.org/docs/rules/no-confusing-arrow
+    // https://eslint.org/docs/rules/no-confusing-arrow
     'no-confusing-arrow': ['error', {
       allowParens: true,
     }],
@@ -50,36 +50,36 @@ module.exports = {
     'no-const-assign': 'error',
 
     // disallow duplicate class members
-    // http://eslint.org/docs/rules/no-dupe-class-members
+    // https://eslint.org/docs/rules/no-dupe-class-members
     'no-dupe-class-members': 'error',
 
     // disallow importing from the same path more than once
-    // http://eslint.org/docs/rules/no-duplicate-imports
+    // https://eslint.org/docs/rules/no-duplicate-imports
     // replaced by https://github.com/benmosher/eslint-plugin-import/blob/master/docs/rules/no-duplicates.md
     'no-duplicate-imports': 'off',
 
     // disallow symbol constructor
-    // http://eslint.org/docs/rules/no-new-symbol
+    // https://eslint.org/docs/rules/no-new-symbol
     'no-new-symbol': 'error',
 
     // disallow specific imports
-    // http://eslint.org/docs/rules/no-restricted-imports
+    // https://eslint.org/docs/rules/no-restricted-imports
     'no-restricted-imports': 'off',
 
     // disallow to use this/super before super() calling in constructors.
-    // http://eslint.org/docs/rules/no-this-before-super
+    // https://eslint.org/docs/rules/no-this-before-super
     'no-this-before-super': 'error',
 
     // disallow useless computed property keys
-    // http://eslint.org/docs/rules/no-useless-computed-key
+    // https://eslint.org/docs/rules/no-useless-computed-key
     'no-useless-computed-key': 'error',
 
     // disallow unnecessary constructor
-    // http://eslint.org/docs/rules/no-useless-constructor
+    // https://eslint.org/docs/rules/no-useless-constructor
     'no-useless-constructor': 'error',
 
     // disallow renaming import, export, and destructured assignments to the same name
-    // http://eslint.org/docs/rules/no-useless-rename
+    // https://eslint.org/docs/rules/no-useless-rename
     'no-useless-rename': ['error', {
       ignoreDestructuring: false,
       ignoreImport: false,
@@ -90,7 +90,7 @@ module.exports = {
     'no-var': 'error',
 
     // require method and property shorthand syntax for object literals
-    // http://eslint.org/docs/rules/object-shorthand
+    // https://eslint.org/docs/rules/object-shorthand
     'object-shorthand': ['error', 'always', {
       ignoreConstructors: false,
       avoidQuotes: true,
@@ -109,7 +109,7 @@ module.exports = {
     }],
 
     // Prefer destructuring from arrays and objects
-    // http://eslint.org/docs/rules/prefer-destructuring
+    // https://eslint.org/docs/rules/prefer-destructuring
     'prefer-destructuring': ['error', {
       VariableDeclarator: {
         array: false,
@@ -124,35 +124,35 @@ module.exports = {
     }],
 
     // disallow parseInt() in favor of binary, octal, and hexadecimal literals
-    // http://eslint.org/docs/rules/prefer-numeric-literals
+    // https://eslint.org/docs/rules/prefer-numeric-literals
     'prefer-numeric-literals': 'error',
 
     // suggest using Reflect methods where applicable
-    // http://eslint.org/docs/rules/prefer-reflect
+    // https://eslint.org/docs/rules/prefer-reflect
     'prefer-reflect': 'off',
 
     // use rest parameters instead of arguments
-    // http://eslint.org/docs/rules/prefer-rest-params
+    // https://eslint.org/docs/rules/prefer-rest-params
     'prefer-rest-params': 'error',
 
     // suggest using the spread operator instead of .apply()
-    // http://eslint.org/docs/rules/prefer-spread
+    // https://eslint.org/docs/rules/prefer-spread
     'prefer-spread': 'error',
 
     // suggest using template literals instead of string concatenation
-    // http://eslint.org/docs/rules/prefer-template
+    // https://eslint.org/docs/rules/prefer-template
     'prefer-template': 'error',
 
     // disallow generator functions that do not have yield
-    // http://eslint.org/docs/rules/require-yield
+    // https://eslint.org/docs/rules/require-yield
     'require-yield': 'error',
 
     // enforce spacing between object rest-spread
-    // http://eslint.org/docs/rules/rest-spread-spacing
+    // https://eslint.org/docs/rules/rest-spread-spacing
     'rest-spread-spacing': ['error', 'never'],
 
     // import sorting
-    // http://eslint.org/docs/rules/sort-imports
+    // https://eslint.org/docs/rules/sort-imports
     'sort-imports': ['off', {
       ignoreCase: false,
       ignoreMemberSort: false,
@@ -160,15 +160,15 @@ module.exports = {
     }],
 
     // require a Symbol description
-    // http://eslint.org/docs/rules/symbol-description
+    // https://eslint.org/docs/rules/symbol-description
     'symbol-description': 'error',
 
     // enforce usage of spacing in template strings
-    // http://eslint.org/docs/rules/template-curly-spacing
+    // https://eslint.org/docs/rules/template-curly-spacing
     'template-curly-spacing': 'error',
 
     // enforce spacing around the * in yield* expressions
-    // http://eslint.org/docs/rules/yield-star-spacing
+    // https://eslint.org/docs/rules/yield-star-spacing
     'yield-star-spacing': ['error', 'after']
   }
 };
diff --git a/packages/eslint-config-airbnb-base/rules/node.js b/packages/eslint-config-airbnb-base/rules/node.js
index 9413b5483a..b178d7f909 100644
--- a/packages/eslint-config-airbnb-base/rules/node.js
+++ b/packages/eslint-config-airbnb-base/rules/node.js
@@ -8,14 +8,14 @@ module.exports = {
     'callback-return': 'off',
 
     // require all requires be top-level
-    // http://eslint.org/docs/rules/global-require
+    // https://eslint.org/docs/rules/global-require
     'global-require': 'error',
 
     // enforces error handling in callbacks (node environment)
     'handle-callback-err': 'off',
 
     // disallow use of the Buffer() constructor
-    // http://eslint.org/docs/rules/no-buffer-constructor
+    // https://eslint.org/docs/rules/no-buffer-constructor
     'no-buffer-constructor': 'error',
 
     // disallow mixing regular variable and require declarations
@@ -25,7 +25,7 @@ module.exports = {
     'no-new-require': 'error',
 
     // disallow string concatenation with __dirname and __filename
-    // http://eslint.org/docs/rules/no-path-concat
+    // https://eslint.org/docs/rules/no-path-concat
     'no-path-concat': 'error',
 
     // disallow use of process.env
diff --git a/packages/eslint-config-airbnb-base/rules/style.js b/packages/eslint-config-airbnb-base/rules/style.js
index e358e2a417..26b9f784d0 100644
--- a/packages/eslint-config-airbnb-base/rules/style.js
+++ b/packages/eslint-config-airbnb-base/rules/style.js
@@ -1,12 +1,12 @@
 module.exports = {
   rules: {
     // enforce line breaks after opening and before closing array brackets
-    // http://eslint.org/docs/rules/array-bracket-newline
+    // https://eslint.org/docs/rules/array-bracket-newline
     // TODO: enable? semver-major
     'array-bracket-newline': ['off', 'consistent'], // object option alternative: { multiline: true, minItems: 3 }
 
     // enforce line breaks between array elements
-    // http://eslint.org/docs/rules/array-element-newline
+    // https://eslint.org/docs/rules/array-element-newline
     // TODO: enable? semver-major
     'array-element-newline': ['off', { multiline: true, minItems: 3 }],
 
@@ -14,7 +14,7 @@ module.exports = {
     'array-bracket-spacing': ['error', 'never'],
 
     // enforce spacing inside single-line blocks
-    // http://eslint.org/docs/rules/block-spacing
+    // https://eslint.org/docs/rules/block-spacing
     'block-spacing': ['error', 'always'],
 
     // enforce one true brace style
@@ -24,7 +24,7 @@ module.exports = {
     camelcase: ['error', { properties: 'never' }],
 
     // enforce or disallow capitalization of the first letter of a comment
-    // http://eslint.org/docs/rules/capitalized-comments
+    // https://eslint.org/docs/rules/capitalized-comments
     'capitalized-comments': ['off', 'never', {
       line: {
         ignorePattern: '.*',
@@ -63,22 +63,22 @@ module.exports = {
     'eol-last': ['error', 'always'],
 
     // enforce spacing between functions and their invocations
-    // http://eslint.org/docs/rules/func-call-spacing
+    // https://eslint.org/docs/rules/func-call-spacing
     'func-call-spacing': ['error', 'never'],
 
     // requires function names to match the name of the variable or property to which they are
     // assigned
-    // http://eslint.org/docs/rules/func-name-matching
+    // https://eslint.org/docs/rules/func-name-matching
     'func-name-matching': ['off', 'always', {
       includeCommonJSModuleExports: false
     }],
 
     // require function expressions to have a name
-    // http://eslint.org/docs/rules/func-names
+    // https://eslint.org/docs/rules/func-names
     'func-names': 'warn',
 
     // enforces use of function declarations or expressions
-    // http://eslint.org/docs/rules/func-style
+    // https://eslint.org/docs/rules/func-style
     // TODO: enable
     'func-style': ['off', 'expression'],
 
@@ -87,7 +87,7 @@ module.exports = {
     'function-paren-newline': ['error', 'multiline'],
 
     // Blacklist certain identifiers to prevent them being used
-    // http://eslint.org/docs/rules/id-blacklist
+    // https://eslint.org/docs/rules/id-blacklist
     'id-blacklist': 'off',
 
     // this option enforces minimum and maximum identifier lengths
@@ -98,7 +98,7 @@ module.exports = {
     'id-match': 'off',
 
     // this option sets a specific tab width for your code
-    // http://eslint.org/docs/rules/indent
+    // https://eslint.org/docs/rules/indent
     indent: ['error', 2, {
       SwitchCase: 1,
       VariableDeclarator: 1,
@@ -123,7 +123,7 @@ module.exports = {
     }],
 
     // specify whether double or single quotes should be used in JSX attributes
-    // http://eslint.org/docs/rules/jsx-quotes
+    // https://eslint.org/docs/rules/jsx-quotes
     'jsx-quotes': ['off', 'prefer-double'],
 
     // enforces spacing between keys and values in object literal properties
@@ -141,7 +141,7 @@ module.exports = {
     }],
 
     // enforce position of line comments
-    // http://eslint.org/docs/rules/line-comment-position
+    // https://eslint.org/docs/rules/line-comment-position
     // TODO: enable?
     'line-comment-position': ['off', {
       position: 'above',
@@ -150,7 +150,7 @@ module.exports = {
     }],
 
     // disallow mixed 'LF' and 'CRLF' as linebreaks
-    // http://eslint.org/docs/rules/linebreak-style
+    // https://eslint.org/docs/rules/linebreak-style
     'linebreak-style': ['error', 'unix'],
 
     // require or disallow an empty line between class members
@@ -161,7 +161,7 @@ module.exports = {
     'lines-around-comment': 'off',
 
     // require or disallow newlines around directives
-    // http://eslint.org/docs/rules/lines-around-directive
+    // https://eslint.org/docs/rules/lines-around-directive
     'lines-around-directive': ['error', {
       before: 'always',
       after: 'always',
@@ -171,7 +171,7 @@ module.exports = {
     'max-depth': ['off', 4],
 
     // specify the maximum length of a line in your program
-    // http://eslint.org/docs/rules/max-len
+    // https://eslint.org/docs/rules/max-len
     'max-len': ['error', 100, 2, {
       ignoreUrls: true,
       ignoreComments: false,
@@ -181,7 +181,7 @@ module.exports = {
     }],
 
     // specify the max number of lines in a file
-    // http://eslint.org/docs/rules/max-lines
+    // https://eslint.org/docs/rules/max-lines
     'max-lines': ['off', {
       max: 300,
       skipBlankLines: true,
@@ -198,7 +198,7 @@ module.exports = {
     'max-statements': ['off', 10],
 
     // restrict the number of statements per line
-    // http://eslint.org/docs/rules/max-statements-per-line
+    // https://eslint.org/docs/rules/max-statements-per-line
     'max-statements-per-line': ['off', { max: 1 }],
 
     // enforce a particular style for multiline comments
@@ -206,7 +206,7 @@ module.exports = {
     'multiline-comment-style': ['off', 'starred-block'],
 
     // require multiline ternary
-    // http://eslint.org/docs/rules/multiline-ternary
+    // https://eslint.org/docs/rules/multiline-ternary
     // TODO: enable?
     'multiline-ternary': ['off', 'never'],
 
@@ -219,40 +219,40 @@ module.exports = {
     }],
 
     // disallow the omission of parentheses when invoking a constructor with no arguments
-    // http://eslint.org/docs/rules/new-parens
+    // https://eslint.org/docs/rules/new-parens
     'new-parens': 'error',
 
     // allow/disallow an empty newline after var statement
     'newline-after-var': 'off',
 
-    // http://eslint.org/docs/rules/newline-before-return
+    // https://eslint.org/docs/rules/newline-before-return
     'newline-before-return': 'off',
 
     // enforces new line after each method call in the chain to make it
     // more readable and easy to maintain
-    // http://eslint.org/docs/rules/newline-per-chained-call
+    // https://eslint.org/docs/rules/newline-per-chained-call
     'newline-per-chained-call': ['error', { ignoreChainWithDepth: 4 }],
 
     // disallow use of the Array constructor
     'no-array-constructor': 'error',
 
     // disallow use of bitwise operators
-    // http://eslint.org/docs/rules/no-bitwise
+    // https://eslint.org/docs/rules/no-bitwise
     'no-bitwise': 'error',
 
     // disallow use of the continue statement
-    // http://eslint.org/docs/rules/no-continue
+    // https://eslint.org/docs/rules/no-continue
     'no-continue': 'error',
 
     // disallow comments inline after code
     'no-inline-comments': 'off',
 
     // disallow if as the only statement in an else block
-    // http://eslint.org/docs/rules/no-lonely-if
+    // https://eslint.org/docs/rules/no-lonely-if
     'no-lonely-if': 'error',
 
     // disallow un-paren'd mixes of different operators
-    // http://eslint.org/docs/rules/no-mixed-operators
+    // https://eslint.org/docs/rules/no-mixed-operators
     'no-mixed-operators': ['error', {
       // the list of arthmetic groups disallows mixing `%` and `**`
       // with other arithmetic operators.
@@ -278,14 +278,14 @@ module.exports = {
     'no-mixed-spaces-and-tabs': 'error',
 
     // disallow use of chained assignment expressions
-    // http://eslint.org/docs/rules/no-multi-assign
+    // https://eslint.org/docs/rules/no-multi-assign
     'no-multi-assign': ['error'],
 
     // disallow multiple empty lines and only one newline at the end
     'no-multiple-empty-lines': ['error', { max: 2, maxEOF: 1 }],
 
     // disallow negated conditions
-    // http://eslint.org/docs/rules/no-negated-condition
+    // https://eslint.org/docs/rules/no-negated-condition
     'no-negated-condition': 'off',
 
     // disallow nested ternary expressions
@@ -295,11 +295,11 @@ module.exports = {
     'no-new-object': 'error',
 
     // disallow use of unary operators, ++ and --
-    // http://eslint.org/docs/rules/no-plusplus
+    // https://eslint.org/docs/rules/no-plusplus
     'no-plusplus': 'error',
 
     // disallow certain syntax forms
-    // http://eslint.org/docs/rules/no-restricted-syntax
+    // https://eslint.org/docs/rules/no-restricted-syntax
     'no-restricted-syntax': [
       'error',
       {
@@ -345,29 +345,29 @@ module.exports = {
 
     // disallow the use of Boolean literals in conditional expressions
     // also, prefer `a || b` over `a ? a : b`
-    // http://eslint.org/docs/rules/no-unneeded-ternary
+    // https://eslint.org/docs/rules/no-unneeded-ternary
     'no-unneeded-ternary': ['error', { defaultAssignment: false }],
 
     // disallow whitespace before properties
-    // http://eslint.org/docs/rules/no-whitespace-before-property
+    // https://eslint.org/docs/rules/no-whitespace-before-property
     'no-whitespace-before-property': 'error',
 
     // enforce the location of single-line statements
-    // http://eslint.org/docs/rules/nonblock-statement-body-position
+    // https://eslint.org/docs/rules/nonblock-statement-body-position
     'nonblock-statement-body-position': ['error', 'beside', { overrides: {} }],
 
     // require padding inside curly braces
     'object-curly-spacing': ['error', 'always'],
 
     // enforce line breaks between braces
-    // http://eslint.org/docs/rules/object-curly-newline
+    // https://eslint.org/docs/rules/object-curly-newline
     'object-curly-newline': ['error', {
       ObjectExpression: { minProperties: 4, multiline: true, consistent: true },
       ObjectPattern: { minProperties: 4, multiline: true, consistent: true }
     }],
 
     // enforce "same line" or "multiple line" on object properties.
-    // http://eslint.org/docs/rules/object-property-newline
+    // https://eslint.org/docs/rules/object-property-newline
     'object-property-newline': ['error', {
       allowMultiplePropertiesPerLine: true,
     }],
@@ -376,11 +376,11 @@ module.exports = {
     'one-var': ['error', 'never'],
 
     // require a newline around variable declaration
-    // http://eslint.org/docs/rules/one-var-declaration-per-line
+    // https://eslint.org/docs/rules/one-var-declaration-per-line
     'one-var-declaration-per-line': ['error', 'always'],
 
     // require assignment operator shorthand where possible or prohibit it entirely
-    // http://eslint.org/docs/rules/operator-assignment
+    // https://eslint.org/docs/rules/operator-assignment
     'operator-assignment': ['error', 'always'],
 
     // Requires operator at the beginning of the line in multiline statements
@@ -391,18 +391,18 @@ module.exports = {
     'padded-blocks': ['error', { blocks: 'never', classes: 'never', switches: 'never' }],
 
     // Require or disallow padding lines between statements
-    // http://eslint.org/docs/rules/padding-line-between-statements
+    // https://eslint.org/docs/rules/padding-line-between-statements
     'padding-line-between-statements': 'off',
 
     // require quotes around object literal property names
-    // http://eslint.org/docs/rules/quote-props.html
+    // https://eslint.org/docs/rules/quote-props.html
     'quote-props': ['error', 'as-needed', { keywords: false, unnecessary: true, numbers: false }],
 
     // specify whether double or single quotes should be used
     quotes: ['error', 'single', { avoidEscape: true }],
 
     // do not require jsdoc
-    // http://eslint.org/docs/rules/require-jsdoc
+    // https://eslint.org/docs/rules/require-jsdoc
     'require-jsdoc': 'off',
 
     // require or disallow use of semicolons instead of ASI
@@ -412,7 +412,7 @@ module.exports = {
     'semi-spacing': ['error', { before: false, after: true }],
 
     // Enforce location of semicolons
-    // http://eslint.org/docs/rules/semi-style
+    // https://eslint.org/docs/rules/semi-style
     'semi-style': ['error', 'last'],
 
     // requires object keys to be sorted
@@ -425,7 +425,7 @@ module.exports = {
     'space-before-blocks': 'error',
 
     // require or disallow space before function opening parenthesis
-    // http://eslint.org/docs/rules/space-before-function-paren
+    // https://eslint.org/docs/rules/space-before-function-paren
     'space-before-function-paren': ['error', {
       anonymous: 'always',
       named: 'never',
@@ -439,7 +439,7 @@ module.exports = {
     'space-infix-ops': 'error',
 
     // Require or disallow spaces before/after unary operators
-    // http://eslint.org/docs/rules/space-unary-ops
+    // https://eslint.org/docs/rules/space-unary-ops
     'space-unary-ops': ['error', {
       words: true,
       nonwords: false,
@@ -448,7 +448,7 @@ module.exports = {
     }],
 
     // require or disallow a space immediately following the // or /* in a comment
-    // http://eslint.org/docs/rules/spaced-comment
+    // https://eslint.org/docs/rules/spaced-comment
     'spaced-comment': ['error', 'always', {
       line: {
         exceptions: ['-', '+'],
@@ -462,15 +462,15 @@ module.exports = {
     }],
 
     // Enforce spacing around colons of switch statements
-    // http://eslint.org/docs/rules/switch-colon-spacing
+    // https://eslint.org/docs/rules/switch-colon-spacing
     'switch-colon-spacing': ['error', { after: true, before: false }],
 
     // Require or disallow spacing between template tags and their literals
-    // http://eslint.org/docs/rules/template-tag-spacing
+    // https://eslint.org/docs/rules/template-tag-spacing
     'template-tag-spacing': ['error', 'never'],
 
     // require or disallow the Unicode Byte Order Mark
-    // http://eslint.org/docs/rules/unicode-bom
+    // https://eslint.org/docs/rules/unicode-bom
     'unicode-bom': ['error', 'never'],
 
     // require regex literals to be wrapped in parentheses
diff --git a/packages/eslint-config-airbnb-base/rules/variables.js b/packages/eslint-config-airbnb-base/rules/variables.js
index 805563a51a..aeab992320 100644
--- a/packages/eslint-config-airbnb-base/rules/variables.js
+++ b/packages/eslint-config-airbnb-base/rules/variables.js
@@ -12,7 +12,7 @@ module.exports = {
     'no-delete-var': 'error',
 
     // disallow labels that share a name with a variable
-    // http://eslint.org/docs/rules/no-label-var
+    // https://eslint.org/docs/rules/no-label-var
     'no-label-var': 'error',
 
     // disallow specific globals
@@ -31,7 +31,7 @@ module.exports = {
     'no-undef-init': 'error',
 
     // disallow use of undefined variable
-    // http://eslint.org/docs/rules/no-undefined
+    // https://eslint.org/docs/rules/no-undefined
     // TODO: enable?
     'no-undefined': 'off',
 
diff --git a/packages/eslint-config-airbnb/CHANGELOG.md b/packages/eslint-config-airbnb/CHANGELOG.md
index ae38f3c048..d19acfc7f2 100644
--- a/packages/eslint-config-airbnb/CHANGELOG.md
+++ b/packages/eslint-config-airbnb/CHANGELOG.md
@@ -308,36 +308,36 @@
 [pr-modular]: https://github.com/airbnb/javascript/pull/526
 [pr-legacy]: https://github.com/airbnb/javascript/pull/527
 
-[array-bracket-spacing]: http://eslint.org/docs/rules/array-bracket-spacing
-[array-callback-return]: http://eslint.org/docs/rules/array-callback-return
-[arrow-body-style]: http://eslint.org/docs/rules/arrow-body-style
-[arrow-spacing]: http://eslint.org/docs/rules/arrow-spacing
-[computed-property-spacing]: http://eslint.org/docs/rules/computed-property-spacing
-[id-length]: http://eslint.org/docs/rules/id-length
-[indent]: http://eslint.org/docs/rules/indent
-[max-len]: http://eslint.org/docs/rules/max-len
-[newline-per-chained-call]: http://eslint.org/docs/rules/newline-per-chained-call
-[no-confusing-arrow]: http://eslint.org/docs/rules/no-confusing-arrow
-[no-const-assign]: http://eslint.org/docs/rules/no-const-assign
-[no-mixed-spaces-and-tabs]: http://eslint.org/docs/rules/no-mixed-spaces-and-tabs
-[no-multiple-empty-lines]: http://eslint.org/docs/rules/no-multiple-empty-lines
-[no-new-symbol]: http://eslint.org/docs/rules/no-new-symbol
-[no-restricted-imports]: http://eslint.org/docs/rules/no-restricted-imports
-[no-self-assign]: http://eslint.org/docs/rules/no-self-assign
-[no-undef]: http://eslint.org/docs/rules/no-undef
-[no-useless-constructor]: http://eslint.org/docs/rules/no-useless-constructor
-[no-whitespace-before-property]: http://eslint.org/docs/rules/no-whitespace-before-property
-[object-curly-spacing]: http://eslint.org/docs/rules/object-curly-spacing
-[object-shorthand]: http://eslint.org/docs/rules/object-shorthand
-[one-var-declaration-per-line]: http://eslint.org/docs/rules/one-var-declaration-per-line
-[prefer-arrow-callback]: http://eslint.org/docs/rules/prefer-arrow-callback
-[prefer-rest-params]: http://eslint.org/docs/rules/prefer-rest-params
-[prefer-template]: http://eslint.org/docs/rules/prefer-template
-[quote-props]: http://eslint.org/docs/rules/quote-props
-[space-before-function-paren]: http://eslint.org/docs/rules/space-before-function-paren
-[space-before-keywords]: http://eslint.org/docs/rules/space-before-keywords
-[space-in-parens]: http://eslint.org/docs/rules/space-in-parens
-[template-curly-spacing]: http://eslint.org/docs/rules/template-curly-spacing
+[array-bracket-spacing]: https://eslint.org/docs/rules/array-bracket-spacing
+[array-callback-return]: https://eslint.org/docs/rules/array-callback-return
+[arrow-body-style]: https://eslint.org/docs/rules/arrow-body-style
+[arrow-spacing]: https://eslint.org/docs/rules/arrow-spacing
+[computed-property-spacing]: https://eslint.org/docs/rules/computed-property-spacing
+[id-length]: https://eslint.org/docs/rules/id-length
+[indent]: https://eslint.org/docs/rules/indent
+[max-len]: https://eslint.org/docs/rules/max-len
+[newline-per-chained-call]: https://eslint.org/docs/rules/newline-per-chained-call
+[no-confusing-arrow]: https://eslint.org/docs/rules/no-confusing-arrow
+[no-const-assign]: https://eslint.org/docs/rules/no-const-assign
+[no-mixed-spaces-and-tabs]: https://eslint.org/docs/rules/no-mixed-spaces-and-tabs
+[no-multiple-empty-lines]: https://eslint.org/docs/rules/no-multiple-empty-lines
+[no-new-symbol]: https://eslint.org/docs/rules/no-new-symbol
+[no-restricted-imports]: https://eslint.org/docs/rules/no-restricted-imports
+[no-self-assign]: https://eslint.org/docs/rules/no-self-assign
+[no-undef]: https://eslint.org/docs/rules/no-undef
+[no-useless-constructor]: https://eslint.org/docs/rules/no-useless-constructor
+[no-whitespace-before-property]: https://eslint.org/docs/rules/no-whitespace-before-property
+[object-curly-spacing]: https://eslint.org/docs/rules/object-curly-spacing
+[object-shorthand]: https://eslint.org/docs/rules/object-shorthand
+[one-var-declaration-per-line]: https://eslint.org/docs/rules/one-var-declaration-per-line
+[prefer-arrow-callback]: https://eslint.org/docs/rules/prefer-arrow-callback
+[prefer-rest-params]: https://eslint.org/docs/rules/prefer-rest-params
+[prefer-template]: https://eslint.org/docs/rules/prefer-template
+[quote-props]: https://eslint.org/docs/rules/quote-props
+[space-before-function-paren]: https://eslint.org/docs/rules/space-before-function-paren
+[space-before-keywords]: https://eslint.org/docs/rules/space-before-keywords
+[space-in-parens]: https://eslint.org/docs/rules/space-in-parens
+[template-curly-spacing]: https://eslint.org/docs/rules/template-curly-spacing
 
 [react/jsx-space-before-closing]: https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/jsx-space-before-closing.md
 [react/sort-comp]: https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/sort-comp.md
diff --git a/packages/eslint-config-airbnb/README.md b/packages/eslint-config-airbnb/README.md
index 567c929a31..853588d4d3 100644
--- a/packages/eslint-config-airbnb/README.md
+++ b/packages/eslint-config-airbnb/README.md
@@ -59,7 +59,7 @@ This entry point is deprecated. See [eslint-config-airbnb-base](https://npmjs.co
 This entry point is deprecated. See [eslint-config-airbnb-base](https://npmjs.com/eslint-config-airbnb-base).
 
 See [Airbnb's Javascript styleguide](https://github.com/airbnb/javascript) and
-the [ESlint config docs](http://eslint.org/docs/user-guide/configuring#extending-configuration-files)
+the [ESlint config docs](https://eslint.org/docs/user-guide/configuring#extending-configuration-files)
 for more information.
 
 ## Improving this config
diff --git a/packages/eslint-config-airbnb/rules/react.js b/packages/eslint-config-airbnb/rules/react.js
index f6e3528079..d0f4ed54d3 100644
--- a/packages/eslint-config-airbnb/rules/react.js
+++ b/packages/eslint-config-airbnb/rules/react.js
@@ -13,7 +13,7 @@ module.exports = {
   // https://github.com/yannickcr/eslint-plugin-react#list-of-supported-rules
   rules: {
     // Specify whether double or single quotes should be used in JSX attributes
-    // http://eslint.org/docs/rules/jsx-quotes
+    // https://eslint.org/docs/rules/jsx-quotes
     'jsx-quotes': ['error', 'prefer-double'],
 
     'class-methods-use-this': ['error', {
diff --git a/packages/eslint-config-airbnb/test/test-react-order.js b/packages/eslint-config-airbnb/test/test-react-order.js
index e8fa989dbd..b28792a6d5 100644
--- a/packages/eslint-config-airbnb/test/test-react-order.js
+++ b/packages/eslint-config-airbnb/test/test-react-order.js
@@ -17,8 +17,8 @@ const cli = new CLIEngine({
 });
 
 function lint(text) {
-  // @see http://eslint.org/docs/developer-guide/nodejs-api.html#executeonfiles
-  // @see http://eslint.org/docs/developer-guide/nodejs-api.html#executeontext
+  // @see https://eslint.org/docs/developer-guide/nodejs-api.html#executeonfiles
+  // @see https://eslint.org/docs/developer-guide/nodejs-api.html#executeontext
   const linter = cli.executeOnText(text);
   return linter.results[0];
 }
diff --git a/react/README.md b/react/README.md
index ee440e9b11..304e6cbcbb 100644
--- a/react/README.md
+++ b/react/README.md
@@ -195,7 +195,7 @@
 
 ## Quotes
 
-  - Always use double quotes (`"`) for JSX attributes, but single quotes (`'`) for all other JS. eslint: [`jsx-quotes`](http://eslint.org/docs/rules/jsx-quotes)
+  - Always use double quotes (`"`) for JSX attributes, but single quotes (`'`) for all other JS. eslint: [`jsx-quotes`](https://eslint.org/docs/rules/jsx-quotes)
 
     > Why? Regular HTML attributes also typically use double quotes instead of single, so JSX attributes mirror this convention.
 
@@ -215,7 +215,7 @@
 
 ## Spacing
 
-  - Always include a single space in your self-closing tag. eslint: [`no-multi-spaces`](http://eslint.org/docs/rules/no-multi-spaces), [`react/jsx-tag-spacing`](https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/jsx-tag-spacing.md)
+  - Always include a single space in your self-closing tag. eslint: [`no-multi-spaces`](https://eslint.org/docs/rules/no-multi-spaces), [`react/jsx-tag-spacing`](https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/jsx-tag-spacing.md)
 
     ```jsx
     // bad

From 1948c302fd21d7bedd7d6e1a1e83c2e51efcb18e Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Wed, 1 Nov 2017 08:01:50 -0700
Subject: [PATCH 1164/1591] =?UTF-8?q?[Tests]=20on=20`node`=20`v9`;=20use?=
 =?UTF-8?q?=20`nvm=20install-latest-npm`=20so=20new=20npm=20doesn=E2=80=99?=
 =?UTF-8?q?t=20break=20old=20node;=20pin=20included=20builds=20to=20LTS.?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 .travis.yml | 13 +++++++------
 1 file changed, 7 insertions(+), 6 deletions(-)

diff --git a/.travis.yml b/.travis.yml
index aa05d1d238..bc8324b755 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -1,16 +1,16 @@
 language: node_js
 node_js:
+  - "9"
   - "8"
   - "7"
   - "6"
   - "5"
   - "4"
 before_install:
-  - 'if [ "${TRAVIS_NODE_VERSION}" = "0.6" ]; then npm install -g npm@1.3 ; elif [ "${TRAVIS_NODE_VERSION}" != "0.9" ]; then case "$(npm --version)" in 1.*) npm install -g npm@1.4.28 ;; 2.*) npm install -g npm@2 ;; esac ; fi'
-  - 'if [ "${TRAVIS_NODE_VERSION%${TRAVIS_NODE_VERSION#[0-9]}}" = "0" ] || [ "${TRAVIS_NODE_VERSION:0:4}" = "iojs" ]; then npm install -g npm@4.5 ; elif [ "${TRAVIS_NODE_VERSION}" != "0.6" ] && [ "${TRAVIS_NODE_VERSION}" != "0.9" ]; then npm install -g npm; fi'
+  - 'nvm install-latest-npm'
 install:
   - 'if [ -n "${PACKAGE-}" ]; then cd "packages/${PACKAGE}"; fi'
-  - 'if [ "${TRAVIS_NODE_VERSION}" = "0.6" ]; then nvm install 0.8 && npm install -g npm@1.3 && npm install -g npm@1.4.28 && npm install -g npm@2 && npm install && nvm use "${TRAVIS_NODE_VERSION}"; else npm install; fi;'
+  - 'if [ "${TRAVIS_NODE_VERSION}" = "0.6" ] || [ "${TRAVIS_NODE_VERSION}" = "0.9" ]; then nvm install --latest-npm 0.8 && npm install && nvm use "${TRAVIS_NODE_VERSION}"; else npm install; fi;'
   - 'if [ -n "${ESLINT}" ]; then npm install --no-save "eslint@${ESLINT}"; fi'
 script:
   - 'if [ -n "${PREPUBLISH-}" ]; then npm run pretravis && npm run prepublish && npm run posttravis; elif [ -n "${LINT-}" ]; then npm run lint; else npm run travis; fi'
@@ -22,13 +22,14 @@ env:
 matrix:
   fast_finish: true
   include:
-    - node_js: "node"
+    - node_js: "lts/*"
       env: PREPUBLISH=true ESLINT=4 PACKAGE=eslint-config-airbnb
-    - node_js: "node"
+    - node_js: "lts/*"
       env: PREPUBLISH=true ESLINT=4 PACKAGE=eslint-config-airbnb-base
-    - node_js: "node"
+    - node_js: "lts/*"
       env: LINT=true
   allow_failures:
+    - node_js: "9"
     - node_js: "7"
     - node_js: "5"
     - env: PREPUBLISH=true ESLINT=4 PACKAGE=eslint-config-airbnb

From 5682155e9a2bd5391fe8579a25d6abd482d78123 Mon Sep 17 00:00:00 2001
From: Maggie Love <maggie.love1991@gmail.com>
Date: Sun, 29 Oct 2017 17:28:25 -0400
Subject: [PATCH 1165/1591] Adds section about spreading props

---
 react/README.md | 52 +++++++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 52 insertions(+)

diff --git a/react/README.md b/react/README.md
index 304e6cbcbb..e1133c3754 100644
--- a/react/README.md
+++ b/react/README.md
@@ -380,6 +380,58 @@
   };
   ```
 
+  - Use spread props sparingly.
+  > Why? Otherwise you're more likely to pass unnecessary props down to components. And for React v15.6.1 and older, you could [pass invalid HTML attributes to the DOM](https://reactjs.org/blog/2017/09/08/dom-attributes-in-react-16.html).
+
+  Exceptions:
+
+  - HOCs that proxy down props and hoist propTypes
+
+  ```jsx
+  function HOC(WrappedComponent) {
+    return class Proxy extends React.Component {
+      Proxy.propTypes = {
+        text: PropTypes.string,
+        isLoading: PropTypes.bool
+      };
+
+      render() {
+        return <WrappedComponent {...this.props} />
+      }
+    }
+  }
+  ```
+
+  - Spreading objects with known, explicit props. This can be particularly useful when testing React components with Mocha's beforeEach construct.
+
+  ```jsx
+  export default function Foo {
+    const props = {
+      text: '',
+      isPublished: false
+    }
+
+    return (<div {...props} />);
+  }
+  ```
+
+  Notes for use:
+  Filter out unnecessary props when possible. Also, use [prop-types-exact](https://www.npmjs.com/package/prop-types-exact) to help prevent bugs.
+
+  ```jsx
+  //good
+  render() {
+    const { irrelevantProp, ...relevantProps  } = this.props;
+    return <WrappedComponent {...relevantProps} />
+  }
+
+  //bad
+  render() {
+    const { irrelevantProp, ...relevantProps  } = this.props;
+    return <WrappedComponent {...this.props} />
+  }
+  ```
+
 ## Refs
 
   - Always use ref callbacks. eslint: [`react/no-string-refs`](https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/no-string-refs.md)

From 44dbd0bdc41d08eb5de8ad698099ae44240f4b0d Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Sat, 4 Nov 2017 01:02:09 -0700
Subject: [PATCH 1166/1591] =?UTF-8?q?[eslint=20config]=20[patch]=20disable?=
 =?UTF-8?q?=20`no-did-mount-set-state`,=20since=20it=E2=80=99s=20necessary?=
 =?UTF-8?q?=20for=20server-rendering.?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

Fixes #684.
---
 packages/eslint-config-airbnb/rules/react.js | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/packages/eslint-config-airbnb/rules/react.js b/packages/eslint-config-airbnb/rules/react.js
index d0f4ed54d3..8bf726bed6 100644
--- a/packages/eslint-config-airbnb/rules/react.js
+++ b/packages/eslint-config-airbnb/rules/react.js
@@ -142,7 +142,8 @@ module.exports = {
 
     // Prevent usage of setState in componentDidMount
     // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/no-did-mount-set-state.md
-    'react/no-did-mount-set-state': 'error',
+    // this is necessary for server-rendering
+    'react/no-did-mount-set-state': 'off',
 
     // Prevent usage of setState in componentDidUpdate
     // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/no-did-update-set-state.md

From 8cf2c70a4164ba2dad9a79e7ac9021d32a406487 Mon Sep 17 00:00:00 2001
From: Josh Bourgeois <the.peoples.bourgeois@gmail.com>
Date: Wed, 4 Oct 2017 13:38:13 -0700
Subject: [PATCH 1167/1591] [guide] Add explanation for semicolon enforcement
 rule

Also update code samples to highlight ways in which ES6
currently mishandles code when relying on Automatic Semicolon
Insertion

Revise hyperlink and example

- Use more up-to-date TC39 reference page on github.io
- wrap returnless function with side-effects in curly braces

also, clean up punctuation on a long comment line

Always use single-quoted strings

Except for when the string needs to be double-quoted because the string contains apostrophes

Update second example to incorporate IIFE

An IIFE is a more realistic example of code that developers may encounter which would raise an exception when relying completely upon ASI
---
 README.md | 47 ++++++++++++++++++++++++++++++++++-------------
 1 file changed, 34 insertions(+), 13 deletions(-)

diff --git a/README.md b/README.md
index 52b5ed4a8f..05d6257897 100644
--- a/README.md
+++ b/README.md
@@ -2767,24 +2767,45 @@ Other Style Guides
   <a name="semicolons--required"></a><a name="20.1"></a>
   - [21.1](#semicolons--required) **Yup.** eslint: [`semi`](https://eslint.org/docs/rules/semi.html) jscs: [`requireSemicolons`](http://jscs.info/rule/requireSemicolons)
 
+    > Why? When JavaScript encounters a line break without a semicolon, it uses a set of rules called [Automatic Semicolon Insertion](https://tc39.github.io/ecma262/#sec-automatic-semicolon-insertion) to determine whether or not it should regard that line break as the end of a statement, and (as the name implies) place a semicolon into your code before the line break if it thinks so. ASI contains a few eccentric behaviors, though, and your code will break if JavaScript misinterprets your line break. These rules will become more complicated as new features become a part of JavaScript. Explicitly terminating your statements and configuring your linter to catch missing semicolons will help prevent you from encountering issues.
+
     ```javascript
-    // bad
-    (function () {
-      const name = 'Skywalker'
-      return name
-    })()
+    // bad - raises exception
+    const luke = {}
+    const leia = {}
+    [luke, leia].forEach(jedi => jedi.father = 'vader')
+
+    // bad - raises exception
+    const reaction = "No! That's impossible!"
+    (async function meanwhileOnTheFalcon(){
+      // handle `leia`, `lando`, `chewie`, `r2`, `c3p0`
+      // ...
+    }())
+
+    // bad - returns `undefined` instead of the value on the next line - always happens when `return` is on a line by itself because of ASI!
+    function foo() {
+      return
+        'search your feelings, you know it to be foo'
+    }
 
     // good
-    (function () {
-      const name = 'Skywalker';
-      return name;
+    const luke = {};
+    const leia = {};
+    [luke, leia].forEach((jedi) => {
+      jedi.father = 'vader';
+    });
+
+    // good
+    const reaction = "No! That's impossible!";
+    (async function meanwhileOnTheFalcon(){
+      // handle `leia`, `lando`, `chewie`, `r2`, `c3p0`
+      // ...
     }());
 
-    // good, but legacy (guards against the function becoming an argument when two files with IIFEs are concatenated)
-    ;((() => {
-      const name = 'Skywalker';
-      return name;
-    })());
+    // good
+    function foo() {
+      return 'search your feelings, you know it to be foo';
+    }
     ```
 
     [Read more](https://stackoverflow.com/questions/7365172/semicolon-before-self-invoking-function/7365214#7365214).

From 1d9d25d278423525d098b353c0e2654c8ae2665a Mon Sep 17 00:00:00 2001
From: Matias Olivera <moliverafreire@gmail.com>
Date: Sun, 5 Nov 2017 13:21:48 -0300
Subject: [PATCH 1168/1591] Add .mjs to the list of supported extensions

---
 packages/eslint-config-airbnb-base/rules/imports.js | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/packages/eslint-config-airbnb-base/rules/imports.js b/packages/eslint-config-airbnb-base/rules/imports.js
index 54e158f57f..ecfcc8e6c8 100644
--- a/packages/eslint-config-airbnb-base/rules/imports.js
+++ b/packages/eslint-config-airbnb-base/rules/imports.js
@@ -13,11 +13,12 @@ module.exports = {
   settings: {
     'import/resolver': {
       node: {
-        extensions: ['.js', '.json']
+        extensions: ['.mjs', '.js', '.json']
       }
     },
     'import/extensions': [
       '.js',
+      '.mjs',
       '.jsx',
     ],
     'import/core-modules': [

From eb50272401bf0a02ff385f65fc3ec845cd159d0a Mon Sep 17 00:00:00 2001
From: Matias Olivera <moliverafreire@gmail.com>
Date: Sun, 5 Nov 2017 13:23:21 -0300
Subject: [PATCH 1169/1591] Forbid .mjs extension from being specified

---
 packages/eslint-config-airbnb-base/rules/imports.js | 1 +
 1 file changed, 1 insertion(+)

diff --git a/packages/eslint-config-airbnb-base/rules/imports.js b/packages/eslint-config-airbnb-base/rules/imports.js
index ecfcc8e6c8..9536e9b4a4 100644
--- a/packages/eslint-config-airbnb-base/rules/imports.js
+++ b/packages/eslint-config-airbnb-base/rules/imports.js
@@ -134,6 +134,7 @@ module.exports = {
     // https://github.com/benmosher/eslint-plugin-import/blob/master/docs/rules/extensions.md
     'import/extensions': ['error', 'always', {
       js: 'never',
+      mjs: 'never',
       jsx: 'never',
     }],
 

From 2087a42b51a8977308a05fe7096c27849b5cacdb Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Wed, 29 Nov 2017 23:43:55 -0800
Subject: [PATCH 1170/1591] [eslint config] [base] [deps] update `eslint`

---
 packages/eslint-config-airbnb-base/package.json   | 4 ++--
 packages/eslint-config-airbnb-base/rules/es6.js   | 5 ++++-
 packages/eslint-config-airbnb-base/rules/style.js | 5 +++++
 3 files changed, 11 insertions(+), 3 deletions(-)

diff --git a/packages/eslint-config-airbnb-base/package.json b/packages/eslint-config-airbnb-base/package.json
index 2066ad1ab0..e0b7ebc01d 100644
--- a/packages/eslint-config-airbnb-base/package.json
+++ b/packages/eslint-config-airbnb-base/package.json
@@ -51,7 +51,7 @@
     "babel-preset-airbnb": "^2.4.0",
     "babel-tape-runner": "^2.0.1",
     "editorconfig-tools": "^0.1.1",
-    "eslint": "^4.9.0",
+    "eslint": "^4.12.1",
     "eslint-find-rules": "^3.1.1",
     "eslint-plugin-import": "^2.8.0",
     "in-publish": "^2.0.0",
@@ -59,7 +59,7 @@
     "tape": "^4.8.0"
   },
   "peerDependencies": {
-    "eslint": "^4.9.0",
+    "eslint": "^4.12.1",
     "eslint-plugin-import": "^2.8.0"
   },
   "engines": {
diff --git a/packages/eslint-config-airbnb-base/rules/es6.js b/packages/eslint-config-airbnb-base/rules/es6.js
index cf81d198d9..f9e5198c96 100644
--- a/packages/eslint-config-airbnb-base/rules/es6.js
+++ b/packages/eslint-config-airbnb-base/rules/es6.js
@@ -64,7 +64,10 @@ module.exports = {
 
     // disallow specific imports
     // https://eslint.org/docs/rules/no-restricted-imports
-    'no-restricted-imports': 'off',
+    'no-restricted-imports': ['off', {
+      paths: [],
+      patterns: []
+    }],
 
     // disallow to use this/super before super() calling in constructors.
     // https://eslint.org/docs/rules/no-this-before-super
diff --git a/packages/eslint-config-airbnb-base/rules/style.js b/packages/eslint-config-airbnb-base/rules/style.js
index 26b9f784d0..6ae51af7eb 100644
--- a/packages/eslint-config-airbnb-base/rules/style.js
+++ b/packages/eslint-config-airbnb-base/rules/style.js
@@ -97,6 +97,11 @@ module.exports = {
     // require identifiers to match the provided regular expression
     'id-match': 'off',
 
+    // Enforce the location of arrow function bodies with implicit returns
+    // https://eslint.org/docs/rules/implicit-arrow-linebreak
+    // TODO: enable, semver-major
+    'implicit-arrow-linebreak': ['off', 'beside'],
+
     // this option sets a specific tab width for your code
     // https://eslint.org/docs/rules/indent
     indent: ['error', 2, {

From b7090234944eaff912b54faa3f86ca4eee4d017a Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Wed, 29 Nov 2017 23:52:45 -0800
Subject: [PATCH 1171/1591] [eslint config] [base] [breaking] enable
 `implicit-arrow-linebreak`

---
 packages/eslint-config-airbnb-base/rules/style.js | 3 +--
 1 file changed, 1 insertion(+), 2 deletions(-)

diff --git a/packages/eslint-config-airbnb-base/rules/style.js b/packages/eslint-config-airbnb-base/rules/style.js
index 6ae51af7eb..d32b5935eb 100644
--- a/packages/eslint-config-airbnb-base/rules/style.js
+++ b/packages/eslint-config-airbnb-base/rules/style.js
@@ -99,8 +99,7 @@ module.exports = {
 
     // Enforce the location of arrow function bodies with implicit returns
     // https://eslint.org/docs/rules/implicit-arrow-linebreak
-    // TODO: enable, semver-major
-    'implicit-arrow-linebreak': ['off', 'beside'],
+    'implicit-arrow-linebreak': ['error', 'beside'],
 
     // this option sets a specific tab width for your code
     // https://eslint.org/docs/rules/indent

From 4817a6b75cd44fe8b28a16b06d33a5c65603a74c Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Krist=C3=B3f=20Poduszl=C3=B3?= <kripod@protonmail.com>
Date: Tue, 28 Nov 2017 19:47:00 +0100
Subject: [PATCH 1172/1591] [eslint config] [patch] Add 'to' as a specialLink
 to the 'anchor-is-valid' a11y rule

Support React Router's `<Link to="...">` attribute out of the box.
---
 packages/eslint-config-airbnb/rules/react-a11y.js | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/packages/eslint-config-airbnb/rules/react-a11y.js b/packages/eslint-config-airbnb/rules/react-a11y.js
index 6e1c395656..3e7f5c970c 100644
--- a/packages/eslint-config-airbnb/rules/react-a11y.js
+++ b/packages/eslint-config-airbnb/rules/react-a11y.js
@@ -187,7 +187,7 @@ module.exports = {
     // https://github.com/evcohen/eslint-plugin-jsx-a11y/blob/0745af376cdc8686d85a361ce36952b1fb1ccf6e/docs/rules/anchor-is-valid.md
     'jsx-a11y/anchor-is-valid': ['error', {
       components: ['Link'],
-      specialLink: [],
+      specialLink: ['to'],
       aspects: ['noHref', 'invalidHref', 'preferButton'],
     }],
   },

From 255b0f369ad6579ac74f808c000f2daa4e03d74f Mon Sep 17 00:00:00 2001
From: Ilici <lilici@deloitte.de>
Date: Thu, 14 Dec 2017 23:14:27 +0100
Subject: [PATCH 1173/1591] Fix third example in  Enclosed operators section

---
 README.md | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/README.md b/README.md
index 05d6257897..71979c2b22 100644
--- a/README.md
+++ b/README.md
@@ -1957,6 +1957,7 @@ Other Style Guides
     const bar = a ** b - 5 % d;
 
     // bad
+    // one may be confused into thinking (a || b) && c 
     if (a || b && c) {
       return d;
     }
@@ -1968,7 +1969,7 @@ Other Style Guides
     const bar = (a ** b) - (5 % d);
 
     // good
-    if ((a || b) && c) {
+    if (a || (b && c)) {
       return d;
     }
 

From 8a12ffed193ab985d438bed2a20aedb8b5faea1e Mon Sep 17 00:00:00 2001
From: Thomas Broadley <buriedunderbooks@hotmail.com>
Date: Fri, 15 Dec 2017 20:31:09 -0500
Subject: [PATCH 1174/1591] [guide] Fix spelling error in link

(preserve old link for back-compat)
---
 README.md | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/README.md b/README.md
index 71979c2b22..43d36eb0a5 100644
--- a/README.md
+++ b/README.md
@@ -1754,8 +1754,8 @@ Other Style Guides
     }
     ```
 
-  <a name="hoisting--named-expresions"></a><a name="14.3"></a>
-  - [14.3](#hoisting--named-expresions) Named function expressions hoist the variable name, not the function name or the function body.
+  <a name="hoisting--named-expresions"></a><a name="hoisting--named-expressions"></a><a name="14.3"></a>
+  - [14.3](#hoisting--named-expressions) Named function expressions hoist the variable name, not the function name or the function body.
 
     ```javascript
     function example() {
@@ -1957,7 +1957,7 @@ Other Style Guides
     const bar = a ** b - 5 % d;
 
     // bad
-    // one may be confused into thinking (a || b) && c 
+    // one may be confused into thinking (a || b) && c
     if (a || b && c) {
       return d;
     }

From 9061044af05cce24cc322ce123b7d5c2f826d0e5 Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Sat, 23 Dec 2017 20:25:29 -0800
Subject: [PATCH 1175/1591] [eslint config] [*] [deps] update `eslint`,
 `eslint-plugin-jsx-a11y`

---
 packages/eslint-config-airbnb-base/package.json | 4 ++--
 packages/eslint-config-airbnb/package.json      | 6 +++---
 2 files changed, 5 insertions(+), 5 deletions(-)

diff --git a/packages/eslint-config-airbnb-base/package.json b/packages/eslint-config-airbnb-base/package.json
index e0b7ebc01d..194b1123e2 100644
--- a/packages/eslint-config-airbnb-base/package.json
+++ b/packages/eslint-config-airbnb-base/package.json
@@ -51,7 +51,7 @@
     "babel-preset-airbnb": "^2.4.0",
     "babel-tape-runner": "^2.0.1",
     "editorconfig-tools": "^0.1.1",
-    "eslint": "^4.12.1",
+    "eslint": "^4.14.0",
     "eslint-find-rules": "^3.1.1",
     "eslint-plugin-import": "^2.8.0",
     "in-publish": "^2.0.0",
@@ -59,7 +59,7 @@
     "tape": "^4.8.0"
   },
   "peerDependencies": {
-    "eslint": "^4.12.1",
+    "eslint": "^4.14.0",
     "eslint-plugin-import": "^2.8.0"
   },
   "engines": {
diff --git a/packages/eslint-config-airbnb/package.json b/packages/eslint-config-airbnb/package.json
index bdf9700026..ba820e47ba 100644
--- a/packages/eslint-config-airbnb/package.json
+++ b/packages/eslint-config-airbnb/package.json
@@ -54,10 +54,10 @@
     "babel-preset-airbnb": "^2.4.0",
     "babel-tape-runner": "^2.0.1",
     "editorconfig-tools": "^0.1.1",
-    "eslint": "^4.9.0",
+    "eslint": "^4.14.0",
     "eslint-find-rules": "^3.1.1",
     "eslint-plugin-import": "^2.8.0",
-    "eslint-plugin-jsx-a11y": "^6.0.2",
+    "eslint-plugin-jsx-a11y": "^6.0.3",
     "eslint-plugin-react": "^7.4.0",
     "in-publish": "^2.0.0",
     "react": ">= 0.13.0",
@@ -65,7 +65,7 @@
     "tape": "^4.8.0"
   },
   "peerDependencies": {
-    "eslint": "^4.9.0",
+    "eslint": "^4.14.0",
     "eslint-plugin-import": "^2.8.0",
     "eslint-plugin-jsx-a11y": "^6.0.2",
     "eslint-plugin-react": "^7.4.0"

From 90235cab7c060d69430001cf17aa28ff74da86b4 Mon Sep 17 00:00:00 2001
From: Pirasis <1pete@users.noreply.github.com>
Date: Sun, 24 Dec 2017 10:06:09 +0700
Subject: [PATCH 1176/1591] [eslint config] [base] [patch]
 `array-callback-return`: enable `allowImplicit` option

---
 packages/eslint-config-airbnb-base/rules/best-practices.js | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/packages/eslint-config-airbnb-base/rules/best-practices.js b/packages/eslint-config-airbnb-base/rules/best-practices.js
index 3fd0ff105d..978cafc698 100644
--- a/packages/eslint-config-airbnb-base/rules/best-practices.js
+++ b/packages/eslint-config-airbnb-base/rules/best-practices.js
@@ -5,7 +5,7 @@ module.exports = {
 
     // enforces return statements in callbacks of array's methods
     // https://eslint.org/docs/rules/array-callback-return
-    'array-callback-return': 'error',
+    'array-callback-return': ['error', { allowImplicit: true }],
 
     // treat var statements as if they were block scoped
     'block-scoped-var': 'error',

From fc34709d195b0ec9787c7b9905d3d5d72fd305b5 Mon Sep 17 00:00:00 2001
From: Ronald Eddy Jr <ronald_eddy@yahoo.com>
Date: Sun, 24 Dec 2017 13:20:12 -0800
Subject: [PATCH 1177/1591] Docs: HTTP -> HTTPS

URL was updated to use HTTPS protocol
---
 css-in-javascript/README.md | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/css-in-javascript/README.md b/css-in-javascript/README.md
index 13099410a9..2b4d5e489b 100644
--- a/css-in-javascript/README.md
+++ b/css-in-javascript/README.md
@@ -429,4 +429,4 @@
 
 ---
 
-CSS puns adapted from [Saijo George](http://saijogeorge.com/css-puns/).
+CSS puns adapted from [Saijo George](https://saijogeorge.com/css-puns/).

From 1b6bcd0e0fd4ed95eec2ff0a23b24b961af77e30 Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Mon, 25 Dec 2017 10:24:54 -0800
Subject: [PATCH 1178/1591] [guide] more precisely refer to an "object literal"
 instead of just a "hash"

Fixes #1680.
---
 README.md | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/README.md b/README.md
index 43d36eb0a5..4d39ff9cfa 100644
--- a/README.md
+++ b/README.md
@@ -3170,7 +3170,7 @@ Other Style Guides
 ## Events
 
   <a name="events--hash"></a><a name="24.1"></a>
-  - [25.1](#events--hash) When attaching data payloads to events (whether DOM events or something more proprietary like Backbone events), pass a hash instead of a raw value. This allows a subsequent contributor to add more data to the event payload without finding and updating every handler for the event. For example, instead of:
+  - [25.1](#events--hash) When attaching data payloads to events (whether DOM events or something more proprietary like Backbone events), pass an object literal (also known as a "hash")  instead of a raw value. This allows a subsequent contributor to add more data to the event payload without finding and updating every handler for the event. For example, instead of:
 
     ```javascript
     // bad

From 0991476c9f803f47abaf68b47434c5d1e58c49d7 Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Mon, 25 Dec 2017 10:27:33 -0800
Subject: [PATCH 1179/1591] [guide] Clarify that vars are hoisted to function
 scope, not block scope

Fixes #1675.
---
 README.md | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/README.md b/README.md
index 4d39ff9cfa..d80964a362 100644
--- a/README.md
+++ b/README.md
@@ -1704,7 +1704,7 @@ Other Style Guides
 ## Hoisting
 
   <a name="hoisting--about"></a><a name="14.1"></a>
-  - [14.1](#hoisting--about) `var` declarations get hoisted to the top of their scope, their assignment does not. `const` and `let` declarations are blessed with a new concept called [Temporal Dead Zones (TDZ)](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/let#Temporal_Dead_Zone_and_errors_with_let). It’s important to know why [typeof is no longer safe](http://es-discourse.com/t/why-typeof-is-no-longer-safe/15).
+  - [14.1](#hoisting--about) `var` declarations get hoisted to the top of their closest enclosing function scope, their assignment does not. `const` and `let` declarations are blessed with a new concept called [Temporal Dead Zones (TDZ)](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/let#Temporal_Dead_Zone_and_errors_with_let). It’s important to know why [typeof is no longer safe](http://es-discourse.com/t/why-typeof-is-no-longer-safe/15).
 
     ```javascript
     // we know this wouldn’t work (assuming there

From f9fcb37af15391f6f75ae3e8d5e09f5f2ae064b8 Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Mon, 25 Dec 2017 10:37:36 -0800
Subject: [PATCH 1180/1591] [guide] Add link to "has" package

Fixes #1670.
---
 README.md | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/README.md b/README.md
index d80964a362..3b173dd385 100644
--- a/README.md
+++ b/README.md
@@ -297,7 +297,7 @@ Other Style Guides
     // best
     const has = Object.prototype.hasOwnProperty; // cache the lookup once, in module scope.
     /* or */
-    import has from 'has';
+    import has from 'has'; // https://www.npmjs.com/package/has
     // ...
     console.log(has.call(object, key));
     ```

From cb9482c04efac0a5278373b4506a29849753f67f Mon Sep 17 00:00:00 2001
From: Miguel Piedrafita <github@miguelpiedrafita.com>
Date: Mon, 1 Jan 2018 00:50:59 +0100
Subject: [PATCH 1181/1591] [guide] Update license year

---
 LICENSE.md | 2 +-
 README.md  | 2 +-
 2 files changed, 2 insertions(+), 2 deletions(-)

diff --git a/LICENSE.md b/LICENSE.md
index 2867dece2b..69d80c0252 100644
--- a/LICENSE.md
+++ b/LICENSE.md
@@ -1,6 +1,6 @@
 MIT License
 
-Copyright (c) 2017 Airbnb
+Copyright (c) 2012 Airbnb
 
 Permission is hereby granted, free of charge, to any person obtaining a copy
 of this software and associated documentation files (the "Software"), to deal
diff --git a/README.md b/README.md
index 3b173dd385..e00d988f60 100644
--- a/README.md
+++ b/README.md
@@ -3591,7 +3591,7 @@ Other Style Guides
 
 (The MIT License)
 
-Copyright (c) 2014-2017 Airbnb
+Copyright (c) 2012 Airbnb
 
 Permission is hereby granted, free of charge, to any person obtaining
 a copy of this software and associated documentation files (the

From fe3a2de6b511f6373bab5f00d81e699ff6e81a56 Mon Sep 17 00:00:00 2001
From: Sharmila <sharmila.jesupaul@airbnb.com>
Date: Mon, 8 Jan 2018 14:36:08 -0800
Subject: [PATCH 1182/1591] [fixes: #1678] Improves wording of
 no-mixed-operators recommendation.

---
 README.md | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/README.md b/README.md
index e00d988f60..20ac163402 100644
--- a/README.md
+++ b/README.md
@@ -1945,7 +1945,7 @@ Other Style Guides
     ```
 
   <a name="comparison--no-mixed-operators"></a>
-  - [15.8](#comparison--no-mixed-operators) Enclose operators in parentheses when they are mixed in a statement. When mixing arithmetic operators, do not mix `**` and `%` with themselves or with `+`, `-`, `*`, & `/`. eslint: [`no-mixed-operators`](https://eslint.org/docs/rules/no-mixed-operators.html)
+  - [15.8](#comparison--no-mixed-operators) When mixing operators, enclose them in parentheses. The only exception is the standard arithmetic operators (`+`, `-`, `*`, & `/`) since their precedence is broadly understood. eslint: [`no-mixed-operators`](https://eslint.org/docs/rules/no-mixed-operators.html)
 
     > Why? This improves readability and clarifies the developer’s intention.
 

From 7b18d7c2155f52937b1d48a3c6b905943fc1e5b7 Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Mon, 8 Jan 2018 00:35:15 -0800
Subject: [PATCH 1183/1591] [eslint config] [*] [deps] update `eslint`

---
 packages/eslint-config-airbnb-base/package.json   | 4 ++--
 packages/eslint-config-airbnb-base/rules/style.js | 3 ++-
 packages/eslint-config-airbnb/package.json        | 4 ++--
 3 files changed, 6 insertions(+), 5 deletions(-)

diff --git a/packages/eslint-config-airbnb-base/package.json b/packages/eslint-config-airbnb-base/package.json
index 194b1123e2..83565bbac0 100644
--- a/packages/eslint-config-airbnb-base/package.json
+++ b/packages/eslint-config-airbnb-base/package.json
@@ -51,7 +51,7 @@
     "babel-preset-airbnb": "^2.4.0",
     "babel-tape-runner": "^2.0.1",
     "editorconfig-tools": "^0.1.1",
-    "eslint": "^4.14.0",
+    "eslint": "^4.15.0",
     "eslint-find-rules": "^3.1.1",
     "eslint-plugin-import": "^2.8.0",
     "in-publish": "^2.0.0",
@@ -59,7 +59,7 @@
     "tape": "^4.8.0"
   },
   "peerDependencies": {
-    "eslint": "^4.14.0",
+    "eslint": "^4.15.0",
     "eslint-plugin-import": "^2.8.0"
   },
   "engines": {
diff --git a/packages/eslint-config-airbnb-base/rules/style.js b/packages/eslint-config-airbnb-base/rules/style.js
index d32b5935eb..024c901781 100644
--- a/packages/eslint-config-airbnb-base/rules/style.js
+++ b/packages/eslint-config-airbnb-base/rules/style.js
@@ -123,7 +123,8 @@ module.exports = {
       ObjectExpression: 1,
       ImportDeclaration: 1,
       flatTernaryExpressions: false,
-      ignoredNodes: ['JSXElement', 'JSXElement *']
+      ignoredNodes: ['JSXElement', 'JSXElement *'],
+      ignoreComments: false
     }],
 
     // specify whether double or single quotes should be used in JSX attributes
diff --git a/packages/eslint-config-airbnb/package.json b/packages/eslint-config-airbnb/package.json
index ba820e47ba..17664483ac 100644
--- a/packages/eslint-config-airbnb/package.json
+++ b/packages/eslint-config-airbnb/package.json
@@ -54,7 +54,7 @@
     "babel-preset-airbnb": "^2.4.0",
     "babel-tape-runner": "^2.0.1",
     "editorconfig-tools": "^0.1.1",
-    "eslint": "^4.14.0",
+    "eslint": "^4.15.0",
     "eslint-find-rules": "^3.1.1",
     "eslint-plugin-import": "^2.8.0",
     "eslint-plugin-jsx-a11y": "^6.0.3",
@@ -65,7 +65,7 @@
     "tape": "^4.8.0"
   },
   "peerDependencies": {
-    "eslint": "^4.14.0",
+    "eslint": "^4.15.0",
     "eslint-plugin-import": "^2.8.0",
     "eslint-plugin-jsx-a11y": "^6.0.2",
     "eslint-plugin-react": "^7.4.0"

From 69a3554100935b79b9c444102504f98103834079 Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Mon, 8 Jan 2018 00:52:17 -0800
Subject: [PATCH 1184/1591] [eslint config] [base] [patch] properly ignore
 indentation on jsx

Fixes #1658.
---
 packages/eslint-config-airbnb-base/rules/style.js | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/packages/eslint-config-airbnb-base/rules/style.js b/packages/eslint-config-airbnb-base/rules/style.js
index 024c901781..5566ce7076 100644
--- a/packages/eslint-config-airbnb-base/rules/style.js
+++ b/packages/eslint-config-airbnb-base/rules/style.js
@@ -123,7 +123,8 @@ module.exports = {
       ObjectExpression: 1,
       ImportDeclaration: 1,
       flatTernaryExpressions: false,
-      ignoredNodes: ['JSXElement', 'JSXElement *'],
+      // list derived from https://github.com/benjamn/ast-types/blob/HEAD/def/jsx.js
+      ignoredNodes: ['JSXElement', 'JSXElement > *', 'JSXAttribute', 'JSXIdentifier', 'JSXNamespacedName', 'JSXMemberExpression', 'JSXSpreadAttribute', 'JSXExpressionContainer', 'JSXOpeningElement', 'JSXClosingElement', 'JSXText', 'JSXEmptyExpression', 'JSXSpreadChild'],
       ignoreComments: false
     }],
 

From a08afd77d5d4fe6fdaae1ac9045de957ac433367 Mon Sep 17 00:00:00 2001
From: Aditya Agarwal <adityaa803@gmail.com>
Date: Wed, 10 Jan 2018 20:04:25 +0530
Subject: [PATCH 1185/1591] [eslint-config] [*] [docs] add `npx` shortcut

---
 packages/eslint-config-airbnb-base/README.md | 11 +++++++++--
 packages/eslint-config-airbnb/README.md      | 11 ++++++++---
 2 files changed, 17 insertions(+), 5 deletions(-)

diff --git a/packages/eslint-config-airbnb-base/README.md b/packages/eslint-config-airbnb-base/README.md
index a28a40a302..686ccb06e8 100644
--- a/packages/eslint-config-airbnb-base/README.md
+++ b/packages/eslint-config-airbnb-base/README.md
@@ -20,7 +20,14 @@ If you use yarn, run `npm info "eslint-config-airbnb-base@latest" peerDependenci
   npm info "eslint-config-airbnb-base@latest" peerDependencies
   ```
 
-  Linux/OSX users can run
+  If using **npm 5+**, use this shortcut
+
+  ```sh
+  npx install-peerdeps --dev eslint-config-airbnb-base
+  ```
+
+  If using **npm < 5**, Linux/OSX users can run
+
   ```sh
   (
     export PKG=eslint-config-airbnb-base;
@@ -34,7 +41,7 @@ If you use yarn, run `npm info "eslint-config-airbnb-base@latest" peerDependenci
     npm install --save-dev eslint-config-airbnb-base eslint@^#.#.# eslint-plugin-import@^#.#.#
   ```
 
-  Windows users can either install all the peer dependencies manually, or use the [install-peerdeps](https://github.com/nathanhleung/install-peerdeps) cli tool.
+  If using **npm < 5**, Windows users can either install all the peer dependencies manually, or use the [install-peerdeps](https://github.com/nathanhleung/install-peerdeps) cli tool.
 
   ```sh
   npm install -g install-peerdeps
diff --git a/packages/eslint-config-airbnb/README.md b/packages/eslint-config-airbnb/README.md
index 853588d4d3..88e6c80d23 100644
--- a/packages/eslint-config-airbnb/README.md
+++ b/packages/eslint-config-airbnb/README.md
@@ -20,7 +20,13 @@ If you use yarn, run `npm info "eslint-config-airbnb@latest" peerDependencies` t
   npm info "eslint-config-airbnb@latest" peerDependencies
   ```
 
-  Linux/OSX users can run
+  If using **npm 5+**, use this shortcut
+
+  ```sh
+  npx install-peerdeps --dev eslint-config-airbnb
+  ```
+
+  If using **npm < 5**, Linux/OSX users can run
 
   ```sh
   (
@@ -35,13 +41,12 @@ If you use yarn, run `npm info "eslint-config-airbnb@latest" peerDependencies` t
   npm install --save-dev eslint-config-airbnb eslint@^#.#.# eslint-plugin-jsx-a11y@^#.#.# eslint-plugin-import@^#.#.# eslint-plugin-react@^#.#.#
   ```
 
-  Windows users can either install all the peer dependencies manually, or use the [install-peerdeps](https://github.com/nathanhleung/install-peerdeps) cli tool.
+  If using **npm < 5**, Windows users can either install all the peer dependencies manually, or use the [install-peerdeps](https://github.com/nathanhleung/install-peerdeps) cli tool.
 
   ```sh
   npm install -g install-peerdeps
   install-peerdeps --dev eslint-config-airbnb
   ```
-
   The cli will produce and run a command like:
 
   ```sh

From 262b07b106bdb83f476c77923340aa9c679da9a2 Mon Sep 17 00:00:00 2001
From: Ben Fortner <Fortner.benjamin@gmail.com>
Date: Tue, 16 Jan 2018 09:55:54 -0500
Subject: [PATCH 1186/1591] fix example to meet standard listingId v listingID

fixed code example to meet the standard. `listingId` changed to `listingID`
See - Naming Conventions: Acronyms and initialisms should always be all capitalized, or all lowercased.
---
 README.md | 8 ++++----
 1 file changed, 4 insertions(+), 4 deletions(-)

diff --git a/README.md b/README.md
index ae1aaf8a3b..d6f4836fa5 100644
--- a/README.md
+++ b/README.md
@@ -3178,8 +3178,8 @@ Other Style Guides
 
     // ...
 
-    $(this).on('listingUpdated', (e, listingId) => {
-      // do something with listingId
+    $(this).on('listingUpdated', (e, listingID) => {
+      // do something with listingID
     });
     ```
 
@@ -3187,12 +3187,12 @@ Other Style Guides
 
     ```javascript
     // good
-    $(this).trigger('listingUpdated', { listingId: listing.id });
+    $(this).trigger('listingUpdated', { listingID: listing.id });
 
     // ...
 
     $(this).on('listingUpdated', (e, data) => {
-      // do something with data.listingId
+      // do something with data.listingID
     });
     ```
 

From 7b1ced2bf79cfe119ab1b7becd096b88b9250ee7 Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Sat, 20 Jan 2018 23:35:21 -0800
Subject: [PATCH 1187/1591] [eslint config] [base] [deps] update `eslint`

---
 .../eslint-config-airbnb-base/package.json     |  4 ++--
 .../eslint-config-airbnb-base/rules/style.js   | 18 ++++++++++++++++--
 2 files changed, 18 insertions(+), 4 deletions(-)

diff --git a/packages/eslint-config-airbnb-base/package.json b/packages/eslint-config-airbnb-base/package.json
index 83565bbac0..5d4cd5ccc5 100644
--- a/packages/eslint-config-airbnb-base/package.json
+++ b/packages/eslint-config-airbnb-base/package.json
@@ -51,7 +51,7 @@
     "babel-preset-airbnb": "^2.4.0",
     "babel-tape-runner": "^2.0.1",
     "editorconfig-tools": "^0.1.1",
-    "eslint": "^4.15.0",
+    "eslint": "^4.16.0",
     "eslint-find-rules": "^3.1.1",
     "eslint-plugin-import": "^2.8.0",
     "in-publish": "^2.0.0",
@@ -59,7 +59,7 @@
     "tape": "^4.8.0"
   },
   "peerDependencies": {
-    "eslint": "^4.15.0",
+    "eslint": "^4.16.0",
     "eslint-plugin-import": "^2.8.0"
   },
   "engines": {
diff --git a/packages/eslint-config-airbnb-base/rules/style.js b/packages/eslint-config-airbnb-base/rules/style.js
index 5566ce7076..81ee87a4fc 100644
--- a/packages/eslint-config-airbnb-base/rules/style.js
+++ b/packages/eslint-config-airbnb-base/rules/style.js
@@ -51,7 +51,21 @@ module.exports = {
     'comma-spacing': ['error', { before: false, after: true }],
 
     // enforce one true comma style
-    'comma-style': ['error', 'last'],
+    'comma-style': ['error', 'last', {
+      exceptions: {
+        ArrayExpression: false,
+        ArrayPattern: false,
+        ArrowFunctionExpression: false,
+        CallExpression: false,
+        FunctionDeclaration: false,
+        FunctionExpression: false,
+        ImportDeclaration: false,
+        ObjectExpression: false,
+        ObjectPattern: false,
+        VariableDeclaration: false,
+        NewExpression: false,
+      }
+    }],
 
     // disallow padding inside computed properties
     'computed-property-spacing': ['error', 'never'],
@@ -375,7 +389,7 @@ module.exports = {
     // enforce "same line" or "multiple line" on object properties.
     // https://eslint.org/docs/rules/object-property-newline
     'object-property-newline': ['error', {
-      allowMultiplePropertiesPerLine: true,
+      allowAllPropertiesOnSameLine: true,
     }],
 
     // allow just one var statement per function

From 7dab8371c9302cb4c228e652d376a6c2d66db4a3 Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Sat, 20 Jan 2018 23:36:32 -0800
Subject: [PATCH 1188/1591] [eslint config] [deps] update `eslint`

---
 packages/eslint-config-airbnb/package.json | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/packages/eslint-config-airbnb/package.json b/packages/eslint-config-airbnb/package.json
index 17664483ac..7fd3a288fc 100644
--- a/packages/eslint-config-airbnb/package.json
+++ b/packages/eslint-config-airbnb/package.json
@@ -54,7 +54,7 @@
     "babel-preset-airbnb": "^2.4.0",
     "babel-tape-runner": "^2.0.1",
     "editorconfig-tools": "^0.1.1",
-    "eslint": "^4.15.0",
+    "eslint": "^4.16.0",
     "eslint-find-rules": "^3.1.1",
     "eslint-plugin-import": "^2.8.0",
     "eslint-plugin-jsx-a11y": "^6.0.3",
@@ -65,9 +65,9 @@
     "tape": "^4.8.0"
   },
   "peerDependencies": {
-    "eslint": "^4.15.0",
+    "eslint": "^4.16.0",
     "eslint-plugin-import": "^2.8.0",
-    "eslint-plugin-jsx-a11y": "^6.0.2",
+    "eslint-plugin-jsx-a11y": "^6.0.3",
     "eslint-plugin-react": "^7.4.0"
   },
   "engines": {

From c4dcfd93a732c950004c500b8696a50412d8ad82 Mon Sep 17 00:00:00 2001
From: zwei <ZweiZhao@foxmail.com>
Date: Tue, 16 Jan 2018 16:20:46 +0800
Subject: [PATCH 1189/1591] [guide] fix indentation in section 4.7

---
 README.md | 62 +++++++++++++++++++++++++++----------------------------
 1 file changed, 31 insertions(+), 31 deletions(-)

diff --git a/README.md b/README.md
index d6f4836fa5..7e5a491ba5 100644
--- a/README.md
+++ b/README.md
@@ -441,39 +441,39 @@ Other Style Guides
   <a name="arrays--bracket-newline"></a>
   - [4.7](#arrays--bracket-newline) Use line breaks after open and before close array brackets if an array has multiple lines
 
-  ```javascript
-  // bad
-  const arr = [
-    [0, 1], [2, 3], [4, 5],
-  ];
-
-  const objectInArray = [{
-    id: 1,
-  }, {
-    id: 2,
-  }];
-
-  const numberInArray = [
-    1, 2,
-  ];
-
-  // good
-  const arr = [[0, 1], [2, 3], [4, 5]];
-
-  const objectInArray = [
-    {
+    ```javascript
+    // bad
+    const arr = [
+      [0, 1], [2, 3], [4, 5],
+    ];
+
+    const objectInArray = [{
       id: 1,
-    },
-    {
+    }, {
       id: 2,
-    },
-  ];
-
-  const numberInArray = [
-    1,
-    2,
-  ];
-  ```
+    }];
+
+    const numberInArray = [
+      1, 2,
+    ];
+
+    // good
+    const arr = [[0, 1], [2, 3], [4, 5]];
+
+    const objectInArray = [
+      {
+        id: 1,
+      },
+      {
+        id: 2,
+      },
+    ];
+
+    const numberInArray = [
+      1,
+      2,
+    ];
+    ```
 
 **[⬆ back to top](#table-of-contents)**
 

From 53b2d7d245ba4abefc0429bfda4a46f099b9ace5 Mon Sep 17 00:00:00 2001
From: Alex Baulch <abaulch@zonedigital.com>
Date: Mon, 22 Jan 2018 10:42:28 +0000
Subject: [PATCH 1190/1591] [eslint config] [breaking] bump react pragma to
 v16; update `class-methods-use-this`'s `exceptMethods` to include
 `componentDidCatch`

---
 packages/eslint-config-airbnb/rules/react.js | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/packages/eslint-config-airbnb/rules/react.js b/packages/eslint-config-airbnb/rules/react.js
index 8bf726bed6..999d3a1cbb 100644
--- a/packages/eslint-config-airbnb/rules/react.js
+++ b/packages/eslint-config-airbnb/rules/react.js
@@ -29,6 +29,7 @@ module.exports = {
         'componentWillUpdate',
         'componentDidUpdate',
         'componentWillUnmount',
+        'componentDidCatch',
       ],
     }],
 
@@ -363,7 +364,7 @@ module.exports = {
     },
     react: {
       pragma: 'React',
-      version: '15.0'
+      version: '16.0'
     },
     propWrapperFunctions: [
       'forbidExtraProps', // https://www.npmjs.com/package/airbnb-prop-types

From e9fff7adbf6dd4e3723c12849c407aafd429cf0f Mon Sep 17 00:00:00 2001
From: Sharmila <sharmila.jesupaul@airbnb.com>
Date: Fri, 26 Jan 2018 10:57:21 -0800
Subject: [PATCH 1191/1591] [eslint config] [base] [breaking] Prevent line
 breaks before and after `=`

---
 README.md                                     | 22 +++++++++++++++++++
 .../eslint-config-airbnb-base/rules/style.js  |  2 +-
 2 files changed, 23 insertions(+), 1 deletion(-)

diff --git a/README.md b/README.md
index 7e5a491ba5..e3410a172e 100644
--- a/README.md
+++ b/README.md
@@ -1699,6 +1699,28 @@ Other Style Guides
     const truthyCount = array.filter(Boolean).length;
     ```
 
+  - [13.7](#variables--linebreak) Avoid linebreaks before or after `=` in an assignment. If your assignment violates [`max-len`](https://eslint.org/docs/rules/max-len.html), surround the value in parens. eslint [`operator-linebreak`](https://eslint.org/docs/rules/operator-linebreak.html).
+
+    > Why? Linebreaks surrounding `=` can obfuscate the value of an assignment.
+
+    ```javascript
+    // bad
+    const foo =
+      superLongLongLongLongLongLongLongLongFunctionName();
+
+    // bad
+    const foo
+      = 'superLongLongLongLongLongLongLongLongString';
+
+    // good
+    const foo = (
+      superLongLongLongLongLongLongLongLongFunctionName()
+    );
+
+    // good
+    const foo = 'superLongLongLongLongLongLongLongLongString';
+    ```
+
 **[⬆ back to top](#table-of-contents)**
 
 ## Hoisting
diff --git a/packages/eslint-config-airbnb-base/rules/style.js b/packages/eslint-config-airbnb-base/rules/style.js
index 81ee87a4fc..bc5e032e4a 100644
--- a/packages/eslint-config-airbnb-base/rules/style.js
+++ b/packages/eslint-config-airbnb-base/rules/style.js
@@ -405,7 +405,7 @@ module.exports = {
 
     // Requires operator at the beginning of the line in multiline statements
     // https://eslint.org/docs/rules/operator-linebreak
-    'operator-linebreak': ['error', 'before'],
+    'operator-linebreak': ['error', 'before', { overrides: { '=': 'none' } }],
 
     // disallow padding within blocks
     'padded-blocks': ['error', { blocks: 'never', classes: 'never', switches: 'never' }],

From fc99aefc4c4ca7b66ef665b35a898a0c83ae2b5d Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?J=C3=A9r=C3=A9mie=20Astori?= <jeremie@astori.fr>
Date: Fri, 26 Jan 2018 13:16:39 -0500
Subject: [PATCH 1192/1591] [guide] Use `acc` as `reduce` accumulator instead
 of `memo` to make it valid

In [this part of the `no-param-reassign` configuration](https://github.com/airbnb/javascript/blob/53b2d7d245ba4abefc0429bfda4a46f099b9ace5/packages/eslint-config-airbnb-base/rules/best-practices.js#L174-L175), `acc` is allowed to be mutated (rule [7.12](https://github.com/airbnb/javascript#functions--mutate-params), but `memo` is not.

This causes the [rule 4.6 example](https://github.com/airbnb/javascript#arrays--callback-return) in the README to actually be invalid.
---
 README.md | 14 +++++++-------
 1 file changed, 7 insertions(+), 7 deletions(-)

diff --git a/README.md b/README.md
index e3410a172e..609c43f201 100644
--- a/README.md
+++ b/README.md
@@ -404,16 +404,16 @@ Other Style Guides
     // good
     [1, 2, 3].map(x => x + 1);
 
-    // bad - no returned value means `memo` becomes undefined after the first iteration
-    [[0, 1], [2, 3], [4, 5]].reduce((memo, item, index) => {
-      const flatten = memo.concat(item);
-      memo[index] = flatten;
+    // bad - no returned value means `acc` becomes undefined after the first iteration
+    [[0, 1], [2, 3], [4, 5]].reduce((acc, item, index) => {
+      const flatten = acc.concat(item);
+      acc[index] = flatten;
     });
 
     // good
-    [[0, 1], [2, 3], [4, 5]].reduce((memo, item, index) => {
-      const flatten = memo.concat(item);
-      memo[index] = flatten;
+    [[0, 1], [2, 3], [4, 5]].reduce((acc, item, index) => {
+      const flatten = acc.concat(item);
+      acc[index] = flatten;
       return flatten;
     });
 

From 1eefaed4fbb8ff469a864de5dfb652bb04607253 Mon Sep 17 00:00:00 2001
From: Antonio Erdeljac <erdeljac.antonio@gmail.com>
Date: Wed, 10 Jan 2018 09:08:21 +0100
Subject: [PATCH 1193/1591] [guide] [css] Fixed Italic subtitle in css-in-js
 README.md

---
 css-in-javascript/README.md | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/css-in-javascript/README.md b/css-in-javascript/README.md
index 2b4d5e489b..d6162df55d 100644
--- a/css-in-javascript/README.md
+++ b/css-in-javascript/README.md
@@ -1,6 +1,6 @@
 # Airbnb CSS-in-JavaScript Style Guide
 
-*A mostly reasonable approach to CSS-in-JavaScript
+*A mostly reasonable approach to CSS-in-JavaScript*
 
 ## Table of Contents
 

From 17b6491ae2ec5da4f8c3a8d6352840dfa0facc17 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Ali=20O=C4=9Fuzhan=20Y=C4=B1ld=C4=B1z?=
 <aoguzhanyildiz@gmail.com>
Date: Mon, 4 Sep 2017 00:00:04 +0300
Subject: [PATCH 1194/1591] add Turkish translation

---
 react/README.md | 1 +
 1 file changed, 1 insertion(+)

diff --git a/react/README.md b/react/README.md
index e1133c3754..bf3ed2666c 100644
--- a/react/README.md
+++ b/react/README.md
@@ -689,6 +689,7 @@
   - ![Br](https://raw.githubusercontent.com/gosquared/flags/master/flags/flags/shiny/24/Brazil.png) **Portuguese**: [ronal2do/javascript](https://github.com/ronal2do/airbnb-react-styleguide)
   - ![ru](https://raw.githubusercontent.com/gosquared/flags/master/flags/flags/shiny/24/Russia.png) **Russian**: [leonidlebedev/javascript-airbnb](https://github.com/leonidlebedev/javascript-airbnb/tree/master/react)
   - ![th](https://raw.githubusercontent.com/gosquared/flags/master/flags/flags/shiny/24/Thailand.png) **Thai**: [lvarayut/javascript-style-guide](https://github.com/lvarayut/javascript-style-guide/tree/master/react)
+  - ![tr](https://raw.githubusercontent.com/gosquared/flags/master/flags/flags/shiny/24/Turkey.png) **Turkish**: [alioguzhan/react-style-guide](https://github.com/alioguzhan/react-style-guide)
   - ![ua](https://raw.githubusercontent.com/gosquared/flags/master/flags/flags/shiny/24/Ukraine.png) **Ukrainian**: [ivanzusko/javascript](https://github.com/ivanzusko/javascript/tree/master/react)
 
 **[⬆ back to top](#table-of-contents)**

From 9a3e6356cf67b9c6bb6002041d854f1483a4a510 Mon Sep 17 00:00:00 2001
From: David Clark <davidclark314@gmail.com>
Date: Sun, 28 Jan 2018 00:38:48 -0700
Subject: [PATCH 1195/1591] Added GreenChef organization to README

---
 README.md | 1 +
 1 file changed, 1 insertion(+)

diff --git a/README.md b/README.md
index 609c43f201..a304b078db 100644
--- a/README.md
+++ b/README.md
@@ -3519,6 +3519,7 @@ Other Style Guides
   - **General Electric**: [GeneralElectric/javascript](https://github.com/GeneralElectric/javascript)
   - **Generation Tux**: [GenerationTux/javascript](https://github.com/generationtux/styleguide)
   - **GoodData**: [gooddata/gdc-js-style](https://github.com/gooddata/gdc-js-style)
+  - **GreenChef**: [greenchef/javascript](https://github.com/greenchef/javascript)
   - **Grooveshark**: [grooveshark/javascript](https://github.com/grooveshark/javascript)
   - **Grupo-Abraxas**: [Grupo-Abraxas/javascript](https://github.com/Grupo-Abraxas/javascript)
   - **Honey**: [honeyscience/javascript](https://github.com/honeyscience/javascript)

From aefff97bd10e8e17963749bd1013a6927d90fe29 Mon Sep 17 00:00:00 2001
From: ParkSB <parkgds@gmail.com>
Date: Tue, 30 Jan 2018 11:49:24 +0900
Subject: [PATCH 1196/1591] Update Korean translation link

---
 README.md | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/README.md b/README.md
index a304b078db..5a6d678f98 100644
--- a/README.md
+++ b/README.md
@@ -3591,7 +3591,7 @@ Other Style Guides
   - ![de](https://raw.githubusercontent.com/gosquared/flags/master/flags/flags/shiny/24/Germany.png) **German**: [timofurrer/javascript-style-guide](https://github.com/timofurrer/javascript-style-guide)
   - ![it](https://raw.githubusercontent.com/gosquared/flags/master/flags/flags/shiny/24/Italy.png) **Italian**: [sinkswim/javascript-style-guide](https://github.com/sinkswim/javascript-style-guide)
   - ![jp](https://raw.githubusercontent.com/gosquared/flags/master/flags/flags/shiny/24/Japan.png) **Japanese**: [mitsuruog/javascript-style-guide](https://github.com/mitsuruog/javascript-style-guide)
-  - ![kr](https://raw.githubusercontent.com/gosquared/flags/master/flags/flags/shiny/24/South-Korea.png) **Korean**: [tipjs/javascript-style-guide](https://github.com/tipjs/javascript-style-guide)
+  - ![kr](https://raw.githubusercontent.com/gosquared/flags/master/flags/flags/shiny/24/South-Korea.png) **Korean**: [ParkSB/javascript-style-guide](https://github.com/ParkSB/javascript-style-guide)
   - ![ru](https://raw.githubusercontent.com/gosquared/flags/master/flags/flags/shiny/24/Russia.png) **Russian**: [leonidlebedev/javascript-airbnb](https://github.com/leonidlebedev/javascript-airbnb)
   - ![es](https://raw.githubusercontent.com/gosquared/flags/master/flags/flags/shiny/24/Spain.png) **Spanish**: [paolocarrasco/javascript-style-guide](https://github.com/paolocarrasco/javascript-style-guide)
   - ![th](https://raw.githubusercontent.com/gosquared/flags/master/flags/flags/shiny/24/Thailand.png) **Thai**: [lvarayut/javascript-style-guide](https://github.com/lvarayut/javascript-style-guide)

From c5411a42d2385762ec879d900dcfdcfc60f54f62 Mon Sep 17 00:00:00 2001
From: Teddy Katz <teddy.katz@gmail.com>
Date: Sun, 4 Feb 2018 17:11:01 -0500
Subject: [PATCH 1197/1591] Suggest using WeakMaps when hidden properties are
 needed

This updates the "trailing or leading underscores" guideline to suggest an better way to make properties hidden, as an alternative to just removing the underscore and making the property public.
---
 README.md | 5 +++++
 1 file changed, 5 insertions(+)

diff --git a/README.md b/README.md
index 5a6d678f98..d070347150 100644
--- a/README.md
+++ b/README.md
@@ -2993,6 +2993,11 @@ Other Style Guides
 
     // good
     this.firstName = 'Panda';
+
+    // good, in environments where WeakMaps are available
+    // see https://kangax.github.io/compat-table/es6/#test-WeakMap
+    const firstNames = new WeakMap();
+    firstNames.set(this, 'Panda');
     ```
 
   <a name="naming--self-this"></a><a name="22.5"></a>

From 16190d8cb5cb9b8257aec53a04ef3efc25ad9dff Mon Sep 17 00:00:00 2001
From: Ajay Poshak <poshakajay@gmail.com>
Date: Sun, 4 Feb 2018 18:52:51 +0530
Subject: [PATCH 1198/1591] Note added for translation

---
 README.md | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/README.md b/README.md
index d070347150..ee02c0e97c 100644
--- a/README.md
+++ b/README.md
@@ -8,6 +8,8 @@
 [![Downloads](https://img.shields.io/npm/dm/eslint-config-airbnb-base.svg)](https://www.npmjs.com/package/eslint-config-airbnb-base)
 [![Gitter](https://badges.gitter.im/Join%20Chat.svg)](https://gitter.im/airbnb/javascript?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge)
 
+This guide is available in other languages too. See [Translation](#translation)
+
 Other Style Guides
 
   - [ES5 (Deprecated)](https://github.com/airbnb/javascript/tree/es5-deprecated/es5)

From c8b1164105064b7786b24258f53f6237fb4bdd15 Mon Sep 17 00:00:00 2001
From: Gil Birman <birmangil@gmail.com>
Date: Thu, 8 Feb 2018 13:07:34 -0800
Subject: [PATCH 1199/1591] control-statement--value-selection 2

---
 README.md | 14 ++++++++++++++
 1 file changed, 14 insertions(+)

diff --git a/README.md b/README.md
index ee02c0e97c..556e874c17 100644
--- a/README.md
+++ b/README.md
@@ -2175,6 +2175,20 @@ Other Style Guides
     }
     ```
 
+  <a name="control-statement--value-selection"></a>
+  - [17.2](#control-statements--value-selection) Don't use selection operators in place of control statements.
+
+
+    ```javascript
+    // bad
+    !isRunning && startRunning();
+
+    // good
+    if (!isRunning) {
+      startRunning();
+    }
+    ```
+
 **[⬆ back to top](#table-of-contents)**
 
 ## Comments

From 4c870cbd4090016fa36d15f8b2673324c83aabcc Mon Sep 17 00:00:00 2001
From: Kevin Ji <kevin.ji@outlook.com>
Date: Thu, 8 Feb 2018 11:29:44 -0800
Subject: [PATCH 1200/1591] [guide] Fix function signature spacing

---
 README.md | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/README.md b/README.md
index 556e874c17..ead4903bdb 100644
--- a/README.md
+++ b/README.md
@@ -2816,7 +2816,7 @@ Other Style Guides
 
     // bad - raises exception
     const reaction = "No! That's impossible!"
-    (async function meanwhileOnTheFalcon(){
+    (async function meanwhileOnTheFalcon() {
       // handle `leia`, `lando`, `chewie`, `r2`, `c3p0`
       // ...
     }())
@@ -2836,7 +2836,7 @@ Other Style Guides
 
     // good
     const reaction = "No! That's impossible!";
-    (async function meanwhileOnTheFalcon(){
+    (async function meanwhileOnTheFalcon() {
       // handle `leia`, `lando`, `chewie`, `r2`, `c3p0`
       // ...
     }());

From cfe10c17d3f1df7325f8d40a4fcb2486254892f1 Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Thu, 8 Feb 2018 21:45:09 -0800
Subject: [PATCH 1201/1591] fix linting error in guide

---
 README.md | 1 -
 1 file changed, 1 deletion(-)

diff --git a/README.md b/README.md
index ead4903bdb..c2840b0b6f 100644
--- a/README.md
+++ b/README.md
@@ -2178,7 +2178,6 @@ Other Style Guides
   <a name="control-statement--value-selection"></a>
   - [17.2](#control-statements--value-selection) Don't use selection operators in place of control statements.
 
-
     ```javascript
     // bad
     !isRunning && startRunning();

From 901fd85b7cd9386f20a86530f56ec4661b4f18e7 Mon Sep 17 00:00:00 2001
From: Rauno Freiberg <freiberggg@gmail.com>
Date: Mon, 19 Feb 2018 14:58:24 +0200
Subject: [PATCH 1202/1591] Use single quotes for consistency

---
 README.md | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/README.md b/README.md
index c2840b0b6f..b299c9be10 100644
--- a/README.md
+++ b/README.md
@@ -2162,7 +2162,7 @@ Other Style Guides
 
     // good
     if (
-      (foo === 123 || bar === "abc")
+      (foo === 123 || bar === 'abc')
       && doesItLookGoodWhenItBecomesThatLong()
       && isThisReallyHappening()
     ) {

From ff1c12178e268d4ee33321b4aab39571739af49d Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Fri, 26 Jan 2018 23:31:30 -0800
Subject: [PATCH 1203/1591] [eslint config] [breaking] update
 `eslint-plugin-react` to `v7.6`; update rule configs

---
 packages/eslint-config-airbnb/package.json   |   4 +-
 packages/eslint-config-airbnb/rules/react.js | 109 ++++++++++++++++---
 2 files changed, 95 insertions(+), 18 deletions(-)

diff --git a/packages/eslint-config-airbnb/package.json b/packages/eslint-config-airbnb/package.json
index 7fd3a288fc..0e52b0e0ea 100644
--- a/packages/eslint-config-airbnb/package.json
+++ b/packages/eslint-config-airbnb/package.json
@@ -58,7 +58,7 @@
     "eslint-find-rules": "^3.1.1",
     "eslint-plugin-import": "^2.8.0",
     "eslint-plugin-jsx-a11y": "^6.0.3",
-    "eslint-plugin-react": "^7.4.0",
+    "eslint-plugin-react": "^7.6.1",
     "in-publish": "^2.0.0",
     "react": ">= 0.13.0",
     "safe-publish-latest": "^1.1.1",
@@ -68,7 +68,7 @@
     "eslint": "^4.16.0",
     "eslint-plugin-import": "^2.8.0",
     "eslint-plugin-jsx-a11y": "^6.0.3",
-    "eslint-plugin-react": "^7.4.0"
+    "eslint-plugin-react": "^7.6.1"
   },
   "engines": {
     "node": ">= 4"
diff --git a/packages/eslint-config-airbnb/rules/react.js b/packages/eslint-config-airbnb/rules/react.js
index 999d3a1cbb..6332546b26 100644
--- a/packages/eslint-config-airbnb/rules/react.js
+++ b/packages/eslint-config-airbnb/rules/react.js
@@ -38,8 +38,16 @@ module.exports = {
     'react/display-name': ['off', { ignoreTranspilerName: false }],
 
     // Forbid certain propTypes (any, array, object)
-    // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/forbid-prop-types.md
-    'react/forbid-prop-types': ['error', { forbid: ['any', 'array', 'object'] }],
+    // https://github.com/yannickcr/eslint-plugin-react/blob/843d71a432baf0f01f598d7cf1eea75ad6896e4b/docs/rules/forbid-prop-types.md
+    'react/forbid-prop-types': ['error', {
+      forbid: ['any', 'array', 'object'],
+      checkContextTypes: true,
+      checkChildContextTypes: true,
+    }],
+
+    // Forbid certain props on DOM Nodes
+    // https://github.com/yannickcr/eslint-plugin-react/blob/843d71a432baf0f01f598d7cf1eea75ad6896e4b/docs/rules/forbid-dom-props.md
+    'react/forbid-dom-props': ['off', { forbid: [] }],
 
     // Enforce boolean attributes notation in JSX
     // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/jsx-boolean-value.md
@@ -109,6 +117,7 @@ module.exports = {
       ignoreCase: true,
       callbacksLast: false,
       requiredFirst: false,
+      sortShapeProp: true,
     }],
 
     // Deprecated in favor of react/jsx-sort-props
@@ -125,6 +134,12 @@ module.exports = {
       reservedFirst: true,
     }],
 
+    // Enforce defaultProps declarations alphabetical sorting
+    // https://github.com/yannickcr/eslint-plugin-react/blob/843d71a432baf0f01f598d7cf1eea75ad6896e4b/docs/rules/jsx-sort-default-props.md
+    'react/jsx-sort-default-props': ['off', {
+      ignoreCase: true,
+    }],
+
     // Prevent React to be incorrectly marked as unused
     // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/jsx-uses-react.md
     'react/jsx-uses-react': ['error'],
@@ -207,28 +222,59 @@ module.exports = {
     'react/self-closing-comp': 'error',
 
     // Enforce component methods order
-    // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/sort-comp.md
+    // https://github.com/yannickcr/eslint-plugin-react/blob/843d71a432baf0f01f598d7cf1eea75ad6896e4b/docs/rules/sort-comp.md
     'react/sort-comp': ['error', {
       order: [
         'static-methods',
+        'instance-variables',
         'lifecycle',
         '/^on.+$/',
         'getters',
         'setters',
         '/^(get|set)(?!(InitialState$|DefaultProps$|ChildContext$)).+$/',
+        'instance-methods',
         'everything-else',
-        '/^render.+$/',
-        'render'
+        'rendering',
       ],
+      groups: {
+        lifecycle: [
+          'displayName',
+          'propTypes',
+          'contextTypes',
+          'childContextTypes',
+          'mixins',
+          'statics',
+          'defaultProps',
+          'constructor',
+          'getDefaultProps',
+          'getInitialState',
+          'state',
+          'getChildContext',
+          'componentWillMount',
+          'componentDidMount',
+          'componentWillReceiveProps',
+          'shouldComponentUpdate',
+          'componentWillUpdate',
+          'componentDidUpdate',
+          'componentWillUnmount',
+        ],
+        rendering: [
+          '/^render.+$/',
+          'render'
+        ],
+      },
     }],
 
     // Prevent missing parentheses around multilines JSX
-    // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/jsx-wrap-multilines.md
+    // https://github.com/yannickcr/eslint-plugin-react/blob/843d71a432baf0f01f598d7cf1eea75ad6896e4b/docs/rules/jsx-wrap-multilines.md
     'react/jsx-wrap-multilines': ['error', {
-      declaration: true,
-      assignment: true,
-      return: true,
-      arrow: true,
+      declaration: 'parens-new-line',
+      assignment: 'parens-new-line',
+      return: 'parens-new-line',
+      arrow: 'parens-new-line',
+      condition: 'parens-new-line',
+      logical: 'parens-new-line',
+      prop: 'parens-new-line',
     }],
 
     // Require that the first prop in a JSX element be on a new line when the element is multiline
@@ -300,11 +346,12 @@ module.exports = {
     'react/no-children-prop': 'error',
 
     // Validate whitespace in and around the JSX opening and closing brackets
-    // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/jsx-tag-spacing.md
+    // https://github.com/yannickcr/eslint-plugin-react/blob/843d71a432baf0f01f598d7cf1eea75ad6896e4b/docs/rules/jsx-tag-spacing.md
     'react/jsx-tag-spacing': ['error', {
       closingSlash: 'never',
       beforeSelfClosing: 'always',
-      afterOpening: 'never'
+      afterOpening: 'never',
+      beforeClosing: 'never',
     }],
 
     // Enforce spaces before the closing bracket of self-closing JSX elements
@@ -317,8 +364,10 @@ module.exports = {
     'react/no-array-index-key': 'error',
 
     // Enforce a defaultProps definition for every prop that is not a required prop
-    // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/require-default-props.md
-    'react/require-default-props': 'error',
+    // https://github.com/yannickcr/eslint-plugin-react/blob/843d71a432baf0f01f598d7cf1eea75ad6896e4b/docs/rules/require-default-props.md
+    'react/require-default-props': ['error', {
+      forbidDefaultForRequired: true,
+    }],
 
     // Forbids using non-exported propTypes
     // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/forbid-foreign-prop-types.md
@@ -341,10 +390,11 @@ module.exports = {
     'react/no-unused-state': 'error',
 
     // Enforces consistent naming for boolean props
-    // https://github.com/yannickcr/eslint-plugin-react/blob/73abadb697034b5ccb514d79fb4689836fe61f91/docs/rules/boolean-prop-naming.md
+    // https://github.com/yannickcr/eslint-plugin-react/blob/843d71a432baf0f01f598d7cf1eea75ad6896e4b/docs/rules/boolean-prop-naming.md
     'react/boolean-prop-naming': ['off', {
       propTypeNames: ['bool', 'mutuallyExclusiveTrueProps'],
       rule: '^(is|has)[A-Z]([A-Za-z0-9]?)+',
+      message: '',
     }],
 
     // Prevents common casing typos
@@ -353,7 +403,34 @@ module.exports = {
 
     // Enforce curly braces or disallow unnecessary curly braces in JSX props and/or children
     // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/jsx-curly-brace-presence.md
-    'react/jsx-curly-brace-presence': ['error', { props: 'never', children: 'never' }]
+    'react/jsx-curly-brace-presence': ['error', { props: 'never', children: 'never' }],
+
+    // One JSX Element Per Line
+    // https://github.com/yannickcr/eslint-plugin-react/blob/843d71a432baf0f01f598d7cf1eea75ad6896e4b/docs/rules/jsx-one-expression-per-line.md
+    'react/jsx-one-expression-per-line': 'error',
+
+    // Enforce consistent usage of destructuring assignment of props, state, and context
+    // https://github.com/yannickcr/eslint-plugin-react/blob/843d71a432baf0f01f598d7cf1eea75ad6896e4b/docs/rules/destructuring-assignment.md
+    'react/destructuring-assignment': ['error', 'always'],
+
+    // Prevent using this.state within a this.setState
+    // https://github.com/yannickcr/eslint-plugin-react/blob/843d71a432baf0f01f598d7cf1eea75ad6896e4b/docs/rules/no-access-state-in-setstate.md
+    'react/no-access-state-in-setstate': 'error',
+
+    // Prevent usage of button elements without an explicit type attribute
+    // https://github.com/yannickcr/eslint-plugin-react/blob/843d71a432baf0f01f598d7cf1eea75ad6896e4b/docs/rules/button-has-type.md
+    'react/button-has-type': ['error', {
+      button: true,
+      submit: true,
+      reset: false,
+    }],
+
+    // Ensures inline tags are not rendered without spaces between them
+    'react/jsx-child-element-spacing': 'off',
+
+    // Prevent this from being used in stateless functional components
+    // https://github.com/yannickcr/eslint-plugin-react/blob/843d71a432baf0f01f598d7cf1eea75ad6896e4b/docs/rules/no-this-in-sfc.md
+    'react/no-this-in-sfc': 'error',
   },
 
   settings: {

From 3c3074e502dc9ebc7dbdad372df474e49f52d512 Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Tue, 20 Feb 2018 00:10:46 -0800
Subject: [PATCH 1204/1591] [eslint config] [*] [deps] update `eslint`,
 `eslint-find-rules`, `eslint-plugin-react`, `tape`

---
 packages/eslint-config-airbnb-base/package.json |  6 +++---
 packages/eslint-config-airbnb/package.json      | 12 ++++++------
 packages/eslint-config-airbnb/rules/react.js    |  7 ++++++-
 3 files changed, 15 insertions(+), 10 deletions(-)

diff --git a/packages/eslint-config-airbnb-base/package.json b/packages/eslint-config-airbnb-base/package.json
index 5d4cd5ccc5..a3d13d59f0 100644
--- a/packages/eslint-config-airbnb-base/package.json
+++ b/packages/eslint-config-airbnb-base/package.json
@@ -51,12 +51,12 @@
     "babel-preset-airbnb": "^2.4.0",
     "babel-tape-runner": "^2.0.1",
     "editorconfig-tools": "^0.1.1",
-    "eslint": "^4.16.0",
-    "eslint-find-rules": "^3.1.1",
+    "eslint": "^4.18.0",
+    "eslint-find-rules": "^3.2.0",
     "eslint-plugin-import": "^2.8.0",
     "in-publish": "^2.0.0",
     "safe-publish-latest": "^1.1.1",
-    "tape": "^4.8.0"
+    "tape": "^4.9.0"
   },
   "peerDependencies": {
     "eslint": "^4.16.0",
diff --git a/packages/eslint-config-airbnb/package.json b/packages/eslint-config-airbnb/package.json
index 0e52b0e0ea..66c0b8294c 100644
--- a/packages/eslint-config-airbnb/package.json
+++ b/packages/eslint-config-airbnb/package.json
@@ -54,21 +54,21 @@
     "babel-preset-airbnb": "^2.4.0",
     "babel-tape-runner": "^2.0.1",
     "editorconfig-tools": "^0.1.1",
-    "eslint": "^4.16.0",
-    "eslint-find-rules": "^3.1.1",
+    "eslint": "^4.18.0",
+    "eslint-find-rules": "^3.2.0",
     "eslint-plugin-import": "^2.8.0",
     "eslint-plugin-jsx-a11y": "^6.0.3",
-    "eslint-plugin-react": "^7.6.1",
+    "eslint-plugin-react": "^7.7.0",
     "in-publish": "^2.0.0",
     "react": ">= 0.13.0",
     "safe-publish-latest": "^1.1.1",
-    "tape": "^4.8.0"
+    "tape": "^4.9.0"
   },
   "peerDependencies": {
-    "eslint": "^4.16.0",
+    "eslint": "^4.18.0",
     "eslint-plugin-import": "^2.8.0",
     "eslint-plugin-jsx-a11y": "^6.0.3",
-    "eslint-plugin-react": "^7.6.1"
+    "eslint-plugin-react": "^7.7.0"
   },
   "engines": {
     "node": ">= 4"
diff --git a/packages/eslint-config-airbnb/rules/react.js b/packages/eslint-config-airbnb/rules/react.js
index 6332546b26..7d8145a17a 100644
--- a/packages/eslint-config-airbnb/rules/react.js
+++ b/packages/eslint-config-airbnb/rules/react.js
@@ -371,7 +371,8 @@ module.exports = {
 
     // Forbids using non-exported propTypes
     // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/forbid-foreign-prop-types.md
-    'react/forbid-foreign-prop-types': 'off',
+    // TODO: enable?
+    'react/forbid-foreign-prop-types': ['off', { allowInPropTypes: true }],
 
     // Prevent void DOM elements from receiving children
     // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/void-dom-elements-no-children.md
@@ -431,6 +432,10 @@ module.exports = {
     // Prevent this from being used in stateless functional components
     // https://github.com/yannickcr/eslint-plugin-react/blob/843d71a432baf0f01f598d7cf1eea75ad6896e4b/docs/rules/no-this-in-sfc.md
     'react/no-this-in-sfc': 'error',
+
+    // Validate JSX maximum depth
+    // https://github.com/yannickcr/eslint-plugin-react/blob/abe8381c0d6748047224c430ce47f02e40160ed0/docs/rules/jsx-max-depth.md
+    'react/jsx-max-depth': 'off',
   },
 
   settings: {

From a7a7cab504576b32157edaf92c8d4613fc235c54 Mon Sep 17 00:00:00 2001
From: Song Xie <me@xiesong.me>
Date: Wed, 21 Feb 2018 14:44:58 -0800
Subject: [PATCH 1205/1591] [guide] Add an anchor for rule 13.7

---
 README.md | 1 +
 1 file changed, 1 insertion(+)

diff --git a/README.md b/README.md
index b299c9be10..881eb01490 100644
--- a/README.md
+++ b/README.md
@@ -1701,6 +1701,7 @@ Other Style Guides
     const truthyCount = array.filter(Boolean).length;
     ```
 
+<a name="variables--linebreak"></a>
   - [13.7](#variables--linebreak) Avoid linebreaks before or after `=` in an assignment. If your assignment violates [`max-len`](https://eslint.org/docs/rules/max-len.html), surround the value in parens. eslint [`operator-linebreak`](https://eslint.org/docs/rules/operator-linebreak.html).
 
     > Why? Linebreaks surrounding `=` can obfuscate the value of an assignment.

From ea14bda1101abc2971c86b663fa7eed6bd4e6be8 Mon Sep 17 00:00:00 2001
From: Honza Javorek <mail@honzajavorek.cz>
Date: Thu, 22 Feb 2018 15:48:50 +0100
Subject: [PATCH 1206/1591] Add licenses to sub packages

---
 packages/eslint-config-airbnb-base/LICENSE.md | 21 +++++++++++++++++++
 packages/eslint-config-airbnb/LICENSE.md      | 21 +++++++++++++++++++
 2 files changed, 42 insertions(+)
 create mode 100644 packages/eslint-config-airbnb-base/LICENSE.md
 create mode 100644 packages/eslint-config-airbnb/LICENSE.md

diff --git a/packages/eslint-config-airbnb-base/LICENSE.md b/packages/eslint-config-airbnb-base/LICENSE.md
new file mode 100644
index 0000000000..69d80c0252
--- /dev/null
+++ b/packages/eslint-config-airbnb-base/LICENSE.md
@@ -0,0 +1,21 @@
+MIT License
+
+Copyright (c) 2012 Airbnb
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
diff --git a/packages/eslint-config-airbnb/LICENSE.md b/packages/eslint-config-airbnb/LICENSE.md
new file mode 100644
index 0000000000..69d80c0252
--- /dev/null
+++ b/packages/eslint-config-airbnb/LICENSE.md
@@ -0,0 +1,21 @@
+MIT License
+
+Copyright (c) 2012 Airbnb
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.

From fd68fdbd2270021eaf0fcc6e4a4f66c261b5b0da Mon Sep 17 00:00:00 2001
From: Rauno Freiberg <freiberggg@gmail.com>
Date: Tue, 20 Feb 2018 19:28:52 +0200
Subject: [PATCH 1207/1591] [guide] [react] add comment about what JS standards
 are followed

Seen a few pull requests for the React style guide that try to introduce features that aren't yet in stage >= 3 (static class fields for i.e), so I've decided to add a comment to the beginning of the guide. Not sure if this is the right place to put it, but here it is.

This disclaimer might help:
1) give the community an idea what standards this guide is based on
2) prevent redundant pull requests
---
 react/README.md | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/react/README.md b/react/README.md
index bf3ed2666c..0db1fa8d3d 100644
--- a/react/README.md
+++ b/react/README.md
@@ -2,6 +2,8 @@
 
 *A mostly reasonable approach to React and JSX*
 
+This style guide is mostly based on the standards that are currently prevalent in JavaScript, although some conventions (i.e async/await or static class fields) may still be included or prohibited on a case-by-case basis. Currently, anything prior to stage 3 is not included nor recommended in this guide.
+
 ## Table of Contents
 
   1. [Basic Rules](#basic-rules)

From 1fbeabd0c4b5d6ece9b7b966aa594854c6da9930 Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Thu, 22 Feb 2018 13:51:02 -0800
Subject: [PATCH 1208/1591] [eslint config] [*] [breaking] [deps] update
 `eslint`, `eslint-plugin-import`

---
 .../eslint-config-airbnb-base/package.json    |  8 ++++----
 .../rules/imports.js                          | 20 +++++++++++++++++++
 packages/eslint-config-airbnb/package.json    |  8 ++++----
 3 files changed, 28 insertions(+), 8 deletions(-)

diff --git a/packages/eslint-config-airbnb-base/package.json b/packages/eslint-config-airbnb-base/package.json
index a3d13d59f0..f74a57d8e2 100644
--- a/packages/eslint-config-airbnb-base/package.json
+++ b/packages/eslint-config-airbnb-base/package.json
@@ -51,16 +51,16 @@
     "babel-preset-airbnb": "^2.4.0",
     "babel-tape-runner": "^2.0.1",
     "editorconfig-tools": "^0.1.1",
-    "eslint": "^4.18.0",
+    "eslint": "^4.18.1",
     "eslint-find-rules": "^3.2.0",
-    "eslint-plugin-import": "^2.8.0",
+    "eslint-plugin-import": "^2.9.0",
     "in-publish": "^2.0.0",
     "safe-publish-latest": "^1.1.1",
     "tape": "^4.9.0"
   },
   "peerDependencies": {
-    "eslint": "^4.16.0",
-    "eslint-plugin-import": "^2.8.0"
+    "eslint": "^4.18.1",
+    "eslint-plugin-import": "^2.9.0"
   },
   "engines": {
     "node": ">= 4"
diff --git a/packages/eslint-config-airbnb-base/rules/imports.js b/packages/eslint-config-airbnb-base/rules/imports.js
index 9536e9b4a4..88f704a996 100644
--- a/packages/eslint-config-airbnb-base/rules/imports.js
+++ b/packages/eslint-config-airbnb-base/rules/imports.js
@@ -211,5 +211,25 @@ module.exports = {
     // https://github.com/benmosher/eslint-plugin-import/blob/98acd6afd04dcb6920b81330114e146dc8532ea4/docs/rules/exports-last.md
     // TODO: enable?
     'import/exports-last': 'off',
+
+    // Reports when named exports are not grouped together in a single export declaration
+    // or when multiple assignments to CommonJS module.exports or exports object are present
+    // in a single file.
+    // https://github.com/benmosher/eslint-plugin-import/blob/44a038c06487964394b1e15b64f3bd34e5d40cde/docs/rules/group-exports.md
+    'import/group-exports': 'off',
+
+    // forbid default exports. this is a terrible rule, do not use it.
+    // https://github.com/benmosher/eslint-plugin-import/blob/44a038c06487964394b1e15b64f3bd34e5d40cde/docs/rules/no-default-export.md
+    'import/no-default-export': 'off',
+
+    // Forbid a module from importing itself
+    // https://github.com/benmosher/eslint-plugin-import/blob/44a038c06487964394b1e15b64f3bd34e5d40cde/docs/rules/no-self-import.md
+    // TODO: enable
+    'import/no-self-import': 'off',
+
+    // Ensures that there are no useless path segments
+    // https://github.com/benmosher/eslint-plugin-import/issues/1032
+    // TODO: enable
+    'import/no-useless-path-segments': 'off',
   },
 };
diff --git a/packages/eslint-config-airbnb/package.json b/packages/eslint-config-airbnb/package.json
index 66c0b8294c..b67dd57cdb 100644
--- a/packages/eslint-config-airbnb/package.json
+++ b/packages/eslint-config-airbnb/package.json
@@ -54,9 +54,9 @@
     "babel-preset-airbnb": "^2.4.0",
     "babel-tape-runner": "^2.0.1",
     "editorconfig-tools": "^0.1.1",
-    "eslint": "^4.18.0",
+    "eslint": "^4.18.1",
     "eslint-find-rules": "^3.2.0",
-    "eslint-plugin-import": "^2.8.0",
+    "eslint-plugin-import": "^2.9.0",
     "eslint-plugin-jsx-a11y": "^6.0.3",
     "eslint-plugin-react": "^7.7.0",
     "in-publish": "^2.0.0",
@@ -65,8 +65,8 @@
     "tape": "^4.9.0"
   },
   "peerDependencies": {
-    "eslint": "^4.18.0",
-    "eslint-plugin-import": "^2.8.0",
+    "eslint": "^4.18.1",
+    "eslint-plugin-import": "^2.9.0",
     "eslint-plugin-jsx-a11y": "^6.0.3",
     "eslint-plugin-react": "^7.7.0"
   },

From c82500d7fa65e199d3df0ce52783a058fb6f4683 Mon Sep 17 00:00:00 2001
From: Thomas Grainger <tom@procensus.com>
Date: Thu, 22 Feb 2018 01:07:09 +0000
Subject: [PATCH 1209/1591] [eslint config] [base] [breaking] enable
 `no-useless-path-segments`

---
 packages/eslint-config-airbnb-base/rules/imports.js    | 3 +--
 packages/eslint-config-airbnb-base/test/test-base.js   | 2 +-
 packages/eslint-config-airbnb/test/test-react-order.js | 2 +-
 3 files changed, 3 insertions(+), 4 deletions(-)

diff --git a/packages/eslint-config-airbnb-base/rules/imports.js b/packages/eslint-config-airbnb-base/rules/imports.js
index 88f704a996..005656e6f8 100644
--- a/packages/eslint-config-airbnb-base/rules/imports.js
+++ b/packages/eslint-config-airbnb-base/rules/imports.js
@@ -229,7 +229,6 @@ module.exports = {
 
     // Ensures that there are no useless path segments
     // https://github.com/benmosher/eslint-plugin-import/issues/1032
-    // TODO: enable
-    'import/no-useless-path-segments': 'off',
+    'import/no-useless-path-segments': 'error',
   },
 };
diff --git a/packages/eslint-config-airbnb-base/test/test-base.js b/packages/eslint-config-airbnb-base/test/test-base.js
index 01b5dd12d3..f907581502 100644
--- a/packages/eslint-config-airbnb-base/test/test-base.js
+++ b/packages/eslint-config-airbnb-base/test/test-base.js
@@ -2,7 +2,7 @@ import fs from 'fs';
 import path from 'path';
 import test from 'tape';
 
-import index from '../';
+import index from '..';
 
 const files = { ...{ index } }; // object spread is to test parsing
 
diff --git a/packages/eslint-config-airbnb/test/test-react-order.js b/packages/eslint-config-airbnb/test/test-react-order.js
index b28792a6d5..2527f04e19 100644
--- a/packages/eslint-config-airbnb/test/test-react-order.js
+++ b/packages/eslint-config-airbnb/test/test-react-order.js
@@ -1,6 +1,6 @@
 import test from 'tape';
 import { CLIEngine } from 'eslint';
-import eslintrc from '../';
+import eslintrc from '..';
 import reactRules from '../rules/react';
 import reactA11yRules from '../rules/react-a11y';
 

From 6373dab9901a29105712ec040006f2352a318dd6 Mon Sep 17 00:00:00 2001
From: Sharmila <sharmila.jesupaul@airbnb.com>
Date: Wed, 21 Feb 2018 20:18:56 -0800
Subject: [PATCH 1210/1591] Adds config entry point with only whitespace rules
 enabled

Adds a change to eslint-config-airbnb and eslint-config-airbnb-base to pull a list of rules from the project root and return a config with all rules turned off except the whitespace rules explicitly listed in the array. Also adds entry point data to readme.
---
 packages/eslint-config-airbnb-base/README.md  |  4 +
 .../eslint-config-airbnb-base/package.json    |  3 +-
 .../eslint-config-airbnb-base/whitespace.js   | 73 ++++++++++++++++
 packages/eslint-config-airbnb/README.md       |  4 +
 packages/eslint-config-airbnb/package.json    |  3 +-
 packages/eslint-config-airbnb/whitespace.js   | 87 +++++++++++++++++++
 6 files changed, 172 insertions(+), 2 deletions(-)
 create mode 100644 packages/eslint-config-airbnb-base/whitespace.js
 create mode 100644 packages/eslint-config-airbnb/whitespace.js

diff --git a/packages/eslint-config-airbnb-base/README.md b/packages/eslint-config-airbnb-base/README.md
index 686ccb06e8..fa0152eb04 100644
--- a/packages/eslint-config-airbnb-base/README.md
+++ b/packages/eslint-config-airbnb-base/README.md
@@ -84,6 +84,10 @@ Lints ES5 and below. Requires `eslint` and `eslint-plugin-import`.
 
 See [Airbnb's overarching ESLint config](https://npmjs.com/eslint-config-airbnb), [Airbnb's Javascript styleguide](https://github.com/airbnb/javascript), and the [ESlint config docs](https://eslint.org/docs/user-guide/configuring#extending-configuration-files) for more information.
 
+### eslint-config-airbnb-base/whitespace
+
+This entry point that only warns on whitespace rules and sets all other rules to warnings. View the list of whitespace rules [here](https://github.com/airbnb/javascript/blob/master/packages/eslint-config-airbnb-base/whitespace.js).
+
 ## Improving this config
 
 Consider adding test cases if you're making complicated rules changes, like anything involving regexes. Perhaps in a distant future, we could use literate programming to structure our README as test cases for our .eslintrc?
diff --git a/packages/eslint-config-airbnb-base/package.json b/packages/eslint-config-airbnb-base/package.json
index f74a57d8e2..6dd7461c8e 100644
--- a/packages/eslint-config-airbnb-base/package.json
+++ b/packages/eslint-config-airbnb-base/package.json
@@ -66,6 +66,7 @@
     "node": ">= 4"
   },
   "dependencies": {
-    "eslint-restricted-globals": "^0.1.1"
+    "eslint-restricted-globals": "^0.1.1",
+    "object.entries": "^1.0.4"
   }
 }
diff --git a/packages/eslint-config-airbnb-base/whitespace.js b/packages/eslint-config-airbnb-base/whitespace.js
new file mode 100644
index 0000000000..408c0b72b6
--- /dev/null
+++ b/packages/eslint-config-airbnb-base/whitespace.js
@@ -0,0 +1,73 @@
+const baseConfig = require('.');
+const entries = require('object.entries');
+const { CLIEngine } = require('eslint');
+
+function onlyErrorOnRules(rulesToError, config) {
+  const errorsOnly = { ...config };
+  const cli = new CLIEngine({ baseConfig: config, useEslintrc: false });
+  const baseRules = cli.getConfigForFile('./').rules;
+
+  entries(baseRules).forEach(([key, value]) => {
+    if (rulesToError.indexOf(key) === -1) {
+      if (Array.isArray(value)) {
+        errorsOnly.rules[key] = ['warn'].concat(value.slice(1));
+      } else if (typeof value === 'number') {
+        errorsOnly.rules[key] = 1;
+      } else {
+        errorsOnly.rules[key] = 'warn';
+      }
+    }
+  });
+
+  return errorsOnly;
+}
+
+module.exports = onlyErrorOnRules([
+  'array-bracket-newline',
+  'array-bracket-spacing',
+  'array-element-newline',
+  'arrow-spacing',
+  'block-spacing',
+  'comma-spacing',
+  'computed-property-spacing',
+  'dot-location',
+  'eol-last',
+  'func-call-spacing',
+  'function-paren-newline',
+  'generator-star-spacing',
+  'implicit-arrow-linebreak',
+  'indent',
+  'key-spacing',
+  'keyword-spacing',
+  'line-comment-position',
+  'linebreak-style',
+  'multiline-ternary',
+  'newline-per-chained-call',
+  'no-irregular-whitespace',
+  'no-mixed-spaces-and-tabs',
+  'no-multi-spaces',
+  'no-regex-spaces',
+  'no-spaced-func',
+  'no-trailing-spaces',
+  'no-whitespace-before-property',
+  'nonblock-statement-body-position',
+  'object-curly-newline',
+  'object-curly-spacing',
+  'object-property-newline',
+  'one-var-declaration-per-line',
+  'operator-linebreak',
+  'padded-blocks',
+  'padding-line-between-statements',
+  'rest-spread-spacing',
+  'semi-spacing',
+  'semi-style',
+  'space-before-blocks',
+  'space-before-function-paren',
+  'space-in-parens',
+  'space-infix-ops',
+  'space-unary-ops',
+  'spaced-comment',
+  'switch-colon-spacing',
+  'template-tag-spacing',
+  'import/newline-after-import',
+], baseConfig);
diff --git a/packages/eslint-config-airbnb/README.md b/packages/eslint-config-airbnb/README.md
index 88e6c80d23..2f341ec187 100644
--- a/packages/eslint-config-airbnb/README.md
+++ b/packages/eslint-config-airbnb/README.md
@@ -55,6 +55,10 @@ If you use yarn, run `npm info "eslint-config-airbnb@latest" peerDependencies` t
 
 2. Add `"extends": "airbnb"` to your .eslintrc
 
+### eslint-config-airbnb/whitespace
+
+This entry point that only warns on whitespace rules and sets all other rules to warnings. View the list of whitespace rules [here](https://github.com/airbnb/javascript/blob/master/packages/eslint-config-airbnb/whitespace.js).
+
 ### eslint-config-airbnb/base
 
 This entry point is deprecated. See [eslint-config-airbnb-base](https://npmjs.com/eslint-config-airbnb-base).
diff --git a/packages/eslint-config-airbnb/package.json b/packages/eslint-config-airbnb/package.json
index b67dd57cdb..9dc6c92a45 100644
--- a/packages/eslint-config-airbnb/package.json
+++ b/packages/eslint-config-airbnb/package.json
@@ -48,7 +48,8 @@
   },
   "homepage": "https://github.com/airbnb/javascript",
   "dependencies": {
-    "eslint-config-airbnb-base": "^12.1.0"
+    "eslint-config-airbnb-base": "^12.1.0",
+    "object.entries": "^1.0.4"
   },
   "devDependencies": {
     "babel-preset-airbnb": "^2.4.0",
diff --git a/packages/eslint-config-airbnb/whitespace.js b/packages/eslint-config-airbnb/whitespace.js
new file mode 100644
index 0000000000..f533385e80
--- /dev/null
+++ b/packages/eslint-config-airbnb/whitespace.js
@@ -0,0 +1,87 @@
+const baseConfig = require('.');
+const entries = require('object.entries');
+const { CLIEngine } = require('eslint');
+
+function onlyErrorOnRules(rulesToError, config) {
+  const errorsOnly = { ...config };
+  const cli = new CLIEngine({ baseConfig: config, useEslintrc: false });
+  const baseRules = cli.getConfigForFile('./').rules;
+
+  entries(baseRules).forEach(([key, value]) => {
+    if (rulesToError.indexOf(key) === -1) {
+      if (Array.isArray(value)) {
+        errorsOnly.rules[key] = ['warn'].concat(value.slice(1));
+      } else if (typeof value === 'number') {
+        errorsOnly.rules[key] = 1;
+      } else {
+        errorsOnly.rules[key] = 'warn';
+      }
+    }
+  });
+
+  return errorsOnly;
+}
+
+module.exports = onlyErrorOnRules([
+  'array-bracket-newline',
+  'array-bracket-spacing',
+  'array-element-newline',
+  'arrow-spacing',
+  'block-spacing',
+  'comma-spacing',
+  'computed-property-spacing',
+  'dot-location',
+  'eol-last',
+  'func-call-spacing',
+  'function-paren-newline',
+  'generator-star-spacing',
+  'implicit-arrow-linebreak',
+  'indent',
+  'key-spacing',
+  'keyword-spacing',
+  'line-comment-position',
+  'linebreak-style',
+  'multiline-ternary',
+  'newline-per-chained-call',
+  'no-irregular-whitespace',
+  'no-mixed-spaces-and-tabs',
+  'no-multi-spaces',
+  'no-regex-spaces',
+  'no-spaced-func',
+  'no-trailing-spaces',
+  'no-whitespace-before-property',
+  'nonblock-statement-body-position',
+  'object-curly-newline',
+  'object-curly-spacing',
+  'object-property-newline',
+  'one-var-declaration-per-line',
+  'operator-linebreak',
+  'padded-blocks',
+  'padding-line-between-statements',
+  'rest-spread-spacing',
+  'semi-spacing',
+  'semi-style',
+  'space-before-blocks',
+  'space-before-function-paren',
+  'space-in-parens',
+  'space-infix-ops',
+  'space-unary-ops',
+  'spaced-comment',
+  'switch-colon-spacing',
+  'template-tag-spacing',
+  'import/newline-after-import',
+  // eslint-plugin-react rules
+  'react/jsx-child-element-spacing',
+  'react/jsx-closing-bracket-location',
+  'react/jsx-closing-tag-location',
+  'react/jsx-curly-spacing',
+  'react/jsx-equals-spacing',
+  'react/jsx-first-prop-newline',
+  'react/jsx-indent',
+  'react/jsx-indent-props',
+  'react/jsx-max-props-per-line',
+  'react/jsx-one-expression-per-line',
+  'react/jsx-space-before-closing',
+  'react/jsx-tag-spacing',
+  'react/jsx-wrap-multilines',
+], baseConfig);

From 40dbeace170d3cf309e857dd9a9caa092d6aac2c Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Wed, 28 Feb 2018 23:00:19 -0800
Subject: [PATCH 1211/1591] [Tests] ensure all entry points parse

---
 packages/eslint-config-airbnb-base/package.json |  1 +
 .../eslint-config-airbnb-base/test/requires.js  | 16 ++++++++++++++++
 packages/eslint-config-airbnb/package.json      |  1 +
 packages/eslint-config-airbnb/test/requires.js  | 17 +++++++++++++++++
 4 files changed, 35 insertions(+)
 create mode 100644 packages/eslint-config-airbnb-base/test/requires.js
 create mode 100644 packages/eslint-config-airbnb/test/requires.js

diff --git a/packages/eslint-config-airbnb-base/package.json b/packages/eslint-config-airbnb-base/package.json
index 6dd7461c8e..608046874c 100644
--- a/packages/eslint-config-airbnb-base/package.json
+++ b/packages/eslint-config-airbnb-base/package.json
@@ -6,6 +6,7 @@
   "scripts": {
     "prelint": "editorconfig-tools check * rules/* test/*",
     "lint": "eslint --report-unused-disable-directives .",
+    "pretests-only": "node ./test/requires",
     "tests-only": "babel-tape-runner ./test/test-*.js",
     "prepublish": "(in-install || eslint-find-rules --unused) && (not-in-publish || npm test) && safe-publish-latest",
     "pretest": "npm run --silent lint",
diff --git a/packages/eslint-config-airbnb-base/test/requires.js b/packages/eslint-config-airbnb-base/test/requires.js
new file mode 100644
index 0000000000..180a09bf42
--- /dev/null
+++ b/packages/eslint-config-airbnb-base/test/requires.js
@@ -0,0 +1,16 @@
+/* eslint
+   strict: 0,
+   global-require: 0,
+ */
+
+'use strict';
+
+const test = require('tape');
+
+test('all entry points parse', (t) => {
+  t.doesNotThrow(() => require('..'), 'index does not throw');
+  t.doesNotThrow(() => require('../legacy'), 'legacy does not throw');
+  t.doesNotThrow(() => require('../whitespace'), 'whitespace does not throw');
+
+  t.end();
+});
diff --git a/packages/eslint-config-airbnb/package.json b/packages/eslint-config-airbnb/package.json
index 9dc6c92a45..54e9883cc5 100644
--- a/packages/eslint-config-airbnb/package.json
+++ b/packages/eslint-config-airbnb/package.json
@@ -6,6 +6,7 @@
   "scripts": {
     "prelint": "editorconfig-tools check * rules/* test/*",
     "lint": "eslint .",
+    "pretests-only": "node ./test/requires",
     "tests-only": "babel-tape-runner ./test/test-*.js",
     "prepublish": "(in-install || eslint-find-rules --unused) && (not-in-publish || npm test) && safe-publish-latest",
     "pretest": "npm run --silent lint",
diff --git a/packages/eslint-config-airbnb/test/requires.js b/packages/eslint-config-airbnb/test/requires.js
new file mode 100644
index 0000000000..0ab4aae58d
--- /dev/null
+++ b/packages/eslint-config-airbnb/test/requires.js
@@ -0,0 +1,17 @@
+/* eslint
+   strict: 0,
+   global-require: 0,
+ */
+
+'use strict';
+
+const test = require('tape');
+
+test('all entry points parse', (t) => {
+  t.doesNotThrow(() => require('..'), 'index does not throw');
+  t.doesNotThrow(() => require('../base'), 'base does not throw');
+  t.doesNotThrow(() => require('../legacy'), 'legacy does not throw');
+  t.doesNotThrow(() => require('../whitespace'), 'whitespace does not throw');
+
+  t.end();
+});

From 396166b1d3266c3bd4c9a83a8f3142c7bcc58865 Mon Sep 17 00:00:00 2001
From: Pirasis <1pete@users.noreply.github.com>
Date: Thu, 1 Mar 2018 12:15:56 +0700
Subject: [PATCH 1212/1591] [eslint config] [*] [fix] ensure `whitespace` entry
 point is compatible with node 4

---
 packages/eslint-config-airbnb-base/.eslintrc  |  4 +++-
 .../eslint-config-airbnb-base/package.json    |  1 +
 .../eslint-config-airbnb-base/whitespace.js   | 22 +++++++++++--------
 packages/eslint-config-airbnb/.eslintrc       |  6 +++--
 packages/eslint-config-airbnb/package.json    |  1 +
 packages/eslint-config-airbnb/whitespace.js   | 22 +++++++++++--------
 6 files changed, 35 insertions(+), 21 deletions(-)

diff --git a/packages/eslint-config-airbnb-base/.eslintrc b/packages/eslint-config-airbnb-base/.eslintrc
index 224149fda6..f9bd289286 100644
--- a/packages/eslint-config-airbnb-base/.eslintrc
+++ b/packages/eslint-config-airbnb-base/.eslintrc
@@ -3,6 +3,8 @@
   "rules": {
     // disable requiring trailing commas because it might be nice to revert to
     // being JSON at some point, and I don't want to make big changes now.
-    "comma-dangle": 0
+    "comma-dangle": 0,
+    // we support node 4
+    "prefer-destructuring": 0,
   },
 }
diff --git a/packages/eslint-config-airbnb-base/package.json b/packages/eslint-config-airbnb-base/package.json
index 608046874c..e9a6589bd0 100644
--- a/packages/eslint-config-airbnb-base/package.json
+++ b/packages/eslint-config-airbnb-base/package.json
@@ -68,6 +68,7 @@
   },
   "dependencies": {
     "eslint-restricted-globals": "^0.1.1",
+    "object.assign": "^4.1.0",
     "object.entries": "^1.0.4"
   }
 }
diff --git a/packages/eslint-config-airbnb-base/whitespace.js b/packages/eslint-config-airbnb-base/whitespace.js
index 408c0b72b6..66a05e52b9 100644
--- a/packages/eslint-config-airbnb-base/whitespace.js
+++ b/packages/eslint-config-airbnb-base/whitespace.js
@@ -1,20 +1,24 @@
 const baseConfig = require('.');
+const assign = require('object.assign');
 const entries = require('object.entries');
-const { CLIEngine } = require('eslint');
+const CLIEngine = require('eslint').CLIEngine;
 
 function onlyErrorOnRules(rulesToError, config) {
-  const errorsOnly = { ...config };
+  const errorsOnly = assign({}, config);
   const cli = new CLIEngine({ baseConfig: config, useEslintrc: false });
   const baseRules = cli.getConfigForFile('./').rules;
 
-  entries(baseRules).forEach(([key, value]) => {
-    if (rulesToError.indexOf(key) === -1) {
-      if (Array.isArray(value)) {
-        errorsOnly.rules[key] = ['warn'].concat(value.slice(1));
-      } else if (typeof value === 'number') {
-        errorsOnly.rules[key] = 1;
+  entries(baseRules).forEach((rule) => {
+    const ruleName = rule[0];
+    const ruleConfig = rule[1];
+
+    if (rulesToError.indexOf(ruleName) === -1) {
+      if (Array.isArray(ruleConfig)) {
+        errorsOnly.rules[ruleName] = ['warn'].concat(ruleConfig.slice(1));
+      } else if (typeof ruleConfig === 'number') {
+        errorsOnly.rules[ruleName] = 1;
       } else {
-        errorsOnly.rules[key] = 'warn';
+        errorsOnly.rules[ruleName] = 'warn';
       }
     }
   });
diff --git a/packages/eslint-config-airbnb/.eslintrc b/packages/eslint-config-airbnb/.eslintrc
index 6c8556be3b..f9bd289286 100644
--- a/packages/eslint-config-airbnb/.eslintrc
+++ b/packages/eslint-config-airbnb/.eslintrc
@@ -3,6 +3,8 @@
   "rules": {
     // disable requiring trailing commas because it might be nice to revert to
     // being JSON at some point, and I don't want to make big changes now.
-    "comma-dangle": 0
-  }
+    "comma-dangle": 0,
+    // we support node 4
+    "prefer-destructuring": 0,
+  },
 }
diff --git a/packages/eslint-config-airbnb/package.json b/packages/eslint-config-airbnb/package.json
index 54e9883cc5..df135d545a 100644
--- a/packages/eslint-config-airbnb/package.json
+++ b/packages/eslint-config-airbnb/package.json
@@ -50,6 +50,7 @@
   "homepage": "https://github.com/airbnb/javascript",
   "dependencies": {
     "eslint-config-airbnb-base": "^12.1.0",
+    "object.assign": "^4.1.0",
     "object.entries": "^1.0.4"
   },
   "devDependencies": {
diff --git a/packages/eslint-config-airbnb/whitespace.js b/packages/eslint-config-airbnb/whitespace.js
index f533385e80..ba36569a99 100644
--- a/packages/eslint-config-airbnb/whitespace.js
+++ b/packages/eslint-config-airbnb/whitespace.js
@@ -1,20 +1,24 @@
 const baseConfig = require('.');
+const assign = require('object.assign');
 const entries = require('object.entries');
-const { CLIEngine } = require('eslint');
+const CLIEngine = require('eslint').CLIEngine;
 
 function onlyErrorOnRules(rulesToError, config) {
-  const errorsOnly = { ...config };
+  const errorsOnly = assign({}, config);
   const cli = new CLIEngine({ baseConfig: config, useEslintrc: false });
   const baseRules = cli.getConfigForFile('./').rules;
 
-  entries(baseRules).forEach(([key, value]) => {
-    if (rulesToError.indexOf(key) === -1) {
-      if (Array.isArray(value)) {
-        errorsOnly.rules[key] = ['warn'].concat(value.slice(1));
-      } else if (typeof value === 'number') {
-        errorsOnly.rules[key] = 1;
+  entries(baseRules).forEach((rule) => {
+    const ruleName = rule[0];
+    const ruleConfig = rule[1];
+
+    if (rulesToError.indexOf(ruleName) === -1) {
+      if (Array.isArray(ruleConfig)) {
+        errorsOnly.rules[ruleName] = ['warn'].concat(ruleConfig.slice(1));
+      } else if (typeof ruleConfig === 'number') {
+        errorsOnly.rules[ruleName] = 1;
       } else {
-        errorsOnly.rules[key] = 'warn';
+        errorsOnly.rules[ruleName] = 'warn';
       }
     }
   });

From a9fc9d8a0f8b606d560bd173af4cdcfa18e86261 Mon Sep 17 00:00:00 2001
From: Rauno <freiberggg@gmail.com>
Date: Mon, 5 Mar 2018 22:24:19 +0200
Subject: [PATCH 1213/1591] [docs] [js] add function-paren-newline eslint
 reference link

---
 README.md | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/README.md b/README.md
index 881eb01490..4b9f4f709c 100644
--- a/README.md
+++ b/README.md
@@ -879,7 +879,7 @@ Other Style Guides
     ```
 
   <a name="functions--signature-invocation-indentation"></a>
-  - [7.15](#functions--signature-invocation-indentation) Functions with multiline signatures, or invocations, should be indented just like every other multiline list in this guide: with each item on a line by itself, with a trailing comma on the last item.
+  - [7.15](#functions--signature-invocation-indentation) Functions with multiline signatures, or invocations, should be indented just like every other multiline list in this guide: with each item on a line by itself, with a trailing comma on the last item. eslint: [`function-paren-newline`](https://eslint.org/docs/rules/function-paren-newline)
 
     ```javascript
     // bad

From 55adae99c960be8d4433b8c98b410695f6cea733 Mon Sep 17 00:00:00 2001
From: Michael Altamirano <michaeljaltamirano@gmail.com>
Date: Sat, 10 Mar 2018 17:30:38 -0800
Subject: [PATCH 1214/1591] [guide] Reflect adoption of jest

---
 README.md | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/README.md b/README.md
index 4b9f4f709c..2c6c5c6c7d 100644
--- a/README.md
+++ b/README.md
@@ -3401,7 +3401,7 @@ Other Style Guides
     - Whichever testing framework you use, you should be writing tests!
     - Strive to write many small pure functions, and minimize where mutations occur.
     - Be cautious about stubs and mocks - they can make your tests more brittle.
-    - We primarily use [`mocha`](https://www.npmjs.com/package/mocha) at Airbnb. [`tape`](https://www.npmjs.com/package/tape) is also used occasionally for small, separate modules.
+    - We primarily use [`mocha`](https://www.npmjs.com/package/mocha) and [`jest`](https://www.npmjs.com/package/jest) at Airbnb. [`tape`](https://www.npmjs.com/package/tape) is also used occasionally for small, separate modules.
     - 100% test coverage is a good goal to strive for, even if it’s not always practical to reach it.
     - Whenever you fix a bug, _write a regression test_. A bug fixed without a regression test is almost certainly going to break again in the future.
 

From a100a3957ffb11c841dbd74a649cbb9b5a17a2aa Mon Sep 17 00:00:00 2001
From: Remco Haszing <remcohaszing@gmail.com>
Date: Thu, 1 Mar 2018 14:33:02 +0100
Subject: [PATCH 1215/1591] [eslint config] [base] [breaking] Update
 `object-curly-newline` to match eslint 4.18.0

In eslint v4.18.0 separate settings are introduced for imports and exports for the `object-curly-newline` rule.

Without this change, there is different behavior when updating eslint to this version.
---
 packages/eslint-config-airbnb-base/rules/style.js | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

diff --git a/packages/eslint-config-airbnb-base/rules/style.js b/packages/eslint-config-airbnb-base/rules/style.js
index bc5e032e4a..12cd60d509 100644
--- a/packages/eslint-config-airbnb-base/rules/style.js
+++ b/packages/eslint-config-airbnb-base/rules/style.js
@@ -383,7 +383,9 @@ module.exports = {
     // https://eslint.org/docs/rules/object-curly-newline
     'object-curly-newline': ['error', {
       ObjectExpression: { minProperties: 4, multiline: true, consistent: true },
-      ObjectPattern: { minProperties: 4, multiline: true, consistent: true }
+      ObjectPattern: { minProperties: 4, multiline: true, consistent: true },
+      ImportDeclaration: { minProperties: 4, multiline: true, consistent: true },
+      ExportDeclaration: { minProperties: 4, multiline: true, consistent: true },
     }],
 
     // enforce "same line" or "multiple line" on object properties.

From 8247e338a2d689f2e16010b0db225fbce7760f97 Mon Sep 17 00:00:00 2001
From: Remco Haszing <remcohaszing@gmail.com>
Date: Mon, 4 Dec 2017 10:11:35 +0100
Subject: [PATCH 1216/1591] [eslint config] [base] [patch] Set
 import/extensions to ignorePackages

This allows to import non-JavaScript files through the main export of a dependency's package.json.

The following would trigger an error before, but is fine with the new configuration:

```js
import 'roboto-fontface';
```
---
 packages/eslint-config-airbnb-base/rules/imports.js | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/packages/eslint-config-airbnb-base/rules/imports.js b/packages/eslint-config-airbnb-base/rules/imports.js
index 005656e6f8..4a83126e1b 100644
--- a/packages/eslint-config-airbnb-base/rules/imports.js
+++ b/packages/eslint-config-airbnb-base/rules/imports.js
@@ -132,7 +132,7 @@ module.exports = {
 
     // Ensure consistent use of file extension within the import path
     // https://github.com/benmosher/eslint-plugin-import/blob/master/docs/rules/extensions.md
-    'import/extensions': ['error', 'always', {
+    'import/extensions': ['error', 'ignorePackages', {
       js: 'never',
       mjs: 'never',
       jsx: 'never',

From a9f5d519fe7356a60843c2c24aae974f716e6d17 Mon Sep 17 00:00:00 2001
From: Shane Mileham <shane.mileham@healthiq.com>
Date: Mon, 12 Mar 2018 11:20:34 -0700
Subject: [PATCH 1217/1591] Added naming--uppercase section from comment

---
 README.md | 37 ++++++++++++++++++++++++-------------
 1 file changed, 24 insertions(+), 13 deletions(-)

diff --git a/README.md b/README.md
index 1116dcb4ba..49f554e2cf 100644
--- a/README.md
+++ b/README.md
@@ -3140,32 +3140,43 @@ Other Style Guides
     ```
 
   <a name="naming--uppercase"></a>
-  - [23.10](#naming--uppercase) Use UPPERCASE for nested object namespacing, global variables, and constants.
+  - [23.10](#naming--uppercase) You may optionally uppercase a constant only if it (1) is exported, (2) is a `const` (it can not be reassigned), and (3) the programmer can trust it (and its nested properties) to never change.
 
+    > Why? This is an additional tool to assist in situations where the programmer would be unsure if a variable might ever change. UPPERCASE_VARIABLES are letting the programmer know that they can trust the variable (and its properties) not to change.
+    - What about all `const` variables? - This is unnecessary, so uppercasing should not be used for constants within a file. It should be used for exported constants however.
+    - What about exported objects? - Uppercase at the top level of export  (e.g. `EXPORTED_OBJECT.key`) and maintain that all nested properties do not change.
 
     ```javascript
     // bad
-    const namespace = namespace || {};
+    const PRIVATE_VARIABLE = 'should not be unnecessarily uppercased within a file';
 
-    namespace.util.Widget = {
-       // ...stuff...
-    }
+    // bad
+    export const THING_TO_BE_CHANGED = 'should obviously not be uppercased';
 
     // bad
-    const apiKey = '44b345234534t455245njkl523452-vbb9';
+    export let REASSIGNABLE_VARIABLE = 'do not use let with uppercase variables';
 
-    // good
-    const NAMESPACE = NAMESPACE || {};
+    // ---
 
-    NAMESPACE.util.Widget = {
-       // ...stuff...
-    }
+    // allowed but does not supply semantic value
+    export const apiKey = 'SOMEKEY';
+
+    // better in most cases
+    export const API_KEY = 'SOMEKEY';
+
+    // ---
+
+    // bad - unnecessarily uppercases key while adding no semantic value
+    export const MAPPING = {
+      KEY: 'value'
+    };
 
     // good
-    const API_KEY = '44b345234534t455245njkl523452-vbb9';
+    export const MAPPING = {
+      key: 'value'
+    };
     ```
 
-
 **[⬆ back to top](#table-of-contents)**
 
 ## Accessors

From 49dab881da79eb3742e7f1e26c754194a9f26991 Mon Sep 17 00:00:00 2001
From: Joe Lencioni <joe.lencioni@gmail.com>
Date: Fri, 23 Mar 2018 08:42:42 -0700
Subject: [PATCH 1218/1591] Change import/no-self-import from "off" to "error"

We recently had an incident where this rule would have prevented
infinite loops in Hypernova and in the browser.
---
 packages/eslint-config-airbnb-base/rules/imports.js | 3 +--
 1 file changed, 1 insertion(+), 2 deletions(-)

diff --git a/packages/eslint-config-airbnb-base/rules/imports.js b/packages/eslint-config-airbnb-base/rules/imports.js
index 4a83126e1b..a34e7f2524 100644
--- a/packages/eslint-config-airbnb-base/rules/imports.js
+++ b/packages/eslint-config-airbnb-base/rules/imports.js
@@ -224,8 +224,7 @@ module.exports = {
 
     // Forbid a module from importing itself
     // https://github.com/benmosher/eslint-plugin-import/blob/44a038c06487964394b1e15b64f3bd34e5d40cde/docs/rules/no-self-import.md
-    // TODO: enable
-    'import/no-self-import': 'off',
+    'import/no-self-import': 'error',
 
     // Ensures that there are no useless path segments
     // https://github.com/benmosher/eslint-plugin-import/issues/1032

From 8ed1d855bbefccbb147fe17d902a18c8f9aa3977 Mon Sep 17 00:00:00 2001
From: Naomi Jacobs <naomiajacobs@gmail.com>
Date: Tue, 20 Mar 2018 11:40:04 -0700
Subject: [PATCH 1219/1591] [eslint config] [base] [patch] Include
 'accumulator' exception for `no-param-reassign`

---
 packages/eslint-config-airbnb-base/rules/best-practices.js | 1 +
 1 file changed, 1 insertion(+)

diff --git a/packages/eslint-config-airbnb-base/rules/best-practices.js b/packages/eslint-config-airbnb-base/rules/best-practices.js
index 978cafc698..b5712d00b2 100644
--- a/packages/eslint-config-airbnb-base/rules/best-practices.js
+++ b/packages/eslint-config-airbnb-base/rules/best-practices.js
@@ -173,6 +173,7 @@ module.exports = {
       props: true,
       ignorePropertyModificationsFor: [
         'acc', // for reduce accumulators
+        'accumulator', // for reduce accumulators
         'e', // for e.returnvalue
         'ctx', // for Koa routing
         'req', // for Express requests

From 06e28997b239a341bcc196905f710f2c437ed8cf Mon Sep 17 00:00:00 2001
From: Simon Owen <s1000wen@gmail.com>
Date: Wed, 28 Mar 2018 15:39:14 +0100
Subject: [PATCH 1220/1591] Minor spacing update

---
 react/README.md | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/react/README.md b/react/README.md
index 0db1fa8d3d..b89bad0710 100644
--- a/react/README.md
+++ b/react/README.md
@@ -421,13 +421,13 @@ This style guide is mostly based on the standards that are currently prevalent i
   Filter out unnecessary props when possible. Also, use [prop-types-exact](https://www.npmjs.com/package/prop-types-exact) to help prevent bugs.
 
   ```jsx
-  //good
+  // good
   render() {
     const { irrelevantProp, ...relevantProps  } = this.props;
     return <WrappedComponent {...relevantProps} />
   }
 
-  //bad
+  // bad
   render() {
     const { irrelevantProp, ...relevantProps  } = this.props;
     return <WrappedComponent {...this.props} />

From 31d95fded451b31695d9cc09abc117edcea4969d Mon Sep 17 00:00:00 2001
From: Sharmila <sharmila.jesupaul@airbnb.com>
Date: Wed, 4 Apr 2018 16:23:02 -0700
Subject: [PATCH 1221/1591] [eslint config] [*] [deps] update `eslint`,
 `eslint-plugin-import`, `eslint-find-rules`

---
 packages/eslint-config-airbnb-base/package.json     | 10 +++++-----
 packages/eslint-config-airbnb-base/rules/imports.js |  5 +++++
 packages/eslint-config-airbnb/package.json          | 10 +++++-----
 3 files changed, 15 insertions(+), 10 deletions(-)

diff --git a/packages/eslint-config-airbnb-base/package.json b/packages/eslint-config-airbnb-base/package.json
index e9a6589bd0..2c3d49bd21 100644
--- a/packages/eslint-config-airbnb-base/package.json
+++ b/packages/eslint-config-airbnb-base/package.json
@@ -52,16 +52,16 @@
     "babel-preset-airbnb": "^2.4.0",
     "babel-tape-runner": "^2.0.1",
     "editorconfig-tools": "^0.1.1",
-    "eslint": "^4.18.1",
-    "eslint-find-rules": "^3.2.0",
-    "eslint-plugin-import": "^2.9.0",
+    "eslint": "^4.19.1",
+    "eslint-find-rules": "^3.2.2",
+    "eslint-plugin-import": "^2.10.0",
     "in-publish": "^2.0.0",
     "safe-publish-latest": "^1.1.1",
     "tape": "^4.9.0"
   },
   "peerDependencies": {
-    "eslint": "^4.18.1",
-    "eslint-plugin-import": "^2.9.0"
+    "eslint": "^4.19.1",
+    "eslint-plugin-import": "^2.10.0"
   },
   "engines": {
     "node": ">= 4"
diff --git a/packages/eslint-config-airbnb-base/rules/imports.js b/packages/eslint-config-airbnb-base/rules/imports.js
index a34e7f2524..3c76a5aa3d 100644
--- a/packages/eslint-config-airbnb-base/rules/imports.js
+++ b/packages/eslint-config-airbnb-base/rules/imports.js
@@ -226,6 +226,11 @@ module.exports = {
     // https://github.com/benmosher/eslint-plugin-import/blob/44a038c06487964394b1e15b64f3bd34e5d40cde/docs/rules/no-self-import.md
     'import/no-self-import': 'error',
 
+    // Forbid cyclical dependencies between modules
+    // https://github.com/benmosher/eslint-plugin-import/blob/d81f48a2506182738409805f5272eff4d77c9348/docs/rules/no-cycle.md
+    // TODO: enable, semver-major
+    'import/no-cycle': ['off', { maxDepth: Infinity }],
+
     // Ensures that there are no useless path segments
     // https://github.com/benmosher/eslint-plugin-import/issues/1032
     'import/no-useless-path-segments': 'error',
diff --git a/packages/eslint-config-airbnb/package.json b/packages/eslint-config-airbnb/package.json
index df135d545a..dfaadad2ad 100644
--- a/packages/eslint-config-airbnb/package.json
+++ b/packages/eslint-config-airbnb/package.json
@@ -57,9 +57,9 @@
     "babel-preset-airbnb": "^2.4.0",
     "babel-tape-runner": "^2.0.1",
     "editorconfig-tools": "^0.1.1",
-    "eslint": "^4.18.1",
-    "eslint-find-rules": "^3.2.0",
-    "eslint-plugin-import": "^2.9.0",
+    "eslint": "^4.19.1",
+    "eslint-find-rules": "^3.2.2",
+    "eslint-plugin-import": "^2.10.0",
     "eslint-plugin-jsx-a11y": "^6.0.3",
     "eslint-plugin-react": "^7.7.0",
     "in-publish": "^2.0.0",
@@ -68,8 +68,8 @@
     "tape": "^4.9.0"
   },
   "peerDependencies": {
-    "eslint": "^4.18.1",
-    "eslint-plugin-import": "^2.9.0",
+    "eslint": "^4.19.1",
+    "eslint-plugin-import": "^2.10.0",
     "eslint-plugin-jsx-a11y": "^6.0.3",
     "eslint-plugin-react": "^7.7.0"
   },

From c71e8c9231394ef9489cacf6cbf1ea9dd63b1b32 Mon Sep 17 00:00:00 2001
From: Sharmila <sharmila.jesupaul@airbnb.com>
Date: Wed, 4 Apr 2018 16:15:27 -0700
Subject: [PATCH 1222/1591] [eslint config] [base] [breaking] enable
 `import/no-cycle`: warn on cyclical dependencies

---
 packages/eslint-config-airbnb-base/rules/imports.js | 3 +--
 1 file changed, 1 insertion(+), 2 deletions(-)

diff --git a/packages/eslint-config-airbnb-base/rules/imports.js b/packages/eslint-config-airbnb-base/rules/imports.js
index 3c76a5aa3d..1ea95697c9 100644
--- a/packages/eslint-config-airbnb-base/rules/imports.js
+++ b/packages/eslint-config-airbnb-base/rules/imports.js
@@ -228,8 +228,7 @@ module.exports = {
 
     // Forbid cyclical dependencies between modules
     // https://github.com/benmosher/eslint-plugin-import/blob/d81f48a2506182738409805f5272eff4d77c9348/docs/rules/no-cycle.md
-    // TODO: enable, semver-major
-    'import/no-cycle': ['off', { maxDepth: Infinity }],
+    'import/no-cycle': ['error', { maxDepth: Infinity }],
 
     // Ensures that there are no useless path segments
     // https://github.com/benmosher/eslint-plugin-import/issues/1032

From bd97fca21b99b542d9ef9eebec78198d6bb5fde0 Mon Sep 17 00:00:00 2001
From: Pramod Garg <pramodgarg002@gmail.com>
Date: Wed, 4 Apr 2018 22:45:44 +0530
Subject: [PATCH 1223/1591] [guide] Minor addition of spaces

---
 README.md | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/README.md b/README.md
index 49f554e2cf..b0093efe40 100644
--- a/README.md
+++ b/README.md
@@ -2106,7 +2106,7 @@ Other Style Guides
       }
     }
 
-    //good
+    // good
     function dogs(x) {
       if (x) {
         if (z) {
@@ -2267,7 +2267,7 @@ Other Style Guides
 
     ```javascript
     // bad
-    //is current tab
+    // is current tab
     const active = true;
 
     // good

From 8720f5f90bbe4aaf87e03d81b3b4f607f27ff6c6 Mon Sep 17 00:00:00 2001
From: "C. T. Lin" <chentsulin@gmail.com>
Date: Wed, 28 Mar 2018 13:05:12 +0800
Subject: [PATCH 1224/1591] [eslint config] [base] [patch] avoid `__mocks__`
 `no-extraneous-dependencies` check

---
 packages/eslint-config-airbnb-base/rules/imports.js | 1 +
 1 file changed, 1 insertion(+)

diff --git a/packages/eslint-config-airbnb-base/rules/imports.js b/packages/eslint-config-airbnb-base/rules/imports.js
index 1ea95697c9..04455c97fb 100644
--- a/packages/eslint-config-airbnb-base/rules/imports.js
+++ b/packages/eslint-config-airbnb-base/rules/imports.js
@@ -74,6 +74,7 @@ module.exports = {
         'tests/**', // also common npm pattern
         'spec/**', // mocha, rspec-like pattern
         '**/__tests__/**', // jest pattern
+        '**/__mocks__/**', // jest pattern
         'test.{js,jsx}', // repos with a single test file
         'test-*.{js,jsx}', // repos with multiple top-level test files
         '**/*.{test,spec}.{js,jsx}', // tests where the extension denotes that it is a test

From 06998522e1f4935f81f732c458d2cc72dde2cac9 Mon Sep 17 00:00:00 2001
From: Hernaldo Jesus Henriquez <hjhenriq@gmail.com>
Date: Fri, 6 Apr 2018 14:53:46 -0300
Subject: [PATCH 1225/1591] [guide] fix "bad" comment to be actually bad

---
 README.md | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/README.md b/README.md
index b0093efe40..6a58c28480 100644
--- a/README.md
+++ b/README.md
@@ -2267,7 +2267,7 @@ Other Style Guides
 
     ```javascript
     // bad
-    // is current tab
+    //is current tab
     const active = true;
 
     // good

From 8956338ee95087ab2da99b368d00ff482e77df3b Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Eray=20=C3=87etinay?= <eraycetinay@gmail.com>
Date: Sun, 8 Apr 2018 22:51:19 +0300
Subject: [PATCH 1226/1591] [guide] Turkish Translation Link Added

---
 README.md | 1 +
 1 file changed, 1 insertion(+)

diff --git a/README.md b/README.md
index 6a58c28480..57ca65ed4e 100644
--- a/README.md
+++ b/README.md
@@ -3654,6 +3654,7 @@ Other Style Guides
   - ![ru](https://raw.githubusercontent.com/gosquared/flags/master/flags/flags/shiny/24/Russia.png) **Russian**: [leonidlebedev/javascript-airbnb](https://github.com/leonidlebedev/javascript-airbnb)
   - ![es](https://raw.githubusercontent.com/gosquared/flags/master/flags/flags/shiny/24/Spain.png) **Spanish**: [paolocarrasco/javascript-style-guide](https://github.com/paolocarrasco/javascript-style-guide)
   - ![th](https://raw.githubusercontent.com/gosquared/flags/master/flags/flags/shiny/24/Thailand.png) **Thai**: [lvarayut/javascript-style-guide](https://github.com/lvarayut/javascript-style-guide)
+  - ![tr](https://raw.githubusercontent.com/gosquared/flags/master/flags/flags/shiny/24/Turkey.png) **Turkish**: [eraycetinay/javascript](https://github.com/eraycetinay/javascript)
   - ![ua](https://raw.githubusercontent.com/gosquared/flags/master/flags/flags/shiny/24/Ukraine.png) **Ukrainian**: [ivanzusko/javascript](https://github.com/ivanzusko/javascript)
   - ![vn](https://raw.githubusercontent.com/gosquared/flags/master/flags/flags/shiny/24/Vietnam.png) **Vietnam**: [hngiang/javascript-style-guide](https://github.com/hngiang/javascript-style-guide)
 

From 6088a8f5b503c4e383552cbb6ae36d3fa4c6e7b1 Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Thu, 12 Apr 2018 15:46:55 -0700
Subject: [PATCH 1227/1591] [guide] remove references to jscs

---
 README.md | 71 +++++++++++++++++++++++++++----------------------------
 1 file changed, 35 insertions(+), 36 deletions(-)

diff --git a/README.md b/README.md
index 57ca65ed4e..ed54520555 100644
--- a/README.md
+++ b/README.md
@@ -119,7 +119,7 @@ Other Style Guides
     ```
 
   <a name="references--disallow-var"></a><a name="2.2"></a>
-  - [2.2](#references--disallow-var) If you must reassign references, use `let` instead of `var`. eslint: [`no-var`](https://eslint.org/docs/rules/no-var.html) jscs: [`disallowVar`](http://jscs.info/rule/disallowVar)
+  - [2.2](#references--disallow-var) If you must reassign references, use `let` instead of `var`. eslint: [`no-var`](https://eslint.org/docs/rules/no-var.html)
 
     > Why? `let` is block-scoped rather than function-scoped like `var`.
 
@@ -192,7 +192,7 @@ Other Style Guides
     ```
 
   <a name="es6-object-shorthand"></a><a name="3.5"></a>
-  - [3.3](#es6-object-shorthand) Use object method shorthand. eslint: [`object-shorthand`](https://eslint.org/docs/rules/object-shorthand.html) jscs: [`requireEnhancedObjectLiterals`](http://jscs.info/rule/requireEnhancedObjectLiterals)
+  - [3.3](#es6-object-shorthand) Use object method shorthand. eslint: [`object-shorthand`](https://eslint.org/docs/rules/object-shorthand.html)
 
     ```javascript
     // bad
@@ -215,7 +215,7 @@ Other Style Guides
     ```
 
   <a name="es6-object-concise"></a><a name="3.6"></a>
-  - [3.4](#es6-object-concise) Use property value shorthand. eslint: [`object-shorthand`](https://eslint.org/docs/rules/object-shorthand.html) jscs: [`requireEnhancedObjectLiterals`](http://jscs.info/rule/requireEnhancedObjectLiterals)
+  - [3.4](#es6-object-concise) Use property value shorthand. eslint: [`object-shorthand`](https://eslint.org/docs/rules/object-shorthand.html)
 
     > Why? It is shorter to write and descriptive.
 
@@ -264,7 +264,7 @@ Other Style Guides
     ```
 
   <a name="objects--quoted-props"></a><a name="3.8"></a>
-  - [3.6](#objects--quoted-props) Only quote properties that are invalid identifiers. eslint: [`quote-props`](https://eslint.org/docs/rules/quote-props.html) jscs: [`disallowQuotedKeysInObjects`](http://jscs.info/rule/disallowQuotedKeysInObjects)
+  - [3.6](#objects--quoted-props) Only quote properties that are invalid identifiers. eslint: [`quote-props`](https://eslint.org/docs/rules/quote-props.html)
 
     > Why? In general we consider it subjectively easier to read. It improves syntax highlighting, and is also more easily optimized by many JS engines.
 
@@ -482,7 +482,7 @@ Other Style Guides
 ## Destructuring
 
   <a name="destructuring--object"></a><a name="5.1"></a>
-  - [5.1](#destructuring--object) Use object destructuring when accessing and using multiple properties of an object. eslint: [`prefer-destructuring`](https://eslint.org/docs/rules/prefer-destructuring) jscs: [`requireObjectDestructuring`](http://jscs.info/rule/requireObjectDestructuring)
+  - [5.1](#destructuring--object) Use object destructuring when accessing and using multiple properties of an object. eslint: [`prefer-destructuring`](https://eslint.org/docs/rules/prefer-destructuring)
 
     > Why? Destructuring saves you from creating temporary references for those properties.
 
@@ -508,7 +508,7 @@ Other Style Guides
     ```
 
   <a name="destructuring--array"></a><a name="5.2"></a>
-  - [5.2](#destructuring--array) Use array destructuring. eslint: [`prefer-destructuring`](https://eslint.org/docs/rules/prefer-destructuring) jscs: [`requireArrayDestructuring`](http://jscs.info/rule/requireArrayDestructuring)
+  - [5.2](#destructuring--array) Use array destructuring. eslint: [`prefer-destructuring`](https://eslint.org/docs/rules/prefer-destructuring)
 
     ```javascript
     const arr = [1, 2, 3, 4];
@@ -522,7 +522,7 @@ Other Style Guides
     ```
 
   <a name="destructuring--object-over-array"></a><a name="5.3"></a>
-  - [5.3](#destructuring--object-over-array) Use object destructuring for multiple return values, not array destructuring. jscs: [`disallowArrayDestructuringReturn`](http://jscs.info/rule/disallowArrayDestructuringReturn)
+  - [5.3](#destructuring--object-over-array) Use object destructuring for multiple return values, not array destructuring.
 
     > Why? You can add new properties over time or change the order of things without breaking call sites.
 
@@ -551,7 +551,7 @@ Other Style Guides
 ## Strings
 
   <a name="strings--quotes"></a><a name="6.1"></a>
-  - [6.1](#strings--quotes) Use single quotes `''` for strings. eslint: [`quotes`](https://eslint.org/docs/rules/quotes.html) jscs: [`validateQuoteMarks`](http://jscs.info/rule/validateQuoteMarks)
+  - [6.1](#strings--quotes) Use single quotes `''` for strings. eslint: [`quotes`](https://eslint.org/docs/rules/quotes.html)
 
     ```javascript
     // bad
@@ -586,7 +586,7 @@ Other Style Guides
     ```
 
   <a name="es6-template-literals"></a><a name="6.4"></a>
-  - [6.3](#es6-template-literals) When programmatically building up strings, use template strings instead of concatenation. eslint: [`prefer-template`](https://eslint.org/docs/rules/prefer-template.html) [`template-curly-spacing`](https://eslint.org/docs/rules/template-curly-spacing) jscs: [`requireTemplateStrings`](http://jscs.info/rule/requireTemplateStrings)
+  - [6.3](#es6-template-literals) When programmatically building up strings, use template strings instead of concatenation. eslint: [`prefer-template`](https://eslint.org/docs/rules/prefer-template.html) [`template-curly-spacing`](https://eslint.org/docs/rules/template-curly-spacing)
 
     > Why? Template strings give you a readable, concise syntax with proper newlines and string interpolation features.
 
@@ -634,7 +634,7 @@ Other Style Guides
 ## Functions
 
   <a name="functions--declarations"></a><a name="7.1"></a>
-  - [7.1](#functions--declarations) Use named function expressions instead of function declarations. eslint: [`func-style`](https://eslint.org/docs/rules/func-style) jscs: [`disallowFunctionDeclarations`](http://jscs.info/rule/disallowFunctionDeclarations)
+  - [7.1](#functions--declarations) Use named function expressions instead of function declarations. eslint: [`func-style`](https://eslint.org/docs/rules/func-style)
 
     > Why? Function declarations are hoisted, which means that it’s easy - too easy - to reference the function before it is defined in the file. This harms readability and maintainability. If you find that a function’s definition is large or complex enough that it is interfering with understanding the rest of the file, then perhaps it’s time to extract it to its own module! Don’t forget to explicitly name the expression, regardless of whether or not the name is inferred from the containing variable (which is often the case in modern browsers or when using compilers such as Babel). This eliminates any assumptions made about the Error's call stack. ([Discussion](https://github.com/airbnb/javascript/issues/794))
 
@@ -657,7 +657,7 @@ Other Style Guides
     ```
 
   <a name="functions--iife"></a><a name="7.2"></a>
-  - [7.2](#functions--iife) Wrap immediately invoked function expressions in parentheses. eslint: [`wrap-iife`](https://eslint.org/docs/rules/wrap-iife.html) jscs: [`requireParenthesesAroundIIFE`](http://jscs.info/rule/requireParenthesesAroundIIFE)
+  - [7.2](#functions--iife) Wrap immediately invoked function expressions in parentheses. eslint: [`wrap-iife`](https://eslint.org/docs/rules/wrap-iife.html)
 
     > Why? An immediately invoked function expression is a single unit - wrapping both it, and its invocation parens, in parens, cleanly expresses this. Note that in a world with modules everywhere, you almost never need an IIFE.
 
@@ -916,7 +916,7 @@ Other Style Guides
 ## Arrow Functions
 
   <a name="arrows--use-them"></a><a name="8.1"></a>
-  - [8.1](#arrows--use-them) When you must use an anonymous function (as when passing an inline callback), use arrow function notation. eslint: [`prefer-arrow-callback`](https://eslint.org/docs/rules/prefer-arrow-callback.html), [`arrow-spacing`](https://eslint.org/docs/rules/arrow-spacing.html) jscs: [`requireArrowFunctions`](http://jscs.info/rule/requireArrowFunctions)
+  - [8.1](#arrows--use-them) When you must use an anonymous function (as when passing an inline callback), use arrow function notation. eslint: [`prefer-arrow-callback`](https://eslint.org/docs/rules/prefer-arrow-callback.html), [`arrow-spacing`](https://eslint.org/docs/rules/arrow-spacing.html)
 
     > Why? It creates a version of the function that executes in the context of `this`, which is usually what you want, and is a more concise syntax.
 
@@ -937,7 +937,7 @@ Other Style Guides
     ```
 
   <a name="arrows--implicit-return"></a><a name="8.2"></a>
-  - [8.2](#arrows--implicit-return) If the function body consists of a single statement returning an [expression](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Expressions_and_Operators#Expressions) without side effects, omit the braces and use the implicit return. Otherwise, keep the braces and use a `return` statement. eslint: [`arrow-parens`](https://eslint.org/docs/rules/arrow-parens.html), [`arrow-body-style`](https://eslint.org/docs/rules/arrow-body-style.html) jscs:  [`disallowParenthesesAroundArrowParam`](http://jscs.info/rule/disallowParenthesesAroundArrowParam), [`requireShorthandArrowFunctions`](http://jscs.info/rule/requireShorthandArrowFunctions)
+  - [8.2](#arrows--implicit-return) If the function body consists of a single statement returning an [expression](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Expressions_and_Operators#Expressions) without side effects, omit the braces and use the implicit return. Otherwise, keep the braces and use a `return` statement. eslint: [`arrow-parens`](https://eslint.org/docs/rules/arrow-parens.html), [`arrow-body-style`](https://eslint.org/docs/rules/arrow-body-style.html)
 
     > Why? Syntactic sugar. It reads well when multiple functions are chained together.
 
@@ -1004,7 +1004,7 @@ Other Style Guides
     ```
 
   <a name="arrows--one-arg-parens"></a><a name="8.4"></a>
-  - [8.4](#arrows--one-arg-parens) If your function takes a single argument and doesn’t use braces, omit the parentheses. Otherwise, always include parentheses around arguments for clarity and consistency. Note: it is also acceptable to always use parentheses, in which case use the [“always” option](https://eslint.org/docs/rules/arrow-parens#always) for eslint or do not include [`disallowParenthesesAroundArrowParam`](http://jscs.info/rule/disallowParenthesesAroundArrowParam) for jscs. eslint: [`arrow-parens`](https://eslint.org/docs/rules/arrow-parens.html) jscs:  [`disallowParenthesesAroundArrowParam`](http://jscs.info/rule/disallowParenthesesAroundArrowParam)
+  - [8.4](#arrows--one-arg-parens) If your function takes a single argument and doesn’t use braces, omit the parentheses. Otherwise, always include parentheses around arguments for clarity and consistency. Note: it is also acceptable to always use parentheses, in which case use the [“always” option](https://eslint.org/docs/rules/arrow-parens#always) for eslint. eslint: [`arrow-parens`](https://eslint.org/docs/rules/arrow-parens.html)
 
     > Why? Less visual clutter.
 
@@ -1491,7 +1491,7 @@ Other Style Guides
 ## Properties
 
   <a name="properties--dot"></a><a name="12.1"></a>
-  - [12.1](#properties--dot) Use dot notation when accessing properties. eslint: [`dot-notation`](https://eslint.org/docs/rules/dot-notation.html) jscs: [`requireDotNotation`](http://jscs.info/rule/requireDotNotation)
+  - [12.1](#properties--dot) Use dot notation when accessing properties. eslint: [`dot-notation`](https://eslint.org/docs/rules/dot-notation.html)
 
     ```javascript
     const luke = {
@@ -1548,7 +1548,7 @@ Other Style Guides
     ```
 
   <a name="variables--one-const"></a><a name="13.2"></a>
-  - [13.2](#variables--one-const) Use one `const` or `let` declaration per variable. eslint: [`one-var`](https://eslint.org/docs/rules/one-var.html) jscs: [`disallowMultipleVarDecl`](http://jscs.info/rule/disallowMultipleVarDecl)
+  - [13.2](#variables--one-const) Use one `const` or `let` declaration per variable. eslint: [`one-var`](https://eslint.org/docs/rules/one-var.html)
 
     > Why? It’s easier to add new variable declarations this way, and you never have to worry about swapping out a `;` for a `,` or introducing punctuation-only diffs. You can also step through each declaration with the debugger, instead of jumping through all of them at once.
 
@@ -2032,7 +2032,7 @@ Other Style Guides
     ```
 
   <a name="blocks--cuddled-elses"></a><a name="16.2"></a>
-  - [16.2](#blocks--cuddled-elses) If you're using multi-line blocks with `if` and `else`, put `else` on the same line as your `if` block’s closing brace. eslint: [`brace-style`](https://eslint.org/docs/rules/brace-style.html) jscs:  [`disallowNewlineBeforeBlockStatements`](http://jscs.info/rule/disallowNewlineBeforeBlockStatements)
+  - [16.2](#blocks--cuddled-elses) If you're using multi-line blocks with `if` and `else`, put `else` on the same line as your `if` block’s closing brace. eslint: [`brace-style`](https://eslint.org/docs/rules/brace-style.html)
 
     ```javascript
     // bad
@@ -2335,7 +2335,7 @@ Other Style Guides
 ## Whitespace
 
   <a name="whitespace--spaces"></a><a name="18.1"></a>
-  - [19.1](#whitespace--spaces) Use soft tabs (space character) set to 2 spaces. eslint: [`indent`](https://eslint.org/docs/rules/indent.html) jscs: [`validateIndentation`](http://jscs.info/rule/validateIndentation)
+  - [19.1](#whitespace--spaces) Use soft tabs (space character) set to 2 spaces. eslint: [`indent`](https://eslint.org/docs/rules/indent.html)
 
     ```javascript
     // bad
@@ -2355,7 +2355,7 @@ Other Style Guides
     ```
 
   <a name="whitespace--before-blocks"></a><a name="18.2"></a>
-  - [19.2](#whitespace--before-blocks) Place 1 space before the leading brace. eslint: [`space-before-blocks`](https://eslint.org/docs/rules/space-before-blocks.html) jscs: [`requireSpaceBeforeBlockStatements`](http://jscs.info/rule/requireSpaceBeforeBlockStatements)
+  - [19.2](#whitespace--before-blocks) Place 1 space before the leading brace. eslint: [`space-before-blocks`](https://eslint.org/docs/rules/space-before-blocks.html)
 
     ```javascript
     // bad
@@ -2382,7 +2382,7 @@ Other Style Guides
     ```
 
   <a name="whitespace--around-keywords"></a><a name="18.3"></a>
-  - [19.3](#whitespace--around-keywords) Place 1 space before the opening parenthesis in control statements (`if`, `while` etc.). Place no space between the argument list and the function name in function calls and declarations. eslint: [`keyword-spacing`](https://eslint.org/docs/rules/keyword-spacing.html) jscs: [`requireSpaceAfterKeywords`](http://jscs.info/rule/requireSpaceAfterKeywords)
+  - [19.3](#whitespace--around-keywords) Place 1 space before the opening parenthesis in control statements (`if`, `while` etc.). Place no space between the argument list and the function name in function calls and declarations. eslint: [`keyword-spacing`](https://eslint.org/docs/rules/keyword-spacing.html)
 
     ```javascript
     // bad
@@ -2407,7 +2407,7 @@ Other Style Guides
     ```
 
   <a name="whitespace--infix-ops"></a><a name="18.4"></a>
-  - [19.4](#whitespace--infix-ops) Set off operators with spaces. eslint: [`space-infix-ops`](https://eslint.org/docs/rules/space-infix-ops.html) jscs: [`requireSpaceBeforeBinaryOperators`](http://jscs.info/rule/requireSpaceBeforeBinaryOperators), [`requireSpaceAfterBinaryOperators`](http://jscs.info/rule/requireSpaceAfterBinaryOperators)
+  - [19.4](#whitespace--infix-ops) Set off operators with spaces. eslint: [`space-infix-ops`](https://eslint.org/docs/rules/space-infix-ops.html)
 
     ```javascript
     // bad
@@ -2487,7 +2487,7 @@ Other Style Guides
     ```
 
   <a name="whitespace--after-blocks"></a><a name="18.7"></a>
-  - [19.7](#whitespace--after-blocks) Leave a blank line after blocks and before the next statement. jscs: [`requirePaddingNewLinesAfterBlocks`](http://jscs.info/rule/requirePaddingNewLinesAfterBlocks)
+  - [19.7](#whitespace--after-blocks) Leave a blank line after blocks and before the next statement.
 
     ```javascript
     // bad
@@ -2545,7 +2545,7 @@ Other Style Guides
     ```
 
   <a name="whitespace--padded-blocks"></a><a name="18.8"></a>
-  - [19.8](#whitespace--padded-blocks) Do not pad your blocks with blank lines. eslint: [`padded-blocks`](https://eslint.org/docs/rules/padded-blocks.html) jscs:  [`disallowPaddingNewlinesInBlocks`](http://jscs.info/rule/disallowPaddingNewlinesInBlocks)
+  - [19.8](#whitespace--padded-blocks) Do not pad your blocks with blank lines. eslint: [`padded-blocks`](https://eslint.org/docs/rules/padded-blocks.html)
 
     ```javascript
     // bad
@@ -2586,7 +2586,7 @@ Other Style Guides
     ```
 
   <a name="whitespace--in-parens"></a><a name="18.9"></a>
-  - [19.9](#whitespace--in-parens) Do not add spaces inside parentheses. eslint: [`space-in-parens`](https://eslint.org/docs/rules/space-in-parens.html) jscs: [`disallowSpacesInsideParentheses`](http://jscs.info/rule/disallowSpacesInsideParentheses)
+  - [19.9](#whitespace--in-parens) Do not add spaces inside parentheses. eslint: [`space-in-parens`](https://eslint.org/docs/rules/space-in-parens.html)
 
     ```javascript
     // bad
@@ -2611,7 +2611,7 @@ Other Style Guides
     ```
 
   <a name="whitespace--in-brackets"></a><a name="18.10"></a>
-  - [19.10](#whitespace--in-brackets) Do not add spaces inside brackets. eslint: [`array-bracket-spacing`](https://eslint.org/docs/rules/array-bracket-spacing.html) jscs: [`disallowSpacesInsideArrayBrackets`](http://jscs.info/rule/disallowSpacesInsideArrayBrackets)
+  - [19.10](#whitespace--in-brackets) Do not add spaces inside brackets. eslint: [`array-bracket-spacing`](https://eslint.org/docs/rules/array-bracket-spacing.html)
 
     ```javascript
     // bad
@@ -2624,7 +2624,7 @@ Other Style Guides
     ```
 
   <a name="whitespace--in-braces"></a><a name="18.11"></a>
-  - [19.11](#whitespace--in-braces) Add spaces inside curly braces. eslint: [`object-curly-spacing`](https://eslint.org/docs/rules/object-curly-spacing.html) jscs: [`requireSpacesInsideObjectBrackets`](http://jscs.info/rule/requireSpacesInsideObjectBrackets)
+  - [19.11](#whitespace--in-braces) Add spaces inside curly braces. eslint: [`object-curly-spacing`](https://eslint.org/docs/rules/object-curly-spacing.html)
 
     ```javascript
     // bad
@@ -2635,7 +2635,7 @@ Other Style Guides
     ```
 
   <a name="whitespace--max-len"></a><a name="18.12"></a>
-  - [19.12](#whitespace--max-len) Avoid having lines of code that are longer than 100 characters (including whitespace). Note: per [above](#strings--line-length), long strings are exempt from this rule, and should not be broken up. eslint: [`max-len`](https://eslint.org/docs/rules/max-len.html) jscs: [`maximumLineLength`](http://jscs.info/rule/maximumLineLength)
+  - [19.12](#whitespace--max-len) Avoid having lines of code that are longer than 100 characters (including whitespace). Note: per [above](#strings--line-length), long strings are exempt from this rule, and should not be broken up. eslint: [`max-len`](https://eslint.org/docs/rules/max-len.html)
 
     > Why? This ensures readability and maintainability.
 
@@ -2669,7 +2669,7 @@ Other Style Guides
 ## Commas
 
   <a name="commas--leading-trailing"></a><a name="19.1"></a>
-  - [20.1](#commas--leading-trailing) Leading commas: **Nope.** eslint: [`comma-style`](https://eslint.org/docs/rules/comma-style.html) jscs: [`requireCommaBeforeLineBreak`](http://jscs.info/rule/requireCommaBeforeLineBreak)
+  - [20.1](#commas--leading-trailing) Leading commas: **Nope.** eslint: [`comma-style`](https://eslint.org/docs/rules/comma-style.html)
 
     ```javascript
     // bad
@@ -2704,7 +2704,7 @@ Other Style Guides
     ```
 
   <a name="commas--dangling"></a><a name="19.2"></a>
-  - [20.2](#commas--dangling) Additional trailing comma: **Yup.** eslint: [`comma-dangle`](https://eslint.org/docs/rules/comma-dangle.html) jscs: [`requireTrailingComma`](http://jscs.info/rule/requireTrailingComma)
+  - [20.2](#commas--dangling) Additional trailing comma: **Yup.** eslint: [`comma-dangle`](https://eslint.org/docs/rules/comma-dangle.html)
 
     > Why? This leads to cleaner git diffs. Also, transpilers like Babel will remove the additional trailing comma in the transpiled code which means you don’t have to worry about the [trailing comma problem](https://github.com/airbnb/javascript/blob/es5-deprecated/es5/README.md#commas) in legacy browsers.
 
@@ -2804,7 +2804,7 @@ Other Style Guides
 ## Semicolons
 
   <a name="semicolons--required"></a><a name="20.1"></a>
-  - [21.1](#semicolons--required) **Yup.** eslint: [`semi`](https://eslint.org/docs/rules/semi.html) jscs: [`requireSemicolons`](http://jscs.info/rule/requireSemicolons)
+  - [21.1](#semicolons--required) **Yup.** eslint: [`semi`](https://eslint.org/docs/rules/semi.html)
 
     > Why? When JavaScript encounters a line break without a semicolon, it uses a set of rules called [Automatic Semicolon Insertion](https://tc39.github.io/ecma262/#sec-automatic-semicolon-insertion) to determine whether or not it should regard that line break as the end of a statement, and (as the name implies) place a semicolon into your code before the line break if it thinks so. ASI contains a few eccentric behaviors, though, and your code will break if JavaScript misinterprets your line break. These rules will become more complicated as new features become a part of JavaScript. Explicitly terminating your statements and configuring your linter to catch missing semicolons will help prevent you from encountering issues.
 
@@ -2958,7 +2958,7 @@ Other Style Guides
     ```
 
   <a name="naming--camelCase"></a><a name="22.2"></a>
-  - [23.2](#naming--camelCase) Use camelCase when naming objects, functions, and instances. eslint: [`camelcase`](https://eslint.org/docs/rules/camelcase.html) jscs: [`requireCamelCaseOrUpperCaseIdentifiers`](http://jscs.info/rule/requireCamelCaseOrUpperCaseIdentifiers)
+  - [23.2](#naming--camelCase) Use camelCase when naming objects, functions, and instances. eslint: [`camelcase`](https://eslint.org/docs/rules/camelcase.html)
 
     ```javascript
     // bad
@@ -2972,7 +2972,7 @@ Other Style Guides
     ```
 
   <a name="naming--PascalCase"></a><a name="22.3"></a>
-  - [23.3](#naming--PascalCase) Use PascalCase only when naming constructors or classes. eslint: [`new-cap`](https://eslint.org/docs/rules/new-cap.html) jscs: [`requireCapitalizedConstructors`](http://jscs.info/rule/requireCapitalizedConstructors)
+  - [23.3](#naming--PascalCase) Use PascalCase only when naming constructors or classes. eslint: [`new-cap`](https://eslint.org/docs/rules/new-cap.html)
 
     ```javascript
     // bad
@@ -2997,7 +2997,7 @@ Other Style Guides
     ```
 
   <a name="naming--leading-underscore"></a><a name="22.4"></a>
-  - [23.4](#naming--leading-underscore) Do not use trailing or leading underscores. eslint: [`no-underscore-dangle`](https://eslint.org/docs/rules/no-underscore-dangle.html) jscs: [`disallowDanglingUnderscores`](http://jscs.info/rule/disallowDanglingUnderscores)
+  - [23.4](#naming--leading-underscore) Do not use trailing or leading underscores. eslint: [`no-underscore-dangle`](https://eslint.org/docs/rules/no-underscore-dangle.html)
 
     > Why? JavaScript does not have the concept of privacy in terms of properties or methods. Although a leading underscore is a common convention to mean “private”, in fact, these properties are fully public, and as such, are part of your public API contract. This convention might lead developers to wrongly think that a change won’t count as breaking, or that tests aren’t needed. tl;dr: if you want something to be “private”, it must not be observably present.
 
@@ -3017,7 +3017,7 @@ Other Style Guides
     ```
 
   <a name="naming--self-this"></a><a name="22.5"></a>
-  - [23.5](#naming--self-this) Don’t save references to `this`. Use arrow functions or [Function#bind](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/bind). jscs: [`disallowNodeTypes`](http://jscs.info/rule/disallowNodeTypes)
+  - [23.5](#naming--self-this) Don’t save references to `this`. Use arrow functions or [Function#bind](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/bind).
 
     ```javascript
     // bad
@@ -3282,7 +3282,7 @@ Other Style Guides
 ## jQuery
 
   <a name="jquery--dollar-prefix"></a><a name="25.1"></a>
-  - [26.1](#jquery--dollar-prefix) Prefix jQuery object variables with a `$`. jscs: [`requireDollarBeforejQueryAssignment`](http://jscs.info/rule/requireDollarBeforejQueryAssignment)
+  - [26.1](#jquery--dollar-prefix) Prefix jQuery object variables with a `$`.
 
     ```javascript
     // bad
@@ -3477,7 +3477,6 @@ Other Style Guides
   - Code Style Linters
     - [ESlint](https://eslint.org/) - [Airbnb Style .eslintrc](https://github.com/airbnb/javascript/blob/master/linters/.eslintrc)
     - [JSHint](http://jshint.com/) - [Airbnb Style .jshintrc](https://github.com/airbnb/javascript/blob/master/linters/.jshintrc)
-    - [JSCS](https://github.com/jscs-dev/node-jscs) - [Airbnb Style Preset](https://github.com/jscs-dev/node-jscs/blob/master/presets/airbnb.json) (Deprecated, please use [ESlint](https://github.com/airbnb/javascript/tree/master/packages/eslint-config-airbnb-base))
   - Neutrino preset - [neutrino-preset-airbnb-base](https://neutrino.js.org/presets/neutrino-preset-airbnb-base/)
 
 **Other Style Guides**

From 308fb24815a62c98aa4e89aae1bad0744dab3a92 Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Fri, 13 Apr 2018 13:43:43 -0700
Subject: [PATCH 1228/1591] [eslint config] [*] [deps] update
 `eslint-plugin-import`

---
 packages/eslint-config-airbnb-base/package.json | 4 ++--
 packages/eslint-config-airbnb/package.json      | 4 ++--
 2 files changed, 4 insertions(+), 4 deletions(-)

diff --git a/packages/eslint-config-airbnb-base/package.json b/packages/eslint-config-airbnb-base/package.json
index 2c3d49bd21..7739f54005 100644
--- a/packages/eslint-config-airbnb-base/package.json
+++ b/packages/eslint-config-airbnb-base/package.json
@@ -54,14 +54,14 @@
     "editorconfig-tools": "^0.1.1",
     "eslint": "^4.19.1",
     "eslint-find-rules": "^3.2.2",
-    "eslint-plugin-import": "^2.10.0",
+    "eslint-plugin-import": "^2.11.0",
     "in-publish": "^2.0.0",
     "safe-publish-latest": "^1.1.1",
     "tape": "^4.9.0"
   },
   "peerDependencies": {
     "eslint": "^4.19.1",
-    "eslint-plugin-import": "^2.10.0"
+    "eslint-plugin-import": "^2.11.0"
   },
   "engines": {
     "node": ">= 4"
diff --git a/packages/eslint-config-airbnb/package.json b/packages/eslint-config-airbnb/package.json
index dfaadad2ad..bc80fdd060 100644
--- a/packages/eslint-config-airbnb/package.json
+++ b/packages/eslint-config-airbnb/package.json
@@ -59,7 +59,7 @@
     "editorconfig-tools": "^0.1.1",
     "eslint": "^4.19.1",
     "eslint-find-rules": "^3.2.2",
-    "eslint-plugin-import": "^2.10.0",
+    "eslint-plugin-import": "^2.11.0",
     "eslint-plugin-jsx-a11y": "^6.0.3",
     "eslint-plugin-react": "^7.7.0",
     "in-publish": "^2.0.0",
@@ -69,7 +69,7 @@
   },
   "peerDependencies": {
     "eslint": "^4.19.1",
-    "eslint-plugin-import": "^2.10.0",
+    "eslint-plugin-import": "^2.11.0",
     "eslint-plugin-jsx-a11y": "^6.0.3",
     "eslint-plugin-react": "^7.7.0"
   },

From 87f97e042ddb94d87950be7c483b4aa4e391e2c2 Mon Sep 17 00:00:00 2001
From: Joe Lencioni <joe.lencioni@gmail.com>
Date: Wed, 18 Apr 2018 11:28:06 -0700
Subject: [PATCH 1229/1591] Replace flag images with emoji

We can use emoji for most of these flags, which should make
them look better on higher resolution displays and improve the
loading performance of the style guide a little.

The only flag we have here that does not have a good emoji yet
is the flag of Catalonia, which I left as-is for now.

https://emojipedia.org/flag-for-catalonia-esct/
---
 README.md | 30 +++++++++++++++---------------
 1 file changed, 15 insertions(+), 15 deletions(-)

diff --git a/README.md b/README.md
index ed54520555..3ca74e2606 100644
--- a/README.md
+++ b/README.md
@@ -3640,22 +3640,22 @@ Other Style Guides
 
   This style guide is also available in other languages:
 
-  - ![br](https://raw.githubusercontent.com/gosquared/flags/master/flags/flags/shiny/24/Brazil.png) **Brazilian Portuguese**: [armoucar/javascript-style-guide](https://github.com/armoucar/javascript-style-guide)
-  - ![bg](https://raw.githubusercontent.com/gosquared/flags/master/flags/flags/shiny/24/Bulgaria.png) **Bulgarian**: [borislavvv/javascript](https://github.com/borislavvv/javascript)
+  - 🇧🇷 **Brazilian Portuguese**: [armoucar/javascript-style-guide](https://github.com/armoucar/javascript-style-guide)
+  - 🇧🇬 **Bulgarian**: [borislavvv/javascript](https://github.com/borislavvv/javascript)
   - ![ca](https://raw.githubusercontent.com/fpmweb/javascript-style-guide/master/img/catala.png) **Catalan**: [fpmweb/javascript-style-guide](https://github.com/fpmweb/javascript-style-guide)
-  - ![cn](https://raw.githubusercontent.com/gosquared/flags/master/flags/flags/shiny/24/China.png) **Chinese (Simplified)**: [yuche/javascript](https://github.com/yuche/javascript)
-  - ![tw](https://raw.githubusercontent.com/gosquared/flags/master/flags/flags/shiny/24/Taiwan.png) **Chinese (Traditional)**: [jigsawye/javascript](https://github.com/jigsawye/javascript)
-  - ![fr](https://raw.githubusercontent.com/gosquared/flags/master/flags/flags/shiny/24/France.png) **French**: [nmussy/javascript-style-guide](https://github.com/nmussy/javascript-style-guide)
-  - ![de](https://raw.githubusercontent.com/gosquared/flags/master/flags/flags/shiny/24/Germany.png) **German**: [timofurrer/javascript-style-guide](https://github.com/timofurrer/javascript-style-guide)
-  - ![it](https://raw.githubusercontent.com/gosquared/flags/master/flags/flags/shiny/24/Italy.png) **Italian**: [sinkswim/javascript-style-guide](https://github.com/sinkswim/javascript-style-guide)
-  - ![jp](https://raw.githubusercontent.com/gosquared/flags/master/flags/flags/shiny/24/Japan.png) **Japanese**: [mitsuruog/javascript-style-guide](https://github.com/mitsuruog/javascript-style-guide)
-  - ![kr](https://raw.githubusercontent.com/gosquared/flags/master/flags/flags/shiny/24/South-Korea.png) **Korean**: [ParkSB/javascript-style-guide](https://github.com/ParkSB/javascript-style-guide)
-  - ![ru](https://raw.githubusercontent.com/gosquared/flags/master/flags/flags/shiny/24/Russia.png) **Russian**: [leonidlebedev/javascript-airbnb](https://github.com/leonidlebedev/javascript-airbnb)
-  - ![es](https://raw.githubusercontent.com/gosquared/flags/master/flags/flags/shiny/24/Spain.png) **Spanish**: [paolocarrasco/javascript-style-guide](https://github.com/paolocarrasco/javascript-style-guide)
-  - ![th](https://raw.githubusercontent.com/gosquared/flags/master/flags/flags/shiny/24/Thailand.png) **Thai**: [lvarayut/javascript-style-guide](https://github.com/lvarayut/javascript-style-guide)
-  - ![tr](https://raw.githubusercontent.com/gosquared/flags/master/flags/flags/shiny/24/Turkey.png) **Turkish**: [eraycetinay/javascript](https://github.com/eraycetinay/javascript)
-  - ![ua](https://raw.githubusercontent.com/gosquared/flags/master/flags/flags/shiny/24/Ukraine.png) **Ukrainian**: [ivanzusko/javascript](https://github.com/ivanzusko/javascript)
-  - ![vn](https://raw.githubusercontent.com/gosquared/flags/master/flags/flags/shiny/24/Vietnam.png) **Vietnam**: [hngiang/javascript-style-guide](https://github.com/hngiang/javascript-style-guide)
+  - 🇨🇳 **Chinese (Simplified)**: [yuche/javascript](https://github.com/yuche/javascript)
+  - 🇹🇼 **Chinese (Traditional)**: [jigsawye/javascript](https://github.com/jigsawye/javascript)
+  - 🇫🇷 **French**: [nmussy/javascript-style-guide](https://github.com/nmussy/javascript-style-guide)
+  - 🇩🇪 **German**: [timofurrer/javascript-style-guide](https://github.com/timofurrer/javascript-style-guide)
+  - 🇮🇹 **Italian**: [sinkswim/javascript-style-guide](https://github.com/sinkswim/javascript-style-guide)
+  - 🇯🇵 **Japanese**: [mitsuruog/javascript-style-guide](https://github.com/mitsuruog/javascript-style-guide)
+  - 🇰🇷 **Korean**: [ParkSB/javascript-style-guide](https://github.com/ParkSB/javascript-style-guide)
+  - 🇷🇺 **Russian**: [leonidlebedev/javascript-airbnb](https://github.com/leonidlebedev/javascript-airbnb)
+  - 🇪🇸 **Spanish**: [paolocarrasco/javascript-style-guide](https://github.com/paolocarrasco/javascript-style-guide)
+  - 🇹🇭 **Thai**: [lvarayut/javascript-style-guide](https://github.com/lvarayut/javascript-style-guide)
+  - 🇹🇷 **Turkish**: [eraycetinay/javascript](https://github.com/eraycetinay/javascript)
+  - 🇺🇦 **Ukrainian**: [ivanzusko/javascript](https://github.com/ivanzusko/javascript)
+  - 🇻🇳 **Vietnam**: [hngiang/javascript-style-guide](https://github.com/hngiang/javascript-style-guide)
 
 ## The JavaScript Style Guide Guide
 

From b56875bee21eb8d87213c787dc105c288066f43e Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Fri, 20 Apr 2018 14:00:50 -0700
Subject: [PATCH 1230/1591] [eslint config] [base] [patch]
 `function-paren-newline`: change to "consistent"

---
 packages/eslint-config-airbnb-base/rules/style.js | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/packages/eslint-config-airbnb-base/rules/style.js b/packages/eslint-config-airbnb-base/rules/style.js
index 12cd60d509..0f58957211 100644
--- a/packages/eslint-config-airbnb-base/rules/style.js
+++ b/packages/eslint-config-airbnb-base/rules/style.js
@@ -98,7 +98,7 @@ module.exports = {
 
     // enforce consistent line breaks inside function parentheses
     // https://eslint.org/docs/rules/function-paren-newline
-    'function-paren-newline': ['error', 'multiline'],
+    'function-paren-newline': ['error', 'consistent'],
 
     // Blacklist certain identifiers to prevent them being used
     // https://eslint.org/docs/rules/id-blacklist

From fd0834764c8b991a807e6366181c1a3eddba240d Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Fri, 20 Apr 2018 15:19:14 -0700
Subject: [PATCH 1231/1591] [eslint config] [base] fix tests

---
 packages/eslint-config-airbnb-base/test/test-base.js | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/packages/eslint-config-airbnb-base/test/test-base.js b/packages/eslint-config-airbnb-base/test/test-base.js
index f907581502..07d17b1027 100644
--- a/packages/eslint-config-airbnb-base/test/test-base.js
+++ b/packages/eslint-config-airbnb-base/test/test-base.js
@@ -11,9 +11,9 @@ fs.readdirSync(path.join(__dirname, '../rules')).forEach((name) => {
   files[name] = require(`../rules/${name}`); // eslint-disable-line global-require
 });
 
-Object.keys(files).forEach(( // eslint-disable-line function-paren-newline
+Object.keys(files).forEach((
   name, // trailing function comma is to test parsing
-) => { // eslint-disable-line function-paren-newline
+) => {
   const config = files[name];
 
   test(`${name}: does not reference react`, (t) => {

From 5705b8ae6b22305cc9dca048e0a4b14db7ce6934 Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Sun, 22 Apr 2018 14:48:50 -0700
Subject: [PATCH 1232/1591] Revert "Replace flag images with emoji"

This reverts commit 87f97e042ddb94d87950be7c483b4aa4e391e2c2.

Closes #1789.
---
 README.md | 30 +++++++++++++++---------------
 1 file changed, 15 insertions(+), 15 deletions(-)

diff --git a/README.md b/README.md
index 3ca74e2606..ed54520555 100644
--- a/README.md
+++ b/README.md
@@ -3640,22 +3640,22 @@ Other Style Guides
 
   This style guide is also available in other languages:
 
-  - 🇧🇷 **Brazilian Portuguese**: [armoucar/javascript-style-guide](https://github.com/armoucar/javascript-style-guide)
-  - 🇧🇬 **Bulgarian**: [borislavvv/javascript](https://github.com/borislavvv/javascript)
+  - ![br](https://raw.githubusercontent.com/gosquared/flags/master/flags/flags/shiny/24/Brazil.png) **Brazilian Portuguese**: [armoucar/javascript-style-guide](https://github.com/armoucar/javascript-style-guide)
+  - ![bg](https://raw.githubusercontent.com/gosquared/flags/master/flags/flags/shiny/24/Bulgaria.png) **Bulgarian**: [borislavvv/javascript](https://github.com/borislavvv/javascript)
   - ![ca](https://raw.githubusercontent.com/fpmweb/javascript-style-guide/master/img/catala.png) **Catalan**: [fpmweb/javascript-style-guide](https://github.com/fpmweb/javascript-style-guide)
-  - 🇨🇳 **Chinese (Simplified)**: [yuche/javascript](https://github.com/yuche/javascript)
-  - 🇹🇼 **Chinese (Traditional)**: [jigsawye/javascript](https://github.com/jigsawye/javascript)
-  - 🇫🇷 **French**: [nmussy/javascript-style-guide](https://github.com/nmussy/javascript-style-guide)
-  - 🇩🇪 **German**: [timofurrer/javascript-style-guide](https://github.com/timofurrer/javascript-style-guide)
-  - 🇮🇹 **Italian**: [sinkswim/javascript-style-guide](https://github.com/sinkswim/javascript-style-guide)
-  - 🇯🇵 **Japanese**: [mitsuruog/javascript-style-guide](https://github.com/mitsuruog/javascript-style-guide)
-  - 🇰🇷 **Korean**: [ParkSB/javascript-style-guide](https://github.com/ParkSB/javascript-style-guide)
-  - 🇷🇺 **Russian**: [leonidlebedev/javascript-airbnb](https://github.com/leonidlebedev/javascript-airbnb)
-  - 🇪🇸 **Spanish**: [paolocarrasco/javascript-style-guide](https://github.com/paolocarrasco/javascript-style-guide)
-  - 🇹🇭 **Thai**: [lvarayut/javascript-style-guide](https://github.com/lvarayut/javascript-style-guide)
-  - 🇹🇷 **Turkish**: [eraycetinay/javascript](https://github.com/eraycetinay/javascript)
-  - 🇺🇦 **Ukrainian**: [ivanzusko/javascript](https://github.com/ivanzusko/javascript)
-  - 🇻🇳 **Vietnam**: [hngiang/javascript-style-guide](https://github.com/hngiang/javascript-style-guide)
+  - ![cn](https://raw.githubusercontent.com/gosquared/flags/master/flags/flags/shiny/24/China.png) **Chinese (Simplified)**: [yuche/javascript](https://github.com/yuche/javascript)
+  - ![tw](https://raw.githubusercontent.com/gosquared/flags/master/flags/flags/shiny/24/Taiwan.png) **Chinese (Traditional)**: [jigsawye/javascript](https://github.com/jigsawye/javascript)
+  - ![fr](https://raw.githubusercontent.com/gosquared/flags/master/flags/flags/shiny/24/France.png) **French**: [nmussy/javascript-style-guide](https://github.com/nmussy/javascript-style-guide)
+  - ![de](https://raw.githubusercontent.com/gosquared/flags/master/flags/flags/shiny/24/Germany.png) **German**: [timofurrer/javascript-style-guide](https://github.com/timofurrer/javascript-style-guide)
+  - ![it](https://raw.githubusercontent.com/gosquared/flags/master/flags/flags/shiny/24/Italy.png) **Italian**: [sinkswim/javascript-style-guide](https://github.com/sinkswim/javascript-style-guide)
+  - ![jp](https://raw.githubusercontent.com/gosquared/flags/master/flags/flags/shiny/24/Japan.png) **Japanese**: [mitsuruog/javascript-style-guide](https://github.com/mitsuruog/javascript-style-guide)
+  - ![kr](https://raw.githubusercontent.com/gosquared/flags/master/flags/flags/shiny/24/South-Korea.png) **Korean**: [ParkSB/javascript-style-guide](https://github.com/ParkSB/javascript-style-guide)
+  - ![ru](https://raw.githubusercontent.com/gosquared/flags/master/flags/flags/shiny/24/Russia.png) **Russian**: [leonidlebedev/javascript-airbnb](https://github.com/leonidlebedev/javascript-airbnb)
+  - ![es](https://raw.githubusercontent.com/gosquared/flags/master/flags/flags/shiny/24/Spain.png) **Spanish**: [paolocarrasco/javascript-style-guide](https://github.com/paolocarrasco/javascript-style-guide)
+  - ![th](https://raw.githubusercontent.com/gosquared/flags/master/flags/flags/shiny/24/Thailand.png) **Thai**: [lvarayut/javascript-style-guide](https://github.com/lvarayut/javascript-style-guide)
+  - ![tr](https://raw.githubusercontent.com/gosquared/flags/master/flags/flags/shiny/24/Turkey.png) **Turkish**: [eraycetinay/javascript](https://github.com/eraycetinay/javascript)
+  - ![ua](https://raw.githubusercontent.com/gosquared/flags/master/flags/flags/shiny/24/Ukraine.png) **Ukrainian**: [ivanzusko/javascript](https://github.com/ivanzusko/javascript)
+  - ![vn](https://raw.githubusercontent.com/gosquared/flags/master/flags/flags/shiny/24/Vietnam.png) **Vietnam**: [hngiang/javascript-style-guide](https://github.com/hngiang/javascript-style-guide)
 
 ## The JavaScript Style Guide Guide
 

From 2653730fee20e46a1fc6e6c9fd512329d8719fb0 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Nguy=E1=BB=85n=20Ti=E1=BA=BFn=20Minh?=
 <tienminh.uet@gmail.com>
Date: Sat, 21 Apr 2018 13:51:56 +0700
Subject: [PATCH 1233/1591] [react] add vietnamese

---
 react/README.md | 1 +
 1 file changed, 1 insertion(+)

diff --git a/react/README.md b/react/README.md
index b89bad0710..1af23d4d1f 100644
--- a/react/README.md
+++ b/react/README.md
@@ -693,5 +693,6 @@ This style guide is mostly based on the standards that are currently prevalent i
   - ![th](https://raw.githubusercontent.com/gosquared/flags/master/flags/flags/shiny/24/Thailand.png) **Thai**: [lvarayut/javascript-style-guide](https://github.com/lvarayut/javascript-style-guide/tree/master/react)
   - ![tr](https://raw.githubusercontent.com/gosquared/flags/master/flags/flags/shiny/24/Turkey.png) **Turkish**: [alioguzhan/react-style-guide](https://github.com/alioguzhan/react-style-guide)
   - ![ua](https://raw.githubusercontent.com/gosquared/flags/master/flags/flags/shiny/24/Ukraine.png) **Ukrainian**: [ivanzusko/javascript](https://github.com/ivanzusko/javascript/tree/master/react)
+  - ![vn](https://raw.githubusercontent.com/gosquared/flags/master/flags/flags/shiny/24/Vietnam.png) **Vietnam**: [uetcodecamp/jsx-style-guide](https://github.com/UETCodeCamp/jsx-style-guide)
 
 **[⬆ back to top](#table-of-contents)**

From 22f01558a08eed9f32ad3b6e963ac71bebd37433 Mon Sep 17 00:00:00 2001
From: Feross Aboukhadijeh <feross@feross.org>
Date: Wed, 25 Apr 2018 20:28:41 -0700
Subject: [PATCH 1234/1591] Add StandardJS to "Other Style Guides" list
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

StandardJS is one of the top style guides, though like the Google and jQuery styles, it's less popular than the airbnb style. 😀
---
 README.md | 1 +
 1 file changed, 1 insertion(+)

diff --git a/README.md b/README.md
index ed54520555..855be914f9 100644
--- a/README.md
+++ b/README.md
@@ -3484,6 +3484,7 @@ Other Style Guides
   - [Google JavaScript Style Guide](https://google.github.io/styleguide/javascriptguide.xml)
   - [jQuery Core Style Guidelines](https://contribute.jquery.org/style-guide/js/)
   - [Principles of Writing Consistent, Idiomatic JavaScript](https://github.com/rwaldron/idiomatic.js)
+  - [StandardJS](https://standardjs.com)
 
 **Other Styles**
 

From 8c83d03a20d166aba0acefa1358efe6043eacc3e Mon Sep 17 00:00:00 2001
From: Joe Lencioni <joe.lencioni@gmail.com>
Date: Thu, 15 Feb 2018 11:58:17 -0800
Subject: [PATCH 1235/1591] [eslint config] [base] [patch] Allow
 devDependencies for foo_spec.js naming style

Some projects name test files like `foo_spec.js` instead of `foo.spec.js`.
---
 packages/eslint-config-airbnb-base/rules/imports.js | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/packages/eslint-config-airbnb-base/rules/imports.js b/packages/eslint-config-airbnb-base/rules/imports.js
index 04455c97fb..46c6135093 100644
--- a/packages/eslint-config-airbnb-base/rules/imports.js
+++ b/packages/eslint-config-airbnb-base/rules/imports.js
@@ -77,7 +77,7 @@ module.exports = {
         '**/__mocks__/**', // jest pattern
         'test.{js,jsx}', // repos with a single test file
         'test-*.{js,jsx}', // repos with multiple top-level test files
-        '**/*.{test,spec}.{js,jsx}', // tests where the extension denotes that it is a test
+        '**/*{.,_}{test,spec}.{js,jsx}', // tests where the extension or filename suffix denotes that it is a test
         '**/jest.config.js', // jest config
         '**/webpack.config.js', // webpack config
         '**/webpack.config.*.js', // webpack config

From 2d9779907f9760472e0318ad11b01f67a9f5dc7e Mon Sep 17 00:00:00 2001
From: Thomas Grainger <tagrain@gmail.com>
Date: Mon, 30 Apr 2018 09:30:38 +0100
Subject: [PATCH 1236/1591] [eslint config] [base] [minor] only allow one
 newline at the end

---
 packages/eslint-config-airbnb-base/rules/style.js | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/packages/eslint-config-airbnb-base/rules/style.js b/packages/eslint-config-airbnb-base/rules/style.js
index 0f58957211..ca8fc07ae6 100644
--- a/packages/eslint-config-airbnb-base/rules/style.js
+++ b/packages/eslint-config-airbnb-base/rules/style.js
@@ -302,7 +302,7 @@ module.exports = {
     'no-multi-assign': ['error'],
 
     // disallow multiple empty lines and only one newline at the end
-    'no-multiple-empty-lines': ['error', { max: 2, maxEOF: 1 }],
+    'no-multiple-empty-lines': ['error', { max: 2, maxEOF: 0 }],
 
     // disallow negated conditions
     // https://eslint.org/docs/rules/no-negated-condition

From edf942eeb6bee3ae538e1484861ea0721fad4856 Mon Sep 17 00:00:00 2001
From: Daniel McNally <mcnallydp@gmail.com>
Date: Wed, 2 May 2018 01:01:19 -0400
Subject: [PATCH 1237/1591] [guide] Add descriptions of enforced rules

This commit adds brief descriptions and examples of rules enforced by the guide that were not previously mentioned in the README.
---
 README.md | 102 ++++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 102 insertions(+)

diff --git a/README.md b/README.md
index 855be914f9..8a2cb4b6fc 100644
--- a/README.md
+++ b/README.md
@@ -1053,6 +1053,24 @@ Other Style Guides
     };
     ```
 
+  - [8.6](#whitespace--implicit-arrow-linebreak) Enforce the location of arrow function bodies with implicit returns. eslint: [`implicit-arrow-linebreak`](https://eslint.org/docs/rules/implicit-arrow-linebreak)
+
+    ```javascript
+    // bad
+    (foo) =>
+      bar;
+
+    (foo) =>
+      (bar);
+
+    // good
+    (foo) => bar;
+    (foo) => (bar);
+    (foo) => (
+       bar
+    )
+    ```
+
 **[⬆ back to top](#table-of-contents)**
 
 ## Classes & Constructors
@@ -2664,6 +2682,90 @@ Other Style Guides
       .fail(() => console.log('You have failed this city.'));
     ```
 
+  - [19.13](#whitespace--block-spacing) Require consistent spacing inside an open block token and the next token on the same line. This rule also enforces consistent spacing inside a close block token and previous token on the same line. eslint: [`block-spacing`](https://eslint.org/docs/rules/block-spacing)
+
+    ```javascript
+    // bad
+    function foo() {return true;}
+    if (foo) { bar = 0;}
+
+    // good
+    function foo() { return true; }
+    if (foo) { bar = 0; }
+    ```
+
+  - [19.14](#whitespace--comma-spacing) Avoid spaces before commas and require a space after commas. eslint: [`comma-spacing`](https://eslint.org/docs/rules/comma-spacing)
+
+    ```javascript
+    // bad
+    var foo = 1,bar = 2;
+    var arr = [1 , 2];
+
+    // good
+    var foo = 1, bar = 2;
+    var arr = [1, 2];
+    ```
+
+  - [19.15](#whitespace--computed-property-spacing) Avoid spaces before commas and require a space after commas. eslint: [`computed-property-spacing`](https://eslint.org/docs/rules/computed-property-spacing)
+
+    ```javascript
+    // bad
+    obj[foo ]
+    obj[ 'foo']
+    var x = {[ b ]: a}
+    obj[foo[ bar ]]
+
+    // good
+    obj[foo]
+    obj['foo']
+    var x = { [b]: a }
+    obj[foo[bar]]
+    ```
+
+  - [19.16](#whitespace--func-call-spacing) Enforce spacing between functions and their invocations. eslint: [`func-call-spacing`](https://eslint.org/docs/rules/func-call-spacing)
+
+    ```javascript
+    // bad
+    func ();
+
+    func
+    ();
+
+    // good
+    func();
+    ```
+
+  - [19.17](#whitespace--key-spacing) Enforce spacing between keys and values in object literal properties. eslint: [`key-spacing`](https://eslint.org/docs/rules/key-spacing)
+
+    ```javascript
+    // bad
+    var obj = { "foo" : 42 };
+    var obj2 = { "foo":42 };
+
+    // good
+    var obj = { "foo": 42 };
+    ```
+
+  - [19.18](#whitespace--no-trailing-spaces) Avoid trailing spaces at the end of lines. eslint: [`no-trailing-spaces`](https://eslint.org/docs/rules/no-trailing-spaces)
+
+  - [19.19](#whitespace--no-multiple-empty-lines) Avoid multiple empty lines and only allow one newline at the end of files. eslint: [`no-multiple-empty-lines`](https://eslint.org/docs/rules/no-multiple-empty-lines)
+
+    <!-- markdownlint-disable MD012 -->
+    ```javascript
+    // bad
+    var x = 1;
+
+
+
+    var y = 2;
+
+    // good
+    var x = 1;
+
+    var y = 2;
+    ```
+    <!-- markdownlint-enable MD012 -->
+
 **[⬆ back to top](#table-of-contents)**
 
 ## Commas

From 71e54f2af8e17c6147f1e8f7baafdbcf86d1d2d9 Mon Sep 17 00:00:00 2001
From: Vse Mozhet Byt <vsemozhetbyt@gmail.com>
Date: Fri, 4 May 2018 11:11:55 +0300
Subject: [PATCH 1238/1591] doc: fix some nits in README.md

* Add missing anchors for section references.
* Correct a rule description.
---
 README.md | 10 +++++++++-
 1 file changed, 9 insertions(+), 1 deletion(-)

diff --git a/README.md b/README.md
index 8a2cb4b6fc..8ef84ade85 100644
--- a/README.md
+++ b/README.md
@@ -1053,6 +1053,7 @@ Other Style Guides
     };
     ```
 
+  <a name="whitespace--implicit-arrow-linebreak"></a>
   - [8.6](#whitespace--implicit-arrow-linebreak) Enforce the location of arrow function bodies with implicit returns. eslint: [`implicit-arrow-linebreak`](https://eslint.org/docs/rules/implicit-arrow-linebreak)
 
     ```javascript
@@ -2682,6 +2683,7 @@ Other Style Guides
       .fail(() => console.log('You have failed this city.'));
     ```
 
+  <a name="whitespace--block-spacing"></a>
   - [19.13](#whitespace--block-spacing) Require consistent spacing inside an open block token and the next token on the same line. This rule also enforces consistent spacing inside a close block token and previous token on the same line. eslint: [`block-spacing`](https://eslint.org/docs/rules/block-spacing)
 
     ```javascript
@@ -2694,6 +2696,7 @@ Other Style Guides
     if (foo) { bar = 0; }
     ```
 
+  <a name="whitespace--comma-spacing"></a>
   - [19.14](#whitespace--comma-spacing) Avoid spaces before commas and require a space after commas. eslint: [`comma-spacing`](https://eslint.org/docs/rules/comma-spacing)
 
     ```javascript
@@ -2706,7 +2709,8 @@ Other Style Guides
     var arr = [1, 2];
     ```
 
-  - [19.15](#whitespace--computed-property-spacing) Avoid spaces before commas and require a space after commas. eslint: [`computed-property-spacing`](https://eslint.org/docs/rules/computed-property-spacing)
+  <a name="whitespace--computed-property-spacing"></a>
+  - [19.15](#whitespace--computed-property-spacing) Enforce spacing inside of computed properties. eslint: [`computed-property-spacing`](https://eslint.org/docs/rules/computed-property-spacing)
 
     ```javascript
     // bad
@@ -2722,6 +2726,7 @@ Other Style Guides
     obj[foo[bar]]
     ```
 
+  <a name="whitespace--func-call-spacing"></a>
   - [19.16](#whitespace--func-call-spacing) Enforce spacing between functions and their invocations. eslint: [`func-call-spacing`](https://eslint.org/docs/rules/func-call-spacing)
 
     ```javascript
@@ -2735,6 +2740,7 @@ Other Style Guides
     func();
     ```
 
+  <a name="whitespace--key-spacing"></a>
   - [19.17](#whitespace--key-spacing) Enforce spacing between keys and values in object literal properties. eslint: [`key-spacing`](https://eslint.org/docs/rules/key-spacing)
 
     ```javascript
@@ -2746,8 +2752,10 @@ Other Style Guides
     var obj = { "foo": 42 };
     ```
 
+  <a name="whitespace--no-trailing-spaces"></a>
   - [19.18](#whitespace--no-trailing-spaces) Avoid trailing spaces at the end of lines. eslint: [`no-trailing-spaces`](https://eslint.org/docs/rules/no-trailing-spaces)
 
+  <a name="whitespace--no-multiple-empty-lines"></a>
   - [19.19](#whitespace--no-multiple-empty-lines) Avoid multiple empty lines and only allow one newline at the end of files. eslint: [`no-multiple-empty-lines`](https://eslint.org/docs/rules/no-multiple-empty-lines)
 
     <!-- markdownlint-disable MD012 -->

From 2bd77bc1e0fb6fb17f9601961cd9d5b878623c28 Mon Sep 17 00:00:00 2001
From: Jimmy Jia <tesrin@gmail.com>
Date: Sat, 5 May 2018 22:34:19 -0400
Subject: [PATCH 1239/1591] [eslint config] [base] [patch] `label-has-for`:
 Remove redundant component

Also make the rule configuration more explicit.
---
 packages/eslint-config-airbnb/rules/react-a11y.js | 8 +++++++-
 1 file changed, 7 insertions(+), 1 deletion(-)

diff --git a/packages/eslint-config-airbnb/rules/react-a11y.js b/packages/eslint-config-airbnb/rules/react-a11y.js
index 3e7f5c970c..f53b3d22f6 100644
--- a/packages/eslint-config-airbnb/rules/react-a11y.js
+++ b/packages/eslint-config-airbnb/rules/react-a11y.js
@@ -48,7 +48,13 @@ module.exports = {
 
     // require that JSX labels use "htmlFor"
     // https://github.com/evcohen/eslint-plugin-jsx-a11y/blob/master/docs/rules/label-has-for.md
-    'jsx-a11y/label-has-for': ['error', { components: ['label'] }],
+    'jsx-a11y/label-has-for': ['error', {
+      components: [],
+      required: {
+        every: ['nesting', 'id'],
+      },
+      allowChildren: false,
+    }],
 
     // require that mouseover/out come with focus/blur, for keyboard-only users
     // https://github.com/evcohen/eslint-plugin-jsx-a11y/blob/master/docs/rules/mouse-events-have-key-events.md

From 2ba36de952fcb6a931471980f4fbbdc4df468baa Mon Sep 17 00:00:00 2001
From: ParkSB <parkgds@gmail.com>
Date: Sat, 5 May 2018 03:04:38 +0900
Subject: [PATCH 1240/1591] [guide] Add backticks

---
 README.md | 12 ++++++------
 1 file changed, 6 insertions(+), 6 deletions(-)

diff --git a/README.md b/README.md
index 8ef84ade85..969c65c0e4 100644
--- a/README.md
+++ b/README.md
@@ -370,7 +370,7 @@ Other Style Guides
     ```
 
   <a name="arrays--from"></a><a name="4.4"></a>
-  - [4.4](#arrays--from) To convert an array-like object to an array, use spreads `...` instead of [Array.from](https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Array/from).
+  - [4.4](#arrays--from) To convert an array-like object to an array, use spreads `...` instead of [`Array.from`](https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Array/from).
 
     ```javascript
     const foo = document.querySelectorAll('.foo');
@@ -786,7 +786,7 @@ Other Style Guides
   <a name="functions--constructor"></a><a name="7.10"></a>
   - [7.10](#functions--constructor) Never use the Function constructor to create a new function. eslint: [`no-new-func`](https://eslint.org/docs/rules/no-new-func)
 
-    > Why? Creating a function in this way evaluates a string similarly to eval(), which opens vulnerabilities.
+    > Why? Creating a function in this way evaluates a string similarly to `eval()`, which opens vulnerabilities.
 
     ```javascript
     // bad
@@ -1167,7 +1167,7 @@ Other Style Guides
     ```
 
   <a name="constructors--tostring"></a><a name="9.4"></a>
-  - [9.4](#constructors--tostring) It’s okay to write a custom toString() method, just make sure it works successfully and causes no side effects.
+  - [9.4](#constructors--tostring) It’s okay to write a custom `toString()` method, just make sure it works successfully and causes no side effects.
 
     ```javascript
     class Jedi {
@@ -1687,7 +1687,7 @@ Other Style Guides
     ```
 
   <a name="variables--unary-increment-decrement"></a><a name="13.6"></a>
-  - [13.6](#variables--unary-increment-decrement) Avoid using unary increments and decrements (++, --). eslint [`no-plusplus`](https://eslint.org/docs/rules/no-plusplus)
+  - [13.6](#variables--unary-increment-decrement) Avoid using unary increments and decrements (`++`, `--`). eslint [`no-plusplus`](https://eslint.org/docs/rules/no-plusplus)
 
     > Why? Per the eslint documentation, unary increment and decrement statements are subject to automatic semicolon insertion and can cause silent errors with incrementing or decrementing values within an application. It is also more expressive to mutate your values with statements like `num += 1` instead of `num++` or `num ++`. Disallowing unary increment and decrement statements also prevents you from pre-incrementing/pre-decrementing values unintentionally which can also cause unexpected behavior in your programs.
 
@@ -3295,7 +3295,7 @@ Other Style Guides
   - [24.1](#accessors--not-required) Accessor functions for properties are not required.
 
   <a name="accessors--no-getters-setters"></a><a name="23.2"></a>
-  - [24.2](#accessors--no-getters-setters) Do not use JavaScript getters/setters as they cause unexpected side effects and are harder to test, maintain, and reason about. Instead, if you do make accessor functions, use getVal() and setVal('hello').
+  - [24.2](#accessors--no-getters-setters) Do not use JavaScript getters/setters as they cause unexpected side effects and are harder to test, maintain, and reason about. Instead, if you do make accessor functions, use `getVal()` and `setVal('hello')`.
 
     ```javascript
     // bad
@@ -3337,7 +3337,7 @@ Other Style Guides
     ```
 
   <a name="accessors--consistent"></a><a name="23.4"></a>
-  - [24.4](#accessors--consistent) It’s okay to create get() and set() functions, but be consistent.
+  - [24.4](#accessors--consistent) It’s okay to create `get()` and `set()` functions, but be consistent.
 
     ```javascript
     class Jedi {

From c068d7cbf1bfb2f263bc928ca7fd895a6a6add7f Mon Sep 17 00:00:00 2001
From: Brett <brett@hover.to>
Date: Sat, 26 May 2018 13:38:45 -0700
Subject: [PATCH 1241/1591] Fix link for Temporal Dead Zone

---
 README.md | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/README.md b/README.md
index 969c65c0e4..0a3a1f88f3 100644
--- a/README.md
+++ b/README.md
@@ -1748,7 +1748,7 @@ Other Style Guides
 ## Hoisting
 
   <a name="hoisting--about"></a><a name="14.1"></a>
-  - [14.1](#hoisting--about) `var` declarations get hoisted to the top of their closest enclosing function scope, their assignment does not. `const` and `let` declarations are blessed with a new concept called [Temporal Dead Zones (TDZ)](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/let#Temporal_Dead_Zone_and_errors_with_let). It’s important to know why [typeof is no longer safe](http://es-discourse.com/t/why-typeof-is-no-longer-safe/15).
+  - [14.1](#hoisting--about) `var` declarations get hoisted to the top of their closest enclosing function scope, their assignment does not. `const` and `let` declarations are blessed with a new concept called [Temporal Dead Zones (TDZ)](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/let#Temporal_Dead_Zone). It’s important to know why [typeof is no longer safe](http://es-discourse.com/t/why-typeof-is-no-longer-safe/15).
 
     ```javascript
     // we know this wouldn’t work (assuming there

From 04ab225858b75b9fb1180075b92845700849ea5b Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Sun, 27 May 2018 08:47:29 -0700
Subject: [PATCH 1242/1591] [eslint config] [*] [deps] update
 `eslint-plugin-import`, `eslint-find-rules`, `eslint-plugin-react`

---
 packages/eslint-config-airbnb-base/package.json     |  6 +++---
 packages/eslint-config-airbnb-base/rules/imports.js |  9 ++++++++-
 packages/eslint-config-airbnb/package.json          | 10 +++++-----
 3 files changed, 16 insertions(+), 9 deletions(-)

diff --git a/packages/eslint-config-airbnb-base/package.json b/packages/eslint-config-airbnb-base/package.json
index 7739f54005..a4b83cda9c 100644
--- a/packages/eslint-config-airbnb-base/package.json
+++ b/packages/eslint-config-airbnb-base/package.json
@@ -53,15 +53,15 @@
     "babel-tape-runner": "^2.0.1",
     "editorconfig-tools": "^0.1.1",
     "eslint": "^4.19.1",
-    "eslint-find-rules": "^3.2.2",
-    "eslint-plugin-import": "^2.11.0",
+    "eslint-find-rules": "^3.2.3",
+    "eslint-plugin-import": "^2.12.0",
     "in-publish": "^2.0.0",
     "safe-publish-latest": "^1.1.1",
     "tape": "^4.9.0"
   },
   "peerDependencies": {
     "eslint": "^4.19.1",
-    "eslint-plugin-import": "^2.11.0"
+    "eslint-plugin-import": "^2.12.0"
   },
   "engines": {
     "node": ">= 4"
diff --git a/packages/eslint-config-airbnb-base/rules/imports.js b/packages/eslint-config-airbnb-base/rules/imports.js
index 46c6135093..a8502d554a 100644
--- a/packages/eslint-config-airbnb-base/rules/imports.js
+++ b/packages/eslint-config-airbnb-base/rules/imports.js
@@ -232,7 +232,14 @@ module.exports = {
     'import/no-cycle': ['error', { maxDepth: Infinity }],
 
     // Ensures that there are no useless path segments
-    // https://github.com/benmosher/eslint-plugin-import/issues/1032
+    // https://github.com/benmosher/eslint-plugin-import/blob/ebafcbf59ec9f653b2ac2a0156ca3bcba0a7cf57/docs/rules/no-useless-path-segments.md
     'import/no-useless-path-segments': 'error',
+
+    // dynamic imports require a leading comment with a webpackChunkName
+    // https://github.com/benmosher/eslint-plugin-import/blob/ebafcbf59ec9f653b2ac2a0156ca3bcba0a7cf57/docs/rules/dynamic-import-chunkname.md
+    'import/dynamic-import-chunkname': ['off', {
+      importFunctions: [],
+      webpackChunknameFormat: '[0-9a-zA-Z-_/.]+',
+    }],
   },
 };
diff --git a/packages/eslint-config-airbnb/package.json b/packages/eslint-config-airbnb/package.json
index bc80fdd060..d3fc6d8df1 100644
--- a/packages/eslint-config-airbnb/package.json
+++ b/packages/eslint-config-airbnb/package.json
@@ -58,10 +58,10 @@
     "babel-tape-runner": "^2.0.1",
     "editorconfig-tools": "^0.1.1",
     "eslint": "^4.19.1",
-    "eslint-find-rules": "^3.2.2",
-    "eslint-plugin-import": "^2.11.0",
+    "eslint-find-rules": "^3.2.3",
+    "eslint-plugin-import": "^2.12.0",
     "eslint-plugin-jsx-a11y": "^6.0.3",
-    "eslint-plugin-react": "^7.7.0",
+    "eslint-plugin-react": "^7.8.2",
     "in-publish": "^2.0.0",
     "react": ">= 0.13.0",
     "safe-publish-latest": "^1.1.1",
@@ -69,9 +69,9 @@
   },
   "peerDependencies": {
     "eslint": "^4.19.1",
-    "eslint-plugin-import": "^2.11.0",
+    "eslint-plugin-import": "^2.12.0",
     "eslint-plugin-jsx-a11y": "^6.0.3",
-    "eslint-plugin-react": "^7.7.0"
+    "eslint-plugin-react": "^7.8.2"
   },
   "engines": {
     "node": ">= 4"

From ae82d7678303bd08242299a4a9e2c47717bf9c6b Mon Sep 17 00:00:00 2001
From: Alexandre Syenchuk <alexpirine@users.noreply.github.com>
Date: Wed, 30 May 2018 09:06:14 +0200
Subject: [PATCH 1243/1591] Update README.md

---
 README.md | 1 +
 1 file changed, 1 insertion(+)

diff --git a/README.md b/README.md
index 0a3a1f88f3..3b00f8c274 100644
--- a/README.md
+++ b/README.md
@@ -3719,6 +3719,7 @@ Other Style Guides
   - **Orion Health**: [orionhealth/javascript](https://github.com/orionhealth/javascript)
   - **OutBoxSoft**: [OutBoxSoft/javascript](https://github.com/OutBoxSoft/javascript)
   - **Peerby**: [Peerby/javascript](https://github.com/Peerby/javascript)
+  - **Qotto**: [Qotto/javascript-style-guide](https://github.com/Qotto/javascript-style-guide)
   - **Razorfish**: [razorfish/javascript-style-guide](https://github.com/razorfish/javascript-style-guide)
   - **reddit**: [reddit/styleguide/javascript](https://github.com/reddit/styleguide/tree/master/javascript)
   - **React**: [facebook.github.io/react/contributing/how-to-contribute.html#style-guide](https://facebook.github.io/react/contributing/how-to-contribute.html#style-guide)

From dfc9da71d9ac8669d074cbe0f918b504c8a68be8 Mon Sep 17 00:00:00 2001
From: Andrew Macpherson <hopscotch23@gmail.com>
Date: Thu, 31 May 2018 18:34:17 +0100
Subject: [PATCH 1244/1591] Add Drupal to In The Wild section.

---
 README.md | 1 +
 1 file changed, 1 insertion(+)

diff --git a/README.md b/README.md
index 3b00f8c274..d6e1c5e0ab 100644
--- a/README.md
+++ b/README.md
@@ -3677,6 +3677,7 @@ Other Style Guides
   - **DailyMotion**: [dailymotion/javascript](https://github.com/dailymotion/javascript)
   - **DoSomething**: [DoSomething/eslint-config](https://github.com/DoSomething/eslint-config)
   - **Digitpaint** [digitpaint/javascript](https://github.com/digitpaint/javascript)
+  - **Drupal**: [www.drupal.org](https://www.drupal.org/project/drupal)
   - **Ecosia**: [ecosia/javascript](https://github.com/ecosia/javascript)
   - **Evernote**: [evernote/javascript-style-guide](https://github.com/evernote/javascript-style-guide)
   - **Evolution Gaming**: [evolution-gaming/javascript](https://github.com/evolution-gaming/javascript)

From 8a244801196924797878186d744249c78fa4ed37 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Alejandro=20Garc=C3=ADa=20Salas?=
 <garciasalasalejandro@gmail.com>
Date: Sun, 3 Jun 2018 10:48:10 -0700
Subject: [PATCH 1245/1591] Fix broken aria roles link in React style guide
 README

---
 react/README.md | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/react/README.md b/react/README.md
index 1af23d4d1f..c4fcf76d56 100644
--- a/react/README.md
+++ b/react/README.md
@@ -307,7 +307,7 @@ This style guide is mostly based on the standards that are currently prevalent i
     <img src="hello.jpg" alt="Me waving hello" />
     ```
 
-  - Use only valid, non-abstract [ARIA roles](https://www.w3.org/TR/wai-aria/roles#role_definitions). eslint: [`jsx-a11y/aria-role`](https://github.com/evcohen/eslint-plugin-jsx-a11y/blob/master/docs/rules/aria-role.md)
+  - Use only valid, non-abstract [ARIA roles](https://www.w3.org/TR/wai-aria/#usage_intro). eslint: [`jsx-a11y/aria-role`](https://github.com/evcohen/eslint-plugin-jsx-a11y/blob/master/docs/rules/aria-role.md)
 
     ```jsx
     // bad - not an ARIA role

From 5e260928b65f48c895b21d49ea0aa752df2e4d80 Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Sun, 3 Jun 2018 22:19:41 -0700
Subject: [PATCH 1246/1591] [eslint config] [react] update
 `eslint-plugin-react`

---
 packages/eslint-config-airbnb/package.json   | 4 ++--
 packages/eslint-config-airbnb/rules/react.js | 8 ++++++--
 2 files changed, 8 insertions(+), 4 deletions(-)

diff --git a/packages/eslint-config-airbnb/package.json b/packages/eslint-config-airbnb/package.json
index d3fc6d8df1..faee46ec90 100644
--- a/packages/eslint-config-airbnb/package.json
+++ b/packages/eslint-config-airbnb/package.json
@@ -61,7 +61,7 @@
     "eslint-find-rules": "^3.2.3",
     "eslint-plugin-import": "^2.12.0",
     "eslint-plugin-jsx-a11y": "^6.0.3",
-    "eslint-plugin-react": "^7.8.2",
+    "eslint-plugin-react": "^7.9.1",
     "in-publish": "^2.0.0",
     "react": ">= 0.13.0",
     "safe-publish-latest": "^1.1.1",
@@ -71,7 +71,7 @@
     "eslint": "^4.19.1",
     "eslint-plugin-import": "^2.12.0",
     "eslint-plugin-jsx-a11y": "^6.0.3",
-    "eslint-plugin-react": "^7.8.2"
+    "eslint-plugin-react": "^7.9.1"
   },
   "engines": {
     "node": ">= 4"
diff --git a/packages/eslint-config-airbnb/rules/react.js b/packages/eslint-config-airbnb/rules/react.js
index 7d8145a17a..f5a807faac 100644
--- a/packages/eslint-config-airbnb/rules/react.js
+++ b/packages/eslint-config-airbnb/rules/react.js
@@ -290,8 +290,8 @@ module.exports = {
     'react/jsx-indent': ['error', 2],
 
     // Disallow target="_blank" on links
-    // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/jsx-no-target-blank.md
-    'react/jsx-no-target-blank': 'error',
+    // https://github.com/yannickcr/eslint-plugin-react/blob/ac102885765be5ff37847a871f239c6703e1c7cc/docs/rules/jsx-no-target-blank.md
+    'react/jsx-no-target-blank': ['error', { enforceDynamicLinks: 'always' }],
 
     // only .jsx files may have JSX
     // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/jsx-filename-extension.md
@@ -436,6 +436,10 @@ module.exports = {
     // Validate JSX maximum depth
     // https://github.com/yannickcr/eslint-plugin-react/blob/abe8381c0d6748047224c430ce47f02e40160ed0/docs/rules/jsx-max-depth.md
     'react/jsx-max-depth': 'off',
+
+    // Disallow multiple spaces between inline JSX props
+    // https://github.com/yannickcr/eslint-plugin-react/blob/ac102885765be5ff37847a871f239c6703e1c7cc/docs/rules/jsx-props-no-multi-spaces.md
+    'react/jsx-props-no-multi-spaces': 'error',
   },
 
   settings: {

From 74fb34f08d4f1961169e9c37c9036a5b42aa7bf1 Mon Sep 17 00:00:00 2001
From: Daniel McNally <mcnallydp@gmail.com>
Date: Fri, 8 Jun 2018 01:38:03 -0400
Subject: [PATCH 1247/1591] Add no-unused-vars to README

This documents the enforced but currently undocumented `no-unused-vars` rule with a brief description, examples, and noting the `"ignoreRestSiblings": true` option.
---
 README.md | 39 +++++++++++++++++++++++++++++++++++++++
 1 file changed, 39 insertions(+)

diff --git a/README.md b/README.md
index d6e1c5e0ab..b807154d99 100644
--- a/README.md
+++ b/README.md
@@ -1743,6 +1743,45 @@ Other Style Guides
     const foo = 'superLongLongLongLongLongLongLongLongString';
     ```
 
+  - [13.8](#variables--no-unused-vars) Disallow unused variables. eslint: [`no-unused-vars`](https://eslint.org/docs/rules/no-unused-vars)
+
+    > Why? Variables that are declared and not used anywhere in the code are most likely an error due to incomplete refactoring. Such variables take up space in the code and can lead to confusion by readers.
+
+    ```javascript
+    // bad
+
+    var some_unused_var = 42;
+
+    // Write-only variables are not considered as used.
+    var y = 10;
+    y = 5;
+
+    // A read for a modification of itself is not considered as used.
+    var z = 0;
+    z = z + 1;
+
+    // Unused function arguments.
+    function getX(x, y) {
+        return x;
+    }
+
+    // good
+
+    function getXPlusY(x, y) {
+      return x + y;
+    }
+
+    var x = 1;
+    var y = a + 2;
+
+    alert(getXPlusY(x, y));
+
+    // 'type' is ignored even if unused because it has a rest property sibling.
+    // This is a form of extracting an object that omits the specified keys.
+    var { type, ...coords } = data;
+    // 'coords' is now the 'data' object without its 'type' property.
+    ```
+
 **[⬆ back to top](#table-of-contents)**
 
 ## Hoisting

From 103f5e2a5901392878889ec1f1ad4e59c8d65dc3 Mon Sep 17 00:00:00 2001
From: Vse Mozhet Byt <vsemozhetbyt@gmail.com>
Date: Fri, 8 Jun 2018 19:49:37 +0300
Subject: [PATCH 1248/1591] doc: add missing anchor in README.md

---
 README.md | 1 +
 1 file changed, 1 insertion(+)

diff --git a/README.md b/README.md
index b807154d99..e486ae170e 100644
--- a/README.md
+++ b/README.md
@@ -1743,6 +1743,7 @@ Other Style Guides
     const foo = 'superLongLongLongLongLongLongLongLongString';
     ```
 
+<a name="variables--no-unused-vars"></a>
   - [13.8](#variables--no-unused-vars) Disallow unused variables. eslint: [`no-unused-vars`](https://eslint.org/docs/rules/no-unused-vars)
 
     > Why? Variables that are declared and not used anywhere in the code are most likely an error due to incomplete refactoring. Such variables take up space in the code and can lead to confusion by readers.

From d270031fc07bd26df9d53106704e04abc37d8256 Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Thu, 21 Jun 2018 13:28:22 -0700
Subject: [PATCH 1249/1591] [eslint config] [*] [dev deps] update
 `babel-preset-airbnb`, `tape`

---
 packages/eslint-config-airbnb-base/package.json | 4 ++--
 packages/eslint-config-airbnb/package.json      | 4 ++--
 2 files changed, 4 insertions(+), 4 deletions(-)

diff --git a/packages/eslint-config-airbnb-base/package.json b/packages/eslint-config-airbnb-base/package.json
index a4b83cda9c..9327414f6c 100644
--- a/packages/eslint-config-airbnb-base/package.json
+++ b/packages/eslint-config-airbnb-base/package.json
@@ -49,7 +49,7 @@
   },
   "homepage": "https://github.com/airbnb/javascript",
   "devDependencies": {
-    "babel-preset-airbnb": "^2.4.0",
+    "babel-preset-airbnb": "^2.5.1",
     "babel-tape-runner": "^2.0.1",
     "editorconfig-tools": "^0.1.1",
     "eslint": "^4.19.1",
@@ -57,7 +57,7 @@
     "eslint-plugin-import": "^2.12.0",
     "in-publish": "^2.0.0",
     "safe-publish-latest": "^1.1.1",
-    "tape": "^4.9.0"
+    "tape": "^4.9.1"
   },
   "peerDependencies": {
     "eslint": "^4.19.1",
diff --git a/packages/eslint-config-airbnb/package.json b/packages/eslint-config-airbnb/package.json
index faee46ec90..95cc0adcf8 100644
--- a/packages/eslint-config-airbnb/package.json
+++ b/packages/eslint-config-airbnb/package.json
@@ -54,7 +54,7 @@
     "object.entries": "^1.0.4"
   },
   "devDependencies": {
-    "babel-preset-airbnb": "^2.4.0",
+    "babel-preset-airbnb": "^2.5.1",
     "babel-tape-runner": "^2.0.1",
     "editorconfig-tools": "^0.1.1",
     "eslint": "^4.19.1",
@@ -65,7 +65,7 @@
     "in-publish": "^2.0.0",
     "react": ">= 0.13.0",
     "safe-publish-latest": "^1.1.1",
-    "tape": "^4.9.0"
+    "tape": "^4.9.1"
   },
   "peerDependencies": {
     "eslint": "^4.19.1",

From 2668495fee10b4b70f72ba623b4f319ad539700a Mon Sep 17 00:00:00 2001
From: minimooooz <art@kkumail.co>
Date: Thu, 12 Oct 2017 11:17:22 +0700
Subject: [PATCH 1250/1591] add ES2015-2018 in npm package keywords

---
 package.json                                    | 3 +++
 packages/eslint-config-airbnb-base/package.json | 6 +++++-
 packages/eslint-config-airbnb/package.json      | 6 +++++-
 3 files changed, 13 insertions(+), 2 deletions(-)

diff --git a/package.json b/package.json
index b50dd7a121..d907751ccc 100644
--- a/package.json
+++ b/package.json
@@ -26,6 +26,9 @@
     "airbnb",
     "es6",
     "es2015",
+    "es2016",
+    "es2017",
+    "es2018",
     "react",
     "jsx"
   ],
diff --git a/packages/eslint-config-airbnb-base/package.json b/packages/eslint-config-airbnb-base/package.json
index 9327414f6c..bd2ef922c3 100644
--- a/packages/eslint-config-airbnb-base/package.json
+++ b/packages/eslint-config-airbnb-base/package.json
@@ -25,7 +25,11 @@
     "config",
     "airbnb",
     "javascript",
-    "styleguide"
+    "styleguide",
+    "es2015",
+    "es2016",
+    "es2017",
+    "es2018"
   ],
   "author": "Jake Teton-Landis (https://twitter.com/@jitl)",
   "contributors": [
diff --git a/packages/eslint-config-airbnb/package.json b/packages/eslint-config-airbnb/package.json
index 95cc0adcf8..97e1579393 100644
--- a/packages/eslint-config-airbnb/package.json
+++ b/packages/eslint-config-airbnb/package.json
@@ -25,7 +25,11 @@
     "config",
     "airbnb",
     "javascript",
-    "styleguide"
+    "styleguide",
+	"es2015",
+    "es2016",
+    "es2017",
+    "es2018"
   ],
   "author": "Jake Teton-Landis (https://twitter.com/@jitl)",
   "contributors": [

From b3bbd1ccbc2495762ed3b2ec47e776135e532d76 Mon Sep 17 00:00:00 2001
From: Josh Wells <josh@bubblegate.co.uk>
Date: Wed, 11 Apr 2018 13:46:34 +0100
Subject: [PATCH 1251/1591] [eslint config] [base] [breaking] order of import
 statements is ignored for unassigned imports

---
 packages/eslint-config-airbnb-base/rules/imports.js | 11 ++++-------
 1 file changed, 4 insertions(+), 7 deletions(-)

diff --git a/packages/eslint-config-airbnb-base/rules/imports.js b/packages/eslint-config-airbnb-base/rules/imports.js
index a8502d554a..c48959e14f 100644
--- a/packages/eslint-config-airbnb-base/rules/imports.js
+++ b/packages/eslint-config-airbnb-base/rules/imports.js
@@ -115,7 +115,7 @@ module.exports = {
 
     // disallow non-import statements appearing before import statements
     // https://github.com/benmosher/eslint-plugin-import/blob/master/docs/rules/first.md
-    'import/first': ['error', 'absolute-first'],
+    'import/first': 'error',
 
     // disallow non-import statements appearing before import statements
     // https://github.com/benmosher/eslint-plugin-import/blob/master/docs/rules/imports-first.md
@@ -139,13 +139,10 @@ module.exports = {
       jsx: 'never',
     }],
 
-    // Enforce a convention in module import order
+    // ensure absolute imports are above relative imports and that unassigned imports are ignored
     // https://github.com/benmosher/eslint-plugin-import/blob/master/docs/rules/order.md
-    // TODO: enable?
-    'import/order': ['off', {
-      groups: ['builtin', 'external', 'internal', 'parent', 'sibling', 'index'],
-      'newlines-between': 'never',
-    }],
+    // TODO: enforce a stricter convention in module import order?
+    'import/order': ['error', { groups: [['builtin', 'external', 'internal']] }],
 
     // Require a newline after the last import/require in a group
     // https://github.com/benmosher/eslint-plugin-import/blob/master/docs/rules/newline-after-import.md

From 068d6b69bf70c83d16eba25c9c517a4859c96ea4 Mon Sep 17 00:00:00 2001
From: Moritz Kneilmann <moritz.kneilmann@gmx.de>
Date: Tue, 15 May 2018 23:54:09 +0200
Subject: [PATCH 1252/1591] [eslint config] [base] [patch] Adjust imports for
 vue-cli

Allows the vue-cli config file `vue.config.js` to import `devDependencies` by altering the rule `import/no-extraneous-dependencies`.
---
 packages/eslint-config-airbnb-base/rules/imports.js | 1 +
 1 file changed, 1 insertion(+)

diff --git a/packages/eslint-config-airbnb-base/rules/imports.js b/packages/eslint-config-airbnb-base/rules/imports.js
index c48959e14f..91d82df1cb 100644
--- a/packages/eslint-config-airbnb-base/rules/imports.js
+++ b/packages/eslint-config-airbnb-base/rules/imports.js
@@ -79,6 +79,7 @@ module.exports = {
         'test-*.{js,jsx}', // repos with multiple top-level test files
         '**/*{.,_}{test,spec}.{js,jsx}', // tests where the extension or filename suffix denotes that it is a test
         '**/jest.config.js', // jest config
+        '**/vue.config.js', // vue-cli config
         '**/webpack.config.js', // webpack config
         '**/webpack.config.*.js', // webpack config
         '**/rollup.config.js', // rollup config

From 25e711cedd78e3329e8a8508d723996080d8336f Mon Sep 17 00:00:00 2001
From: Gaurav Paliwal <paliwal.gaurav@outlook.com>
Date: Wed, 20 Jun 2018 17:31:00 +0530
Subject: [PATCH 1253/1591] [eslint config] [patch] Add new methods introduced
 in react@16.3

---
 packages/eslint-config-airbnb/rules/react.js | 4 ++++
 1 file changed, 4 insertions(+)

diff --git a/packages/eslint-config-airbnb/rules/react.js b/packages/eslint-config-airbnb/rules/react.js
index f5a807faac..a2a21c141f 100644
--- a/packages/eslint-config-airbnb/rules/react.js
+++ b/packages/eslint-config-airbnb/rules/react.js
@@ -23,13 +23,17 @@ module.exports = {
         'getDefaultProps',
         'getChildContext',
         'componentWillMount',
+        'UNSAFE_componentWillMount',
         'componentDidMount',
         'componentWillReceiveProps',
+        'UNSAFE_componentWillReceiveProps',
         'shouldComponentUpdate',
         'componentWillUpdate',
+        'UNSAFE_componentWillUpdate',
         'componentDidUpdate',
         'componentWillUnmount',
         'componentDidCatch',
+        'getSnapshotBeforeUpdate'
       ],
     }],
 

From 951825c6d216ef2b3017472ae66e9b3360b089ae Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Thu, 21 Jun 2018 14:22:54 -0700
Subject: [PATCH 1254/1591] [eslint config] set `forbid-foreign-prop-types` to
 "warn"

---
 packages/eslint-config-airbnb/rules/react.js | 5 +++--
 1 file changed, 3 insertions(+), 2 deletions(-)

diff --git a/packages/eslint-config-airbnb/rules/react.js b/packages/eslint-config-airbnb/rules/react.js
index a2a21c141f..20971d1622 100644
--- a/packages/eslint-config-airbnb/rules/react.js
+++ b/packages/eslint-config-airbnb/rules/react.js
@@ -375,8 +375,9 @@ module.exports = {
 
     // Forbids using non-exported propTypes
     // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/forbid-foreign-prop-types.md
-    // TODO: enable?
-    'react/forbid-foreign-prop-types': ['off', { allowInPropTypes: true }],
+    // this is intentionally set to "warn". it would be "error", but it's only critical if you're using
+    // a babel transform to strip propTypes in production.
+    'react/forbid-foreign-prop-types': ['warn', { allowInPropTypes: true }],
 
     // Prevent void DOM elements from receiving children
     // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/void-dom-elements-no-children.md

From fdb998b38adda8777022fe33b86b2f8092ac83a0 Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Thu, 21 Jun 2018 14:39:07 -0700
Subject: [PATCH 1255/1591] [eslint config] [base] fix tests

---
 packages/eslint-config-airbnb-base/whitespace.js | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/packages/eslint-config-airbnb-base/whitespace.js b/packages/eslint-config-airbnb-base/whitespace.js
index 66a05e52b9..d215d4ae6a 100644
--- a/packages/eslint-config-airbnb-base/whitespace.js
+++ b/packages/eslint-config-airbnb-base/whitespace.js
@@ -1,8 +1,9 @@
-const baseConfig = require('.');
 const assign = require('object.assign');
 const entries = require('object.entries');
 const CLIEngine = require('eslint').CLIEngine;
 
+const baseConfig = require('.');
+
 function onlyErrorOnRules(rulesToError, config) {
   const errorsOnly = assign({}, config);
   const cli = new CLIEngine({ baseConfig: config, useEslintrc: false });

From 8be089eb1138c6e5dbdc27146248525c0633ba47 Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Thu, 21 Jun 2018 14:46:24 -0700
Subject: [PATCH 1256/1591] [eslint config] fix tests

---
 packages/eslint-config-airbnb/rules/react.js | 4 ++--
 packages/eslint-config-airbnb/whitespace.js  | 3 ++-
 2 files changed, 4 insertions(+), 3 deletions(-)

diff --git a/packages/eslint-config-airbnb/rules/react.js b/packages/eslint-config-airbnb/rules/react.js
index 20971d1622..62675c1cf0 100644
--- a/packages/eslint-config-airbnb/rules/react.js
+++ b/packages/eslint-config-airbnb/rules/react.js
@@ -375,8 +375,8 @@ module.exports = {
 
     // Forbids using non-exported propTypes
     // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/forbid-foreign-prop-types.md
-    // this is intentionally set to "warn". it would be "error", but it's only critical if you're using
-    // a babel transform to strip propTypes in production.
+    // this is intentionally set to "warn". it would be "error",
+    // but it's only critical if you're stripping propTypes in production.
     'react/forbid-foreign-prop-types': ['warn', { allowInPropTypes: true }],
 
     // Prevent void DOM elements from receiving children
diff --git a/packages/eslint-config-airbnb/whitespace.js b/packages/eslint-config-airbnb/whitespace.js
index ba36569a99..414f9c37a1 100644
--- a/packages/eslint-config-airbnb/whitespace.js
+++ b/packages/eslint-config-airbnb/whitespace.js
@@ -1,8 +1,9 @@
-const baseConfig = require('.');
 const assign = require('object.assign');
 const entries = require('object.entries');
 const CLIEngine = require('eslint').CLIEngine;
 
+const baseConfig = require('.');
+
 function onlyErrorOnRules(rulesToError, config) {
   const errorsOnly = assign({}, config);
   const cli = new CLIEngine({ baseConfig: config, useEslintrc: false });

From afe340773f082b262955abf243efbd60e2d87ee4 Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Thu, 21 Jun 2018 14:46:43 -0700
Subject: [PATCH 1257/1591] [eslint config] [base] v13.0.0

---
 .../eslint-config-airbnb-base/CHANGELOG.md    | 34 +++++++++++++++++++
 .../eslint-config-airbnb-base/package.json    |  2 +-
 2 files changed, 35 insertions(+), 1 deletion(-)

diff --git a/packages/eslint-config-airbnb-base/CHANGELOG.md b/packages/eslint-config-airbnb-base/CHANGELOG.md
index 6dd34427fc..daff7f51a7 100644
--- a/packages/eslint-config-airbnb-base/CHANGELOG.md
+++ b/packages/eslint-config-airbnb-base/CHANGELOG.md
@@ -1,3 +1,37 @@
+13.0.0 / 2018-06-21
+==================
+ - [breaking] order of import statements is ignored for unassigned imports (#1782)
+ - [breaking] enable `import/no-cycle`: warn on cyclical dependencies (#1779)
+ - [breaking] Change import/no-self-import from "off" to "error" (#1770)
+ - [breaking] Update `object-curly-newline` to match eslint 4.18.0 (#1761)
+ - [breaking] enable `no-useless-path-segments` (#1743)
+ - [breaking] Prevent line breaks before and after `=` (#1710)
+ - [breaking] Add .mjs extension support (#1634)
+ - [breaking] enable `implicit-arrow-linebreak`
+ - [breaking] Enables `nonblock-statement-body-position` rule and adds link to guide (#1618)
+ - [breaking] `no-mixed-operators`: only warn on `**` and `%` mixed with arithmetic operators; removes violation against mixing common math operators. (#1611)
+ - [breaking] `import/named`: enable
+ - [breaking] `lines-between-class-members`: set to “always”
+ - [breaking] `no-else-return`: disallow else-if (#1595)
+ - [breaking] Enables eslint rule for operator-linebreak
+ - [new] Adds config entry point with only whitespace rules enabled (#1749, #1751)
+ - [minor] only allow one newline at the end (#1794)
+ - [patch] Adjust imports for vue-cli (#1809)
+ - [patch] Allow devDependencies for `foo_spec.js` naming style (#1732)
+ - [patch] `function-paren-newline`: change to "consistent"
+ - [patch] avoid `__mocks__` `no-extraneous-dependencies` check (#1772)
+ - [patch] Include 'accumulator' exception for `no-param-reassign` (#1768)
+ - [patch] Set import/extensions to ignorePackages (#1652)
+ - [patch] properly ignore indentation on jsx
+ - [patch] `array-callback-return`: enable `allowImplicit` option (#1668)
+ - [deps] update `eslint`, `eslint-plugin-import`
+ - [dev deps] update `babel-preset-airbnb`, `tape`, `eslint-find-rules`
+ - [meta] add ES2015-2018 in npm package keywords (#1587)
+ - [meta] Add licenses to sub packages (#1746)
+ - [docs] add `npx` shortcut (#1694)
+ - [docs] Use HTTPS for links to ESLint documentation (#1628)
+ - [tests] ensure all entry points parse
+
 12.1.0 / 2017-10-16
 ==================
  - [deps] update `eslint` to `v4.9`
diff --git a/packages/eslint-config-airbnb-base/package.json b/packages/eslint-config-airbnb-base/package.json
index bd2ef922c3..bd072bf850 100644
--- a/packages/eslint-config-airbnb-base/package.json
+++ b/packages/eslint-config-airbnb-base/package.json
@@ -1,6 +1,6 @@
 {
   "name": "eslint-config-airbnb-base",
-  "version": "12.1.0",
+  "version": "13.0.0",
   "description": "Airbnb's base JS ESLint config, following our styleguide",
   "main": "index.js",
   "scripts": {

From d14ed5daa7625eab6e03fb290b0a18ed11b229fc Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Thu, 21 Jun 2018 15:16:52 -0700
Subject: [PATCH 1258/1591] [eslint config] [breaking] update
 `eslint-config-airbnb-base`

---
 packages/eslint-config-airbnb/package.json | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/packages/eslint-config-airbnb/package.json b/packages/eslint-config-airbnb/package.json
index 97e1579393..313e61a3bb 100644
--- a/packages/eslint-config-airbnb/package.json
+++ b/packages/eslint-config-airbnb/package.json
@@ -26,7 +26,7 @@
     "airbnb",
     "javascript",
     "styleguide",
-	"es2015",
+    "es2015",
     "es2016",
     "es2017",
     "es2018"
@@ -53,7 +53,7 @@
   },
   "homepage": "https://github.com/airbnb/javascript",
   "dependencies": {
-    "eslint-config-airbnb-base": "^12.1.0",
+    "eslint-config-airbnb-base": "^13.0.0",
     "object.assign": "^4.1.0",
     "object.entries": "^1.0.4"
   },

From cae920fc308325b40f49c5e8f76bbeb5d8663fc5 Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Thu, 21 Jun 2018 15:22:10 -0700
Subject: [PATCH 1259/1591] [eslint config] v17.0.0

---
 packages/eslint-config-airbnb/CHANGELOG.md | 19 +++++++++++++++++++
 packages/eslint-config-airbnb/package.json |  2 +-
 2 files changed, 20 insertions(+), 1 deletion(-)

diff --git a/packages/eslint-config-airbnb/CHANGELOG.md b/packages/eslint-config-airbnb/CHANGELOG.md
index d19acfc7f2..14f9e6748a 100644
--- a/packages/eslint-config-airbnb/CHANGELOG.md
+++ b/packages/eslint-config-airbnb/CHANGELOG.md
@@ -1,3 +1,22 @@
+17.0.0 / 2018-06-21
+==================
+- [breaking] update `eslint-config-airbnb-base` to v13
+- [breaking] enable `no-useless-path-segments` (#1743)
+- [breaking] update `eslint-plugin-react` to `v7.6`; update rule configs (#1737)
+- [breaking] bump react pragma to v16; update `class-methods-use-this`'s `exceptMethods` to include `componentDidCatch` (#1704)
+- [new] Adds config entry point with only whitespace rules enabled (#1749, #1751)
+- [patch] set `forbid-foreign-prop-types` to "warn"
+- [patch] Add new methods introduced in react@16.3 (#1831)
+- [patch] `label-has-for`: Remove redundant component (#1802)
+- [patch] Add 'to' as a specialLink to the 'anchor-is-valid' a11y rule (#1648)
+- [patch] disable `no-did-mount-set-state`, since it’s necessary for server-rendering.
+- [deps] update `eslint`, `eslint-plugin-react`, `eslint-plugin-import`,
+- [dev deps] update `babel-preset-airbnb`, `tape`, `eslint-find-rules`
+- [meta] add ES2015-2018 in npm package keywords (#1587)
+- [meta] Add licenses to sub packages (#1746)
+- [docs] add `npx` shortcut (#1694)
+- [docs] Use HTTPS for links to ESLint documentation (#1628)
+
 16.1.0 / 2017-10-16
 ==================
 - [deps] update `eslint-config-airbnb-base`, `eslint` to v4.9
diff --git a/packages/eslint-config-airbnb/package.json b/packages/eslint-config-airbnb/package.json
index 313e61a3bb..160a44b823 100644
--- a/packages/eslint-config-airbnb/package.json
+++ b/packages/eslint-config-airbnb/package.json
@@ -1,6 +1,6 @@
 {
   "name": "eslint-config-airbnb",
-  "version": "16.1.0",
+  "version": "17.0.0",
   "description": "Airbnb's ESLint config, following our styleguide",
   "main": "index.js",
   "scripts": {

From 2161ddf8d6b608fbb91466e741f68b6a50608d26 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E8=96=9B=E5=AE=9A=E8=B0=94=E7=9A=84=E7=8C=AB?=
 <hh_2013@foxmail.com>
Date: Mon, 25 Jun 2018 02:08:15 +0800
Subject: [PATCH 1260/1591] Build: add node 10

---
 .travis.yml | 1 +
 1 file changed, 1 insertion(+)

diff --git a/.travis.yml b/.travis.yml
index bc8324b755..0f4ecc3fb1 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -1,5 +1,6 @@
 language: node_js
 node_js:
+  - "10"
   - "9"
   - "8"
   - "7"

From 8de558b7500c91e8e77e4c2446e9888844bcba77 Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Sun, 24 Jun 2018 19:41:27 -0700
Subject: [PATCH 1261/1591] [eslint config] [*] [deps] update
 `eslint-plugin-import`

---
 packages/eslint-config-airbnb-base/package.json     | 4 ++--
 packages/eslint-config-airbnb-base/rules/imports.js | 4 ++++
 packages/eslint-config-airbnb/package.json          | 4 ++--
 3 files changed, 8 insertions(+), 4 deletions(-)

diff --git a/packages/eslint-config-airbnb-base/package.json b/packages/eslint-config-airbnb-base/package.json
index bd072bf850..4fced65b6d 100644
--- a/packages/eslint-config-airbnb-base/package.json
+++ b/packages/eslint-config-airbnb-base/package.json
@@ -58,14 +58,14 @@
     "editorconfig-tools": "^0.1.1",
     "eslint": "^4.19.1",
     "eslint-find-rules": "^3.2.3",
-    "eslint-plugin-import": "^2.12.0",
+    "eslint-plugin-import": "^2.13.0",
     "in-publish": "^2.0.0",
     "safe-publish-latest": "^1.1.1",
     "tape": "^4.9.1"
   },
   "peerDependencies": {
     "eslint": "^4.19.1",
-    "eslint-plugin-import": "^2.12.0"
+    "eslint-plugin-import": "^2.13.0"
   },
   "engines": {
     "node": ">= 4"
diff --git a/packages/eslint-config-airbnb-base/rules/imports.js b/packages/eslint-config-airbnb-base/rules/imports.js
index 91d82df1cb..fbeca8dc83 100644
--- a/packages/eslint-config-airbnb-base/rules/imports.js
+++ b/packages/eslint-config-airbnb-base/rules/imports.js
@@ -239,5 +239,9 @@ module.exports = {
       importFunctions: [],
       webpackChunknameFormat: '[0-9a-zA-Z-_/.]+',
     }],
+
+    // Use this rule to prevent imports to folders in relative parent paths.
+    // https://github.com/benmosher/eslint-plugin-import/blob/c34f14f67f077acd5a61b3da9c0b0de298d20059/docs/rules/no-relative-parent-imports.md
+    'import/no-relative-parent-imports': 'off',
   },
 };
diff --git a/packages/eslint-config-airbnb/package.json b/packages/eslint-config-airbnb/package.json
index 160a44b823..f0f16ccc02 100644
--- a/packages/eslint-config-airbnb/package.json
+++ b/packages/eslint-config-airbnb/package.json
@@ -63,7 +63,7 @@
     "editorconfig-tools": "^0.1.1",
     "eslint": "^4.19.1",
     "eslint-find-rules": "^3.2.3",
-    "eslint-plugin-import": "^2.12.0",
+    "eslint-plugin-import": "^2.13.0",
     "eslint-plugin-jsx-a11y": "^6.0.3",
     "eslint-plugin-react": "^7.9.1",
     "in-publish": "^2.0.0",
@@ -73,7 +73,7 @@
   },
   "peerDependencies": {
     "eslint": "^4.19.1",
-    "eslint-plugin-import": "^2.12.0",
+    "eslint-plugin-import": "^2.13.0",
     "eslint-plugin-jsx-a11y": "^6.0.3",
     "eslint-plugin-react": "^7.9.1"
   },

From 6a593069e1055a082d3891cc50579a6d586bf3eb Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E8=96=9B=E5=AE=9A=E8=B0=94=E7=9A=84=E7=8C=AB?=
 <hh_2013@foxmail.com>
Date: Mon, 25 Jun 2018 02:09:32 +0800
Subject: [PATCH 1262/1591] [dev deps] update `markdownlint-cli`

---
 package.json | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/package.json b/package.json
index d907751ccc..1fdcd7be15 100644
--- a/package.json
+++ b/package.json
@@ -39,6 +39,6 @@
   },
   "homepage": "https://github.com/airbnb/javascript",
   "devDependencies": {
-    "markdownlint-cli": "^0.3.1"
+    "markdownlint-cli": "^0.10.0"
   }
 }

From 363bb077658906ccc809419b1ce3cb2f75b29e90 Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Sun, 24 Jun 2018 22:57:06 -0700
Subject: [PATCH 1263/1591] [eslint config] [deps] update `eslint-plugin-react`

---
 packages/eslint-config-airbnb/package.json   | 4 ++--
 packages/eslint-config-airbnb/rules/react.js | 4 ++++
 2 files changed, 6 insertions(+), 2 deletions(-)

diff --git a/packages/eslint-config-airbnb/package.json b/packages/eslint-config-airbnb/package.json
index f0f16ccc02..9e3deaa716 100644
--- a/packages/eslint-config-airbnb/package.json
+++ b/packages/eslint-config-airbnb/package.json
@@ -65,7 +65,7 @@
     "eslint-find-rules": "^3.2.3",
     "eslint-plugin-import": "^2.13.0",
     "eslint-plugin-jsx-a11y": "^6.0.3",
-    "eslint-plugin-react": "^7.9.1",
+    "eslint-plugin-react": "^7.10.0",
     "in-publish": "^2.0.0",
     "react": ">= 0.13.0",
     "safe-publish-latest": "^1.1.1",
@@ -75,7 +75,7 @@
     "eslint": "^4.19.1",
     "eslint-plugin-import": "^2.13.0",
     "eslint-plugin-jsx-a11y": "^6.0.3",
-    "eslint-plugin-react": "^7.9.1"
+    "eslint-plugin-react": "^7.10.0"
   },
   "engines": {
     "node": ">= 4"
diff --git a/packages/eslint-config-airbnb/rules/react.js b/packages/eslint-config-airbnb/rules/react.js
index 62675c1cf0..dcd3ac95be 100644
--- a/packages/eslint-config-airbnb/rules/react.js
+++ b/packages/eslint-config-airbnb/rules/react.js
@@ -445,6 +445,10 @@ module.exports = {
     // Disallow multiple spaces between inline JSX props
     // https://github.com/yannickcr/eslint-plugin-react/blob/ac102885765be5ff37847a871f239c6703e1c7cc/docs/rules/jsx-props-no-multi-spaces.md
     'react/jsx-props-no-multi-spaces': 'error',
+
+    // Prevent usage of UNSAFE_ methods
+    // https://github.com/yannickcr/eslint-plugin-react/blob/157cc932be2cfaa56b3f5b45df6f6d4322a2f660/docs/rules/no-unsafe.md
+    'react/no-unsafe': 'off',
   },
 
   settings: {

From 47021150388d1cea54c529463fe20299f1de9bb5 Mon Sep 17 00:00:00 2001
From: liyuhang <liyuhang1997@users.noreply.github.com>
Date: Mon, 25 Jun 2018 16:08:50 +0800
Subject: [PATCH 1264/1591] Fix: Typo

---
 linters/.markdownlint.json | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/linters/.markdownlint.json b/linters/.markdownlint.json
index e7a019fed8..8731243cf7 100644
--- a/linters/.markdownlint.json
+++ b/linters/.markdownlint.json
@@ -31,7 +31,7 @@
 
   "comment": "MD009: Disallow trailing spaces",
   "no-trailing-spaces": {
-    "br-spaces": 0,
+    "br_spaces": 0,
     "comment": "Empty lines inside list items should not be indented",
     "list_item_empty_lines": false
   },

From d951220399c75099838fc79577033b00530b2b90 Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Mon, 25 Jun 2018 13:40:38 -0700
Subject: [PATCH 1265/1591] [eslint config] [*] [dev deps] update
 `eslint-find-rules`

---
 packages/eslint-config-airbnb-base/package.json | 2 +-
 packages/eslint-config-airbnb/package.json      | 2 +-
 2 files changed, 2 insertions(+), 2 deletions(-)

diff --git a/packages/eslint-config-airbnb-base/package.json b/packages/eslint-config-airbnb-base/package.json
index 4fced65b6d..cb9efcf519 100644
--- a/packages/eslint-config-airbnb-base/package.json
+++ b/packages/eslint-config-airbnb-base/package.json
@@ -57,7 +57,7 @@
     "babel-tape-runner": "^2.0.1",
     "editorconfig-tools": "^0.1.1",
     "eslint": "^4.19.1",
-    "eslint-find-rules": "^3.2.3",
+    "eslint-find-rules": "^3.3.1",
     "eslint-plugin-import": "^2.13.0",
     "in-publish": "^2.0.0",
     "safe-publish-latest": "^1.1.1",
diff --git a/packages/eslint-config-airbnb/package.json b/packages/eslint-config-airbnb/package.json
index 9e3deaa716..81f50cbed4 100644
--- a/packages/eslint-config-airbnb/package.json
+++ b/packages/eslint-config-airbnb/package.json
@@ -62,7 +62,7 @@
     "babel-tape-runner": "^2.0.1",
     "editorconfig-tools": "^0.1.1",
     "eslint": "^4.19.1",
-    "eslint-find-rules": "^3.2.3",
+    "eslint-find-rules": "^3.3.1",
     "eslint-plugin-import": "^2.13.0",
     "eslint-plugin-jsx-a11y": "^6.0.3",
     "eslint-plugin-react": "^7.10.0",

From 27e5e20b70a042945a63c37ac1d9ad834fc3acd0 Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Mon, 25 Jun 2018 14:14:01 -0700
Subject: [PATCH 1266/1591] [eslint config] [base] [new] update base
 ecmaVersion to 2018; remove deprecated experimentalObjectRestSpread option

---
 packages/eslint-config-airbnb-base/index.js | 5 +----
 1 file changed, 1 insertion(+), 4 deletions(-)

diff --git a/packages/eslint-config-airbnb-base/index.js b/packages/eslint-config-airbnb-base/index.js
index 4de657b075..16b423f35d 100644
--- a/packages/eslint-config-airbnb-base/index.js
+++ b/packages/eslint-config-airbnb-base/index.js
@@ -9,11 +9,8 @@ module.exports = {
     './rules/imports',
   ].map(require.resolve),
   parserOptions: {
-    ecmaVersion: 2017,
+    ecmaVersion: 2018,
     sourceType: 'module',
-    ecmaFeatures: {
-      experimentalObjectRestSpread: true,
-    },
   },
   rules: {
     strict: 'error',

From 77fdae6a74a718d1ec32455088dbb5f964f5d271 Mon Sep 17 00:00:00 2001
From: Noah Benham <noahbenham@users.noreply.github.com>
Date: Mon, 2 Jul 2018 09:17:21 -0500
Subject: [PATCH 1267/1591] Add Cerner to In The Wild

[Cerner](https://github.com/cerner/) uses Airbnb for our JS projects.
---
 README.md | 1 +
 1 file changed, 1 insertion(+)

diff --git a/README.md b/README.md
index e486ae170e..7912c73cfc 100644
--- a/README.md
+++ b/README.md
@@ -3711,6 +3711,7 @@ Other Style Guides
   - **Bonhomme**: [bonhommeparis/javascript](https://github.com/bonhommeparis/javascript)
   - **Brainshark**: [brainshark/javascript](https://github.com/brainshark/javascript)
   - **CaseNine**: [CaseNine/javascript](https://github.com/CaseNine/javascript)
+  - **Cerner**: [Cerner](https://github.com/cerner/)
   - **Chartboost**: [ChartBoost/javascript-style-guide](https://github.com/ChartBoost/javascript-style-guide)
   - **ComparaOnline**: [comparaonline/javascript](https://github.com/comparaonline/javascript-style-guide)
   - **Compass Learning**: [compasslearning/javascript-style-guide](https://github.com/compasslearning/javascript-style-guide)

From fe8de599774bf8d312b2b94e93172e873c36df8f Mon Sep 17 00:00:00 2001
From: Ahmed Tarek <ahmed.tokyo1@gmail.com>
Date: Tue, 3 Jul 2018 21:18:11 +0200
Subject: [PATCH 1268/1591] [eslint-config] [*] [docs] :pencil2: fix typo in
 Readme

---
 packages/eslint-config-airbnb-base/README.md | 2 +-
 packages/eslint-config-airbnb/README.md      | 2 +-
 2 files changed, 2 insertions(+), 2 deletions(-)

diff --git a/packages/eslint-config-airbnb-base/README.md b/packages/eslint-config-airbnb-base/README.md
index fa0152eb04..3c1a9ce914 100644
--- a/packages/eslint-config-airbnb-base/README.md
+++ b/packages/eslint-config-airbnb-base/README.md
@@ -86,7 +86,7 @@ See [Airbnb's overarching ESLint config](https://npmjs.com/eslint-config-airbnb)
 
 ### eslint-config-airbnb-base/whitespace
 
-This entry point that only warns on whitespace rules and sets all other rules to warnings. View the list of whitespace rules [here](https://github.com/airbnb/javascript/blob/master/packages/eslint-config-airbnb-base/whitespace.js).
+This entry point only warns on whitespace rules and sets all other rules to warnings. View the list of whitespace rules [here](https://github.com/airbnb/javascript/blob/master/packages/eslint-config-airbnb-base/whitespace.js).
 
 ## Improving this config
 
diff --git a/packages/eslint-config-airbnb/README.md b/packages/eslint-config-airbnb/README.md
index 2f341ec187..f679682936 100644
--- a/packages/eslint-config-airbnb/README.md
+++ b/packages/eslint-config-airbnb/README.md
@@ -57,7 +57,7 @@ If you use yarn, run `npm info "eslint-config-airbnb@latest" peerDependencies` t
 
 ### eslint-config-airbnb/whitespace
 
-This entry point that only warns on whitespace rules and sets all other rules to warnings. View the list of whitespace rules [here](https://github.com/airbnb/javascript/blob/master/packages/eslint-config-airbnb/whitespace.js).
+This entry point only warns on whitespace rules and sets all other rules to warnings. View the list of whitespace rules [here](https://github.com/airbnb/javascript/blob/master/packages/eslint-config-airbnb/whitespace.js).
 
 ### eslint-config-airbnb/base
 

From 5d1f4b9a49ee7def65343f5efccfcce7723b9b4b Mon Sep 17 00:00:00 2001
From: Mauro Zenoni <25953912+maurozenoni@users.noreply.github.com>
Date: Tue, 3 Jul 2018 11:51:37 +0200
Subject: [PATCH 1269/1591] [guide] Updated Arrays Section

- corrected paragraph 4.4 (conversion from iterable to array)
- added paragraph 4.5 (conversion from array-like to array)
---
 README.md | 24 +++++++++++++++++++-----
 1 file changed, 19 insertions(+), 5 deletions(-)

diff --git a/README.md b/README.md
index 7912c73cfc..54cb2c0d4c 100644
--- a/README.md
+++ b/README.md
@@ -369,8 +369,9 @@ Other Style Guides
     const itemsCopy = [...items];
     ```
 
-  <a name="arrays--from"></a><a name="4.4"></a>
-  - [4.4](#arrays--from) To convert an array-like object to an array, use spreads `...` instead of [`Array.from`](https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Array/from).
+  <a name="arrays--from">
+  <a name="arrays--from-iterable"></a><a name="4.4"></a>
+  - [4.4](#arrays--from-iterable) To convert an iterable object to an array, use spreads `...` instead of [`Array.from`](https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Array/from).
 
     ```javascript
     const foo = document.querySelectorAll('.foo');
@@ -382,8 +383,21 @@ Other Style Guides
     const nodes = [...foo];
     ```
 
+  <a name="arrays--from-array-like"></a>
+  - [4.5](#arrays--from-array-like) Use [`Array.from`](https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Array/from) for converting an array-like object to an array.
+
+    ```javascript
+    const arrLike = { 0: 'foo', 1: 'bar', 2: 'baz', length: 3 };
+
+    // bad
+    const arr = Array.prototype.slice.call(arrLike);
+
+    // good
+    const arr = Array.from(arrLike);
+    ```
+
   <a name="arrays--mapping"></a>
-  - [4.5](#arrays--mapping) Use [Array.from](https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Array/from) instead of spread `...` for mapping over iterables, because it avoids creating an intermediate array.
+  - [4.6](#arrays--mapping) Use [`Array.from`](https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Array/from) instead of spread `...` for mapping over iterables, because it avoids creating an intermediate array.
 
     ```javascript
     // bad
@@ -394,7 +408,7 @@ Other Style Guides
     ```
 
   <a name="arrays--callback-return"></a><a name="4.5"></a>
-  - [4.6](#arrays--callback-return) Use return statements in array method callbacks. It’s ok to omit the return if the function body consists of a single statement returning an expression without side effects, following [8.2](#arrows--implicit-return). eslint: [`array-callback-return`](https://eslint.org/docs/rules/array-callback-return)
+  - [4.7](#arrays--callback-return) Use return statements in array method callbacks. It’s ok to omit the return if the function body consists of a single statement returning an expression without side effects, following [8.2](#arrows--implicit-return). eslint: [`array-callback-return`](https://eslint.org/docs/rules/array-callback-return)
 
     ```javascript
     // good
@@ -441,7 +455,7 @@ Other Style Guides
     ```
 
   <a name="arrays--bracket-newline"></a>
-  - [4.7](#arrays--bracket-newline) Use line breaks after open and before close array brackets if an array has multiple lines
+  - [4.8](#arrays--bracket-newline) Use line breaks after open and before close array brackets if an array has multiple lines
 
     ```javascript
     // bad

From 7dda84a335f5903d72c9423dc17f33f2c9813d2a Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Wed, 4 Jul 2018 22:33:27 -0700
Subject: [PATCH 1270/1591] [eslint config] [deps] [minor] update `jsx-a11y`
 plugin; enable `label-has-associated-control` rule

This is semver-minor, because the `label-has-associated-control` rule is
the same as the `label-has-for` rule, theoretically. Both remain
enabled, but `label-has-for` will be disabled in the future if this rule
proves out.
---
 packages/eslint-config-airbnb/package.json        |  4 ++--
 packages/eslint-config-airbnb/rules/react-a11y.js | 10 ++++++++++
 2 files changed, 12 insertions(+), 2 deletions(-)

diff --git a/packages/eslint-config-airbnb/package.json b/packages/eslint-config-airbnb/package.json
index 81f50cbed4..53079d4a07 100644
--- a/packages/eslint-config-airbnb/package.json
+++ b/packages/eslint-config-airbnb/package.json
@@ -64,7 +64,7 @@
     "eslint": "^4.19.1",
     "eslint-find-rules": "^3.3.1",
     "eslint-plugin-import": "^2.13.0",
-    "eslint-plugin-jsx-a11y": "^6.0.3",
+    "eslint-plugin-jsx-a11y": "^6.1.0",
     "eslint-plugin-react": "^7.10.0",
     "in-publish": "^2.0.0",
     "react": ">= 0.13.0",
@@ -74,7 +74,7 @@
   "peerDependencies": {
     "eslint": "^4.19.1",
     "eslint-plugin-import": "^2.13.0",
-    "eslint-plugin-jsx-a11y": "^6.0.3",
+    "eslint-plugin-jsx-a11y": "^6.1.0",
     "eslint-plugin-react": "^7.10.0"
   },
   "engines": {
diff --git a/packages/eslint-config-airbnb/rules/react-a11y.js b/packages/eslint-config-airbnb/rules/react-a11y.js
index f53b3d22f6..dbb073fa67 100644
--- a/packages/eslint-config-airbnb/rules/react-a11y.js
+++ b/packages/eslint-config-airbnb/rules/react-a11y.js
@@ -56,6 +56,16 @@ module.exports = {
       allowChildren: false,
     }],
 
+    // Enforce that a label tag has a text label and an associated control.
+    // https://github.com/evcohen/eslint-plugin-jsx-a11y/blob/b800f40a2a69ad48015ae9226fbe879f946757ed/docs/rules/label-has-associated-control.md
+    'jsx-a11y/label-has-associated-control': ['error', {
+      labelComponents: [],
+      labelAttributes: [],
+      controlComponents: [],
+      assert: 'both',
+      depth: 25
+    }],
+
     // require that mouseover/out come with focus/blur, for keyboard-only users
     // https://github.com/evcohen/eslint-plugin-jsx-a11y/blob/master/docs/rules/mouse-events-have-key-events.md
     'jsx-a11y/mouse-events-have-key-events': 'error',

From 2037fd82b9260db71758aedc513e86b7df23c01e Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Mon, 25 Jun 2018 15:48:07 -0700
Subject: [PATCH 1271/1591] [Tests] link eslint from the base config as well

---
 packages/eslint-config-airbnb/package.json | 5 +++--
 1 file changed, 3 insertions(+), 2 deletions(-)

diff --git a/packages/eslint-config-airbnb/package.json b/packages/eslint-config-airbnb/package.json
index 53079d4a07..fd25457d7b 100644
--- a/packages/eslint-config-airbnb/package.json
+++ b/packages/eslint-config-airbnb/package.json
@@ -11,9 +11,10 @@
     "prepublish": "(in-install || eslint-find-rules --unused) && (not-in-publish || npm test) && safe-publish-latest",
     "pretest": "npm run --silent lint",
     "test": "npm run --silent tests-only",
-    "pretravis": "cd ../eslint-config-airbnb-base && npm install && npm link && cd - && npm link --no-save eslint-config-airbnb-base",
+    "link:eslint": "cd node_modules/eslint && npm link && cd -",
+    "pretravis": "npm run link:eslint && cd ../eslint-config-airbnb-base && npm link eslint && npm install && npm link && cd - && npm link --no-save eslint-config-airbnb-base",
     "travis": "npm run --silent test",
-    "posttravis": "npm unlink --no-save eslint-config-airbnb-base >/dev/null &"
+    "posttravis": "npm unlink --no-save eslint-config-airbnb-base eslint >/dev/null &"
   },
   "repository": {
     "type": "git",

From a510095acf20e3d96a94e6d0d0b26cfac71d2c7f Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Mon, 25 Jun 2018 15:06:18 -0700
Subject: [PATCH 1272/1591] [eslint config] [*] [new] add eslint v5 support

---
 .travis.yml                                   | 23 ++++++++++++++++---
 .../eslint-config-airbnb-base/package.json    |  4 ++--
 .../rules/best-practices.js                   | 10 +++++++-
 .../eslint-config-airbnb-base/rules/style.js  | 16 +++++++++++++
 packages/eslint-config-airbnb/package.json    |  4 ++--
 5 files changed, 49 insertions(+), 8 deletions(-)

diff --git a/.travis.yml b/.travis.yml
index 0f4ecc3fb1..2fcc94de67 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -18,20 +18,37 @@ script:
 sudo: false
 env:
   matrix:
-    - 'TEST=true ESLINT=4 PACKAGE=eslint-config-airbnb'
+    - 'TEST=true ESLINT=5 PACKAGE=eslint-config-airbnb-base'
+    - 'TEST=true ESLINT=5 PACKAGE=eslint-config-airbnb'
     - 'TEST=true ESLINT=4 PACKAGE=eslint-config-airbnb-base'
+    - 'TEST=true ESLINT=4 PACKAGE=eslint-config-airbnb'
 matrix:
   fast_finish: true
   include:
     - node_js: "lts/*"
-      env: PREPUBLISH=true ESLINT=4 PACKAGE=eslint-config-airbnb
+      env: PREPUBLISH=true ESLINT=5 PACKAGE=eslint-config-airbnb-base
+    - node_js: "lts/*"
+      env: PREPUBLISH=true ESLINT=5 PACKAGE=eslint-config-airbnb
     - node_js: "lts/*"
       env: PREPUBLISH=true ESLINT=4 PACKAGE=eslint-config-airbnb-base
+    - node_js: "lts/*"
+      env: PREPUBLISH=true ESLINT=4 PACKAGE=eslint-config-airbnb
     - node_js: "lts/*"
       env: LINT=true
+  exclude:
+    - node_js: "5"
+      env: TEST=true ESLINT=5 PACKAGE=eslint-config-airbnb-base
+    - node_js: "5"
+      env: TEST=true ESLINT=5 PACKAGE=eslint-config-airbnb
+    - node_js: "4"
+      env: TEST=true ESLINT=5 PACKAGE=eslint-config-airbnb-base
+    - node_js: "4"
+      env: TEST=true ESLINT=5 PACKAGE=eslint-config-airbnb
   allow_failures:
     - node_js: "9"
     - node_js: "7"
     - node_js: "5"
-    - env: PREPUBLISH=true ESLINT=4 PACKAGE=eslint-config-airbnb
+    - env: PREPUBLISH=true ESLINT=5 PACKAGE=eslint-config-airbnb-base
+    - env: PREPUBLISH=true ESLINT=5 PACKAGE=eslint-config-airbnb
     - env: PREPUBLISH=true ESLINT=4 PACKAGE=eslint-config-airbnb-base
+    - env: PREPUBLISH=true ESLINT=4 PACKAGE=eslint-config-airbnb
diff --git a/packages/eslint-config-airbnb-base/package.json b/packages/eslint-config-airbnb-base/package.json
index cb9efcf519..1bdfc3b2ff 100644
--- a/packages/eslint-config-airbnb-base/package.json
+++ b/packages/eslint-config-airbnb-base/package.json
@@ -56,7 +56,7 @@
     "babel-preset-airbnb": "^2.5.1",
     "babel-tape-runner": "^2.0.1",
     "editorconfig-tools": "^0.1.1",
-    "eslint": "^4.19.1",
+    "eslint": "^4.19.1 || ^5.0.1",
     "eslint-find-rules": "^3.3.1",
     "eslint-plugin-import": "^2.13.0",
     "in-publish": "^2.0.0",
@@ -64,7 +64,7 @@
     "tape": "^4.9.1"
   },
   "peerDependencies": {
-    "eslint": "^4.19.1",
+    "eslint": "^4.19.1 || ^5.0.1",
     "eslint-plugin-import": "^2.13.0"
   },
   "engines": {
diff --git a/packages/eslint-config-airbnb-base/rules/best-practices.js b/packages/eslint-config-airbnb-base/rules/best-practices.js
index b5712d00b2..421b591488 100644
--- a/packages/eslint-config-airbnb-base/rules/best-practices.js
+++ b/packages/eslint-config-airbnb-base/rules/best-practices.js
@@ -42,6 +42,11 @@ module.exports = {
     // make sure for-in loops have an if statement
     'guard-for-in': 'error',
 
+    // enforce a maximum number of classes per file
+    // https://eslint.org/docs/rules/max-classes-per-file
+    // TODO: semver-major (eslint 5): enable
+    'max-classes-per-file': ['off', 1],
+
     // disallow the use of alert, confirm, and prompt
     'no-alert': 'warn',
 
@@ -243,7 +248,10 @@ module.exports = {
 
     // disallow self assignment
     // https://eslint.org/docs/rules/no-self-assign
-    'no-self-assign': 'error',
+    // TODO: semver-major: props -> true
+    'no-self-assign': ['error', {
+      props: false,
+    }],
 
     // disallow comparisons where both sides are exactly the same
     'no-self-compare': 'error',
diff --git a/packages/eslint-config-airbnb-base/rules/style.js b/packages/eslint-config-airbnb-base/rules/style.js
index ca8fc07ae6..ee5408f81c 100644
--- a/packages/eslint-config-airbnb-base/rules/style.js
+++ b/packages/eslint-config-airbnb-base/rules/style.js
@@ -21,6 +21,7 @@ module.exports = {
     'brace-style': ['error', '1tbs', { allowSingleLine: true }],
 
     // require camel case names
+    // TODO: semver-major (eslint 5): add ignoreDestructuring: false option
     camelcase: ['error', { properties: 'never' }],
 
     // enforce or disallow capitalization of the first letter of a comment
@@ -83,6 +84,7 @@ module.exports = {
     // requires function names to match the name of the variable or property to which they are
     // assigned
     // https://eslint.org/docs/rules/func-name-matching
+    // TODO: semver-major (eslint 5): add considerPropertyDescriptor: true
     'func-name-matching': ['off', 'always', {
       includeCommonJSModuleExports: false
     }],
@@ -208,6 +210,15 @@ module.exports = {
       skipComments: true
     }],
 
+    // enforce a maximum function length
+    // https://eslint.org/docs/rules/max-lines-per-function
+    'max-lines-per-function': ['off', {
+      max: 50,
+      skipBlankLines: true,
+      skipComments: true,
+      IIFEs: true,
+    }],
+
     // specify the maximum depth callbacks can be nested
     'max-nested-callbacks': 'off',
 
@@ -416,6 +427,11 @@ module.exports = {
     // https://eslint.org/docs/rules/padding-line-between-statements
     'padding-line-between-statements': 'off',
 
+    // Prefer use of an object spread over Object.assign
+    // https://eslint.org/docs/rules/prefer-object-spread
+    // TODO: semver-major (eslint 5): enable
+    'prefer-object-spread': 'off',
+
     // require quotes around object literal property names
     // https://eslint.org/docs/rules/quote-props.html
     'quote-props': ['error', 'as-needed', { keywords: false, unnecessary: true, numbers: false }],
diff --git a/packages/eslint-config-airbnb/package.json b/packages/eslint-config-airbnb/package.json
index fd25457d7b..63dbe709eb 100644
--- a/packages/eslint-config-airbnb/package.json
+++ b/packages/eslint-config-airbnb/package.json
@@ -62,7 +62,7 @@
     "babel-preset-airbnb": "^2.5.1",
     "babel-tape-runner": "^2.0.1",
     "editorconfig-tools": "^0.1.1",
-    "eslint": "^4.19.1",
+    "eslint": "^4.19.1 || ^5.0.1",
     "eslint-find-rules": "^3.3.1",
     "eslint-plugin-import": "^2.13.0",
     "eslint-plugin-jsx-a11y": "^6.1.0",
@@ -73,7 +73,7 @@
     "tape": "^4.9.1"
   },
   "peerDependencies": {
-    "eslint": "^4.19.1",
+    "eslint": "^4.19.1 || ^5.0.1",
     "eslint-plugin-import": "^2.13.0",
     "eslint-plugin-jsx-a11y": "^6.1.0",
     "eslint-plugin-react": "^7.10.0"

From 96317f8c79d6c5a6e9478a49eb89770863c4e6e1 Mon Sep 17 00:00:00 2001
From: Vse Mozhet Byt <vsemozhetbyt@gmail.com>
Date: Thu, 5 Jul 2018 16:48:26 +0300
Subject: [PATCH 1273/1591] [guide] fix anchor tag in README.md

Currently, this anchor with missing end tag breaks rendering:

https://github.com/airbnb/javascript/blob/5d1f4b9a49ee7def65343f5efccfcce7723b9b4b/README.md#arrays--from-iterable
---
 README.md | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/README.md b/README.md
index 54cb2c0d4c..ae13bca33a 100644
--- a/README.md
+++ b/README.md
@@ -369,7 +369,7 @@ Other Style Guides
     const itemsCopy = [...items];
     ```
 
-  <a name="arrays--from">
+  <a name="arrays--from"></a>
   <a name="arrays--from-iterable"></a><a name="4.4"></a>
   - [4.4](#arrays--from-iterable) To convert an iterable object to an array, use spreads `...` instead of [`Array.from`](https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Array/from).
 

From b6a268f780177e03b573a4f0df95ecc0d2e8783e Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Mon, 9 Jul 2018 23:16:25 -0700
Subject: [PATCH 1274/1591] [eslint config] [react] disable two buggy rules,
 temporarily

---
 packages/eslint-config-airbnb/rules/react.js | 6 ++++--
 1 file changed, 4 insertions(+), 2 deletions(-)

diff --git a/packages/eslint-config-airbnb/rules/react.js b/packages/eslint-config-airbnb/rules/react.js
index dcd3ac95be..7d82df1302 100644
--- a/packages/eslint-config-airbnb/rules/react.js
+++ b/packages/eslint-config-airbnb/rules/react.js
@@ -413,11 +413,13 @@ module.exports = {
 
     // One JSX Element Per Line
     // https://github.com/yannickcr/eslint-plugin-react/blob/843d71a432baf0f01f598d7cf1eea75ad6896e4b/docs/rules/jsx-one-expression-per-line.md
-    'react/jsx-one-expression-per-line': 'error',
+    // TODO: re-enable when an option for text children is available
+    'react/jsx-one-expression-per-line': 'off',
 
     // Enforce consistent usage of destructuring assignment of props, state, and context
     // https://github.com/yannickcr/eslint-plugin-react/blob/843d71a432baf0f01f598d7cf1eea75ad6896e4b/docs/rules/destructuring-assignment.md
-    'react/destructuring-assignment': ['error', 'always'],
+    // TODO: re-enable when component detection is fixed
+    'react/destructuring-assignment': ['off', 'always'],
 
     // Prevent using this.state within a this.setState
     // https://github.com/yannickcr/eslint-plugin-react/blob/843d71a432baf0f01f598d7cf1eea75ad6896e4b/docs/rules/no-access-state-in-setstate.md

From a12dec90d173464a3fc4e4536b8c6f639fb93236 Mon Sep 17 00:00:00 2001
From: Andrew Scheuermann <andrew.scheuermann@airbnb.com>
Date: Wed, 11 Jul 2018 16:26:22 -0700
Subject: [PATCH 1275/1591] [guide] [react] boolean in jsx alignment

---
 react/README.md | 19 +++++++++++++++++++
 1 file changed, 19 insertions(+)

diff --git a/react/README.md b/react/README.md
index c4fcf76d56..340e780c01 100644
--- a/react/README.md
+++ b/react/README.md
@@ -193,6 +193,25 @@ This style guide is mostly based on the standards that are currently prevalent i
     >
       <Quux />
     </Foo>
+
+    // bad
+    {showButton &&
+      <Button />
+    }
+
+    // bad
+    {
+      showButton &&
+        <Button />
+    }
+
+    // good
+    {showButton && (
+      <Button />
+    )}
+
+    // good
+    {showButton && <Button />}
     ```
 
 ## Quotes

From 32a674de0b9459ee1e3220db3a7f41b197ac61ab Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Fri, 3 Aug 2018 21:18:03 -0700
Subject: [PATCH 1276/1591] [eslint config] [*] [deps] update `eslint`,
 `babel-preset-airbnb`, `eslint-plugin-jsx-a11y`

---
 packages/eslint-config-airbnb-base/package.json   |  6 +++---
 .../rules/best-practices.js                       |  4 ++++
 .../eslint-config-airbnb-base/rules/errors.js     | 15 +++++++++++++++
 packages/eslint-config-airbnb/package.json        | 10 +++++-----
 4 files changed, 27 insertions(+), 8 deletions(-)

diff --git a/packages/eslint-config-airbnb-base/package.json b/packages/eslint-config-airbnb-base/package.json
index 1bdfc3b2ff..751ae67ea2 100644
--- a/packages/eslint-config-airbnb-base/package.json
+++ b/packages/eslint-config-airbnb-base/package.json
@@ -53,10 +53,10 @@
   },
   "homepage": "https://github.com/airbnb/javascript",
   "devDependencies": {
-    "babel-preset-airbnb": "^2.5.1",
+    "babel-preset-airbnb": "^2.5.3",
     "babel-tape-runner": "^2.0.1",
     "editorconfig-tools": "^0.1.1",
-    "eslint": "^4.19.1 || ^5.0.1",
+    "eslint": "^4.19.1 || ^5.3.0",
     "eslint-find-rules": "^3.3.1",
     "eslint-plugin-import": "^2.13.0",
     "in-publish": "^2.0.0",
@@ -64,7 +64,7 @@
     "tape": "^4.9.1"
   },
   "peerDependencies": {
-    "eslint": "^4.19.1 || ^5.0.1",
+    "eslint": "^4.19.1 || ^5.3.0",
     "eslint-plugin-import": "^2.13.0"
   },
   "engines": {
diff --git a/packages/eslint-config-airbnb-base/rules/best-practices.js b/packages/eslint-config-airbnb-base/rules/best-practices.js
index 421b591488..fbd65cf7d3 100644
--- a/packages/eslint-config-airbnb-base/rules/best-practices.js
+++ b/packages/eslint-config-airbnb-base/rules/best-practices.js
@@ -313,6 +313,10 @@ module.exports = {
     // https://eslint.org/docs/rules/require-await
     'require-await': 'off',
 
+    // Enforce the use of u flag on RegExp
+    // https://eslint.org/docs/rules/require-unicode-regexp
+    'require-unicode-regexp': 'off',
+
     // requires to declare all vars on top of their containing scope
     'vars-on-top': 'error',
 
diff --git a/packages/eslint-config-airbnb-base/rules/errors.js b/packages/eslint-config-airbnb-base/rules/errors.js
index 8cae2b525e..aca6d7d9c3 100644
--- a/packages/eslint-config-airbnb-base/rules/errors.js
+++ b/packages/eslint-config-airbnb-base/rules/errors.js
@@ -8,6 +8,11 @@ module.exports = {
     // https://eslint.org/docs/rules/getter-return
     'getter-return': ['error', { allowImplicit: true }],
 
+    // disallow using an async function as a Promise executor
+    // https://eslint.org/docs/rules/no-async-promise-executor
+    // TODO: enable, semver-major
+    'no-async-promise-executor': 'off',
+
     // Disallow await inside of loops
     // https://eslint.org/docs/rules/no-await-in-loop
     'no-await-in-loop': 'error',
@@ -78,6 +83,11 @@ module.exports = {
     // disallow irregular whitespace outside of strings and comments
     'no-irregular-whitespace': 'error',
 
+    // Disallow characters which are made with multiple code points in character class syntax
+    // https://eslint.org/docs/rules/no-misleading-character-class
+    // TODO: enable, semver-major
+    'no-misleading-character-class': 'off',
+
     // disallow the use of object properties of the global object (Math and JSON) as functions
     'no-obj-calls': 'error',
 
@@ -113,6 +123,11 @@ module.exports = {
     // deprecated in favor of no-unsafe-negation
     'no-negated-in-lhs': 'off',
 
+    // Disallow assignments that can lead to race conditions due to usage of await or yield
+    // https://eslint.org/docs/rules/require-atomic-updates
+    // TODO: enable, semver-major
+    'require-atomic-updates': 'off',
+
     // disallow comparisons with the value NaN
     'use-isnan': 'error',
 
diff --git a/packages/eslint-config-airbnb/package.json b/packages/eslint-config-airbnb/package.json
index 63dbe709eb..acd7e04a28 100644
--- a/packages/eslint-config-airbnb/package.json
+++ b/packages/eslint-config-airbnb/package.json
@@ -59,13 +59,13 @@
     "object.entries": "^1.0.4"
   },
   "devDependencies": {
-    "babel-preset-airbnb": "^2.5.1",
+    "babel-preset-airbnb": "^2.5.3",
     "babel-tape-runner": "^2.0.1",
     "editorconfig-tools": "^0.1.1",
-    "eslint": "^4.19.1 || ^5.0.1",
+    "eslint": "^4.19.1 || ^5.3.0",
     "eslint-find-rules": "^3.3.1",
     "eslint-plugin-import": "^2.13.0",
-    "eslint-plugin-jsx-a11y": "^6.1.0",
+    "eslint-plugin-jsx-a11y": "^6.1.1",
     "eslint-plugin-react": "^7.10.0",
     "in-publish": "^2.0.0",
     "react": ">= 0.13.0",
@@ -73,9 +73,9 @@
     "tape": "^4.9.1"
   },
   "peerDependencies": {
-    "eslint": "^4.19.1 || ^5.0.1",
+    "eslint": "^4.19.1 || ^5.3.0",
     "eslint-plugin-import": "^2.13.0",
-    "eslint-plugin-jsx-a11y": "^6.1.0",
+    "eslint-plugin-jsx-a11y": "^6.1.1",
     "eslint-plugin-react": "^7.10.0"
   },
   "engines": {

From dfb70d62448e315f0ad6adffe29d7ea136feb61b Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Mon, 13 Aug 2018 00:51:32 -0700
Subject: [PATCH 1277/1591] [*] [deps] update `eslint-plugin-import`,
 `safe-publish-latest`

---
 packages/eslint-config-airbnb-base/package.json | 6 +++---
 packages/eslint-config-airbnb/package.json      | 6 +++---
 2 files changed, 6 insertions(+), 6 deletions(-)

diff --git a/packages/eslint-config-airbnb-base/package.json b/packages/eslint-config-airbnb-base/package.json
index 751ae67ea2..fcc89c93bb 100644
--- a/packages/eslint-config-airbnb-base/package.json
+++ b/packages/eslint-config-airbnb-base/package.json
@@ -58,14 +58,14 @@
     "editorconfig-tools": "^0.1.1",
     "eslint": "^4.19.1 || ^5.3.0",
     "eslint-find-rules": "^3.3.1",
-    "eslint-plugin-import": "^2.13.0",
+    "eslint-plugin-import": "^2.14.0",
     "in-publish": "^2.0.0",
-    "safe-publish-latest": "^1.1.1",
+    "safe-publish-latest": "^1.1.2",
     "tape": "^4.9.1"
   },
   "peerDependencies": {
     "eslint": "^4.19.1 || ^5.3.0",
-    "eslint-plugin-import": "^2.13.0"
+    "eslint-plugin-import": "^2.14.0"
   },
   "engines": {
     "node": ">= 4"
diff --git a/packages/eslint-config-airbnb/package.json b/packages/eslint-config-airbnb/package.json
index acd7e04a28..41be55c7ef 100644
--- a/packages/eslint-config-airbnb/package.json
+++ b/packages/eslint-config-airbnb/package.json
@@ -64,17 +64,17 @@
     "editorconfig-tools": "^0.1.1",
     "eslint": "^4.19.1 || ^5.3.0",
     "eslint-find-rules": "^3.3.1",
-    "eslint-plugin-import": "^2.13.0",
+    "eslint-plugin-import": "^2.14.0",
     "eslint-plugin-jsx-a11y": "^6.1.1",
     "eslint-plugin-react": "^7.10.0",
     "in-publish": "^2.0.0",
     "react": ">= 0.13.0",
-    "safe-publish-latest": "^1.1.1",
+    "safe-publish-latest": "^1.1.2",
     "tape": "^4.9.1"
   },
   "peerDependencies": {
     "eslint": "^4.19.1 || ^5.3.0",
-    "eslint-plugin-import": "^2.13.0",
+    "eslint-plugin-import": "^2.14.0",
     "eslint-plugin-jsx-a11y": "^6.1.1",
     "eslint-plugin-react": "^7.10.0"
   },

From 45326cce63f38de3a01ecb95c33846d2b6b9ef72 Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Mon, 13 Aug 2018 00:54:48 -0700
Subject: [PATCH 1278/1591] [eslint-config-airbnb-base] v13.1.0

---
 packages/eslint-config-airbnb-base/CHANGELOG.md | 7 +++++++
 packages/eslint-config-airbnb-base/package.json | 2 +-
 2 files changed, 8 insertions(+), 1 deletion(-)

diff --git a/packages/eslint-config-airbnb-base/CHANGELOG.md b/packages/eslint-config-airbnb-base/CHANGELOG.md
index daff7f51a7..c945013b25 100644
--- a/packages/eslint-config-airbnb-base/CHANGELOG.md
+++ b/packages/eslint-config-airbnb-base/CHANGELOG.md
@@ -1,3 +1,10 @@
+13.1.0 / 2018-08-13
+==================
+ - [new] add eslint v5 support (#1834)
+ - [deps] update `eslint-plugin-import`, `eslint`, `babel-preset-airbnb`, `safe-publish-latest`, `eslint-find-rules`
+ - [docs] fix typo in readme (#1855)
+ - [new] update base ecmaVersion to 2018; remove deprecated experimentalObjectRestSpread option
+
 13.0.0 / 2018-06-21
 ==================
  - [breaking] order of import statements is ignored for unassigned imports (#1782)
diff --git a/packages/eslint-config-airbnb-base/package.json b/packages/eslint-config-airbnb-base/package.json
index fcc89c93bb..91bcb47195 100644
--- a/packages/eslint-config-airbnb-base/package.json
+++ b/packages/eslint-config-airbnb-base/package.json
@@ -1,6 +1,6 @@
 {
   "name": "eslint-config-airbnb-base",
-  "version": "13.0.0",
+  "version": "13.1.0",
   "description": "Airbnb's base JS ESLint config, following our styleguide",
   "main": "index.js",
   "scripts": {

From 152b914935426992cc11aa597c6907508ffe7dbc Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Mon, 13 Aug 2018 13:31:33 -0700
Subject: [PATCH 1279/1591] [eslint config] [deps] update
 `eslint-config-airbnb-base`, `eslint-plugin-react`

---
 packages/eslint-config-airbnb/package.json | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/packages/eslint-config-airbnb/package.json b/packages/eslint-config-airbnb/package.json
index 41be55c7ef..bd6c678997 100644
--- a/packages/eslint-config-airbnb/package.json
+++ b/packages/eslint-config-airbnb/package.json
@@ -54,7 +54,7 @@
   },
   "homepage": "https://github.com/airbnb/javascript",
   "dependencies": {
-    "eslint-config-airbnb-base": "^13.0.0",
+    "eslint-config-airbnb-base": "^13.1.0",
     "object.assign": "^4.1.0",
     "object.entries": "^1.0.4"
   },
@@ -66,7 +66,7 @@
     "eslint-find-rules": "^3.3.1",
     "eslint-plugin-import": "^2.14.0",
     "eslint-plugin-jsx-a11y": "^6.1.1",
-    "eslint-plugin-react": "^7.10.0",
+    "eslint-plugin-react": "^7.11.0",
     "in-publish": "^2.0.0",
     "react": ">= 0.13.0",
     "safe-publish-latest": "^1.1.2",
@@ -76,7 +76,7 @@
     "eslint": "^4.19.1 || ^5.3.0",
     "eslint-plugin-import": "^2.14.0",
     "eslint-plugin-jsx-a11y": "^6.1.1",
-    "eslint-plugin-react": "^7.10.0"
+    "eslint-plugin-react": "^7.11.0"
   },
   "engines": {
     "node": ">= 4"

From 9a5267684b59106523cf5419439fd0d53c0a512e Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Mon, 13 Aug 2018 13:35:23 -0700
Subject: [PATCH 1280/1591] [eslint config] [patch] re-enabling
 `jsx-one-expression-per-line` allowing single children, ignore DOM components
 on `jsx-no-bind`; re-enable `restructuring-assignment`

Reverts b6a268f780177e03b573a4f0df95ecc0d2e8783e
---
 packages/eslint-config-airbnb/rules/react.js | 8 ++++----
 1 file changed, 4 insertions(+), 4 deletions(-)

diff --git a/packages/eslint-config-airbnb/rules/react.js b/packages/eslint-config-airbnb/rules/react.js
index 7d82df1302..527274dad6 100644
--- a/packages/eslint-config-airbnb/rules/react.js
+++ b/packages/eslint-config-airbnb/rules/react.js
@@ -93,7 +93,9 @@ module.exports = {
     'react/jsx-no-bind': ['error', {
       ignoreRefs: true,
       allowArrowFunctions: true,
+      allowFunctions: false,
       allowBind: false,
+      ignoreDOMComponents: true,
     }],
 
     // Prevent duplicate props in JSX
@@ -413,13 +415,11 @@ module.exports = {
 
     // One JSX Element Per Line
     // https://github.com/yannickcr/eslint-plugin-react/blob/843d71a432baf0f01f598d7cf1eea75ad6896e4b/docs/rules/jsx-one-expression-per-line.md
-    // TODO: re-enable when an option for text children is available
-    'react/jsx-one-expression-per-line': 'off',
+    'react/jsx-one-expression-per-line': ['error', { allow: 'single-child' }],
 
     // Enforce consistent usage of destructuring assignment of props, state, and context
     // https://github.com/yannickcr/eslint-plugin-react/blob/843d71a432baf0f01f598d7cf1eea75ad6896e4b/docs/rules/destructuring-assignment.md
-    // TODO: re-enable when component detection is fixed
-    'react/destructuring-assignment': ['off', 'always'],
+    'react/destructuring-assignment': ['error', 'always'],
 
     // Prevent using this.state within a this.setState
     // https://github.com/yannickcr/eslint-plugin-react/blob/843d71a432baf0f01f598d7cf1eea75ad6896e4b/docs/rules/no-access-state-in-setstate.md

From 685f37be39fd01bcfdd349de9acdcd5a50414520 Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Mon, 13 Aug 2018 13:39:50 -0700
Subject: [PATCH 1281/1591] [eslint config] v17.1.0

---
 packages/eslint-config-airbnb/CHANGELOG.md | 8 ++++++++
 packages/eslint-config-airbnb/package.json | 2 +-
 2 files changed, 9 insertions(+), 1 deletion(-)

diff --git a/packages/eslint-config-airbnb/CHANGELOG.md b/packages/eslint-config-airbnb/CHANGELOG.md
index 14f9e6748a..87bbfc8823 100644
--- a/packages/eslint-config-airbnb/CHANGELOG.md
+++ b/packages/eslint-config-airbnb/CHANGELOG.md
@@ -1,3 +1,11 @@
+17.1.0 / 2018-08-13
+==================
+- [new] add eslint v5 support
+- [minor] enable `label-has-associated-control` rule
+- [patch] re-enabling `jsx-one-expression-per-line` allowing single children, ignore DOM components on `jsx-no-bind`
+- [deps] update `eslint`, `eslint-config-airbnb-base`, `eslint-plugin-react`, `eslint-plugin-import`, `safe-publish-latest`, `eslint-plugin-jsx-a11y`, `eslint-find-rules`
+- [docs] fix readme typo (#1855)
+
 17.0.0 / 2018-06-21
 ==================
 - [breaking] update `eslint-config-airbnb-base` to v13
diff --git a/packages/eslint-config-airbnb/package.json b/packages/eslint-config-airbnb/package.json
index bd6c678997..b45487a126 100644
--- a/packages/eslint-config-airbnb/package.json
+++ b/packages/eslint-config-airbnb/package.json
@@ -1,6 +1,6 @@
 {
   "name": "eslint-config-airbnb",
-  "version": "17.0.0",
+  "version": "17.1.0",
   "description": "Airbnb's ESLint config, following our styleguide",
   "main": "index.js",
   "scripts": {

From ced1cb3ad8a9bb880cfe6eb0de878027ccb933b1 Mon Sep 17 00:00:00 2001
From: Kevin Weber <k-iwi@web.de>
Date: Sun, 26 Aug 2018 17:15:08 -0700
Subject: [PATCH 1282/1591] List bad example first to be consistent

---
 react/README.md | 8 ++++----
 1 file changed, 4 insertions(+), 4 deletions(-)

diff --git a/react/README.md b/react/README.md
index 340e780c01..a3236574a9 100644
--- a/react/README.md
+++ b/react/README.md
@@ -440,16 +440,16 @@ This style guide is mostly based on the standards that are currently prevalent i
   Filter out unnecessary props when possible. Also, use [prop-types-exact](https://www.npmjs.com/package/prop-types-exact) to help prevent bugs.
 
   ```jsx
-  // good
+  // bad
   render() {
     const { irrelevantProp, ...relevantProps  } = this.props;
-    return <WrappedComponent {...relevantProps} />
+    return <WrappedComponent {...this.props} />
   }
 
-  // bad
+  // good
   render() {
     const { irrelevantProp, ...relevantProps  } = this.props;
-    return <WrappedComponent {...this.props} />
+    return <WrappedComponent {...relevantProps} />
   }
   ```
 

From fcfd378dd87f609be445d71e89b9141a8800827b Mon Sep 17 00:00:00 2001
From: Kevin Weber <k-iwi@web.de>
Date: Sat, 25 Aug 2018 22:54:31 -0700
Subject: [PATCH 1283/1591] Fix outdated link to Airbnb's Neutrino preset

---
 README.md | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/README.md b/README.md
index ae13bca33a..e34b2c30cf 100644
--- a/README.md
+++ b/README.md
@@ -3641,7 +3641,7 @@ Other Style Guides
   - Code Style Linters
     - [ESlint](https://eslint.org/) - [Airbnb Style .eslintrc](https://github.com/airbnb/javascript/blob/master/linters/.eslintrc)
     - [JSHint](http://jshint.com/) - [Airbnb Style .jshintrc](https://github.com/airbnb/javascript/blob/master/linters/.jshintrc)
-  - Neutrino preset - [neutrino-preset-airbnb-base](https://neutrino.js.org/presets/neutrino-preset-airbnb-base/)
+  - Neutrino Preset - [@neutrinojs/airbnb](https://neutrinojs.org/packages/airbnb/)
 
 **Other Style Guides**
 

From 5443d03de2df6d0579be15e3739d8dd1449fad36 Mon Sep 17 00:00:00 2001
From: Kevin Weber <k-iwi@web.de>
Date: Sun, 26 Aug 2018 17:50:48 -0700
Subject: [PATCH 1284/1591] [guide] Consistently use curly quotes instead of
 straight quotes in prose

---
 README.md       | 16 ++++++++--------
 react/README.md | 12 ++++++------
 2 files changed, 14 insertions(+), 14 deletions(-)

diff --git a/README.md b/README.md
index e34b2c30cf..f28bf24a7c 100644
--- a/README.md
+++ b/README.md
@@ -81,7 +81,7 @@ Other Style Guides
     console.log(foo, bar); // => 1, 9
     ```
 
-    - Symbols cannot be faithfully polyfilled, so they should not be used when targeting browsers/environments that don't support them natively.
+    - Symbols cannot be faithfully polyfilled, so they should not be used when targeting browsers/environments that don’t support them natively.
 
   <a name="types--complex"></a><a name="1.2"></a>
   - [1.2](#types--complex)  **Complex**: When you access a complex type you work on a reference to its value.
@@ -650,7 +650,7 @@ Other Style Guides
   <a name="functions--declarations"></a><a name="7.1"></a>
   - [7.1](#functions--declarations) Use named function expressions instead of function declarations. eslint: [`func-style`](https://eslint.org/docs/rules/func-style)
 
-    > Why? Function declarations are hoisted, which means that it’s easy - too easy - to reference the function before it is defined in the file. This harms readability and maintainability. If you find that a function’s definition is large or complex enough that it is interfering with understanding the rest of the file, then perhaps it’s time to extract it to its own module! Don’t forget to explicitly name the expression, regardless of whether or not the name is inferred from the containing variable (which is often the case in modern browsers or when using compilers such as Babel). This eliminates any assumptions made about the Error's call stack. ([Discussion](https://github.com/airbnb/javascript/issues/794))
+    > Why? Function declarations are hoisted, which means that it’s easy - too easy - to reference the function before it is defined in the file. This harms readability and maintainability. If you find that a function’s definition is large or complex enough that it is interfering with understanding the rest of the file, then perhaps it’s time to extract it to its own module! Don’t forget to explicitly name the expression, regardless of whether or not the name is inferred from the containing variable (which is often the case in modern browsers or when using compilers such as Babel). This eliminates any assumptions made about the Error’s call stack. ([Discussion](https://github.com/airbnb/javascript/issues/794))
 
     ```javascript
     // bad
@@ -2105,7 +2105,7 @@ Other Style Guides
     ```
 
   <a name="blocks--cuddled-elses"></a><a name="16.2"></a>
-  - [16.2](#blocks--cuddled-elses) If you're using multi-line blocks with `if` and `else`, put `else` on the same line as your `if` block’s closing brace. eslint: [`brace-style`](https://eslint.org/docs/rules/brace-style.html)
+  - [16.2](#blocks--cuddled-elses) If you’re using multi-line blocks with `if` and `else`, put `else` on the same line as your `if` block’s closing brace. eslint: [`brace-style`](https://eslint.org/docs/rules/brace-style.html)
 
     ```javascript
     // bad
@@ -2373,7 +2373,7 @@ Other Style Guides
     ```
 
   <a name="comments--actionitems"></a><a name="17.3"></a>
-  - [18.4](#comments--actionitems) Prefixing your comments with `FIXME` or `TODO` helps other developers quickly understand if you're pointing out a problem that needs to be revisited, or if you're suggesting a solution to the problem that needs to be implemented. These are different than regular comments because they are actionable. The actions are `FIXME: -- need to figure this out` or `TODO: -- need to implement`.
+  - [18.4](#comments--actionitems) Prefixing your comments with `FIXME` or `TODO` helps other developers quickly understand if you’re pointing out a problem that needs to be revisited, or if you’re suggesting a solution to the problem that needs to be implemented. These are different than regular comments because they are actionable. The actions are `FIXME: -- need to figure this out` or `TODO: -- need to implement`.
 
   <a name="comments--fixme"></a><a name="17.4"></a>
   - [18.5](#comments--fixme) Use `// FIXME:` to annotate problems.
@@ -2979,7 +2979,7 @@ Other Style Guides
     [luke, leia].forEach(jedi => jedi.father = 'vader')
 
     // bad - raises exception
-    const reaction = "No! That's impossible!"
+    const reaction = "No! That’s impossible!"
     (async function meanwhileOnTheFalcon() {
       // handle `leia`, `lando`, `chewie`, `r2`, `c3p0`
       // ...
@@ -2999,7 +2999,7 @@ Other Style Guides
     });
 
     // good
-    const reaction = "No! That's impossible!";
+    const reaction = "No! That’s impossible!";
     (async function meanwhileOnTheFalcon() {
       // handle `leia`, `lando`, `chewie`, `r2`, `c3p0`
       // ...
@@ -3065,7 +3065,7 @@ Other Style Guides
     ```
 
   <a name="coercion--comment-deviations"></a><a name="21.4"></a>
-  - [22.4](#coercion--comment-deviations) If for whatever reason you are doing something wild and `parseInt` is your bottleneck and need to use Bitshift for [performance reasons](https://jsperf.com/coercion-vs-casting/3), leave a comment explaining why and what you're doing.
+  - [22.4](#coercion--comment-deviations) If for whatever reason you are doing something wild and `parseInt` is your bottleneck and need to use Bitshift for [performance reasons](https://jsperf.com/coercion-vs-casting/3), leave a comment explaining why and what you’re doing.
 
     ```javascript
     // good
@@ -3781,7 +3781,7 @@ Other Style Guides
   - **React**: [facebook.github.io/react/contributing/how-to-contribute.html#style-guide](https://facebook.github.io/react/contributing/how-to-contribute.html#style-guide)
   - **REI**: [reidev/js-style-guide](https://github.com/rei/code-style-guides/)
   - **Ripple**: [ripple/javascript-style-guide](https://github.com/ripple/javascript-style-guide)
-  - **Sainsbury's Supermarkets**: [jsainsburyplc](https://github.com/jsainsburyplc)
+  - **Sainsbury’s Supermarkets**: [jsainsburyplc](https://github.com/jsainsburyplc)
   - **SeekingAlpha**: [seekingalpha/javascript-style-guide](https://github.com/seekingalpha/javascript-style-guide)
   - **Shutterfly**: [shutterfly/javascript](https://github.com/shutterfly/javascript)
   - **Sourcetoad**: [sourcetoad/javascript](https://github.com/sourcetoad/javascript)
diff --git a/react/README.md b/react/README.md
index a3236574a9..a748ad3cc3 100644
--- a/react/README.md
+++ b/react/README.md
@@ -27,7 +27,7 @@ This style guide is mostly based on the standards that are currently prevalent i
   - Only include one React component per file.
     - However, multiple [Stateless, or Pure, Components](https://facebook.github.io/react/docs/reusable-components.html#stateless-functions) are allowed per file. eslint: [`react/no-multi-comp`](https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/no-multi-comp.md#ignorestateless).
   - Always use JSX syntax.
-  - Do not use `React.createElement` unless you're initializing the app from a file that is not JSX.
+  - Do not use `React.createElement` unless you’re initializing the app from a file that is not JSX.
 
 ## Class vs `React.createClass` vs stateless
 
@@ -51,7 +51,7 @@ This style guide is mostly based on the standards that are currently prevalent i
     }
     ```
 
-    And if you don't have state or refs, prefer normal functions (not arrow functions) over classes:
+    And if you don’t have state or refs, prefer normal functions (not arrow functions) over classes:
 
     ```jsx
     // bad
@@ -110,9 +110,9 @@ This style guide is mostly based on the standards that are currently prevalent i
     // good
     import Footer from './Footer';
     ```
-  - **Higher-order Component Naming**: Use a composite of the higher-order component's name and the passed-in component's name as the `displayName` on the generated component. For example, the higher-order component `withFoo()`, when passed a component `Bar` should produce a component with a `displayName` of `withFoo(Bar)`.
+  - **Higher-order Component Naming**: Use a composite of the higher-order component’s name and the passed-in component’s name as the `displayName` on the generated component. For example, the higher-order component `withFoo()`, when passed a component `Bar` should produce a component with a `displayName` of `withFoo(Bar)`.
 
-    > Why? A component's `displayName` may be used by developer tools or in error messages, and having a value that clearly expresses this relationship helps people understand what is happening.
+    > Why? A component’s `displayName` may be used by developer tools or in error messages, and having a value that clearly expresses this relationship helps people understand what is happening.
 
     ```jsx
     // bad
@@ -402,7 +402,7 @@ This style guide is mostly based on the standards that are currently prevalent i
   ```
 
   - Use spread props sparingly.
-  > Why? Otherwise you're more likely to pass unnecessary props down to components. And for React v15.6.1 and older, you could [pass invalid HTML attributes to the DOM](https://reactjs.org/blog/2017/09/08/dom-attributes-in-react-16.html).
+  > Why? Otherwise you’re more likely to pass unnecessary props down to components. And for React v15.6.1 and older, you could [pass invalid HTML attributes to the DOM](https://reactjs.org/blog/2017/09/08/dom-attributes-in-react-16.html).
 
   Exceptions:
 
@@ -423,7 +423,7 @@ This style guide is mostly based on the standards that are currently prevalent i
   }
   ```
 
-  - Spreading objects with known, explicit props. This can be particularly useful when testing React components with Mocha's beforeEach construct.
+  - Spreading objects with known, explicit props. This can be particularly useful when testing React components with Mocha’s beforeEach construct.
 
   ```jsx
   export default function Foo {

From 48448a81cc899b3cbabfc13eab5b1dc432d24f7f Mon Sep 17 00:00:00 2001
From: Kevin Weber <k-iwi@web.de>
Date: Sun, 26 Aug 2018 17:41:01 -0700
Subject: [PATCH 1285/1591] [guide] [react] Explain use of ID over key right on
 page

---
 react/README.md | 6 +++++-
 1 file changed, 5 insertions(+), 1 deletion(-)

diff --git a/react/README.md b/react/README.md
index a748ad3cc3..850373a129 100644
--- a/react/README.md
+++ b/react/README.md
@@ -351,7 +351,11 @@ This style guide is mostly based on the standards that are currently prevalent i
   <div />
   ```
 
-  - Avoid using an array index as `key` prop, prefer a unique ID. ([why?](https://medium.com/@robinpokorny/index-as-a-key-is-an-anti-pattern-e0349aece318))
+  - Avoid using an array index as `key` prop, prefer a stable ID.
+
+> Why? Not using a stable ID [is an anti-pattern](https://medium.com/@robinpokorny/index-as-a-key-is-an-anti-pattern-e0349aece318) because it can negatively impact performance and cause issues with component state.
+
+We don’t recommend using indexes for keys if the order of items may change.
 
   ```jsx
   // bad

From b8b2a0b0e01e00a6b6747e9662be9f479a9c0c9c Mon Sep 17 00:00:00 2001
From: Robert Alvarez <rlalvarez@pier1.com>
Date: Fri, 31 Aug 2018 15:10:43 -0500
Subject: [PATCH 1286/1591] Add Pier1 to the organization list

---
 README.md | 1 +
 1 file changed, 1 insertion(+)

diff --git a/README.md b/README.md
index f28bf24a7c..e9342c253f 100644
--- a/README.md
+++ b/README.md
@@ -3775,6 +3775,7 @@ Other Style Guides
   - **Orion Health**: [orionhealth/javascript](https://github.com/orionhealth/javascript)
   - **OutBoxSoft**: [OutBoxSoft/javascript](https://github.com/OutBoxSoft/javascript)
   - **Peerby**: [Peerby/javascript](https://github.com/Peerby/javascript)
+  - **Pier 1**: [Pier1/javascript](https://github.com/pier1/javascript)
   - **Qotto**: [Qotto/javascript-style-guide](https://github.com/Qotto/javascript-style-guide)
   - **Razorfish**: [razorfish/javascript-style-guide](https://github.com/razorfish/javascript-style-guide)
   - **reddit**: [reddit/styleguide/javascript](https://github.com/reddit/styleguide/tree/master/javascript)

From 17e0454672f784772c5f5ab052523a93229d9adf Mon Sep 17 00:00:00 2001
From: JBallin <JBallin@users.noreply.github.com>
Date: Sat, 1 Sep 2018 15:48:59 -0700
Subject: [PATCH 1287/1591] [eslint config] [base] [minor] Enforce dangling
 underscores in method names

---
 packages/eslint-config-airbnb-base/rules/style.js | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/packages/eslint-config-airbnb-base/rules/style.js b/packages/eslint-config-airbnb-base/rules/style.js
index ee5408f81c..d288bc5ad2 100644
--- a/packages/eslint-config-airbnb-base/rules/style.js
+++ b/packages/eslint-config-airbnb-base/rules/style.js
@@ -367,11 +367,12 @@ module.exports = {
     }],
 
     // disallow dangling underscores in identifiers
+    // https://eslint.org/docs/rules/no-underscore-dangle
     'no-underscore-dangle': ['error', {
       allow: [],
       allowAfterThis: false,
       allowAfterSuper: false,
-      enforceInMethodNames: false,
+      enforceInMethodNames: true,
     }],
 
     // disallow the use of Boolean literals in conditional expressions

From e7ffd44b4a95962bef5c1861fc2920650d3fa2c1 Mon Sep 17 00:00:00 2001
From: Siddharth Batra <sbsiddharth@gmail.com>
Date: Sun, 2 Sep 2018 22:59:40 +0530
Subject: [PATCH 1288/1591] Update .markdownlint.json

Fixed typos and grammar
---
 linters/.markdownlint.json | 62 +++++++++++++++++++-------------------
 1 file changed, 31 insertions(+), 31 deletions(-)

diff --git a/linters/.markdownlint.json b/linters/.markdownlint.json
index 8731243cf7..594886042d 100644
--- a/linters/.markdownlint.json
+++ b/linters/.markdownlint.json
@@ -2,13 +2,13 @@
   "comment": "Be explicit by listing every available rule. https://github.com/DavidAnson/markdownlint/blob/master/doc/Rules.md",
   "comment": "Note that there will be numeric gaps, not every MD number is implemented in markdownlint.",
 
-  "comment": "MD001: Header levels should only increment by one level at a time",
+  "comment": "MD001: Header levels should only increment by one level at a time.",
   "header-increment": true,
 
-  "comment": "MD002: First header should be a top level header",
+  "comment": "MD002: First header should be a top level header.",
   "first-header-h1": true,
 
-  "comment": "MD003: Header style: start with hashes",
+  "comment": "MD003: Header style: start with hashes.",
   "header-style": {
     "style": "atx"
   },
@@ -18,25 +18,25 @@
     "style": "dash"
   },
 
-  "comment": "MD005: Consistent indentation for list items at the same level",
+  "comment": "MD005: Consistent indentation for list items at the same level.",
   "list-indent": true,
 
-  "comment": "MD006: Consider starting bulleted lists at the beginning of the line",
+  "comment": "MD006: Consider starting bulleted lists at the beginning of the line.",
   "ul-start-left": false,
 
-  "comment": "MD007: Unordered list indentation: 2 spaces",
+  "comment": "MD007: Unordered list indentation: 2 spaces.",
   "ul-indent": {
     "indent": 2
   },
 
-  "comment": "MD009: Disallow trailing spaces",
+  "comment": "MD009: Disallow trailing spaces!",
   "no-trailing-spaces": {
     "br_spaces": 0,
-    "comment": "Empty lines inside list items should not be indented",
+    "comment": "Empty lines inside list items should not be indented.",
     "list_item_empty_lines": false
   },
 
-  "comment": "MD010: No hard tabs, not even in code blocks",
+  "comment": "MD010: No hard tabs, not even in code blocks.",
   "no-hard-tabs": {
     "code_blocks": true
   },
@@ -44,7 +44,7 @@
   "comment": "MD011: Prevent reversed link syntax",
   "no-reversed-links": true,
 
-  "comment": "MD012: Disallow multiple consecutive blank lines",
+  "comment": "MD012: Disallow multiple consecutive blank lines.",
   "no-multiple-blanks": {
     "maximum": 1
    },
@@ -52,37 +52,37 @@
   "comment": "MD013: Line length",
   "line-length": false,
 
-  "comment": "MD014: Disallow dollar signs used before commands without showing output",
+  "comment": "MD014: Disallow use of dollar signs($) before commands without showing output.",
   "commands-show-output": true,
 
-  "comment": "MD018: Disallow space after hash on atx style header",
+  "comment": "MD018: Disallow space after hash on atx style header.",
   "no-missing-space-atx": true,
 
-  "comment": "MD019: Dissalow multiple spaces after hash on atx style header",
+  "comment": "MD019: Disallow multiple spaces after hash on atx style header.",
   "no-multiple-space-atx": true,
 
-  "comment": "MD020: No space inside hashes on closed atx style header",
+  "comment": "MD020: No space should be inside hashes on closed atx style header.",
   "no-missing-space-closed-atx": true,
 
-  "comment": "MD021: Disallow multiple spaces inside hashes on closed atx style header",
+  "comment": "MD021: Disallow multiple spaces inside hashes on closed atx style header.",
   "no-multiple-space-closed-atx": true,
 
-  "comment": "MD022: Headers should be surrounded by blank lines",
+  "comment": "MD022: Headers should be surrounded by blank lines.",
   "comment": "Some headers have preceeding HTML anchors. Unfortunate that we have to disable this, as it otherwise catches a real problem that trips up some Markdown renderers",
   "blanks-around-headers": false,
 
-  "comment": "MD023: Headers must start at the beginning of the line",
+  "comment": "MD023: Headers must start at the beginning of the line.",
   "header-start-left": true,
 
-  "comment": "MD024: Disallow multiple headers with the same content",
+  "comment": "MD024: Disallow multiple headers with the same content.",
   "no-duplicate-header": true,
 
-  "comment": "MD025: Disallow multiple top level headers in the same document",
-  "comment": "Gotta have a matching closing brace at the end",
+  "comment": "MD025: Disallow multiple top level headers in the same document.",
+  "comment": "Gotta have a matching closing brace at the end.",
   "single-h1": false,
 
-  "comment": "MD026: Disallow trailing punctuation in header",
-  "comment": "Gotta have a semicolon after the ending closing brace",
+  "comment": "MD026: Disallow trailing punctuation in header.",
+  "comment": "You must have a semicolon after the ending closing brace.",
   "no-trailing-punctuation": {
     "punctuation" : ".,:!?"
   },
@@ -117,7 +117,7 @@
   "comment": "HTML is needed for explicit anchors",
   "no-inline-html": false,
 
-  "comment": "MD034: No bare URLs used",
+  "comment": "MD034: No bare URLs should be used",
   "no-bare-urls": true,
 
   "comment": "MD035: Horizontal rule style",
@@ -125,30 +125,30 @@
     "style": "consistent"
   },
 
-  "comment": "MD036: Do not use emphasis instead of a header",
+  "comment": "MD036: Do not use emphasis instead of a header.",
   "no-emphasis-as-header": false,
 
-  "comment": "MD037: Disallow spaces inside emphasis markers",
+  "comment": "MD037: Disallow spaces inside emphasis markers.",
   "no-space-in-emphasis": true,
 
-  "comment": "MD038: Disallow spaces inside code span elements",
+  "comment": "MD038: Disallow spaces inside code span elements.",
   "no-space-in-code": true,
 
-  "comment": "MD039: Disallow spaces inside link text",
+  "comment": "MD039: Disallow spaces inside link text.",
   "no-space-in-links": true,
 
-  "comment": "MD040: Fenced code blocks should have a language specified",
+  "comment": "MD040: Fenced code blocks should have a language specified.",
   "fenced-code-language": true,
 
-  "comment": "MD041: First line in file should be a top level header",
+  "comment": "MD041: First line in file should be a top level header.",
   "first-line-h1": true,
 
   "comment": "MD042: No empty links",
   "no-empty-links": true,
 
-  "comment": "MD043: Required header structure",
+  "comment": "MD043: Required header structure.",
   "required-headers": false,
 
-  "comment": "MD044: Proper names should have the correct capitalization",
+  "comment": "MD044: Proper names should have the correct capitalization.",
   "proper-names": false
 }

From 02b4eea3452b0ae6da666b01f9da23f26148f5b6 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E4=BE=AF=E6=9E=97=E6=B1=9F?= <linjiang.hou@baidao.com>
Date: Thu, 19 Jan 2017 18:21:22 +0800
Subject: [PATCH 1289/1591] [guide] update to a better Chinese translation

---
 README.md | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/README.md b/README.md
index e9342c253f..fd986b04b5 100644
--- a/README.md
+++ b/README.md
@@ -3812,7 +3812,7 @@ Other Style Guides
   - ![br](https://raw.githubusercontent.com/gosquared/flags/master/flags/flags/shiny/24/Brazil.png) **Brazilian Portuguese**: [armoucar/javascript-style-guide](https://github.com/armoucar/javascript-style-guide)
   - ![bg](https://raw.githubusercontent.com/gosquared/flags/master/flags/flags/shiny/24/Bulgaria.png) **Bulgarian**: [borislavvv/javascript](https://github.com/borislavvv/javascript)
   - ![ca](https://raw.githubusercontent.com/fpmweb/javascript-style-guide/master/img/catala.png) **Catalan**: [fpmweb/javascript-style-guide](https://github.com/fpmweb/javascript-style-guide)
-  - ![cn](https://raw.githubusercontent.com/gosquared/flags/master/flags/flags/shiny/24/China.png) **Chinese (Simplified)**: [yuche/javascript](https://github.com/yuche/javascript)
+  - ![cn](https://raw.githubusercontent.com/gosquared/flags/master/flags/flags/shiny/24/China.png) **Chinese (Simplified)**: [lin-123/javascript](https://github.com/lin-123/javascript)
   - ![tw](https://raw.githubusercontent.com/gosquared/flags/master/flags/flags/shiny/24/Taiwan.png) **Chinese (Traditional)**: [jigsawye/javascript](https://github.com/jigsawye/javascript)
   - ![fr](https://raw.githubusercontent.com/gosquared/flags/master/flags/flags/shiny/24/France.png) **French**: [nmussy/javascript-style-guide](https://github.com/nmussy/javascript-style-guide)
   - ![de](https://raw.githubusercontent.com/gosquared/flags/master/flags/flags/shiny/24/Germany.png) **German**: [timofurrer/javascript-style-guide](https://github.com/timofurrer/javascript-style-guide)

From 32a7bf44c2e5b3d2a5d05af46716fbe45bc09bec Mon Sep 17 00:00:00 2001
From: Tokyo <ahmed.tokyo1@gmail.com>
Date: Wed, 12 Sep 2018 15:37:59 +0100
Subject: [PATCH 1290/1591] :pencil2: fix docs for whitespace config

---
 packages/eslint-config-airbnb-base/README.md | 2 +-
 packages/eslint-config-airbnb/README.md      | 2 +-
 2 files changed, 2 insertions(+), 2 deletions(-)

diff --git a/packages/eslint-config-airbnb-base/README.md b/packages/eslint-config-airbnb-base/README.md
index 3c1a9ce914..9998d81fb3 100644
--- a/packages/eslint-config-airbnb-base/README.md
+++ b/packages/eslint-config-airbnb-base/README.md
@@ -86,7 +86,7 @@ See [Airbnb's overarching ESLint config](https://npmjs.com/eslint-config-airbnb)
 
 ### eslint-config-airbnb-base/whitespace
 
-This entry point only warns on whitespace rules and sets all other rules to warnings. View the list of whitespace rules [here](https://github.com/airbnb/javascript/blob/master/packages/eslint-config-airbnb-base/whitespace.js).
+This entry point only errors on whitespace rules and sets all other rules to warnings. View the list of whitespace rules [here](https://github.com/airbnb/javascript/blob/master/packages/eslint-config-airbnb-base/whitespace.js).
 
 ## Improving this config
 
diff --git a/packages/eslint-config-airbnb/README.md b/packages/eslint-config-airbnb/README.md
index f679682936..a03c378fa3 100644
--- a/packages/eslint-config-airbnb/README.md
+++ b/packages/eslint-config-airbnb/README.md
@@ -57,7 +57,7 @@ If you use yarn, run `npm info "eslint-config-airbnb@latest" peerDependencies` t
 
 ### eslint-config-airbnb/whitespace
 
-This entry point only warns on whitespace rules and sets all other rules to warnings. View the list of whitespace rules [here](https://github.com/airbnb/javascript/blob/master/packages/eslint-config-airbnb/whitespace.js).
+This entry point only errors on whitespace rules and sets all other rules to warnings. View the list of whitespace rules [here](https://github.com/airbnb/javascript/blob/master/packages/eslint-config-airbnb/whitespace.js).
 
 ### eslint-config-airbnb/base
 

From 9af5ee89ebf4c491d2f5231bced89d8cb1863660 Mon Sep 17 00:00:00 2001
From: Parul Gupta <parulgupta26@gmail.com>
Date: Tue, 2 Oct 2018 16:26:25 +0530
Subject: [PATCH 1291/1591] Updated wording of variable--one-const rule

---
 README.md | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/README.md b/README.md
index fd986b04b5..13a618f9dc 100644
--- a/README.md
+++ b/README.md
@@ -1581,7 +1581,7 @@ Other Style Guides
     ```
 
   <a name="variables--one-const"></a><a name="13.2"></a>
-  - [13.2](#variables--one-const) Use one `const` or `let` declaration per variable. eslint: [`one-var`](https://eslint.org/docs/rules/one-var.html)
+  - [13.2](#variables--one-const) Use one `const` or `let` declaration per variable or assignment. eslint: [`one-var`](https://eslint.org/docs/rules/one-var.html)
 
     > Why? It’s easier to add new variable declarations this way, and you never have to worry about swapping out a `;` for a `,` or introducing punctuation-only diffs. You can also step through each declaration with the debugger, instead of jumping through all of them at once.
 

From 924dfb268208b0fa59ead2e256be1da38ee17bca Mon Sep 17 00:00:00 2001
From: Pirasis Leelatanon <1pete@users.noreply.github.com>
Date: Wed, 3 Oct 2018 23:56:48 +0700
Subject: [PATCH 1292/1591] [doc] add eslint rule reference for
 `no-prototype-builtins`

---
 README.md | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/README.md b/README.md
index 13a618f9dc..7c74fedc63 100644
--- a/README.md
+++ b/README.md
@@ -285,7 +285,7 @@ Other Style Guides
     ```
 
   <a name="objects--prototype-builtins"></a>
-  - [3.7](#objects--prototype-builtins) Do not call `Object.prototype` methods directly, such as `hasOwnProperty`, `propertyIsEnumerable`, and `isPrototypeOf`.
+  - [3.7](#objects--prototype-builtins) Do not call `Object.prototype` methods directly, such as `hasOwnProperty`, `propertyIsEnumerable`, and `isPrototypeOf`. eslint: [`no-prototype-builtins`](https://eslint.org/docs/rules/no-prototype-builtins)
 
     > Why? These methods may be shadowed by properties on the object in question - consider `{ hasOwnProperty: false }` - or, the object may be a null object (`Object.create(null)`).
 

From 24da5bb540de12117bcdfa7b6d8ce3c0ff4b6504 Mon Sep 17 00:00:00 2001
From: Pirasis Leelatanon <1pete@users.noreply.github.com>
Date: Thu, 4 Oct 2018 20:29:10 +0700
Subject: [PATCH 1293/1591] [doc] add eslint rule references in react guide

* react/jsx-filename-extension
* react/no-array-index-key
---
 react/README.md | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/react/README.md b/react/README.md
index 850373a129..8ec7a92313 100644
--- a/react/README.md
+++ b/react/README.md
@@ -80,7 +80,7 @@ This style guide is mostly based on the standards that are currently prevalent i
 
 ## Naming
 
-  - **Extensions**: Use `.jsx` extension for React components.
+  - **Extensions**: Use `.jsx` extension for React components. eslint: [`react/jsx-filename-extension`](https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/jsx-filename-extension.md)
   - **Filename**: Use PascalCase for filenames. E.g., `ReservationCard.jsx`.
   - **Reference Naming**: Use PascalCase for React components and camelCase for their instances. eslint: [`react/jsx-pascal-case`](https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/jsx-pascal-case.md)
 
@@ -351,7 +351,7 @@ This style guide is mostly based on the standards that are currently prevalent i
   <div />
   ```
 
-  - Avoid using an array index as `key` prop, prefer a stable ID.
+  - Avoid using an array index as `key` prop, prefer a stable ID. eslint: [`react/no-array-index-key`](https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/no-array-index-key.md)
 
 > Why? Not using a stable ID [is an anti-pattern](https://medium.com/@robinpokorny/index-as-a-key-is-an-anti-pattern-e0349aece318) because it can negatively impact performance and cause issues with component state.
 

From 03a0734fcefa0e7ab351ce33fd1562e089de1e5d Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Mart=C3=ADn=20Anzorena?= <martin.anzorena@gmail.com>
Date: Wed, 17 Oct 2018 01:51:06 +0800
Subject: [PATCH 1294/1591] Add UrbanSim to organizations list

---
 README.md | 1 +
 1 file changed, 1 insertion(+)

diff --git a/README.md b/README.md
index 7c74fedc63..2a8844fd60 100644
--- a/README.md
+++ b/README.md
@@ -3797,6 +3797,7 @@ Other Style Guides
   - **TheLadders**: [TheLadders/javascript](https://github.com/TheLadders/javascript)
   - **The Nerdery**: [thenerdery/javascript-standards](https://github.com/thenerdery/javascript-standards)
   - **T4R Technology**: [T4R-Technology/javascript](https://github.com/T4R-Technology/javascript)
+  - **UrbanSim**: [urbansim](https://github.com/urbansim/)
   - **VoxFeed**: [VoxFeed/javascript-style-guide](https://github.com/VoxFeed/javascript-style-guide)
   - **WeBox Studio**: [weboxstudio/javascript](https://github.com/weboxstudio/javascript)
   - **Weggo**: [Weggo/javascript](https://github.com/Weggo/javascript)

From 41a13e83eee02be3fcfc0657a6cb994018df700d Mon Sep 17 00:00:00 2001
From: Bikram Sutar <38653376+theBstar@users.noreply.github.com>
Date: Tue, 30 Oct 2018 15:05:16 +0530
Subject: [PATCH 1295/1591] [19.16] changed Enforce to avoid

Good practice is to avoid spaces between functions and their invocations. But by mistake (I think so) you used the word Enforce instead of Avoid
---
 README.md | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/README.md b/README.md
index 2a8844fd60..3959247747 100644
--- a/README.md
+++ b/README.md
@@ -2781,7 +2781,7 @@ Other Style Guides
     ```
 
   <a name="whitespace--func-call-spacing"></a>
-  - [19.16](#whitespace--func-call-spacing) Enforce spacing between functions and their invocations. eslint: [`func-call-spacing`](https://eslint.org/docs/rules/func-call-spacing)
+  - [19.16](#whitespace--func-call-spacing) Avoid spaces between functions and their invocations. eslint: [`func-call-spacing`](https://eslint.org/docs/rules/func-call-spacing)
 
     ```javascript
     // bad

From 74deb81d1fa670a5a462f6ada29d9447cf61c7c0 Mon Sep 17 00:00:00 2001
From: KY3LxD <38943742+KY3LxD@users.noreply.github.com>
Date: Mon, 12 Nov 2018 23:38:19 -0800
Subject: [PATCH 1296/1591] [editorial] Improve conciseness of README.md

---
 README.md | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/README.md b/README.md
index 3959247747..88d26ff582 100644
--- a/README.md
+++ b/README.md
@@ -217,7 +217,7 @@ Other Style Guides
   <a name="es6-object-concise"></a><a name="3.6"></a>
   - [3.4](#es6-object-concise) Use property value shorthand. eslint: [`object-shorthand`](https://eslint.org/docs/rules/object-shorthand.html)
 
-    > Why? It is shorter to write and descriptive.
+    > Why? It is shorter and descriptive.
 
     ```javascript
     const lukeSkywalker = 'Luke Skywalker';

From 21b65e943c361f91af5a484460fb2c8d02e2ff92 Mon Sep 17 00:00:00 2001
From: Ed Morley <501702+edmorley@users.noreply.github.com>
Date: Tue, 20 Nov 2018 09:40:02 +0000
Subject: [PATCH 1297/1591] [eslint config] [base] [deps] Switch to
 confusing-browser-globals

The `eslint-restricted-globals` package author created an equivalent
package `confusing-browser-globals` that now resides within the
create-react-app monorepo. In sidoshi/eslint-restricted-globals#2
@sidoshi suggested that we change eslint-config-airbnb-base to depend
on the CRA package instead, in an effort to consolidate the two.

Currently the two global lists are identical, so this does not change
the generated eslint config:
https://unpkg.com/eslint-restricted-globals@0.2.0/index.js
https://unpkg.com/confusing-browser-globals@1.0.5/index.js
---
 packages/eslint-config-airbnb-base/package.json       | 2 +-
 packages/eslint-config-airbnb-base/rules/variables.js | 4 ++--
 2 files changed, 3 insertions(+), 3 deletions(-)

diff --git a/packages/eslint-config-airbnb-base/package.json b/packages/eslint-config-airbnb-base/package.json
index 91bcb47195..4ec1497674 100644
--- a/packages/eslint-config-airbnb-base/package.json
+++ b/packages/eslint-config-airbnb-base/package.json
@@ -71,7 +71,7 @@
     "node": ">= 4"
   },
   "dependencies": {
-    "eslint-restricted-globals": "^0.1.1",
+    "confusing-browser-globals": "^1.0.5",
     "object.assign": "^4.1.0",
     "object.entries": "^1.0.4"
   }
diff --git a/packages/eslint-config-airbnb-base/rules/variables.js b/packages/eslint-config-airbnb-base/rules/variables.js
index aeab992320..701340ab56 100644
--- a/packages/eslint-config-airbnb-base/rules/variables.js
+++ b/packages/eslint-config-airbnb-base/rules/variables.js
@@ -1,4 +1,4 @@
-const restrictedGlobals = require('eslint-restricted-globals');
+const confusingBrowserGlobals = require('confusing-browser-globals');
 
 module.exports = {
   rules: {
@@ -16,7 +16,7 @@ module.exports = {
     'no-label-var': 'error',
 
     // disallow specific globals
-    'no-restricted-globals': ['error', 'isFinite', 'isNaN'].concat(restrictedGlobals),
+    'no-restricted-globals': ['error', 'isFinite', 'isNaN'].concat(confusingBrowserGlobals),
 
     // disallow declaration of variables already declared in the outer scope
     'no-shadow': 'error',

From 0d6d854b5c70c8440091253c2d1fcc84b6f8ee20 Mon Sep 17 00:00:00 2001
From: "NullDev (Chris)" <shadow@nulldev.org>
Date: Wed, 21 Nov 2018 10:48:35 +0100
Subject: [PATCH 1298/1591] [17.2] Added second anchor
 https://github.com/airbnb/javascript/pull/1960

See requested changes here: https://github.com/airbnb/javascript/pull/1960#pullrequestreview-176797787
---
 README.md | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/README.md b/README.md
index 88d26ff582..a90c4d6a67 100644
--- a/README.md
+++ b/README.md
@@ -2249,7 +2249,7 @@ Other Style Guides
     }
     ```
 
-  <a name="control-statement--value-selection"></a>
+  <a name="control-statement--value-selection"></a><a name="control-statements--value-selection"></a>
   - [17.2](#control-statements--value-selection) Don't use selection operators in place of control statements.
 
     ```javascript

From 6ece1f58e91a06608145d03dbc949aa352cad5a8 Mon Sep 17 00:00:00 2001
From: "NullDev (Chris)" <shadow@nulldev.org>
Date: Wed, 21 Nov 2018 10:51:20 +0100
Subject: [PATCH 1299/1591] Added NullDev

because why not
---
 README.md | 1 +
 1 file changed, 1 insertion(+)

diff --git a/README.md b/README.md
index a90c4d6a67..6caee476d8 100644
--- a/README.md
+++ b/README.md
@@ -3770,6 +3770,7 @@ Other Style Guides
   - **Muber**: [muber](https://github.com/muber/)
   - **National Geographic**: [natgeo](https://github.com/natgeo/)
   - **Nimbl3**: [nimbl3/javascript](https://github.com/nimbl3/javascript)
+  - **NullDev**: [NullDevCo/JavaScript-Styleguide](https://github.com/NullDevCo/JavaScript-Styleguide)
   - **Nulogy**: [nulogy/javascript](https://github.com/nulogy/javascript)
   - **Orange Hill Development**: [orangehill/javascript](https://github.com/orangehill/javascript)
   - **Orion Health**: [orionhealth/javascript](https://github.com/orionhealth/javascript)

From 69e34378c603bac579ce16fd5d635d3589ca23d0 Mon Sep 17 00:00:00 2001
From: ernestodebesto <filip.sikor@gmail.com>
Date: Fri, 14 Sep 2018 17:20:22 +0200
Subject: [PATCH 1300/1591] Examples more consistent with the guidline

comparison operator <= shows better the confusion when using arrow function, than just operator <
---
 README.md | 8 ++++----
 1 file changed, 4 insertions(+), 4 deletions(-)

diff --git a/README.md b/README.md
index 6caee476d8..2a18c4c7ee 100644
--- a/README.md
+++ b/README.md
@@ -1052,18 +1052,18 @@ Other Style Guides
 
     ```javascript
     // bad
-    const itemHeight = item => item.height > 256 ? item.largeSize : item.smallSize;
+    const itemHeight = item => item.height <= 256 ? item.largeSize : item.smallSize;
 
     // bad
-    const itemHeight = (item) => item.height > 256 ? item.largeSize : item.smallSize;
+    const itemHeight = (item) => item.height >= 256 ? item.largeSize : item.smallSize;
 
     // good
-    const itemHeight = item => (item.height > 256 ? item.largeSize : item.smallSize);
+    const itemHeight = item => (item.height <= 256 ? item.largeSize : item.smallSize);
 
     // good
     const itemHeight = (item) => {
       const { height, largeSize, smallSize } = item;
-      return height > 256 ? largeSize : smallSize;
+      return height <= 256 ? largeSize : smallSize;
     };
     ```
 

From ffe4fe967c8e0635a5c21b9b0b62eed0b2aa655a Mon Sep 17 00:00:00 2001
From: Kevin Weber <k-iwi@web.de>
Date: Sat, 25 Aug 2018 22:12:12 -0700
Subject: [PATCH 1301/1591] [guide] Clarify wording

---
 README.md | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/README.md b/README.md
index 2a18c4c7ee..4bb08eca75 100644
--- a/README.md
+++ b/README.md
@@ -2764,7 +2764,7 @@ Other Style Guides
     ```
 
   <a name="whitespace--computed-property-spacing"></a>
-  - [19.15](#whitespace--computed-property-spacing) Enforce spacing inside of computed properties. eslint: [`computed-property-spacing`](https://eslint.org/docs/rules/computed-property-spacing)
+  - [19.15](#whitespace--computed-property-spacing) Enforce spacing inside of computed property brackets. eslint: [`computed-property-spacing`](https://eslint.org/docs/rules/computed-property-spacing)
 
     ```javascript
     // bad

From 064e3bf8d578736c38a7d74419ea6ba10ee46d8f Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Michael=20K=C3=A4fer?= <michael.kaefer1@gmx.at>
Date: Tue, 27 Nov 2018 20:51:21 +0100
Subject: [PATCH 1302/1591] :) conflicting with rule 8.2 :D

---
 README.md | 10 +++++-----
 1 file changed, 5 insertions(+), 5 deletions(-)

diff --git a/README.md b/README.md
index 4bb08eca75..8924f32c18 100644
--- a/README.md
+++ b/README.md
@@ -1072,16 +1072,16 @@ Other Style Guides
 
     ```javascript
     // bad
-    (foo) =>
+    foo =>
       bar;
 
-    (foo) =>
+    foo =>
       (bar);
 
     // good
-    (foo) => bar;
-    (foo) => (bar);
-    (foo) => (
+    foo => bar;
+    foo => (bar);
+    foo => (
        bar
     )
     ```

From 5d25a2ee61ebe44a10617efed41dc54bb36fb625 Mon Sep 17 00:00:00 2001
From: Honza Javorek <mail@honzajavorek.cz>
Date: Tue, 18 Dec 2018 16:11:26 +0100
Subject: [PATCH 1303/1591] capitalize means first letter uppercase, the rest
 lowercase

The examples and the reasoning indicates the author of the rule meant uppercase instead of capitalization. According to Wikipedia, capitalization is "writing a word with its first letter as a capital letter (uppercase letter) and the remaining letters in lower case", while the rule apparently tries to prevent exactly that.
---
 README.md | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/README.md b/README.md
index 8924f32c18..0ae718ed09 100644
--- a/README.md
+++ b/README.md
@@ -3268,7 +3268,7 @@ Other Style Guides
     ```
 
   <a name="naming--Acronyms-and-Initialisms"></a>
-  - [23.9](#naming--Acronyms-and-Initialisms) Acronyms and initialisms should always be all capitalized, or all lowercased.
+  - [23.9](#naming--Acronyms-and-Initialisms) Acronyms and initialisms should always be all uppercased, or all lowercased.
 
     > Why? Names are for readability, not to appease a computer algorithm.
 

From 80920a07c5144148d2987f39fb9558246552648e Mon Sep 17 00:00:00 2001
From: Emily Rohrbough <emilyrohrbough@users.noreply.github.com>
Date: Wed, 19 Dec 2018 13:06:08 -0600
Subject: [PATCH 1304/1591] Add Terra to README list

---
 README.md | 1 +
 1 file changed, 1 insertion(+)

diff --git a/README.md b/README.md
index 0ae718ed09..aa09b7d66b 100644
--- a/README.md
+++ b/README.md
@@ -3795,6 +3795,7 @@ Other Style Guides
   - **SysGarage**: [sysgarage/javascript-style-guide](https://github.com/sysgarage/javascript-style-guide)
   - **Syzygy Warsaw**: [syzygypl/javascript](https://github.com/syzygypl/javascript)
   - **Target**: [target/javascript](https://github.com/target/javascript)
+  - **Terra**: [terra](https://github.com/cerner?utf8=%E2%9C%93&q=terra&type=&language=)
   - **TheLadders**: [TheLadders/javascript](https://github.com/TheLadders/javascript)
   - **The Nerdery**: [thenerdery/javascript-standards](https://github.com/thenerdery/javascript-standards)
   - **T4R Technology**: [T4R-Technology/javascript](https://github.com/T4R-Technology/javascript)

From 218c4fefbb010922866c18ef88e34ec66bb962a5 Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Fri, 28 Dec 2018 13:36:01 -0800
Subject: [PATCH 1305/1591] [eslint config] [base] [fix] disable `no-var` in
 legacy entry point

Fixes #1935.
---
 packages/eslint-config-airbnb-base/legacy.js | 1 +
 1 file changed, 1 insertion(+)

diff --git a/packages/eslint-config-airbnb-base/legacy.js b/packages/eslint-config-airbnb-base/legacy.js
index 7cc2441ab3..94870c9263 100644
--- a/packages/eslint-config-airbnb-base/legacy.js
+++ b/packages/eslint-config-airbnb-base/legacy.js
@@ -27,5 +27,6 @@ module.exports = {
       property: '__defineSetter__',
       message: 'Please use Object.defineProperty instead.',
     }],
+    'no-var': 'off'
   }
 };

From 387755e8feedf7288983c89fe79bc0c03a2a8bbc Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Fri, 28 Dec 2018 14:31:03 -0800
Subject: [PATCH 1306/1591] [meta] add disabled `no-useless-catch` config

---
 packages/eslint-config-airbnb-base/rules/best-practices.js | 5 +++++
 1 file changed, 5 insertions(+)

diff --git a/packages/eslint-config-airbnb-base/rules/best-practices.js b/packages/eslint-config-airbnb-base/rules/best-practices.js
index fbd65cf7d3..cc470408ee 100644
--- a/packages/eslint-config-airbnb-base/rules/best-practices.js
+++ b/packages/eslint-config-airbnb-base/rules/best-practices.js
@@ -280,6 +280,11 @@ module.exports = {
     // disallow unnecessary .call() and .apply()
     'no-useless-call': 'off',
 
+    // Disallow unnecessary catch clauses
+    // https://eslint.org/docs/rules/no-useless-catch
+    // TODO: enable, semver-major
+    'no-useless-catch': 'off',
+
     // disallow useless string concatenation
     // https://eslint.org/docs/rules/no-useless-concat
     'no-useless-concat': 'error',

From 070e6200bb6c70fa31470ed7a6294f2497468b44 Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Fri, 28 Dec 2018 14:32:02 -0800
Subject: [PATCH 1307/1591] [Dev Deps] update `markdownlint-cli`

---
 package.json | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/package.json b/package.json
index 1fdcd7be15..581c94f612 100644
--- a/package.json
+++ b/package.json
@@ -39,6 +39,6 @@
   },
   "homepage": "https://github.com/airbnb/javascript",
   "devDependencies": {
-    "markdownlint-cli": "^0.10.0"
+    "markdownlint-cli": "^0.13.0"
   }
 }

From 95286eb496acf09fb8360d5368f798b040a0b5c1 Mon Sep 17 00:00:00 2001
From: Rahil Vora <rvora@CHIC02VQ0XPG8WN.sea.corp.expecn.com>
Date: Mon, 7 Jan 2019 10:24:16 -0600
Subject: [PATCH 1308/1591] [guide] [react] add note about `forbid-prop-types`
 rule

---
 react/README.md | 1 +
 1 file changed, 1 insertion(+)

diff --git a/react/README.md b/react/README.md
index 8ec7a92313..542aa1fd7d 100644
--- a/react/README.md
+++ b/react/README.md
@@ -28,6 +28,7 @@ This style guide is mostly based on the standards that are currently prevalent i
     - However, multiple [Stateless, or Pure, Components](https://facebook.github.io/react/docs/reusable-components.html#stateless-functions) are allowed per file. eslint: [`react/no-multi-comp`](https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/no-multi-comp.md#ignorestateless).
   - Always use JSX syntax.
   - Do not use `React.createElement` unless you’re initializing the app from a file that is not JSX.
+  - [`react/forbid-prod-types`](https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/forbid-prop-types.md) will allow `arrays` and `objects` only if it is explicitly noted what `array` and `object` contains, using `arrayOf`, `objectOf`, or `shape`.
 
 ## Class vs `React.createClass` vs stateless
 

From 955f4e93b8ae0ace9c9e4c7c8934b37c12d300d6 Mon Sep 17 00:00:00 2001
From: Hoang <dangkyokhoang@users.noreply.github.com>
Date: Sun, 13 Jan 2019 18:55:49 +0700
Subject: [PATCH 1309/1591] Vietnamese translation

---
 README.md | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/README.md b/README.md
index aa09b7d66b..48ae6defe8 100644
--- a/README.md
+++ b/README.md
@@ -3827,7 +3827,7 @@ Other Style Guides
   - ![th](https://raw.githubusercontent.com/gosquared/flags/master/flags/flags/shiny/24/Thailand.png) **Thai**: [lvarayut/javascript-style-guide](https://github.com/lvarayut/javascript-style-guide)
   - ![tr](https://raw.githubusercontent.com/gosquared/flags/master/flags/flags/shiny/24/Turkey.png) **Turkish**: [eraycetinay/javascript](https://github.com/eraycetinay/javascript)
   - ![ua](https://raw.githubusercontent.com/gosquared/flags/master/flags/flags/shiny/24/Ukraine.png) **Ukrainian**: [ivanzusko/javascript](https://github.com/ivanzusko/javascript)
-  - ![vn](https://raw.githubusercontent.com/gosquared/flags/master/flags/flags/shiny/24/Vietnam.png) **Vietnam**: [hngiang/javascript-style-guide](https://github.com/hngiang/javascript-style-guide)
+  - ![vn](https://raw.githubusercontent.com/gosquared/flags/master/flags/flags/shiny/24/Vietnam.png) **Vietnam**: [dangkyokhoang/javascript-style-guide](https://github.com/dangkyokhoang/javascript-style-guide)
 
 ## The JavaScript Style Guide Guide
 

From b6c56cb070445d62717913758d4b54f1efbdac77 Mon Sep 17 00:00:00 2001
From: Remco Haszing <remcohaszing@gmail.com>
Date: Mon, 21 Jan 2019 13:39:53 +0100
Subject: [PATCH 1310/1591] [eslint config] [base] [patch] Allow use of
 `__REDUX_DEVTOOLS_EXTENSION_COMPOSE__`

This style guide disallows the use of underscores in properties. However, the
Redux browser extension requires the use of a variable named
`__REDUX_DEVTOOLS_EXTENSION_COMPOSE__`. Since Redux is so popular with React,
it makes sense to allow this.
---
 packages/eslint-config-airbnb-base/rules/style.js | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/packages/eslint-config-airbnb-base/rules/style.js b/packages/eslint-config-airbnb-base/rules/style.js
index d288bc5ad2..007f276417 100644
--- a/packages/eslint-config-airbnb-base/rules/style.js
+++ b/packages/eslint-config-airbnb-base/rules/style.js
@@ -369,7 +369,7 @@ module.exports = {
     // disallow dangling underscores in identifiers
     // https://eslint.org/docs/rules/no-underscore-dangle
     'no-underscore-dangle': ['error', {
-      allow: [],
+      allow: ['__REDUX_DEVTOOLS_EXTENSION_COMPOSE__'],
       allowAfterThis: false,
       allowAfterSuper: false,
       enforceInMethodNames: true,

From 1439ebe78d043ed8c206367b23406da7ddb7c3ce Mon Sep 17 00:00:00 2001
From: Telmen Munkhdalai <telmen@users.noreply.github.com>
Date: Sat, 26 Jan 2019 16:55:34 +0800
Subject: [PATCH 1311/1591] [editorial] [react] fix typo

---
 react/README.md | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/react/README.md b/react/README.md
index 542aa1fd7d..51e035db46 100644
--- a/react/README.md
+++ b/react/README.md
@@ -28,7 +28,7 @@ This style guide is mostly based on the standards that are currently prevalent i
     - However, multiple [Stateless, or Pure, Components](https://facebook.github.io/react/docs/reusable-components.html#stateless-functions) are allowed per file. eslint: [`react/no-multi-comp`](https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/no-multi-comp.md#ignorestateless).
   - Always use JSX syntax.
   - Do not use `React.createElement` unless you’re initializing the app from a file that is not JSX.
-  - [`react/forbid-prod-types`](https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/forbid-prop-types.md) will allow `arrays` and `objects` only if it is explicitly noted what `array` and `object` contains, using `arrayOf`, `objectOf`, or `shape`.
+  - [`react/forbid-prop-types`](https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/forbid-prop-types.md) will allow `arrays` and `objects` only if it is explicitly noted what `array` and `object` contains, using `arrayOf`, `objectOf`, or `shape`.
 
 ## Class vs `React.createClass` vs stateless
 

From 25f11fb31e787a055329bdfaf9c4ad572780ac99 Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Sat, 26 Jan 2019 10:12:49 -0800
Subject: [PATCH 1312/1591] [eslint config] [patch] extend
 `no-underscore-dangle` to allow for redux dev tools in the main config
 instead

---
 packages/eslint-config-airbnb-base/rules/style.js | 2 +-
 packages/eslint-config-airbnb/rules/react.js      | 9 +++++++++
 2 files changed, 10 insertions(+), 1 deletion(-)

diff --git a/packages/eslint-config-airbnb-base/rules/style.js b/packages/eslint-config-airbnb-base/rules/style.js
index 007f276417..d288bc5ad2 100644
--- a/packages/eslint-config-airbnb-base/rules/style.js
+++ b/packages/eslint-config-airbnb-base/rules/style.js
@@ -369,7 +369,7 @@ module.exports = {
     // disallow dangling underscores in identifiers
     // https://eslint.org/docs/rules/no-underscore-dangle
     'no-underscore-dangle': ['error', {
-      allow: ['__REDUX_DEVTOOLS_EXTENSION_COMPOSE__'],
+      allow: [],
       allowAfterThis: false,
       allowAfterSuper: false,
       enforceInMethodNames: true,
diff --git a/packages/eslint-config-airbnb/rules/react.js b/packages/eslint-config-airbnb/rules/react.js
index 527274dad6..eb3b648277 100644
--- a/packages/eslint-config-airbnb/rules/react.js
+++ b/packages/eslint-config-airbnb/rules/react.js
@@ -1,3 +1,8 @@
+const assign = require('object.assign');
+const baseStyleRules = require('eslint-config-airbnb-base/rules/style').rules;
+
+const dangleRules = baseStyleRules['no-underscore-dangle'];
+
 module.exports = {
   plugins: [
     'react',
@@ -12,6 +17,10 @@ module.exports = {
   // View link below for react rules documentation
   // https://github.com/yannickcr/eslint-plugin-react#list-of-supported-rules
   rules: {
+    'no-underscore-dangle': [dangleRules[0], assign({}, dangleRules[1], {
+      allow: dangleRules[1].allow.concat(['__REDUX_DEVTOOLS_EXTENSION_COMPOSE__']),
+    })],
+
     // Specify whether double or single quotes should be used in JSX attributes
     // https://eslint.org/docs/rules/jsx-quotes
     'jsx-quotes': ['error', 'prefer-double'],

From d8256fc886717c758cc3830478e072d897bd68b9 Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Sun, 27 Jan 2019 13:41:14 -0800
Subject: [PATCH 1313/1591] [eslint config] [*] [deps] update `object.entries`,
 `eslint-plugin-import`, `eslint-plugin-jsx-a11y`, `eslint-plugin-react`

---
 packages/eslint-config-airbnb-base/package.json    |  6 +++---
 .../eslint-config-airbnb-base/rules/imports.js     |  4 ++++
 packages/eslint-config-airbnb/package.json         | 14 +++++++-------
 3 files changed, 14 insertions(+), 10 deletions(-)

diff --git a/packages/eslint-config-airbnb-base/package.json b/packages/eslint-config-airbnb-base/package.json
index 4ec1497674..3ad23c4477 100644
--- a/packages/eslint-config-airbnb-base/package.json
+++ b/packages/eslint-config-airbnb-base/package.json
@@ -58,14 +58,14 @@
     "editorconfig-tools": "^0.1.1",
     "eslint": "^4.19.1 || ^5.3.0",
     "eslint-find-rules": "^3.3.1",
-    "eslint-plugin-import": "^2.14.0",
+    "eslint-plugin-import": "^2.15.0",
     "in-publish": "^2.0.0",
     "safe-publish-latest": "^1.1.2",
     "tape": "^4.9.1"
   },
   "peerDependencies": {
     "eslint": "^4.19.1 || ^5.3.0",
-    "eslint-plugin-import": "^2.14.0"
+    "eslint-plugin-import": "^2.15.0"
   },
   "engines": {
     "node": ">= 4"
@@ -73,6 +73,6 @@
   "dependencies": {
     "confusing-browser-globals": "^1.0.5",
     "object.assign": "^4.1.0",
-    "object.entries": "^1.0.4"
+    "object.entries": "^1.1.0"
   }
 }
diff --git a/packages/eslint-config-airbnb-base/rules/imports.js b/packages/eslint-config-airbnb-base/rules/imports.js
index fbeca8dc83..1853ae05d5 100644
--- a/packages/eslint-config-airbnb-base/rules/imports.js
+++ b/packages/eslint-config-airbnb-base/rules/imports.js
@@ -221,6 +221,10 @@ module.exports = {
     // https://github.com/benmosher/eslint-plugin-import/blob/44a038c06487964394b1e15b64f3bd34e5d40cde/docs/rules/no-default-export.md
     'import/no-default-export': 'off',
 
+    // Prohibit named exports. this is a terrible rule, do not use it.
+    // https://github.com/benmosher/eslint-plugin-import/blob/1ec80fa35fa1819e2d35a70e68fb6a149fb57c5e/docs/rules/no-named-export.md
+    'import/no-named-export': 'off',
+
     // Forbid a module from importing itself
     // https://github.com/benmosher/eslint-plugin-import/blob/44a038c06487964394b1e15b64f3bd34e5d40cde/docs/rules/no-self-import.md
     'import/no-self-import': 'error',
diff --git a/packages/eslint-config-airbnb/package.json b/packages/eslint-config-airbnb/package.json
index b45487a126..d5710640a1 100644
--- a/packages/eslint-config-airbnb/package.json
+++ b/packages/eslint-config-airbnb/package.json
@@ -56,7 +56,7 @@
   "dependencies": {
     "eslint-config-airbnb-base": "^13.1.0",
     "object.assign": "^4.1.0",
-    "object.entries": "^1.0.4"
+    "object.entries": "^1.1.0"
   },
   "devDependencies": {
     "babel-preset-airbnb": "^2.5.3",
@@ -64,9 +64,9 @@
     "editorconfig-tools": "^0.1.1",
     "eslint": "^4.19.1 || ^5.3.0",
     "eslint-find-rules": "^3.3.1",
-    "eslint-plugin-import": "^2.14.0",
-    "eslint-plugin-jsx-a11y": "^6.1.1",
-    "eslint-plugin-react": "^7.11.0",
+    "eslint-plugin-import": "^2.15.0",
+    "eslint-plugin-jsx-a11y": "^6.2.0",
+    "eslint-plugin-react": "^7.12.4",
     "in-publish": "^2.0.0",
     "react": ">= 0.13.0",
     "safe-publish-latest": "^1.1.2",
@@ -74,9 +74,9 @@
   },
   "peerDependencies": {
     "eslint": "^4.19.1 || ^5.3.0",
-    "eslint-plugin-import": "^2.14.0",
-    "eslint-plugin-jsx-a11y": "^6.1.1",
-    "eslint-plugin-react": "^7.11.0"
+    "eslint-plugin-import": "^2.15.0",
+    "eslint-plugin-jsx-a11y": "^6.2.0",
+    "eslint-plugin-react": "^7.12.4"
   },
   "engines": {
     "node": ">= 4"

From 96f95fa35e23f015448445b8d5bb7ac8e03a739a Mon Sep 17 00:00:00 2001
From: tclindner <tclindner@users.noreply.github.com>
Date: Tue, 29 Jan 2019 21:58:23 -0600
Subject: [PATCH 1314/1591] [eslint config] [base] [patch]
 `no-extraneous-dependencies`: Add jest.setup.js to devDeps

---
 packages/eslint-config-airbnb-base/rules/imports.js | 1 +
 1 file changed, 1 insertion(+)

diff --git a/packages/eslint-config-airbnb-base/rules/imports.js b/packages/eslint-config-airbnb-base/rules/imports.js
index 1853ae05d5..6f0acf0563 100644
--- a/packages/eslint-config-airbnb-base/rules/imports.js
+++ b/packages/eslint-config-airbnb-base/rules/imports.js
@@ -79,6 +79,7 @@ module.exports = {
         'test-*.{js,jsx}', // repos with multiple top-level test files
         '**/*{.,_}{test,spec}.{js,jsx}', // tests where the extension or filename suffix denotes that it is a test
         '**/jest.config.js', // jest config
+        '**/jest.setup.js', // jest setup
         '**/vue.config.js', // vue-cli config
         '**/webpack.config.js', // webpack config
         '**/webpack.config.*.js', // webpack config

From 6ef45d4bab39813e1ff31e41112009ffcb62277c Mon Sep 17 00:00:00 2001
From: Zeeshan Ahmad <ziishaned@gmail.com>
Date: Wed, 6 Feb 2019 14:09:18 +0400
Subject: [PATCH 1315/1591] [guide] make "good" example match "bad" example
 more closely

---
 README.md | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/README.md b/README.md
index 48ae6defe8..49d025fbc2 100644
--- a/README.md
+++ b/README.md
@@ -963,7 +963,7 @@ Other Style Guides
     });
 
     // good
-    [1, 2, 3].map(number => `A string containing the ${number}.`);
+    [1, 2, 3].map(number => `A string containing the ${number + 1}.`);
 
     // good
     [1, 2, 3].map((number) => {

From 4f15da6146fc00096a909e4c53808a3068a4d853 Mon Sep 17 00:00:00 2001
From: Pier-Luc Brault <plbro92@gmail.com>
Date: Thu, 7 Feb 2019 11:48:32 -0500
Subject: [PATCH 1316/1591] [eslint config] [*] [readme] Improve eslint config
 setup instructions for yarn

---
 packages/eslint-config-airbnb-base/README.md | 6 ++++--
 packages/eslint-config-airbnb/README.md      | 5 +++--
 2 files changed, 7 insertions(+), 4 deletions(-)

diff --git a/packages/eslint-config-airbnb-base/README.md b/packages/eslint-config-airbnb-base/README.md
index 9998d81fb3..a5c3b1075e 100644
--- a/packages/eslint-config-airbnb-base/README.md
+++ b/packages/eslint-config-airbnb-base/README.md
@@ -12,8 +12,6 @@ We export two ESLint configurations for your usage.
 
 Our default export contains all of our ESLint rules, including ECMAScript 6+. It requires `eslint` and `eslint-plugin-import`.
 
-If you use yarn, run `npm info "eslint-config-airbnb-base@latest" peerDependencies` to list the peer dependencies and versions, then run `yarn add --dev <dependency>@<version>` for each listed peer dependency. See below for npm instructions.
-
 1. Install the correct versions of each package, which are listed by the command:
 
   ```sh
@@ -26,6 +24,10 @@ If you use yarn, run `npm info "eslint-config-airbnb-base@latest" peerDependenci
   npx install-peerdeps --dev eslint-config-airbnb-base
   ```
 
+  If using **yarn**, you can also use the shortcut described above if you have npm 5+ installed on your machine, as the command will detect that you are using yarn and will act accordingly.
+  Otherwise, run `npm info "eslint-config-airbnb-base@latest" peerDependencies` to list the peer dependencies and versions, then run `yarn add --dev <dependency>@<version>` for each listed peer dependency.
+
+
   If using **npm < 5**, Linux/OSX users can run
 
   ```sh
diff --git a/packages/eslint-config-airbnb/README.md b/packages/eslint-config-airbnb/README.md
index a03c378fa3..f7f3c6390d 100644
--- a/packages/eslint-config-airbnb/README.md
+++ b/packages/eslint-config-airbnb/README.md
@@ -12,8 +12,6 @@ We export three ESLint configurations for your usage.
 
 Our default export contains all of our ESLint rules, including ECMAScript 6+ and React. It requires `eslint`, `eslint-plugin-import`, `eslint-plugin-react`, and `eslint-plugin-jsx-a11y`. If you don't need React, see [eslint-config-airbnb-base](https://npmjs.com/eslint-config-airbnb-base).
 
-If you use yarn, run `npm info "eslint-config-airbnb@latest" peerDependencies` to list the peer dependencies and versions, then run `yarn add --dev <dependency>@<version>` for each listed peer dependency. See below for npm instructions.
-
 1. Install the correct versions of each package, which are listed by the command:
 
   ```sh
@@ -26,6 +24,9 @@ If you use yarn, run `npm info "eslint-config-airbnb@latest" peerDependencies` t
   npx install-peerdeps --dev eslint-config-airbnb
   ```
 
+  If using **yarn**, you can also use the shortcut described above if you have npm 5+ installed on your machine, as the command will detect that you are using yarn and will act accordingly.
+  Otherwise, run `npm info "eslint-config-airbnb@latest" peerDependencies` to list the peer dependencies and versions, then run `yarn add --dev <dependency>@<version>` for each listed peer dependency.
+
   If using **npm < 5**, Linux/OSX users can run
 
   ```sh

From 8694a873783629c3461b05f4ba654904d3d1ac42 Mon Sep 17 00:00:00 2001
From: Jamie <me@thejameskyle.com>
Date: Thu, 14 Feb 2019 11:57:20 -0800
Subject: [PATCH 1317/1591] [eslint config] [react] [patch] Turn off
 `react/no-multi-comp`

Splitting up a component into multiple components can be useful for many reasons, including making important performance optimizations.

This lint rule discourages splitting up components because it forces you to: create a new file, copy over all the relevant imports, move over any local functions/values (or move them into yet another shared module), export the component (which makes your split off component now a public export), and re-import it into the new module.

Having multiple components per file shouldn't be much different from having multiple functions per file. And you shouldn't be forced to make a component a public export if it's really just an internal implementation detail of another component.

There's an argument to be made about _exporting_ multiple components, but mostly just in the context of React.lazy because it can only import default exports and you don't want something else in that file being statically imported (because that will prevent it from being code-split).
---
 packages/eslint-config-airbnb/rules/react.js | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/packages/eslint-config-airbnb/rules/react.js b/packages/eslint-config-airbnb/rules/react.js
index eb3b648277..8a9a10f360 100644
--- a/packages/eslint-config-airbnb/rules/react.js
+++ b/packages/eslint-config-airbnb/rules/react.js
@@ -194,7 +194,7 @@ module.exports = {
 
     // Prevent multiple component definition per file
     // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/no-multi-comp.md
-    'react/no-multi-comp': ['error', { ignoreStateless: true }],
+    'react/no-multi-comp': 'off',
 
     // Prevent usage of setState
     // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/no-set-state.md

From 834d717c7bfdd08fe0f9fad2920626eb0e179398 Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Sun, 17 Feb 2019 14:14:54 -0800
Subject: [PATCH 1318/1591] [eslint config] [*] [deps] update
 `eslint-plugin-import`, `eslint-plugin-jsx-a11y`, `tape`

---
 packages/eslint-config-airbnb-base/package.json | 6 +++---
 packages/eslint-config-airbnb/package.json      | 6 +++---
 2 files changed, 6 insertions(+), 6 deletions(-)

diff --git a/packages/eslint-config-airbnb-base/package.json b/packages/eslint-config-airbnb-base/package.json
index 3ad23c4477..88b78791c5 100644
--- a/packages/eslint-config-airbnb-base/package.json
+++ b/packages/eslint-config-airbnb-base/package.json
@@ -58,14 +58,14 @@
     "editorconfig-tools": "^0.1.1",
     "eslint": "^4.19.1 || ^5.3.0",
     "eslint-find-rules": "^3.3.1",
-    "eslint-plugin-import": "^2.15.0",
+    "eslint-plugin-import": "^2.16.0",
     "in-publish": "^2.0.0",
     "safe-publish-latest": "^1.1.2",
-    "tape": "^4.9.1"
+    "tape": "^4.10.1"
   },
   "peerDependencies": {
     "eslint": "^4.19.1 || ^5.3.0",
-    "eslint-plugin-import": "^2.15.0"
+    "eslint-plugin-import": "^2.16.0"
   },
   "engines": {
     "node": ">= 4"
diff --git a/packages/eslint-config-airbnb/package.json b/packages/eslint-config-airbnb/package.json
index d5710640a1..3188684425 100644
--- a/packages/eslint-config-airbnb/package.json
+++ b/packages/eslint-config-airbnb/package.json
@@ -64,13 +64,13 @@
     "editorconfig-tools": "^0.1.1",
     "eslint": "^4.19.1 || ^5.3.0",
     "eslint-find-rules": "^3.3.1",
-    "eslint-plugin-import": "^2.15.0",
-    "eslint-plugin-jsx-a11y": "^6.2.0",
+    "eslint-plugin-import": "^2.16.0",
+    "eslint-plugin-jsx-a11y": "^6.2.1",
     "eslint-plugin-react": "^7.12.4",
     "in-publish": "^2.0.0",
     "react": ">= 0.13.0",
     "safe-publish-latest": "^1.1.2",
-    "tape": "^4.9.1"
+    "tape": "^4.10.1"
   },
   "peerDependencies": {
     "eslint": "^4.19.1 || ^5.3.0",

From a71c2d1ad3ff71627ea2848ae21ea35d5d7ef061 Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Sun, 17 Feb 2019 14:20:53 -0800
Subject: [PATCH 1319/1591] [eslint config] add disabled `jsx-fragments` rule

---
 packages/eslint-config-airbnb/rules/react.js | 5 +++++
 1 file changed, 5 insertions(+)

diff --git a/packages/eslint-config-airbnb/rules/react.js b/packages/eslint-config-airbnb/rules/react.js
index 8a9a10f360..fdf48690a3 100644
--- a/packages/eslint-config-airbnb/rules/react.js
+++ b/packages/eslint-config-airbnb/rules/react.js
@@ -460,6 +460,11 @@ module.exports = {
     // Prevent usage of UNSAFE_ methods
     // https://github.com/yannickcr/eslint-plugin-react/blob/157cc932be2cfaa56b3f5b45df6f6d4322a2f660/docs/rules/no-unsafe.md
     'react/no-unsafe': 'off',
+
+    // Enforce shorthand or standard form for React fragments
+    // https://github.com/yannickcr/eslint-plugin-react/blob/bc976b837abeab1dffd90ac6168b746a83fc83cc/docs/rules/jsx-fragments.md
+    // TODO: enable, semver-major
+    'react/jsx-fragments': ['off', 'syntax'],
   },
 
   settings: {

From da0cf088316692b59751bfd64e99125a4acd3869 Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Sun, 17 Feb 2019 14:21:15 -0800
Subject: [PATCH 1320/1591] [Tests] on `node` `v11`

---
 .travis.yml | 1 +
 1 file changed, 1 insertion(+)

diff --git a/.travis.yml b/.travis.yml
index 2fcc94de67..90d9d857d2 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -1,5 +1,6 @@
 language: node_js
 node_js:
+  - "11"
   - "10"
   - "9"
   - "8"

From 495a62aaa9c2110cb06e6243d91373aa4fb384da Mon Sep 17 00:00:00 2001
From: Matthias Pries <mapb@users.noreply.github.com>
Date: Wed, 13 Feb 2019 13:52:39 +0100
Subject: [PATCH 1321/1591] [guide] fix example 4.7 for arrays method callbacks

---
 README.md | 2 --
 1 file changed, 2 deletions(-)

diff --git a/README.md b/README.md
index 49d025fbc2..9efbad4d15 100644
--- a/README.md
+++ b/README.md
@@ -423,13 +423,11 @@ Other Style Guides
     // bad - no returned value means `acc` becomes undefined after the first iteration
     [[0, 1], [2, 3], [4, 5]].reduce((acc, item, index) => {
       const flatten = acc.concat(item);
-      acc[index] = flatten;
     });
 
     // good
     [[0, 1], [2, 3], [4, 5]].reduce((acc, item, index) => {
       const flatten = acc.concat(item);
-      acc[index] = flatten;
       return flatten;
     });
 

From be07f7a020749b37ce35a966a5c11ce76d5756ac Mon Sep 17 00:00:00 2001
From: Anton Honcharuk <anton.goncharuk@icloud.com>
Date: Sun, 24 Feb 2019 13:28:34 +0200
Subject: [PATCH 1322/1591] [guide] [react] add more context about arrow
 functions, as props and in class fields

---
 react/README.md | 17 ++++++++++++++---
 1 file changed, 14 insertions(+), 3 deletions(-)

diff --git a/react/README.md b/react/README.md
index 51e035db46..4d2aa63fb3 100644
--- a/react/README.md
+++ b/react/README.md
@@ -531,7 +531,7 @@ We don’t recommend using indexes for keys if the order of items may change.
 
 ## Methods
 
-  - Use arrow functions to close over local variables.
+  - Use arrow functions to close over local variables. It is handy when you need to pass additional data to an event handler. Although, make sure they [do not massively hurt performance](https://www.bignerdranch.com/blog/choosing-the-best-approach-for-react-event-handlers/), in particular when passed to custom components that might be PureComponents, because they will trigger a possibly needless rerender every time.
 
     ```jsx
     function ItemList(props) {
@@ -540,7 +540,7 @@ We don’t recommend using indexes for keys if the order of items may change.
           {props.items.map((item, index) => (
             <Item
               key={item.key}
-              onClick={() => doSomethingWith(item.name, index)}
+              onClick={(event) => doSomethingWith(event, item.name, index)}
             />
           ))}
         </ul>
@@ -550,7 +550,7 @@ We don’t recommend using indexes for keys if the order of items may change.
 
   - Bind event handlers for the render method in the constructor. eslint: [`react/jsx-no-bind`](https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/jsx-no-bind.md)
 
-    > Why? A bind call in the render path creates a brand new function on every single render.
+    > Why? A bind call in the render path creates a brand new function on every single render. Do not use arrow functions in class fields, because it makes them [challenging to test and debug, and can negatively impact performance](https://medium.com/@charpeni/arrow-functions-in-class-properties-might-not-be-as-great-as-we-think-3b3551c440b1), and because conceptually, class fields are for data, not logic.
 
     ```jsx
     // bad
@@ -564,6 +564,17 @@ We don’t recommend using indexes for keys if the order of items may change.
       }
     }
 
+    // very bad
+    class extends React.Component {
+      onClickDiv = () => {
+        // do stuff
+      }
+
+      render() {
+        return <div onClick={this.onClickDiv} />
+      }
+    }
+
     // good
     class extends React.Component {
       constructor(props) {

From b85baeafed8b66fdd9756439a0b8774860147913 Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Sun, 3 Mar 2019 23:23:14 -0800
Subject: [PATCH 1323/1591] [eslint config] [base] [meta] add disabled
 `prefer-named-capture-group` rule

---
 .../eslint-config-airbnb-base/rules/best-practices.js     | 4 ++++
 packages/eslint-config-airbnb-base/rules/es6.js           | 1 +
 packages/eslint-config-airbnb-base/rules/style.js         | 8 +++++++-
 3 files changed, 12 insertions(+), 1 deletion(-)

diff --git a/packages/eslint-config-airbnb-base/rules/best-practices.js b/packages/eslint-config-airbnb-base/rules/best-practices.js
index cc470408ee..d8dbfce90b 100644
--- a/packages/eslint-config-airbnb-base/rules/best-practices.js
+++ b/packages/eslint-config-airbnb-base/rules/best-practices.js
@@ -311,6 +311,10 @@ module.exports = {
     // https://eslint.org/docs/rules/prefer-promise-reject-errors
     'prefer-promise-reject-errors': ['error', { allowEmptyReject: true }],
 
+    // Suggest using named capture group in regular expression
+    // https://eslint.org/docs/rules/prefer-named-capture-group
+    'prefer-named-capture-group': 'off',
+
     // require use of the second argument for parseInt()
     radix: 'error',
 
diff --git a/packages/eslint-config-airbnb-base/rules/es6.js b/packages/eslint-config-airbnb-base/rules/es6.js
index f9e5198c96..9c6328700e 100644
--- a/packages/eslint-config-airbnb-base/rules/es6.js
+++ b/packages/eslint-config-airbnb-base/rules/es6.js
@@ -158,6 +158,7 @@ module.exports = {
     // https://eslint.org/docs/rules/sort-imports
     'sort-imports': ['off', {
       ignoreCase: false,
+      ignoreDeclarationSort: false,
       ignoreMemberSort: false,
       memberSyntaxSortOrder: ['none', 'all', 'multiple', 'single'],
     }],
diff --git a/packages/eslint-config-airbnb-base/rules/style.js b/packages/eslint-config-airbnb-base/rules/style.js
index d288bc5ad2..1908c3ea81 100644
--- a/packages/eslint-config-airbnb-base/rules/style.js
+++ b/packages/eslint-config-airbnb-base/rules/style.js
@@ -422,7 +422,13 @@ module.exports = {
     'operator-linebreak': ['error', 'before', { overrides: { '=': 'none' } }],
 
     // disallow padding within blocks
-    'padded-blocks': ['error', { blocks: 'never', classes: 'never', switches: 'never' }],
+    // TODO, semver-major: uncomment option
+    'padded-blocks': ['error', {
+      blocks: 'never',
+      classes: 'never',
+      switches: 'never',
+      // allowSingleLineBlocks: true,
+    }],
 
     // Require or disallow padding lines between statements
     // https://eslint.org/docs/rules/padding-line-between-statements

From 60b96d322277c4c71a21a05caba8eb3320e0e3fa Mon Sep 17 00:00:00 2001
From: Anton Honcharuk <anton.goncharuk@icloud.com>
Date: Wed, 27 Feb 2019 20:25:32 +0200
Subject: [PATCH 1324/1591] [guide] Add a 19.9 bullet in a Whitespace section

- with explanations about preventing two blank lines from  appearing consecutively in JavaScript code
---
 README.md | 77 +++++++++++++++++++++++++++++++++++++++++++++++--------
 1 file changed, 66 insertions(+), 11 deletions(-)

diff --git a/README.md b/README.md
index 9efbad4d15..66eecb118a 100644
--- a/README.md
+++ b/README.md
@@ -2656,8 +2656,63 @@ Other Style Guides
     }
     ```
 
+  <a name="whitespace--no-multiple-blanks"></a>
+  - [19.9](#whitespace--no-multiple-blanks) Do not use multiple blank lines to pad your code. eslint: [`no-multiple-empty-lines`](https://eslint.org/docs/rules/no-multiple-empty-lines)
+
+    <!-- markdownlint-disable MD012 -->
+    ```javascript
+    // bad
+    class Person {
+      constructor(fullName, email, birthday) {
+        this.fullName = fullName;
+
+
+        this.email = email;
+
+
+        this.setAge(birthday);
+      }
+
+
+      setAge(birthday) {
+        const today = new Date();
+
+
+        const age = this.getAge(today, birthday);
+
+
+        this.age = age;
+      }
+
+
+      getAge(today, birthday) {
+        // ..
+      }
+    }
+
+    // good
+    class Person {
+      constructor(fullName, email, birthday) {
+        this.fullName = fullName;
+        this.email = email;
+        this.setAge(birthday);
+      }
+
+
+      setAge(birthday) {
+        const today = new Date();
+        const age = getAge(today, birthday);
+        this.age = age;
+      }
+
+      getAge(today, birthday) {
+        // ..
+      }
+    }
+    ```
+
   <a name="whitespace--in-parens"></a><a name="18.9"></a>
-  - [19.9](#whitespace--in-parens) Do not add spaces inside parentheses. eslint: [`space-in-parens`](https://eslint.org/docs/rules/space-in-parens.html)
+  - [19.10](#whitespace--in-parens) Do not add spaces inside parentheses. eslint: [`space-in-parens`](https://eslint.org/docs/rules/space-in-parens.html)
 
     ```javascript
     // bad
@@ -2682,7 +2737,7 @@ Other Style Guides
     ```
 
   <a name="whitespace--in-brackets"></a><a name="18.10"></a>
-  - [19.10](#whitespace--in-brackets) Do not add spaces inside brackets. eslint: [`array-bracket-spacing`](https://eslint.org/docs/rules/array-bracket-spacing.html)
+  - [19.11](#whitespace--in-brackets) Do not add spaces inside brackets. eslint: [`array-bracket-spacing`](https://eslint.org/docs/rules/array-bracket-spacing.html)
 
     ```javascript
     // bad
@@ -2695,7 +2750,7 @@ Other Style Guides
     ```
 
   <a name="whitespace--in-braces"></a><a name="18.11"></a>
-  - [19.11](#whitespace--in-braces) Add spaces inside curly braces. eslint: [`object-curly-spacing`](https://eslint.org/docs/rules/object-curly-spacing.html)
+  - [19.12](#whitespace--in-braces) Add spaces inside curly braces. eslint: [`object-curly-spacing`](https://eslint.org/docs/rules/object-curly-spacing.html)
 
     ```javascript
     // bad
@@ -2706,7 +2761,7 @@ Other Style Guides
     ```
 
   <a name="whitespace--max-len"></a><a name="18.12"></a>
-  - [19.12](#whitespace--max-len) Avoid having lines of code that are longer than 100 characters (including whitespace). Note: per [above](#strings--line-length), long strings are exempt from this rule, and should not be broken up. eslint: [`max-len`](https://eslint.org/docs/rules/max-len.html)
+  - [19.13](#whitespace--max-len) Avoid having lines of code that are longer than 100 characters (including whitespace). Note: per [above](#strings--line-length), long strings are exempt from this rule, and should not be broken up. eslint: [`max-len`](https://eslint.org/docs/rules/max-len.html)
 
     > Why? This ensures readability and maintainability.
 
@@ -2736,7 +2791,7 @@ Other Style Guides
     ```
 
   <a name="whitespace--block-spacing"></a>
-  - [19.13](#whitespace--block-spacing) Require consistent spacing inside an open block token and the next token on the same line. This rule also enforces consistent spacing inside a close block token and previous token on the same line. eslint: [`block-spacing`](https://eslint.org/docs/rules/block-spacing)
+  - [19.14](#whitespace--block-spacing) Require consistent spacing inside an open block token and the next token on the same line. This rule also enforces consistent spacing inside a close block token and previous token on the same line. eslint: [`block-spacing`](https://eslint.org/docs/rules/block-spacing)
 
     ```javascript
     // bad
@@ -2749,7 +2804,7 @@ Other Style Guides
     ```
 
   <a name="whitespace--comma-spacing"></a>
-  - [19.14](#whitespace--comma-spacing) Avoid spaces before commas and require a space after commas. eslint: [`comma-spacing`](https://eslint.org/docs/rules/comma-spacing)
+  - [19.15](#whitespace--comma-spacing) Avoid spaces before commas and require a space after commas. eslint: [`comma-spacing`](https://eslint.org/docs/rules/comma-spacing)
 
     ```javascript
     // bad
@@ -2762,7 +2817,7 @@ Other Style Guides
     ```
 
   <a name="whitespace--computed-property-spacing"></a>
-  - [19.15](#whitespace--computed-property-spacing) Enforce spacing inside of computed property brackets. eslint: [`computed-property-spacing`](https://eslint.org/docs/rules/computed-property-spacing)
+  - [19.16](#whitespace--computed-property-spacing) Enforce spacing inside of computed property brackets. eslint: [`computed-property-spacing`](https://eslint.org/docs/rules/computed-property-spacing)
 
     ```javascript
     // bad
@@ -2779,7 +2834,7 @@ Other Style Guides
     ```
 
   <a name="whitespace--func-call-spacing"></a>
-  - [19.16](#whitespace--func-call-spacing) Avoid spaces between functions and their invocations. eslint: [`func-call-spacing`](https://eslint.org/docs/rules/func-call-spacing)
+  - [19.17](#whitespace--func-call-spacing) Avoid spaces between functions and their invocations. eslint: [`func-call-spacing`](https://eslint.org/docs/rules/func-call-spacing)
 
     ```javascript
     // bad
@@ -2793,7 +2848,7 @@ Other Style Guides
     ```
 
   <a name="whitespace--key-spacing"></a>
-  - [19.17](#whitespace--key-spacing) Enforce spacing between keys and values in object literal properties. eslint: [`key-spacing`](https://eslint.org/docs/rules/key-spacing)
+  - [19.18](#whitespace--key-spacing) Enforce spacing between keys and values in object literal properties. eslint: [`key-spacing`](https://eslint.org/docs/rules/key-spacing)
 
     ```javascript
     // bad
@@ -2805,10 +2860,10 @@ Other Style Guides
     ```
 
   <a name="whitespace--no-trailing-spaces"></a>
-  - [19.18](#whitespace--no-trailing-spaces) Avoid trailing spaces at the end of lines. eslint: [`no-trailing-spaces`](https://eslint.org/docs/rules/no-trailing-spaces)
+  - [19.19](#whitespace--no-trailing-spaces) Avoid trailing spaces at the end of lines. eslint: [`no-trailing-spaces`](https://eslint.org/docs/rules/no-trailing-spaces)
 
   <a name="whitespace--no-multiple-empty-lines"></a>
-  - [19.19](#whitespace--no-multiple-empty-lines) Avoid multiple empty lines and only allow one newline at the end of files. eslint: [`no-multiple-empty-lines`](https://eslint.org/docs/rules/no-multiple-empty-lines)
+  - [19.20](#whitespace--no-multiple-empty-lines) Avoid multiple empty lines and only allow one newline at the end of files. eslint: [`no-multiple-empty-lines`](https://eslint.org/docs/rules/no-multiple-empty-lines)
 
     <!-- markdownlint-disable MD012 -->
     ```javascript

From 447466681e9c38858ef81af7a84aada801630352 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?K=C3=A9vin=20Berthommier?=
 <bertho-zero@users.noreply.github.com>
Date: Wed, 10 Apr 2019 10:22:57 +0200
Subject: [PATCH 1325/1591] [guide] remove extra blank line

---
 README.md | 1 -
 1 file changed, 1 deletion(-)

diff --git a/README.md b/README.md
index 66eecb118a..4621f1d032 100644
--- a/README.md
+++ b/README.md
@@ -2698,7 +2698,6 @@ Other Style Guides
         this.setAge(birthday);
       }
 
-
       setAge(birthday) {
         const today = new Date();
         const age = getAge(today, birthday);

From 117d4fce49096bec1cb5d3c030031aca994ddb5a Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Sat, 27 Apr 2019 23:27:07 -0700
Subject: [PATCH 1326/1591] [Tests] fix issue with eslint dev deps

---
 packages/eslint-config-airbnb/package.json | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/packages/eslint-config-airbnb/package.json b/packages/eslint-config-airbnb/package.json
index 3188684425..d7b8662945 100644
--- a/packages/eslint-config-airbnb/package.json
+++ b/packages/eslint-config-airbnb/package.json
@@ -11,7 +11,7 @@
     "prepublish": "(in-install || eslint-find-rules --unused) && (not-in-publish || npm test) && safe-publish-latest",
     "pretest": "npm run --silent lint",
     "test": "npm run --silent tests-only",
-    "link:eslint": "cd node_modules/eslint && npm link && cd -",
+    "link:eslint": "cd node_modules/eslint && npm link --production && cd -",
     "pretravis": "npm run link:eslint && cd ../eslint-config-airbnb-base && npm link eslint && npm install && npm link && cd - && npm link --no-save eslint-config-airbnb-base",
     "travis": "npm run --silent test",
     "posttravis": "npm unlink --no-save eslint-config-airbnb-base eslint >/dev/null &"

From 5cd011dfa1e07e292444d3632d582ffb87fceec9 Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Sat, 27 Apr 2019 23:51:44 -0700
Subject: [PATCH 1327/1591] [eslint config] [base] [deps] update
 `eslint-plugin-import`

---
 packages/eslint-config-airbnb-base/package.json     | 4 ++--
 packages/eslint-config-airbnb-base/rules/imports.js | 9 +++++++++
 2 files changed, 11 insertions(+), 2 deletions(-)

diff --git a/packages/eslint-config-airbnb-base/package.json b/packages/eslint-config-airbnb-base/package.json
index 88b78791c5..462bfcd0b2 100644
--- a/packages/eslint-config-airbnb-base/package.json
+++ b/packages/eslint-config-airbnb-base/package.json
@@ -58,14 +58,14 @@
     "editorconfig-tools": "^0.1.1",
     "eslint": "^4.19.1 || ^5.3.0",
     "eslint-find-rules": "^3.3.1",
-    "eslint-plugin-import": "^2.16.0",
+    "eslint-plugin-import": "^2.17.2",
     "in-publish": "^2.0.0",
     "safe-publish-latest": "^1.1.2",
     "tape": "^4.10.1"
   },
   "peerDependencies": {
     "eslint": "^4.19.1 || ^5.3.0",
-    "eslint-plugin-import": "^2.16.0"
+    "eslint-plugin-import": "^2.17.2"
   },
   "engines": {
     "node": ">= 4"
diff --git a/packages/eslint-config-airbnb-base/rules/imports.js b/packages/eslint-config-airbnb-base/rules/imports.js
index 6f0acf0563..1c4e08d36c 100644
--- a/packages/eslint-config-airbnb-base/rules/imports.js
+++ b/packages/eslint-config-airbnb-base/rules/imports.js
@@ -248,5 +248,14 @@ module.exports = {
     // Use this rule to prevent imports to folders in relative parent paths.
     // https://github.com/benmosher/eslint-plugin-import/blob/c34f14f67f077acd5a61b3da9c0b0de298d20059/docs/rules/no-relative-parent-imports.md
     'import/no-relative-parent-imports': 'off',
+
+    // Reports modules without any exports, or with unused exports
+    // https://github.com/benmosher/eslint-plugin-import/blob/f63dd261809de6883b13b6b5b960e6d7f42a7813/docs/rules/no-unused-modules.md
+    // TODO: enable, semver-major
+    'import/no-unused-modules': ['off', {
+      ignoreExports: [],
+      missingExports: true,
+      unusedExports: true,
+    }],
   },
 };

From 1310ade9d0e4d1e5625f29b89d4c902bebc8cc11 Mon Sep 17 00:00:00 2001
From: Joseph Nields <joseph@lappy.local>
Date: Sat, 27 Apr 2019 14:00:50 -0700
Subject: [PATCH 1328/1591] [eslint config] [base] [patch] Ignore property
 modifications of `staticContext` params

React Router passes a `staticContext` property to children to allow
signalling status codes and redirected URLs, by allowing children to
assign property values to it during render
---
 packages/eslint-config-airbnb-base/rules/best-practices.js | 1 +
 1 file changed, 1 insertion(+)

diff --git a/packages/eslint-config-airbnb-base/rules/best-practices.js b/packages/eslint-config-airbnb-base/rules/best-practices.js
index d8dbfce90b..b16a974ccf 100644
--- a/packages/eslint-config-airbnb-base/rules/best-practices.js
+++ b/packages/eslint-config-airbnb-base/rules/best-practices.js
@@ -186,6 +186,7 @@ module.exports = {
         'res', // for Express responses
         'response', // for Express responses
         '$scope', // for Angular 1 scopes
+        'staticContext', // for ReactRouter context
       ]
     }],
 

From 19701d4a0cf69ff05e9a9b9c7e62c7126b0ea73f Mon Sep 17 00:00:00 2001
From: Kimball Bighorse <kbighorse@yahoo.com>
Date: Thu, 9 May 2019 09:40:43 -0700
Subject: [PATCH 1329/1591] [inthewild] Add Coeur d'Alene Tribe

---
 README.md | 1 +
 1 file changed, 1 insertion(+)

diff --git a/README.md b/README.md
index 4621f1d032..b5df3946a2 100644
--- a/README.md
+++ b/README.md
@@ -3779,6 +3779,7 @@ Other Style Guides
   - **CaseNine**: [CaseNine/javascript](https://github.com/CaseNine/javascript)
   - **Cerner**: [Cerner](https://github.com/cerner/)
   - **Chartboost**: [ChartBoost/javascript-style-guide](https://github.com/ChartBoost/javascript-style-guide)
+  - **Coeur d'Alene Tribe**: [www.cdatribe-nsn.gov](https://www.cdatribe-nsn.gov)
   - **ComparaOnline**: [comparaonline/javascript](https://github.com/comparaonline/javascript-style-guide)
   - **Compass Learning**: [compasslearning/javascript-style-guide](https://github.com/compasslearning/javascript-style-guide)
   - **DailyMotion**: [dailymotion/javascript](https://github.com/dailymotion/javascript)

From 4539dbcf17b960ab650665bc95421dc8d0d3276e Mon Sep 17 00:00:00 2001
From: Kevin Yue <yuezk001@gmail.com>
Date: Fri, 24 May 2019 16:29:24 +0800
Subject: [PATCH 1330/1591] [guide] remove redundant spaces

---
 README.md       | 8 ++++----
 react/README.md | 4 ++--
 2 files changed, 6 insertions(+), 6 deletions(-)

diff --git a/README.md b/README.md
index b5df3946a2..57f90f0651 100644
--- a/README.md
+++ b/README.md
@@ -3073,7 +3073,7 @@ Other Style Guides
   - [22.1](#coercion--explicit) Perform type coercion at the beginning of the statement.
 
   <a name="coercion--strings"></a><a name="21.2"></a>
-  - [22.2](#coercion--strings)  Strings: eslint: [`no-new-wrappers`](https://eslint.org/docs/rules/no-new-wrappers)
+  - [22.2](#coercion--strings) Strings: eslint: [`no-new-wrappers`](https://eslint.org/docs/rules/no-new-wrappers)
 
     ```javascript
     // => this.reviewScore = 9;
@@ -3360,7 +3360,7 @@ Other Style Guides
 
     > Why? This is an additional tool to assist in situations where the programmer would be unsure if a variable might ever change. UPPERCASE_VARIABLES are letting the programmer know that they can trust the variable (and its properties) not to change.
     - What about all `const` variables? - This is unnecessary, so uppercasing should not be used for constants within a file. It should be used for exported constants however.
-    - What about exported objects? - Uppercase at the top level of export  (e.g. `EXPORTED_OBJECT.key`) and maintain that all nested properties do not change.
+    - What about exported objects? - Uppercase at the top level of export (e.g. `EXPORTED_OBJECT.key`) and maintain that all nested properties do not change.
 
     ```javascript
     // bad
@@ -3467,7 +3467,7 @@ Other Style Guides
 ## Events
 
   <a name="events--hash"></a><a name="24.1"></a>
-  - [25.1](#events--hash) When attaching data payloads to events (whether DOM events or something more proprietary like Backbone events), pass an object literal (also known as a "hash")  instead of a raw value. This allows a subsequent contributor to add more data to the event payload without finding and updating every handler for the event. For example, instead of:
+  - [25.1](#events--hash) When attaching data payloads to events (whether DOM events or something more proprietary like Backbone events), pass an object literal (also known as a "hash") instead of a raw value. This allows a subsequent contributor to add more data to the event payload without finding and updating every handler for the event. For example, instead of:
 
     ```javascript
     // bad
@@ -3721,7 +3721,7 @@ Other Style Guides
 
   - [JavaScript: The Good Parts](https://www.amazon.com/JavaScript-Good-Parts-Douglas-Crockford/dp/0596517742) - Douglas Crockford
   - [JavaScript Patterns](https://www.amazon.com/JavaScript-Patterns-Stoyan-Stefanov/dp/0596806752) - Stoyan Stefanov
-  - [Pro JavaScript Design Patterns](https://www.amazon.com/JavaScript-Design-Patterns-Recipes-Problem-Solution/dp/159059908X)  - Ross Harmes and Dustin Diaz
+  - [Pro JavaScript Design Patterns](https://www.amazon.com/JavaScript-Design-Patterns-Recipes-Problem-Solution/dp/159059908X) - Ross Harmes and Dustin Diaz
   - [High Performance Web Sites: Essential Knowledge for Front-End Engineers](https://www.amazon.com/High-Performance-Web-Sites-Essential/dp/0596529309) - Steve Souders
   - [Maintainable JavaScript](https://www.amazon.com/Maintainable-JavaScript-Nicholas-C-Zakas/dp/1449327680) - Nicholas C. Zakas
   - [JavaScript Web Applications](https://www.amazon.com/JavaScript-Web-Applications-Alex-MacCaw/dp/144930351X) - Alex MacCaw
diff --git a/react/README.md b/react/README.md
index 4d2aa63fb3..87dbcb9996 100644
--- a/react/README.md
+++ b/react/README.md
@@ -447,13 +447,13 @@ We don’t recommend using indexes for keys if the order of items may change.
   ```jsx
   // bad
   render() {
-    const { irrelevantProp, ...relevantProps  } = this.props;
+    const { irrelevantProp, ...relevantProps } = this.props;
     return <WrappedComponent {...this.props} />
   }
 
   // good
   render() {
-    const { irrelevantProp, ...relevantProps  } = this.props;
+    const { irrelevantProp, ...relevantProps } = this.props;
     return <WrappedComponent {...relevantProps} />
   }
   ```

From 76ff7c7f793633596c262b78ae876da15839a65d Mon Sep 17 00:00:00 2001
From: Christian Oliff <christianoliff@yahoo.com>
Date: Mon, 24 Jun 2019 22:45:35 +0900
Subject: [PATCH 1331/1591] [editorial] [docs] correct JavaScript
 capitalization

---
 README.md                                    | 2 +-
 packages/eslint-config-airbnb-base/README.md | 2 +-
 packages/eslint-config-airbnb/README.md      | 2 +-
 3 files changed, 3 insertions(+), 3 deletions(-)

diff --git a/README.md b/README.md
index 57f90f0651..21b636d0e0 100644
--- a/README.md
+++ b/README.md
@@ -3670,7 +3670,7 @@ Other Style Guides
   - [jQuery Find vs Context, Selector](https://jsperf.com/jquery-find-vs-context-sel/13)
   - [innerHTML vs textContent for script text](https://jsperf.com/innerhtml-vs-textcontent-for-script-text)
   - [Long String Concatenation](https://jsperf.com/ya-string-concat)
-  - [Are Javascript functions like `map()`, `reduce()`, and `filter()` optimized for traversing arrays?](https://www.quora.com/JavaScript-programming-language-Are-Javascript-functions-like-map-reduce-and-filter-already-optimized-for-traversing-array/answer/Quildreen-Motta)
+  - [Are JavaScript functions like `map()`, `reduce()`, and `filter()` optimized for traversing arrays?](https://www.quora.com/JavaScript-programming-language-Are-Javascript-functions-like-map-reduce-and-filter-already-optimized-for-traversing-array/answer/Quildreen-Motta)
   - Loading...
 
 **[⬆ back to top](#table-of-contents)**
diff --git a/packages/eslint-config-airbnb-base/README.md b/packages/eslint-config-airbnb-base/README.md
index a5c3b1075e..685e50060b 100644
--- a/packages/eslint-config-airbnb-base/README.md
+++ b/packages/eslint-config-airbnb-base/README.md
@@ -84,7 +84,7 @@ Lints ES5 and below. Requires `eslint` and `eslint-plugin-import`.
 
 2. Add `"extends": "airbnb-base/legacy"` to your .eslintrc
 
-See [Airbnb's overarching ESLint config](https://npmjs.com/eslint-config-airbnb), [Airbnb's Javascript styleguide](https://github.com/airbnb/javascript), and the [ESlint config docs](https://eslint.org/docs/user-guide/configuring#extending-configuration-files) for more information.
+See [Airbnb's overarching ESLint config](https://npmjs.com/eslint-config-airbnb), [Airbnb's JavaScript styleguide](https://github.com/airbnb/javascript), and the [ESlint config docs](https://eslint.org/docs/user-guide/configuring#extending-configuration-files) for more information.
 
 ### eslint-config-airbnb-base/whitespace
 
diff --git a/packages/eslint-config-airbnb/README.md b/packages/eslint-config-airbnb/README.md
index f7f3c6390d..7296176e26 100644
--- a/packages/eslint-config-airbnb/README.md
+++ b/packages/eslint-config-airbnb/README.md
@@ -68,7 +68,7 @@ This entry point is deprecated. See [eslint-config-airbnb-base](https://npmjs.co
 
 This entry point is deprecated. See [eslint-config-airbnb-base](https://npmjs.com/eslint-config-airbnb-base).
 
-See [Airbnb's Javascript styleguide](https://github.com/airbnb/javascript) and
+See [Airbnb's JavaScript styleguide](https://github.com/airbnb/javascript) and
 the [ESlint config docs](https://eslint.org/docs/user-guide/configuring#extending-configuration-files)
 for more information.
 

From a9a83d9150ce2903032d64593243e3490f332b9f Mon Sep 17 00:00:00 2001
From: Glenn Goossens <48956933+glgoose@users.noreply.github.com>
Date: Thu, 27 Jun 2019 11:37:32 +0200
Subject: [PATCH 1332/1591] [guide] add link to new version of Google Style
 Guide

Add link to a newer version of this guide that includes ECMAScript 6th Edition features
---
 README.md | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/README.md b/README.md
index 21b636d0e0..db6eed916c 100644
--- a/README.md
+++ b/README.md
@@ -3697,7 +3697,8 @@ Other Style Guides
 
 **Other Style Guides**
 
-  - [Google JavaScript Style Guide](https://google.github.io/styleguide/javascriptguide.xml)
+  - [Google JavaScript Style Guide](https://google.github.io/styleguide/jsguide.html)
+  - [Google JavaScript Style Guide (Old)](https://google.github.io/styleguide/javascriptguide.xml)
   - [jQuery Core Style Guidelines](https://contribute.jquery.org/style-guide/js/)
   - [Principles of Writing Consistent, Idiomatic JavaScript](https://github.com/rwaldron/idiomatic.js)
   - [StandardJS](https://standardjs.com)

From 9fbe07f282ddff9585423a4eee738022e4f7ea33 Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Mon, 1 Jul 2019 15:05:02 -0700
Subject: [PATCH 1333/1591] [eslint-config] [base] v13.2.0

---
 packages/eslint-config-airbnb-base/CHANGELOG.md | 14 ++++++++++++++
 packages/eslint-config-airbnb-base/package.json |  2 +-
 2 files changed, 15 insertions(+), 1 deletion(-)

diff --git a/packages/eslint-config-airbnb-base/CHANGELOG.md b/packages/eslint-config-airbnb-base/CHANGELOG.md
index c945013b25..4b475827cb 100644
--- a/packages/eslint-config-airbnb-base/CHANGELOG.md
+++ b/packages/eslint-config-airbnb-base/CHANGELOG.md
@@ -1,3 +1,17 @@
+13.2.0 / 2019-07-01
+==================
+ - [minor] Enforce dangling underscores in method names (#1907)
+ - [fix] disable `no-var` in legacy entry point
+ - [patch] Ignore property modifications of `staticContext` params (#2029)
+ - [patch] `no-extraneous-dependencies`: Add jest.setup.js to devDeps (#1998)
+ - [meta] add disabled `prefer-named-capture-group` rule
+ - [meta] add disabled `no-useless-catch` config
+ - [deps] Switch to confusing-browser-globals (#1961)
+ - [deps] update `object.entries`, `eslint-plugin-import`, `eslint-plugin-jsx-a11y`, `eslint-plugin-react`, `tape`
+ - [docs] correct JavaScript capitalization (#2046)
+ - [readme] Improve eslint config setup instructions for yarn (#2001)
+ - [docs] fix docs for whitespace config (#1914, #1871)
+
 13.1.0 / 2018-08-13
 ==================
  - [new] add eslint v5 support (#1834)
diff --git a/packages/eslint-config-airbnb-base/package.json b/packages/eslint-config-airbnb-base/package.json
index 462bfcd0b2..52603b1bb0 100644
--- a/packages/eslint-config-airbnb-base/package.json
+++ b/packages/eslint-config-airbnb-base/package.json
@@ -1,6 +1,6 @@
 {
   "name": "eslint-config-airbnb-base",
-  "version": "13.1.0",
+  "version": "13.2.0",
   "description": "Airbnb's base JS ESLint config, following our styleguide",
   "main": "index.js",
   "scripts": {

From 7ea44cfc798b6789150ac7d22e7d6c399b3e6f18 Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Mon, 1 Jul 2019 16:12:08 -0700
Subject: [PATCH 1334/1591] [eslint config] [deps] update
 `eslint-config-airbnb-base`, `eslint-plugin-import`, `eslint-plugin-react`,
 `eslint-plugin-jsx-a11y`, `babel-preset-airbnb`, `tape`

---
 packages/eslint-config-airbnb/package.json | 18 +++++++++---------
 1 file changed, 9 insertions(+), 9 deletions(-)

diff --git a/packages/eslint-config-airbnb/package.json b/packages/eslint-config-airbnb/package.json
index d7b8662945..2df77c855f 100644
--- a/packages/eslint-config-airbnb/package.json
+++ b/packages/eslint-config-airbnb/package.json
@@ -54,29 +54,29 @@
   },
   "homepage": "https://github.com/airbnb/javascript",
   "dependencies": {
-    "eslint-config-airbnb-base": "^13.1.0",
+    "eslint-config-airbnb-base": "^13.2.0",
     "object.assign": "^4.1.0",
     "object.entries": "^1.1.0"
   },
   "devDependencies": {
-    "babel-preset-airbnb": "^2.5.3",
+    "babel-preset-airbnb": "^2.6.0",
     "babel-tape-runner": "^2.0.1",
     "editorconfig-tools": "^0.1.1",
     "eslint": "^4.19.1 || ^5.3.0",
     "eslint-find-rules": "^3.3.1",
-    "eslint-plugin-import": "^2.16.0",
-    "eslint-plugin-jsx-a11y": "^6.2.1",
-    "eslint-plugin-react": "^7.12.4",
+    "eslint-plugin-import": "^2.18.0",
+    "eslint-plugin-jsx-a11y": "^6.2.3",
+    "eslint-plugin-react": "^7.14.2",
     "in-publish": "^2.0.0",
     "react": ">= 0.13.0",
     "safe-publish-latest": "^1.1.2",
-    "tape": "^4.10.1"
+    "tape": "^4.11.0"
   },
   "peerDependencies": {
     "eslint": "^4.19.1 || ^5.3.0",
-    "eslint-plugin-import": "^2.15.0",
-    "eslint-plugin-jsx-a11y": "^6.2.0",
-    "eslint-plugin-react": "^7.12.4"
+    "eslint-plugin-import": "^2.18.0",
+    "eslint-plugin-jsx-a11y": "^6.2.3",
+    "eslint-plugin-react": "^7.14.2"
   },
   "engines": {
     "node": ">= 4"

From 873f302b00398e59f8622e8193f2f47f66960066 Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Mon, 1 Jul 2019 16:17:49 -0700
Subject: [PATCH 1335/1591] [eslint config] v17.1.1

---
 packages/eslint-config-airbnb/CHANGELOG.md | 10 ++++++++++
 packages/eslint-config-airbnb/package.json |  2 +-
 2 files changed, 11 insertions(+), 1 deletion(-)

diff --git a/packages/eslint-config-airbnb/CHANGELOG.md b/packages/eslint-config-airbnb/CHANGELOG.md
index 87bbfc8823..ed2d7af0e3 100644
--- a/packages/eslint-config-airbnb/CHANGELOG.md
+++ b/packages/eslint-config-airbnb/CHANGELOG.md
@@ -1,3 +1,13 @@
+17.1.1 / 2019-07-01
+==================
+ - [patch] Turn off `react/no-multi-comp` (#2006)
+ - [patch] extend `no-underscore-dangle` to allow for redux dev tools in the main config instead (#1996)
+ - [meta] add disabled `jsx-fragments` rule
+ - [deps] update `eslint-config-airbnb-base`, `object.entries`, `eslint-plugin-import`, `eslint-plugin-react`, `eslint-plugin-jsx-a11y`, `babel-preset-airbnb`, `tape` (#2005, etc)
+ - [docs] correct JavaScript capitalization (#2046)
+ - [docs] fix docs for whitespace config (#1914, #1871)
+ - [readme] Improve eslint config setup instructions for yarn (#2001)
+
 17.1.0 / 2018-08-13
 ==================
 - [new] add eslint v5 support
diff --git a/packages/eslint-config-airbnb/package.json b/packages/eslint-config-airbnb/package.json
index 2df77c855f..5bb3d78ba4 100644
--- a/packages/eslint-config-airbnb/package.json
+++ b/packages/eslint-config-airbnb/package.json
@@ -1,6 +1,6 @@
 {
   "name": "eslint-config-airbnb",
-  "version": "17.1.0",
+  "version": "17.1.1",
   "description": "Airbnb's ESLint config, following our styleguide",
   "main": "index.js",
   "scripts": {

From 21493ad7e93d19c133481f833c1d1a3bdfe30098 Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Mon, 1 Jul 2019 16:26:52 -0700
Subject: [PATCH 1336/1591] [eslint config] [base] [deps] update
 `confusing-browser-globals`, `eslint-plugin-import`, `tape`,
 `babel-preset-airbnb`

---
 packages/eslint-config-airbnb-base/package.json | 10 +++++-----
 1 file changed, 5 insertions(+), 5 deletions(-)

diff --git a/packages/eslint-config-airbnb-base/package.json b/packages/eslint-config-airbnb-base/package.json
index 52603b1bb0..67a010f839 100644
--- a/packages/eslint-config-airbnb-base/package.json
+++ b/packages/eslint-config-airbnb-base/package.json
@@ -53,25 +53,25 @@
   },
   "homepage": "https://github.com/airbnb/javascript",
   "devDependencies": {
-    "babel-preset-airbnb": "^2.5.3",
+    "babel-preset-airbnb": "^2.6.0",
     "babel-tape-runner": "^2.0.1",
     "editorconfig-tools": "^0.1.1",
     "eslint": "^4.19.1 || ^5.3.0",
     "eslint-find-rules": "^3.3.1",
-    "eslint-plugin-import": "^2.17.2",
+    "eslint-plugin-import": "^2.18.0",
     "in-publish": "^2.0.0",
     "safe-publish-latest": "^1.1.2",
-    "tape": "^4.10.1"
+    "tape": "^4.11.0"
   },
   "peerDependencies": {
     "eslint": "^4.19.1 || ^5.3.0",
-    "eslint-plugin-import": "^2.17.2"
+    "eslint-plugin-import": "^2.18.0"
   },
   "engines": {
     "node": ">= 4"
   },
   "dependencies": {
-    "confusing-browser-globals": "^1.0.5",
+    "confusing-browser-globals": "^1.0.7",
     "object.assign": "^4.1.0",
     "object.entries": "^1.1.0"
   }

From 6a50516df70457d8b70fe4e6b2a02d5aaefb0f7d Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Mon, 1 Jul 2019 17:07:38 -0700
Subject: [PATCH 1337/1591] [eslint config] [meta] add disabled config for new
 react and a11y rules

---
 .../eslint-config-airbnb/rules/react-a11y.js  | 30 +++++++++++++++++
 packages/eslint-config-airbnb/rules/react.js  | 33 +++++++++++++++++++
 2 files changed, 63 insertions(+)

diff --git a/packages/eslint-config-airbnb/rules/react-a11y.js b/packages/eslint-config-airbnb/rules/react-a11y.js
index dbb073fa67..ffb4d28c29 100644
--- a/packages/eslint-config-airbnb/rules/react-a11y.js
+++ b/packages/eslint-config-airbnb/rules/react-a11y.js
@@ -66,6 +66,36 @@ module.exports = {
       depth: 25
     }],
 
+    // Enforce that a control (an interactive element) has a text label.
+    // https://github.com/evcohen/eslint-plugin-jsx-a11y/blob/master/docs/rules/control-has-associated-label.md
+    // TODO, semver-major: enable
+    'jsx-a11y/control-has-associated-label': ['off', {
+      labelAttributes: ['label'],
+      controlComponents: [],
+      ignoreElements: [
+        'audio',
+        'canvas',
+        'embed',
+        'input',
+        'textarea',
+        'tr',
+        'video',
+      ],
+      ignoreRoles: [
+        'grid',
+        'listbox',
+        'menu',
+        'menubar',
+        'radiogroup',
+        'row',
+        'tablist',
+        'toolbar',
+        'tree',
+        'treegrid',
+      ],
+      depth: 5,
+    }],
+
     // require that mouseover/out come with focus/blur, for keyboard-only users
     // https://github.com/evcohen/eslint-plugin-jsx-a11y/blob/master/docs/rules/mouse-events-have-key-events.md
     'jsx-a11y/mouse-events-have-key-events': 'error',
diff --git a/packages/eslint-config-airbnb/rules/react.js b/packages/eslint-config-airbnb/rules/react.js
index fdf48690a3..bb2373cdbc 100644
--- a/packages/eslint-config-airbnb/rules/react.js
+++ b/packages/eslint-config-airbnb/rules/react.js
@@ -465,6 +465,39 @@ module.exports = {
     // https://github.com/yannickcr/eslint-plugin-react/blob/bc976b837abeab1dffd90ac6168b746a83fc83cc/docs/rules/jsx-fragments.md
     // TODO: enable, semver-major
     'react/jsx-fragments': ['off', 'syntax'],
+
+    // Enforce linebreaks in curly braces in JSX attributes and expressions.
+    // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/jsx-curly-newline.md
+    // TODO: enable, semver-minor
+    'react/jsx-curly-newline': ['off', {
+      multiline: 'consistent',
+      single: 'consistent',
+    }],
+
+    // Enforce state initialization style
+    // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/state-in-constructor.md
+    // TODO: enable, semver-minor
+    // TODO: set to "always" once babel-preset-airbnb supports public class fields
+    'react/state-in-constructor': ['off', 'never'],
+
+    // Enforces where React component static properties should be positioned
+    // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/static-property-placement.md
+    // TODO: enable, semver-minor
+    // TODO: set to "static public field" once babel-preset-airbnb supports public class fields
+    'react/static-property-placement': ['off', 'property assignment'],
+
+    // Disallow JSX props spreading
+    // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/jsx-props-no-spreading.md
+    // TODO: enable, semver-major
+    'react/jsx-props-no-spreading': ['off', {
+      html: 'enforce',
+      custom: 'enforce',
+      exceptions: [],
+    }],
+
+    // Enforce that props are read-only
+    // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/prefer-read-only-props.md
+    'react/prefer-read-only-props': 'off',
   },
 
   settings: {

From 036612ec3d8af223d2a3adc40aca70365b5612fd Mon Sep 17 00:00:00 2001
From: Perttu Ristimella <perttu@pertturistimella.com>
Date: Thu, 4 Jul 2019 14:59:47 +0300
Subject: [PATCH 1338/1591] [inthewile] Add Happeo to users list

---
 README.md | 1 +
 1 file changed, 1 insertion(+)

diff --git a/README.md b/README.md
index db6eed916c..49f2b07e97 100644
--- a/README.md
+++ b/README.md
@@ -3801,6 +3801,7 @@ Other Style Guides
   - **GreenChef**: [greenchef/javascript](https://github.com/greenchef/javascript)
   - **Grooveshark**: [grooveshark/javascript](https://github.com/grooveshark/javascript)
   - **Grupo-Abraxas**: [Grupo-Abraxas/javascript](https://github.com/Grupo-Abraxas/javascript)
+  - **Happeo**: [happeo/javascript](https://github.com/happeo/javascript)
   - **Honey**: [honeyscience/javascript](https://github.com/honeyscience/javascript)
   - **How About We**: [howaboutwe/javascript](https://github.com/howaboutwe/javascript-style-guide)
   - **Huballin**: [huballin](https://github.com/huballin/)

From 030e23b13e9d21b0775239c475ea137ad13e8a64 Mon Sep 17 00:00:00 2001
From: Mathieu Dutto <mathieu.dutto@evaneos.com>
Date: Wed, 24 Jul 2019 15:36:48 +0200
Subject: [PATCH 1339/1591] [guide] Fix npm package has usage example

---
 README.md | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/README.md b/README.md
index 49f2b07e97..931b69d0c0 100644
--- a/README.md
+++ b/README.md
@@ -298,10 +298,10 @@ Other Style Guides
 
     // best
     const has = Object.prototype.hasOwnProperty; // cache the lookup once, in module scope.
+    console.log(has.call(object, key));
     /* or */
     import has from 'has'; // https://www.npmjs.com/package/has
-    // ...
-    console.log(has.call(object, key));
+    console.log(has(object, key));
     ```
 
   <a name="objects--rest-spread"></a>

From 6c0a884179c5fcb7b52d516dcfb54c6bcf4dc6c1 Mon Sep 17 00:00:00 2001
From: Yohan Siguret <yohan.siguret@gmail.com>
Date: Sat, 3 Aug 2019 00:57:12 +0200
Subject: [PATCH 1340/1591] [guide] fix dead jsperf links

---
 README.md | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/README.md b/README.md
index 931b69d0c0..e478830ca8 100644
--- a/README.md
+++ b/README.md
@@ -3665,11 +3665,11 @@ Other Style Guides
 
   - [On Layout & Web Performance](https://www.kellegous.com/j/2013/01/26/layout-performance/)
   - [String vs Array Concat](https://jsperf.com/string-vs-array-concat/2)
-  - [Try/Catch Cost In a Loop](https://jsperf.com/try-catch-in-loop-cost)
+  - [Try/Catch Cost In a Loop](https://jsperf.com/try-catch-in-loop-cost/12)
   - [Bang Function](https://jsperf.com/bang-function)
-  - [jQuery Find vs Context, Selector](https://jsperf.com/jquery-find-vs-context-sel/13)
+  - [jQuery Find vs Context, Selector](https://jsperf.com/jquery-find-vs-context-sel/164)
   - [innerHTML vs textContent for script text](https://jsperf.com/innerhtml-vs-textcontent-for-script-text)
-  - [Long String Concatenation](https://jsperf.com/ya-string-concat)
+  - [Long String Concatenation](https://jsperf.com/ya-string-concat/38)
   - [Are JavaScript functions like `map()`, `reduce()`, and `filter()` optimized for traversing arrays?](https://www.quora.com/JavaScript-programming-language-Are-Javascript-functions-like-map-reduce-and-filter-already-optimized-for-traversing-array/answer/Quildreen-Motta)
   - Loading...
 

From 792bb567e5d7437a381dfd9ab530b13fa2331c2e Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Fri, 9 Aug 2019 14:04:36 -0700
Subject: [PATCH 1341/1591] [eslint config] [*] update `eslint-find-rules`,
 `eslint-plugin-import`

---
 packages/eslint-config-airbnb-base/package.json | 6 +++---
 packages/eslint-config-airbnb/package.json      | 6 +++---
 2 files changed, 6 insertions(+), 6 deletions(-)

diff --git a/packages/eslint-config-airbnb-base/package.json b/packages/eslint-config-airbnb-base/package.json
index 67a010f839..a35f36526c 100644
--- a/packages/eslint-config-airbnb-base/package.json
+++ b/packages/eslint-config-airbnb-base/package.json
@@ -57,15 +57,15 @@
     "babel-tape-runner": "^2.0.1",
     "editorconfig-tools": "^0.1.1",
     "eslint": "^4.19.1 || ^5.3.0",
-    "eslint-find-rules": "^3.3.1",
-    "eslint-plugin-import": "^2.18.0",
+    "eslint-find-rules": "^3.4.0",
+    "eslint-plugin-import": "^2.18.2",
     "in-publish": "^2.0.0",
     "safe-publish-latest": "^1.1.2",
     "tape": "^4.11.0"
   },
   "peerDependencies": {
     "eslint": "^4.19.1 || ^5.3.0",
-    "eslint-plugin-import": "^2.18.0"
+    "eslint-plugin-import": "^2.18.2"
   },
   "engines": {
     "node": ">= 4"
diff --git a/packages/eslint-config-airbnb/package.json b/packages/eslint-config-airbnb/package.json
index 5bb3d78ba4..c7d7940c1e 100644
--- a/packages/eslint-config-airbnb/package.json
+++ b/packages/eslint-config-airbnb/package.json
@@ -63,8 +63,8 @@
     "babel-tape-runner": "^2.0.1",
     "editorconfig-tools": "^0.1.1",
     "eslint": "^4.19.1 || ^5.3.0",
-    "eslint-find-rules": "^3.3.1",
-    "eslint-plugin-import": "^2.18.0",
+    "eslint-find-rules": "^3.4.0",
+    "eslint-plugin-import": "^2.18.2",
     "eslint-plugin-jsx-a11y": "^6.2.3",
     "eslint-plugin-react": "^7.14.2",
     "in-publish": "^2.0.0",
@@ -74,7 +74,7 @@
   },
   "peerDependencies": {
     "eslint": "^4.19.1 || ^5.3.0",
-    "eslint-plugin-import": "^2.18.0",
+    "eslint-plugin-import": "^2.18.2",
     "eslint-plugin-jsx-a11y": "^6.2.3",
     "eslint-plugin-react": "^7.14.2"
   },

From 820ccf7652f2f67a18b095a613ba99f9159eac93 Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Fri, 9 Aug 2019 14:06:58 -0700
Subject: [PATCH 1342/1591] [eslint config] [*] [tests] use `eclint` instead of
 `editorconfig-tools`

---
 .editorconfig                                       | 5 ++++-
 packages/eslint-config-airbnb-base/package.json     | 4 ++--
 packages/eslint-config-airbnb-base/test/requires.js | 5 +----
 packages/eslint-config-airbnb/package.json          | 4 ++--
 packages/eslint-config-airbnb/test/requires.js      | 5 +----
 5 files changed, 10 insertions(+), 13 deletions(-)

diff --git a/.editorconfig b/.editorconfig
index 49c154da45..db6f34c77c 100644
--- a/.editorconfig
+++ b/.editorconfig
@@ -8,4 +8,7 @@ trim_trailing_whitespace = true
 insert_final_newline = true
 end_of_line = lf
 # editorconfig-tools is unable to ignore longs strings or urls
-max_line_length = null
+max_line_length = off
+
+[CHANGELOG.md]
+indent_size = false
diff --git a/packages/eslint-config-airbnb-base/package.json b/packages/eslint-config-airbnb-base/package.json
index a35f36526c..2bb9923dd8 100644
--- a/packages/eslint-config-airbnb-base/package.json
+++ b/packages/eslint-config-airbnb-base/package.json
@@ -4,7 +4,7 @@
   "description": "Airbnb's base JS ESLint config, following our styleguide",
   "main": "index.js",
   "scripts": {
-    "prelint": "editorconfig-tools check * rules/* test/*",
+    "prelint": "eclint check * rules/* test/*",
     "lint": "eslint --report-unused-disable-directives .",
     "pretests-only": "node ./test/requires",
     "tests-only": "babel-tape-runner ./test/test-*.js",
@@ -55,7 +55,7 @@
   "devDependencies": {
     "babel-preset-airbnb": "^2.6.0",
     "babel-tape-runner": "^2.0.1",
-    "editorconfig-tools": "^0.1.1",
+    "eclint": "^2.8.1",
     "eslint": "^4.19.1 || ^5.3.0",
     "eslint-find-rules": "^3.4.0",
     "eslint-plugin-import": "^2.18.2",
diff --git a/packages/eslint-config-airbnb-base/test/requires.js b/packages/eslint-config-airbnb-base/test/requires.js
index 180a09bf42..8176480fe1 100644
--- a/packages/eslint-config-airbnb-base/test/requires.js
+++ b/packages/eslint-config-airbnb-base/test/requires.js
@@ -1,7 +1,4 @@
-/* eslint
-   strict: 0,
-   global-require: 0,
- */
+/* eslint strict: 0, global-require: 0 */
 
 'use strict';
 
diff --git a/packages/eslint-config-airbnb/package.json b/packages/eslint-config-airbnb/package.json
index c7d7940c1e..ff57a9312e 100644
--- a/packages/eslint-config-airbnb/package.json
+++ b/packages/eslint-config-airbnb/package.json
@@ -4,7 +4,7 @@
   "description": "Airbnb's ESLint config, following our styleguide",
   "main": "index.js",
   "scripts": {
-    "prelint": "editorconfig-tools check * rules/* test/*",
+    "prelint": "eclint check * rules/* test/*",
     "lint": "eslint .",
     "pretests-only": "node ./test/requires",
     "tests-only": "babel-tape-runner ./test/test-*.js",
@@ -61,7 +61,7 @@
   "devDependencies": {
     "babel-preset-airbnb": "^2.6.0",
     "babel-tape-runner": "^2.0.1",
-    "editorconfig-tools": "^0.1.1",
+    "eclint": "^2.8.1",
     "eslint": "^4.19.1 || ^5.3.0",
     "eslint-find-rules": "^3.4.0",
     "eslint-plugin-import": "^2.18.2",
diff --git a/packages/eslint-config-airbnb/test/requires.js b/packages/eslint-config-airbnb/test/requires.js
index 0ab4aae58d..964318521e 100644
--- a/packages/eslint-config-airbnb/test/requires.js
+++ b/packages/eslint-config-airbnb/test/requires.js
@@ -1,7 +1,4 @@
-/* eslint
-   strict: 0,
-   global-require: 0,
- */
+/* eslint strict: 0, global-require: 0 */
 
 'use strict';
 

From 945c62f22996d0fd3e7917d2769d60b1dd533e49 Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Fri, 9 Aug 2019 14:11:27 -0700
Subject: [PATCH 1343/1591] [Tests] on `node` `v12`

---
 .travis.yml | 1 +
 1 file changed, 1 insertion(+)

diff --git a/.travis.yml b/.travis.yml
index 90d9d857d2..87d8258fac 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -1,5 +1,6 @@
 language: node_js
 node_js:
+  - "12"
   - "11"
   - "10"
   - "9"

From 3b18fea1ede26833c432e96f4330edcddd2f12b7 Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Fri, 9 Aug 2019 14:20:40 -0700
Subject: [PATCH 1344/1591] [Tests] only run tests in non-lint per-package
 travis job

---
 packages/eslint-config-airbnb-base/package.json | 2 +-
 packages/eslint-config-airbnb/package.json      | 2 +-
 2 files changed, 2 insertions(+), 2 deletions(-)

diff --git a/packages/eslint-config-airbnb-base/package.json b/packages/eslint-config-airbnb-base/package.json
index 2bb9923dd8..753fd50076 100644
--- a/packages/eslint-config-airbnb-base/package.json
+++ b/packages/eslint-config-airbnb-base/package.json
@@ -12,7 +12,7 @@
     "pretest": "npm run --silent lint",
     "test": "npm run --silent tests-only",
     "pretravis": ":",
-    "travis": "npm run --silent test",
+    "travis": "npm run --silent tests-only",
     "posttravis": ":"
   },
   "repository": {
diff --git a/packages/eslint-config-airbnb/package.json b/packages/eslint-config-airbnb/package.json
index ff57a9312e..0cc40907cc 100644
--- a/packages/eslint-config-airbnb/package.json
+++ b/packages/eslint-config-airbnb/package.json
@@ -13,7 +13,7 @@
     "test": "npm run --silent tests-only",
     "link:eslint": "cd node_modules/eslint && npm link --production && cd -",
     "pretravis": "npm run link:eslint && cd ../eslint-config-airbnb-base && npm link eslint && npm install && npm link && cd - && npm link --no-save eslint-config-airbnb-base",
-    "travis": "npm run --silent test",
+    "travis": "npm run --silent tests-only",
     "posttravis": "npm unlink --no-save eslint-config-airbnb-base eslint >/dev/null &"
   },
   "repository": {

From 8eacf24310f314abd40a1266e90818e11fefbdca Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Fri, 9 Aug 2019 14:18:55 -0700
Subject: [PATCH 1345/1591] [eslint config] [*] [breaking] add eslint v6, drop
 eslint v4

See #2036
---
 .travis.yml                                   | 32 ++++++++-----------
 .../eslint-config-airbnb-base/package.json    |  6 ++--
 .../eslint-config-airbnb-base/whitespace.js   |  2 +-
 packages/eslint-config-airbnb/package.json    |  6 ++--
 packages/eslint-config-airbnb/whitespace.js   |  2 +-
 5 files changed, 22 insertions(+), 26 deletions(-)

diff --git a/.travis.yml b/.travis.yml
index 87d8258fac..df4ad7cf56 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -5,10 +5,6 @@ node_js:
   - "10"
   - "9"
   - "8"
-  - "7"
-  - "6"
-  - "5"
-  - "4"
 before_install:
   - 'nvm install-latest-npm'
 install:
@@ -20,37 +16,37 @@ script:
 sudo: false
 env:
   matrix:
+    - 'TEST=true ESLINT=6 PACKAGE=eslint-config-airbnb-base'
+    - 'TEST=true ESLINT=6 PACKAGE=eslint-config-airbnb'
     - 'TEST=true ESLINT=5 PACKAGE=eslint-config-airbnb-base'
     - 'TEST=true ESLINT=5 PACKAGE=eslint-config-airbnb'
-    - 'TEST=true ESLINT=4 PACKAGE=eslint-config-airbnb-base'
-    - 'TEST=true ESLINT=4 PACKAGE=eslint-config-airbnb'
 matrix:
   fast_finish: true
   include:
     - node_js: "lts/*"
-      env: PREPUBLISH=true ESLINT=5 PACKAGE=eslint-config-airbnb-base
+      env: PREPUBLISH=true ESLINT=6 PACKAGE=eslint-config-airbnb-base
     - node_js: "lts/*"
-      env: PREPUBLISH=true ESLINT=5 PACKAGE=eslint-config-airbnb
+      env: PREPUBLISH=true ESLINT=6 PACKAGE=eslint-config-airbnb
     - node_js: "lts/*"
-      env: PREPUBLISH=true ESLINT=4 PACKAGE=eslint-config-airbnb-base
+      env: PREPUBLISH=true ESLINT=5 PACKAGE=eslint-config-airbnb-base
     - node_js: "lts/*"
-      env: PREPUBLISH=true ESLINT=4 PACKAGE=eslint-config-airbnb
+      env: PREPUBLISH=true ESLINT=5 PACKAGE=eslint-config-airbnb
     - node_js: "lts/*"
       env: LINT=true
-  exclude:
-    - node_js: "5"
+    - node_js: "7"
       env: TEST=true ESLINT=5 PACKAGE=eslint-config-airbnb-base
-    - node_js: "5"
+    - node_js: "7"
       env: TEST=true ESLINT=5 PACKAGE=eslint-config-airbnb
-    - node_js: "4"
+    - node_js: "6"
       env: TEST=true ESLINT=5 PACKAGE=eslint-config-airbnb-base
-    - node_js: "4"
+    - node_js: "6"
       env: TEST=true ESLINT=5 PACKAGE=eslint-config-airbnb
+  exclude:
   allow_failures:
+    - node_js: "11"
     - node_js: "9"
     - node_js: "7"
-    - node_js: "5"
+    - env: PREPUBLISH=true ESLINT=6 PACKAGE=eslint-config-airbnb-base
+    - env: PREPUBLISH=true ESLINT=6 PACKAGE=eslint-config-airbnb
     - env: PREPUBLISH=true ESLINT=5 PACKAGE=eslint-config-airbnb-base
     - env: PREPUBLISH=true ESLINT=5 PACKAGE=eslint-config-airbnb
-    - env: PREPUBLISH=true ESLINT=4 PACKAGE=eslint-config-airbnb-base
-    - env: PREPUBLISH=true ESLINT=4 PACKAGE=eslint-config-airbnb
diff --git a/packages/eslint-config-airbnb-base/package.json b/packages/eslint-config-airbnb-base/package.json
index 753fd50076..5959e0f89b 100644
--- a/packages/eslint-config-airbnb-base/package.json
+++ b/packages/eslint-config-airbnb-base/package.json
@@ -56,7 +56,7 @@
     "babel-preset-airbnb": "^2.6.0",
     "babel-tape-runner": "^2.0.1",
     "eclint": "^2.8.1",
-    "eslint": "^4.19.1 || ^5.3.0",
+    "eslint": "^5.16.0 || ^6.1.0",
     "eslint-find-rules": "^3.4.0",
     "eslint-plugin-import": "^2.18.2",
     "in-publish": "^2.0.0",
@@ -64,11 +64,11 @@
     "tape": "^4.11.0"
   },
   "peerDependencies": {
-    "eslint": "^4.19.1 || ^5.3.0",
+    "eslint": "^5.16.0 || ^6.1.0",
     "eslint-plugin-import": "^2.18.2"
   },
   "engines": {
-    "node": ">= 4"
+    "node": ">= 6"
   },
   "dependencies": {
     "confusing-browser-globals": "^1.0.7",
diff --git a/packages/eslint-config-airbnb-base/whitespace.js b/packages/eslint-config-airbnb-base/whitespace.js
index d215d4ae6a..917ee0c50e 100644
--- a/packages/eslint-config-airbnb-base/whitespace.js
+++ b/packages/eslint-config-airbnb-base/whitespace.js
@@ -7,7 +7,7 @@ const baseConfig = require('.');
 function onlyErrorOnRules(rulesToError, config) {
   const errorsOnly = assign({}, config);
   const cli = new CLIEngine({ baseConfig: config, useEslintrc: false });
-  const baseRules = cli.getConfigForFile('./').rules;
+  const baseRules = cli.getConfigForFile(require.resolve('./')).rules;
 
   entries(baseRules).forEach((rule) => {
     const ruleName = rule[0];
diff --git a/packages/eslint-config-airbnb/package.json b/packages/eslint-config-airbnb/package.json
index 0cc40907cc..466a8132b8 100644
--- a/packages/eslint-config-airbnb/package.json
+++ b/packages/eslint-config-airbnb/package.json
@@ -62,7 +62,7 @@
     "babel-preset-airbnb": "^2.6.0",
     "babel-tape-runner": "^2.0.1",
     "eclint": "^2.8.1",
-    "eslint": "^4.19.1 || ^5.3.0",
+    "eslint": "^5.16.0 || ^6.1.0",
     "eslint-find-rules": "^3.4.0",
     "eslint-plugin-import": "^2.18.2",
     "eslint-plugin-jsx-a11y": "^6.2.3",
@@ -73,12 +73,12 @@
     "tape": "^4.11.0"
   },
   "peerDependencies": {
-    "eslint": "^4.19.1 || ^5.3.0",
+    "eslint": "^5.16.0 || ^6.1.0",
     "eslint-plugin-import": "^2.18.2",
     "eslint-plugin-jsx-a11y": "^6.2.3",
     "eslint-plugin-react": "^7.14.2"
   },
   "engines": {
-    "node": ">= 4"
+    "node": ">= 6"
   }
 }
diff --git a/packages/eslint-config-airbnb/whitespace.js b/packages/eslint-config-airbnb/whitespace.js
index 414f9c37a1..654773758d 100644
--- a/packages/eslint-config-airbnb/whitespace.js
+++ b/packages/eslint-config-airbnb/whitespace.js
@@ -7,7 +7,7 @@ const baseConfig = require('.');
 function onlyErrorOnRules(rulesToError, config) {
   const errorsOnly = assign({}, config);
   const cli = new CLIEngine({ baseConfig: config, useEslintrc: false });
-  const baseRules = cli.getConfigForFile('./').rules;
+  const baseRules = cli.getConfigForFile(require.resolve('./')).rules;
 
   entries(baseRules).forEach((rule) => {
     const ruleName = rule[0];

From 820745d61090139193cf9257b88974e36dfc9b35 Mon Sep 17 00:00:00 2001
From: Sharmila <sharmila.jesupaul@airbnb.com>
Date: Mon, 9 Jul 2018 18:14:32 -0700
Subject: [PATCH 1346/1591] [guide] [eslint config] [base] [breaking] Require
 parens for arrow function args

---
 README.md                                     | 46 +++++++++++--------
 .../eslint-config-airbnb-base/rules/es6.js    |  4 +-
 .../test/test-base.js                         |  2 +-
 .../eslint-config-airbnb/test/test-base.js    |  2 +-
 4 files changed, 30 insertions(+), 24 deletions(-)

diff --git a/README.md b/README.md
index e478830ca8..25fbd7f567 100644
--- a/README.md
+++ b/README.md
@@ -418,7 +418,7 @@ Other Style Guides
     });
 
     // good
-    [1, 2, 3].map(x => x + 1);
+    [1, 2, 3].map((x) => x + 1);
 
     // bad - no returned value means `acc` becomes undefined after the first iteration
     [[0, 1], [2, 3], [4, 5]].reduce((acc, item, index) => {
@@ -955,13 +955,16 @@ Other Style Guides
 
     ```javascript
     // bad
-    [1, 2, 3].map(number => {
+    [1, 2, 3].map((number) => {
       const nextNumber = number + 1;
       `A string containing the ${nextNumber}.`;
     });
 
+    // bad
+    [1, 2, 3].map((number) => `A string containing the ${number}.`);
+
     // good
-    [1, 2, 3].map(number => `A string containing the ${number + 1}.`);
+    [1, 2, 3].map((number) => `A string containing the ${number + 1}.`);
 
     // good
     [1, 2, 3].map((number) => {
@@ -1000,14 +1003,14 @@ Other Style Guides
 
     ```javascript
     // bad
-    ['get', 'post', 'put'].map(httpMethod => Object.prototype.hasOwnProperty.call(
+    ['get', 'post', 'put'].map((httpMethod) => Object.prototype.hasOwnProperty.call(
         httpMagicObjectWithAVeryLongName,
         httpMethod,
       )
     );
 
     // good
-    ['get', 'post', 'put'].map(httpMethod => (
+    ['get', 'post', 'put'].map((httpMethod) => (
       Object.prototype.hasOwnProperty.call(
         httpMagicObjectWithAVeryLongName,
         httpMethod,
@@ -1016,22 +1019,27 @@ Other Style Guides
     ```
 
   <a name="arrows--one-arg-parens"></a><a name="8.4"></a>
-  - [8.4](#arrows--one-arg-parens) If your function takes a single argument and doesn’t use braces, omit the parentheses. Otherwise, always include parentheses around arguments for clarity and consistency. Note: it is also acceptable to always use parentheses, in which case use the [“always” option](https://eslint.org/docs/rules/arrow-parens#always) for eslint. eslint: [`arrow-parens`](https://eslint.org/docs/rules/arrow-parens.html)
+  - [8.4](#arrows--one-arg-parens) Always include parentheses around arguments for clarity and consistency. eslint: [`arrow-parens`](https://eslint.org/docs/rules/arrow-parens.html)
 
-    > Why? Less visual clutter.
+    > Why? Minimizes diff churn when adding or removing arguments.
 
     ```javascript
     // bad
-    [1, 2, 3].map((x) => x * x);
-
-    // good
     [1, 2, 3].map(x => x * x);
 
     // good
+    [1, 2, 3].map((x) => x * x);
+
+    // bad
     [1, 2, 3].map(number => (
       `A long string with the ${number}. It’s so long that we don’t want it to take up space on the .map line!`
     ));
 
+    // good
+    [1, 2, 3].map((number) => (
+      `A long string with the ${number}. It’s so long that we don’t want it to take up space on the .map line!`
+    ));
+
     // bad
     [1, 2, 3].map(x => {
       const y = x + 1;
@@ -1050,13 +1058,13 @@ Other Style Guides
 
     ```javascript
     // bad
-    const itemHeight = item => item.height <= 256 ? item.largeSize : item.smallSize;
+    const itemHeight = (item) => item.height <= 256 ? item.largeSize : item.smallSize;
 
     // bad
     const itemHeight = (item) => item.height >= 256 ? item.largeSize : item.smallSize;
 
     // good
-    const itemHeight = item => (item.height <= 256 ? item.largeSize : item.smallSize);
+    const itemHeight = (item) => (item.height <= 256 ? item.largeSize : item.smallSize);
 
     // good
     const itemHeight = (item) => {
@@ -1070,16 +1078,16 @@ Other Style Guides
 
     ```javascript
     // bad
-    foo =>
+    (foo) =>
       bar;
 
-    foo =>
+    (foo) =>
       (bar);
 
     // good
-    foo => bar;
-    foo => (bar);
-    foo => (
+    (foo) => bar;
+    (foo) => (bar);
+    (foo) => (
        bar
     )
     ```
@@ -1448,7 +1456,7 @@ Other Style Guides
     });
 
     // best (keeping it functional)
-    const increasedByOne = numbers.map(num => num + 1);
+    const increasedByOne = numbers.map((num) => num + 1);
     ```
 
   <a name="generators--nope"></a><a name="11.2"></a>
@@ -3028,7 +3036,7 @@ Other Style Guides
     // bad - raises exception
     const luke = {}
     const leia = {}
-    [luke, leia].forEach(jedi => jedi.father = 'vader')
+    [luke, leia].forEach((jedi) => jedi.father = 'vader')
 
     // bad - raises exception
     const reaction = "No! That’s impossible!"
diff --git a/packages/eslint-config-airbnb-base/rules/es6.js b/packages/eslint-config-airbnb-base/rules/es6.js
index 9c6328700e..dac5f4b98f 100644
--- a/packages/eslint-config-airbnb-base/rules/es6.js
+++ b/packages/eslint-config-airbnb-base/rules/es6.js
@@ -21,9 +21,7 @@ module.exports = {
 
     // require parens in arrow function arguments
     // https://eslint.org/docs/rules/arrow-parens
-    'arrow-parens': ['error', 'as-needed', {
-      requireForBlockBody: true,
-    }],
+    'arrow-parens': ['error', 'always'],
 
     // require space before/after arrow function's arrow
     // https://eslint.org/docs/rules/arrow-spacing
diff --git a/packages/eslint-config-airbnb-base/test/test-base.js b/packages/eslint-config-airbnb-base/test/test-base.js
index 07d17b1027..181e04f453 100644
--- a/packages/eslint-config-airbnb-base/test/test-base.js
+++ b/packages/eslint-config-airbnb-base/test/test-base.js
@@ -26,7 +26,7 @@ Object.keys(files).forEach((
 
     // scan rules for react/ and fail if any exist
     const reactRuleIds = Object.keys(config.rules)
-      .filter(ruleId => ruleId.indexOf('react/') === 0);
+      .filter((ruleId) => ruleId.indexOf('react/') === 0);
     t.deepEquals(reactRuleIds, [], 'there are no react/ rules');
   });
 });
diff --git a/packages/eslint-config-airbnb/test/test-base.js b/packages/eslint-config-airbnb/test/test-base.js
index 807191dfe3..c283c3410c 100644
--- a/packages/eslint-config-airbnb/test/test-base.js
+++ b/packages/eslint-config-airbnb/test/test-base.js
@@ -28,7 +28,7 @@ Object.keys(files).forEach((name) => {
 
     // scan rules for react/ and fail if any exist
     const reactRuleIds = Object.keys(config.rules)
-      .filter(ruleId => ruleId.indexOf('react/') === 0);
+      .filter((ruleId) => ruleId.indexOf('react/') === 0);
     t.deepEquals(reactRuleIds, [], 'there are no react/ rules');
   });
 });

From f6acb789a02a3295cfb2ae8c48f0e11060a0634c Mon Sep 17 00:00:00 2001
From: Sharmila <sharmila.jesupaul@airbnb.com>
Date: Tue, 10 Jul 2018 15:19:05 -0700
Subject: [PATCH 1347/1591] [guide] [eslint config] [base] [breaking]
 Simplifies `no-mixed-operators`

- adds warning on mixing `/` and `*` arithmetic operators
- removes warnings on mixing `**` and arithmetic operators
- removes warning on mixing `in` and `instanceof`
- removes warning on mixing `~` with other bitwise operators
- removes mixing of assignment operators with comparison operators
---
 README.md                                         | 10 +++++++---
 packages/eslint-config-airbnb-base/rules/style.js | 10 +++-------
 2 files changed, 10 insertions(+), 10 deletions(-)

diff --git a/README.md b/README.md
index 25fbd7f567..d4d9845210 100644
--- a/README.md
+++ b/README.md
@@ -2049,7 +2049,8 @@ Other Style Guides
     ```
 
   <a name="comparison--no-mixed-operators"></a>
-  - [15.8](#comparison--no-mixed-operators) When mixing operators, enclose them in parentheses. The only exception is the standard arithmetic operators (`+`, `-`, `*`, & `/`) since their precedence is broadly understood. eslint: [`no-mixed-operators`](https://eslint.org/docs/rules/no-mixed-operators.html)
+  - [15.8](#comparison--no-mixed-operators) When mixing operators, enclose them in parentheses. The only exception is the standard arithmetic operators: `+`, `-`, and `**` since their precedence is broadly understood. We recommend enclosing `/` and `*` in parentheses because their precedence can be ambiguous when they are mixed.
+  eslint: [`no-mixed-operators`](https://eslint.org/docs/rules/no-mixed-operators.html)
 
     > Why? This improves readability and clarifies the developer’s intention.
 
@@ -2066,11 +2067,14 @@ Other Style Guides
       return d;
     }
 
+    // bad
+    const bar = a + b / c * d;
+
     // good
     const foo = (a && b < 0) || c > 0 || (d + 1 === 0);
 
     // good
-    const bar = (a ** b) - (5 % d);
+    const bar = a ** b - (5 % d);
 
     // good
     if (a || (b && c)) {
@@ -2078,7 +2082,7 @@ Other Style Guides
     }
 
     // good
-    const bar = a + b / c * d;
+    const bar = a + (b / c) * d;
     ```
 
 **[⬆ back to top](#table-of-contents)**
diff --git a/packages/eslint-config-airbnb-base/rules/style.js b/packages/eslint-config-airbnb-base/rules/style.js
index 1908c3ea81..2fdb5c5e3a 100644
--- a/packages/eslint-config-airbnb-base/rules/style.js
+++ b/packages/eslint-config-airbnb-base/rules/style.js
@@ -293,14 +293,10 @@ module.exports = {
         ['%', '-'],
         ['%', '*'],
         ['%', '/'],
-        ['**', '+'],
-        ['**', '-'],
-        ['**', '*'],
-        ['**', '/'],
-        ['&', '|', '^', '~', '<<', '>>', '>>>'],
-        ['==', '!=', '===', '!==', '>', '>=', '<', '<='],
+        ['/', '*'],
+        ['&', '|', '<<', '>>', '>>>'],
+        ['==', '!=', '===', '!=='],
         ['&&', '||'],
-        ['in', 'instanceof']
       ],
       allowSamePrecedence: false
     }],

From b96341fb86f28e421ec5a6674ab55d95f6f4c1ad Mon Sep 17 00:00:00 2001
From: Ed Morley <501702+edmorley@users.noreply.github.com>
Date: Tue, 20 Nov 2018 11:55:50 +0000
Subject: [PATCH 1348/1591] [eslint config] [base] [breaking] legacy: Enable
 'strict'

This enables the `strict` rule in 'safe' mode:
https://eslint.org/docs/rules/strict#safe
---
 packages/eslint-config-airbnb-base/legacy.js | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/packages/eslint-config-airbnb-base/legacy.js b/packages/eslint-config-airbnb-base/legacy.js
index 94870c9263..18576f83e5 100644
--- a/packages/eslint-config-airbnb-base/legacy.js
+++ b/packages/eslint-config-airbnb-base/legacy.js
@@ -27,6 +27,7 @@ module.exports = {
       property: '__defineSetter__',
       message: 'Please use Object.defineProperty instead.',
     }],
-    'no-var': 'off'
+    'no-var': 'off',
+    strict: ['error', 'safe'],
   }
 };

From 42c647f31b046fd56a51316caf681846100abd4f Mon Sep 17 00:00:00 2001
From: Ed Morley <501702+edmorley@users.noreply.github.com>
Date: Tue, 20 Nov 2018 12:04:17 +0000
Subject: [PATCH 1349/1591] [eslint config] [base] [breaking] Set 'strict' to
 'never'

Previously `rules/strict.js` was only used by `eslint-config-airbnb`
and not base. This change reduces the duplication, and means the rule
is now set to 'never' as opposed to the ESLint default of 'safe'.

For users that left the `sourceType` at this preset's default of
`module` this change will be a no-op, since in module-mode the
`strict` rule always behaves as though 'never' had been set.

See:
https://eslint.org/docs/rules/strict#options
---
 packages/eslint-config-airbnb-base/index.js | 5 ++---
 1 file changed, 2 insertions(+), 3 deletions(-)

diff --git a/packages/eslint-config-airbnb-base/index.js b/packages/eslint-config-airbnb-base/index.js
index 16b423f35d..825456b8a4 100644
--- a/packages/eslint-config-airbnb-base/index.js
+++ b/packages/eslint-config-airbnb-base/index.js
@@ -7,12 +7,11 @@ module.exports = {
     './rules/variables',
     './rules/es6',
     './rules/imports',
+    './rules/strict',
   ].map(require.resolve),
   parserOptions: {
     ecmaVersion: 2018,
     sourceType: 'module',
   },
-  rules: {
-    strict: 'error',
-  },
+  rules: {},
 };

From ad0c44c6affa87743419038682f00c0b9d0d9989 Mon Sep 17 00:00:00 2001
From: Ed Morley <501702+edmorley@users.noreply.github.com>
Date: Tue, 20 Nov 2018 12:06:34 +0000
Subject: [PATCH 1350/1591] [eslint config] Remove rules/strict from 'extends'

Since the file is now imported in base instead.

Fixes #1582.
---
 packages/eslint-config-airbnb/index.js | 1 -
 1 file changed, 1 deletion(-)

diff --git a/packages/eslint-config-airbnb/index.js b/packages/eslint-config-airbnb/index.js
index ddd3bfb712..6432e10dda 100644
--- a/packages/eslint-config-airbnb/index.js
+++ b/packages/eslint-config-airbnb/index.js
@@ -1,7 +1,6 @@
 module.exports = {
   extends: [
     'eslint-config-airbnb-base',
-    'eslint-config-airbnb-base/rules/strict',
     './rules/react',
     './rules/react-a11y',
   ].map(require.resolve),

From 2160a77baa5eb62b78f0c2cfecfc37086e78c657 Mon Sep 17 00:00:00 2001
From: Waseem Dahman <dwaseem@icloud.com>
Date: Tue, 12 Mar 2019 23:36:07 -0400
Subject: [PATCH 1351/1591] [eslint config] [breaking] [react] add
 `react-hooks` plugin

---
 packages/eslint-config-airbnb/README.md       | 12 +++++++----
 packages/eslint-config-airbnb/hooks.js        |  6 ++++++
 packages/eslint-config-airbnb/package.json    |  4 +++-
 .../eslint-config-airbnb/rules/react-hooks.js | 21 +++++++++++++++++++
 .../eslint-config-airbnb/test/requires.js     |  1 +
 5 files changed, 39 insertions(+), 5 deletions(-)
 create mode 100644 packages/eslint-config-airbnb/hooks.js
 create mode 100644 packages/eslint-config-airbnb/rules/react-hooks.js

diff --git a/packages/eslint-config-airbnb/README.md b/packages/eslint-config-airbnb/README.md
index 7296176e26..da35d94344 100644
--- a/packages/eslint-config-airbnb/README.md
+++ b/packages/eslint-config-airbnb/README.md
@@ -10,7 +10,7 @@ We export three ESLint configurations for your usage.
 
 ### eslint-config-airbnb
 
-Our default export contains all of our ESLint rules, including ECMAScript 6+ and React. It requires `eslint`, `eslint-plugin-import`, `eslint-plugin-react`, and `eslint-plugin-jsx-a11y`. If you don't need React, see [eslint-config-airbnb-base](https://npmjs.com/eslint-config-airbnb-base).
+Our default export contains all of our ESLint rules, including ECMAScript 6+ and React. It requires `eslint`, `eslint-plugin-import`, `eslint-plugin-react`, `eslint-plugin-react-hooks`, and `eslint-plugin-jsx-a11y`. If you don't need React, see [eslint-config-airbnb-base](https://npmjs.com/eslint-config-airbnb-base).
 
 1. Install the correct versions of each package, which are listed by the command:
 
@@ -39,7 +39,7 @@ Our default export contains all of our ESLint rules, including ECMAScript 6+ and
   Which produces and runs a command like:
 
   ```sh
-  npm install --save-dev eslint-config-airbnb eslint@^#.#.# eslint-plugin-jsx-a11y@^#.#.# eslint-plugin-import@^#.#.# eslint-plugin-react@^#.#.#
+  npm install --save-dev eslint-config-airbnb eslint@^#.#.# eslint-plugin-jsx-a11y@^#.#.# eslint-plugin-import@^#.#.# eslint-plugin-react@^#.#.# eslint-plugin-react-hooks@^#.#.#
   ```
 
   If using **npm < 5**, Windows users can either install all the peer dependencies manually, or use the [install-peerdeps](https://github.com/nathanhleung/install-peerdeps) cli tool.
@@ -51,10 +51,14 @@ Our default export contains all of our ESLint rules, including ECMAScript 6+ and
   The cli will produce and run a command like:
 
   ```sh
-  npm install --save-dev eslint-config-airbnb eslint@^#.#.# eslint-plugin-jsx-a11y@^#.#.# eslint-plugin-import@^#.#.# eslint-plugin-react@^#.#.#
+  npm install --save-dev eslint-config-airbnb eslint@^#.#.# eslint-plugin-jsx-a11y@^#.#.# eslint-plugin-import@^#.#.# eslint-plugin-react@^#.#.# eslint-plugin-react-hooks@^#.#.#
   ```
 
-2. Add `"extends": "airbnb"` to your .eslintrc
+2. Add `"extends": "airbnb"` to your `.eslintrc`
+
+### eslint-config/airbnb/hooks
+
+This entry point enables the linting rules for React hooks (requires v16.8+). To use, add `"extends": "airbnb/hooks"` to your `.eslintrc`
 
 ### eslint-config-airbnb/whitespace
 
diff --git a/packages/eslint-config-airbnb/hooks.js b/packages/eslint-config-airbnb/hooks.js
new file mode 100644
index 0000000000..a7f70284e3
--- /dev/null
+++ b/packages/eslint-config-airbnb/hooks.js
@@ -0,0 +1,6 @@
+module.exports = {
+  extends: [
+    './rules/react-hooks.js',
+  ].map(require.resolve),
+  rules: {}
+};
diff --git a/packages/eslint-config-airbnb/package.json b/packages/eslint-config-airbnb/package.json
index 466a8132b8..2a8e2e5b2e 100644
--- a/packages/eslint-config-airbnb/package.json
+++ b/packages/eslint-config-airbnb/package.json
@@ -67,6 +67,7 @@
     "eslint-plugin-import": "^2.18.2",
     "eslint-plugin-jsx-a11y": "^6.2.3",
     "eslint-plugin-react": "^7.14.2",
+    "eslint-plugin-react-hooks": "^1.7.0",
     "in-publish": "^2.0.0",
     "react": ">= 0.13.0",
     "safe-publish-latest": "^1.1.2",
@@ -76,7 +77,8 @@
     "eslint": "^5.16.0 || ^6.1.0",
     "eslint-plugin-import": "^2.18.2",
     "eslint-plugin-jsx-a11y": "^6.2.3",
-    "eslint-plugin-react": "^7.14.2"
+    "eslint-plugin-react": "^7.14.2",
+    "eslint-plugin-react-hooks": "^1.7.0"
   },
   "engines": {
     "node": ">= 6"
diff --git a/packages/eslint-config-airbnb/rules/react-hooks.js b/packages/eslint-config-airbnb/rules/react-hooks.js
new file mode 100644
index 0000000000..be17c9a571
--- /dev/null
+++ b/packages/eslint-config-airbnb/rules/react-hooks.js
@@ -0,0 +1,21 @@
+module.exports = {
+  plugins: [
+    'react-hooks',
+  ],
+
+  parserOptions: {
+    ecmaFeatures: {
+      jsx: true,
+    },
+  },
+
+  rules: {
+    // Enforce Rules of Hooks
+    // https://github.com/facebook/react/blob/c11015ff4f610ac2924d1fc6d569a17657a404fd/packages/eslint-plugin-react-hooks/src/RulesOfHooks.js
+    'react-hooks/rules-of-hooks': 'error',
+
+    // Verify the list of the dependencies for Hooks like useEffect and similar
+    // https://github.com/facebook/react/blob/1204c789776cb01fbaf3e9f032e7e2ba85a44137/packages/eslint-plugin-react-hooks/src/ExhaustiveDeps.js
+    'react-hooks/exhaustive-deps': 'error',
+  },
+};
diff --git a/packages/eslint-config-airbnb/test/requires.js b/packages/eslint-config-airbnb/test/requires.js
index 964318521e..72f4ab8078 100644
--- a/packages/eslint-config-airbnb/test/requires.js
+++ b/packages/eslint-config-airbnb/test/requires.js
@@ -9,6 +9,7 @@ test('all entry points parse', (t) => {
   t.doesNotThrow(() => require('../base'), 'base does not throw');
   t.doesNotThrow(() => require('../legacy'), 'legacy does not throw');
   t.doesNotThrow(() => require('../whitespace'), 'whitespace does not throw');
+  t.doesNotThrow(() => require('../hooks'), 'hooks does not throw');
 
   t.end();
 });

From a344d6c8e7f21e6af107ed3e335068bf6a621c5d Mon Sep 17 00:00:00 2001
From: JBallin <JBallin@users.noreply.github.com>
Date: Mon, 10 Jun 2019 13:49:58 -0700
Subject: [PATCH 1352/1591] [guide] [eslint config] [base] [breaking]
 `no-multiple-empty-lines`: Restrict empty lines at beginning of file

---
 README.md                                         | 15 ++++++++++++---
 packages/eslint-config-airbnb-base/rules/style.js |  5 +++--
 2 files changed, 15 insertions(+), 5 deletions(-)

diff --git a/README.md b/README.md
index d4d9845210..7e16cb583a 100644
--- a/README.md
+++ b/README.md
@@ -2874,21 +2874,30 @@ Other Style Guides
   - [19.19](#whitespace--no-trailing-spaces) Avoid trailing spaces at the end of lines. eslint: [`no-trailing-spaces`](https://eslint.org/docs/rules/no-trailing-spaces)
 
   <a name="whitespace--no-multiple-empty-lines"></a>
-  - [19.20](#whitespace--no-multiple-empty-lines) Avoid multiple empty lines and only allow one newline at the end of files. eslint: [`no-multiple-empty-lines`](https://eslint.org/docs/rules/no-multiple-empty-lines)
+  - [19.20](#whitespace--no-multiple-empty-lines) Avoid multiple empty lines, only allow one newline at the end of files, and avoid a newline at the beginning of files. eslint: [`no-multiple-empty-lines`](https://eslint.org/docs/rules/no-multiple-empty-lines)
 
     <!-- markdownlint-disable MD012 -->
     ```javascript
-    // bad
+    // bad - multiple empty lines
     var x = 1;
 
 
+    var y = 2;
 
+    // bad - 2+ newlines at end of file
+    var x = 1;
     var y = 2;
 
-    // good
+
+    // bad - 1+ newline(s) at beginning of file
+
     var x = 1;
+    var y = 2;
 
+    // good
+    var x = 1;
     var y = 2;
+
     ```
     <!-- markdownlint-enable MD012 -->
 
diff --git a/packages/eslint-config-airbnb-base/rules/style.js b/packages/eslint-config-airbnb-base/rules/style.js
index 2fdb5c5e3a..54f85e53b0 100644
--- a/packages/eslint-config-airbnb-base/rules/style.js
+++ b/packages/eslint-config-airbnb-base/rules/style.js
@@ -308,8 +308,9 @@ module.exports = {
     // https://eslint.org/docs/rules/no-multi-assign
     'no-multi-assign': ['error'],
 
-    // disallow multiple empty lines and only one newline at the end
-    'no-multiple-empty-lines': ['error', { max: 2, maxEOF: 0 }],
+    // disallow multiple empty lines, only one newline at the end, and no new lines at the beginning
+    // https://eslint.org/docs/rules/no-multiple-empty-lines
+    'no-multiple-empty-lines': ['error', { max: 2, maxBOF: 1, maxEOF: 0 }],
 
     // disallow negated conditions
     // https://eslint.org/docs/rules/no-negated-condition

From 8c686eac4b93bff8710ab1c31b3223bc5dc2f18d Mon Sep 17 00:00:00 2001
From: Rahil Vora <rvora@CHIC02VQ0XPG8WN.sea.corp.expecn.com>
Date: Mon, 22 Jul 2019 11:27:02 -0500
Subject: [PATCH 1353/1591] [eslint config] add componentDidCatch to lifecycle
 for react/sort-comp

---
 packages/eslint-config-airbnb/rules/react.js | 1 +
 1 file changed, 1 insertion(+)

diff --git a/packages/eslint-config-airbnb/rules/react.js b/packages/eslint-config-airbnb/rules/react.js
index bb2373cdbc..75bea2bb10 100644
--- a/packages/eslint-config-airbnb/rules/react.js
+++ b/packages/eslint-config-airbnb/rules/react.js
@@ -272,6 +272,7 @@ module.exports = {
           'componentWillUpdate',
           'componentDidUpdate',
           'componentWillUnmount',
+          'componentDidCatch'
         ],
         rendering: [
           '/^render.+$/',

From 61c7ae61895af2b3c7938015eaf72ca1e0fddb3e Mon Sep 17 00:00:00 2001
From: Felipe Pinheiro <felipe@jungledevs.com>
Date: Mon, 17 Jun 2019 12:58:54 -0300
Subject: [PATCH 1354/1591] [eslint config] Add missing/unsafe lifecycle
 methods to react/sort-comp rule

---
 packages/eslint-config-airbnb/rules/react.js | 6 ++++++
 1 file changed, 6 insertions(+)

diff --git a/packages/eslint-config-airbnb/rules/react.js b/packages/eslint-config-airbnb/rules/react.js
index 75bea2bb10..2a4acc39b4 100644
--- a/packages/eslint-config-airbnb/rules/react.js
+++ b/packages/eslint-config-airbnb/rules/react.js
@@ -265,12 +265,18 @@ module.exports = {
           'getInitialState',
           'state',
           'getChildContext',
+          'getDerivedStateFromProps',
           'componentWillMount',
+          'UNSAFE_componentWillMount',
           'componentDidMount',
           'componentWillReceiveProps',
+          'UNSAFE_componentWillReceiveProps',
           'shouldComponentUpdate',
           'componentWillUpdate',
+          'UNSAFE_componentWillUpdate',
+          'getSnapshotBeforeUpdate',
           'componentDidUpdate',
+          'componentDidCatch',
           'componentWillUnmount',
           'componentDidCatch'
         ],

From 19e9ce31fe051c2232c90bf63dab0ee2fe0efbaf Mon Sep 17 00:00:00 2001
From: amanjain <91aman@gmail.com>
Date: Thu, 12 Jan 2017 12:15:39 +0530
Subject: [PATCH 1355/1591] [eslint config] [base] [breaking] `padded-blocks`:
 enable `allowSingleLineBlocks` option

---
 packages/eslint-config-airbnb-base/rules/style.js | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/packages/eslint-config-airbnb-base/rules/style.js b/packages/eslint-config-airbnb-base/rules/style.js
index 54f85e53b0..b14a287c89 100644
--- a/packages/eslint-config-airbnb-base/rules/style.js
+++ b/packages/eslint-config-airbnb-base/rules/style.js
@@ -419,12 +419,12 @@ module.exports = {
     'operator-linebreak': ['error', 'before', { overrides: { '=': 'none' } }],
 
     // disallow padding within blocks
-    // TODO, semver-major: uncomment option
     'padded-blocks': ['error', {
       blocks: 'never',
       classes: 'never',
       switches: 'never',
-      // allowSingleLineBlocks: true,
+    }, {
+      allowSingleLineBlocks: true,
     }],
 
     // Require or disallow padding lines between statements

From 8148bfce3c670a8a234ee71903ca020e32506884 Mon Sep 17 00:00:00 2001
From: Vladimir Kutepov <frenzzy.man@gmail.com>
Date: Tue, 10 Oct 2017 18:21:50 +0300
Subject: [PATCH 1356/1591] [eslint config] [base] [patch] Do not prefer
 destructuring for object assignment expression

```js
let param = 'default value';

if (object)
  param = object.param; // <= prefer-destructuring
}

// ...
```
I think that `param = object.param;` is better than `({ param } = object);` because it is easier to read and tedious to write brackets by hand.

MDN: [Destructuring assignment](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Destructuring_assignment)
---
 packages/eslint-config-airbnb-base/rules/es6.js | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/packages/eslint-config-airbnb-base/rules/es6.js b/packages/eslint-config-airbnb-base/rules/es6.js
index dac5f4b98f..bfdc6d29e4 100644
--- a/packages/eslint-config-airbnb-base/rules/es6.js
+++ b/packages/eslint-config-airbnb-base/rules/es6.js
@@ -118,7 +118,7 @@ module.exports = {
       },
       AssignmentExpression: {
         array: true,
-        object: true,
+        object: false,
       },
     }, {
       enforceForRenamedProperties: false,

From bb011c2f2f22e91399b2c5a0b90eb797b6e15d24 Mon Sep 17 00:00:00 2001
From: Jeff VanDyke <jeffvd.a216@gmail.com>
Date: Thu, 29 Nov 2018 09:13:54 -0500
Subject: [PATCH 1357/1591] [eslint config] [base] [patch] Add markers to
 spaced-comment block for Flow types

See <https://flow.org/en/docs/types/comments/>
---
 packages/eslint-config-airbnb-base/rules/style.js | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/packages/eslint-config-airbnb-base/rules/style.js b/packages/eslint-config-airbnb-base/rules/style.js
index b14a287c89..b60c069641 100644
--- a/packages/eslint-config-airbnb-base/rules/style.js
+++ b/packages/eslint-config-airbnb-base/rules/style.js
@@ -498,7 +498,7 @@ module.exports = {
       },
       block: {
         exceptions: ['-', '+'],
-        markers: ['=', '!'], // space here to support sprockets directives
+        markers: ['=', '!', ':', '::'], // space here to support sprockets directives and flow comment types
         balanced: true,
       }
     }],

From a490005ddfbd73f96f0fc4335bf035cd554ad2e6 Mon Sep 17 00:00:00 2001
From: Behnam Mohammadi <itten@live.com>
Date: Sat, 6 Jul 2019 23:45:11 +0430
Subject: [PATCH 1358/1591] [react] event handlers should not return values

---
 react/README.md | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/react/README.md b/react/README.md
index 87dbcb9996..7e247e7ac1 100644
--- a/react/README.md
+++ b/react/README.md
@@ -540,7 +540,7 @@ We don’t recommend using indexes for keys if the order of items may change.
           {props.items.map((item, index) => (
             <Item
               key={item.key}
-              onClick={(event) => doSomethingWith(event, item.name, index)}
+              onClick={(event) => { doSomethingWith(event, item.name, index); }}
             />
           ))}
         </ul>

From 6b5922ca2132980609fe217353162c2338b29ae2 Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Fri, 9 Aug 2019 22:39:06 -0700
Subject: [PATCH 1359/1591] [eslint config] [breaking] set react version to
 "detect"

Fixes #1983.
---
 packages/eslint-config-airbnb/rules/react.js | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/packages/eslint-config-airbnb/rules/react.js b/packages/eslint-config-airbnb/rules/react.js
index 2a4acc39b4..0c3411e963 100644
--- a/packages/eslint-config-airbnb/rules/react.js
+++ b/packages/eslint-config-airbnb/rules/react.js
@@ -515,7 +515,7 @@ module.exports = {
     },
     react: {
       pragma: 'React',
-      version: '16.0'
+      version: 'detect',
     },
     propWrapperFunctions: [
       'forbidExtraProps', // https://www.npmjs.com/package/airbnb-prop-types

From e257deebd4544cf3609d5336f463688981897fe7 Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Fri, 9 Aug 2019 22:40:53 -0700
Subject: [PATCH 1360/1591] [eslint config] [base] [patch] `camelcase`: enable
 ignoreDestructuring

---
 packages/eslint-config-airbnb-base/rules/style.js | 3 +--
 1 file changed, 1 insertion(+), 2 deletions(-)

diff --git a/packages/eslint-config-airbnb-base/rules/style.js b/packages/eslint-config-airbnb-base/rules/style.js
index b60c069641..2a70739624 100644
--- a/packages/eslint-config-airbnb-base/rules/style.js
+++ b/packages/eslint-config-airbnb-base/rules/style.js
@@ -21,8 +21,7 @@ module.exports = {
     'brace-style': ['error', '1tbs', { allowSingleLine: true }],
 
     // require camel case names
-    // TODO: semver-major (eslint 5): add ignoreDestructuring: false option
-    camelcase: ['error', { properties: 'never' }],
+    camelcase: ['error', { properties: 'never', ignoreDestructuring: false }],
 
     // enforce or disallow capitalization of the first letter of a comment
     // https://eslint.org/docs/rules/capitalized-comments

From 11ede40d55734064f2d497e29cb7fde21d3df209 Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Fri, 9 Aug 2019 22:41:33 -0700
Subject: [PATCH 1361/1591] [eslint config] [base] [breaking]
 `func-name-matching`: enable `considerPropertyDescriptor` option

---
 packages/eslint-config-airbnb-base/rules/style.js | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/packages/eslint-config-airbnb-base/rules/style.js b/packages/eslint-config-airbnb-base/rules/style.js
index 2a70739624..3e5e5fa15e 100644
--- a/packages/eslint-config-airbnb-base/rules/style.js
+++ b/packages/eslint-config-airbnb-base/rules/style.js
@@ -83,9 +83,9 @@ module.exports = {
     // requires function names to match the name of the variable or property to which they are
     // assigned
     // https://eslint.org/docs/rules/func-name-matching
-    // TODO: semver-major (eslint 5): add considerPropertyDescriptor: true
     'func-name-matching': ['off', 'always', {
-      includeCommonJSModuleExports: false
+      includeCommonJSModuleExports: false,
+      considerPropertyDescriptor: true,
     }],
 
     // require function expressions to have a name

From 88e71e6e5223701d353325035383c3a8d9fd88b2 Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Fri, 9 Aug 2019 22:42:20 -0700
Subject: [PATCH 1362/1591] [eslint config] [base] [breaking] enable
 `prefer-object-spread`

---
 packages/eslint-config-airbnb-base/rules/style.js | 3 +--
 1 file changed, 1 insertion(+), 2 deletions(-)

diff --git a/packages/eslint-config-airbnb-base/rules/style.js b/packages/eslint-config-airbnb-base/rules/style.js
index 3e5e5fa15e..3aa6eeac76 100644
--- a/packages/eslint-config-airbnb-base/rules/style.js
+++ b/packages/eslint-config-airbnb-base/rules/style.js
@@ -432,8 +432,7 @@ module.exports = {
 
     // Prefer use of an object spread over Object.assign
     // https://eslint.org/docs/rules/prefer-object-spread
-    // TODO: semver-major (eslint 5): enable
-    'prefer-object-spread': 'off',
+    'prefer-object-spread': 'error',
 
     // require quotes around object literal property names
     // https://eslint.org/docs/rules/quote-props.html

From f0c767fd398b7b10ee189a701823630d25100598 Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Fri, 9 Aug 2019 22:43:20 -0700
Subject: [PATCH 1363/1591] [eslint config] [base] [breaking] enable
 `no-async-promise-executor`

---
 packages/eslint-config-airbnb-base/rules/errors.js | 3 +--
 1 file changed, 1 insertion(+), 2 deletions(-)

diff --git a/packages/eslint-config-airbnb-base/rules/errors.js b/packages/eslint-config-airbnb-base/rules/errors.js
index aca6d7d9c3..fb4766cf40 100644
--- a/packages/eslint-config-airbnb-base/rules/errors.js
+++ b/packages/eslint-config-airbnb-base/rules/errors.js
@@ -10,8 +10,7 @@ module.exports = {
 
     // disallow using an async function as a Promise executor
     // https://eslint.org/docs/rules/no-async-promise-executor
-    // TODO: enable, semver-major
-    'no-async-promise-executor': 'off',
+    'no-async-promise-executor': 'error',
 
     // Disallow await inside of loops
     // https://eslint.org/docs/rules/no-await-in-loop

From d03a712bba592da02631fb30824f6661788b2120 Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Fri, 9 Aug 2019 22:44:01 -0700
Subject: [PATCH 1364/1591] [eslint config] [base] [breaking] enable
 `no-misleading-character-class`

---
 packages/eslint-config-airbnb-base/rules/errors.js | 3 +--
 1 file changed, 1 insertion(+), 2 deletions(-)

diff --git a/packages/eslint-config-airbnb-base/rules/errors.js b/packages/eslint-config-airbnb-base/rules/errors.js
index fb4766cf40..5a56844e7c 100644
--- a/packages/eslint-config-airbnb-base/rules/errors.js
+++ b/packages/eslint-config-airbnb-base/rules/errors.js
@@ -84,8 +84,7 @@ module.exports = {
 
     // Disallow characters which are made with multiple code points in character class syntax
     // https://eslint.org/docs/rules/no-misleading-character-class
-    // TODO: enable, semver-major
-    'no-misleading-character-class': 'off',
+    'no-misleading-character-class': 'error',
 
     // disallow the use of object properties of the global object (Math and JSON) as functions
     'no-obj-calls': 'error',

From 08f8093ed112306b360e6d5f21eb45bedf69f214 Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Fri, 9 Aug 2019 22:45:27 -0700
Subject: [PATCH 1365/1591] [eslint config] [base] [breaking] enable
 `max-classes-per-file`

---
 packages/eslint-config-airbnb-base/rules/best-practices.js | 3 +--
 1 file changed, 1 insertion(+), 2 deletions(-)

diff --git a/packages/eslint-config-airbnb-base/rules/best-practices.js b/packages/eslint-config-airbnb-base/rules/best-practices.js
index b16a974ccf..2cfd8e3d22 100644
--- a/packages/eslint-config-airbnb-base/rules/best-practices.js
+++ b/packages/eslint-config-airbnb-base/rules/best-practices.js
@@ -44,8 +44,7 @@ module.exports = {
 
     // enforce a maximum number of classes per file
     // https://eslint.org/docs/rules/max-classes-per-file
-    // TODO: semver-major (eslint 5): enable
-    'max-classes-per-file': ['off', 1],
+    'max-classes-per-file': ['error', 1],
 
     // disallow the use of alert, confirm, and prompt
     'no-alert': 'warn',

From d490ee1806abdf07fe53f023384b223dab643b0b Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Fri, 9 Aug 2019 22:45:49 -0700
Subject: [PATCH 1366/1591] [eslint config] [base] [breaking] enable
 `no-useless-catch`

---
 packages/eslint-config-airbnb-base/rules/best-practices.js | 3 +--
 1 file changed, 1 insertion(+), 2 deletions(-)

diff --git a/packages/eslint-config-airbnb-base/rules/best-practices.js b/packages/eslint-config-airbnb-base/rules/best-practices.js
index 2cfd8e3d22..8c763dd62f 100644
--- a/packages/eslint-config-airbnb-base/rules/best-practices.js
+++ b/packages/eslint-config-airbnb-base/rules/best-practices.js
@@ -282,8 +282,7 @@ module.exports = {
 
     // Disallow unnecessary catch clauses
     // https://eslint.org/docs/rules/no-useless-catch
-    // TODO: enable, semver-major
-    'no-useless-catch': 'off',
+    'no-useless-catch': 'error',
 
     // disallow useless string concatenation
     // https://eslint.org/docs/rules/no-useless-concat

From 282ef9ea9051dce725f382ac83cb5c3f2d4da0c2 Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Fri, 9 Aug 2019 22:46:22 -0700
Subject: [PATCH 1367/1591] [eslint config] [base] [breaking] `no-self-assign`:
 enable `props` option

---
 packages/eslint-config-airbnb-base/rules/best-practices.js | 3 +--
 1 file changed, 1 insertion(+), 2 deletions(-)

diff --git a/packages/eslint-config-airbnb-base/rules/best-practices.js b/packages/eslint-config-airbnb-base/rules/best-practices.js
index 8c763dd62f..41f85487a9 100644
--- a/packages/eslint-config-airbnb-base/rules/best-practices.js
+++ b/packages/eslint-config-airbnb-base/rules/best-practices.js
@@ -248,9 +248,8 @@ module.exports = {
 
     // disallow self assignment
     // https://eslint.org/docs/rules/no-self-assign
-    // TODO: semver-major: props -> true
     'no-self-assign': ['error', {
-      props: false,
+      props: true,
     }],
 
     // disallow comparisons where both sides are exactly the same

From e6f591f660a16da51a8fe8a9239703b9bde82c13 Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Fri, 9 Aug 2019 23:22:48 -0700
Subject: [PATCH 1368/1591] [Dev Deps] update babel-related deps to latest

---
 packages/eslint-config-airbnb-base/package.json | 5 +++--
 packages/eslint-config-airbnb/package.json      | 5 +++--
 2 files changed, 6 insertions(+), 4 deletions(-)

diff --git a/packages/eslint-config-airbnb-base/package.json b/packages/eslint-config-airbnb-base/package.json
index 5959e0f89b..4546707cf2 100644
--- a/packages/eslint-config-airbnb-base/package.json
+++ b/packages/eslint-config-airbnb-base/package.json
@@ -53,8 +53,9 @@
   },
   "homepage": "https://github.com/airbnb/javascript",
   "devDependencies": {
-    "babel-preset-airbnb": "^2.6.0",
-    "babel-tape-runner": "^2.0.1",
+    "@babel/runtime": "^7.5.5",
+    "babel-preset-airbnb": "^4.0.1",
+    "babel-tape-runner": "^3.0.0",
     "eclint": "^2.8.1",
     "eslint": "^5.16.0 || ^6.1.0",
     "eslint-find-rules": "^3.4.0",
diff --git a/packages/eslint-config-airbnb/package.json b/packages/eslint-config-airbnb/package.json
index 2a8e2e5b2e..4af469ea3f 100644
--- a/packages/eslint-config-airbnb/package.json
+++ b/packages/eslint-config-airbnb/package.json
@@ -59,8 +59,9 @@
     "object.entries": "^1.1.0"
   },
   "devDependencies": {
-    "babel-preset-airbnb": "^2.6.0",
-    "babel-tape-runner": "^2.0.1",
+    "@babel/runtime": "^7.5.5",
+    "babel-preset-airbnb": "^4.0.1",
+    "babel-tape-runner": "^3.0.0",
     "eclint": "^2.8.1",
     "eslint": "^5.16.0 || ^6.1.0",
     "eslint-find-rules": "^3.4.0",

From b05573cae4282e643c432ae688f2eb4cef229991 Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Fri, 9 Aug 2019 23:41:02 -0700
Subject: [PATCH 1369/1591] [eslint config] [base] v14.0.0

---
 .../eslint-config-airbnb-base/CHANGELOG.md    | 25 +++++++++++++++++++
 .../eslint-config-airbnb-base/package.json    |  2 +-
 2 files changed, 26 insertions(+), 1 deletion(-)

diff --git a/packages/eslint-config-airbnb-base/CHANGELOG.md b/packages/eslint-config-airbnb-base/CHANGELOG.md
index 4b475827cb..73105da143 100644
--- a/packages/eslint-config-airbnb-base/CHANGELOG.md
+++ b/packages/eslint-config-airbnb-base/CHANGELOG.md
@@ -1,3 +1,28 @@
+14.0.0 / 2019-08-09
+==================
+ - [breaking] `no-self-assign`: enable `props` option
+ - [breaking] enable `no-useless-catch`
+ - [breaking] enable `max-classes-per-file`
+ - [breaking] enable `no-misleading-character-class`
+ - [breaking] enable `no-async-promise-executor`
+ - [breaking] enable `prefer-object-spread`
+ - [breaking] `func-name-matching`: enable `considerPropertyDescriptor` option
+ - [breaking] `padded-blocks`: enable `allowSingleLineBlocks` option (#1255)
+ - [breaking] `no-multiple-empty-lines`: Restrict empty lines at beginning of file (#2042)
+ - [breaking] Set 'strict' to 'never' (#1962)
+ - [breaking] legacy: Enable 'strict' (#1962)
+ - [breaking] Simplifies `no-mixed-operators` (#1864)
+ - [breaking] Require parens for arrow function args (#1863)
+ - [breaking] add eslint v6, drop eslint v4
+ - [patch] `camelcase`: enable ignoreDestructuring
+ - [patch] Add markers to spaced-comment block for Flow types (#1966)
+ - [patch] Do not prefer destructuring for object assignment expression (#1583)
+ - [deps] update `confusing-browser-globals`, `eslint-plugin-import`, `tape`, `babel-preset-airbnb`
+ - [dev deps] update babel-related deps to latest
+ - [dev deps] update `eslint-find-rules`, `eslint-plugin-import`
+ - [tests] only run tests in non-lint per-package travis job
+ - [tests] use `eclint` instead of `editorconfig-tools`
+
 13.2.0 / 2019-07-01
 ==================
  - [minor] Enforce dangling underscores in method names (#1907)
diff --git a/packages/eslint-config-airbnb-base/package.json b/packages/eslint-config-airbnb-base/package.json
index 4546707cf2..99830bcb67 100644
--- a/packages/eslint-config-airbnb-base/package.json
+++ b/packages/eslint-config-airbnb-base/package.json
@@ -1,6 +1,6 @@
 {
   "name": "eslint-config-airbnb-base",
-  "version": "13.2.0",
+  "version": "14.0.0",
   "description": "Airbnb's base JS ESLint config, following our styleguide",
   "main": "index.js",
   "scripts": {

From b447768ad322d87ca88a0ecb9e0d0d6168d19aca Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Fri, 9 Aug 2019 23:48:11 -0700
Subject: [PATCH 1370/1591] [eslint config] [deps] update
 `eslint-config-airbnb-base`, `eslint-plugin-react`

---
 packages/eslint-config-airbnb/package.json | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/packages/eslint-config-airbnb/package.json b/packages/eslint-config-airbnb/package.json
index 4af469ea3f..a89da0e17b 100644
--- a/packages/eslint-config-airbnb/package.json
+++ b/packages/eslint-config-airbnb/package.json
@@ -54,7 +54,7 @@
   },
   "homepage": "https://github.com/airbnb/javascript",
   "dependencies": {
-    "eslint-config-airbnb-base": "^13.2.0",
+    "eslint-config-airbnb-base": "^14.0.0",
     "object.assign": "^4.1.0",
     "object.entries": "^1.1.0"
   },
@@ -67,7 +67,7 @@
     "eslint-find-rules": "^3.4.0",
     "eslint-plugin-import": "^2.18.2",
     "eslint-plugin-jsx-a11y": "^6.2.3",
-    "eslint-plugin-react": "^7.14.2",
+    "eslint-plugin-react": "^7.14.3",
     "eslint-plugin-react-hooks": "^1.7.0",
     "in-publish": "^2.0.0",
     "react": ">= 0.13.0",
@@ -78,7 +78,7 @@
     "eslint": "^5.16.0 || ^6.1.0",
     "eslint-plugin-import": "^2.18.2",
     "eslint-plugin-jsx-a11y": "^6.2.3",
-    "eslint-plugin-react": "^7.14.2",
+    "eslint-plugin-react": "^7.14.3",
     "eslint-plugin-react-hooks": "^1.7.0"
   },
   "engines": {

From a23f93eb001ec398ff42f37945b01db2787f6c93 Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Fri, 9 Aug 2019 23:48:45 -0700
Subject: [PATCH 1371/1591] [eslint config] [breaking] enable
 `react/jsx-fragments`

---
 packages/eslint-config-airbnb/rules/react.js | 3 +--
 1 file changed, 1 insertion(+), 2 deletions(-)

diff --git a/packages/eslint-config-airbnb/rules/react.js b/packages/eslint-config-airbnb/rules/react.js
index 0c3411e963..480afc0fd9 100644
--- a/packages/eslint-config-airbnb/rules/react.js
+++ b/packages/eslint-config-airbnb/rules/react.js
@@ -470,8 +470,7 @@ module.exports = {
 
     // Enforce shorthand or standard form for React fragments
     // https://github.com/yannickcr/eslint-plugin-react/blob/bc976b837abeab1dffd90ac6168b746a83fc83cc/docs/rules/jsx-fragments.md
-    // TODO: enable, semver-major
-    'react/jsx-fragments': ['off', 'syntax'],
+    'react/jsx-fragments': ['error', 'syntax'],
 
     // Enforce linebreaks in curly braces in JSX attributes and expressions.
     // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/jsx-curly-newline.md

From 25075b5f72bb6fad25fb4f72201aaee62b46fea6 Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Fri, 9 Aug 2019 23:50:40 -0700
Subject: [PATCH 1372/1591] [eslint config] [minor] enable
 `react/jsx-curly-newline`

---
 packages/eslint-config-airbnb/rules/react.js | 5 ++---
 1 file changed, 2 insertions(+), 3 deletions(-)

diff --git a/packages/eslint-config-airbnb/rules/react.js b/packages/eslint-config-airbnb/rules/react.js
index 480afc0fd9..039586158a 100644
--- a/packages/eslint-config-airbnb/rules/react.js
+++ b/packages/eslint-config-airbnb/rules/react.js
@@ -474,10 +474,9 @@ module.exports = {
 
     // Enforce linebreaks in curly braces in JSX attributes and expressions.
     // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/jsx-curly-newline.md
-    // TODO: enable, semver-minor
-    'react/jsx-curly-newline': ['off', {
+    'react/jsx-curly-newline': ['error', {
       multiline: 'consistent',
-      single: 'consistent',
+      singleline: 'consistent',
     }],
 
     // Enforce state initialization style

From 7f5a65832daf975b36426171ecbde97574c0ad3d Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Fri, 9 Aug 2019 23:52:29 -0700
Subject: [PATCH 1373/1591] [eslint config] [minor] enable
 `react/state-in-constructor`

---
 packages/eslint-config-airbnb/rules/react.js | 3 +--
 1 file changed, 1 insertion(+), 2 deletions(-)

diff --git a/packages/eslint-config-airbnb/rules/react.js b/packages/eslint-config-airbnb/rules/react.js
index 039586158a..5fbe8b35eb 100644
--- a/packages/eslint-config-airbnb/rules/react.js
+++ b/packages/eslint-config-airbnb/rules/react.js
@@ -481,9 +481,8 @@ module.exports = {
 
     // Enforce state initialization style
     // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/state-in-constructor.md
-    // TODO: enable, semver-minor
     // TODO: set to "always" once babel-preset-airbnb supports public class fields
-    'react/state-in-constructor': ['off', 'never'],
+    'react/state-in-constructor': ['error', 'never'],
 
     // Enforces where React component static properties should be positioned
     // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/static-property-placement.md

From 089022aeff7b4d753c9f419c5b4e3a26cdf625b8 Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Fri, 9 Aug 2019 23:52:44 -0700
Subject: [PATCH 1374/1591] [eslint config] [minor] enable
 `react/static-property-placement`

---
 packages/eslint-config-airbnb/rules/react.js | 3 +--
 1 file changed, 1 insertion(+), 2 deletions(-)

diff --git a/packages/eslint-config-airbnb/rules/react.js b/packages/eslint-config-airbnb/rules/react.js
index 5fbe8b35eb..558c5aee35 100644
--- a/packages/eslint-config-airbnb/rules/react.js
+++ b/packages/eslint-config-airbnb/rules/react.js
@@ -486,9 +486,8 @@ module.exports = {
 
     // Enforces where React component static properties should be positioned
     // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/static-property-placement.md
-    // TODO: enable, semver-minor
     // TODO: set to "static public field" once babel-preset-airbnb supports public class fields
-    'react/static-property-placement': ['off', 'property assignment'],
+    'react/static-property-placement': ['error', 'property assignment'],
 
     // Disallow JSX props spreading
     // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/jsx-props-no-spreading.md

From 73f71d9ba4f9ae48054438420c27651fc924d196 Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Fri, 9 Aug 2019 23:53:03 -0700
Subject: [PATCH 1375/1591] [eslint config] [breaking] enable
 `react/jsx-props-no-spreading`

---
 packages/eslint-config-airbnb/rules/react.js | 3 +--
 1 file changed, 1 insertion(+), 2 deletions(-)

diff --git a/packages/eslint-config-airbnb/rules/react.js b/packages/eslint-config-airbnb/rules/react.js
index 558c5aee35..dc01c0d2e4 100644
--- a/packages/eslint-config-airbnb/rules/react.js
+++ b/packages/eslint-config-airbnb/rules/react.js
@@ -491,8 +491,7 @@ module.exports = {
 
     // Disallow JSX props spreading
     // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/jsx-props-no-spreading.md
-    // TODO: enable, semver-major
-    'react/jsx-props-no-spreading': ['off', {
+    'react/jsx-props-no-spreading': ['error', {
       html: 'enforce',
       custom: 'enforce',
       exceptions: [],

From 1e0a696730256af82d284f37a66032681cf23387 Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Fri, 9 Aug 2019 23:54:08 -0700
Subject: [PATCH 1376/1591] [eslint config] [breaking] disable `label-has-for`;
 enable `control-has-associated-label`

---
 packages/eslint-config-airbnb/rules/react-a11y.js | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/packages/eslint-config-airbnb/rules/react-a11y.js b/packages/eslint-config-airbnb/rules/react-a11y.js
index ffb4d28c29..69cf63b01f 100644
--- a/packages/eslint-config-airbnb/rules/react-a11y.js
+++ b/packages/eslint-config-airbnb/rules/react-a11y.js
@@ -48,7 +48,8 @@ module.exports = {
 
     // require that JSX labels use "htmlFor"
     // https://github.com/evcohen/eslint-plugin-jsx-a11y/blob/master/docs/rules/label-has-for.md
-    'jsx-a11y/label-has-for': ['error', {
+    // deprecated: replaced by `label-has-associated-control` rule
+    'jsx-a11y/label-has-for': ['off', {
       components: [],
       required: {
         every: ['nesting', 'id'],
@@ -68,8 +69,7 @@ module.exports = {
 
     // Enforce that a control (an interactive element) has a text label.
     // https://github.com/evcohen/eslint-plugin-jsx-a11y/blob/master/docs/rules/control-has-associated-label.md
-    // TODO, semver-major: enable
-    'jsx-a11y/control-has-associated-label': ['off', {
+    'jsx-a11y/control-has-associated-label': ['error', {
       labelAttributes: ['label'],
       controlComponents: [],
       ignoreElements: [

From bdba997ac704f7fdcebf4467babaa3f35828c0a5 Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Sat, 10 Aug 2019 08:41:05 -0700
Subject: [PATCH 1377/1591] [eslint config] v18.0.0

---
 packages/eslint-config-airbnb/CHANGELOG.md | 21 +++++++++++++++++++++
 packages/eslint-config-airbnb/package.json |  2 +-
 2 files changed, 22 insertions(+), 1 deletion(-)

diff --git a/packages/eslint-config-airbnb/CHANGELOG.md b/packages/eslint-config-airbnb/CHANGELOG.md
index ed2d7af0e3..48cfba3dd8 100644
--- a/packages/eslint-config-airbnb/CHANGELOG.md
+++ b/packages/eslint-config-airbnb/CHANGELOG.md
@@ -1,3 +1,24 @@
+18.0.0 / 2019-08-10
+==================
+ - [breaking] add eslint v6, drop eslint v4
+ - [deps] [breaking] update `eslint-config-airbnb-base`, `eslint-plugin-react`, `eslint-find-rules`, `eslint-plugin-import`
+ - [breaking] Remove rules/strict from 'extends' (#1962)
+ - [breaking] set react version to "detect"
+ - [breaking] disable `label-has-for`; enable `control-has-associated-label`
+ - [breaking] enable `react/jsx-props-no-spreading`
+ - [breaking] enable `react/jsx-fragments`
+ - [minor] enable `react/static-property-placement`
+ - [minor] enable `react/state-in-constructor`
+ - [minor] enable `react/jsx-curly-newline`
+ - [react] Add missing/unsafe lifecycle methods to react/sort-comp rule (#2043)
+ - [react] add componentDidCatch to lifecycle for react/sort-comp (#2060)
+ - [react] add `react-hooks` plugin (#2022)
+ - [dev deps] update babel-related deps to latest
+ - [tests] only run tests in non-lint per-package travis job
+ - [tests] use `eclint` instead of `editorconfig-tools`
+ - [meta] add disabled config for new react and a11y rules
+
+
 17.1.1 / 2019-07-01
 ==================
  - [patch] Turn off `react/no-multi-comp` (#2006)
diff --git a/packages/eslint-config-airbnb/package.json b/packages/eslint-config-airbnb/package.json
index a89da0e17b..b71f94ac14 100644
--- a/packages/eslint-config-airbnb/package.json
+++ b/packages/eslint-config-airbnb/package.json
@@ -1,6 +1,6 @@
 {
   "name": "eslint-config-airbnb",
-  "version": "17.1.1",
+  "version": "18.0.0",
   "description": "Airbnb's ESLint config, following our styleguide",
   "main": "index.js",
   "scripts": {

From 530278467f8b0a1b2aee632fbeee543e6732ef35 Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Tue, 13 Aug 2019 12:29:20 -0700
Subject: [PATCH 1378/1591] [eslint config] [patch]
 `react/state-in-constructor`: fix incorrect configuration

---
 packages/eslint-config-airbnb/rules/react.js | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/packages/eslint-config-airbnb/rules/react.js b/packages/eslint-config-airbnb/rules/react.js
index dc01c0d2e4..1fe097bb07 100644
--- a/packages/eslint-config-airbnb/rules/react.js
+++ b/packages/eslint-config-airbnb/rules/react.js
@@ -481,8 +481,8 @@ module.exports = {
 
     // Enforce state initialization style
     // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/state-in-constructor.md
-    // TODO: set to "always" once babel-preset-airbnb supports public class fields
-    'react/state-in-constructor': ['error', 'never'],
+    // TODO: set to "never" once babel-preset-airbnb supports public class fields
+    'react/state-in-constructor': ['error', 'always'],
 
     // Enforces where React component static properties should be positioned
     // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/static-property-placement.md

From a204cdf38a3e67a405c191773456d18296a9b37b Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Tue, 13 Aug 2019 12:30:37 -0700
Subject: [PATCH 1379/1591] [eslint config] v18.0.1

---
 packages/eslint-config-airbnb/CHANGELOG.md | 4 ++++
 packages/eslint-config-airbnb/package.json | 2 +-
 2 files changed, 5 insertions(+), 1 deletion(-)

diff --git a/packages/eslint-config-airbnb/CHANGELOG.md b/packages/eslint-config-airbnb/CHANGELOG.md
index 48cfba3dd8..8c16dd3c1a 100644
--- a/packages/eslint-config-airbnb/CHANGELOG.md
+++ b/packages/eslint-config-airbnb/CHANGELOG.md
@@ -1,3 +1,7 @@
+18.0.1 / 2019-08-13
+==================
+ - [patch] `react/state-in-constructor`: fix incorrect configuration
+
 18.0.0 / 2019-08-10
 ==================
  - [breaking] add eslint v6, drop eslint v4
diff --git a/packages/eslint-config-airbnb/package.json b/packages/eslint-config-airbnb/package.json
index b71f94ac14..14b51c5717 100644
--- a/packages/eslint-config-airbnb/package.json
+++ b/packages/eslint-config-airbnb/package.json
@@ -1,6 +1,6 @@
 {
   "name": "eslint-config-airbnb",
-  "version": "18.0.0",
+  "version": "18.0.1",
   "description": "Airbnb's ESLint config, following our styleguide",
   "main": "index.js",
   "scripts": {

From 295d1e61cbebd33d06cbd287fc1d7ea59ba959f7 Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Wed, 14 Aug 2019 08:46:20 -0700
Subject: [PATCH 1380/1591] [guide] clean up confusing example from bad rebase

 ... from
https://github.com/airbnb/javascript/commit/820745d61090139193cf9257b88974e36dfc9b35#diff-04c6e90faac2675aa89e2176d2eec7d8R963-R965
/ #1863.

Fixes #2071.
---
 README.md | 3 ---
 1 file changed, 3 deletions(-)

diff --git a/README.md b/README.md
index 7e16cb583a..20b42ecfdf 100644
--- a/README.md
+++ b/README.md
@@ -960,9 +960,6 @@ Other Style Guides
       `A string containing the ${nextNumber}.`;
     });
 
-    // bad
-    [1, 2, 3].map((number) => `A string containing the ${number}.`);
-
     // good
     [1, 2, 3].map((number) => `A string containing the ${number + 1}.`);
 

From 1ca21aba799699ba556bed058e3900514a9fbee3 Mon Sep 17 00:00:00 2001
From: Daniel Gray <DanielFGray@gmail.com>
Date: Sat, 17 Aug 2019 19:14:24 -0500
Subject: [PATCH 1381/1591] [eslint config] clarify hooks section in readme

It took me too long to realize that `"extends": "airbnb/hooks"` won't cut it, and that you need to include both `"extends": ["airbnb", "airbnb/hooks"]`. I think the docs should be explicit about this.
---
 packages/eslint-config-airbnb/README.md | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/packages/eslint-config-airbnb/README.md b/packages/eslint-config-airbnb/README.md
index da35d94344..94e4ac54c4 100644
--- a/packages/eslint-config-airbnb/README.md
+++ b/packages/eslint-config-airbnb/README.md
@@ -58,7 +58,7 @@ Our default export contains all of our ESLint rules, including ECMAScript 6+ and
 
 ### eslint-config/airbnb/hooks
 
-This entry point enables the linting rules for React hooks (requires v16.8+). To use, add `"extends": "airbnb/hooks"` to your `.eslintrc`
+This entry point enables the linting rules for React hooks (requires v16.8+). To use, add `"extends": ["airbnb", "airbnb/hooks"]` to your `.eslintrc`
 
 ### eslint-config-airbnb/whitespace
 

From 7932a52e4b8f5a96089b245e2086769bf30cf0e4 Mon Sep 17 00:00:00 2001
From: Tom Prats <tprats108@gmail.com>
Date: Wed, 4 Sep 2019 14:11:39 -0400
Subject: [PATCH 1382/1591] Added Tomify and Traitify to the organizations

---
 README.md | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/README.md b/README.md
index 20b42ecfdf..9e649fed07 100644
--- a/README.md
+++ b/README.md
@@ -3871,6 +3871,8 @@ Other Style Guides
   - **Terra**: [terra](https://github.com/cerner?utf8=%E2%9C%93&q=terra&type=&language=)
   - **TheLadders**: [TheLadders/javascript](https://github.com/TheLadders/javascript)
   - **The Nerdery**: [thenerdery/javascript-standards](https://github.com/thenerdery/javascript-standards)
+  - **Tomify**: [tomprats](https://github.com/tomprats)
+  - **Traitify**: [traitify/eslint-config-traitify](https://github.com/traitify/eslint-config-traitify)
   - **T4R Technology**: [T4R-Technology/javascript](https://github.com/T4R-Technology/javascript)
   - **UrbanSim**: [urbansim](https://github.com/urbansim/)
   - **VoxFeed**: [VoxFeed/javascript-style-guide](https://github.com/VoxFeed/javascript-style-guide)

From 79047a947000b4b328fb9a6579d00e538768629e Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Thu, 3 Oct 2019 19:10:12 -0400
Subject: [PATCH 1383/1591] [eslint config] [base] [deps] update
 `confusing-browser-globals`

---
 packages/eslint-config-airbnb-base/package.json | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/packages/eslint-config-airbnb-base/package.json b/packages/eslint-config-airbnb-base/package.json
index 99830bcb67..411498b1a8 100644
--- a/packages/eslint-config-airbnb-base/package.json
+++ b/packages/eslint-config-airbnb-base/package.json
@@ -72,7 +72,7 @@
     "node": ">= 6"
   },
   "dependencies": {
-    "confusing-browser-globals": "^1.0.7",
+    "confusing-browser-globals": "^1.0.9",
     "object.assign": "^4.1.0",
     "object.entries": "^1.1.0"
   }

From 8c94d53bf88346cc4f55bfed769e3ee8c8247f80 Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Thu, 3 Oct 2019 19:10:47 -0400
Subject: [PATCH 1384/1591] [eslint config] [*] [dev deps] update
 `@babel/runtime`, `babel-preset-airbnb`, `safe-publish-latest`

---
 packages/eslint-config-airbnb-base/package.json | 6 +++---
 packages/eslint-config-airbnb/package.json      | 6 +++---
 2 files changed, 6 insertions(+), 6 deletions(-)

diff --git a/packages/eslint-config-airbnb-base/package.json b/packages/eslint-config-airbnb-base/package.json
index 411498b1a8..dd3023d3d1 100644
--- a/packages/eslint-config-airbnb-base/package.json
+++ b/packages/eslint-config-airbnb-base/package.json
@@ -53,15 +53,15 @@
   },
   "homepage": "https://github.com/airbnb/javascript",
   "devDependencies": {
-    "@babel/runtime": "^7.5.5",
-    "babel-preset-airbnb": "^4.0.1",
+    "@babel/runtime": "^7.6.2",
+    "babel-preset-airbnb": "^4.1.0",
     "babel-tape-runner": "^3.0.0",
     "eclint": "^2.8.1",
     "eslint": "^5.16.0 || ^6.1.0",
     "eslint-find-rules": "^3.4.0",
     "eslint-plugin-import": "^2.18.2",
     "in-publish": "^2.0.0",
-    "safe-publish-latest": "^1.1.2",
+    "safe-publish-latest": "^1.1.3",
     "tape": "^4.11.0"
   },
   "peerDependencies": {
diff --git a/packages/eslint-config-airbnb/package.json b/packages/eslint-config-airbnb/package.json
index 14b51c5717..d9b3f5d950 100644
--- a/packages/eslint-config-airbnb/package.json
+++ b/packages/eslint-config-airbnb/package.json
@@ -59,8 +59,8 @@
     "object.entries": "^1.1.0"
   },
   "devDependencies": {
-    "@babel/runtime": "^7.5.5",
-    "babel-preset-airbnb": "^4.0.1",
+    "@babel/runtime": "^7.6.2",
+    "babel-preset-airbnb": "^4.1.0",
     "babel-tape-runner": "^3.0.0",
     "eclint": "^2.8.1",
     "eslint": "^5.16.0 || ^6.1.0",
@@ -71,7 +71,7 @@
     "eslint-plugin-react-hooks": "^1.7.0",
     "in-publish": "^2.0.0",
     "react": ">= 0.13.0",
-    "safe-publish-latest": "^1.1.2",
+    "safe-publish-latest": "^1.1.3",
     "tape": "^4.11.0"
   },
   "peerDependencies": {

From c66cfc3f89335643b6fd89def665b959389b70ea Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Thu, 3 Oct 2019 19:20:10 -0400
Subject: [PATCH 1385/1591] [eslint config] [deps] update `eslint-plugin-react`

---
 packages/eslint-config-airbnb/package.json        |  4 ++--
 .../eslint-config-airbnb/test/test-react-order.js | 15 ++++++---------
 2 files changed, 8 insertions(+), 11 deletions(-)

diff --git a/packages/eslint-config-airbnb/package.json b/packages/eslint-config-airbnb/package.json
index d9b3f5d950..1ffd85fc1a 100644
--- a/packages/eslint-config-airbnb/package.json
+++ b/packages/eslint-config-airbnb/package.json
@@ -67,7 +67,7 @@
     "eslint-find-rules": "^3.4.0",
     "eslint-plugin-import": "^2.18.2",
     "eslint-plugin-jsx-a11y": "^6.2.3",
-    "eslint-plugin-react": "^7.14.3",
+    "eslint-plugin-react": "^7.15.1",
     "eslint-plugin-react-hooks": "^1.7.0",
     "in-publish": "^2.0.0",
     "react": ">= 0.13.0",
@@ -78,7 +78,7 @@
     "eslint": "^5.16.0 || ^6.1.0",
     "eslint-plugin-import": "^2.18.2",
     "eslint-plugin-jsx-a11y": "^6.2.3",
-    "eslint-plugin-react": "^7.14.3",
+    "eslint-plugin-react": "^7.15.1",
     "eslint-plugin-react-hooks": "^1.7.0"
   },
   "engines": {
diff --git a/packages/eslint-config-airbnb/test/test-react-order.js b/packages/eslint-config-airbnb/test/test-react-order.js
index 2527f04e19..af9287ab23 100644
--- a/packages/eslint-config-airbnb/test/test-react-order.js
+++ b/packages/eslint-config-airbnb/test/test-react-order.js
@@ -29,8 +29,7 @@ import React from 'react';
 
 export default class MyComponent extends React.Component {
 /* eslint no-empty-function: 0, class-methods-use-this: 0 */
-${body}
-}
+${body}}
 `;
 }
 
@@ -44,25 +43,24 @@ test('validate react prop order', (t) => {
   t.test('passes a good component', (t) => {
     t.plan(3);
     const result = lint(wrapComponent(`
-  componentWillMount() {}
   componentDidMount() {}
   setFoo() {}
   getFoo() {}
   setBar() {}
   someMethod() {}
   renderDogs() {}
-  render() { return <div />; }`));
+  render() { return <div />; }
+`));
 
     t.notOk(result.warningCount, 'no warnings');
-    t.notOk(result.errorCount, 'no errors');
     t.deepEquals(result.messages, [], 'no messages in results');
+    t.notOk(result.errorCount, 'no errors');
   });
 
   t.test('order: when random method is first', (t) => {
     t.plan(2);
     const result = lint(wrapComponent(`
   someMethod() {}
-  componentWillMount() {}
   componentDidMount() {}
   setFoo() {}
   getFoo() {}
@@ -72,13 +70,12 @@ test('validate react prop order', (t) => {
 `));
 
     t.ok(result.errorCount, 'fails');
-    t.equal(result.messages[0].ruleId, 'react/sort-comp', 'fails due to sort');
+    t.deepEqual(result.messages.map(x => x.ruleId), ['react/sort-comp'], 'fails due to sort');
   });
 
   t.test('order: when random method after lifecycle methods', (t) => {
     t.plan(2);
     const result = lint(wrapComponent(`
-  componentWillMount() {}
   componentDidMount() {}
   someMethod() {}
   setFoo() {}
@@ -89,6 +86,6 @@ test('validate react prop order', (t) => {
 `));
 
     t.ok(result.errorCount, 'fails');
-    t.equal(result.messages[0].ruleId, 'react/sort-comp', 'fails due to sort');
+    t.deepEqual(result.messages.map(x => x.ruleId), ['react/sort-comp'], 'fails due to sort');
   });
 });

From dee4f172e752f3e6180f88409aa4424de02f9d4c Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Thu, 3 Oct 2019 19:18:32 -0400
Subject: [PATCH 1386/1591] [eslint config] [base] add new rules in eslint 6.x,
 disabled

---
 .../eslint-config-airbnb-base/rules/best-practices.js     | 8 ++++++++
 packages/eslint-config-airbnb-base/rules/errors.js        | 4 ++++
 packages/eslint-config-airbnb-base/rules/style.js         | 4 ++++
 3 files changed, 16 insertions(+)

diff --git a/packages/eslint-config-airbnb-base/rules/best-practices.js b/packages/eslint-config-airbnb-base/rules/best-practices.js
index 41f85487a9..e780a43b47 100644
--- a/packages/eslint-config-airbnb-base/rules/best-practices.js
+++ b/packages/eslint-config-airbnb-base/rules/best-practices.js
@@ -28,6 +28,10 @@ module.exports = {
     // require default case in switch statements
     'default-case': ['error', { commentPattern: '^no default$' }],
 
+    // https://eslint.org/docs/rules/default-param-last
+    // TODO: enable, semver-minor, when eslint v6.4 is required (which is a major)
+    'default-param-last': 'off',
+
     // encourages use of dot notation whenever possible
     'dot-notation': ['error', { allowKeywords: true }],
 
@@ -313,6 +317,10 @@ module.exports = {
     // https://eslint.org/docs/rules/prefer-named-capture-group
     'prefer-named-capture-group': 'off',
 
+    // https://eslint.org/docs/rules/prefer-regex-literals
+    // TODO; enable, semver-minor, once eslint v6.4 is required (which is a major)
+    'prefer-regex-literals': 'off',
+
     // require use of the second argument for parseInt()
     radix: 'error',
 
diff --git a/packages/eslint-config-airbnb-base/rules/errors.js b/packages/eslint-config-airbnb-base/rules/errors.js
index 5a56844e7c..c996395299 100644
--- a/packages/eslint-config-airbnb-base/rules/errors.js
+++ b/packages/eslint-config-airbnb-base/rules/errors.js
@@ -73,6 +73,10 @@ module.exports = {
     // disallow overwriting functions written as function declarations
     'no-func-assign': 'error',
 
+    // https://eslint.org/docs/rules/no-import-assign
+    // TODO: enable, semver-minor, once eslint v6.4 is required (which is a major)
+    'no-import-assign': 'off',
+
     // disallow function or variable declarations in nested blocks
     'no-inner-declarations': 'error',
 
diff --git a/packages/eslint-config-airbnb-base/rules/style.js b/packages/eslint-config-airbnb-base/rules/style.js
index 3aa6eeac76..77412c94cd 100644
--- a/packages/eslint-config-airbnb-base/rules/style.js
+++ b/packages/eslint-config-airbnb-base/rules/style.js
@@ -76,6 +76,10 @@ module.exports = {
     // enforce newline at the end of file, with no multiple empty lines
     'eol-last': ['error', 'always'],
 
+    // https://eslint.org/docs/rules/function-call-argument-newline
+    // TODO: enable, semver-minor, once eslint v6.2 is required (which is a major)
+    'function-call-argument-newline': ['off', 'consistent'],
+
     // enforce spacing between functions and their invocations
     // https://eslint.org/docs/rules/func-call-spacing
     'func-call-spacing': ['error', 'never'],

From ab72ab9e90f403e90590f8815e0563248af10470 Mon Sep 17 00:00:00 2001
From: Filipp Riabchun <talpa@yandex.ru>
Date: Thu, 3 Oct 2019 21:31:32 +0200
Subject: [PATCH 1387/1591] [eslint config] [patch] Remove duplicate
 `componentDidCatch`

See https://github.com/airbnb/javascript/pull/2043#discussion_r331208075

I left the one before `cWU`, as in [defaults](https://github.com/airbnb/javascript/pull/2043#discussion_r331208075)
---
 packages/eslint-config-airbnb/rules/react.js | 3 +--
 1 file changed, 1 insertion(+), 2 deletions(-)

diff --git a/packages/eslint-config-airbnb/rules/react.js b/packages/eslint-config-airbnb/rules/react.js
index 1fe097bb07..964577054f 100644
--- a/packages/eslint-config-airbnb/rules/react.js
+++ b/packages/eslint-config-airbnb/rules/react.js
@@ -277,8 +277,7 @@ module.exports = {
           'getSnapshotBeforeUpdate',
           'componentDidUpdate',
           'componentDidCatch',
-          'componentWillUnmount',
-          'componentDidCatch'
+          'componentWillUnmount'
         ],
         rendering: [
           '/^render.+$/',

From df2c99c81474ab0fe9aecf0244d465785d3ee3df Mon Sep 17 00:00:00 2001
From: Pirasis <1pete@users.noreply.github.com>
Date: Sat, 5 Oct 2019 08:21:45 +0700
Subject: [PATCH 1388/1591] [tests] fix eslint errors from c66cfc3

---
 packages/eslint-config-airbnb/test/test-react-order.js | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/packages/eslint-config-airbnb/test/test-react-order.js b/packages/eslint-config-airbnb/test/test-react-order.js
index af9287ab23..6289973f03 100644
--- a/packages/eslint-config-airbnb/test/test-react-order.js
+++ b/packages/eslint-config-airbnb/test/test-react-order.js
@@ -70,7 +70,7 @@ test('validate react prop order', (t) => {
 `));
 
     t.ok(result.errorCount, 'fails');
-    t.deepEqual(result.messages.map(x => x.ruleId), ['react/sort-comp'], 'fails due to sort');
+    t.deepEqual(result.messages.map((msg) => msg.ruleId), ['react/sort-comp'], 'fails due to sort');
   });
 
   t.test('order: when random method after lifecycle methods', (t) => {
@@ -86,6 +86,6 @@ test('validate react prop order', (t) => {
 `));
 
     t.ok(result.errorCount, 'fails');
-    t.deepEqual(result.messages.map(x => x.ruleId), ['react/sort-comp'], 'fails due to sort');
+    t.deepEqual(result.messages.map((msg) => msg.ruleId), ['react/sort-comp'], 'fails due to sort');
   });
 });

From 5a32c33bf2bf967ce32bae2fd33b3fea275a99be Mon Sep 17 00:00:00 2001
From: Pirasis <1pete@users.noreply.github.com>
Date: Sat, 5 Oct 2019 08:49:01 +0700
Subject: [PATCH 1389/1591] [eslint config] [base] [minor] enable
 `import/no-useless-path-segments` for commonjs

Fixes #2077.
---
 packages/eslint-config-airbnb-base/rules/imports.js | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/packages/eslint-config-airbnb-base/rules/imports.js b/packages/eslint-config-airbnb-base/rules/imports.js
index 1c4e08d36c..ff358e6116 100644
--- a/packages/eslint-config-airbnb-base/rules/imports.js
+++ b/packages/eslint-config-airbnb-base/rules/imports.js
@@ -236,7 +236,7 @@ module.exports = {
 
     // Ensures that there are no useless path segments
     // https://github.com/benmosher/eslint-plugin-import/blob/ebafcbf59ec9f653b2ac2a0156ca3bcba0a7cf57/docs/rules/no-useless-path-segments.md
-    'import/no-useless-path-segments': 'error',
+    'import/no-useless-path-segments': ['error', { "commonjs": true }],
 
     // dynamic imports require a leading comment with a webpackChunkName
     // https://github.com/benmosher/eslint-plugin-import/blob/ebafcbf59ec9f653b2ac2a0156ca3bcba0a7cf57/docs/rules/dynamic-import-chunkname.md

From 8f78e1f44b9ca2f3a7da970771982694fa84fd72 Mon Sep 17 00:00:00 2001
From: Pirasis <1pete@users.noreply.github.com>
Date: Sat, 5 Oct 2019 08:01:44 +0700
Subject: [PATCH 1390/1591] [tests] re-enable eslint rule
 `prefer-destructuring` internally

---
 packages/eslint-config-airbnb-base/.eslintrc     | 2 --
 packages/eslint-config-airbnb-base/whitespace.js | 2 +-
 packages/eslint-config-airbnb/.eslintrc          | 2 --
 packages/eslint-config-airbnb/whitespace.js      | 2 +-
 4 files changed, 2 insertions(+), 6 deletions(-)

diff --git a/packages/eslint-config-airbnb-base/.eslintrc b/packages/eslint-config-airbnb-base/.eslintrc
index f9bd289286..ab2c306fd9 100644
--- a/packages/eslint-config-airbnb-base/.eslintrc
+++ b/packages/eslint-config-airbnb-base/.eslintrc
@@ -4,7 +4,5 @@
     // disable requiring trailing commas because it might be nice to revert to
     // being JSON at some point, and I don't want to make big changes now.
     "comma-dangle": 0,
-    // we support node 4
-    "prefer-destructuring": 0,
   },
 }
diff --git a/packages/eslint-config-airbnb-base/whitespace.js b/packages/eslint-config-airbnb-base/whitespace.js
index 917ee0c50e..9ada683b21 100644
--- a/packages/eslint-config-airbnb-base/whitespace.js
+++ b/packages/eslint-config-airbnb-base/whitespace.js
@@ -1,6 +1,6 @@
 const assign = require('object.assign');
 const entries = require('object.entries');
-const CLIEngine = require('eslint').CLIEngine;
+const { CLIEngine } = require('eslint');
 
 const baseConfig = require('.');
 
diff --git a/packages/eslint-config-airbnb/.eslintrc b/packages/eslint-config-airbnb/.eslintrc
index f9bd289286..ab2c306fd9 100644
--- a/packages/eslint-config-airbnb/.eslintrc
+++ b/packages/eslint-config-airbnb/.eslintrc
@@ -4,7 +4,5 @@
     // disable requiring trailing commas because it might be nice to revert to
     // being JSON at some point, and I don't want to make big changes now.
     "comma-dangle": 0,
-    // we support node 4
-    "prefer-destructuring": 0,
   },
 }
diff --git a/packages/eslint-config-airbnb/whitespace.js b/packages/eslint-config-airbnb/whitespace.js
index 654773758d..63fa0ce6e4 100644
--- a/packages/eslint-config-airbnb/whitespace.js
+++ b/packages/eslint-config-airbnb/whitespace.js
@@ -1,6 +1,6 @@
 const assign = require('object.assign');
 const entries = require('object.entries');
-const CLIEngine = require('eslint').CLIEngine;
+const { CLIEngine } = require('eslint');
 
 const baseConfig = require('.');
 

From 3fb312f18198364bacc07e61ca58ff89f9f0afa2 Mon Sep 17 00:00:00 2001
From: Alexander Wesolowski <foglerek@gmail.com>
Date: Fri, 4 Oct 2019 15:57:05 -0700
Subject: [PATCH 1391/1591] [eslint config] [patch] Add `static-variables` to
 `sort-comp` rule

---
 packages/eslint-config-airbnb/rules/react.js | 1 +
 1 file changed, 1 insertion(+)

diff --git a/packages/eslint-config-airbnb/rules/react.js b/packages/eslint-config-airbnb/rules/react.js
index 964577054f..fc1a3a90a9 100644
--- a/packages/eslint-config-airbnb/rules/react.js
+++ b/packages/eslint-config-airbnb/rules/react.js
@@ -240,6 +240,7 @@ module.exports = {
     // https://github.com/yannickcr/eslint-plugin-react/blob/843d71a432baf0f01f598d7cf1eea75ad6896e4b/docs/rules/sort-comp.md
     'react/sort-comp': ['error', {
       order: [
+        'static-variables',
         'static-methods',
         'instance-variables',
         'lifecycle',

From 64b965efe0355c8290996ff5a675cd8fb30bf843 Mon Sep 17 00:00:00 2001
From: trg <cactusx09@gmail.com>
Date: Tue, 1 Oct 2019 01:27:12 +0300
Subject: [PATCH 1392/1591] [guide] Fix Temporal dead zone link anchor

---
 README.md | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/README.md b/README.md
index 9e649fed07..efa2905a55 100644
--- a/README.md
+++ b/README.md
@@ -1805,7 +1805,7 @@ Other Style Guides
 ## Hoisting
 
   <a name="hoisting--about"></a><a name="14.1"></a>
-  - [14.1](#hoisting--about) `var` declarations get hoisted to the top of their closest enclosing function scope, their assignment does not. `const` and `let` declarations are blessed with a new concept called [Temporal Dead Zones (TDZ)](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/let#Temporal_Dead_Zone). It’s important to know why [typeof is no longer safe](http://es-discourse.com/t/why-typeof-is-no-longer-safe/15).
+  - [14.1](#hoisting--about) `var` declarations get hoisted to the top of their closest enclosing function scope, their assignment does not. `const` and `let` declarations are blessed with a new concept called [Temporal Dead Zones (TDZ)](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/let#Temporal_dead_zone). It’s important to know why [typeof is no longer safe](http://es-discourse.com/t/why-typeof-is-no-longer-safe/15).
 
     ```javascript
     // we know this wouldn’t work (assuming there

From 56b75dc3592c2118cefc5296c94d5fce5923a487 Mon Sep 17 00:00:00 2001
From: Igor Gassmann <igor@igassmann.me>
Date: Sun, 3 Nov 2019 21:00:57 +0100
Subject: [PATCH 1393/1591] [guide] Document `class-methods-use-this`

This PR documents the currently enforced `class-methods-use-this` ESlint rule as discussed in #2129
---
 README.md | 33 +++++++++++++++++++++++++++++++++
 1 file changed, 33 insertions(+)

diff --git a/README.md b/README.md
index efa2905a55..b0e7442ef7 100644
--- a/README.md
+++ b/README.md
@@ -1254,6 +1254,39 @@ Other Style Guides
     }
     ```
 
+  <a name="classes--methods-use-this"></a>
+  - [9.7](#classes--methods-use-this) Class methods should use `this` or be made into a static method unless an external library or framework requires to use specific non-static methods. Being an instance method should indicate that it behaves differently based on properties of the receiver. eslint: [`class-methods-use-this`](https://eslint.org/docs/rules/class-methods-use-this)
+
+    ```javascript
+    // bad
+    class Foo {
+      bar() {
+        console.log('bar');
+      }
+    }
+
+    // good - this i used
+    class Foo {
+      bar() {
+        console.log(this.bar);
+      }
+    }
+
+    // good - constructor is exempt
+    class Foo {
+      constructor() {
+        // ...
+      }
+    }
+
+    // good - static methods aren't expected to use this
+    class Foo {
+      static bar() {
+        console.log('bar');
+      }
+    }
+    ```
+
 **[⬆ back to top](#table-of-contents)**
 
 ## Modules

From 5927c7f706feee7542341faaa298176c2a82263d Mon Sep 17 00:00:00 2001
From: Vse Mozhet Byt <vsemozhetbyt@gmail.com>
Date: Fri, 8 Nov 2019 16:05:06 +0200
Subject: [PATCH 1394/1591] [guide] fix possible typo

---
 README.md | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/README.md b/README.md
index b0e7442ef7..5ba3d46d9d 100644
--- a/README.md
+++ b/README.md
@@ -1265,7 +1265,7 @@ Other Style Guides
       }
     }
 
-    // good - this i used
+    // good - this is used
     class Foo {
       bar() {
         console.log(this.bar);

From 2e3adc98c784be7fa63c7a05271f7aa86c9d6bc7 Mon Sep 17 00:00:00 2001
From: Jonas Scheffner <jonas.scheffner@share-now.com>
Date: Mon, 28 Oct 2019 13:42:10 +0100
Subject: [PATCH 1395/1591] [eslint config] [base] [patch]
 `import/no-extraneous-dependencies`: Support karma config files

---
 packages/eslint-config-airbnb-base/rules/imports.js | 1 +
 1 file changed, 1 insertion(+)

diff --git a/packages/eslint-config-airbnb-base/rules/imports.js b/packages/eslint-config-airbnb-base/rules/imports.js
index ff358e6116..c5ac1f920b 100644
--- a/packages/eslint-config-airbnb-base/rules/imports.js
+++ b/packages/eslint-config-airbnb-base/rules/imports.js
@@ -90,6 +90,7 @@ module.exports = {
         '**/Gruntfile{,.js}', // grunt config
         '**/protractor.conf.js', // protractor config
         '**/protractor.conf.*.js', // protractor config
+        '**/karma.conf.js' // karma config
       ],
       optionalDependencies: false,
     }],

From 370793b3ddfecfef29c05a62bdf17ec3d1b0a8b3 Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Tue, 10 Dec 2019 16:32:17 -0800
Subject: [PATCH 1396/1591] [eslint-config] [*] [fix] `whitespace`: only set
 erroring rules to "warn"

Fixes #2105
---
 packages/eslint-config-airbnb-base/whitespace.js | 15 ++++++++++++++-
 packages/eslint-config-airbnb/whitespace.js      | 15 ++++++++++++++-
 2 files changed, 28 insertions(+), 2 deletions(-)

diff --git a/packages/eslint-config-airbnb-base/whitespace.js b/packages/eslint-config-airbnb-base/whitespace.js
index 9ada683b21..0b7bda8f6f 100644
--- a/packages/eslint-config-airbnb-base/whitespace.js
+++ b/packages/eslint-config-airbnb-base/whitespace.js
@@ -4,6 +4,18 @@ const { CLIEngine } = require('eslint');
 
 const baseConfig = require('.');
 
+const severities = ['off', 'warn', 'error'];
+
+function getSeverity(ruleConfig) {
+  if (Array.isArray(ruleConfig)) {
+    return getSeverity(ruleConfig[0]);
+  }
+  if (typeof ruleConfig === 'number') {
+    return severities[ruleConfig];
+  }
+  return ruleConfig;
+}
+
 function onlyErrorOnRules(rulesToError, config) {
   const errorsOnly = assign({}, config);
   const cli = new CLIEngine({ baseConfig: config, useEslintrc: false });
@@ -12,8 +24,9 @@ function onlyErrorOnRules(rulesToError, config) {
   entries(baseRules).forEach((rule) => {
     const ruleName = rule[0];
     const ruleConfig = rule[1];
+    const severity = getSeverity(ruleConfig);
 
-    if (rulesToError.indexOf(ruleName) === -1) {
+    if (rulesToError.indexOf(ruleName) === -1 && severity === 'error') {
       if (Array.isArray(ruleConfig)) {
         errorsOnly.rules[ruleName] = ['warn'].concat(ruleConfig.slice(1));
       } else if (typeof ruleConfig === 'number') {
diff --git a/packages/eslint-config-airbnb/whitespace.js b/packages/eslint-config-airbnb/whitespace.js
index 63fa0ce6e4..48445ada24 100644
--- a/packages/eslint-config-airbnb/whitespace.js
+++ b/packages/eslint-config-airbnb/whitespace.js
@@ -4,6 +4,18 @@ const { CLIEngine } = require('eslint');
 
 const baseConfig = require('.');
 
+const severities = ['off', 'warn', 'error'];
+
+function getSeverity(ruleConfig) {
+  if (Array.isArray(ruleConfig)) {
+    return getSeverity(ruleConfig[0]);
+  }
+  if (typeof ruleConfig === 'number') {
+    return severities[ruleConfig];
+  }
+  return ruleConfig;
+}
+
 function onlyErrorOnRules(rulesToError, config) {
   const errorsOnly = assign({}, config);
   const cli = new CLIEngine({ baseConfig: config, useEslintrc: false });
@@ -12,8 +24,9 @@ function onlyErrorOnRules(rulesToError, config) {
   entries(baseRules).forEach((rule) => {
     const ruleName = rule[0];
     const ruleConfig = rule[1];
+    const severity = getSeverity(ruleConfig);
 
-    if (rulesToError.indexOf(ruleName) === -1) {
+    if (rulesToError.indexOf(ruleName) === -1 && severity === 'error') {
       if (Array.isArray(ruleConfig)) {
         errorsOnly.rules[ruleName] = ['warn'].concat(ruleConfig.slice(1));
       } else if (typeof ruleConfig === 'number') {

From b5954c32b34aab98d6713692fd33695fe8f7b12b Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Tue, 10 Dec 2019 16:47:51 -0800
Subject: [PATCH 1397/1591] [eslint config] [base] [deps] [minor] add new
 disabled rules, update eslint

---
 packages/eslint-config-airbnb-base/package.json        |  4 ++--
 .../eslint-config-airbnb-base/rules/best-practices.js  | 10 ++++++++++
 packages/eslint-config-airbnb-base/rules/errors.js     | 10 ++++++++++
 packages/eslint-config-airbnb-base/rules/style.js      |  5 +++++
 packages/eslint-config-airbnb/package.json             |  4 ++--
 5 files changed, 29 insertions(+), 4 deletions(-)

diff --git a/packages/eslint-config-airbnb-base/package.json b/packages/eslint-config-airbnb-base/package.json
index dd3023d3d1..8da8cebaf1 100644
--- a/packages/eslint-config-airbnb-base/package.json
+++ b/packages/eslint-config-airbnb-base/package.json
@@ -57,7 +57,7 @@
     "babel-preset-airbnb": "^4.1.0",
     "babel-tape-runner": "^3.0.0",
     "eclint": "^2.8.1",
-    "eslint": "^5.16.0 || ^6.1.0",
+    "eslint": "^5.16.0 || ^6.7.2",
     "eslint-find-rules": "^3.4.0",
     "eslint-plugin-import": "^2.18.2",
     "in-publish": "^2.0.0",
@@ -65,7 +65,7 @@
     "tape": "^4.11.0"
   },
   "peerDependencies": {
-    "eslint": "^5.16.0 || ^6.1.0",
+    "eslint": "^5.16.0 || ^6.7.2",
     "eslint-plugin-import": "^2.18.2"
   },
   "engines": {
diff --git a/packages/eslint-config-airbnb-base/rules/best-practices.js b/packages/eslint-config-airbnb-base/rules/best-practices.js
index e780a43b47..2ac83edc8a 100644
--- a/packages/eslint-config-airbnb-base/rules/best-practices.js
+++ b/packages/eslint-config-airbnb-base/rules/best-practices.js
@@ -43,6 +43,11 @@ module.exports = {
     // https://eslint.org/docs/rules/eqeqeq
     eqeqeq: ['error', 'always', { null: 'ignore' }],
 
+    // Require grouped accessor pairs in object literals and classes
+    // https://eslint.org/docs/rules/grouped-accessor-pairs
+    // TODO: enable in next major, altho the guide forbids getters/setters anyways
+    'grouped-accessor-pairs': 'off',
+
     // make sure for-in loops have an if statement
     'guard-for-in': 'error',
 
@@ -60,6 +65,11 @@ module.exports = {
     // https://eslint.org/docs/rules/no-case-declarations.html
     'no-case-declarations': 'error',
 
+    // Disallow returning value in constructor
+    // https://eslint.org/docs/rules/no-constructor-return
+    // TODO: enable, semver-major
+    'no-constructor-return': 'off',
+
     // disallow division operators explicitly at beginning of regular expression
     // https://eslint.org/docs/rules/no-div-regex
     'no-div-regex': 'off',
diff --git a/packages/eslint-config-airbnb-base/rules/errors.js b/packages/eslint-config-airbnb-base/rules/errors.js
index c996395299..e4cd542683 100644
--- a/packages/eslint-config-airbnb-base/rules/errors.js
+++ b/packages/eslint-config-airbnb-base/rules/errors.js
@@ -38,6 +38,11 @@ module.exports = {
     // disallow duplicate arguments in functions
     'no-dupe-args': 'error',
 
+    // Disallow duplicate conditions in if-else-if chains
+    // https://eslint.org/docs/rules/no-dupe-else-if
+    // TODO: enable, semver-major
+    'no-dupe-else-if': 'off',
+
     // disallow duplicate keys when creating object literals
     'no-dupe-keys': 'error',
 
@@ -100,6 +105,11 @@ module.exports = {
     // disallow multiple spaces in a regular expression literal
     'no-regex-spaces': 'error',
 
+    // Disallow returning values from setters
+    // https://eslint.org/docs/rules/no-setter-return
+    // TODO: enable, semver-major (altho the guide forbids getters/setters already)
+    'no-setter-return': 'off',
+
     // disallow sparse arrays
     'no-sparse-arrays': 'error',
 
diff --git a/packages/eslint-config-airbnb-base/rules/style.js b/packages/eslint-config-airbnb-base/rules/style.js
index 77412c94cd..69bc42b588 100644
--- a/packages/eslint-config-airbnb-base/rules/style.js
+++ b/packages/eslint-config-airbnb-base/rules/style.js
@@ -434,6 +434,11 @@ module.exports = {
     // https://eslint.org/docs/rules/padding-line-between-statements
     'padding-line-between-statements': 'off',
 
+    // Disallow the use of Math.pow in favor of the ** operator
+    // https://eslint.org/docs/rules/prefer-exponentiation-operator
+    // TODO: enable, semver-major when eslint 5 is dropped
+    'prefer-exponentiation-operator': 'off',
+
     // Prefer use of an object spread over Object.assign
     // https://eslint.org/docs/rules/prefer-object-spread
     'prefer-object-spread': 'error',
diff --git a/packages/eslint-config-airbnb/package.json b/packages/eslint-config-airbnb/package.json
index 1ffd85fc1a..dcdefd47fe 100644
--- a/packages/eslint-config-airbnb/package.json
+++ b/packages/eslint-config-airbnb/package.json
@@ -63,7 +63,7 @@
     "babel-preset-airbnb": "^4.1.0",
     "babel-tape-runner": "^3.0.0",
     "eclint": "^2.8.1",
-    "eslint": "^5.16.0 || ^6.1.0",
+    "eslint": "^5.16.0 || ^6.7.2",
     "eslint-find-rules": "^3.4.0",
     "eslint-plugin-import": "^2.18.2",
     "eslint-plugin-jsx-a11y": "^6.2.3",
@@ -75,7 +75,7 @@
     "tape": "^4.11.0"
   },
   "peerDependencies": {
-    "eslint": "^5.16.0 || ^6.1.0",
+    "eslint": "^5.16.0 || ^6.7.2",
     "eslint-plugin-import": "^2.18.2",
     "eslint-plugin-jsx-a11y": "^6.2.3",
     "eslint-plugin-react": "^7.15.1",

From 6d05dd898acfec3299cc2be8b6188be542824965 Mon Sep 17 00:00:00 2001
From: Geo Artemenko <geo.artemenko@gmail.com>
Date: Fri, 22 Nov 2019 22:04:23 -0500
Subject: [PATCH 1398/1591] [eslint config] [*] [readme] normalize multiline
 word according to merriam-webster

---
 README.md                                                  | 6 +++---
 packages/eslint-config-airbnb-base/rules/best-practices.js | 2 +-
 packages/eslint-config-airbnb-base/rules/imports.js        | 2 +-
 react/README.md                                            | 2 +-
 4 files changed, 6 insertions(+), 6 deletions(-)

diff --git a/README.md b/README.md
index 5ba3d46d9d..73371e6b44 100644
--- a/README.md
+++ b/README.md
@@ -2120,7 +2120,7 @@ Other Style Guides
 ## Blocks
 
   <a name="blocks--braces"></a><a name="16.1"></a>
-  - [16.1](#blocks--braces) Use braces with all multi-line blocks. eslint: [`nonblock-statement-body-position`](https://eslint.org/docs/rules/nonblock-statement-body-position)
+  - [16.1](#blocks--braces) Use braces with all multiline blocks. eslint: [`nonblock-statement-body-position`](https://eslint.org/docs/rules/nonblock-statement-body-position)
 
     ```javascript
     // bad
@@ -2145,7 +2145,7 @@ Other Style Guides
     ```
 
   <a name="blocks--cuddled-elses"></a><a name="16.2"></a>
-  - [16.2](#blocks--cuddled-elses) If you’re using multi-line blocks with `if` and `else`, put `else` on the same line as your `if` block’s closing brace. eslint: [`brace-style`](https://eslint.org/docs/rules/brace-style.html)
+  - [16.2](#blocks--cuddled-elses) If you’re using multiline blocks with `if` and `else`, put `else` on the same line as your `if` block’s closing brace. eslint: [`brace-style`](https://eslint.org/docs/rules/brace-style.html)
 
     ```javascript
     // bad
@@ -2307,7 +2307,7 @@ Other Style Guides
 ## Comments
 
   <a name="comments--multiline"></a><a name="17.1"></a>
-  - [18.1](#comments--multiline) Use `/** ... */` for multi-line comments.
+  - [18.1](#comments--multiline) Use `/** ... */` for multiline comments.
 
     ```javascript
     // bad
diff --git a/packages/eslint-config-airbnb-base/rules/best-practices.js b/packages/eslint-config-airbnb-base/rules/best-practices.js
index 2ac83edc8a..4cf2de48d9 100644
--- a/packages/eslint-config-airbnb-base/rules/best-practices.js
+++ b/packages/eslint-config-airbnb-base/rules/best-practices.js
@@ -23,7 +23,7 @@ module.exports = {
     'consistent-return': 'error',
 
     // specify curly brace conventions for all control statements
-    curly: ['error', 'multi-line'],
+    curly: ['error', 'multi-line'], // multiline
 
     // require default case in switch statements
     'default-case': ['error', { commentPattern: '^no default$' }],
diff --git a/packages/eslint-config-airbnb-base/rules/imports.js b/packages/eslint-config-airbnb-base/rules/imports.js
index c5ac1f920b..b88ace540f 100644
--- a/packages/eslint-config-airbnb-base/rules/imports.js
+++ b/packages/eslint-config-airbnb-base/rules/imports.js
@@ -237,7 +237,7 @@ module.exports = {
 
     // Ensures that there are no useless path segments
     // https://github.com/benmosher/eslint-plugin-import/blob/ebafcbf59ec9f653b2ac2a0156ca3bcba0a7cf57/docs/rules/no-useless-path-segments.md
-    'import/no-useless-path-segments': ['error', { "commonjs": true }],
+    'import/no-useless-path-segments': ['error', { commonjs: true }],
 
     // dynamic imports require a leading comment with a webpackChunkName
     // https://github.com/benmosher/eslint-plugin-import/blob/ebafcbf59ec9f653b2ac2a0156ca3bcba0a7cf57/docs/rules/dynamic-import-chunkname.md
diff --git a/react/README.md b/react/README.md
index 7e247e7ac1..a17cdf7a5b 100644
--- a/react/README.md
+++ b/react/README.md
@@ -514,7 +514,7 @@ We don’t recommend using indexes for keys if the order of items may change.
     <Foo variant="stuff" />
     ```
 
-  - If your component has multi-line properties, close its tag on a new line. eslint: [`react/jsx-closing-bracket-location`](https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/jsx-closing-bracket-location.md)
+  - If your component has multiline properties, close its tag on a new line. eslint: [`react/jsx-closing-bracket-location`](https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/jsx-closing-bracket-location.md)
 
     ```jsx
     // bad

From 377fbcac88728737dd8bd3180ec3819c3a2a5231 Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Fri, 7 Feb 2020 08:25:49 -1000
Subject: [PATCH 1399/1591] [eslint config] [*] [deps] update `object.entries`

---
 packages/eslint-config-airbnb-base/package.json | 2 +-
 packages/eslint-config-airbnb/package.json      | 2 +-
 2 files changed, 2 insertions(+), 2 deletions(-)

diff --git a/packages/eslint-config-airbnb-base/package.json b/packages/eslint-config-airbnb-base/package.json
index 8da8cebaf1..7eed1e2034 100644
--- a/packages/eslint-config-airbnb-base/package.json
+++ b/packages/eslint-config-airbnb-base/package.json
@@ -74,6 +74,6 @@
   "dependencies": {
     "confusing-browser-globals": "^1.0.9",
     "object.assign": "^4.1.0",
-    "object.entries": "^1.1.0"
+    "object.entries": "^1.1.1"
   }
 }
diff --git a/packages/eslint-config-airbnb/package.json b/packages/eslint-config-airbnb/package.json
index dcdefd47fe..834584d74a 100644
--- a/packages/eslint-config-airbnb/package.json
+++ b/packages/eslint-config-airbnb/package.json
@@ -56,7 +56,7 @@
   "dependencies": {
     "eslint-config-airbnb-base": "^14.0.0",
     "object.assign": "^4.1.0",
-    "object.entries": "^1.1.0"
+    "object.entries": "^1.1.1"
   },
   "devDependencies": {
     "@babel/runtime": "^7.6.2",

From 4df908033fb52184ac58deacc19c00ceb11020d1 Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Fri, 7 Feb 2020 08:29:46 -1000
Subject: [PATCH 1400/1591] [eslint config] [*] [dev deps] update
 `@babel/runtime`, `babel-preset-airbnb`, `safe-publish-latest`, `tape`

---
 packages/eslint-config-airbnb-base/package.json | 8 ++++----
 packages/eslint-config-airbnb/package.json      | 8 ++++----
 2 files changed, 8 insertions(+), 8 deletions(-)

diff --git a/packages/eslint-config-airbnb-base/package.json b/packages/eslint-config-airbnb-base/package.json
index 7eed1e2034..87e4176b18 100644
--- a/packages/eslint-config-airbnb-base/package.json
+++ b/packages/eslint-config-airbnb-base/package.json
@@ -53,16 +53,16 @@
   },
   "homepage": "https://github.com/airbnb/javascript",
   "devDependencies": {
-    "@babel/runtime": "^7.6.2",
-    "babel-preset-airbnb": "^4.1.0",
+    "@babel/runtime": "^7.8.4",
+    "babel-preset-airbnb": "^4.4.0",
     "babel-tape-runner": "^3.0.0",
     "eclint": "^2.8.1",
     "eslint": "^5.16.0 || ^6.7.2",
     "eslint-find-rules": "^3.4.0",
     "eslint-plugin-import": "^2.18.2",
     "in-publish": "^2.0.0",
-    "safe-publish-latest": "^1.1.3",
-    "tape": "^4.11.0"
+    "safe-publish-latest": "^1.1.4",
+    "tape": "^5.0.0-next.4"
   },
   "peerDependencies": {
     "eslint": "^5.16.0 || ^6.7.2",
diff --git a/packages/eslint-config-airbnb/package.json b/packages/eslint-config-airbnb/package.json
index 834584d74a..8f625c29e2 100644
--- a/packages/eslint-config-airbnb/package.json
+++ b/packages/eslint-config-airbnb/package.json
@@ -59,8 +59,8 @@
     "object.entries": "^1.1.1"
   },
   "devDependencies": {
-    "@babel/runtime": "^7.6.2",
-    "babel-preset-airbnb": "^4.1.0",
+    "@babel/runtime": "^7.8.4",
+    "babel-preset-airbnb": "^4.4.0",
     "babel-tape-runner": "^3.0.0",
     "eclint": "^2.8.1",
     "eslint": "^5.16.0 || ^6.7.2",
@@ -71,8 +71,8 @@
     "eslint-plugin-react-hooks": "^1.7.0",
     "in-publish": "^2.0.0",
     "react": ">= 0.13.0",
-    "safe-publish-latest": "^1.1.3",
-    "tape": "^4.11.0"
+    "safe-publish-latest": "^1.1.4",
+    "tape": "^5.0.0-next.4"
   },
   "peerDependencies": {
     "eslint": "^5.16.0 || ^6.7.2",

From f86f19cefc3b1ce19c4bf473606c95de86779b68 Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Fri, 7 Feb 2020 08:32:08 -1000
Subject: [PATCH 1401/1591] [eslint config] [*] [deps] update
 `eslint-plugin-import`, `eslint-plugin-react`

---
 packages/eslint-config-airbnb-base/package.json | 4 ++--
 packages/eslint-config-airbnb/package.json      | 8 ++++----
 2 files changed, 6 insertions(+), 6 deletions(-)

diff --git a/packages/eslint-config-airbnb-base/package.json b/packages/eslint-config-airbnb-base/package.json
index 87e4176b18..9d32da979c 100644
--- a/packages/eslint-config-airbnb-base/package.json
+++ b/packages/eslint-config-airbnb-base/package.json
@@ -59,14 +59,14 @@
     "eclint": "^2.8.1",
     "eslint": "^5.16.0 || ^6.7.2",
     "eslint-find-rules": "^3.4.0",
-    "eslint-plugin-import": "^2.18.2",
+    "eslint-plugin-import": "^2.20.1",
     "in-publish": "^2.0.0",
     "safe-publish-latest": "^1.1.4",
     "tape": "^5.0.0-next.4"
   },
   "peerDependencies": {
     "eslint": "^5.16.0 || ^6.7.2",
-    "eslint-plugin-import": "^2.18.2"
+    "eslint-plugin-import": "^2.20.1"
   },
   "engines": {
     "node": ">= 6"
diff --git a/packages/eslint-config-airbnb/package.json b/packages/eslint-config-airbnb/package.json
index 8f625c29e2..c58f98a902 100644
--- a/packages/eslint-config-airbnb/package.json
+++ b/packages/eslint-config-airbnb/package.json
@@ -65,9 +65,9 @@
     "eclint": "^2.8.1",
     "eslint": "^5.16.0 || ^6.7.2",
     "eslint-find-rules": "^3.4.0",
-    "eslint-plugin-import": "^2.18.2",
+    "eslint-plugin-import": "^2.20.1",
     "eslint-plugin-jsx-a11y": "^6.2.3",
-    "eslint-plugin-react": "^7.15.1",
+    "eslint-plugin-react": "^7.18.3",
     "eslint-plugin-react-hooks": "^1.7.0",
     "in-publish": "^2.0.0",
     "react": ">= 0.13.0",
@@ -76,9 +76,9 @@
   },
   "peerDependencies": {
     "eslint": "^5.16.0 || ^6.7.2",
-    "eslint-plugin-import": "^2.18.2",
+    "eslint-plugin-import": "^2.20.1",
     "eslint-plugin-jsx-a11y": "^6.2.3",
-    "eslint-plugin-react": "^7.15.1",
+    "eslint-plugin-react": "^7.18.3",
     "eslint-plugin-react-hooks": "^1.7.0"
   },
   "engines": {

From 651280e5a22d08170187bea9a2b1697832c87ebc Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?K=C3=A9vin=20Berthommier?=
 <bertho-zero@users.noreply.github.com>
Date: Fri, 7 Feb 2020 16:49:10 +0100
Subject: [PATCH 1402/1591] [eslint config] [base] Fix indentation with JSX
 Fragments

---
 packages/eslint-config-airbnb-base/rules/style.js | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/packages/eslint-config-airbnb-base/rules/style.js b/packages/eslint-config-airbnb-base/rules/style.js
index 69bc42b588..e5ff42a018 100644
--- a/packages/eslint-config-airbnb-base/rules/style.js
+++ b/packages/eslint-config-airbnb-base/rules/style.js
@@ -143,7 +143,7 @@ module.exports = {
       ImportDeclaration: 1,
       flatTernaryExpressions: false,
       // list derived from https://github.com/benjamn/ast-types/blob/HEAD/def/jsx.js
-      ignoredNodes: ['JSXElement', 'JSXElement > *', 'JSXAttribute', 'JSXIdentifier', 'JSXNamespacedName', 'JSXMemberExpression', 'JSXSpreadAttribute', 'JSXExpressionContainer', 'JSXOpeningElement', 'JSXClosingElement', 'JSXText', 'JSXEmptyExpression', 'JSXSpreadChild'],
+      ignoredNodes: ['JSXElement', 'JSXElement > *', 'JSXAttribute', 'JSXIdentifier', 'JSXNamespacedName', 'JSXMemberExpression', 'JSXSpreadAttribute', 'JSXExpressionContainer', 'JSXOpeningElement', 'JSXClosingElement', 'JSXFragment', 'JSXOpeningFragment', 'JSXClosingFragment', 'JSXText', 'JSXEmptyExpression', 'JSXSpreadChild'],
       ignoreComments: false
     }],
 

From 41ca203e3e5afff7ccc74179caf72494c2e7bd01 Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Fri, 7 Feb 2020 08:05:47 -1000
Subject: [PATCH 1403/1591] [Dev Deps] update `markdownlint-cli`

---
 README.md                  | 2 ++
 linters/.markdownlint.json | 3 ++-
 package.json               | 4 +++-
 react/README.md            | 1 +
 4 files changed, 8 insertions(+), 2 deletions(-)

diff --git a/README.md b/README.md
index 73371e6b44..ed145f3f17 100644
--- a/README.md
+++ b/README.md
@@ -1590,6 +1590,7 @@ Other Style Guides
 
     const isJedi = getProp('jedi');
     ```
+
   <a name="es2016-properties--exponentiation-operator"></a>
   - [12.3](#es2016-properties--exponentiation-operator) Use exponentiation operator `**` when calculating exponentiations. eslint: [`no-restricted-properties`](https://eslint.org/docs/rules/no-restricted-properties).
 
@@ -1703,6 +1704,7 @@ Other Style Guides
       return name;
     }
     ```
+
   <a name="variables--no-chain-assignment"></a><a name="13.5"></a>
   - [13.5](#variables--no-chain-assignment) Don’t chain variable assignments. eslint: [`no-multi-assign`](https://eslint.org/docs/rules/no-multi-assign)
 
diff --git a/linters/.markdownlint.json b/linters/.markdownlint.json
index 594886042d..118b8a6ec6 100644
--- a/linters/.markdownlint.json
+++ b/linters/.markdownlint.json
@@ -26,7 +26,8 @@
 
   "comment": "MD007: Unordered list indentation: 2 spaces.",
   "ul-indent": {
-    "indent": 2
+    "indent": 2,
+    "start_indented": true
   },
 
   "comment": "MD009: Disallow trailing spaces!",
diff --git a/package.json b/package.json
index 581c94f612..36b4e19fab 100644
--- a/package.json
+++ b/package.json
@@ -4,6 +4,7 @@
   "description": "A mostly reasonable approach to JavaScript.",
   "scripts": {
     "preinstall": "npm run install:config && npm run install:config:base",
+    "postinstall": "rm -rf node_modules/markdownlint-cli/node_modules/markdownlint",
     "install:config": "cd packages/eslint-config-airbnb && npm prune && npm install",
     "install:config:base": "cd packages/eslint-config-airbnb-base && npm prune && npm install",
     "lint": "markdownlint --config linters/.markdownlint.json README.md */README.md",
@@ -39,6 +40,7 @@
   },
   "homepage": "https://github.com/airbnb/javascript",
   "devDependencies": {
-    "markdownlint-cli": "^0.13.0"
+    "markdownlint": "^0.19.0",
+    "markdownlint-cli": "^0.21.0"
   }
 }
diff --git a/react/README.md b/react/README.md
index a17cdf7a5b..af8c13d720 100644
--- a/react/README.md
+++ b/react/README.md
@@ -111,6 +111,7 @@ This style guide is mostly based on the standards that are currently prevalent i
     // good
     import Footer from './Footer';
     ```
+
   - **Higher-order Component Naming**: Use a composite of the higher-order component’s name and the passed-in component’s name as the `displayName` on the generated component. For example, the higher-order component `withFoo()`, when passed a component `Bar` should produce a component with a `displayName` of `withFoo(Bar)`.
 
     > Why? A component’s `displayName` may be used by developer tools or in error messages, and having a value that clearly expresses this relationship helps people understand what is happening.

From 019e0f7e07477e85249e1d584f22773120c41b91 Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Thu, 13 Feb 2020 17:42:08 -0800
Subject: [PATCH 1404/1591] [eslint config] add config for disabled new rules

---
 packages/eslint-config-airbnb/rules/react.js | 29 ++++++++++++++++++++
 1 file changed, 29 insertions(+)

diff --git a/packages/eslint-config-airbnb/rules/react.js b/packages/eslint-config-airbnb/rules/react.js
index fc1a3a90a9..e712f0d77f 100644
--- a/packages/eslint-config-airbnb/rules/react.js
+++ b/packages/eslint-config-airbnb/rules/react.js
@@ -500,6 +500,35 @@ module.exports = {
     // Enforce that props are read-only
     // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/prefer-read-only-props.md
     'react/prefer-read-only-props': 'off',
+
+    // Prevent usage of `javascript:` URLs
+    // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/jsx-no-script-url.md
+    // TODO: enable, semver-major
+    'react/jsx-no-script-url': ['off', [
+      {
+        name: 'Link',
+        props: ['to'],
+      },
+    ]],
+
+    // Disallow unnecessary fragments
+    // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/jsx-no-useless-fragment.md
+    // TODO: enable, semver-major
+    'react/jsx-no-useless-fragment': 'off',
+
+    // Prevent adjacent inline elements not separated by whitespace
+    // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/no-adjacent-inline-elements.md
+    // TODO: enable? semver-major
+    'react/no-adjacent-inline-elements': 'off',
+
+    // Enforce a specific function type for function components
+    // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/function-component-definition.md
+    // TODO: enable! semver-minor, but do it in a major to be safe
+    // TODO: investigate if setting namedComponents to expression vs declaration is problematic
+    'react/function-component-definition': ['off', {
+      namedComponents: 'function-expression',
+      unnamedComponents: 'function-expression',
+    }],
   },
 
   settings: {

From 3493b060ec5efddc8a06733b5dbfe9f33cbce63e Mon Sep 17 00:00:00 2001
From: Julian Grinblat <julian@dotcore.co.il>
Date: Mon, 16 Sep 2019 19:37:29 +0900
Subject: [PATCH 1405/1591] [eslint config] [minor] Support
 eslint-plugin-react-hooks@2

---
 .travis.yml                                | 11 +++++++++++
 packages/eslint-config-airbnb/package.json |  4 ++--
 2 files changed, 13 insertions(+), 2 deletions(-)

diff --git a/.travis.yml b/.travis.yml
index df4ad7cf56..b43ee559d0 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -11,6 +11,7 @@ install:
   - 'if [ -n "${PACKAGE-}" ]; then cd "packages/${PACKAGE}"; fi'
   - 'if [ "${TRAVIS_NODE_VERSION}" = "0.6" ] || [ "${TRAVIS_NODE_VERSION}" = "0.9" ]; then nvm install --latest-npm 0.8 && npm install && nvm use "${TRAVIS_NODE_VERSION}"; else npm install; fi;'
   - 'if [ -n "${ESLINT}" ]; then npm install --no-save "eslint@${ESLINT}"; fi'
+  - 'if [ -n "${REACT_HOOKS}" ]; then npm install --no-save "eslint-plugin-react-hooks@${REACT_HOOKS}"; fi'
 script:
   - 'if [ -n "${PREPUBLISH-}" ]; then npm run pretravis && npm run prepublish && npm run posttravis; elif [ -n "${LINT-}" ]; then npm run lint; else npm run travis; fi'
 sudo: false
@@ -18,8 +19,10 @@ env:
   matrix:
     - 'TEST=true ESLINT=6 PACKAGE=eslint-config-airbnb-base'
     - 'TEST=true ESLINT=6 PACKAGE=eslint-config-airbnb'
+    - 'TEST=true ESLINT=6 REACT_HOOKS=1.7 PACKAGE=eslint-config-airbnb'
     - 'TEST=true ESLINT=5 PACKAGE=eslint-config-airbnb-base'
     - 'TEST=true ESLINT=5 PACKAGE=eslint-config-airbnb'
+    - 'TEST=true ESLINT=5 REACT_HOOKS=1.7 PACKAGE=eslint-config-airbnb'
 matrix:
   fast_finish: true
   include:
@@ -27,20 +30,28 @@ matrix:
       env: PREPUBLISH=true ESLINT=6 PACKAGE=eslint-config-airbnb-base
     - node_js: "lts/*"
       env: PREPUBLISH=true ESLINT=6 PACKAGE=eslint-config-airbnb
+    - node_js: "lts/*"
+      env: PREPUBLISH=true ESLINT=6 REACT_HOOKS=1.7 PACKAGE=eslint-config-airbnb
     - node_js: "lts/*"
       env: PREPUBLISH=true ESLINT=5 PACKAGE=eslint-config-airbnb-base
     - node_js: "lts/*"
       env: PREPUBLISH=true ESLINT=5 PACKAGE=eslint-config-airbnb
+    - node_js: "lts/*"
+      env: PREPUBLISH=true ESLINT=5 REACT_HOOKS=1.7 PACKAGE=eslint-config-airbnb
     - node_js: "lts/*"
       env: LINT=true
     - node_js: "7"
       env: TEST=true ESLINT=5 PACKAGE=eslint-config-airbnb-base
     - node_js: "7"
       env: TEST=true ESLINT=5 PACKAGE=eslint-config-airbnb
+    - node_js: "7"
+      env: TEST=true ESLINT=5 REACT_HOOKS=1.7 PACKAGE=eslint-config-airbnb
     - node_js: "6"
       env: TEST=true ESLINT=5 PACKAGE=eslint-config-airbnb-base
     - node_js: "6"
       env: TEST=true ESLINT=5 PACKAGE=eslint-config-airbnb
+    - node_js: "6"
+      env: TEST=true ESLINT=5 REACT_HOOKS=1.7 PACKAGE=eslint-config-airbnb
   exclude:
   allow_failures:
     - node_js: "11"
diff --git a/packages/eslint-config-airbnb/package.json b/packages/eslint-config-airbnb/package.json
index c58f98a902..74a699a34c 100644
--- a/packages/eslint-config-airbnb/package.json
+++ b/packages/eslint-config-airbnb/package.json
@@ -68,7 +68,7 @@
     "eslint-plugin-import": "^2.20.1",
     "eslint-plugin-jsx-a11y": "^6.2.3",
     "eslint-plugin-react": "^7.18.3",
-    "eslint-plugin-react-hooks": "^1.7.0",
+    "eslint-plugin-react-hooks": "^2.0.0 || ^1.7.0",
     "in-publish": "^2.0.0",
     "react": ">= 0.13.0",
     "safe-publish-latest": "^1.1.4",
@@ -79,7 +79,7 @@
     "eslint-plugin-import": "^2.20.1",
     "eslint-plugin-jsx-a11y": "^6.2.3",
     "eslint-plugin-react": "^7.18.3",
-    "eslint-plugin-react-hooks": "^1.7.0"
+    "eslint-plugin-react-hooks": "^2.0.0 || ^1.7.0"
   },
   "engines": {
     "node": ">= 6"

From 9890b4067700be1f2d045788f4ea5fbf12b5f8bf Mon Sep 17 00:00:00 2001
From: Cain Hall <cain.hall98@gmail.com>
Date: Mon, 2 Mar 2020 16:27:57 +1100
Subject: [PATCH 1406/1591] guide: import/extensions rule documentation

---
 README.md | 17 +++++++++++++++++
 1 file changed, 17 insertions(+)

diff --git a/README.md b/README.md
index ed145f3f17..f18c47b4b7 100644
--- a/README.md
+++ b/README.md
@@ -1441,6 +1441,23 @@ Other Style Guides
     import barCss from 'bar.css';
     ```
 
+  <a name="modules--import-extensions"></a>
+  - [10.10](#modules--import-extensions) Do not include JavaScript filename extensions
+ eslint: [`import/extensions`](https://github.com/benmosher/eslint-plugin-import/blob/master/docs/rules/extensions.md)
+    > Why? Including extensions inhibits refactoring, and inappropriately hardcodes implementation details of the module you're importing in every consumer.
+
+    ```javascript
+    // bad
+    import foo from './foo.js';
+    import bar from './bar.jsx';
+    import baz from './baz/index.jsx';
+
+    // good
+    import foo from './foo';
+    import bar from './bar';
+    import baz from './baz';
+    ```
+
 **[⬆ back to top](#table-of-contents)**
 
 ## Iterators and Generators

From 717ba5187af3b4c36877c2a7031edf202e72cf88 Mon Sep 17 00:00:00 2001
From: lagagain <lagagain@email.com>
Date: Fri, 28 Feb 2020 14:53:58 +0800
Subject: [PATCH 1407/1591] [guide]: add "bigint" type to the primitives type
 section.

```js
var bn = 123n
```
(with "n" as suffix)
---
 README.md | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/README.md b/README.md
index f18c47b4b7..5aa7ca2c63 100644
--- a/README.md
+++ b/README.md
@@ -71,6 +71,7 @@ Other Style Guides
     - `null`
     - `undefined`
     - `symbol`
+    - `bigint`
 
     ```javascript
     const foo = 1;
@@ -81,7 +82,7 @@ Other Style Guides
     console.log(foo, bar); // => 1, 9
     ```
 
-    - Symbols cannot be faithfully polyfilled, so they should not be used when targeting browsers/environments that don’t support them natively.
+    - Symbols and BigInts cannot be faithfully polyfilled, so they should not be used when targeting browsers/environments that don’t support them natively.
 
   <a name="types--complex"></a><a name="1.2"></a>
   - [1.2](#types--complex)  **Complex**: When you access a complex type you work on a reference to its value.

From e6e6414c973d6aa5f3672296fe3cf6c399ca570a Mon Sep 17 00:00:00 2001
From: Dmitry Semigradsky <semigradskyd@gmail.com>
Date: Mon, 9 Mar 2020 12:55:31 +0300
Subject: [PATCH 1408/1591] [guide] Add link to eslint rule for
 https://github.com/airbnb/javascript#modules--multiline-imports-over-newlines

---
 README.md | 1 +
 1 file changed, 1 insertion(+)

diff --git a/README.md b/README.md
index 5aa7ca2c63..cab3365246 100644
--- a/README.md
+++ b/README.md
@@ -1410,6 +1410,7 @@ Other Style Guides
 
   <a name="modules--multiline-imports-over-newlines"></a>
   - [10.8](#modules--multiline-imports-over-newlines) Multiline imports should be indented just like multiline array and object literals.
+ eslint: [`object-curly-newline`](https://eslint.org/docs/rules/object-curly-newline)
 
     > Why? The curly braces follow the same indentation rules as every other curly brace block in the style guide, as do the trailing commas.
 

From 165af9b6c881a0e413df824276aab4c7134dc4f9 Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Thu, 12 Mar 2020 15:41:30 -0700
Subject: [PATCH 1409/1591] [Tests] actually run the linter on subpackages

---
 .travis.yml | 4 ++++
 1 file changed, 4 insertions(+)

diff --git a/.travis.yml b/.travis.yml
index b43ee559d0..458da3173f 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -40,6 +40,10 @@ matrix:
       env: PREPUBLISH=true ESLINT=5 REACT_HOOKS=1.7 PACKAGE=eslint-config-airbnb
     - node_js: "lts/*"
       env: LINT=true
+    - node_js: "lts/*"
+      env: LINT=true PACKAGE=eslint-config-airbnb
+    - node_js: "lts/*"
+      env: LINT=true PACKAGE=eslint-config-airbnb-base
     - node_js: "7"
       env: TEST=true ESLINT=5 PACKAGE=eslint-config-airbnb-base
     - node_js: "7"

From 6924bd36041c59d7b248e47f31667dbe56a8aa55 Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Thu, 12 Mar 2020 15:58:18 -0700
Subject: [PATCH 1410/1591] [Dev Deps] update `@babel/runtime`

---
 packages/eslint-config-airbnb-base/package.json | 2 +-
 packages/eslint-config-airbnb/package.json      | 2 +-
 2 files changed, 2 insertions(+), 2 deletions(-)

diff --git a/packages/eslint-config-airbnb-base/package.json b/packages/eslint-config-airbnb-base/package.json
index 9d32da979c..54e76a0c5e 100644
--- a/packages/eslint-config-airbnb-base/package.json
+++ b/packages/eslint-config-airbnb-base/package.json
@@ -53,7 +53,7 @@
   },
   "homepage": "https://github.com/airbnb/javascript",
   "devDependencies": {
-    "@babel/runtime": "^7.8.4",
+    "@babel/runtime": "^7.8.7",
     "babel-preset-airbnb": "^4.4.0",
     "babel-tape-runner": "^3.0.0",
     "eclint": "^2.8.1",
diff --git a/packages/eslint-config-airbnb/package.json b/packages/eslint-config-airbnb/package.json
index 74a699a34c..4888f10c02 100644
--- a/packages/eslint-config-airbnb/package.json
+++ b/packages/eslint-config-airbnb/package.json
@@ -59,7 +59,7 @@
     "object.entries": "^1.1.1"
   },
   "devDependencies": {
-    "@babel/runtime": "^7.8.4",
+    "@babel/runtime": "^7.8.7",
     "babel-preset-airbnb": "^4.4.0",
     "babel-tape-runner": "^3.0.0",
     "eclint": "^2.8.1",

From e279b6d3a86aacbb03bd7059b899f12bfb201497 Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Thu, 12 Mar 2020 15:58:42 -0700
Subject: [PATCH 1411/1591] [eslint config] [*] [deps] update `eslint`,
 `eslint-plugin-react`, `eslint-plugin-react-hooks`

---
 packages/eslint-config-airbnb-base/package.json |  4 ++--
 packages/eslint-config-airbnb/package.json      | 12 ++++++------
 2 files changed, 8 insertions(+), 8 deletions(-)

diff --git a/packages/eslint-config-airbnb-base/package.json b/packages/eslint-config-airbnb-base/package.json
index 54e76a0c5e..f282516f6f 100644
--- a/packages/eslint-config-airbnb-base/package.json
+++ b/packages/eslint-config-airbnb-base/package.json
@@ -57,7 +57,7 @@
     "babel-preset-airbnb": "^4.4.0",
     "babel-tape-runner": "^3.0.0",
     "eclint": "^2.8.1",
-    "eslint": "^5.16.0 || ^6.7.2",
+    "eslint": "^5.16.0 || ^6.8.0",
     "eslint-find-rules": "^3.4.0",
     "eslint-plugin-import": "^2.20.1",
     "in-publish": "^2.0.0",
@@ -65,7 +65,7 @@
     "tape": "^5.0.0-next.4"
   },
   "peerDependencies": {
-    "eslint": "^5.16.0 || ^6.7.2",
+    "eslint": "^5.16.0 || ^6.8.0",
     "eslint-plugin-import": "^2.20.1"
   },
   "engines": {
diff --git a/packages/eslint-config-airbnb/package.json b/packages/eslint-config-airbnb/package.json
index 4888f10c02..84512f8184 100644
--- a/packages/eslint-config-airbnb/package.json
+++ b/packages/eslint-config-airbnb/package.json
@@ -63,23 +63,23 @@
     "babel-preset-airbnb": "^4.4.0",
     "babel-tape-runner": "^3.0.0",
     "eclint": "^2.8.1",
-    "eslint": "^5.16.0 || ^6.7.2",
+    "eslint": "^5.16.0 || ^6.8.0",
     "eslint-find-rules": "^3.4.0",
     "eslint-plugin-import": "^2.20.1",
     "eslint-plugin-jsx-a11y": "^6.2.3",
-    "eslint-plugin-react": "^7.18.3",
-    "eslint-plugin-react-hooks": "^2.0.0 || ^1.7.0",
+    "eslint-plugin-react": "^7.19.0",
+    "eslint-plugin-react-hooks": "^2.5.0 || ^1.7.0",
     "in-publish": "^2.0.0",
     "react": ">= 0.13.0",
     "safe-publish-latest": "^1.1.4",
     "tape": "^5.0.0-next.4"
   },
   "peerDependencies": {
-    "eslint": "^5.16.0 || ^6.7.2",
+    "eslint": "^5.16.0 || ^6.8.9",
     "eslint-plugin-import": "^2.20.1",
     "eslint-plugin-jsx-a11y": "^6.2.3",
-    "eslint-plugin-react": "^7.18.3",
-    "eslint-plugin-react-hooks": "^2.0.0 || ^1.7.0"
+    "eslint-plugin-react": "^7.19.0",
+    "eslint-plugin-react-hooks": "^2.5.0 || ^1.7.0"
   },
   "engines": {
     "node": ">= 6"

From c75b66daa6e9f1bc0c80138465ad5115764fb18d Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Thu, 12 Mar 2020 16:45:56 -0700
Subject: [PATCH 1412/1591] [eslint config] [base] v14.1.0

---
 packages/eslint-config-airbnb-base/CHANGELOG.md | 12 ++++++++++++
 packages/eslint-config-airbnb-base/package.json |  2 +-
 2 files changed, 13 insertions(+), 1 deletion(-)

diff --git a/packages/eslint-config-airbnb-base/CHANGELOG.md b/packages/eslint-config-airbnb-base/CHANGELOG.md
index 73105da143..3d31c2426b 100644
--- a/packages/eslint-config-airbnb-base/CHANGELOG.md
+++ b/packages/eslint-config-airbnb-base/CHANGELOG.md
@@ -1,3 +1,15 @@
+14.1.0 / 2020-03-12
+==================
+ - [minor] add new disabled rules, update eslint
+ - [minor] enable `import/no-useless-path-segments` for commonjs (#2113)
+ - [fix] `whitespace`: only set erroring rules to "warn"
+ - Fix indentation with JSX Fragments (#2157)
+ - [patch] `import/no-extraneous-dependencies`: Support karma config files (#2121)
+ - [readme] normalize multiline word according to merriam-webster (#2138)
+ - [deps] update `eslint`, `eslint-plugin-import`, `eslint-plugin-react`, `object.entries`, `confusing-browser-globals`
+ - [dev deps] update `@babel/runtime`, `babel-preset-airbnb`, `safe-publish-latest`, `tape`
+ - [tests] re-enable eslint rule `prefer-destructuring` internally (#2110)
+
 14.0.0 / 2019-08-09
 ==================
  - [breaking] `no-self-assign`: enable `props` option
diff --git a/packages/eslint-config-airbnb-base/package.json b/packages/eslint-config-airbnb-base/package.json
index f282516f6f..f5bdc3a5bf 100644
--- a/packages/eslint-config-airbnb-base/package.json
+++ b/packages/eslint-config-airbnb-base/package.json
@@ -1,6 +1,6 @@
 {
   "name": "eslint-config-airbnb-base",
-  "version": "14.0.0",
+  "version": "14.1.0",
   "description": "Airbnb's base JS ESLint config, following our styleguide",
   "main": "index.js",
   "scripts": {

From e7062c32bbb032a721dedbc5982b8fefe8b6850a Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Thu, 12 Mar 2020 22:47:00 -0700
Subject: [PATCH 1413/1591] [eslint config] [deps] update
 `eslint-config-airbnb-base`

---
 packages/eslint-config-airbnb/package.json | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/packages/eslint-config-airbnb/package.json b/packages/eslint-config-airbnb/package.json
index 84512f8184..c7f966eb74 100644
--- a/packages/eslint-config-airbnb/package.json
+++ b/packages/eslint-config-airbnb/package.json
@@ -54,7 +54,7 @@
   },
   "homepage": "https://github.com/airbnb/javascript",
   "dependencies": {
-    "eslint-config-airbnb-base": "^14.0.0",
+    "eslint-config-airbnb-base": "^14.1.0",
     "object.assign": "^4.1.0",
     "object.entries": "^1.1.1"
   },
@@ -75,7 +75,7 @@
     "tape": "^5.0.0-next.4"
   },
   "peerDependencies": {
-    "eslint": "^5.16.0 || ^6.8.9",
+    "eslint": "^5.16.0 || ^6.8.0",
     "eslint-plugin-import": "^2.20.1",
     "eslint-plugin-jsx-a11y": "^6.2.3",
     "eslint-plugin-react": "^7.19.0",

From a3355f90c4b52445dbe828fd4e71a7e7d12ef202 Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Thu, 12 Mar 2020 22:58:43 -0700
Subject: [PATCH 1414/1591] [eslint config] v18.1.0

---
 packages/eslint-config-airbnb/CHANGELOG.md | 13 +++++++++++++
 packages/eslint-config-airbnb/package.json |  2 +-
 2 files changed, 14 insertions(+), 1 deletion(-)

diff --git a/packages/eslint-config-airbnb/CHANGELOG.md b/packages/eslint-config-airbnb/CHANGELOG.md
index 8c16dd3c1a..4bb3083e8b 100644
--- a/packages/eslint-config-airbnb/CHANGELOG.md
+++ b/packages/eslint-config-airbnb/CHANGELOG.md
@@ -1,3 +1,16 @@
+18.1.0 / 2020-03-12
+==================
+ - [minor] Support eslint-plugin-react-hooks@2 (#2090)
+ - [minor] add new disabled rules, update eslint
+ - [fix] `whitespace`: only set erroring rules to "warn"
+ - [patch] Remove duplicate `componentDidCatch` (#2108)
+ - [patch] Add `static-variables` to `sort-comp` rule (#2109)
+ - [readme] clarify hooks section in readme (#2074)
+ - [deps] update `eslint`, `eslint-plugin-react`, `eslint-plugin-react-hooks`, `eslint-config-airbnb-base`, `eslint-plugin-import`, `object.entries`
+ - [dev deps] update `@babel/runtime`, `babel-preset-airbnb`, `safe-publish-latest`, `tape`
+ - [tests] re-enable eslint rule `prefer-destructuring` internally (#2110)
+ - [tests] fix eslint errors from c66cfc3 (#2112)
+
 18.0.1 / 2019-08-13
 ==================
  - [patch] `react/state-in-constructor`: fix incorrect configuration
diff --git a/packages/eslint-config-airbnb/package.json b/packages/eslint-config-airbnb/package.json
index c7f966eb74..975b067b50 100644
--- a/packages/eslint-config-airbnb/package.json
+++ b/packages/eslint-config-airbnb/package.json
@@ -1,6 +1,6 @@
 {
   "name": "eslint-config-airbnb",
-  "version": "18.0.1",
+  "version": "18.1.0",
   "description": "Airbnb's ESLint config, following our styleguide",
   "main": "index.js",
   "scripts": {

From d529ccaea3b3da1c1cfce686b119d662e8e05c69 Mon Sep 17 00:00:00 2001
From: "David J. Bradshaw" <david.j.bradshaw@gmail.com>
Date: Sat, 14 Mar 2020 07:36:30 +0000
Subject: [PATCH 1415/1591] [eslint config] readme: fix typo

---
 packages/eslint-config-airbnb/README.md | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/packages/eslint-config-airbnb/README.md b/packages/eslint-config-airbnb/README.md
index 94e4ac54c4..9cb0270467 100644
--- a/packages/eslint-config-airbnb/README.md
+++ b/packages/eslint-config-airbnb/README.md
@@ -56,7 +56,7 @@ Our default export contains all of our ESLint rules, including ECMAScript 6+ and
 
 2. Add `"extends": "airbnb"` to your `.eslintrc`
 
-### eslint-config/airbnb/hooks
+### eslint-config-airbnb/hooks
 
 This entry point enables the linting rules for React hooks (requires v16.8+). To use, add `"extends": ["airbnb", "airbnb/hooks"]` to your `.eslintrc`
 

From f075a0db50f1fd6a798cb6e0c3677421deb7b522 Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Sat, 14 Mar 2020 15:39:55 -0700
Subject: [PATCH 1416/1591] [eslint config] [patch] relax
 `eslint-plugin-react-hooks` down to v2.3, due to a controversial change in
 v2.5

Fixes #2195.
---
 packages/eslint-config-airbnb/package.json | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/packages/eslint-config-airbnb/package.json b/packages/eslint-config-airbnb/package.json
index 975b067b50..baebcb04f5 100644
--- a/packages/eslint-config-airbnb/package.json
+++ b/packages/eslint-config-airbnb/package.json
@@ -68,7 +68,7 @@
     "eslint-plugin-import": "^2.20.1",
     "eslint-plugin-jsx-a11y": "^6.2.3",
     "eslint-plugin-react": "^7.19.0",
-    "eslint-plugin-react-hooks": "^2.5.0 || ^1.7.0",
+    "eslint-plugin-react-hooks": "^2.3.0 || ^1.7.0",
     "in-publish": "^2.0.0",
     "react": ">= 0.13.0",
     "safe-publish-latest": "^1.1.4",
@@ -79,7 +79,7 @@
     "eslint-plugin-import": "^2.20.1",
     "eslint-plugin-jsx-a11y": "^6.2.3",
     "eslint-plugin-react": "^7.19.0",
-    "eslint-plugin-react-hooks": "^2.5.0 || ^1.7.0"
+    "eslint-plugin-react-hooks": "^2.3.0 || ^1.7.0"
   },
   "engines": {
     "node": ">= 6"

From d3628e26003a602535b91a8951da7a692fc685ca Mon Sep 17 00:00:00 2001
From: Nick Reiley <bloomber111@gmail.com>
Date: Mon, 16 Mar 2020 23:39:16 +0500
Subject: [PATCH 1417/1591] [eslint config] [base] [patch] Disable
 `prefer-object-spread` for `airbnb-base/legacy`

---
 packages/eslint-config-airbnb-base/legacy.js | 1 +
 1 file changed, 1 insertion(+)

diff --git a/packages/eslint-config-airbnb-base/legacy.js b/packages/eslint-config-airbnb-base/legacy.js
index 18576f83e5..e5c9089c75 100644
--- a/packages/eslint-config-airbnb-base/legacy.js
+++ b/packages/eslint-config-airbnb-base/legacy.js
@@ -28,6 +28,7 @@ module.exports = {
       message: 'Please use Object.defineProperty instead.',
     }],
     'no-var': 'off',
+    'prefer-object-spread': 'off',
     strict: ['error', 'safe'],
   }
 };

From 0375265cbd43635f8062615995a6a86f22fd0fc2 Mon Sep 17 00:00:00 2001
From: Nick Reiley <bloomber111@gmail.com>
Date: Mon, 16 Mar 2020 23:27:49 +0500
Subject: [PATCH 1418/1591] [eslint config] [base] [patch] Allow triple-slash
 (///) comments

---
 packages/eslint-config-airbnb-base/rules/style.js | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/packages/eslint-config-airbnb-base/rules/style.js b/packages/eslint-config-airbnb-base/rules/style.js
index e5ff42a018..793fe9185f 100644
--- a/packages/eslint-config-airbnb-base/rules/style.js
+++ b/packages/eslint-config-airbnb-base/rules/style.js
@@ -501,7 +501,7 @@ module.exports = {
     'spaced-comment': ['error', 'always', {
       line: {
         exceptions: ['-', '+'],
-        markers: ['=', '!'], // space here to support sprockets directives
+        markers: ['=', '!', '/'], // space here to support sprockets directives, slash for TS /// comments
       },
       block: {
         exceptions: ['-', '+'],

From e4f3dd4effd8e579427eeceb60d2f4e2ed5d08a7 Mon Sep 17 00:00:00 2001
From: Jiahao <jahowchen@outlook.com>
Date: Tue, 10 Mar 2020 23:24:39 -0400
Subject: [PATCH 1419/1591] [react] Update Chinese (Simplified) Translation

The translation for Chinese (Simplified) is outdated. Changed to an up-to-date translation that synced with current English version, enhanced expressions for better readability, and also added notes of technical terms for Chinese readers.
---
 react/README.md | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/react/README.md b/react/README.md
index af8c13d720..99518e5a75 100644
--- a/react/README.md
+++ b/react/README.md
@@ -718,7 +718,7 @@ We don’t recommend using indexes for keys if the order of items may change.
 
   This JSX/React style guide is also available in other languages:
 
-  - ![cn](https://raw.githubusercontent.com/gosquared/flags/master/flags/flags/shiny/24/China.png) **Chinese (Simplified)**: [JasonBoy/javascript](https://github.com/JasonBoy/javascript/tree/master/react)
+  - ![cn](https://raw.githubusercontent.com/gosquared/flags/master/flags/flags/shiny/24/China.png) **Chinese (Simplified)**: [jhcccc/javascript](https://github.com/jhcccc/javascript/tree/master/react)
   - ![tw](https://raw.githubusercontent.com/gosquared/flags/master/flags/flags/shiny/24/Taiwan.png) **Chinese (Traditional)**: [jigsawye/javascript](https://github.com/jigsawye/javascript/tree/master/react)
   - ![es](https://raw.githubusercontent.com/gosquared/flags/master/flags/flags/shiny/24/Spain.png) **Español**: [agrcrobles/javascript](https://github.com/agrcrobles/javascript/tree/master/react)
   - ![jp](https://raw.githubusercontent.com/gosquared/flags/master/flags/flags/shiny/24/Japan.png) **Japanese**: [mitsuruog/javascript-style-guide](https://github.com/mitsuruog/javascript-style-guide/tree/master/react)

From c0ee2c492460ac7428286c2bb0b48b4a058430fa Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E5=B0=8F=E8=9A=8A=E9=85=B1?= <baibai194@gmail.com>
Date: Tue, 31 Mar 2020 17:41:38 +0800
Subject: [PATCH 1420/1591] [guide] unquote properties in whitespace key
 spacing section

---
 README.md | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/README.md b/README.md
index cab3365246..57ebc57624 100644
--- a/README.md
+++ b/README.md
@@ -2914,11 +2914,11 @@ Other Style Guides
 
     ```javascript
     // bad
-    var obj = { "foo" : 42 };
-    var obj2 = { "foo":42 };
+    var obj = { foo : 42 };
+    var obj2 = { foo:42 };
 
     // good
-    var obj = { "foo": 42 };
+    var obj = { foo: 42 };
     ```
 
   <a name="whitespace--no-trailing-spaces"></a>

From 06b3ab11d9a443ff46f052dd00375e271e5146e6 Mon Sep 17 00:00:00 2001
From: Paul Matthew Barrameda <luisanduis729@gmail.com>
Date: Wed, 19 Feb 2020 22:56:52 -0800
Subject: [PATCH 1421/1591] [eslint config] [minor] Fix typo in
 no-multiple-empty-lines rule

 ## Why is the change being made?

This change is made because the Airbnb documentation states to "avoid a
newline at the beginning of files", yet the code does not follow this.

 ## What has changed to address the problem?

This change fixes the `no-multiple-empty-lines` rule by setting max
beginning of file (`maxBOF`) to from 1 to 0.

 ## How was this change tested?

This change was tested with `npm test`.

 ## Related docs

https://github.com/airbnb/javascript#whitespace--no-multiple-empty-lines
---
 packages/eslint-config-airbnb-base/rules/style.js      | 2 +-
 packages/eslint-config-airbnb/test/test-react-order.js | 2 +-
 2 files changed, 2 insertions(+), 2 deletions(-)

diff --git a/packages/eslint-config-airbnb-base/rules/style.js b/packages/eslint-config-airbnb-base/rules/style.js
index 793fe9185f..cf5a7b5dd5 100644
--- a/packages/eslint-config-airbnb-base/rules/style.js
+++ b/packages/eslint-config-airbnb-base/rules/style.js
@@ -313,7 +313,7 @@ module.exports = {
 
     // disallow multiple empty lines, only one newline at the end, and no new lines at the beginning
     // https://eslint.org/docs/rules/no-multiple-empty-lines
-    'no-multiple-empty-lines': ['error', { max: 2, maxBOF: 1, maxEOF: 0 }],
+    'no-multiple-empty-lines': ['error', { max: 2, maxBOF: 0, maxEOF: 0 }],
 
     // disallow negated conditions
     // https://eslint.org/docs/rules/no-negated-condition
diff --git a/packages/eslint-config-airbnb/test/test-react-order.js b/packages/eslint-config-airbnb/test/test-react-order.js
index 6289973f03..15dd8da2f6 100644
--- a/packages/eslint-config-airbnb/test/test-react-order.js
+++ b/packages/eslint-config-airbnb/test/test-react-order.js
@@ -24,7 +24,7 @@ function lint(text) {
 }
 
 function wrapComponent(body) {
-  return `
+  return `\
 import React from 'react';
 
 export default class MyComponent extends React.Component {

From c48a060aff9a4ba66003b18e6a27fd899581f95a Mon Sep 17 00:00:00 2001
From: Severiano Badajoz <sevebadajoz@gmail.com>
Date: Fri, 5 Jun 2020 15:09:12 -0700
Subject: [PATCH 1422/1591] [eslint config] [patch] set `explicitSpread` to
 ignore for `react/jsx-props-no-spreading`

---
 packages/eslint-config-airbnb/rules/react.js | 1 +
 1 file changed, 1 insertion(+)

diff --git a/packages/eslint-config-airbnb/rules/react.js b/packages/eslint-config-airbnb/rules/react.js
index e712f0d77f..84bbf6c162 100644
--- a/packages/eslint-config-airbnb/rules/react.js
+++ b/packages/eslint-config-airbnb/rules/react.js
@@ -494,6 +494,7 @@ module.exports = {
     'react/jsx-props-no-spreading': ['error', {
       html: 'enforce',
       custom: 'enforce',
+      explicitSpread: 'ignore',
       exceptions: [],
     }],
 

From d34f8074590e1497a9a90947181339435ce335d4 Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Sun, 7 Jun 2020 20:05:48 -0700
Subject: [PATCH 1423/1591] [Deps] update `object.entries`

---
 packages/eslint-config-airbnb-base/package.json | 2 +-
 packages/eslint-config-airbnb/package.json      | 2 +-
 2 files changed, 2 insertions(+), 2 deletions(-)

diff --git a/packages/eslint-config-airbnb-base/package.json b/packages/eslint-config-airbnb-base/package.json
index f5bdc3a5bf..5ef97f70b5 100644
--- a/packages/eslint-config-airbnb-base/package.json
+++ b/packages/eslint-config-airbnb-base/package.json
@@ -74,6 +74,6 @@
   "dependencies": {
     "confusing-browser-globals": "^1.0.9",
     "object.assign": "^4.1.0",
-    "object.entries": "^1.1.1"
+    "object.entries": "^1.1.2"
   }
 }
diff --git a/packages/eslint-config-airbnb/package.json b/packages/eslint-config-airbnb/package.json
index baebcb04f5..4e0ad31f90 100644
--- a/packages/eslint-config-airbnb/package.json
+++ b/packages/eslint-config-airbnb/package.json
@@ -56,7 +56,7 @@
   "dependencies": {
     "eslint-config-airbnb-base": "^14.1.0",
     "object.assign": "^4.1.0",
-    "object.entries": "^1.1.1"
+    "object.entries": "^1.1.2"
   },
   "devDependencies": {
     "@babel/runtime": "^7.8.7",

From 7aa0fa14d65d10e7bf259089d9964d41eb8ca5e0 Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Sun, 7 Jun 2020 20:50:43 -0700
Subject: [PATCH 1424/1591] [eslint config] [*] [deps] update
 `eslint-plugin-import`, `eslint-plugin-react`, `babel-preset-airbnb`,
 `eslint-find-rules`, `in-publish`, `tape`

---
 packages/eslint-config-airbnb-base/package.json | 12 ++++++------
 packages/eslint-config-airbnb/package.json      | 16 ++++++++--------
 2 files changed, 14 insertions(+), 14 deletions(-)

diff --git a/packages/eslint-config-airbnb-base/package.json b/packages/eslint-config-airbnb-base/package.json
index 5ef97f70b5..494b1aa879 100644
--- a/packages/eslint-config-airbnb-base/package.json
+++ b/packages/eslint-config-airbnb-base/package.json
@@ -54,19 +54,19 @@
   "homepage": "https://github.com/airbnb/javascript",
   "devDependencies": {
     "@babel/runtime": "^7.8.7",
-    "babel-preset-airbnb": "^4.4.0",
+    "babel-preset-airbnb": "^4.5.0",
     "babel-tape-runner": "^3.0.0",
     "eclint": "^2.8.1",
     "eslint": "^5.16.0 || ^6.8.0",
-    "eslint-find-rules": "^3.4.0",
-    "eslint-plugin-import": "^2.20.1",
-    "in-publish": "^2.0.0",
+    "eslint-find-rules": "^3.5.0",
+    "eslint-plugin-import": "^2.21.1",
+    "in-publish": "^2.0.1",
     "safe-publish-latest": "^1.1.4",
-    "tape": "^5.0.0-next.4"
+    "tape": "^5.0.1"
   },
   "peerDependencies": {
     "eslint": "^5.16.0 || ^6.8.0",
-    "eslint-plugin-import": "^2.20.1"
+    "eslint-plugin-import": "^2.21.1"
   },
   "engines": {
     "node": ">= 6"
diff --git a/packages/eslint-config-airbnb/package.json b/packages/eslint-config-airbnb/package.json
index 4e0ad31f90..7f56732360 100644
--- a/packages/eslint-config-airbnb/package.json
+++ b/packages/eslint-config-airbnb/package.json
@@ -60,25 +60,25 @@
   },
   "devDependencies": {
     "@babel/runtime": "^7.8.7",
-    "babel-preset-airbnb": "^4.4.0",
+    "babel-preset-airbnb": "^4.5.0",
     "babel-tape-runner": "^3.0.0",
     "eclint": "^2.8.1",
     "eslint": "^5.16.0 || ^6.8.0",
-    "eslint-find-rules": "^3.4.0",
-    "eslint-plugin-import": "^2.20.1",
+    "eslint-find-rules": "^3.5.0",
+    "eslint-plugin-import": "^2.21.1",
     "eslint-plugin-jsx-a11y": "^6.2.3",
-    "eslint-plugin-react": "^7.19.0",
+    "eslint-plugin-react": "^7.20.0",
     "eslint-plugin-react-hooks": "^2.3.0 || ^1.7.0",
-    "in-publish": "^2.0.0",
+    "in-publish": "^2.0.1",
     "react": ">= 0.13.0",
     "safe-publish-latest": "^1.1.4",
-    "tape": "^5.0.0-next.4"
+    "tape": "^5.0.1"
   },
   "peerDependencies": {
     "eslint": "^5.16.0 || ^6.8.0",
-    "eslint-plugin-import": "^2.20.1",
+    "eslint-plugin-import": "^2.21.1",
     "eslint-plugin-jsx-a11y": "^6.2.3",
-    "eslint-plugin-react": "^7.19.0",
+    "eslint-plugin-react": "^7.20.0",
     "eslint-plugin-react-hooks": "^2.3.0 || ^1.7.0"
   },
   "engines": {

From cad3db31695631a7877cece8903eea1f41d59e03 Mon Sep 17 00:00:00 2001
From: Vlad Shcherbin <vlad.shcherbin@gmail.com>
Date: Sun, 7 Jun 2020 00:01:51 +0300
Subject: [PATCH 1425/1591] [eslint config] [base] [minor] Disallow multiple
 empty lines

---
 packages/eslint-config-airbnb-base/rules/style.js | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/packages/eslint-config-airbnb-base/rules/style.js b/packages/eslint-config-airbnb-base/rules/style.js
index cf5a7b5dd5..05f687171e 100644
--- a/packages/eslint-config-airbnb-base/rules/style.js
+++ b/packages/eslint-config-airbnb-base/rules/style.js
@@ -313,7 +313,7 @@ module.exports = {
 
     // disallow multiple empty lines, only one newline at the end, and no new lines at the beginning
     // https://eslint.org/docs/rules/no-multiple-empty-lines
-    'no-multiple-empty-lines': ['error', { max: 2, maxBOF: 0, maxEOF: 0 }],
+    'no-multiple-empty-lines': ['error', { max: 1, maxBOF: 0, maxEOF: 0 }],
 
     // disallow negated conditions
     // https://eslint.org/docs/rules/no-negated-condition

From 8aee3e160053d07b4c156f0885fb5a6da4e19603 Mon Sep 17 00:00:00 2001
From: Vlad Shcherbin <vlad.shcherbin@gmail.com>
Date: Wed, 20 May 2020 13:21:10 +0300
Subject: [PATCH 1426/1591] [eslint config] [base] [patch] Include 'context'
 exception for `no-param-reassign`

---
 packages/eslint-config-airbnb-base/rules/best-practices.js | 1 +
 1 file changed, 1 insertion(+)

diff --git a/packages/eslint-config-airbnb-base/rules/best-practices.js b/packages/eslint-config-airbnb-base/rules/best-practices.js
index 4cf2de48d9..0307c64345 100644
--- a/packages/eslint-config-airbnb-base/rules/best-practices.js
+++ b/packages/eslint-config-airbnb-base/rules/best-practices.js
@@ -194,6 +194,7 @@ module.exports = {
         'accumulator', // for reduce accumulators
         'e', // for e.returnvalue
         'ctx', // for Koa routing
+        'context', // for Koa routing
         'req', // for Express requests
         'request', // for Express requests
         'res', // for Express responses

From b58700607707c7e280e5e266a884115cbcea806c Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Wed, 10 Jun 2020 14:49:21 -0700
Subject: [PATCH 1427/1591] [eslint config] [*] [deps] update
 `eslint-plugin-import`

---
 packages/eslint-config-airbnb-base/package.json | 4 ++--
 packages/eslint-config-airbnb/package.json      | 4 ++--
 2 files changed, 4 insertions(+), 4 deletions(-)

diff --git a/packages/eslint-config-airbnb-base/package.json b/packages/eslint-config-airbnb-base/package.json
index 494b1aa879..2957b06427 100644
--- a/packages/eslint-config-airbnb-base/package.json
+++ b/packages/eslint-config-airbnb-base/package.json
@@ -59,14 +59,14 @@
     "eclint": "^2.8.1",
     "eslint": "^5.16.0 || ^6.8.0",
     "eslint-find-rules": "^3.5.0",
-    "eslint-plugin-import": "^2.21.1",
+    "eslint-plugin-import": "^2.21.2",
     "in-publish": "^2.0.1",
     "safe-publish-latest": "^1.1.4",
     "tape": "^5.0.1"
   },
   "peerDependencies": {
     "eslint": "^5.16.0 || ^6.8.0",
-    "eslint-plugin-import": "^2.21.1"
+    "eslint-plugin-import": "^2.21.2"
   },
   "engines": {
     "node": ">= 6"
diff --git a/packages/eslint-config-airbnb/package.json b/packages/eslint-config-airbnb/package.json
index 7f56732360..3d96a8a55e 100644
--- a/packages/eslint-config-airbnb/package.json
+++ b/packages/eslint-config-airbnb/package.json
@@ -65,7 +65,7 @@
     "eclint": "^2.8.1",
     "eslint": "^5.16.0 || ^6.8.0",
     "eslint-find-rules": "^3.5.0",
-    "eslint-plugin-import": "^2.21.1",
+    "eslint-plugin-import": "^2.21.2",
     "eslint-plugin-jsx-a11y": "^6.2.3",
     "eslint-plugin-react": "^7.20.0",
     "eslint-plugin-react-hooks": "^2.3.0 || ^1.7.0",
@@ -76,7 +76,7 @@
   },
   "peerDependencies": {
     "eslint": "^5.16.0 || ^6.8.0",
-    "eslint-plugin-import": "^2.21.1",
+    "eslint-plugin-import": "^2.21.2",
     "eslint-plugin-jsx-a11y": "^6.2.3",
     "eslint-plugin-react": "^7.20.0",
     "eslint-plugin-react-hooks": "^2.3.0 || ^1.7.0"

From fe2e451ba75b2ebfedc1cf4f9bf217f104b06a1d Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Wed, 10 Jun 2020 14:58:23 -0700
Subject: [PATCH 1428/1591] [Tests] add `node` `v14`; remove `v9`, `v11`

---
 .travis.yml | 12 +-----------
 1 file changed, 1 insertion(+), 11 deletions(-)

diff --git a/.travis.yml b/.travis.yml
index 458da3173f..a240129152 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -1,9 +1,8 @@
 language: node_js
 node_js:
+  - "14"
   - "12"
-  - "11"
   - "10"
-  - "9"
   - "8"
 before_install:
   - 'nvm install-latest-npm'
@@ -44,12 +43,6 @@ matrix:
       env: LINT=true PACKAGE=eslint-config-airbnb
     - node_js: "lts/*"
       env: LINT=true PACKAGE=eslint-config-airbnb-base
-    - node_js: "7"
-      env: TEST=true ESLINT=5 PACKAGE=eslint-config-airbnb-base
-    - node_js: "7"
-      env: TEST=true ESLINT=5 PACKAGE=eslint-config-airbnb
-    - node_js: "7"
-      env: TEST=true ESLINT=5 REACT_HOOKS=1.7 PACKAGE=eslint-config-airbnb
     - node_js: "6"
       env: TEST=true ESLINT=5 PACKAGE=eslint-config-airbnb-base
     - node_js: "6"
@@ -58,9 +51,6 @@ matrix:
       env: TEST=true ESLINT=5 REACT_HOOKS=1.7 PACKAGE=eslint-config-airbnb
   exclude:
   allow_failures:
-    - node_js: "11"
-    - node_js: "9"
-    - node_js: "7"
     - env: PREPUBLISH=true ESLINT=6 PACKAGE=eslint-config-airbnb-base
     - env: PREPUBLISH=true ESLINT=6 PACKAGE=eslint-config-airbnb
     - env: PREPUBLISH=true ESLINT=5 PACKAGE=eslint-config-airbnb-base

From 22adc06f56a94437a533c4935d6706a511b3dc36 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Krist=C3=B3f=20Poduszl=C3=B3?= <kripod@protonmail.com>
Date: Fri, 10 Apr 2020 00:47:18 +0200
Subject: [PATCH 1429/1591] [eslint config] [minor] Allow using
 `eslint-plugin-react-hooks` v3 and v4
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

Co-authored-by: Kristóf Poduszló <kripod@protonmail.com>
Co-authored-by: Jordan Harband <ljharb@gmail.com>
---
 .travis.yml                                | 16 ++++++++++++++++
 packages/eslint-config-airbnb/package.json |  4 ++--
 2 files changed, 18 insertions(+), 2 deletions(-)

diff --git a/.travis.yml b/.travis.yml
index a240129152..ee392c7703 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -18,9 +18,13 @@ env:
   matrix:
     - 'TEST=true ESLINT=6 PACKAGE=eslint-config-airbnb-base'
     - 'TEST=true ESLINT=6 PACKAGE=eslint-config-airbnb'
+    - 'TEST=true ESLINT=6 REACT_HOOKS=3 PACKAGE=eslint-config-airbnb'
+    - 'TEST=true ESLINT=6 REACT_HOOKS=2.3 PACKAGE=eslint-config-airbnb'
     - 'TEST=true ESLINT=6 REACT_HOOKS=1.7 PACKAGE=eslint-config-airbnb'
     - 'TEST=true ESLINT=5 PACKAGE=eslint-config-airbnb-base'
     - 'TEST=true ESLINT=5 PACKAGE=eslint-config-airbnb'
+    - 'TEST=true ESLINT=5 REACT_HOOKS=3 PACKAGE=eslint-config-airbnb'
+    - 'TEST=true ESLINT=5 REACT_HOOKS=2.3 PACKAGE=eslint-config-airbnb'
     - 'TEST=true ESLINT=5 REACT_HOOKS=1.7 PACKAGE=eslint-config-airbnb'
 matrix:
   fast_finish: true
@@ -29,12 +33,20 @@ matrix:
       env: PREPUBLISH=true ESLINT=6 PACKAGE=eslint-config-airbnb-base
     - node_js: "lts/*"
       env: PREPUBLISH=true ESLINT=6 PACKAGE=eslint-config-airbnb
+    - node_js: "lts/*"
+      env: PREPUBLISH=true ESLINT=6 REACT_HOOKS=3 PACKAGE=eslint-config-airbnb
+    - node_js: "lts/*"
+      env: PREPUBLISH=true ESLINT=6 REACT_HOOKS=2.3 PACKAGE=eslint-config-airbnb
     - node_js: "lts/*"
       env: PREPUBLISH=true ESLINT=6 REACT_HOOKS=1.7 PACKAGE=eslint-config-airbnb
     - node_js: "lts/*"
       env: PREPUBLISH=true ESLINT=5 PACKAGE=eslint-config-airbnb-base
     - node_js: "lts/*"
       env: PREPUBLISH=true ESLINT=5 PACKAGE=eslint-config-airbnb
+    - node_js: "lts/*"
+      env: PREPUBLISH=true ESLINT=5 REACT_HOOKS=3 PACKAGE=eslint-config-airbnb
+    - node_js: "lts/*"
+      env: PREPUBLISH=true ESLINT=5 REACT_HOOKS=2.3 PACKAGE=eslint-config-airbnb
     - node_js: "lts/*"
       env: PREPUBLISH=true ESLINT=5 REACT_HOOKS=1.7 PACKAGE=eslint-config-airbnb
     - node_js: "lts/*"
@@ -47,6 +59,10 @@ matrix:
       env: TEST=true ESLINT=5 PACKAGE=eslint-config-airbnb-base
     - node_js: "6"
       env: TEST=true ESLINT=5 PACKAGE=eslint-config-airbnb
+    - node_js: "6"
+      env: TEST=true ESLINT=5 REACT_HOOKS=3 PACKAGE=eslint-config-airbnb
+    - node_js: "6"
+      env: TEST=true ESLINT=5 REACT_HOOKS=2.3 PACKAGE=eslint-config-airbnb
     - node_js: "6"
       env: TEST=true ESLINT=5 REACT_HOOKS=1.7 PACKAGE=eslint-config-airbnb
   exclude:
diff --git a/packages/eslint-config-airbnb/package.json b/packages/eslint-config-airbnb/package.json
index 3d96a8a55e..0e08d078fc 100644
--- a/packages/eslint-config-airbnb/package.json
+++ b/packages/eslint-config-airbnb/package.json
@@ -68,7 +68,7 @@
     "eslint-plugin-import": "^2.21.2",
     "eslint-plugin-jsx-a11y": "^6.2.3",
     "eslint-plugin-react": "^7.20.0",
-    "eslint-plugin-react-hooks": "^2.3.0 || ^1.7.0",
+    "eslint-plugin-react-hooks": "^4 || ^3 || ^2.3.0 || ^1.7.0",
     "in-publish": "^2.0.1",
     "react": ">= 0.13.0",
     "safe-publish-latest": "^1.1.4",
@@ -79,7 +79,7 @@
     "eslint-plugin-import": "^2.21.2",
     "eslint-plugin-jsx-a11y": "^6.2.3",
     "eslint-plugin-react": "^7.20.0",
-    "eslint-plugin-react-hooks": "^2.3.0 || ^1.7.0"
+    "eslint-plugin-react-hooks": "^4 || ^3 || ^2.3.0 || ^1.7.0"
   },
   "engines": {
     "node": ">= 6"

From 5b462a04cdfebba712a3df18926edfcb4103d2a9 Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Wed, 10 Jun 2020 15:43:13 -0700
Subject: [PATCH 1430/1591] [eslint config] [*] [new] add `eslint` `v7`

---
 .travis.yml                                   | 37 ++++++++++++++++++-
 .../eslint-config-airbnb-base/package.json    |  4 +-
 .../rules/best-practices.js                   |  5 +++
 .../eslint-config-airbnb-base/rules/errors.js | 13 ++++++-
 .../eslint-config-airbnb-base/rules/es6.js    | 10 +++++
 packages/eslint-config-airbnb/package.json    |  4 +-
 6 files changed, 67 insertions(+), 6 deletions(-)

diff --git a/.travis.yml b/.travis.yml
index ee392c7703..b7eb96d7ae 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -3,7 +3,6 @@ node_js:
   - "14"
   - "12"
   - "10"
-  - "8"
 before_install:
   - 'nvm install-latest-npm'
 install:
@@ -16,6 +15,11 @@ script:
 sudo: false
 env:
   matrix:
+    - 'TEST=true ESLINT=7 PACKAGE=eslint-config-airbnb-base'
+    - 'TEST=true ESLINT=7 PACKAGE=eslint-config-airbnb'
+    - 'TEST=true ESLINT=7 REACT_HOOKS=3 PACKAGE=eslint-config-airbnb'
+    - 'TEST=true ESLINT=7 REACT_HOOKS=2.3 PACKAGE=eslint-config-airbnb'
+    - 'TEST=true ESLINT=7 REACT_HOOKS=1.7 PACKAGE=eslint-config-airbnb'
     - 'TEST=true ESLINT=6 PACKAGE=eslint-config-airbnb-base'
     - 'TEST=true ESLINT=6 PACKAGE=eslint-config-airbnb'
     - 'TEST=true ESLINT=6 REACT_HOOKS=3 PACKAGE=eslint-config-airbnb'
@@ -29,6 +33,17 @@ env:
 matrix:
   fast_finish: true
   include:
+    - node_js: "lts/*"
+      env: PREPUBLISH=true ESLINT=7 PACKAGE=eslint-config-airbnb-base
+    - node_js: "lts/*"
+      env: PREPUBLISH=true ESLINT=7 PACKAGE=eslint-config-airbnb
+    - node_js: "lts/*"
+      env: PREPUBLISH=true ESLINT=7 REACT_HOOKS=3 PACKAGE=eslint-config-airbnb
+    - node_js: "lts/*"
+      env: PREPUBLISH=true ESLINT=7 REACT_HOOKS=2.3 PACKAGE=eslint-config-airbnb
+    - node_js: "lts/*"
+      env: PREPUBLISH=true ESLINT=7 REACT_HOOKS=1.7 PACKAGE=eslint-config-airbnb
+    - node_js: "lts/*"
     - node_js: "lts/*"
       env: PREPUBLISH=true ESLINT=6 PACKAGE=eslint-config-airbnb-base
     - node_js: "lts/*"
@@ -55,6 +70,26 @@ matrix:
       env: LINT=true PACKAGE=eslint-config-airbnb
     - node_js: "lts/*"
       env: LINT=true PACKAGE=eslint-config-airbnb-base
+    - node_js: "8"
+      env: TEST=true ESLINT=6 PACKAGE=eslint-config-airbnb-base
+    - node_js: "8"
+      env: TEST=true ESLINT=6 PACKAGE=eslint-config-airbnb
+    - node_js: "8"
+      env: TEST=true ESLINT=6 REACT_HOOKS=3 PACKAGE=eslint-config-airbnb
+    - node_js: "8"
+      env: TEST=true ESLINT=6 REACT_HOOKS=2.3 PACKAGE=eslint-config-airbnb
+    - node_js: "8"
+      env: TEST=true ESLINT=6 REACT_HOOKS=1.7 PACKAGE=eslint-config-airbnb
+    - node_js: "8"
+      env: TEST=true ESLINT=5 PACKAGE=eslint-config-airbnb-base
+    - node_js: "8"
+      env: TEST=true ESLINT=5 PACKAGE=eslint-config-airbnb
+    - node_js: "8"
+      env: TEST=true ESLINT=5 REACT_HOOKS=3 PACKAGE=eslint-config-airbnb
+    - node_js: "8"
+      env: TEST=true ESLINT=5 REACT_HOOKS=2.3 PACKAGE=eslint-config-airbnb
+    - node_js: "8"
+      env: TEST=true ESLINT=5 REACT_HOOKS=1.7 PACKAGE=eslint-config-airbnb
     - node_js: "6"
       env: TEST=true ESLINT=5 PACKAGE=eslint-config-airbnb-base
     - node_js: "6"
diff --git a/packages/eslint-config-airbnb-base/package.json b/packages/eslint-config-airbnb-base/package.json
index 2957b06427..b691e1a3b2 100644
--- a/packages/eslint-config-airbnb-base/package.json
+++ b/packages/eslint-config-airbnb-base/package.json
@@ -57,7 +57,7 @@
     "babel-preset-airbnb": "^4.5.0",
     "babel-tape-runner": "^3.0.0",
     "eclint": "^2.8.1",
-    "eslint": "^5.16.0 || ^6.8.0",
+    "eslint": "^5.16.0 || ^6.8.0 || ^7.2.0",
     "eslint-find-rules": "^3.5.0",
     "eslint-plugin-import": "^2.21.2",
     "in-publish": "^2.0.1",
@@ -65,7 +65,7 @@
     "tape": "^5.0.1"
   },
   "peerDependencies": {
-    "eslint": "^5.16.0 || ^6.8.0",
+    "eslint": "^5.16.0 || ^6.8.0 || ^7.2.0",
     "eslint-plugin-import": "^2.21.2"
   },
   "engines": {
diff --git a/packages/eslint-config-airbnb-base/rules/best-practices.js b/packages/eslint-config-airbnb-base/rules/best-practices.js
index 0307c64345..8e1d991304 100644
--- a/packages/eslint-config-airbnb-base/rules/best-practices.js
+++ b/packages/eslint-config-airbnb-base/rules/best-practices.js
@@ -28,6 +28,11 @@ module.exports = {
     // require default case in switch statements
     'default-case': ['error', { commentPattern: '^no default$' }],
 
+    // Enforce default clauses in switch statements to be last
+    // https://eslint.org/docs/rules/default-case-last
+    // TODO: enable, semver-minor, when eslint v7 is required (which is a major)
+    'default-case-last': 'off',
+
     // https://eslint.org/docs/rules/default-param-last
     // TODO: enable, semver-minor, when eslint v6.4 is required (which is a major)
     'default-param-last': 'off',
diff --git a/packages/eslint-config-airbnb-base/rules/errors.js b/packages/eslint-config-airbnb-base/rules/errors.js
index e4cd542683..15b6130a20 100644
--- a/packages/eslint-config-airbnb-base/rules/errors.js
+++ b/packages/eslint-config-airbnb-base/rules/errors.js
@@ -91,6 +91,11 @@ module.exports = {
     // disallow irregular whitespace outside of strings and comments
     'no-irregular-whitespace': 'error',
 
+    // Disallow Number Literals That Lose Precision
+    // https://eslint.org/docs/rules/no-loss-of-precision
+    // TODO: enable, semver-minor, once eslint v7.1 is required (which is major)
+    'no-loss-of-precision': 'off',
+
     // Disallow characters which are made with multiple code points in character class syntax
     // https://eslint.org/docs/rules/no-misleading-character-class
     'no-misleading-character-class': 'error',
@@ -131,13 +136,19 @@ module.exports = {
     // disallow negating the left operand of relational operators
     // https://eslint.org/docs/rules/no-unsafe-negation
     'no-unsafe-negation': 'error',
+
+    // Disallow useless backreferences in regular expressions
+    // https://eslint.org/docs/rules/no-useless-backreference
+    // TODO: enable, semver-minor, once eslint v7 is required (which is major)
+    'no-useless-backreference': 'off',
+
     // disallow negation of the left operand of an in expression
     // deprecated in favor of no-unsafe-negation
     'no-negated-in-lhs': 'off',
 
     // Disallow assignments that can lead to race conditions due to usage of await or yield
     // https://eslint.org/docs/rules/require-atomic-updates
-    // TODO: enable, semver-major
+    // note: not enabled because it is very buggy
     'require-atomic-updates': 'off',
 
     // disallow comparisons with the value NaN
diff --git a/packages/eslint-config-airbnb-base/rules/es6.js b/packages/eslint-config-airbnb-base/rules/es6.js
index bfdc6d29e4..02c616dad5 100644
--- a/packages/eslint-config-airbnb-base/rules/es6.js
+++ b/packages/eslint-config-airbnb-base/rules/es6.js
@@ -60,6 +60,16 @@ module.exports = {
     // https://eslint.org/docs/rules/no-new-symbol
     'no-new-symbol': 'error',
 
+    // Disallow specified names in exports
+    // https://eslint.org/docs/rules/no-restricted-exports
+    // TODO enable, semver-minor, once eslint v7 is required (which is major)
+    'no-restricted-exports': ['off', {
+      restrictedNamedExports: [
+        'default', // use `export default` to provide a default export
+        'then', // this will cause tons of confusion when your module is dynamically `import()`ed
+      ],
+    }],
+
     // disallow specific imports
     // https://eslint.org/docs/rules/no-restricted-imports
     'no-restricted-imports': ['off', {
diff --git a/packages/eslint-config-airbnb/package.json b/packages/eslint-config-airbnb/package.json
index 0e08d078fc..97703e59b0 100644
--- a/packages/eslint-config-airbnb/package.json
+++ b/packages/eslint-config-airbnb/package.json
@@ -63,7 +63,7 @@
     "babel-preset-airbnb": "^4.5.0",
     "babel-tape-runner": "^3.0.0",
     "eclint": "^2.8.1",
-    "eslint": "^5.16.0 || ^6.8.0",
+    "eslint": "^5.16.0 || ^6.8.0 || ^7.2.0",
     "eslint-find-rules": "^3.5.0",
     "eslint-plugin-import": "^2.21.2",
     "eslint-plugin-jsx-a11y": "^6.2.3",
@@ -75,7 +75,7 @@
     "tape": "^5.0.1"
   },
   "peerDependencies": {
-    "eslint": "^5.16.0 || ^6.8.0",
+    "eslint": "^5.16.0 || ^6.8.0 || ^7.2.0",
     "eslint-plugin-import": "^2.21.2",
     "eslint-plugin-jsx-a11y": "^6.2.3",
     "eslint-plugin-react": "^7.20.0",

From 78457af2c55cc62cf4379c190b7621a341814692 Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Wed, 10 Jun 2020 23:25:49 -0700
Subject: [PATCH 1431/1591] [eslint config] [base] v14.2.0

---
 packages/eslint-config-airbnb-base/CHANGELOG.md | 10 ++++++++++
 packages/eslint-config-airbnb-base/package.json |  2 +-
 2 files changed, 11 insertions(+), 1 deletion(-)

diff --git a/packages/eslint-config-airbnb-base/CHANGELOG.md b/packages/eslint-config-airbnb-base/CHANGELOG.md
index 3d31c2426b..2dd956f691 100644
--- a/packages/eslint-config-airbnb-base/CHANGELOG.md
+++ b/packages/eslint-config-airbnb-base/CHANGELOG.md
@@ -1,3 +1,13 @@
+14.2.0 / 2020-06-10
+==================
+ - [new] add `eslint` `v7`
+ - [minor] Disallow multiple empty lines (#2238)
+ - [minor] Fix typo in no-multiple-empty-lines rule (#2168)
+ - [patch] Include 'context' exception for `no-param-reassign` (#2230)
+ - [patch] Allow triple-slash (///) comments (#2197)
+ - [patch] Disable `prefer-object-spread` for `airbnb-base/legacy` (#2198)
+ - [deps] update `eslint-plugin-import`, `eslint-plugin-react`, `babel-preset-airbnb`, `eslint-find-rules`, `in-publish`, `tape`, `object.entries`
+
 14.1.0 / 2020-03-12
 ==================
  - [minor] add new disabled rules, update eslint
diff --git a/packages/eslint-config-airbnb-base/package.json b/packages/eslint-config-airbnb-base/package.json
index b691e1a3b2..cea08e9df9 100644
--- a/packages/eslint-config-airbnb-base/package.json
+++ b/packages/eslint-config-airbnb-base/package.json
@@ -1,6 +1,6 @@
 {
   "name": "eslint-config-airbnb-base",
-  "version": "14.1.0",
+  "version": "14.2.0",
   "description": "Airbnb's base JS ESLint config, following our styleguide",
   "main": "index.js",
   "scripts": {

From 562e3519b874d91b369c5c6fe8a94408a380758b Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Thu, 18 Jun 2020 11:53:53 -0700
Subject: [PATCH 1432/1591] [Dev Deps] update `markdownlint`,
 `markdownlint-cli`

---
 package.json | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/package.json b/package.json
index 36b4e19fab..e4fe0f3dea 100644
--- a/package.json
+++ b/package.json
@@ -40,7 +40,7 @@
   },
   "homepage": "https://github.com/airbnb/javascript",
   "devDependencies": {
-    "markdownlint": "^0.19.0",
-    "markdownlint-cli": "^0.21.0"
+    "markdownlint": "^0.20.3",
+    "markdownlint-cli": "^0.23.1"
   }
 }

From f550ded6dab8dac9d42f2dfa5f2ed9858f0fe045 Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Thu, 18 Jun 2020 12:03:46 -0700
Subject: [PATCH 1433/1591] [eslint config] [tests] fix for eslint 7

---
 packages/eslint-config-airbnb/test/test-react-order.js | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/packages/eslint-config-airbnb/test/test-react-order.js b/packages/eslint-config-airbnb/test/test-react-order.js
index 15dd8da2f6..d45cac8ae1 100644
--- a/packages/eslint-config-airbnb/test/test-react-order.js
+++ b/packages/eslint-config-airbnb/test/test-react-order.js
@@ -1,10 +1,10 @@
 import test from 'tape';
-import { CLIEngine } from 'eslint';
+import { CLIEngine, ESLint } from 'eslint';
 import eslintrc from '..';
 import reactRules from '../rules/react';
 import reactA11yRules from '../rules/react-a11y';
 
-const cli = new CLIEngine({
+const cli = new (CLIEngine || ESLint)({
   useEslintrc: false,
   baseConfig: eslintrc,
 
@@ -19,7 +19,7 @@ const cli = new CLIEngine({
 function lint(text) {
   // @see https://eslint.org/docs/developer-guide/nodejs-api.html#executeonfiles
   // @see https://eslint.org/docs/developer-guide/nodejs-api.html#executeontext
-  const linter = cli.executeOnText(text);
+  const linter = CLIEngine ? cli.executeOnText(text) : cli.lintText(text);
   return linter.results[0];
 }
 

From 197b50c07627863e5b3524504bf4f3240a0e2537 Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Thu, 18 Jun 2020 11:57:41 -0700
Subject: [PATCH 1434/1591] [eslint config] [deps] update
 `eslint-config-airbnb-base`, `eslint-plugin-jsx-a11y`

---
 packages/eslint-config-airbnb/package.json        | 6 +++---
 packages/eslint-config-airbnb/rules/react-a11y.js | 6 ++++++
 2 files changed, 9 insertions(+), 3 deletions(-)

diff --git a/packages/eslint-config-airbnb/package.json b/packages/eslint-config-airbnb/package.json
index 97703e59b0..e66cc67033 100644
--- a/packages/eslint-config-airbnb/package.json
+++ b/packages/eslint-config-airbnb/package.json
@@ -54,7 +54,7 @@
   },
   "homepage": "https://github.com/airbnb/javascript",
   "dependencies": {
-    "eslint-config-airbnb-base": "^14.1.0",
+    "eslint-config-airbnb-base": "^14.2.0",
     "object.assign": "^4.1.0",
     "object.entries": "^1.1.2"
   },
@@ -66,7 +66,7 @@
     "eslint": "^5.16.0 || ^6.8.0 || ^7.2.0",
     "eslint-find-rules": "^3.5.0",
     "eslint-plugin-import": "^2.21.2",
-    "eslint-plugin-jsx-a11y": "^6.2.3",
+    "eslint-plugin-jsx-a11y": "^6.3.0",
     "eslint-plugin-react": "^7.20.0",
     "eslint-plugin-react-hooks": "^4 || ^3 || ^2.3.0 || ^1.7.0",
     "in-publish": "^2.0.1",
@@ -77,7 +77,7 @@
   "peerDependencies": {
     "eslint": "^5.16.0 || ^6.8.0 || ^7.2.0",
     "eslint-plugin-import": "^2.21.2",
-    "eslint-plugin-jsx-a11y": "^6.2.3",
+    "eslint-plugin-jsx-a11y": "^6.3.0",
     "eslint-plugin-react": "^7.20.0",
     "eslint-plugin-react-hooks": "^4 || ^3 || ^2.3.0 || ^1.7.0"
   },
diff --git a/packages/eslint-config-airbnb/rules/react-a11y.js b/packages/eslint-config-airbnb/rules/react-a11y.js
index 69cf63b01f..85485b03bb 100644
--- a/packages/eslint-config-airbnb/rules/react-a11y.js
+++ b/packages/eslint-config-airbnb/rules/react-a11y.js
@@ -236,5 +236,11 @@ module.exports = {
       specialLink: ['to'],
       aspects: ['noHref', 'invalidHref', 'preferButton'],
     }],
+
+    // Ensure the autocomplete attribute is correct and suitable for the form field it is used with
+    // https://github.com/jsx-eslint/eslint-plugin-jsx-a11y/blob/29c68596b15c4ff0a40daae6d4a2670e36e37d35/docs/rules/autocomplete-valid.md
+    'jsx-a11y/autocomplete-valid': ['off', {
+      inputComponents: [],
+    }],
   },
 };

From 54955410ee53fd82e6caa5879ccd0c413640706a Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Thu, 18 Jun 2020 13:11:38 -0700
Subject: [PATCH 1435/1591] [eslint config] v18.2.0

---
 packages/eslint-config-airbnb/CHANGELOG.md | 11 +++++++++++
 packages/eslint-config-airbnb/package.json |  2 +-
 2 files changed, 12 insertions(+), 1 deletion(-)

diff --git a/packages/eslint-config-airbnb/CHANGELOG.md b/packages/eslint-config-airbnb/CHANGELOG.md
index 4bb3083e8b..11595f01a6 100644
--- a/packages/eslint-config-airbnb/CHANGELOG.md
+++ b/packages/eslint-config-airbnb/CHANGELOG.md
@@ -1,3 +1,14 @@
+18.2.0 / 2020-06-18
+==================
+ - [new] add `eslint` `v7` (#2240)
+ - [minor] Allow using `eslint-plugin-react-hooks` v3 and v4 (#2235, #2207)
+ - [minor] Fix typo in no-multiple-empty-lines rule (#2168)
+ - [patch] set `explicitSpread` to ignore for `react/jsx-props-no-spreading` (#2237)
+ - [patch] relax `eslint-plugin-react-hooks` down to v2.3, due to a controversial change in v2.5
+ - [readme] fix typo (#2194)
+ - [deps] update `eslint-config-airbnb-base`, `eslint-plugin-jsx-a11y`, `eslint-plugin-import`, `eslint-plugin-react`, `babel-preset-airbnb`, `eslint-find-rules`, `in-publish`, `tape`, `object.entries`
+ - [tests] fix for eslint 7
+
 18.1.0 / 2020-03-12
 ==================
  - [minor] Support eslint-plugin-react-hooks@2 (#2090)
diff --git a/packages/eslint-config-airbnb/package.json b/packages/eslint-config-airbnb/package.json
index e66cc67033..2b4be69fdb 100644
--- a/packages/eslint-config-airbnb/package.json
+++ b/packages/eslint-config-airbnb/package.json
@@ -1,6 +1,6 @@
 {
   "name": "eslint-config-airbnb",
-  "version": "18.1.0",
+  "version": "18.2.0",
   "description": "Airbnb's ESLint config, following our styleguide",
   "main": "index.js",
   "scripts": {

From 5124de23da0190b686850c9582e5a0960a607ae6 Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Sat, 27 Jun 2020 13:22:33 -0700
Subject: [PATCH 1436/1591] [eslint config] [base] add new rules from v7.3

---
 packages/eslint-config-airbnb-base/rules/errors.js | 12 ++++++++++++
 1 file changed, 12 insertions(+)

diff --git a/packages/eslint-config-airbnb-base/rules/errors.js b/packages/eslint-config-airbnb-base/rules/errors.js
index 15b6130a20..fa54905ef8 100644
--- a/packages/eslint-config-airbnb-base/rules/errors.js
+++ b/packages/eslint-config-airbnb-base/rules/errors.js
@@ -103,6 +103,11 @@ module.exports = {
     // disallow the use of object properties of the global object (Math and JSON) as functions
     'no-obj-calls': 'error',
 
+    // Disallow returning values from Promise executor functions
+    // https://eslint.org/docs/rules/no-promise-executor-return
+    // TODO: enable, semver-minor, once eslint v7.3 is required (which is major)
+    'no-promise-executor-return': 'off',
+
     // disallow use of Object.prototypes builtins directly
     // https://eslint.org/docs/rules/no-prototype-builtins
     'no-prototype-builtins': 'error',
@@ -129,6 +134,13 @@ module.exports = {
     // disallow unreachable statements after a return, throw, continue, or break statement
     'no-unreachable': 'error',
 
+    // Disallow loops with a body that allows only one iteration
+    // https://eslint.org/docs/rules/no-unreachable-loop
+    // TODO: enable, semver-minor, once eslint v7.3 is required (which is major)
+    'no-unreachable-loop': ['off', {
+      ignore: [], // WhileStatement, DoWhileStatement, ForStatement, ForInStatement, ForOfStatement
+    }],
+
     // disallow return/throw/break/continue inside finally blocks
     // https://eslint.org/docs/rules/no-unsafe-finally
     'no-unsafe-finally': 'error',

From c5bee75b1b358a3749f1a6d38ee6fad73de28e29 Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Mon, 22 Jun 2020 22:55:52 -0700
Subject: [PATCH 1437/1591] [eslint config] [*] [deps] update
 `eslint-plugin-import`, use valid `import/no-cycle` `maxDepth` option

---
 packages/eslint-config-airbnb-base/package.json     | 4 ++--
 packages/eslint-config-airbnb-base/rules/imports.js | 2 +-
 packages/eslint-config-airbnb/package.json          | 4 ++--
 3 files changed, 5 insertions(+), 5 deletions(-)

diff --git a/packages/eslint-config-airbnb-base/package.json b/packages/eslint-config-airbnb-base/package.json
index cea08e9df9..146b7d5035 100644
--- a/packages/eslint-config-airbnb-base/package.json
+++ b/packages/eslint-config-airbnb-base/package.json
@@ -59,14 +59,14 @@
     "eclint": "^2.8.1",
     "eslint": "^5.16.0 || ^6.8.0 || ^7.2.0",
     "eslint-find-rules": "^3.5.0",
-    "eslint-plugin-import": "^2.21.2",
+    "eslint-plugin-import": "^2.22.0",
     "in-publish": "^2.0.1",
     "safe-publish-latest": "^1.1.4",
     "tape": "^5.0.1"
   },
   "peerDependencies": {
     "eslint": "^5.16.0 || ^6.8.0 || ^7.2.0",
-    "eslint-plugin-import": "^2.21.2"
+    "eslint-plugin-import": "^2.22.0"
   },
   "engines": {
     "node": ">= 6"
diff --git a/packages/eslint-config-airbnb-base/rules/imports.js b/packages/eslint-config-airbnb-base/rules/imports.js
index b88ace540f..95568d6103 100644
--- a/packages/eslint-config-airbnb-base/rules/imports.js
+++ b/packages/eslint-config-airbnb-base/rules/imports.js
@@ -233,7 +233,7 @@ module.exports = {
 
     // Forbid cyclical dependencies between modules
     // https://github.com/benmosher/eslint-plugin-import/blob/d81f48a2506182738409805f5272eff4d77c9348/docs/rules/no-cycle.md
-    'import/no-cycle': ['error', { maxDepth: Infinity }],
+    'import/no-cycle': ['error', { maxDepth: '∞' }],
 
     // Ensures that there are no useless path segments
     // https://github.com/benmosher/eslint-plugin-import/blob/ebafcbf59ec9f653b2ac2a0156ca3bcba0a7cf57/docs/rules/no-useless-path-segments.md
diff --git a/packages/eslint-config-airbnb/package.json b/packages/eslint-config-airbnb/package.json
index 2b4be69fdb..02c702ca76 100644
--- a/packages/eslint-config-airbnb/package.json
+++ b/packages/eslint-config-airbnb/package.json
@@ -65,7 +65,7 @@
     "eclint": "^2.8.1",
     "eslint": "^5.16.0 || ^6.8.0 || ^7.2.0",
     "eslint-find-rules": "^3.5.0",
-    "eslint-plugin-import": "^2.21.2",
+    "eslint-plugin-import": "^2.22.0",
     "eslint-plugin-jsx-a11y": "^6.3.0",
     "eslint-plugin-react": "^7.20.0",
     "eslint-plugin-react-hooks": "^4 || ^3 || ^2.3.0 || ^1.7.0",
@@ -76,7 +76,7 @@
   },
   "peerDependencies": {
     "eslint": "^5.16.0 || ^6.8.0 || ^7.2.0",
-    "eslint-plugin-import": "^2.21.2",
+    "eslint-plugin-import": "^2.22.0",
     "eslint-plugin-jsx-a11y": "^6.3.0",
     "eslint-plugin-react": "^7.20.0",
     "eslint-plugin-react-hooks": "^4 || ^3 || ^2.3.0 || ^1.7.0"

From 3dcc59112308211b6ac8478a4ad997ed3f17d9b1 Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Wed, 5 Aug 2020 22:04:10 -0700
Subject: [PATCH 1438/1591] [eslint config] [base] add `id-denylist` rule

---
 packages/eslint-config-airbnb-base/rules/style.js | 5 +++++
 1 file changed, 5 insertions(+)

diff --git a/packages/eslint-config-airbnb-base/rules/style.js b/packages/eslint-config-airbnb-base/rules/style.js
index 05f687171e..8403ebb75b 100644
--- a/packages/eslint-config-airbnb-base/rules/style.js
+++ b/packages/eslint-config-airbnb-base/rules/style.js
@@ -107,8 +107,13 @@ module.exports = {
 
     // Blacklist certain identifiers to prevent them being used
     // https://eslint.org/docs/rules/id-blacklist
+    // TODO: semver-major, remove once eslint v7.4+ is required
     'id-blacklist': 'off',
 
+    // disallow specified identifiers
+    // https://eslint.org/docs/rules/id-denylist
+    'id-denylist': 'off',
+
     // this option enforces minimum and maximum identifier lengths
     // (variable names, property names etc.)
     'id-length': 'off',

From 973384be1b4ec2c58c5d9ba113a54a10cb757b96 Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Wed, 5 Aug 2020 22:06:20 -0700
Subject: [PATCH 1439/1591] [eslint config] [*] [dev deps] update
 `@babel/runtime`, `eslint-find-rules`, `eslint-plugin-jsx-a11y`,
 `eslint-plugin-react`

---
 packages/eslint-config-airbnb-base/package.json | 4 ++--
 packages/eslint-config-airbnb/package.json      | 8 ++++----
 2 files changed, 6 insertions(+), 6 deletions(-)

diff --git a/packages/eslint-config-airbnb-base/package.json b/packages/eslint-config-airbnb-base/package.json
index 146b7d5035..7bb31343e5 100644
--- a/packages/eslint-config-airbnb-base/package.json
+++ b/packages/eslint-config-airbnb-base/package.json
@@ -53,12 +53,12 @@
   },
   "homepage": "https://github.com/airbnb/javascript",
   "devDependencies": {
-    "@babel/runtime": "^7.8.7",
+    "@babel/runtime": "^7.11.2",
     "babel-preset-airbnb": "^4.5.0",
     "babel-tape-runner": "^3.0.0",
     "eclint": "^2.8.1",
     "eslint": "^5.16.0 || ^6.8.0 || ^7.2.0",
-    "eslint-find-rules": "^3.5.0",
+    "eslint-find-rules": "^3.6.0",
     "eslint-plugin-import": "^2.22.0",
     "in-publish": "^2.0.1",
     "safe-publish-latest": "^1.1.4",
diff --git a/packages/eslint-config-airbnb/package.json b/packages/eslint-config-airbnb/package.json
index 02c702ca76..105b3811a6 100644
--- a/packages/eslint-config-airbnb/package.json
+++ b/packages/eslint-config-airbnb/package.json
@@ -59,15 +59,15 @@
     "object.entries": "^1.1.2"
   },
   "devDependencies": {
-    "@babel/runtime": "^7.8.7",
+    "@babel/runtime": "^7.11.2",
     "babel-preset-airbnb": "^4.5.0",
     "babel-tape-runner": "^3.0.0",
     "eclint": "^2.8.1",
     "eslint": "^5.16.0 || ^6.8.0 || ^7.2.0",
-    "eslint-find-rules": "^3.5.0",
+    "eslint-find-rules": "^3.6.0",
     "eslint-plugin-import": "^2.22.0",
-    "eslint-plugin-jsx-a11y": "^6.3.0",
-    "eslint-plugin-react": "^7.20.0",
+    "eslint-plugin-jsx-a11y": "^6.3.1",
+    "eslint-plugin-react": "^7.20.5",
     "eslint-plugin-react-hooks": "^4 || ^3 || ^2.3.0 || ^1.7.0",
     "in-publish": "^2.0.1",
     "react": ">= 0.13.0",

From 1dc71d38395633f9f9099614765bd4361c9a9c64 Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Mon, 3 Aug 2020 09:36:24 -0700
Subject: [PATCH 1440/1591] [guide] [react] add missing PascalCase guidance for
 prop names

---
 react/README.md | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/react/README.md b/react/README.md
index 99518e5a75..d964d17a30 100644
--- a/react/README.md
+++ b/react/README.md
@@ -267,7 +267,7 @@ This style guide is mostly based on the standards that are currently prevalent i
 
 ## Props
 
-  - Always use camelCase for prop names.
+  - Always use camelCase for prop names, or PascalCase if the prop value is a React component.
 
     ```jsx
     // bad
@@ -280,6 +280,7 @@ This style guide is mostly based on the standards that are currently prevalent i
     <Foo
       userName="hello"
       phoneNumber={12345678}
+      Component={SomeComponent}
     />
     ```
 

From a24dc34a4a2748c99006a48e997aa0a06b1d4d94 Mon Sep 17 00:00:00 2001
From: Akshath Sivaprasad <akshath@berkeley.edu>
Date: Wed, 5 Aug 2020 21:38:20 -0700
Subject: [PATCH 1441/1591] [guide] [react] Add examples for formatting
 multiline conditional components

---
 react/README.md | 21 +++++++++++++++++++++
 1 file changed, 21 insertions(+)

diff --git a/react/README.md b/react/README.md
index d964d17a30..4811ddaf70 100644
--- a/react/README.md
+++ b/react/README.md
@@ -214,6 +214,27 @@ This style guide is mostly based on the standards that are currently prevalent i
 
     // good
     {showButton && <Button />}
+
+    // good
+    {someReallyLongConditional
+      && anotherLongConditional
+      && (
+        <Foo
+          superLongParam="bar"
+          anotherSuperLongParam="baz"
+        />
+      )
+    }
+
+    // good
+    {someConditional ? (
+      <Foo />
+    ) : (
+      <Foo
+        superLongParam="bar"
+        anotherSuperLongParam="baz"
+      />
+    )}
     ```
 
 ## Quotes

From 6006d6d2dfe0a47fdd18acd6f2a9e207ef0cc8f8 Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Thu, 27 Aug 2020 14:29:09 -0700
Subject: [PATCH 1442/1591] [guide] fix dead es-discourse link

Fixes #2274.
---
 README.md | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/README.md b/README.md
index 57ebc57624..dfb890fd98 100644
--- a/README.md
+++ b/README.md
@@ -1859,7 +1859,7 @@ Other Style Guides
 ## Hoisting
 
   <a name="hoisting--about"></a><a name="14.1"></a>
-  - [14.1](#hoisting--about) `var` declarations get hoisted to the top of their closest enclosing function scope, their assignment does not. `const` and `let` declarations are blessed with a new concept called [Temporal Dead Zones (TDZ)](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/let#Temporal_dead_zone). It’s important to know why [typeof is no longer safe](http://es-discourse.com/t/why-typeof-is-no-longer-safe/15).
+  - [14.1](#hoisting--about) `var` declarations get hoisted to the top of their closest enclosing function scope, their assignment does not. `const` and `let` declarations are blessed with a new concept called [Temporal Dead Zones (TDZ)](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/let#Temporal_dead_zone). It’s important to know why [typeof is no longer safe](https://web.archive.org/web/20200121061528/http://es-discourse.com/t/why-typeof-is-no-longer-safe/15).
 
     ```javascript
     // we know this wouldn’t work (assuming there

From 337f60706fcaeb4e897e8fe38f8af39e8ea410b9 Mon Sep 17 00:00:00 2001
From: Android Dev Notes <awesomedevnotes@gmail.com>
Date: Sun, 6 Sep 2020 02:02:14 +0530
Subject: [PATCH 1443/1591] [guide] Fix grammatical errors

---
 README.md | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/README.md b/README.md
index dfb890fd98..5820a3d3d1 100644
--- a/README.md
+++ b/README.md
@@ -1662,7 +1662,7 @@ Other Style Guides
   <a name="variables--const-let-group"></a><a name="13.3"></a>
   - [13.3](#variables--const-let-group) Group all your `const`s and then group all your `let`s.
 
-    > Why? This is helpful when later on you might need to assign a variable depending on one of the previous assigned variables.
+    > Why? This is helpful when later on you might need to assign a variable depending on one of the previously assigned variables.
 
     ```javascript
     // bad

From 5ebfe3e5b8b72f301228cc1718685d1db9ae5f49 Mon Sep 17 00:00:00 2001
From: Pirasis <1pete@users.noreply.github.com>
Date: Tue, 6 Oct 2020 21:36:29 +0700
Subject: [PATCH 1444/1591] [guide] add eslint rule reference for
 `default-param-last`

---
 README.md | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/README.md b/README.md
index 5820a3d3d1..cbd712db68 100644
--- a/README.md
+++ b/README.md
@@ -782,7 +782,7 @@ Other Style Guides
     ```
 
   <a name="functions--defaults-last"></a><a name="7.9"></a>
-  - [7.9](#functions--defaults-last) Always put default parameters last.
+  - [7.9](#functions--defaults-last) Always put default parameters last. eslint: [`default-param-last`](https://eslint.org/docs/rules/default-param-last)
 
     ```javascript
     // bad

From 82170f91272bcda42556c91cb40056b309b999c7 Mon Sep 17 00:00:00 2001
From: Pirasis <1pete@users.noreply.github.com>
Date: Sun, 11 Oct 2020 21:28:52 +0700
Subject: [PATCH 1445/1591] [guide] add eslint rule reference for
 `prefer-object-spread`

---
 README.md | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/README.md b/README.md
index cbd712db68..6a0e844b0a 100644
--- a/README.md
+++ b/README.md
@@ -306,7 +306,7 @@ Other Style Guides
     ```
 
   <a name="objects--rest-spread"></a>
-  - [3.8](#objects--rest-spread) Prefer the object spread operator over [`Object.assign`](https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Object/assign) to shallow-copy objects. Use the object rest operator to get a new object with certain properties omitted.
+  - [3.8](#objects--rest-spread) Prefer the object spread operator over [`Object.assign`](https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Object/assign) to shallow-copy objects. Use the object rest operator to get a new object with certain properties omitted. eslint: [`prefer-object-spread`](https://eslint.org/docs/rules/prefer-object-spread)
 
     ```javascript
     // very bad

From aa43bb23987a14baaa795cf795540a3f2eb41872 Mon Sep 17 00:00:00 2001
From: Daniel Paz <42693974+danielpaz6@users.noreply.github.com>
Date: Wed, 14 Oct 2020 18:48:40 +0300
Subject: [PATCH 1446/1591] [guide] add explanation about why to use radix when
 using parseInt

I added an explanation at [22.3](https://github.com/airbnb/javascript/blob/master/README.md#coercion--numbers) why to use radix once parseInt, this explanation has been taken from [Mozilla's docs](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/parseInt#Octal_interpretations_with_no_radix).

I think it's not clear without an explanation since people can think that it's obvious that string will be parsed to 10 base number, but it's not always the case.
---
 README.md | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/README.md b/README.md
index 6a0e844b0a..3c783eda89 100644
--- a/README.md
+++ b/README.md
@@ -3166,6 +3166,8 @@ Other Style Guides
   <a name="coercion--numbers"></a><a name="21.3"></a>
   - [22.3](#coercion--numbers) Numbers: Use `Number` for type casting and `parseInt` always with a radix for parsing strings. eslint: [`radix`](https://eslint.org/docs/rules/radix) [`no-new-wrappers`](https://eslint.org/docs/rules/no-new-wrappers)
 
+    > Why? The `parseInt` function produces an integer value dictated by interpretation of the contents of the string argument according to the specified radix. Leading whitespace in string is ignored. If radix is `undefined` or `0`, it is assumed to be `10` except when the number begins with the character pairs `0x` or `0X`, in which case a radix of 16 is assumed. This differs from ECMAScript 3, which merely discouraged (but allowed) octal interpretation. Many implementations have not adopted this behavior as of 2013. And, because older browsers must be supported, always specify a radix.
+
     ```javascript
     const inputValue = '4';
 

From ee2f22a10c0b82a21eaa7743905712b6cb145fc2 Mon Sep 17 00:00:00 2001
From: Daniel Paz <42693974+danielpaz6@users.noreply.github.com>
Date: Fri, 16 Oct 2020 14:02:43 +0300
Subject: [PATCH 1447/1591] [guide] Better link reference to Drupal's linter

This link was taken from their Code standard page: https://www.drupal.org/docs/develop/standards/javascript/eslint-settings

The previous link wasn't very informative and required a download process in order to check their standards.
---
 README.md | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/README.md b/README.md
index 3c783eda89..35965be830 100644
--- a/README.md
+++ b/README.md
@@ -3860,7 +3860,7 @@ Other Style Guides
   - **DailyMotion**: [dailymotion/javascript](https://github.com/dailymotion/javascript)
   - **DoSomething**: [DoSomething/eslint-config](https://github.com/DoSomething/eslint-config)
   - **Digitpaint** [digitpaint/javascript](https://github.com/digitpaint/javascript)
-  - **Drupal**: [www.drupal.org](https://www.drupal.org/project/drupal)
+  - **Drupal**: [www.drupal.org](https://git.drupalcode.org/project/drupal/blob/8.6.x/core/.eslintrc.json)
   - **Ecosia**: [ecosia/javascript](https://github.com/ecosia/javascript)
   - **Evernote**: [evernote/javascript-style-guide](https://github.com/evernote/javascript-style-guide)
   - **Evolution Gaming**: [evolution-gaming/javascript](https://github.com/evolution-gaming/javascript)

From 2c5c88d0487db3024e8a20bb20f46933a03dd8aa Mon Sep 17 00:00:00 2001
From: Michael Flores <mike@michaelflores.io>
Date: Wed, 21 Oct 2020 23:10:31 -0500
Subject: [PATCH 1448/1591] [guide] Update reason for preferring object
 destructuring

Fixes #2293

The reason for preferring object destructuring is quite narrow in scope. While this guide isn't intended to provide every possible reason for every preference, it perhaps should aim to provide a succinct and compelling reason. The current reasoning could be improved to meet this standard, so I'm proposing adding some additional information to clarify the benefits of what is an often controversial rule (controversial only because its introduction can require many changes in a mature codebase and has no auto fix available).
---
 README.md | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/README.md b/README.md
index 35965be830..987854664e 100644
--- a/README.md
+++ b/README.md
@@ -497,7 +497,7 @@ Other Style Guides
   <a name="destructuring--object"></a><a name="5.1"></a>
   - [5.1](#destructuring--object) Use object destructuring when accessing and using multiple properties of an object. eslint: [`prefer-destructuring`](https://eslint.org/docs/rules/prefer-destructuring)
 
-    > Why? Destructuring saves you from creating temporary references for those properties.
+    > Why? Destructuring saves you from creating temporary references for those properties, and from repetitive access of the object. Repeating object access creates more repetitive code, requires more reading, and creates more opportunities for mistakes. Destructuring objects also provides a single site of definition of the object structure that is used in the block, rather than requiring reading the entire block to determine what is used.
 
     ```javascript
     // bad

From b30b0e4d917bf74d90cc39c4d74237957fe7b603 Mon Sep 17 00:00:00 2001
From: Samuel Scheiderich <samsch@users.noreply.github.com>
Date: Sat, 24 Oct 2020 16:30:10 -0400
Subject: [PATCH 1449/1591] [eslint-config] [base] `no-restricted-globals`: add
 better messages

---
 .../eslint-config-airbnb-base/rules/variables.js   | 14 +++++++++++++-
 1 file changed, 13 insertions(+), 1 deletion(-)

diff --git a/packages/eslint-config-airbnb-base/rules/variables.js b/packages/eslint-config-airbnb-base/rules/variables.js
index 701340ab56..6fb98bcfb6 100644
--- a/packages/eslint-config-airbnb-base/rules/variables.js
+++ b/packages/eslint-config-airbnb-base/rules/variables.js
@@ -16,7 +16,19 @@ module.exports = {
     'no-label-var': 'error',
 
     // disallow specific globals
-    'no-restricted-globals': ['error', 'isFinite', 'isNaN'].concat(confusingBrowserGlobals),
+    'no-restricted-globals': [
+      'error',
+      {
+        name: 'isFinite',
+        message:
+          'Use Number.isFinite instead https://github.com/airbnb/javascript#standard-library--isfinite',
+      },
+      {
+        name: 'isNaN',
+        message:
+          'Use Number.isNaN instead https://github.com/airbnb/javascript#standard-library--isnan',
+      },
+    ].concat(confusingBrowserGlobals),
 
     // disallow declaration of variables already declared in the outer scope
     'no-shadow': 'error',

From d3c7b84d9e513fc1388de28775574ed614ee33e6 Mon Sep 17 00:00:00 2001
From: alvyn le <alvyn279@gmail.com>
Date: Wed, 23 Sep 2020 01:30:35 -0400
Subject: [PATCH 1450/1591] [eslint config] [patch] Fixed `handle` and `on`
 ordering in `sort-comp` rule

- fixes #2116
---
 packages/eslint-config-airbnb/rules/react.js  |  1 +
 .../test/test-react-order.js                  | 47 ++++++++++++++++++-
 react/README.md                               |  3 +-
 3 files changed, 49 insertions(+), 2 deletions(-)

diff --git a/packages/eslint-config-airbnb/rules/react.js b/packages/eslint-config-airbnb/rules/react.js
index 84bbf6c162..4134ed5e11 100644
--- a/packages/eslint-config-airbnb/rules/react.js
+++ b/packages/eslint-config-airbnb/rules/react.js
@@ -244,6 +244,7 @@ module.exports = {
         'static-methods',
         'instance-variables',
         'lifecycle',
+        '/^handle.+$/',
         '/^on.+$/',
         'getters',
         'setters',
diff --git a/packages/eslint-config-airbnb/test/test-react-order.js b/packages/eslint-config-airbnb/test/test-react-order.js
index d45cac8ae1..a394fe1c3c 100644
--- a/packages/eslint-config-airbnb/test/test-react-order.js
+++ b/packages/eslint-config-airbnb/test/test-react-order.js
@@ -33,7 +33,7 @@ ${body}}
 `;
 }
 
-test('validate react prop order', (t) => {
+test('validate react methods order', (t) => {
   t.test('make sure our eslintrc has React and JSX linting dependencies', (t) => {
     t.plan(2);
     t.deepEqual(reactRules.plugins, ['react']);
@@ -44,6 +44,8 @@ test('validate react prop order', (t) => {
     t.plan(3);
     const result = lint(wrapComponent(`
   componentDidMount() {}
+  handleSubmit() {}
+  onButtonAClick() {}
   setFoo() {}
   getFoo() {}
   setBar() {}
@@ -88,4 +90,47 @@ test('validate react prop order', (t) => {
     t.ok(result.errorCount, 'fails');
     t.deepEqual(result.messages.map((msg) => msg.ruleId), ['react/sort-comp'], 'fails due to sort');
   });
+
+  t.test('order: when handler method with `handle` prefix after method with `on` prefix', (t) => {
+    t.plan(2);
+    const result = lint(wrapComponent(`
+  componentDidMount() {}
+  onButtonAClick() {}
+  handleSubmit() {}
+  setFoo() {}
+  getFoo() {}
+  render() { return <div />; }
+`));
+
+    t.ok(result.errorCount, 'fails');
+    t.deepEqual(result.messages.map((msg) => msg.ruleId), ['react/sort-comp'], 'fails due to sort');
+  });
+
+  t.test('order: when lifecycle methods after event handler methods', (t) => {
+    t.plan(2);
+    const result = lint(wrapComponent(`
+  handleSubmit() {}
+  componentDidMount() {}
+  setFoo() {}
+  getFoo() {}
+  render() { return <div />; }
+`));
+
+    t.ok(result.errorCount, 'fails');
+    t.deepEqual(result.messages.map((msg) => msg.ruleId), ['react/sort-comp'], 'fails due to sort');
+  });
+
+  t.test('order: when event handler methods after getters and setters', (t) => {
+    t.plan(2);
+    const result = lint(wrapComponent(`
+  componentDidMount() {}
+  setFoo() {}
+  getFoo() {}
+  handleSubmit() {}
+  render() { return <div />; }
+`));
+
+    t.ok(result.errorCount, 'fails');
+    t.deepEqual(result.messages.map((msg) => msg.ruleId), ['react/sort-comp'], 'fails due to sort');
+  });
 });
diff --git a/react/README.md b/react/README.md
index 4811ddaf70..e7679d26da 100644
--- a/react/README.md
+++ b/react/README.md
@@ -667,7 +667,8 @@ We don’t recommend using indexes for keys if the order of items may change.
   1. `componentWillUpdate`
   1. `componentDidUpdate`
   1. `componentWillUnmount`
-  1. *clickHandlers or eventHandlers* like `onClickSubmit()` or `onChangeDescription()`
+  1. *event handlers starting with 'handle'* like `handleSubmit()` or `handleChangeDescription()`
+  1. *event handlers starting with 'on'* like `onClickSubmit()` or `onChangeDescription()`
   1. *getter methods for `render`* like `getSelectReason()` or `getFooterContent()`
   1. *optional render methods* like `renderNavigation()` or `renderProfilePicture()`
   1. `render`

From 05c3bb0018fcd46a41fec07a1308075c7aaea197 Mon Sep 17 00:00:00 2001
From: Alex Mercier <pro.alexandre.mercier@gmail.com>
Date: Fri, 23 Oct 2020 13:30:37 +0100
Subject: [PATCH 1451/1591] [eslint config] [patch] Fix ignoreNonDOM typo in
 jsx-a11y/aria-role rule

This should be `ignoreNonDOM` not `ignoreNonDom` according to [documentation](https://github.com/jsx-eslint/eslint-plugin-jsx-a11y/blob/master/docs/rules/aria-role.md).
---
 packages/eslint-config-airbnb/rules/react-a11y.js | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/packages/eslint-config-airbnb/rules/react-a11y.js b/packages/eslint-config-airbnb/rules/react-a11y.js
index 85485b03bb..f48ebdbb4a 100644
--- a/packages/eslint-config-airbnb/rules/react-a11y.js
+++ b/packages/eslint-config-airbnb/rules/react-a11y.js
@@ -17,7 +17,7 @@ module.exports = {
 
     // Require ARIA roles to be valid and non-abstract
     // https://github.com/evcohen/eslint-plugin-jsx-a11y/blob/master/docs/rules/aria-role.md
-    'jsx-a11y/aria-role': ['error', { ignoreNonDom: false }],
+    'jsx-a11y/aria-role': ['error', { ignoreNonDOM: false }],
 
     // Enforce all aria-* props are valid.
     // https://github.com/evcohen/eslint-plugin-jsx-a11y/blob/master/docs/rules/aria-props.md

From 8996aa7c5369baef60c5c8c07df4b6eaae46279e Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Ky=E2=84=93e=20Hensel?= <k-yle@users.noreply.github.com>
Date: Tue, 27 Oct 2020 08:54:41 +1300
Subject: [PATCH 1452/1591] [eslint config] [patch] remove deprecated
 `jsx-a11y/accessible-emoji` rule

---
 packages/eslint-config-airbnb/rules/react-a11y.js | 4 ----
 1 file changed, 4 deletions(-)

diff --git a/packages/eslint-config-airbnb/rules/react-a11y.js b/packages/eslint-config-airbnb/rules/react-a11y.js
index f48ebdbb4a..26a9256975 100644
--- a/packages/eslint-config-airbnb/rules/react-a11y.js
+++ b/packages/eslint-config-airbnb/rules/react-a11y.js
@@ -178,10 +178,6 @@ module.exports = {
       ]
     }],
 
-    // ensure emoji are accessible
-    // https://github.com/evcohen/eslint-plugin-jsx-a11y/blob/master/docs/rules/accessible-emoji.md
-    'jsx-a11y/accessible-emoji': 'error',
-
     // elements with aria-activedescendant must be tabbable
     // https://github.com/evcohen/eslint-plugin-jsx-a11y/blob/master/docs/rules/aria-activedescendant-has-tabindex.md
     'jsx-a11y/aria-activedescendant-has-tabindex': 'error',

From 25b64d7f46a1efc85792dc250d0d1a2eb705a0d8 Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Fri, 6 Nov 2020 09:59:46 -0800
Subject: [PATCH 1453/1591] [dev deps] update `markdownlint`,
 `markdownlint-cli`

---
 package.json | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/package.json b/package.json
index e4fe0f3dea..77adc2e32d 100644
--- a/package.json
+++ b/package.json
@@ -40,7 +40,7 @@
   },
   "homepage": "https://github.com/airbnb/javascript",
   "devDependencies": {
-    "markdownlint": "^0.20.3",
-    "markdownlint-cli": "^0.23.1"
+    "markdownlint": "^0.20.4",
+    "markdownlint-cli": "^0.23.2"
   }
 }

From f0492d59bdee973ad1362b290a75016dea279953 Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Fri, 6 Nov 2020 10:00:59 -0800
Subject: [PATCH 1454/1591] [eslint config] [*] [dev deps] update
 `@babel/runtime`, `eslint-find-rules`, `eslint-plugin-import`

---
 packages/eslint-config-airbnb-base/package.json | 8 ++++----
 packages/eslint-config-airbnb/package.json      | 8 ++++----
 2 files changed, 8 insertions(+), 8 deletions(-)

diff --git a/packages/eslint-config-airbnb-base/package.json b/packages/eslint-config-airbnb-base/package.json
index 7bb31343e5..c1055e457a 100644
--- a/packages/eslint-config-airbnb-base/package.json
+++ b/packages/eslint-config-airbnb-base/package.json
@@ -53,20 +53,20 @@
   },
   "homepage": "https://github.com/airbnb/javascript",
   "devDependencies": {
-    "@babel/runtime": "^7.11.2",
+    "@babel/runtime": "^7.12.5",
     "babel-preset-airbnb": "^4.5.0",
     "babel-tape-runner": "^3.0.0",
     "eclint": "^2.8.1",
     "eslint": "^5.16.0 || ^6.8.0 || ^7.2.0",
-    "eslint-find-rules": "^3.6.0",
-    "eslint-plugin-import": "^2.22.0",
+    "eslint-find-rules": "^3.6.1",
+    "eslint-plugin-import": "^2.22.1",
     "in-publish": "^2.0.1",
     "safe-publish-latest": "^1.1.4",
     "tape": "^5.0.1"
   },
   "peerDependencies": {
     "eslint": "^5.16.0 || ^6.8.0 || ^7.2.0",
-    "eslint-plugin-import": "^2.22.0"
+    "eslint-plugin-import": "^2.22.1"
   },
   "engines": {
     "node": ">= 6"
diff --git a/packages/eslint-config-airbnb/package.json b/packages/eslint-config-airbnb/package.json
index 105b3811a6..e6e6b293bb 100644
--- a/packages/eslint-config-airbnb/package.json
+++ b/packages/eslint-config-airbnb/package.json
@@ -59,13 +59,13 @@
     "object.entries": "^1.1.2"
   },
   "devDependencies": {
-    "@babel/runtime": "^7.11.2",
+    "@babel/runtime": "^7.12.5",
     "babel-preset-airbnb": "^4.5.0",
     "babel-tape-runner": "^3.0.0",
     "eclint": "^2.8.1",
     "eslint": "^5.16.0 || ^6.8.0 || ^7.2.0",
-    "eslint-find-rules": "^3.6.0",
-    "eslint-plugin-import": "^2.22.0",
+    "eslint-find-rules": "^3.6.1",
+    "eslint-plugin-import": "^2.22.1",
     "eslint-plugin-jsx-a11y": "^6.3.1",
     "eslint-plugin-react": "^7.20.5",
     "eslint-plugin-react-hooks": "^4 || ^3 || ^2.3.0 || ^1.7.0",
@@ -76,7 +76,7 @@
   },
   "peerDependencies": {
     "eslint": "^5.16.0 || ^6.8.0 || ^7.2.0",
-    "eslint-plugin-import": "^2.22.0",
+    "eslint-plugin-import": "^2.22.1",
     "eslint-plugin-jsx-a11y": "^6.3.0",
     "eslint-plugin-react": "^7.20.0",
     "eslint-plugin-react-hooks": "^4 || ^3 || ^2.3.0 || ^1.7.0"

From e149b0536659a464c34dad19276f9db3e6c9a16c Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Fri, 6 Nov 2020 10:03:46 -0800
Subject: [PATCH 1455/1591] [eslint config] [*] [deps] update
 `confusing-browser-globals`, `object.assign`

---
 packages/eslint-config-airbnb-base/package.json | 4 ++--
 packages/eslint-config-airbnb/package.json      | 2 +-
 2 files changed, 3 insertions(+), 3 deletions(-)

diff --git a/packages/eslint-config-airbnb-base/package.json b/packages/eslint-config-airbnb-base/package.json
index c1055e457a..cfc41fc77c 100644
--- a/packages/eslint-config-airbnb-base/package.json
+++ b/packages/eslint-config-airbnb-base/package.json
@@ -72,8 +72,8 @@
     "node": ">= 6"
   },
   "dependencies": {
-    "confusing-browser-globals": "^1.0.9",
-    "object.assign": "^4.1.0",
+    "confusing-browser-globals": "^1.0.10",
+    "object.assign": "^4.1.2",
     "object.entries": "^1.1.2"
   }
 }
diff --git a/packages/eslint-config-airbnb/package.json b/packages/eslint-config-airbnb/package.json
index e6e6b293bb..d85058c549 100644
--- a/packages/eslint-config-airbnb/package.json
+++ b/packages/eslint-config-airbnb/package.json
@@ -55,7 +55,7 @@
   "homepage": "https://github.com/airbnb/javascript",
   "dependencies": {
     "eslint-config-airbnb-base": "^14.2.0",
-    "object.assign": "^4.1.0",
+    "object.assign": "^4.1.2",
     "object.entries": "^1.1.2"
   },
   "devDependencies": {

From 36f23d7886e42aaa5530d2da0541b1f3faf8b4a6 Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Fri, 6 Nov 2020 10:10:00 -0800
Subject: [PATCH 1456/1591] [eslint config] [base] v14.2.1

---
 packages/eslint-config-airbnb-base/CHANGELOG.md | 8 ++++++++
 packages/eslint-config-airbnb-base/package.json | 2 +-
 2 files changed, 9 insertions(+), 1 deletion(-)

diff --git a/packages/eslint-config-airbnb-base/CHANGELOG.md b/packages/eslint-config-airbnb-base/CHANGELOG.md
index 2dd956f691..5f8dddf100 100644
--- a/packages/eslint-config-airbnb-base/CHANGELOG.md
+++ b/packages/eslint-config-airbnb-base/CHANGELOG.md
@@ -1,3 +1,11 @@
+14.2.1 / 2020-11-06
+==================
+ - [base] `no-restricted-globals`: add better messages (#2320)
+ - [base] add new core eslint rules, set to off
+ - [deps] update `confusing-browser-globals`, `object.assign`
+ - [deps] update `eslint-plugin-import`, use valid `import/no-cycle` `maxDepth` option (#2250, #2249)
+ - [dev deps] update `@babel/runtime`, `eslint-find-rules`, `eslint-plugin-import`
+
 14.2.0 / 2020-06-10
 ==================
  - [new] add `eslint` `v7`
diff --git a/packages/eslint-config-airbnb-base/package.json b/packages/eslint-config-airbnb-base/package.json
index cfc41fc77c..548e717698 100644
--- a/packages/eslint-config-airbnb-base/package.json
+++ b/packages/eslint-config-airbnb-base/package.json
@@ -1,6 +1,6 @@
 {
   "name": "eslint-config-airbnb-base",
-  "version": "14.2.0",
+  "version": "14.2.1",
   "description": "Airbnb's base JS ESLint config, following our styleguide",
   "main": "index.js",
   "scripts": {

From b7015dd0b3811e71b9423342124d5cf135f78785 Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Fri, 6 Nov 2020 14:12:51 -0800
Subject: [PATCH 1457/1591] [eslint config] [deps] update
 `eslint-config-airbnb-base`

---
 packages/eslint-config-airbnb/package.json | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/packages/eslint-config-airbnb/package.json b/packages/eslint-config-airbnb/package.json
index d85058c549..17fb7b3bf3 100644
--- a/packages/eslint-config-airbnb/package.json
+++ b/packages/eslint-config-airbnb/package.json
@@ -54,7 +54,7 @@
   },
   "homepage": "https://github.com/airbnb/javascript",
   "dependencies": {
-    "eslint-config-airbnb-base": "^14.2.0",
+    "eslint-config-airbnb-base": "^14.2.1",
     "object.assign": "^4.1.2",
     "object.entries": "^1.1.2"
   },

From eee79a5455c93bb094d673cf194df5e6403d573e Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Fri, 6 Nov 2020 14:14:17 -0800
Subject: [PATCH 1458/1591] [eslint config] [deps] update
 `eslint-plugin-jsx-a11y`, `eslint-plugin-react`

---
 packages/eslint-config-airbnb/package.json | 8 ++++----
 1 file changed, 4 insertions(+), 4 deletions(-)

diff --git a/packages/eslint-config-airbnb/package.json b/packages/eslint-config-airbnb/package.json
index 17fb7b3bf3..e5e1aabb93 100644
--- a/packages/eslint-config-airbnb/package.json
+++ b/packages/eslint-config-airbnb/package.json
@@ -66,8 +66,8 @@
     "eslint": "^5.16.0 || ^6.8.0 || ^7.2.0",
     "eslint-find-rules": "^3.6.1",
     "eslint-plugin-import": "^2.22.1",
-    "eslint-plugin-jsx-a11y": "^6.3.1",
-    "eslint-plugin-react": "^7.20.5",
+    "eslint-plugin-jsx-a11y": "^6.4.1",
+    "eslint-plugin-react": "^7.21.5",
     "eslint-plugin-react-hooks": "^4 || ^3 || ^2.3.0 || ^1.7.0",
     "in-publish": "^2.0.1",
     "react": ">= 0.13.0",
@@ -77,8 +77,8 @@
   "peerDependencies": {
     "eslint": "^5.16.0 || ^6.8.0 || ^7.2.0",
     "eslint-plugin-import": "^2.22.1",
-    "eslint-plugin-jsx-a11y": "^6.3.0",
-    "eslint-plugin-react": "^7.20.0",
+    "eslint-plugin-jsx-a11y": "^6.4.1",
+    "eslint-plugin-react": "^7.21.5",
     "eslint-plugin-react-hooks": "^4 || ^3 || ^2.3.0 || ^1.7.0"
   },
   "engines": {

From e5de51e55f56a68891f1cb95fe234649c015e279 Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Fri, 6 Nov 2020 14:19:17 -0800
Subject: [PATCH 1459/1591] [eslint config] [patch] re-add
 `jsx-a11y/accessible-emoji`, but disabled

See #2322
---
 packages/eslint-config-airbnb/rules/react-a11y.js | 5 +++++
 1 file changed, 5 insertions(+)

diff --git a/packages/eslint-config-airbnb/rules/react-a11y.js b/packages/eslint-config-airbnb/rules/react-a11y.js
index 26a9256975..5898ca9eb3 100644
--- a/packages/eslint-config-airbnb/rules/react-a11y.js
+++ b/packages/eslint-config-airbnb/rules/react-a11y.js
@@ -178,6 +178,11 @@ module.exports = {
       ]
     }],
 
+    // ensure emoji are accessible
+    // https://github.com/evcohen/eslint-plugin-jsx-a11y/blob/master/docs/rules/accessible-emoji.md
+    // disabled; rule is deprecated
+    'jsx-a11y/accessible-emoji': 'off',
+
     // elements with aria-activedescendant must be tabbable
     // https://github.com/evcohen/eslint-plugin-jsx-a11y/blob/master/docs/rules/aria-activedescendant-has-tabindex.md
     'jsx-a11y/aria-activedescendant-has-tabindex': 'error',

From 37d48dbf6082bd8958fdc5db5df207bb1166d653 Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Fri, 6 Nov 2020 14:20:24 -0800
Subject: [PATCH 1460/1591] [eslint config] v18.2.1

---
 packages/eslint-config-airbnb/CHANGELOG.md | 9 +++++++++
 packages/eslint-config-airbnb/package.json | 2 +-
 2 files changed, 10 insertions(+), 1 deletion(-)

diff --git a/packages/eslint-config-airbnb/CHANGELOG.md b/packages/eslint-config-airbnb/CHANGELOG.md
index 11595f01a6..745b541d58 100644
--- a/packages/eslint-config-airbnb/CHANGELOG.md
+++ b/packages/eslint-config-airbnb/CHANGELOG.md
@@ -1,3 +1,12 @@
+18.2.1 / 2020-11-06
+==================
+ - [patch] remove deprecated `jsx-a11y/accessible-emoji` rule (#2322)
+ - [patch] Fix ignoreNonDOM typo in jsx-a11y/aria-role rule (#2318)
+ - [patch] Fixed `handle` and `on` ordering in `sort-comp` rule (#2287)
+ - [deps] update `eslint-plugin-jsx-a11y`, `eslint-plugin-react`
+ - [deps] update `eslint-config-airbnb-base`, `object.assign`
+ - [dev deps] update `@babel/runtime`, `eslint-find-rules`, `eslint-plugin-import`, `eslint-plugin-jsx-a11y`, `eslint-plugin-react`
+
 18.2.0 / 2020-06-18
 ==================
  - [new] add `eslint` `v7` (#2240)
diff --git a/packages/eslint-config-airbnb/package.json b/packages/eslint-config-airbnb/package.json
index e5e1aabb93..1f37f8fa05 100644
--- a/packages/eslint-config-airbnb/package.json
+++ b/packages/eslint-config-airbnb/package.json
@@ -1,6 +1,6 @@
 {
   "name": "eslint-config-airbnb",
-  "version": "18.2.0",
+  "version": "18.2.1",
   "description": "Airbnb's ESLint config, following our styleguide",
   "main": "index.js",
   "scripts": {

From f0df3a8680479ff0b897cd98a1eab6b156899214 Mon Sep 17 00:00:00 2001
From: Hugo Alliaume <kocal@live.fr>
Date: Sat, 7 Nov 2020 08:17:29 +0100
Subject: [PATCH 1461/1591] [eslint config] [base]
 `import/no-extraneous-dependencies`: Add .eslintrc.js to devDeps

Similar to #1168 and #1522.
---
 packages/eslint-config-airbnb-base/rules/imports.js | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/packages/eslint-config-airbnb-base/rules/imports.js b/packages/eslint-config-airbnb-base/rules/imports.js
index 95568d6103..ca91e9fc93 100644
--- a/packages/eslint-config-airbnb-base/rules/imports.js
+++ b/packages/eslint-config-airbnb-base/rules/imports.js
@@ -90,7 +90,8 @@ module.exports = {
         '**/Gruntfile{,.js}', // grunt config
         '**/protractor.conf.js', // protractor config
         '**/protractor.conf.*.js', // protractor config
-        '**/karma.conf.js' // karma config
+        '**/karma.conf.js', // karma config
+        '**/.eslintrc.js' // eslint config
       ],
       optionalDependencies: false,
     }],

From 5620bd5620b17184f57cd97ebf03b0efee3cc464 Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Sat, 21 Nov 2020 00:59:24 -0800
Subject: [PATCH 1462/1591] [eslint config] [base] add
 `no-nonoctal-decimal-escape` rule

---
 packages/eslint-config-airbnb-base/rules/best-practices.js | 5 +++++
 1 file changed, 5 insertions(+)

diff --git a/packages/eslint-config-airbnb-base/rules/best-practices.js b/packages/eslint-config-airbnb-base/rules/best-practices.js
index 8e1d991304..4c73b1f11a 100644
--- a/packages/eslint-config-airbnb-base/rules/best-practices.js
+++ b/packages/eslint-config-airbnb-base/rules/best-practices.js
@@ -182,6 +182,11 @@ module.exports = {
     // disallows creating new instances of String, Number, and Boolean
     'no-new-wrappers': 'error',
 
+    // Disallow \8 and \9 escape sequences in string literals
+    // https://eslint.org/docs/rules/no-nonoctal-decimal-escape
+    // todo: semver-major: enable when v7.14 is required
+    'no-nonoctal-decimal-escape': 'off',
+
     // disallow use of (old style) octal literals
     'no-octal': 'error',
 

From 1f786e154f6c32385607e1688370d7f2d053f88f Mon Sep 17 00:00:00 2001
From: Jeremy <jeremy.mullis@gmail.com>
Date: Wed, 11 Nov 2020 20:17:20 -0600
Subject: [PATCH 1463/1591] [eslint config] [base] [patch] fix spelling of
 "than"

you mean "than" not "then".
---
 packages/eslint-config-airbnb-base/rules/best-practices.js | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/packages/eslint-config-airbnb-base/rules/best-practices.js b/packages/eslint-config-airbnb-base/rules/best-practices.js
index 4c73b1f11a..e3420416ef 100644
--- a/packages/eslint-config-airbnb-base/rules/best-practices.js
+++ b/packages/eslint-config-airbnb-base/rules/best-practices.js
@@ -147,7 +147,7 @@ module.exports = {
     // disallow usage of __iterator__ property
     'no-iterator': 'error',
 
-    // disallow use of labels for anything other then loops and switches
+    // disallow use of labels for anything other than loops and switches
     'no-labels': ['error', { allowLoop: false, allowSwitch: false }],
 
     // disallow unnecessary nested blocks
@@ -217,7 +217,7 @@ module.exports = {
     // disallow usage of __proto__ property
     'no-proto': 'error',
 
-    // disallow declaring the same variable more then once
+    // disallow declaring the same variable more than once
     'no-redeclare': 'error',
 
     // disallow certain object properties

From 63098cbb6c05376dbefc9a91351f5727540c1ce1 Mon Sep 17 00:00:00 2001
From: Hollow Man <hollowman@hollowman.ml>
Date: Fri, 20 Nov 2020 22:49:57 +0800
Subject: [PATCH 1464/1591] [eslint config] [base] [patch] arthmetic ->
 arithmetic

---
 packages/eslint-config-airbnb-base/rules/style.js | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/packages/eslint-config-airbnb-base/rules/style.js b/packages/eslint-config-airbnb-base/rules/style.js
index 8403ebb75b..c988fe5f3a 100644
--- a/packages/eslint-config-airbnb-base/rules/style.js
+++ b/packages/eslint-config-airbnb-base/rules/style.js
@@ -293,7 +293,7 @@ module.exports = {
     // disallow un-paren'd mixes of different operators
     // https://eslint.org/docs/rules/no-mixed-operators
     'no-mixed-operators': ['error', {
-      // the list of arthmetic groups disallows mixing `%` and `**`
+      // the list of arithmetic groups disallows mixing `%` and `**`
       // with other arithmetic operators.
       groups: [
         ['%', '**'],

From 66cd156a489f2fb82aa55fd4d556ff1c0be9b4e4 Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Tue, 29 Dec 2020 21:32:08 -0800
Subject: [PATCH 1465/1591] [*] [dev deps] update `tape`

---
 packages/eslint-config-airbnb-base/package.json | 2 +-
 packages/eslint-config-airbnb/package.json      | 2 +-
 2 files changed, 2 insertions(+), 2 deletions(-)

diff --git a/packages/eslint-config-airbnb-base/package.json b/packages/eslint-config-airbnb-base/package.json
index 548e717698..22318cad12 100644
--- a/packages/eslint-config-airbnb-base/package.json
+++ b/packages/eslint-config-airbnb-base/package.json
@@ -62,7 +62,7 @@
     "eslint-plugin-import": "^2.22.1",
     "in-publish": "^2.0.1",
     "safe-publish-latest": "^1.1.4",
-    "tape": "^5.0.1"
+    "tape": "^5.1.0"
   },
   "peerDependencies": {
     "eslint": "^5.16.0 || ^6.8.0 || ^7.2.0",
diff --git a/packages/eslint-config-airbnb/package.json b/packages/eslint-config-airbnb/package.json
index 1f37f8fa05..9bb77ff939 100644
--- a/packages/eslint-config-airbnb/package.json
+++ b/packages/eslint-config-airbnb/package.json
@@ -72,7 +72,7 @@
     "in-publish": "^2.0.1",
     "react": ">= 0.13.0",
     "safe-publish-latest": "^1.1.4",
-    "tape": "^5.0.1"
+    "tape": "^5.1.0"
   },
   "peerDependencies": {
     "eslint": "^5.16.0 || ^6.8.0 || ^7.2.0",

From fb3214c9d650ed66d7e363e8b2eed0f07e514d32 Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Tue, 29 Dec 2020 21:32:29 -0800
Subject: [PATCH 1466/1591] [*] [deps] update `object.entries`

---
 packages/eslint-config-airbnb-base/package.json | 2 +-
 packages/eslint-config-airbnb/package.json      | 2 +-
 2 files changed, 2 insertions(+), 2 deletions(-)

diff --git a/packages/eslint-config-airbnb-base/package.json b/packages/eslint-config-airbnb-base/package.json
index 22318cad12..b86a415362 100644
--- a/packages/eslint-config-airbnb-base/package.json
+++ b/packages/eslint-config-airbnb-base/package.json
@@ -74,6 +74,6 @@
   "dependencies": {
     "confusing-browser-globals": "^1.0.10",
     "object.assign": "^4.1.2",
-    "object.entries": "^1.1.2"
+    "object.entries": "^1.1.3"
   }
 }
diff --git a/packages/eslint-config-airbnb/package.json b/packages/eslint-config-airbnb/package.json
index 9bb77ff939..30b2da1b03 100644
--- a/packages/eslint-config-airbnb/package.json
+++ b/packages/eslint-config-airbnb/package.json
@@ -56,7 +56,7 @@
   "dependencies": {
     "eslint-config-airbnb-base": "^14.2.1",
     "object.assign": "^4.1.2",
-    "object.entries": "^1.1.2"
+    "object.entries": "^1.1.3"
   },
   "devDependencies": {
     "@babel/runtime": "^7.12.5",

From b9ff0aee71a31ebc5ec7b022c8a9fab49a589d7e Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Tue, 29 Dec 2020 21:34:18 -0800
Subject: [PATCH 1467/1591] [eslint-config] [base] add disabled
 `no-unsafe-optional-chaining` rule

---
 packages/eslint-config-airbnb-base/rules/errors.js | 5 +++++
 1 file changed, 5 insertions(+)

diff --git a/packages/eslint-config-airbnb-base/rules/errors.js b/packages/eslint-config-airbnb-base/rules/errors.js
index fa54905ef8..71ebcdecc6 100644
--- a/packages/eslint-config-airbnb-base/rules/errors.js
+++ b/packages/eslint-config-airbnb-base/rules/errors.js
@@ -149,6 +149,11 @@ module.exports = {
     // https://eslint.org/docs/rules/no-unsafe-negation
     'no-unsafe-negation': 'error',
 
+    // disallow use of optional chaining in contexts where the undefined value is not allowed
+    // https://eslint.org/docs/rules/no-unsafe-optional-chaining
+    // TODO: enable, semver-minor, once eslint v7.15 is required (which is major)
+    'no-unsafe-optional-chaining': ['off', { disallowArithmeticOperators: true }],
+
     // Disallow useless backreferences in regular expressions
     // https://eslint.org/docs/rules/no-useless-backreference
     // TODO: enable, semver-minor, once eslint v7 is required (which is major)

From db8b6ceb33289b542e8aca192a6aefaf21c4a14c Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Tue, 29 Dec 2020 21:37:48 -0800
Subject: [PATCH 1468/1591] [eslint config] update `eslint-plugin-react`, add
 new rules, disabled

---
 packages/eslint-config-airbnb/package.json   | 4 ++--
 packages/eslint-config-airbnb/rules/react.js | 9 +++++++++
 2 files changed, 11 insertions(+), 2 deletions(-)

diff --git a/packages/eslint-config-airbnb/package.json b/packages/eslint-config-airbnb/package.json
index 30b2da1b03..f3a9057e5c 100644
--- a/packages/eslint-config-airbnb/package.json
+++ b/packages/eslint-config-airbnb/package.json
@@ -67,7 +67,7 @@
     "eslint-find-rules": "^3.6.1",
     "eslint-plugin-import": "^2.22.1",
     "eslint-plugin-jsx-a11y": "^6.4.1",
-    "eslint-plugin-react": "^7.21.5",
+    "eslint-plugin-react": "^7.22.0",
     "eslint-plugin-react-hooks": "^4 || ^3 || ^2.3.0 || ^1.7.0",
     "in-publish": "^2.0.1",
     "react": ">= 0.13.0",
@@ -78,7 +78,7 @@
     "eslint": "^5.16.0 || ^6.8.0 || ^7.2.0",
     "eslint-plugin-import": "^2.22.1",
     "eslint-plugin-jsx-a11y": "^6.4.1",
-    "eslint-plugin-react": "^7.21.5",
+    "eslint-plugin-react": "^7.22.0",
     "eslint-plugin-react-hooks": "^4 || ^3 || ^2.3.0 || ^1.7.0"
   },
   "engines": {
diff --git a/packages/eslint-config-airbnb/rules/react.js b/packages/eslint-config-airbnb/rules/react.js
index 4134ed5e11..24d9fffaa5 100644
--- a/packages/eslint-config-airbnb/rules/react.js
+++ b/packages/eslint-config-airbnb/rules/react.js
@@ -531,6 +531,15 @@ module.exports = {
       namedComponents: 'function-expression',
       unnamedComponents: 'function-expression',
     }],
+
+    // Enforce a new line after jsx elements and expressions
+    // https://github.com/yannickcr/eslint-plugin-react/blob/e2eaadae316f9506d163812a09424eb42698470a/docs/rules/jsx-newline.md
+    'react/jsx-newline': 'off',
+
+    // Prevent react contexts from taking non-stable values
+    // https://github.com/yannickcr/eslint-plugin-react/blob/e2eaadae316f9506d163812a09424eb42698470a/docs/rules/jsx-no-constructed-context-values.md
+    // TODO: enable, semver-minor
+    'react/jsx-no-constructed-context-values': 'off',
   },
 
   settings: {

From ea5ec0c5242a4b987eb4a2861d65298450fb05d0 Mon Sep 17 00:00:00 2001
From: marsonya <akhil.marsonya27@gmail.com>
Date: Wed, 30 Dec 2020 10:44:32 +0530
Subject: [PATCH 1469/1591] [readme] removed dead links - 404 not found

---
 README.md | 13 -------------
 1 file changed, 13 deletions(-)

diff --git a/README.md b/README.md
index 987854664e..284ca26e7f 100644
--- a/README.md
+++ b/README.md
@@ -3835,18 +3835,14 @@ Other Style Guides
   This is a list of organizations that are using this style guide. Send us a pull request and we'll add you to the list.
 
   - **123erfasst**: [123erfasst/javascript](https://github.com/123erfasst/javascript)
-  - **3blades**: [3Blades](https://github.com/3blades)
   - **4Catalyzer**: [4Catalyzer/javascript](https://github.com/4Catalyzer/javascript)
   - **Aan Zee**: [AanZee/javascript](https://github.com/AanZee/javascript)
-  - **Adult Swim**: [adult-swim/javascript](https://github.com/adult-swim/javascript)
   - **Airbnb**: [airbnb/javascript](https://github.com/airbnb/javascript)
   - **AltSchool**: [AltSchool/javascript](https://github.com/AltSchool/javascript)
   - **Apartmint**: [apartmint/javascript](https://github.com/apartmint/javascript)
   - **Ascribe**: [ascribe/javascript](https://github.com/ascribe/javascript)
-  - **Avalara**: [avalara/javascript](https://github.com/avalara/javascript)
   - **Avant**: [avantcredit/javascript](https://github.com/avantcredit/javascript)
   - **Axept**: [axept/javascript](https://github.com/axept/javascript)
-  - **BashPros**: [BashPros/javascript](https://github.com/BashPros/javascript)
   - **Billabong**: [billabong/javascript](https://github.com/billabong/javascript)
   - **Bisk**: [bisk](https://github.com/Bisk/)
   - **Bonhomme**: [bonhommeparis/javascript](https://github.com/bonhommeparis/javascript)
@@ -3866,7 +3862,6 @@ Other Style Guides
   - **Evolution Gaming**: [evolution-gaming/javascript](https://github.com/evolution-gaming/javascript)
   - **EvozonJs**: [evozonjs/javascript](https://github.com/evozonjs/javascript)
   - **ExactTarget**: [ExactTarget/javascript](https://github.com/ExactTarget/javascript)
-  - **Expensify** [Expensify/Style-Guide](https://github.com/Expensify/Style-Guide/blob/master/javascript.md)
   - **Flexberry**: [Flexberry/javascript-style-guide](https://github.com/Flexberry/javascript-style-guide)
   - **Gawker Media**: [gawkermedia](https://github.com/gawkermedia/)
   - **General Electric**: [GeneralElectric/javascript](https://github.com/GeneralElectric/javascript)
@@ -3878,12 +3873,10 @@ Other Style Guides
   - **Happeo**: [happeo/javascript](https://github.com/happeo/javascript)
   - **Honey**: [honeyscience/javascript](https://github.com/honeyscience/javascript)
   - **How About We**: [howaboutwe/javascript](https://github.com/howaboutwe/javascript-style-guide)
-  - **Huballin**: [huballin](https://github.com/huballin/)
   - **HubSpot**: [HubSpot/javascript](https://github.com/HubSpot/javascript)
   - **Hyper**: [hyperoslo/javascript-playbook](https://github.com/hyperoslo/javascript-playbook/blob/master/style.md)
   - **InterCity Group**: [intercitygroup/javascript-style-guide](https://github.com/intercitygroup/javascript-style-guide)
   - **Jam3**: [Jam3/Javascript-Code-Conventions](https://github.com/Jam3/Javascript-Code-Conventions)
-  - **JeopardyBot**: [kesne/jeopardy-bot](https://github.com/kesne/jeopardy-bot/blob/master/STYLEGUIDE.md)
   - **JSSolutions**: [JSSolutions/javascript](https://github.com/JSSolutions/javascript)
   - **Kaplan Komputing**: [kaplankomputing/javascript](https://github.com/kaplankomputing/javascript)
   - **KickorStick**: [kickorstick](https://github.com/kickorstick/)
@@ -3894,11 +3887,8 @@ Other Style Guides
   - **Mighty Spring**: [mightyspring/javascript](https://github.com/mightyspring/javascript)
   - **MinnPost**: [MinnPost/javascript](https://github.com/MinnPost/javascript)
   - **MitocGroup**: [MitocGroup/javascript](https://github.com/MitocGroup/javascript)
-  - **ModCloth**: [modcloth/javascript](https://github.com/modcloth/javascript)
-  - **Money Advice Service**: [moneyadviceservice/javascript](https://github.com/moneyadviceservice/javascript)
   - **Muber**: [muber](https://github.com/muber/)
   - **National Geographic**: [natgeo](https://github.com/natgeo/)
-  - **Nimbl3**: [nimbl3/javascript](https://github.com/nimbl3/javascript)
   - **NullDev**: [NullDevCo/JavaScript-Styleguide](https://github.com/NullDevCo/JavaScript-Styleguide)
   - **Nulogy**: [nulogy/javascript](https://github.com/nulogy/javascript)
   - **Orange Hill Development**: [orangehill/javascript](https://github.com/orangehill/javascript)
@@ -3907,13 +3897,10 @@ Other Style Guides
   - **Peerby**: [Peerby/javascript](https://github.com/Peerby/javascript)
   - **Pier 1**: [Pier1/javascript](https://github.com/pier1/javascript)
   - **Qotto**: [Qotto/javascript-style-guide](https://github.com/Qotto/javascript-style-guide)
-  - **Razorfish**: [razorfish/javascript-style-guide](https://github.com/razorfish/javascript-style-guide)
-  - **reddit**: [reddit/styleguide/javascript](https://github.com/reddit/styleguide/tree/master/javascript)
   - **React**: [facebook.github.io/react/contributing/how-to-contribute.html#style-guide](https://facebook.github.io/react/contributing/how-to-contribute.html#style-guide)
   - **REI**: [reidev/js-style-guide](https://github.com/rei/code-style-guides/)
   - **Ripple**: [ripple/javascript-style-guide](https://github.com/ripple/javascript-style-guide)
   - **Sainsbury’s Supermarkets**: [jsainsburyplc](https://github.com/jsainsburyplc)
-  - **SeekingAlpha**: [seekingalpha/javascript-style-guide](https://github.com/seekingalpha/javascript-style-guide)
   - **Shutterfly**: [shutterfly/javascript](https://github.com/shutterfly/javascript)
   - **Sourcetoad**: [sourcetoad/javascript](https://github.com/sourcetoad/javascript)
   - **Springload**: [springload](https://github.com/springload/)

From 9c181108a7f11be1b97191f17c9ab2dc98e28c6e Mon Sep 17 00:00:00 2001
From: Ikko Ashimine <eltociear@gmail.com>
Date: Fri, 8 Jan 2021 20:40:02 +0900
Subject: [PATCH 1470/1591] [meta] Fix typo in .markdownlint.json

preceeding -> preceding
---
 linters/.markdownlint.json | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/linters/.markdownlint.json b/linters/.markdownlint.json
index 118b8a6ec6..951337dbc5 100644
--- a/linters/.markdownlint.json
+++ b/linters/.markdownlint.json
@@ -69,7 +69,7 @@
   "no-multiple-space-closed-atx": true,
 
   "comment": "MD022: Headers should be surrounded by blank lines.",
-  "comment": "Some headers have preceeding HTML anchors. Unfortunate that we have to disable this, as it otherwise catches a real problem that trips up some Markdown renderers",
+  "comment": "Some headers have preceding HTML anchors. Unfortunate that we have to disable this, as it otherwise catches a real problem that trips up some Markdown renderers",
   "blanks-around-headers": false,
 
   "comment": "MD023: Headers must start at the beginning of the line.",
@@ -111,7 +111,7 @@
   "blanks-around-fences": true,
 
   "comment": "MD032: Lists should be surrounded by blank lines",
-  "comment": "Some lists have preceeding HTML anchors. Unfortunate that we have to disable this, as it otherwise catches a real problem that trips up some Markdown renderers",
+  "comment": "Some lists have preceding HTML anchors. Unfortunate that we have to disable this, as it otherwise catches a real problem that trips up some Markdown renderers",
   "blanks-around-lists": false,
 
   "comment": "MD033: Disallow inline HTML",

From 711aeb650db14c3b8cc329511ac508ee05bc1af6 Mon Sep 17 00:00:00 2001
From: kimhanui <30483337+kimhanui@users.noreply.github.com>
Date: Thu, 18 Mar 2021 08:43:41 +0900
Subject: [PATCH 1471/1591] [editorial] Complete 19.6 example code (cut in the
 middle)

Fixes #2403
---
 README.md | 4 ++++
 1 file changed, 4 insertions(+)

diff --git a/README.md b/README.md
index 284ca26e7f..f7e0823c55 100644
--- a/README.md
+++ b/README.md
@@ -2618,6 +2618,10 @@ Other Style Guides
 
     // good
     const leds = stage.selectAll('.led').data(data);
+    const svg = leds.enter().append('svg:svg');
+    svg.classed('led', true).attr(width', (radius + margin) * 2);
+    const g = svg.append('svg:g');
+    g.attr('transform', `translate(${radius + margin},${radius + margin})`).call(tron.led);
     ```
 
   <a name="whitespace--after-blocks"></a><a name="18.7"></a>

From 1b540ba14ea15c28f4028e4216373d0eeb96dde0 Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Wed, 24 Mar 2021 23:32:41 -0700
Subject: [PATCH 1472/1591] [*] [dev deps] update `tape`

---
 packages/eslint-config-airbnb-base/package.json | 2 +-
 packages/eslint-config-airbnb/package.json      | 2 +-
 2 files changed, 2 insertions(+), 2 deletions(-)

diff --git a/packages/eslint-config-airbnb-base/package.json b/packages/eslint-config-airbnb-base/package.json
index b86a415362..10a35679e0 100644
--- a/packages/eslint-config-airbnb-base/package.json
+++ b/packages/eslint-config-airbnb-base/package.json
@@ -62,7 +62,7 @@
     "eslint-plugin-import": "^2.22.1",
     "in-publish": "^2.0.1",
     "safe-publish-latest": "^1.1.4",
-    "tape": "^5.1.0"
+    "tape": "^5.2.2"
   },
   "peerDependencies": {
     "eslint": "^5.16.0 || ^6.8.0 || ^7.2.0",
diff --git a/packages/eslint-config-airbnb/package.json b/packages/eslint-config-airbnb/package.json
index f3a9057e5c..22e0b639cb 100644
--- a/packages/eslint-config-airbnb/package.json
+++ b/packages/eslint-config-airbnb/package.json
@@ -72,7 +72,7 @@
     "in-publish": "^2.0.1",
     "react": ">= 0.13.0",
     "safe-publish-latest": "^1.1.4",
-    "tape": "^5.1.0"
+    "tape": "^5.2.2"
   },
   "peerDependencies": {
     "eslint": "^5.16.0 || ^6.8.0 || ^7.2.0",

From 4d837646b7ae2a37780f91423479e65949863570 Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Wed, 24 Mar 2021 23:33:38 -0700
Subject: [PATCH 1473/1591] [eslint config] [deps] update `eslint-plugin-react`

---
 packages/eslint-config-airbnb/package.json   | 6 +++---
 packages/eslint-config-airbnb/rules/react.js | 5 +++++
 2 files changed, 8 insertions(+), 3 deletions(-)

diff --git a/packages/eslint-config-airbnb/package.json b/packages/eslint-config-airbnb/package.json
index 22e0b639cb..641c731139 100644
--- a/packages/eslint-config-airbnb/package.json
+++ b/packages/eslint-config-airbnb/package.json
@@ -59,7 +59,7 @@
     "object.entries": "^1.1.3"
   },
   "devDependencies": {
-    "@babel/runtime": "^7.12.5",
+    "@babel/runtime": "^7.13.10",
     "babel-preset-airbnb": "^4.5.0",
     "babel-tape-runner": "^3.0.0",
     "eclint": "^2.8.1",
@@ -67,7 +67,7 @@
     "eslint-find-rules": "^3.6.1",
     "eslint-plugin-import": "^2.22.1",
     "eslint-plugin-jsx-a11y": "^6.4.1",
-    "eslint-plugin-react": "^7.22.0",
+    "eslint-plugin-react": "^7.23.1",
     "eslint-plugin-react-hooks": "^4 || ^3 || ^2.3.0 || ^1.7.0",
     "in-publish": "^2.0.1",
     "react": ">= 0.13.0",
@@ -78,7 +78,7 @@
     "eslint": "^5.16.0 || ^6.8.0 || ^7.2.0",
     "eslint-plugin-import": "^2.22.1",
     "eslint-plugin-jsx-a11y": "^6.4.1",
-    "eslint-plugin-react": "^7.22.0",
+    "eslint-plugin-react": "^7.23.1",
     "eslint-plugin-react-hooks": "^4 || ^3 || ^2.3.0 || ^1.7.0"
   },
   "engines": {
diff --git a/packages/eslint-config-airbnb/rules/react.js b/packages/eslint-config-airbnb/rules/react.js
index 24d9fffaa5..a077e4c113 100644
--- a/packages/eslint-config-airbnb/rules/react.js
+++ b/packages/eslint-config-airbnb/rules/react.js
@@ -540,6 +540,11 @@ module.exports = {
     // https://github.com/yannickcr/eslint-plugin-react/blob/e2eaadae316f9506d163812a09424eb42698470a/docs/rules/jsx-no-constructed-context-values.md
     // TODO: enable, semver-minor
     'react/jsx-no-constructed-context-values': 'off',
+
+    // Prevent creating unstable components inside components
+    // https://github.com/yannickcr/eslint-plugin-react/blob/c2a790a3472eea0f6de984bdc3ee2a62197417fb/docs/rules/no-unstable-nested-components.md
+    // TODO: enable, semver-major
+    'react/no-unstable-nested-components': 'off',
   },
 
   settings: {

From 730b74927432d5931f9047322e925fb7e1c07be6 Mon Sep 17 00:00:00 2001
From: Diane Ko <backwardok@users.noreply.github.com>
Date: Wed, 24 Mar 2021 18:38:08 -0700
Subject: [PATCH 1474/1591] [eslint config] [patch] Alphabetize the rules for
 react-a11y.js

The ordering of the rules are currently not alphabetical, which can make it hard to tell whether there are rules missing or what's set for each rule from eslint-plugin-jsx-a11y.

This change alphabetizes the list so it's easier to compare to the [list of supported rules](https://github.com/jsx-eslint/eslint-plugin-jsx-a11y#supported-rules)
---
 .../eslint-config-airbnb/rules/react-a11y.js  | 260 +++++++++---------
 1 file changed, 132 insertions(+), 128 deletions(-)

diff --git a/packages/eslint-config-airbnb/rules/react-a11y.js b/packages/eslint-config-airbnb/rules/react-a11y.js
index 5898ca9eb3..f7bf7c79e6 100644
--- a/packages/eslint-config-airbnb/rules/react-a11y.js
+++ b/packages/eslint-config-airbnb/rules/react-a11y.js
@@ -11,13 +11,36 @@ module.exports = {
   },
 
   rules: {
+    // ensure emoji are accessible
+    // https://github.com/evcohen/eslint-plugin-jsx-a11y/blob/master/docs/rules/accessible-emoji.md
+    // disabled; rule is deprecated
+    'jsx-a11y/accessible-emoji': 'off',
+
+    // Enforce that all elements that require alternative text have meaningful information
+    // https://github.com/evcohen/eslint-plugin-jsx-a11y/blob/master/docs/rules/alt-text.md
+    'jsx-a11y/alt-text': ['error', {
+      elements: ['img', 'object', 'area', 'input[type="image"]'],
+      img: [],
+      object: [],
+      area: [],
+      'input[type="image"]': [],
+    }],
+
     // Enforce that anchors have content
     // https://github.com/evcohen/eslint-plugin-jsx-a11y/blob/master/docs/rules/anchor-has-content.md
     'jsx-a11y/anchor-has-content': ['error', { components: [] }],
 
-    // Require ARIA roles to be valid and non-abstract
-    // https://github.com/evcohen/eslint-plugin-jsx-a11y/blob/master/docs/rules/aria-role.md
-    'jsx-a11y/aria-role': ['error', { ignoreNonDOM: false }],
+    // ensure <a> tags are valid
+    // https://github.com/evcohen/eslint-plugin-jsx-a11y/blob/0745af376cdc8686d85a361ce36952b1fb1ccf6e/docs/rules/anchor-is-valid.md
+    'jsx-a11y/anchor-is-valid': ['error', {
+      components: ['Link'],
+      specialLink: ['to'],
+      aspects: ['noHref', 'invalidHref', 'preferButton'],
+    }],
+
+    // elements with aria-activedescendant must be tabbable
+    // https://github.com/evcohen/eslint-plugin-jsx-a11y/blob/master/docs/rules/aria-activedescendant-has-tabindex.md
+    'jsx-a11y/aria-activedescendant-has-tabindex': 'error',
 
     // Enforce all aria-* props are valid.
     // https://github.com/evcohen/eslint-plugin-jsx-a11y/blob/master/docs/rules/aria-props.md
@@ -27,45 +50,24 @@ module.exports = {
     // https://github.com/evcohen/eslint-plugin-jsx-a11y/blob/master/docs/rules/aria-proptypes.md
     'jsx-a11y/aria-proptypes': 'error',
 
+    // Require ARIA roles to be valid and non-abstract
+    // https://github.com/evcohen/eslint-plugin-jsx-a11y/blob/master/docs/rules/aria-role.md
+    'jsx-a11y/aria-role': ['error', { ignoreNonDOM: false }],
+
     // Enforce that elements that do not support ARIA roles, states, and
     // properties do not have those attributes.
     // https://github.com/evcohen/eslint-plugin-jsx-a11y/blob/master/docs/rules/aria-unsupported-elements.md
     'jsx-a11y/aria-unsupported-elements': 'error',
 
-    // Enforce that all elements that require alternative text have meaningful information
-    // https://github.com/evcohen/eslint-plugin-jsx-a11y/blob/master/docs/rules/alt-text.md
-    'jsx-a11y/alt-text': ['error', {
-      elements: ['img', 'object', 'area', 'input[type="image"]'],
-      img: [],
-      object: [],
-      area: [],
-      'input[type="image"]': [],
-    }],
-
-    // Prevent img alt text from containing redundant words like "image", "picture", or "photo"
-    // https://github.com/evcohen/eslint-plugin-jsx-a11y/blob/master/docs/rules/img-redundant-alt.md
-    'jsx-a11y/img-redundant-alt': 'error',
-
-    // require that JSX labels use "htmlFor"
-    // https://github.com/evcohen/eslint-plugin-jsx-a11y/blob/master/docs/rules/label-has-for.md
-    // deprecated: replaced by `label-has-associated-control` rule
-    'jsx-a11y/label-has-for': ['off', {
-      components: [],
-      required: {
-        every: ['nesting', 'id'],
-      },
-      allowChildren: false,
+    // Ensure the autocomplete attribute is correct and suitable for the form field it is used with
+    // https://github.com/jsx-eslint/eslint-plugin-jsx-a11y/blob/29c68596b15c4ff0a40daae6d4a2670e36e37d35/docs/rules/autocomplete-valid.md
+    'jsx-a11y/autocomplete-valid': ['off', {
+      inputComponents: [],
     }],
 
-    // Enforce that a label tag has a text label and an associated control.
-    // https://github.com/evcohen/eslint-plugin-jsx-a11y/blob/b800f40a2a69ad48015ae9226fbe879f946757ed/docs/rules/label-has-associated-control.md
-    'jsx-a11y/label-has-associated-control': ['error', {
-      labelComponents: [],
-      labelAttributes: [],
-      controlComponents: [],
-      assert: 'both',
-      depth: 25
-    }],
+    // require onClick be accompanied by onKeyUp/onKeyDown/onKeyPress
+    // https://github.com/evcohen/eslint-plugin-jsx-a11y/blob/master/docs/rules/click-events-have-key-events.md
+    'jsx-a11y/click-events-have-key-events': 'error',
 
     // Enforce that a control (an interactive element) has a text label.
     // https://github.com/evcohen/eslint-plugin-jsx-a11y/blob/master/docs/rules/control-has-associated-label.md
@@ -96,47 +98,59 @@ module.exports = {
       depth: 5,
     }],
 
-    // require that mouseover/out come with focus/blur, for keyboard-only users
-    // https://github.com/evcohen/eslint-plugin-jsx-a11y/blob/master/docs/rules/mouse-events-have-key-events.md
-    'jsx-a11y/mouse-events-have-key-events': 'error',
+    // ensure <hX> tags have content and are not aria-hidden
+    // https://github.com/evcohen/eslint-plugin-jsx-a11y/blob/master/docs/rules/heading-has-content.md
+    'jsx-a11y/heading-has-content': ['error', { components: [''] }],
 
-    // Prevent use of `accessKey`
-    // https://github.com/evcohen/eslint-plugin-jsx-a11y/blob/master/docs/rules/no-access-key.md
-    'jsx-a11y/no-access-key': 'error',
+    // require HTML elements to have a "lang" prop
+    // https://github.com/evcohen/eslint-plugin-jsx-a11y/blob/master/docs/rules/html-has-lang.md
+    'jsx-a11y/html-has-lang': 'error',
 
-    // require onBlur instead of onChange
-    // https://github.com/evcohen/eslint-plugin-jsx-a11y/blob/master/docs/rules/no-onchange.md
-    'jsx-a11y/no-onchange': 'off',
+    // ensure iframe elements have a unique title
+    // https://github.com/evcohen/eslint-plugin-jsx-a11y/blob/master/docs/rules/iframe-has-title.md
+    'jsx-a11y/iframe-has-title': 'error',
+
+    // Prevent img alt text from containing redundant words like "image", "picture", or "photo"
+    // https://github.com/evcohen/eslint-plugin-jsx-a11y/blob/master/docs/rules/img-redundant-alt.md
+    'jsx-a11y/img-redundant-alt': 'error',
 
     // Elements with an interactive role and interaction handlers must be focusable
     // https://github.com/evcohen/eslint-plugin-jsx-a11y/blob/master/docs/rules/interactive-supports-focus.md
     'jsx-a11y/interactive-supports-focus': 'error',
 
-    // Enforce that elements with ARIA roles must have all required attributes
-    // for that role.
-    // https://github.com/evcohen/eslint-plugin-jsx-a11y/blob/master/docs/rules/role-has-required-aria-props.md
-    'jsx-a11y/role-has-required-aria-props': 'error',
+    // Enforce that a label tag has a text label and an associated control.
+    // https://github.com/evcohen/eslint-plugin-jsx-a11y/blob/b800f40a2a69ad48015ae9226fbe879f946757ed/docs/rules/label-has-associated-control.md
+    'jsx-a11y/label-has-associated-control': ['error', {
+      labelComponents: [],
+      labelAttributes: [],
+      controlComponents: [],
+      assert: 'both',
+      depth: 25
+    }],
 
-    // Enforce that elements with explicit or implicit roles defined contain
-    // only aria-* properties supported by that role.
-    // https://github.com/evcohen/eslint-plugin-jsx-a11y/blob/master/docs/rules/role-supports-aria-props.md
-    'jsx-a11y/role-supports-aria-props': 'error',
+    // require HTML element's lang prop to be valid
+    // https://github.com/evcohen/eslint-plugin-jsx-a11y/blob/master/docs/rules/lang.md
+    'jsx-a11y/lang': 'error',
 
-    // Enforce tabIndex value is not greater than zero.
-    // https://github.com/evcohen/eslint-plugin-jsx-a11y/blob/master/docs/rules/tabindex-no-positive.md
-    'jsx-a11y/tabindex-no-positive': 'error',
+    // media elements must have captions
+    // https://github.com/evcohen/eslint-plugin-jsx-a11y/blob/master/docs/rules/media-has-caption.md
+    'jsx-a11y/media-has-caption': ['error', {
+      audio: [],
+      video: [],
+      track: [],
+    }],
 
-    // ensure <hX> tags have content and are not aria-hidden
-    // https://github.com/evcohen/eslint-plugin-jsx-a11y/blob/master/docs/rules/heading-has-content.md
-    'jsx-a11y/heading-has-content': ['error', { components: [''] }],
+    // require that mouseover/out come with focus/blur, for keyboard-only users
+    // https://github.com/evcohen/eslint-plugin-jsx-a11y/blob/master/docs/rules/mouse-events-have-key-events.md
+    'jsx-a11y/mouse-events-have-key-events': 'error',
 
-    // require HTML elements to have a "lang" prop
-    // https://github.com/evcohen/eslint-plugin-jsx-a11y/blob/master/docs/rules/html-has-lang.md
-    'jsx-a11y/html-has-lang': 'error',
+    // Prevent use of `accessKey`
+    // https://github.com/evcohen/eslint-plugin-jsx-a11y/blob/master/docs/rules/no-access-key.md
+    'jsx-a11y/no-access-key': 'error',
 
-    // require HTML element's lang prop to be valid
-    // https://github.com/evcohen/eslint-plugin-jsx-a11y/blob/master/docs/rules/lang.md
-    'jsx-a11y/lang': 'error',
+    // prohibit autoFocus prop
+    // https://github.com/evcohen/eslint-plugin-jsx-a11y/blob/master/docs/rules/no-autofocus.md
+    'jsx-a11y/no-autofocus': ['error', { ignoreNonDOM: true }],
 
     // prevent distracting elements, like <marquee> and <blink>
     // https://github.com/evcohen/eslint-plugin-jsx-a11y/blob/master/docs/rules/no-distracting-elements.md
@@ -144,25 +158,10 @@ module.exports = {
       elements: ['marquee', 'blink'],
     }],
 
-    // only allow <th> to have the "scope" attr
-    // https://github.com/evcohen/eslint-plugin-jsx-a11y/blob/master/docs/rules/scope.md
-    'jsx-a11y/scope': 'error',
-
-    // require onClick be accompanied by onKeyUp/onKeyDown/onKeyPress
-    // https://github.com/evcohen/eslint-plugin-jsx-a11y/blob/master/docs/rules/click-events-have-key-events.md
-    'jsx-a11y/click-events-have-key-events': 'error',
-
-    // Enforce that DOM elements without semantic behavior not have interaction handlers
-    // https://github.com/evcohen/eslint-plugin-jsx-a11y/blob/master/docs/rules/no-static-element-interactions.md
-    'jsx-a11y/no-static-element-interactions': ['error', {
-      handlers: [
-        'onClick',
-        'onMouseDown',
-        'onMouseUp',
-        'onKeyPress',
-        'onKeyDown',
-        'onKeyUp',
-      ]
+    // WAI-ARIA roles should not be used to convert an interactive element to non-interactive
+    // https://github.com/evcohen/eslint-plugin-jsx-a11y/blob/master/docs/rules/no-interactive-element-to-noninteractive-role.md
+    'jsx-a11y/no-interactive-element-to-noninteractive-role': ['error', {
+      tr: ['none', 'presentation'],
     }],
 
     // A non-interactive element does not support event handlers (mouse and key handlers)
@@ -178,41 +177,6 @@ module.exports = {
       ]
     }],
 
-    // ensure emoji are accessible
-    // https://github.com/evcohen/eslint-plugin-jsx-a11y/blob/master/docs/rules/accessible-emoji.md
-    // disabled; rule is deprecated
-    'jsx-a11y/accessible-emoji': 'off',
-
-    // elements with aria-activedescendant must be tabbable
-    // https://github.com/evcohen/eslint-plugin-jsx-a11y/blob/master/docs/rules/aria-activedescendant-has-tabindex.md
-    'jsx-a11y/aria-activedescendant-has-tabindex': 'error',
-
-    // ensure iframe elements have a unique title
-    // https://github.com/evcohen/eslint-plugin-jsx-a11y/blob/master/docs/rules/iframe-has-title.md
-    'jsx-a11y/iframe-has-title': 'error',
-
-    // prohibit autoFocus prop
-    // https://github.com/evcohen/eslint-plugin-jsx-a11y/blob/master/docs/rules/no-autofocus.md
-    'jsx-a11y/no-autofocus': ['error', { ignoreNonDOM: true }],
-
-    // ensure HTML elements do not specify redundant ARIA roles
-    // https://github.com/evcohen/eslint-plugin-jsx-a11y/blob/master/docs/rules/no-redundant-roles.md
-    'jsx-a11y/no-redundant-roles': 'error',
-
-    // media elements must have captions
-    // https://github.com/evcohen/eslint-plugin-jsx-a11y/blob/master/docs/rules/media-has-caption.md
-    'jsx-a11y/media-has-caption': ['error', {
-      audio: [],
-      video: [],
-      track: [],
-    }],
-
-    // WAI-ARIA roles should not be used to convert an interactive element to non-interactive
-    // https://github.com/evcohen/eslint-plugin-jsx-a11y/blob/master/docs/rules/no-interactive-element-to-noninteractive-role.md
-    'jsx-a11y/no-interactive-element-to-noninteractive-role': ['error', {
-      tr: ['none', 'presentation'],
-    }],
-
     // WAI-ARIA roles should not be used to convert a non-interactive element to interactive
     // https://github.com/evcohen/eslint-plugin-jsx-a11y/blob/master/docs/rules/no-noninteractive-element-to-interactive-role.md
     'jsx-a11y/no-noninteractive-element-to-interactive-role': ['error', {
@@ -230,18 +194,58 @@ module.exports = {
       roles: ['tabpanel'],
     }],
 
-    // ensure <a> tags are valid
-    // https://github.com/evcohen/eslint-plugin-jsx-a11y/blob/0745af376cdc8686d85a361ce36952b1fb1ccf6e/docs/rules/anchor-is-valid.md
-    'jsx-a11y/anchor-is-valid': ['error', {
-      components: ['Link'],
-      specialLink: ['to'],
-      aspects: ['noHref', 'invalidHref', 'preferButton'],
+    // require onBlur instead of onChange
+    // https://github.com/evcohen/eslint-plugin-jsx-a11y/blob/master/docs/rules/no-onchange.md
+    'jsx-a11y/no-onchange': 'off',
+
+    // ensure HTML elements do not specify redundant ARIA roles
+    // https://github.com/evcohen/eslint-plugin-jsx-a11y/blob/master/docs/rules/no-redundant-roles.md
+    'jsx-a11y/no-redundant-roles': 'error',
+
+    // Enforce that DOM elements without semantic behavior not have interaction handlers
+    // https://github.com/evcohen/eslint-plugin-jsx-a11y/blob/master/docs/rules/no-static-element-interactions.md
+    'jsx-a11y/no-static-element-interactions': ['error', {
+      handlers: [
+        'onClick',
+        'onMouseDown',
+        'onMouseUp',
+        'onKeyPress',
+        'onKeyDown',
+        'onKeyUp',
+      ]
     }],
 
-    // Ensure the autocomplete attribute is correct and suitable for the form field it is used with
-    // https://github.com/jsx-eslint/eslint-plugin-jsx-a11y/blob/29c68596b15c4ff0a40daae6d4a2670e36e37d35/docs/rules/autocomplete-valid.md
-    'jsx-a11y/autocomplete-valid': ['off', {
-      inputComponents: [],
+    // Enforce that elements with ARIA roles must have all required attributes
+    // for that role.
+    // https://github.com/evcohen/eslint-plugin-jsx-a11y/blob/master/docs/rules/role-has-required-aria-props.md
+    'jsx-a11y/role-has-required-aria-props': 'error',
+
+    // Enforce that elements with explicit or implicit roles defined contain
+    // only aria-* properties supported by that role.
+    // https://github.com/evcohen/eslint-plugin-jsx-a11y/blob/master/docs/rules/role-supports-aria-props.md
+    'jsx-a11y/role-supports-aria-props': 'error',
+
+    // only allow <th> to have the "scope" attr
+    // https://github.com/evcohen/eslint-plugin-jsx-a11y/blob/master/docs/rules/scope.md
+    'jsx-a11y/scope': 'error',
+
+    // Enforce tabIndex value is not greater than zero.
+    // https://github.com/evcohen/eslint-plugin-jsx-a11y/blob/master/docs/rules/tabindex-no-positive.md
+    'jsx-a11y/tabindex-no-positive': 'error',
+
+    // ----------------------------------------------------
+    // Rules that no longer exist in eslint-plugin-jsx-a11y
+    // ----------------------------------------------------
+
+    // require that JSX labels use "htmlFor"
+    // https://github.com/evcohen/eslint-plugin-jsx-a11y/blob/master/docs/rules/label-has-for.md
+    // deprecated: replaced by `label-has-associated-control` rule
+    'jsx-a11y/label-has-for': ['off', {
+      components: [],
+      required: {
+        every: ['nesting', 'id'],
+      },
+      allowChildren: false,
     }],
   },
 };

From 0cf78acab0fff90e9591dedd8783b62a72ffc118 Mon Sep 17 00:00:00 2001
From: Cong Zhang <dancerphil1994@gmail.com>
Date: Wed, 24 Mar 2021 18:17:15 +0800
Subject: [PATCH 1475/1591] [guide] Fix 19.6 example code

---
 README.md | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/README.md b/README.md
index f7e0823c55..c4d803e303 100644
--- a/README.md
+++ b/README.md
@@ -2619,7 +2619,7 @@ Other Style Guides
     // good
     const leds = stage.selectAll('.led').data(data);
     const svg = leds.enter().append('svg:svg');
-    svg.classed('led', true).attr(width', (radius + margin) * 2);
+    svg.classed('led', true).attr('width', (radius + margin) * 2);
     const g = svg.append('svg:g');
     g.attr('transform', `translate(${radius + margin},${radius + margin})`).call(tron.led);
     ```

From 1eadb93e377da1e56c3f91f26610e5d0a00738a9 Mon Sep 17 00:00:00 2001
From: Mackenzie Morgan <macoafi@gmail.com>
Date: Thu, 17 Dec 2020 00:18:29 -0500
Subject: [PATCH 1476/1591] [eslint config] [fix] bump
 eslint-plugin-react-hooks peer dependency version

Fixes #2355
---
 packages/eslint-config-airbnb/package.json | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/packages/eslint-config-airbnb/package.json b/packages/eslint-config-airbnb/package.json
index 641c731139..be32b6e667 100644
--- a/packages/eslint-config-airbnb/package.json
+++ b/packages/eslint-config-airbnb/package.json
@@ -68,7 +68,7 @@
     "eslint-plugin-import": "^2.22.1",
     "eslint-plugin-jsx-a11y": "^6.4.1",
     "eslint-plugin-react": "^7.23.1",
-    "eslint-plugin-react-hooks": "^4 || ^3 || ^2.3.0 || ^1.7.0",
+    "eslint-plugin-react-hooks": "^4.0.1 || ^3 || ^2.3.0 || ^1.7.0",
     "in-publish": "^2.0.1",
     "react": ">= 0.13.0",
     "safe-publish-latest": "^1.1.4",
@@ -79,7 +79,7 @@
     "eslint-plugin-import": "^2.22.1",
     "eslint-plugin-jsx-a11y": "^6.4.1",
     "eslint-plugin-react": "^7.23.1",
-    "eslint-plugin-react-hooks": "^4 || ^3 || ^2.3.0 || ^1.7.0"
+    "eslint-plugin-react-hooks": "^4.0.1 || ^3 || ^2.3.0 || ^1.7.0"
   },
   "engines": {
     "node": ">= 6"

From dc3af3a90ebf56a5e9df2d4c7b40d6518200bb87 Mon Sep 17 00:00:00 2001
From: Kiran S <18kirans@gmail.com>
Date: Mon, 3 May 2021 21:39:00 +0530
Subject: [PATCH 1477/1591] [eslint config] [base] update default value for
 complexity

---
 packages/eslint-config-airbnb-base/rules/best-practices.js | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/packages/eslint-config-airbnb-base/rules/best-practices.js b/packages/eslint-config-airbnb-base/rules/best-practices.js
index e3420416ef..0587e8f496 100644
--- a/packages/eslint-config-airbnb-base/rules/best-practices.js
+++ b/packages/eslint-config-airbnb-base/rules/best-practices.js
@@ -11,7 +11,7 @@ module.exports = {
     'block-scoped-var': 'error',
 
     // specify the maximum cyclomatic complexity allowed in a program
-    complexity: ['off', 11],
+    complexity: ['off', 20],
 
     // enforce that class methods use "this"
     // https://eslint.org/docs/rules/class-methods-use-this

From 5641278fa1df75ba3b6af2959a553bd682c0ad42 Mon Sep 17 00:00:00 2001
From: Kushang Shah <kushangshah131@gmail.com>
Date: Fri, 23 Apr 2021 09:12:07 +0530
Subject: [PATCH 1478/1591] [editorial] add `var` info to `let`/`const` section

---
 README.md | 6 +++++-
 1 file changed, 5 insertions(+), 1 deletion(-)

diff --git a/README.md b/README.md
index c4d803e303..08d5af1922 100644
--- a/README.md
+++ b/README.md
@@ -139,18 +139,22 @@ Other Style Guides
     ```
 
   <a name="references--block-scope"></a><a name="2.3"></a>
-  - [2.3](#references--block-scope) Note that both `let` and `const` are block-scoped.
+  - [2.3](#references--block-scope) Note that both `let` and `const` are block-scoped, whereas `var` is function-scoped.
 
     ```javascript
     // const and let only exist in the blocks they are defined in.
     {
       let a = 1;
       const b = 1;
+      var c = 1;
     }
     console.log(a); // ReferenceError
     console.log(b); // ReferenceError
+    console.log(c); // Prints 1
     ```
 
+    In the above code, you can see that referencing `a` and `b` will produce a ReferenceError, while `c` contains the number. This is because `a` and `b` are block scoped, while `c` is scoped to the containing function.
+
 **[⬆ back to top](#table-of-contents)**
 
 ## Objects

From 1fb4592122ef94029b3ff2f361408f0681751253 Mon Sep 17 00:00:00 2001
From: Kiran S <18kirans@gmail.com>
Date: Tue, 4 May 2021 21:15:46 +0530
Subject: [PATCH 1479/1591] [guide] add references for eslint rules

---
 .../rules/best-practices.js                   | 48 ++++++++++++++++++-
 1 file changed, 47 insertions(+), 1 deletion(-)

diff --git a/packages/eslint-config-airbnb-base/rules/best-practices.js b/packages/eslint-config-airbnb-base/rules/best-practices.js
index 0587e8f496..deb91cfb01 100644
--- a/packages/eslint-config-airbnb-base/rules/best-practices.js
+++ b/packages/eslint-config-airbnb-base/rules/best-practices.js
@@ -1,6 +1,7 @@
 module.exports = {
   rules: {
     // enforces getter/setter pairs in objects
+    // https://eslint.org/docs/rules/accessor-pairs
     'accessor-pairs': 'off',
 
     // enforces return statements in callbacks of array's methods
@@ -8,9 +9,11 @@ module.exports = {
     'array-callback-return': ['error', { allowImplicit: true }],
 
     // treat var statements as if they were block scoped
+    // https://eslint.org/docs/rules/block-scoped-var
     'block-scoped-var': 'error',
 
     // specify the maximum cyclomatic complexity allowed in a program
+    // https://eslint.org/docs/rules/complexity
     complexity: ['off', 20],
 
     // enforce that class methods use "this"
@@ -20,12 +23,15 @@ module.exports = {
     }],
 
     // require return statements to either always or never specify values
+    // https://eslint.org/docs/rules/consistent-return
     'consistent-return': 'error',
 
     // specify curly brace conventions for all control statements
+    // https://eslint.org/docs/rules/curly
     curly: ['error', 'multi-line'], // multiline
 
     // require default case in switch statements
+    // https://eslint.org/docs/rules/default-case
     'default-case': ['error', { commentPattern: '^no default$' }],
 
     // Enforce default clauses in switch statements to be last
@@ -38,6 +44,7 @@ module.exports = {
     'default-param-last': 'off',
 
     // encourages use of dot notation whenever possible
+    // https://eslint.org/docs/rules/dot-notation
     'dot-notation': ['error', { allowKeywords: true }],
 
     // enforces consistent newlines before or after dots
@@ -54,6 +61,7 @@ module.exports = {
     'grouped-accessor-pairs': 'off',
 
     // make sure for-in loops have an if statement
+    // https://eslint.org/docs/rules/guard-for-in
     'guard-for-in': 'error',
 
     // enforce a maximum number of classes per file
@@ -61,13 +69,15 @@ module.exports = {
     'max-classes-per-file': ['error', 1],
 
     // disallow the use of alert, confirm, and prompt
+    // https://eslint.org/docs/rules/no-alert
     'no-alert': 'warn',
 
     // disallow use of arguments.caller or arguments.callee
+    // https://eslint.org/docs/rules/no-caller
     'no-caller': 'error',
 
     // disallow lexical declarations in case/default clauses
-    // https://eslint.org/docs/rules/no-case-declarations.html
+    // https://eslint.org/docs/rules/no-case-declarations
     'no-case-declarations': 'error',
 
     // Disallow returning value in constructor
@@ -98,15 +108,19 @@ module.exports = {
     'no-empty-pattern': 'error',
 
     // disallow comparisons to null without a type-checking operator
+    // https://eslint.org/docs/rules/no-eq-null
     'no-eq-null': 'off',
 
     // disallow use of eval()
+    // https://eslint.org/docs/rules/no-eval
     'no-eval': 'error',
 
     // disallow adding to native types
+    // https://eslint.org/docs/rules/no-extend-native
     'no-extend-native': 'error',
 
     // disallow unnecessary function binding
+    // https://eslint.org/docs/rules/no-extra-bind
     'no-extra-bind': 'error',
 
     // disallow Unnecessary Labels
@@ -114,15 +128,19 @@ module.exports = {
     'no-extra-label': 'error',
 
     // disallow fallthrough of case statements
+    // https://eslint.org/docs/rules/no-fallthrough
     'no-fallthrough': 'error',
 
     // disallow the use of leading or trailing decimal points in numeric literals
+    // https://eslint.org/docs/rules/no-floating-decimal
     'no-floating-decimal': 'error',
 
     // disallow reassignments of native objects or read-only globals
     // https://eslint.org/docs/rules/no-global-assign
     'no-global-assign': ['error', { exceptions: [] }],
+
     // deprecated in favor of no-global-assign
+    // https://eslint.org/docs/rules/no-native-reassign
     'no-native-reassign': 'off',
 
     // disallow implicit type conversions
@@ -139,21 +157,27 @@ module.exports = {
     'no-implicit-globals': 'off',
 
     // disallow use of eval()-like methods
+    // https://eslint.org/docs/rules/no-implied-eval
     'no-implied-eval': 'error',
 
     // disallow this keywords outside of classes or class-like objects
+    // https://eslint.org/docs/rules/no-invalid-this
     'no-invalid-this': 'off',
 
     // disallow usage of __iterator__ property
+    // https://eslint.org/docs/rules/no-iterator
     'no-iterator': 'error',
 
     // disallow use of labels for anything other than loops and switches
+    // https://eslint.org/docs/rules/no-labels
     'no-labels': ['error', { allowLoop: false, allowSwitch: false }],
 
     // disallow unnecessary nested blocks
+    // https://eslint.org/docs/rules/no-lone-blocks
     'no-lone-blocks': 'error',
 
     // disallow creation of functions within loops
+    // https://eslint.org/docs/rules/no-loop-func
     'no-loop-func': 'error',
 
     // disallow magic numbers
@@ -166,20 +190,25 @@ module.exports = {
     }],
 
     // disallow use of multiple spaces
+    // https://eslint.org/docs/rules/no-multi-spaces
     'no-multi-spaces': ['error', {
       ignoreEOLComments: false,
     }],
 
     // disallow use of multiline strings
+    // https://eslint.org/docs/rules/no-multi-str
     'no-multi-str': 'error',
 
     // disallow use of new operator when not part of the assignment or comparison
+    // https://eslint.org/docs/rules/no-new
     'no-new': 'error',
 
     // disallow use of new operator for Function object
+    // https://eslint.org/docs/rules/no-new-func
     'no-new-func': 'error',
 
     // disallows creating new instances of String, Number, and Boolean
+    // https://eslint.org/docs/rules/no-new-wrappers
     'no-new-wrappers': 'error',
 
     // Disallow \8 and \9 escape sequences in string literals
@@ -188,10 +217,12 @@ module.exports = {
     'no-nonoctal-decimal-escape': 'off',
 
     // disallow use of (old style) octal literals
+    // https://eslint.org/docs/rules/no-octal
     'no-octal': 'error',
 
     // disallow use of octal escape sequences in string literals, such as
     // var foo = 'Copyright \251';
+    // https://eslint.org/docs/rules/no-octal-escape
     'no-octal-escape': 'error',
 
     // disallow reassignment of function parameters
@@ -215,9 +246,11 @@ module.exports = {
     }],
 
     // disallow usage of __proto__ property
+    // https://eslint.org/docs/rules/no-proto
     'no-proto': 'error',
 
     // disallow declaring the same variable more than once
+    // https://eslint.org/docs/rules/no-redeclare
     'no-redeclare': 'error',
 
     // disallow certain object properties
@@ -263,12 +296,15 @@ module.exports = {
     }],
 
     // disallow use of assignment in return statement
+    // https://eslint.org/docs/rules/no-return-assign
     'no-return-assign': ['error', 'always'],
 
     // disallow redundant `return await`
+    // https://eslint.org/docs/rules/no-return-await
     'no-return-await': 'error',
 
     // disallow use of `javascript:` urls.
+    // https://eslint.org/docs/rules/no-script-url
     'no-script-url': 'error',
 
     // disallow self assignment
@@ -278,12 +314,15 @@ module.exports = {
     }],
 
     // disallow comparisons where both sides are exactly the same
+    // https://eslint.org/docs/rules/no-self-compare
     'no-self-compare': 'error',
 
     // disallow use of comma operator
+    // https://eslint.org/docs/rules/no-sequences
     'no-sequences': 'error',
 
     // restrict what can be thrown as an exception
+    // https://eslint.org/docs/rules/no-throw-literal
     'no-throw-literal': 'error',
 
     // disallow unmodified conditions of loops
@@ -291,6 +330,7 @@ module.exports = {
     'no-unmodified-loop-condition': 'off',
 
     // disallow usage of expressions in statement position
+    // https://eslint.org/docs/rules/no-unused-expressions
     'no-unused-expressions': ['error', {
       allowShortCircuit: false,
       allowTernary: false,
@@ -302,6 +342,7 @@ module.exports = {
     'no-unused-labels': 'error',
 
     // disallow unnecessary .call() and .apply()
+    // https://eslint.org/docs/rules/no-useless-call
     'no-useless-call': 'off',
 
     // Disallow unnecessary catch clauses
@@ -325,9 +366,11 @@ module.exports = {
     'no-void': 'error',
 
     // disallow usage of configurable warning terms in comments: e.g. todo
+    // https://eslint.org/docs/rules/no-warning-comments
     'no-warning-comments': ['off', { terms: ['todo', 'fixme', 'xxx'], location: 'start' }],
 
     // disallow use of the with statement
+    // https://eslint.org/docs/rules/no-with
     'no-with': 'error',
 
     // require using Error objects as Promise rejection reasons
@@ -343,6 +386,7 @@ module.exports = {
     'prefer-regex-literals': 'off',
 
     // require use of the second argument for parseInt()
+    // https://eslint.org/docs/rules/radix
     radix: 'error',
 
     // require `await` in `async function` (note: this is a horrible rule that should never be used)
@@ -354,6 +398,7 @@ module.exports = {
     'require-unicode-regexp': 'off',
 
     // requires to declare all vars on top of their containing scope
+    // https://eslint.org/docs/rules/vars-on-top
     'vars-on-top': 'error',
 
     // require immediate function invocation to be wrapped in parentheses
@@ -361,6 +406,7 @@ module.exports = {
     'wrap-iife': ['error', 'outside', { functionPrototypeMethods: false }],
 
     // require or disallow Yoda conditions
+    // https://eslint.org/docs/rules/yoda
     yoda: 'error'
   }
 };

From 35914b14025cd52f53cd2ae2f353cdc7384087c0 Mon Sep 17 00:00:00 2001
From: Asher Hwang <dev@hsh.kr>
Date: Tue, 11 May 2021 09:08:23 +0900
Subject: [PATCH 1480/1591] [guide] Spread operator => Spread syntax

---
 README.md                                       | 4 ++--
 packages/eslint-config-airbnb-base/rules/es6.js | 2 +-
 2 files changed, 3 insertions(+), 3 deletions(-)

diff --git a/README.md b/README.md
index 08d5af1922..c90eba926b 100644
--- a/README.md
+++ b/README.md
@@ -310,7 +310,7 @@ Other Style Guides
     ```
 
   <a name="objects--rest-spread"></a>
-  - [3.8](#objects--rest-spread) Prefer the object spread operator over [`Object.assign`](https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Object/assign) to shallow-copy objects. Use the object rest operator to get a new object with certain properties omitted. eslint: [`prefer-object-spread`](https://eslint.org/docs/rules/prefer-object-spread)
+  - [3.8](#objects--rest-spread) Prefer the object spread syntax over [`Object.assign`](https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Object/assign) to shallow-copy objects. Use the object rest operator to get a new object with certain properties omitted. eslint: [`prefer-object-spread`](https://eslint.org/docs/rules/prefer-object-spread)
 
     ```javascript
     // very bad
@@ -875,7 +875,7 @@ Other Style Guides
     ```
 
   <a name="functions--spread-vs-apply"></a><a name="7.14"></a>
-  - [7.14](#functions--spread-vs-apply) Prefer the use of the spread operator `...` to call variadic functions. eslint: [`prefer-spread`](https://eslint.org/docs/rules/prefer-spread)
+  - [7.14](#functions--spread-vs-apply) Prefer the use of the spread syntax `...` to call variadic functions. eslint: [`prefer-spread`](https://eslint.org/docs/rules/prefer-spread)
 
     > Why? It’s cleaner, you don’t need to supply a context, and you can not easily compose `new` with `apply`.
 
diff --git a/packages/eslint-config-airbnb-base/rules/es6.js b/packages/eslint-config-airbnb-base/rules/es6.js
index 02c616dad5..835afdd319 100644
--- a/packages/eslint-config-airbnb-base/rules/es6.js
+++ b/packages/eslint-config-airbnb-base/rules/es6.js
@@ -146,7 +146,7 @@ module.exports = {
     // https://eslint.org/docs/rules/prefer-rest-params
     'prefer-rest-params': 'error',
 
-    // suggest using the spread operator instead of .apply()
+    // suggest using the spread syntax instead of .apply()
     // https://eslint.org/docs/rules/prefer-spread
     'prefer-spread': 'error',
 

From d5d406a849f03b8ce1bc8848acb7ef1690d29c85 Mon Sep 17 00:00:00 2001
From: amirvatani <amirhosseinvatani75@gmail.com>
Date: Sun, 9 May 2021 00:10:31 -0700
Subject: [PATCH 1481/1591] [readme] add AloPeyk to "in the wild"

---
 README.md | 1 +
 1 file changed, 1 insertion(+)

diff --git a/README.md b/README.md
index c90eba926b..cf0be8e37c 100644
--- a/README.md
+++ b/README.md
@@ -3846,6 +3846,7 @@ Other Style Guides
   - **4Catalyzer**: [4Catalyzer/javascript](https://github.com/4Catalyzer/javascript)
   - **Aan Zee**: [AanZee/javascript](https://github.com/AanZee/javascript)
   - **Airbnb**: [airbnb/javascript](https://github.com/airbnb/javascript)
+  - **AloPeyk**: [AloPeyk](https://github.com/AloPeyk)
   - **AltSchool**: [AltSchool/javascript](https://github.com/AltSchool/javascript)
   - **Apartmint**: [apartmint/javascript](https://github.com/apartmint/javascript)
   - **Ascribe**: [ascribe/javascript](https://github.com/ascribe/javascript)

From af8bdf17ddf7752021ef6cbfe5c23ac8fb307f26 Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Tue, 29 Jun 2021 09:56:18 -0700
Subject: [PATCH 1482/1591] [*] [deps] update `object.entries`

---
 packages/eslint-config-airbnb-base/package.json | 2 +-
 packages/eslint-config-airbnb/package.json      | 2 +-
 2 files changed, 2 insertions(+), 2 deletions(-)

diff --git a/packages/eslint-config-airbnb-base/package.json b/packages/eslint-config-airbnb-base/package.json
index 10a35679e0..bc9ad248a0 100644
--- a/packages/eslint-config-airbnb-base/package.json
+++ b/packages/eslint-config-airbnb-base/package.json
@@ -74,6 +74,6 @@
   "dependencies": {
     "confusing-browser-globals": "^1.0.10",
     "object.assign": "^4.1.2",
-    "object.entries": "^1.1.3"
+    "object.entries": "^1.1.4"
   }
 }
diff --git a/packages/eslint-config-airbnb/package.json b/packages/eslint-config-airbnb/package.json
index be32b6e667..c16dde4a4e 100644
--- a/packages/eslint-config-airbnb/package.json
+++ b/packages/eslint-config-airbnb/package.json
@@ -56,7 +56,7 @@
   "dependencies": {
     "eslint-config-airbnb-base": "^14.2.1",
     "object.assign": "^4.1.2",
-    "object.entries": "^1.1.3"
+    "object.entries": "^1.1.4"
   },
   "devDependencies": {
     "@babel/runtime": "^7.13.10",

From 428c9ddb7e27466c74fb3b02d20d427d8500f7c9 Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Tue, 29 Jun 2021 10:03:15 -0700
Subject: [PATCH 1483/1591] [*] [deps] update `@babel/runtime`,
 `eslint-plugin-import`, `eslint-plugin-react`

---
 packages/eslint-config-airbnb-base/.eslintrc        |  2 ++
 packages/eslint-config-airbnb-base/package.json     |  6 +++---
 packages/eslint-config-airbnb-base/rules/imports.js | 12 ++++++++++++
 packages/eslint-config-airbnb/package.json          |  6 +++---
 4 files changed, 20 insertions(+), 6 deletions(-)

diff --git a/packages/eslint-config-airbnb-base/.eslintrc b/packages/eslint-config-airbnb-base/.eslintrc
index ab2c306fd9..7606a50a46 100644
--- a/packages/eslint-config-airbnb-base/.eslintrc
+++ b/packages/eslint-config-airbnb-base/.eslintrc
@@ -4,5 +4,7 @@
     // disable requiring trailing commas because it might be nice to revert to
     // being JSON at some point, and I don't want to make big changes now.
     "comma-dangle": 0,
+
+    "max-len": 0,
   },
 }
diff --git a/packages/eslint-config-airbnb-base/package.json b/packages/eslint-config-airbnb-base/package.json
index bc9ad248a0..4da8fcd9bc 100644
--- a/packages/eslint-config-airbnb-base/package.json
+++ b/packages/eslint-config-airbnb-base/package.json
@@ -53,20 +53,20 @@
   },
   "homepage": "https://github.com/airbnb/javascript",
   "devDependencies": {
-    "@babel/runtime": "^7.12.5",
+    "@babel/runtime": "^7.14.6",
     "babel-preset-airbnb": "^4.5.0",
     "babel-tape-runner": "^3.0.0",
     "eclint": "^2.8.1",
     "eslint": "^5.16.0 || ^6.8.0 || ^7.2.0",
     "eslint-find-rules": "^3.6.1",
-    "eslint-plugin-import": "^2.22.1",
+    "eslint-plugin-import": "^2.23.4",
     "in-publish": "^2.0.1",
     "safe-publish-latest": "^1.1.4",
     "tape": "^5.2.2"
   },
   "peerDependencies": {
     "eslint": "^5.16.0 || ^6.8.0 || ^7.2.0",
-    "eslint-plugin-import": "^2.22.1"
+    "eslint-plugin-import": "^2.23.4"
   },
   "engines": {
     "node": ">= 6"
diff --git a/packages/eslint-config-airbnb-base/rules/imports.js b/packages/eslint-config-airbnb-base/rules/imports.js
index ca91e9fc93..f3a477b4b5 100644
--- a/packages/eslint-config-airbnb-base/rules/imports.js
+++ b/packages/eslint-config-airbnb-base/rules/imports.js
@@ -259,5 +259,17 @@ module.exports = {
       missingExports: true,
       unusedExports: true,
     }],
+
+    // Reports the use of import declarations with CommonJS exports in any module except for the main module.
+    // https://github.com/benmosher/eslint-plugin-import/blob/1012eb951767279ce3b540a4ec4f29236104bb5b/docs/rules/no-import-module-exports.md
+    // TODO: enable, semver-major
+    'import/no-import-module-exports': ['off', {
+      exceptions: [],
+    }],
+
+    // Use this rule to prevent importing packages through relative paths.
+    // https://github.com/benmosher/eslint-plugin-import/blob/1012eb951767279ce3b540a4ec4f29236104bb5b/docs/rules/no-relative-packages.md
+    // TODO: enable, semver-major
+    'import/no-relative-packages': 'off',
   },
 };
diff --git a/packages/eslint-config-airbnb/package.json b/packages/eslint-config-airbnb/package.json
index c16dde4a4e..941fff4869 100644
--- a/packages/eslint-config-airbnb/package.json
+++ b/packages/eslint-config-airbnb/package.json
@@ -59,15 +59,15 @@
     "object.entries": "^1.1.4"
   },
   "devDependencies": {
-    "@babel/runtime": "^7.13.10",
+    "@babel/runtime": "^7.14.6",
     "babel-preset-airbnb": "^4.5.0",
     "babel-tape-runner": "^3.0.0",
     "eclint": "^2.8.1",
     "eslint": "^5.16.0 || ^6.8.0 || ^7.2.0",
     "eslint-find-rules": "^3.6.1",
-    "eslint-plugin-import": "^2.22.1",
+    "eslint-plugin-import": "^2.23.4",
     "eslint-plugin-jsx-a11y": "^6.4.1",
-    "eslint-plugin-react": "^7.23.1",
+    "eslint-plugin-react": "^7.24.0",
     "eslint-plugin-react-hooks": "^4.0.1 || ^3 || ^2.3.0 || ^1.7.0",
     "in-publish": "^2.0.1",
     "react": ">= 0.13.0",

From f5c14cae2ff58000cead98290b8ec4b54dda2f14 Mon Sep 17 00:00:00 2001
From: Luke Ingalls <lukeingalls@me.com>
Date: Fri, 18 Jun 2021 19:49:13 -0600
Subject: [PATCH 1484/1591] [readme] fixed typo and removed redundancy

---
 README.md | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/README.md b/README.md
index cf0be8e37c..b4e9d4f7a4 100644
--- a/README.md
+++ b/README.md
@@ -1260,7 +1260,7 @@ Other Style Guides
     ```
 
   <a name="classes--methods-use-this"></a>
-  - [9.7](#classes--methods-use-this) Class methods should use `this` or be made into a static method unless an external library or framework requires to use specific non-static methods. Being an instance method should indicate that it behaves differently based on properties of the receiver. eslint: [`class-methods-use-this`](https://eslint.org/docs/rules/class-methods-use-this)
+  - [9.7](#classes--methods-use-this) Class methods should use `this` or be made into a static method unless an external library or framework requires using specific non-static methods. Being an instance method should indicate that it behaves differently based on properties of the receiver. eslint: [`class-methods-use-this`](https://eslint.org/docs/rules/class-methods-use-this)
 
     ```javascript
     // bad
@@ -3102,7 +3102,7 @@ Other Style Guides
   <a name="semicolons--required"></a><a name="20.1"></a>
   - [21.1](#semicolons--required) **Yup.** eslint: [`semi`](https://eslint.org/docs/rules/semi.html)
 
-    > Why? When JavaScript encounters a line break without a semicolon, it uses a set of rules called [Automatic Semicolon Insertion](https://tc39.github.io/ecma262/#sec-automatic-semicolon-insertion) to determine whether or not it should regard that line break as the end of a statement, and (as the name implies) place a semicolon into your code before the line break if it thinks so. ASI contains a few eccentric behaviors, though, and your code will break if JavaScript misinterprets your line break. These rules will become more complicated as new features become a part of JavaScript. Explicitly terminating your statements and configuring your linter to catch missing semicolons will help prevent you from encountering issues.
+    > Why? When JavaScript encounters a line break without a semicolon, it uses a set of rules called [Automatic Semicolon Insertion](https://tc39.github.io/ecma262/#sec-automatic-semicolon-insertion) to determine whether it should regard that line break as the end of a statement, and (as the name implies) place a semicolon into your code before the line break if it thinks so. ASI contains a few eccentric behaviors, though, and your code will break if JavaScript misinterprets your line break. These rules will become more complicated as new features become a part of JavaScript. Explicitly terminating your statements and configuring your linter to catch missing semicolons will help prevent you from encountering issues.
 
     ```javascript
     // bad - raises exception

From 30927d25036805a36d15ca71742f5a17bc6a1642 Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Tue, 28 Sep 2021 21:41:06 -0700
Subject: [PATCH 1485/1591] [*] [deps] update `@babel/runtime`,
 `eslint-plugin-import`, `tape`

---
 packages/eslint-config-airbnb-base/package.json | 8 ++++----
 packages/eslint-config-airbnb/package.json      | 8 ++++----
 2 files changed, 8 insertions(+), 8 deletions(-)

diff --git a/packages/eslint-config-airbnb-base/package.json b/packages/eslint-config-airbnb-base/package.json
index 4da8fcd9bc..4a914cd441 100644
--- a/packages/eslint-config-airbnb-base/package.json
+++ b/packages/eslint-config-airbnb-base/package.json
@@ -53,20 +53,20 @@
   },
   "homepage": "https://github.com/airbnb/javascript",
   "devDependencies": {
-    "@babel/runtime": "^7.14.6",
+    "@babel/runtime": "^7.15.4",
     "babel-preset-airbnb": "^4.5.0",
     "babel-tape-runner": "^3.0.0",
     "eclint": "^2.8.1",
     "eslint": "^5.16.0 || ^6.8.0 || ^7.2.0",
     "eslint-find-rules": "^3.6.1",
-    "eslint-plugin-import": "^2.23.4",
+    "eslint-plugin-import": "^2.24.2",
     "in-publish": "^2.0.1",
     "safe-publish-latest": "^1.1.4",
-    "tape": "^5.2.2"
+    "tape": "^5.3.1"
   },
   "peerDependencies": {
     "eslint": "^5.16.0 || ^6.8.0 || ^7.2.0",
-    "eslint-plugin-import": "^2.23.4"
+    "eslint-plugin-import": "^2.24.2"
   },
   "engines": {
     "node": ">= 6"
diff --git a/packages/eslint-config-airbnb/package.json b/packages/eslint-config-airbnb/package.json
index 941fff4869..28c3346c6b 100644
--- a/packages/eslint-config-airbnb/package.json
+++ b/packages/eslint-config-airbnb/package.json
@@ -59,24 +59,24 @@
     "object.entries": "^1.1.4"
   },
   "devDependencies": {
-    "@babel/runtime": "^7.14.6",
+    "@babel/runtime": "^7.15.4",
     "babel-preset-airbnb": "^4.5.0",
     "babel-tape-runner": "^3.0.0",
     "eclint": "^2.8.1",
     "eslint": "^5.16.0 || ^6.8.0 || ^7.2.0",
     "eslint-find-rules": "^3.6.1",
-    "eslint-plugin-import": "^2.23.4",
+    "eslint-plugin-import": "^2.24.2",
     "eslint-plugin-jsx-a11y": "^6.4.1",
     "eslint-plugin-react": "^7.24.0",
     "eslint-plugin-react-hooks": "^4.0.1 || ^3 || ^2.3.0 || ^1.7.0",
     "in-publish": "^2.0.1",
     "react": ">= 0.13.0",
     "safe-publish-latest": "^1.1.4",
-    "tape": "^5.2.2"
+    "tape": "^5.3.1"
   },
   "peerDependencies": {
     "eslint": "^5.16.0 || ^6.8.0 || ^7.2.0",
-    "eslint-plugin-import": "^2.22.1",
+    "eslint-plugin-import": "^2.24.2",
     "eslint-plugin-jsx-a11y": "^6.4.1",
     "eslint-plugin-react": "^7.23.1",
     "eslint-plugin-react-hooks": "^4.0.1 || ^3 || ^2.3.0 || ^1.7.0"

From 7fbed3b55c9815251d1a9790f42ce7b278687a47 Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Tue, 28 Sep 2021 21:44:21 -0700
Subject: [PATCH 1486/1591] [eslint-config-airbnb] [deps] update
 `eslint-plugin-react`

---
 packages/eslint-config-airbnb/package.json   |  4 ++--
 packages/eslint-config-airbnb/rules/react.js | 10 ++++++++++
 2 files changed, 12 insertions(+), 2 deletions(-)

diff --git a/packages/eslint-config-airbnb/package.json b/packages/eslint-config-airbnb/package.json
index 28c3346c6b..eb19d6aac8 100644
--- a/packages/eslint-config-airbnb/package.json
+++ b/packages/eslint-config-airbnb/package.json
@@ -67,7 +67,7 @@
     "eslint-find-rules": "^3.6.1",
     "eslint-plugin-import": "^2.24.2",
     "eslint-plugin-jsx-a11y": "^6.4.1",
-    "eslint-plugin-react": "^7.24.0",
+    "eslint-plugin-react": "^7.26.0",
     "eslint-plugin-react-hooks": "^4.0.1 || ^3 || ^2.3.0 || ^1.7.0",
     "in-publish": "^2.0.1",
     "react": ">= 0.13.0",
@@ -78,7 +78,7 @@
     "eslint": "^5.16.0 || ^6.8.0 || ^7.2.0",
     "eslint-plugin-import": "^2.24.2",
     "eslint-plugin-jsx-a11y": "^6.4.1",
-    "eslint-plugin-react": "^7.23.1",
+    "eslint-plugin-react": "^7.26.0",
     "eslint-plugin-react-hooks": "^4.0.1 || ^3 || ^2.3.0 || ^1.7.0"
   },
   "engines": {
diff --git a/packages/eslint-config-airbnb/rules/react.js b/packages/eslint-config-airbnb/rules/react.js
index a077e4c113..b72387afa5 100644
--- a/packages/eslint-config-airbnb/rules/react.js
+++ b/packages/eslint-config-airbnb/rules/react.js
@@ -545,6 +545,16 @@ module.exports = {
     // https://github.com/yannickcr/eslint-plugin-react/blob/c2a790a3472eea0f6de984bdc3ee2a62197417fb/docs/rules/no-unstable-nested-components.md
     // TODO: enable, semver-major
     'react/no-unstable-nested-components': 'off',
+
+    // Enforce that namespaces are not used in React elements
+    // https://github.com/yannickcr/eslint-plugin-react/blob/8785c169c25b09b33c95655bf508cf46263bc53f/docs/rules/no-namespace.md
+    // TODO: enable, semver-minor
+    'react/no-namespace': 'off',
+
+    // Prefer exact proptype definitions
+    // https://github.com/yannickcr/eslint-plugin-react/blob/8785c169c25b09b33c95655bf508cf46263bc53f/docs/rules/prefer-exact-props.md
+    // TODO: enable, semver-major, just in case
+    'react/prefer-exact-props': 'off',
   },
 
   settings: {

From 4ee732639396362c6981b1aa4730934c3baa7919 Mon Sep 17 00:00:00 2001
From: Marko Schulz <Marko.Schulz@gmail.com>
Date: Fri, 24 Sep 2021 11:26:03 +0200
Subject: [PATCH 1487/1591] [eslint-config-airbnb] [patch] Explain why
 `react/jsx-key` is turned off

---
 packages/eslint-config-airbnb/rules/react.js | 1 +
 1 file changed, 1 insertion(+)

diff --git a/packages/eslint-config-airbnb/rules/react.js b/packages/eslint-config-airbnb/rules/react.js
index b72387afa5..ca16948432 100644
--- a/packages/eslint-config-airbnb/rules/react.js
+++ b/packages/eslint-config-airbnb/rules/react.js
@@ -91,6 +91,7 @@ module.exports = {
 
     // Validate JSX has key prop when in array or iterator
     // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/jsx-key.md
+    // Turned off because it has too many false positives
     'react/jsx-key': 'off',
 
     // Limit maximum of props on a single line in JSX

From 122788230acdc416e3168e07f7d0bf89a744dd94 Mon Sep 17 00:00:00 2001
From: Mustafa Haddara <mhaddara@pagerduty.com>
Date: Fri, 15 Oct 2021 17:00:15 -0400
Subject: [PATCH 1488/1591] [eslint config] clarify hooks requirement

---
 packages/eslint-config-airbnb/README.md | 6 ++++--
 1 file changed, 4 insertions(+), 2 deletions(-)

diff --git a/packages/eslint-config-airbnb/README.md b/packages/eslint-config-airbnb/README.md
index 9cb0270467..854f45a309 100644
--- a/packages/eslint-config-airbnb/README.md
+++ b/packages/eslint-config-airbnb/README.md
@@ -10,7 +10,9 @@ We export three ESLint configurations for your usage.
 
 ### eslint-config-airbnb
 
-Our default export contains all of our ESLint rules, including ECMAScript 6+ and React. It requires `eslint`, `eslint-plugin-import`, `eslint-plugin-react`, `eslint-plugin-react-hooks`, and `eslint-plugin-jsx-a11y`. If you don't need React, see [eslint-config-airbnb-base](https://npmjs.com/eslint-config-airbnb-base).
+Our default export contains most of our ESLint rules, including ECMAScript 6+ and React. It requires `eslint`, `eslint-plugin-import`, `eslint-plugin-react`, `eslint-plugin-react-hooks`, and `eslint-plugin-jsx-a11y`. Note that it does not enable our React Hooks rules. To enable those, see the [`eslint-config-airbnb/hooks` section](#eslint-config-airbnbhooks).
+
+If you don't need React, see [eslint-config-airbnb-base](https://npmjs.com/eslint-config-airbnb-base).
 
 1. Install the correct versions of each package, which are listed by the command:
 
@@ -58,7 +60,7 @@ Our default export contains all of our ESLint rules, including ECMAScript 6+ and
 
 ### eslint-config-airbnb/hooks
 
-This entry point enables the linting rules for React hooks (requires v16.8+). To use, add `"extends": ["airbnb", "airbnb/hooks"]` to your `.eslintrc`
+This entry point enables the linting rules for React hooks (requires v16.8+). To use, add `"extends": ["airbnb", "airbnb/hooks"]` to your `.eslintrc`.
 
 ### eslint-config-airbnb/whitespace
 

From 82dbec3c995687fd6e08151c6d97768f6d970d56 Mon Sep 17 00:00:00 2001
From: Johnwesley R <jwr12135@gmail.com>
Date: Sun, 17 Oct 2021 14:27:43 -0400
Subject: [PATCH 1489/1591] [guide] Fix 14.1 Temporal Dead Zones link

---
 README.md | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/README.md b/README.md
index b4e9d4f7a4..bab7f334b5 100644
--- a/README.md
+++ b/README.md
@@ -1863,7 +1863,7 @@ Other Style Guides
 ## Hoisting
 
   <a name="hoisting--about"></a><a name="14.1"></a>
-  - [14.1](#hoisting--about) `var` declarations get hoisted to the top of their closest enclosing function scope, their assignment does not. `const` and `let` declarations are blessed with a new concept called [Temporal Dead Zones (TDZ)](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/let#Temporal_dead_zone). It’s important to know why [typeof is no longer safe](https://web.archive.org/web/20200121061528/http://es-discourse.com/t/why-typeof-is-no-longer-safe/15).
+  - [14.1](#hoisting--about) `var` declarations get hoisted to the top of their closest enclosing function scope, their assignment does not. `const` and `let` declarations are blessed with a new concept called [Temporal Dead Zones (TDZ)](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/let#temporal_dead_zone_tdz). It’s important to know why [typeof is no longer safe](https://web.archive.org/web/20200121061528/http://es-discourse.com/t/why-typeof-is-no-longer-safe/15).
 
     ```javascript
     // we know this wouldn’t work (assuming there

From 2a6bec1132c937c3f512da083c759bbd7da4ce90 Mon Sep 17 00:00:00 2001
From: Augustus Buonviri <augustus.buonviri@stratusgrid.com>
Date: Tue, 14 Sep 2021 22:12:31 -0400
Subject: [PATCH 1490/1591] [eslint config] [base] [patch] Improve
 `function-paren-newline` with `multiline-arguments` option

Related to #1731

Co-authored-by: Augustus Buonviri <augustus.buonviri@stratusgrid.com>
Co-authored-by: Jordan Harband <ljharb@gmail.com>
---
 packages/eslint-config-airbnb-base/package.json   | 3 ++-
 packages/eslint-config-airbnb-base/rules/style.js | 7 +++++--
 2 files changed, 7 insertions(+), 3 deletions(-)

diff --git a/packages/eslint-config-airbnb-base/package.json b/packages/eslint-config-airbnb-base/package.json
index 4a914cd441..27145b2d5a 100644
--- a/packages/eslint-config-airbnb-base/package.json
+++ b/packages/eslint-config-airbnb-base/package.json
@@ -74,6 +74,7 @@
   "dependencies": {
     "confusing-browser-globals": "^1.0.10",
     "object.assign": "^4.1.2",
-    "object.entries": "^1.1.4"
+    "object.entries": "^1.1.4",
+    "semver": "^6.3.0"
   }
 }
diff --git a/packages/eslint-config-airbnb-base/rules/style.js b/packages/eslint-config-airbnb-base/rules/style.js
index c988fe5f3a..d73ddefb1d 100644
--- a/packages/eslint-config-airbnb-base/rules/style.js
+++ b/packages/eslint-config-airbnb-base/rules/style.js
@@ -1,3 +1,6 @@
+const semver = require('semver');
+const eslintPkg = require('eslint/package.json');
+
 module.exports = {
   rules: {
     // enforce line breaks after opening and before closing array brackets
@@ -101,9 +104,9 @@ module.exports = {
     // TODO: enable
     'func-style': ['off', 'expression'],
 
-    // enforce consistent line breaks inside function parentheses
+    // require line breaks inside function parentheses if there are line breaks between parameters
     // https://eslint.org/docs/rules/function-paren-newline
-    'function-paren-newline': ['error', 'consistent'],
+    'function-paren-newline': ['error', semver.satisfies(eslintPkg.version, '>= 6') ? 'multiline-arguments' : 'consistent'],
 
     // Blacklist certain identifiers to prevent them being used
     // https://eslint.org/docs/rules/id-blacklist

From ea5b991a4f67264a7d3a2d783de67b29450f2779 Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Thu, 4 Nov 2021 23:05:04 -0700
Subject: [PATCH 1491/1591] [Tests] migrate tests to Github Actions

---
 .github/workflows/node-pretest.yml        |  26 ++++
 .github/workflows/node.yml                | 155 ++++++++++++++++++++++
 .github/workflows/rebase.yml              |  15 +++
 .github/workflows/require-allow-edits.yml |  12 ++
 .travis.yml                               | 108 ---------------
 5 files changed, 208 insertions(+), 108 deletions(-)
 create mode 100644 .github/workflows/node-pretest.yml
 create mode 100644 .github/workflows/node.yml
 create mode 100644 .github/workflows/rebase.yml
 create mode 100644 .github/workflows/require-allow-edits.yml
 delete mode 100644 .travis.yml

diff --git a/.github/workflows/node-pretest.yml b/.github/workflows/node-pretest.yml
new file mode 100644
index 0000000000..48c68f5955
--- /dev/null
+++ b/.github/workflows/node-pretest.yml
@@ -0,0 +1,26 @@
+name: 'Tests: pretest/posttest'
+
+on: [pull_request, push]
+
+jobs:
+  pretest:
+    runs-on: ubuntu-latest
+    strategy:
+      fail-fast: false
+      matrix:
+        package:
+          - '..'
+          - eslint-config-airbnb
+          - eslint-config-airbnb-base
+
+    defaults:
+      run:
+        working-directory: "packages/${{ matrix.package }}"
+
+    steps:
+      - uses: actions/checkout@v2
+      - uses: ljharb/actions/node/install@main
+        name: 'nvm install lts/* && npm install'
+        with:
+          node-version: 'lts/*'
+      - run: npm run pretest
diff --git a/.github/workflows/node.yml b/.github/workflows/node.yml
new file mode 100644
index 0000000000..1a1e5e5216
--- /dev/null
+++ b/.github/workflows/node.yml
@@ -0,0 +1,155 @@
+name: 'Tests: node.js'
+
+on: [pull_request, push]
+
+jobs:
+  matrix:
+    runs-on: ubuntu-latest
+    outputs:
+      latest: ${{ steps.set-matrix.outputs.requireds }}
+    steps:
+      - uses: ljharb/actions/node/matrix@main
+        id: set-matrix
+        with:
+          versionsAsRoot: true
+          type: 'majors'
+          preset: '^10 || ^12 || ^14 || ^16 || >= 17'
+
+  base:
+    needs: [matrix]
+    name: 'base config'
+    runs-on: ubuntu-latest
+
+    strategy:
+      fail-fast: false
+      matrix:
+        node-version: ${{ fromJson(needs.matrix.outputs.latest) }}
+        eslint:
+          - 7
+          - 6
+          - 5
+        package:
+          - eslint-config-airbnb-base
+
+    defaults:
+      run:
+        working-directory: "packages/${{ matrix.package }}"
+
+    steps:
+      - uses: actions/checkout@v2
+      - uses: ljharb/actions/node/install@main
+        name: 'nvm install ${{ matrix.node-version }} && npm install'
+        with:
+          node-version: ${{ matrix.node-version }}
+      - run: npm run travis
+      - uses: codecov/codecov-action@v2
+
+  react:
+    needs: [matrix]
+    name: 'react config'
+    runs-on: ubuntu-latest
+
+    strategy:
+      fail-fast: false
+      matrix:
+        node-version: ${{ fromJson(needs.matrix.outputs.latest) }}
+        eslint:
+          - 7
+          - 6
+          - 5
+        package:
+          - eslint-config-airbnb
+        react-hooks:
+          - ''
+          - 3
+          - 2.3
+          - 1.7
+
+    defaults:
+      run:
+        working-directory: "packages/${{ matrix.package }}"
+
+    steps:
+      - uses: actions/checkout@v2
+      - uses: ljharb/actions/node/install@main
+        name: 'nvm install ${{ matrix.node-version }} && npm install'
+        with:
+          node-version: ${{ matrix.node-version }}
+          after_install: |
+            npm install --no-save "eslint@${{ matrix.eslint }}"
+      - run: npm install --no-save "eslint-plugin-react-hooks@${{ matrix.react-hooks }}"
+        if: ${{ matrix.react-hooks > 0}}
+      - run: npm run travis
+      - uses: codecov/codecov-action@v2
+
+  prepublish-base:
+    name: 'prepublish tests (base config)'
+    runs-on: ubuntu-latest
+    strategy:
+      fail-fast: false
+      matrix:
+        eslint:
+          - 7
+          - 6
+          - 5
+        package:
+          - eslint-config-airbnb-base
+
+    defaults:
+      run:
+        working-directory: "packages/${{ matrix.package }}"
+
+    steps:
+      - uses: actions/checkout@v2
+      - uses: ljharb/actions/node/install@main
+        name: 'nvm install ${{ matrix.node-version }} && npm install'
+        with:
+          node-version: lts/*
+          after_install: |
+            npm install --no-save "eslint@${{ matrix.eslint }}"
+      - run: npm run pretravis
+      - run: npm run prepublish
+      - run: npm run posttravis
+
+  prepublish-react:
+    name: 'prepublish tests (react config)'
+    runs-on: ubuntu-latest
+    strategy:
+      fail-fast: false
+      matrix:
+        eslint:
+          - 7
+          - 6
+          - 5
+        package:
+          - eslint-config-airbnb
+        react-hooks:
+          - ''
+          - 3
+          - 2.3
+          - 1.7
+
+    defaults:
+      run:
+        working-directory: "packages/${{ matrix.package }}"
+
+    steps:
+      - uses: actions/checkout@v2
+      - uses: ljharb/actions/node/install@main
+        name: 'nvm install ${{ matrix.node-version }} && npm install'
+        with:
+          node-version: lts/*
+          after_install: |
+            npm install --no-save "eslint@${{ matrix.eslint }}"
+      - run: npm install --no-save "eslint-plugin-react-hooks@${{ matrix.react-hooks }}"
+        if: ${{ matrix.react-hooks > 0}}
+      - run: npm run pretravis
+      - run: npm run prepublish
+      - run: npm run posttravis
+
+  node:
+    name: 'node 10+'
+    needs: [base, prepublish-base, react, prepublish-react]
+    runs-on: ubuntu-latest
+    steps:
+      - run: 'echo tests completed'
diff --git a/.github/workflows/rebase.yml b/.github/workflows/rebase.yml
new file mode 100644
index 0000000000..027aed0797
--- /dev/null
+++ b/.github/workflows/rebase.yml
@@ -0,0 +1,15 @@
+name: Automatic Rebase
+
+on: [pull_request_target]
+
+jobs:
+  _:
+    name: "Automatic Rebase"
+
+    runs-on: ubuntu-latest
+
+    steps:
+    - uses: actions/checkout@v2
+    - uses: ljharb/rebase@master
+      env:
+        GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
diff --git a/.github/workflows/require-allow-edits.yml b/.github/workflows/require-allow-edits.yml
new file mode 100644
index 0000000000..549d7b4823
--- /dev/null
+++ b/.github/workflows/require-allow-edits.yml
@@ -0,0 +1,12 @@
+name: Require “Allow Edits”
+
+on: [pull_request_target]
+
+jobs:
+  _:
+    name: "Require “Allow Edits”"
+
+    runs-on: ubuntu-latest
+
+    steps:
+    - uses: ljharb/require-allow-edits@main
diff --git a/.travis.yml b/.travis.yml
deleted file mode 100644
index b7eb96d7ae..0000000000
--- a/.travis.yml
+++ /dev/null
@@ -1,108 +0,0 @@
-language: node_js
-node_js:
-  - "14"
-  - "12"
-  - "10"
-before_install:
-  - 'nvm install-latest-npm'
-install:
-  - 'if [ -n "${PACKAGE-}" ]; then cd "packages/${PACKAGE}"; fi'
-  - 'if [ "${TRAVIS_NODE_VERSION}" = "0.6" ] || [ "${TRAVIS_NODE_VERSION}" = "0.9" ]; then nvm install --latest-npm 0.8 && npm install && nvm use "${TRAVIS_NODE_VERSION}"; else npm install; fi;'
-  - 'if [ -n "${ESLINT}" ]; then npm install --no-save "eslint@${ESLINT}"; fi'
-  - 'if [ -n "${REACT_HOOKS}" ]; then npm install --no-save "eslint-plugin-react-hooks@${REACT_HOOKS}"; fi'
-script:
-  - 'if [ -n "${PREPUBLISH-}" ]; then npm run pretravis && npm run prepublish && npm run posttravis; elif [ -n "${LINT-}" ]; then npm run lint; else npm run travis; fi'
-sudo: false
-env:
-  matrix:
-    - 'TEST=true ESLINT=7 PACKAGE=eslint-config-airbnb-base'
-    - 'TEST=true ESLINT=7 PACKAGE=eslint-config-airbnb'
-    - 'TEST=true ESLINT=7 REACT_HOOKS=3 PACKAGE=eslint-config-airbnb'
-    - 'TEST=true ESLINT=7 REACT_HOOKS=2.3 PACKAGE=eslint-config-airbnb'
-    - 'TEST=true ESLINT=7 REACT_HOOKS=1.7 PACKAGE=eslint-config-airbnb'
-    - 'TEST=true ESLINT=6 PACKAGE=eslint-config-airbnb-base'
-    - 'TEST=true ESLINT=6 PACKAGE=eslint-config-airbnb'
-    - 'TEST=true ESLINT=6 REACT_HOOKS=3 PACKAGE=eslint-config-airbnb'
-    - 'TEST=true ESLINT=6 REACT_HOOKS=2.3 PACKAGE=eslint-config-airbnb'
-    - 'TEST=true ESLINT=6 REACT_HOOKS=1.7 PACKAGE=eslint-config-airbnb'
-    - 'TEST=true ESLINT=5 PACKAGE=eslint-config-airbnb-base'
-    - 'TEST=true ESLINT=5 PACKAGE=eslint-config-airbnb'
-    - 'TEST=true ESLINT=5 REACT_HOOKS=3 PACKAGE=eslint-config-airbnb'
-    - 'TEST=true ESLINT=5 REACT_HOOKS=2.3 PACKAGE=eslint-config-airbnb'
-    - 'TEST=true ESLINT=5 REACT_HOOKS=1.7 PACKAGE=eslint-config-airbnb'
-matrix:
-  fast_finish: true
-  include:
-    - node_js: "lts/*"
-      env: PREPUBLISH=true ESLINT=7 PACKAGE=eslint-config-airbnb-base
-    - node_js: "lts/*"
-      env: PREPUBLISH=true ESLINT=7 PACKAGE=eslint-config-airbnb
-    - node_js: "lts/*"
-      env: PREPUBLISH=true ESLINT=7 REACT_HOOKS=3 PACKAGE=eslint-config-airbnb
-    - node_js: "lts/*"
-      env: PREPUBLISH=true ESLINT=7 REACT_HOOKS=2.3 PACKAGE=eslint-config-airbnb
-    - node_js: "lts/*"
-      env: PREPUBLISH=true ESLINT=7 REACT_HOOKS=1.7 PACKAGE=eslint-config-airbnb
-    - node_js: "lts/*"
-    - node_js: "lts/*"
-      env: PREPUBLISH=true ESLINT=6 PACKAGE=eslint-config-airbnb-base
-    - node_js: "lts/*"
-      env: PREPUBLISH=true ESLINT=6 PACKAGE=eslint-config-airbnb
-    - node_js: "lts/*"
-      env: PREPUBLISH=true ESLINT=6 REACT_HOOKS=3 PACKAGE=eslint-config-airbnb
-    - node_js: "lts/*"
-      env: PREPUBLISH=true ESLINT=6 REACT_HOOKS=2.3 PACKAGE=eslint-config-airbnb
-    - node_js: "lts/*"
-      env: PREPUBLISH=true ESLINT=6 REACT_HOOKS=1.7 PACKAGE=eslint-config-airbnb
-    - node_js: "lts/*"
-      env: PREPUBLISH=true ESLINT=5 PACKAGE=eslint-config-airbnb-base
-    - node_js: "lts/*"
-      env: PREPUBLISH=true ESLINT=5 PACKAGE=eslint-config-airbnb
-    - node_js: "lts/*"
-      env: PREPUBLISH=true ESLINT=5 REACT_HOOKS=3 PACKAGE=eslint-config-airbnb
-    - node_js: "lts/*"
-      env: PREPUBLISH=true ESLINT=5 REACT_HOOKS=2.3 PACKAGE=eslint-config-airbnb
-    - node_js: "lts/*"
-      env: PREPUBLISH=true ESLINT=5 REACT_HOOKS=1.7 PACKAGE=eslint-config-airbnb
-    - node_js: "lts/*"
-      env: LINT=true
-    - node_js: "lts/*"
-      env: LINT=true PACKAGE=eslint-config-airbnb
-    - node_js: "lts/*"
-      env: LINT=true PACKAGE=eslint-config-airbnb-base
-    - node_js: "8"
-      env: TEST=true ESLINT=6 PACKAGE=eslint-config-airbnb-base
-    - node_js: "8"
-      env: TEST=true ESLINT=6 PACKAGE=eslint-config-airbnb
-    - node_js: "8"
-      env: TEST=true ESLINT=6 REACT_HOOKS=3 PACKAGE=eslint-config-airbnb
-    - node_js: "8"
-      env: TEST=true ESLINT=6 REACT_HOOKS=2.3 PACKAGE=eslint-config-airbnb
-    - node_js: "8"
-      env: TEST=true ESLINT=6 REACT_HOOKS=1.7 PACKAGE=eslint-config-airbnb
-    - node_js: "8"
-      env: TEST=true ESLINT=5 PACKAGE=eslint-config-airbnb-base
-    - node_js: "8"
-      env: TEST=true ESLINT=5 PACKAGE=eslint-config-airbnb
-    - node_js: "8"
-      env: TEST=true ESLINT=5 REACT_HOOKS=3 PACKAGE=eslint-config-airbnb
-    - node_js: "8"
-      env: TEST=true ESLINT=5 REACT_HOOKS=2.3 PACKAGE=eslint-config-airbnb
-    - node_js: "8"
-      env: TEST=true ESLINT=5 REACT_HOOKS=1.7 PACKAGE=eslint-config-airbnb
-    - node_js: "6"
-      env: TEST=true ESLINT=5 PACKAGE=eslint-config-airbnb-base
-    - node_js: "6"
-      env: TEST=true ESLINT=5 PACKAGE=eslint-config-airbnb
-    - node_js: "6"
-      env: TEST=true ESLINT=5 REACT_HOOKS=3 PACKAGE=eslint-config-airbnb
-    - node_js: "6"
-      env: TEST=true ESLINT=5 REACT_HOOKS=2.3 PACKAGE=eslint-config-airbnb
-    - node_js: "6"
-      env: TEST=true ESLINT=5 REACT_HOOKS=1.7 PACKAGE=eslint-config-airbnb
-  exclude:
-  allow_failures:
-    - env: PREPUBLISH=true ESLINT=6 PACKAGE=eslint-config-airbnb-base
-    - env: PREPUBLISH=true ESLINT=6 PACKAGE=eslint-config-airbnb
-    - env: PREPUBLISH=true ESLINT=5 PACKAGE=eslint-config-airbnb-base
-    - env: PREPUBLISH=true ESLINT=5 PACKAGE=eslint-config-airbnb

From fdc812a0a5773449274f7c4d473e0841eca89614 Mon Sep 17 00:00:00 2001
From: Kai <Schweinepriester@users.noreply.github.com>
Date: Thu, 4 Nov 2021 00:24:41 +0100
Subject: [PATCH 1492/1591] [Docs] HTTP => HTTPS

---
 README.md                                     | 32 +++++++++----------
 .../SublimeLinter.sublime-settings            |  2 +-
 packages/eslint-config-airbnb-base/README.md  |  2 +-
 packages/eslint-config-airbnb/README.md       |  2 +-
 4 files changed, 19 insertions(+), 19 deletions(-)

diff --git a/README.md b/README.md
index bab7f334b5..3fcade31f4 100644
--- a/README.md
+++ b/README.md
@@ -1955,7 +1955,7 @@ Other Style Guides
     }
     ```
 
-  - For more information refer to [JavaScript Scoping & Hoisting](http://www.adequatelygood.com/2010/2/JavaScript-Scoping-and-Hoisting/) by [Ben Cherry](http://www.adequatelygood.com/).
+  - For more information refer to [JavaScript Scoping & Hoisting](https://www.adequatelygood.com/2010/2/JavaScript-Scoping-and-Hoisting/) by [Ben Cherry](https://www.adequatelygood.com/).
 
 **[⬆ back to top](#table-of-contents)**
 
@@ -3622,7 +3622,7 @@ Other Style Guides
     ```
 
   <a name="jquery--queries"></a><a name="25.3"></a>
-  - [26.3](#jquery--queries) For DOM queries use Cascading `$('.sidebar ul')` or parent > child `$('.sidebar > ul')`. [jsPerf](http://jsperf.com/jquery-find-vs-context-sel/16)
+  - [26.3](#jquery--queries) For DOM queries use Cascading `$('.sidebar ul')` or parent > child `$('.sidebar > ul')`. [jsPerf](https://jsperf.com/jquery-find-vs-context-sel/16)
 
   <a name="jquery--find"></a><a name="25.4"></a>
   - [26.4](#jquery--find) Use `find` with scoped jQuery object queries.
@@ -3762,19 +3762,19 @@ Other Style Guides
 **Learning ES6+**
 
   - [Latest ECMA spec](https://tc39.github.io/ecma262/)
-  - [ExploringJS](http://exploringjs.com/)
+  - [ExploringJS](https://exploringjs.com/)
   - [ES6 Compatibility Table](https://kangax.github.io/compat-table/es6/)
   - [Comprehensive Overview of ES6 Features](http://es6-features.org/)
 
 **Read This**
 
-  - [Standard ECMA-262](http://www.ecma-international.org/ecma-262/6.0/index.html)
+  - [Standard ECMA-262](https://www.ecma-international.org/ecma-262/6.0/index.html)
 
 **Tools**
 
   - Code Style Linters
     - [ESlint](https://eslint.org/) - [Airbnb Style .eslintrc](https://github.com/airbnb/javascript/blob/master/linters/.eslintrc)
-    - [JSHint](http://jshint.com/) - [Airbnb Style .jshintrc](https://github.com/airbnb/javascript/blob/master/linters/.jshintrc)
+    - [JSHint](https://jshint.com/) - [Airbnb Style .jshintrc](https://github.com/airbnb/javascript/blob/master/linters/.jshintrc)
   - Neutrino Preset - [@neutrinojs/airbnb](https://neutrinojs.org/packages/airbnb/)
 
 **Other Style Guides**
@@ -3790,13 +3790,13 @@ Other Style Guides
   - [Naming this in nested functions](https://gist.github.com/cjohansen/4135065) - Christian Johansen
   - [Conditional Callbacks](https://github.com/airbnb/javascript/issues/52) - Ross Allen
   - [Popular JavaScript Coding Conventions on GitHub](http://sideeffect.kr/popularconvention/#javascript) - JeongHoon Byun
-  - [Multiple var statements in JavaScript, not superfluous](http://benalman.com/news/2012/05/multiple-var-statements-javascript/) - Ben Alman
+  - [Multiple var statements in JavaScript, not superfluous](https://benalman.com/news/2012/05/multiple-var-statements-javascript/) - Ben Alman
 
 **Further Reading**
 
   - [Understanding JavaScript Closures](https://javascriptweblog.wordpress.com/2010/10/25/understanding-javascript-closures/) - Angus Croll
-  - [Basic JavaScript for the impatient programmer](http://www.2ality.com/2013/06/basic-javascript.html) - Dr. Axel Rauschmayer
-  - [You Might Not Need jQuery](http://youmightnotneedjquery.com/) - Zack Bloom & Adam Schwartz
+  - [Basic JavaScript for the impatient programmer](https://www.2ality.com/2013/06/basic-javascript.html) - Dr. Axel Rauschmayer
+  - [You Might Not Need jQuery](https://youmightnotneedjquery.com/) - Zack Bloom & Adam Schwartz
   - [ES6 Features](https://github.com/lukehoban/es6features) - Luke Hoban
   - [Frontend Guidelines](https://github.com/bendc/frontend-guidelines) - Benjamin De Cock
 
@@ -3813,23 +3813,23 @@ Other Style Guides
   - [Secrets of the JavaScript Ninja](https://www.amazon.com/Secrets-JavaScript-Ninja-John-Resig/dp/193398869X) - John Resig and Bear Bibeault
   - [Human JavaScript](http://humanjavascript.com/) - Henrik Joreteg
   - [Superhero.js](http://superherojs.com/) - Kim Joar Bekkelund, Mads Mobæk, & Olav Bjorkoy
-  - [JSBooks](http://jsbooks.revolunet.com/) - Julien Bouquillon
+  - [JSBooks](https://jsbooks.revolunet.com/) - Julien Bouquillon
   - [Third Party JavaScript](https://www.manning.com/books/third-party-javascript) - Ben Vinegar and Anton Kovalyov
-  - [Effective JavaScript: 68 Specific Ways to Harness the Power of JavaScript](http://amzn.com/0321812182) - David Herman
-  - [Eloquent JavaScript](http://eloquentjavascript.net/) - Marijn Haverbeke
-  - [You Don’t Know JS: ES6 & Beyond](http://shop.oreilly.com/product/0636920033769.do) - Kyle Simpson
+  - [Effective JavaScript: 68 Specific Ways to Harness the Power of JavaScript](https://amzn.com/0321812182) - David Herman
+  - [Eloquent JavaScript](https://eloquentjavascript.net/) - Marijn Haverbeke
+  - [You Don’t Know JS: ES6 & Beyond](https://shop.oreilly.com/product/0636920033769.do) - Kyle Simpson
 
 **Blogs**
 
-  - [JavaScript Weekly](http://javascriptweekly.com/)
+  - [JavaScript Weekly](https://javascriptweekly.com/)
   - [JavaScript, JavaScript...](https://javascriptweblog.wordpress.com/)
   - [Bocoup Weblog](https://bocoup.com/weblog)
-  - [Adequately Good](http://www.adequatelygood.com/)
+  - [Adequately Good](https://www.adequatelygood.com/)
   - [NCZOnline](https://www.nczonline.net/)
   - [Perfection Kills](http://perfectionkills.com/)
-  - [Ben Alman](http://benalman.com/)
+  - [Ben Alman](https://benalman.com/)
   - [Dmitry Baranovskiy](http://dmitry.baranovskiy.com/)
-  - [nettuts](http://code.tutsplus.com/?s=javascript)
+  - [nettuts](https://code.tutsplus.com/?s=javascript)
 
 **Podcasts**
 
diff --git a/linters/SublimeLinter/SublimeLinter.sublime-settings b/linters/SublimeLinter/SublimeLinter.sublime-settings
index 259dbaff6a..7ce44c9821 100644
--- a/linters/SublimeLinter/SublimeLinter.sublime-settings
+++ b/linters/SublimeLinter/SublimeLinter.sublime-settings
@@ -9,7 +9,7 @@
  *
  * @version 0.3.0
  * @see     https://github.com/SublimeLinter/SublimeLinter
- * @see     http://www.jshint.com/docs/
+ * @see     https://www.jshint.com/docs/
  */
 {
   "jshint_options":
diff --git a/packages/eslint-config-airbnb-base/README.md b/packages/eslint-config-airbnb-base/README.md
index 685e50060b..0339618ca3 100644
--- a/packages/eslint-config-airbnb-base/README.md
+++ b/packages/eslint-config-airbnb-base/README.md
@@ -1,6 +1,6 @@
 # eslint-config-airbnb-base
 
-[![npm version](https://badge.fury.io/js/eslint-config-airbnb-base.svg)](http://badge.fury.io/js/eslint-config-airbnb-base)
+[![npm version](https://badge.fury.io/js/eslint-config-airbnb-base.svg)](https://badge.fury.io/js/eslint-config-airbnb-base)
 
 This package provides Airbnb's base JS .eslintrc (without React plugins) as an extensible shared config.
 
diff --git a/packages/eslint-config-airbnb/README.md b/packages/eslint-config-airbnb/README.md
index 854f45a309..3b3f43196d 100644
--- a/packages/eslint-config-airbnb/README.md
+++ b/packages/eslint-config-airbnb/README.md
@@ -1,6 +1,6 @@
 # eslint-config-airbnb
 
-[![npm version](https://badge.fury.io/js/eslint-config-airbnb.svg)](http://badge.fury.io/js/eslint-config-airbnb)
+[![npm version](https://badge.fury.io/js/eslint-config-airbnb.svg)](https://badge.fury.io/js/eslint-config-airbnb)
 
 This package provides Airbnb's .eslintrc as an extensible shared config.
 

From 6734b7891176ce5d2601e16f62b5c37a8479e6ae Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Mon, 8 Nov 2021 16:00:07 -0800
Subject: [PATCH 1493/1591] [eslint config] [*] [deps] update
 `eslint-plugin-import`, `object.entries`

---
 packages/eslint-config-airbnb-base/package.json | 6 +++---
 packages/eslint-config-airbnb/package.json      | 6 +++---
 2 files changed, 6 insertions(+), 6 deletions(-)

diff --git a/packages/eslint-config-airbnb-base/package.json b/packages/eslint-config-airbnb-base/package.json
index 27145b2d5a..d3c711e5d2 100644
--- a/packages/eslint-config-airbnb-base/package.json
+++ b/packages/eslint-config-airbnb-base/package.json
@@ -59,14 +59,14 @@
     "eclint": "^2.8.1",
     "eslint": "^5.16.0 || ^6.8.0 || ^7.2.0",
     "eslint-find-rules": "^3.6.1",
-    "eslint-plugin-import": "^2.24.2",
+    "eslint-plugin-import": "^2.25.2",
     "in-publish": "^2.0.1",
     "safe-publish-latest": "^1.1.4",
     "tape": "^5.3.1"
   },
   "peerDependencies": {
     "eslint": "^5.16.0 || ^6.8.0 || ^7.2.0",
-    "eslint-plugin-import": "^2.24.2"
+    "eslint-plugin-import": "^2.25.2"
   },
   "engines": {
     "node": ">= 6"
@@ -74,7 +74,7 @@
   "dependencies": {
     "confusing-browser-globals": "^1.0.10",
     "object.assign": "^4.1.2",
-    "object.entries": "^1.1.4",
+    "object.entries": "^1.1.5",
     "semver": "^6.3.0"
   }
 }
diff --git a/packages/eslint-config-airbnb/package.json b/packages/eslint-config-airbnb/package.json
index eb19d6aac8..be64da1a86 100644
--- a/packages/eslint-config-airbnb/package.json
+++ b/packages/eslint-config-airbnb/package.json
@@ -56,7 +56,7 @@
   "dependencies": {
     "eslint-config-airbnb-base": "^14.2.1",
     "object.assign": "^4.1.2",
-    "object.entries": "^1.1.4"
+    "object.entries": "^1.1.5"
   },
   "devDependencies": {
     "@babel/runtime": "^7.15.4",
@@ -65,7 +65,7 @@
     "eclint": "^2.8.1",
     "eslint": "^5.16.0 || ^6.8.0 || ^7.2.0",
     "eslint-find-rules": "^3.6.1",
-    "eslint-plugin-import": "^2.24.2",
+    "eslint-plugin-import": "^2.25.2",
     "eslint-plugin-jsx-a11y": "^6.4.1",
     "eslint-plugin-react": "^7.26.0",
     "eslint-plugin-react-hooks": "^4.0.1 || ^3 || ^2.3.0 || ^1.7.0",
@@ -76,7 +76,7 @@
   },
   "peerDependencies": {
     "eslint": "^5.16.0 || ^6.8.0 || ^7.2.0",
-    "eslint-plugin-import": "^2.24.2",
+    "eslint-plugin-import": "^2.25.2",
     "eslint-plugin-jsx-a11y": "^6.4.1",
     "eslint-plugin-react": "^7.26.0",
     "eslint-plugin-react-hooks": "^4.0.1 || ^3 || ^2.3.0 || ^1.7.0"

From ef6c478a2b2b97ccc996ed6169f3f97bff2e5395 Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Mon, 8 Nov 2021 18:06:45 -0800
Subject: [PATCH 1494/1591] [eslint config] [*] [dev deps] update
 `@babel/runtime`

---
 packages/eslint-config-airbnb-base/package.json | 2 +-
 packages/eslint-config-airbnb/package.json      | 2 +-
 2 files changed, 2 insertions(+), 2 deletions(-)

diff --git a/packages/eslint-config-airbnb-base/package.json b/packages/eslint-config-airbnb-base/package.json
index d3c711e5d2..91ba5473b6 100644
--- a/packages/eslint-config-airbnb-base/package.json
+++ b/packages/eslint-config-airbnb-base/package.json
@@ -53,7 +53,7 @@
   },
   "homepage": "https://github.com/airbnb/javascript",
   "devDependencies": {
-    "@babel/runtime": "^7.15.4",
+    "@babel/runtime": "^7.16.0",
     "babel-preset-airbnb": "^4.5.0",
     "babel-tape-runner": "^3.0.0",
     "eclint": "^2.8.1",
diff --git a/packages/eslint-config-airbnb/package.json b/packages/eslint-config-airbnb/package.json
index be64da1a86..ec4efd07b0 100644
--- a/packages/eslint-config-airbnb/package.json
+++ b/packages/eslint-config-airbnb/package.json
@@ -59,7 +59,7 @@
     "object.entries": "^1.1.5"
   },
   "devDependencies": {
-    "@babel/runtime": "^7.15.4",
+    "@babel/runtime": "^7.16.0",
     "babel-preset-airbnb": "^4.5.0",
     "babel-tape-runner": "^3.0.0",
     "eclint": "^2.8.1",

From 10a6d02c665f35826114d66ee8f37bda1d89f59e Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Mon, 8 Nov 2021 21:21:58 -0800
Subject: [PATCH 1495/1591] [meta] use `prepublishOnly` script for npm 7+

---
 packages/eslint-config-airbnb-base/package.json | 3 ++-
 packages/eslint-config-airbnb/package.json      | 3 ++-
 2 files changed, 4 insertions(+), 2 deletions(-)

diff --git a/packages/eslint-config-airbnb-base/package.json b/packages/eslint-config-airbnb-base/package.json
index 91ba5473b6..a5cb181d37 100644
--- a/packages/eslint-config-airbnb-base/package.json
+++ b/packages/eslint-config-airbnb-base/package.json
@@ -8,7 +8,8 @@
     "lint": "eslint --report-unused-disable-directives .",
     "pretests-only": "node ./test/requires",
     "tests-only": "babel-tape-runner ./test/test-*.js",
-    "prepublish": "(in-install || eslint-find-rules --unused) && (not-in-publish || npm test) && safe-publish-latest",
+    "prepublishOnly": "eslint-find-rules --unused && npm test && safe-publish-latest",
+    "prepublish": "not-in-publish || npm run prepublishOnly",
     "pretest": "npm run --silent lint",
     "test": "npm run --silent tests-only",
     "pretravis": ":",
diff --git a/packages/eslint-config-airbnb/package.json b/packages/eslint-config-airbnb/package.json
index ec4efd07b0..dd5a214145 100644
--- a/packages/eslint-config-airbnb/package.json
+++ b/packages/eslint-config-airbnb/package.json
@@ -8,7 +8,8 @@
     "lint": "eslint .",
     "pretests-only": "node ./test/requires",
     "tests-only": "babel-tape-runner ./test/test-*.js",
-    "prepublish": "(in-install || eslint-find-rules --unused) && (not-in-publish || npm test) && safe-publish-latest",
+    "prepublishOnly": "eslint-find-rules --unused && npm test && safe-publish-latest",
+    "prepublish": "not-in-publish || npm run prepublishOnly",
     "pretest": "npm run --silent lint",
     "test": "npm run --silent tests-only",
     "link:eslint": "cd node_modules/eslint && npm link --production && cd -",

From c12a08c479ba139718bf8ab7eb21a3a5d0c520d7 Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Mon, 8 Nov 2021 18:27:29 -0800
Subject: [PATCH 1496/1591] [actions] fix action working directories

---
 .github/workflows/node.yml | 18 ++++++++++++++++--
 1 file changed, 16 insertions(+), 2 deletions(-)

diff --git a/.github/workflows/node.yml b/.github/workflows/node.yml
index 1a1e5e5216..9a570e7741 100644
--- a/.github/workflows/node.yml
+++ b/.github/workflows/node.yml
@@ -40,7 +40,12 @@ jobs:
       - uses: ljharb/actions/node/install@main
         name: 'nvm install ${{ matrix.node-version }} && npm install'
         with:
+          before_install: cd "packages/${{ matrix.package }}"
           node-version: ${{ matrix.node-version }}
+          after_install: |
+            npm install --no-save "eslint@${{ matrix.eslint }}"
+      - run: node -pe "require('eslint/package.json').version"
+        name: 'eslint version'
       - run: npm run travis
       - uses: codecov/codecov-action@v2
 
@@ -74,9 +79,12 @@ jobs:
       - uses: ljharb/actions/node/install@main
         name: 'nvm install ${{ matrix.node-version }} && npm install'
         with:
+          before_install: cd "packages/${{ matrix.package }}"
           node-version: ${{ matrix.node-version }}
           after_install: |
             npm install --no-save "eslint@${{ matrix.eslint }}"
+      - run: node -pe "require('eslint/package.json').version"
+        name: 'eslint version'
       - run: npm install --no-save "eslint-plugin-react-hooks@${{ matrix.react-hooks }}"
         if: ${{ matrix.react-hooks > 0}}
       - run: npm run travis
@@ -102,11 +110,14 @@ jobs:
     steps:
       - uses: actions/checkout@v2
       - uses: ljharb/actions/node/install@main
-        name: 'nvm install ${{ matrix.node-version }} && npm install'
+        name: 'nvm install lts/* && npm install'
         with:
+          before_install: cd "packages/${{ matrix.package }}"
           node-version: lts/*
           after_install: |
             npm install --no-save "eslint@${{ matrix.eslint }}"
+      - run: node -pe "require('eslint/package.json').version"
+        name: 'eslint version'
       - run: npm run pretravis
       - run: npm run prepublish
       - run: npm run posttravis
@@ -136,13 +147,16 @@ jobs:
     steps:
       - uses: actions/checkout@v2
       - uses: ljharb/actions/node/install@main
-        name: 'nvm install ${{ matrix.node-version }} && npm install'
+        name: 'nvm install lts/* && npm install'
         with:
+          before_install: cd "packages/${{ matrix.package }}"
           node-version: lts/*
           after_install: |
             npm install --no-save "eslint@${{ matrix.eslint }}"
       - run: npm install --no-save "eslint-plugin-react-hooks@${{ matrix.react-hooks }}"
         if: ${{ matrix.react-hooks > 0}}
+      - run: node -pe "require('eslint/package.json').version"
+        name: 'eslint version'
       - run: npm run pretravis
       - run: npm run prepublish
       - run: npm run posttravis

From 96f11d8c810de5712ba4f80adaa402057565a3be Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Mon, 8 Nov 2021 22:25:39 -0800
Subject: [PATCH 1497/1591] [actions] run prepublishOnly in prepublish tests

---
 .github/workflows/node.yml | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/.github/workflows/node.yml b/.github/workflows/node.yml
index 9a570e7741..78fd3e5a3c 100644
--- a/.github/workflows/node.yml
+++ b/.github/workflows/node.yml
@@ -119,7 +119,7 @@ jobs:
       - run: node -pe "require('eslint/package.json').version"
         name: 'eslint version'
       - run: npm run pretravis
-      - run: npm run prepublish
+      - run: npm run prepublishOnly
       - run: npm run posttravis
 
   prepublish-react:
@@ -158,7 +158,7 @@ jobs:
       - run: node -pe "require('eslint/package.json').version"
         name: 'eslint version'
       - run: npm run pretravis
-      - run: npm run prepublish
+      - run: npm run prepublishOnly
       - run: npm run posttravis
 
   node:

From 4fc997b97e39359c3699aa95c80586277ea565ca Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Mon, 8 Nov 2021 18:42:02 -0800
Subject: [PATCH 1498/1591] [readme] some updates

---
 packages/eslint-config-airbnb-base/README.md | 19 ++++++++++++++++---
 1 file changed, 16 insertions(+), 3 deletions(-)

diff --git a/packages/eslint-config-airbnb-base/README.md b/packages/eslint-config-airbnb-base/README.md
index 0339618ca3..6ddc34dac1 100644
--- a/packages/eslint-config-airbnb-base/README.md
+++ b/packages/eslint-config-airbnb-base/README.md
@@ -1,6 +1,10 @@
-# eslint-config-airbnb-base
+# eslint-config-airbnb-base <sup>[![Version Badge][npm-version-svg]][package-url]</sup>
 
-[![npm version](https://badge.fury.io/js/eslint-config-airbnb-base.svg)](https://badge.fury.io/js/eslint-config-airbnb-base)
+[![npm version](https://badge.fury.io/js/eslint-config-airbnb-base.svg)][package-url]
+
+[![github actions][actions-image]][actions-url]
+[![License][license-image]][license-url]
+[![Downloads][downloads-image]][downloads-url]
 
 This package provides Airbnb's base JS .eslintrc (without React plugins) as an extensible shared config.
 
@@ -79,7 +83,7 @@ Lints ES5 and below. Requires `eslint` and `eslint-plugin-import`.
   Which produces and runs a command like:
 
   ```sh
-  npm install --save-dev eslint-config-airbnb-base eslint@^3.0.1 eslint-plugin-import@^1.10.3
+  npm install --save-dev eslint-config-airbnb-base eslint@^#.#.# eslint-plugin-import@^#.#.#
   ```
 
 2. Add `"extends": "airbnb-base/legacy"` to your .eslintrc
@@ -97,3 +101,12 @@ Consider adding test cases if you're making complicated rules changes, like anyt
 You can run tests with `npm test`.
 
 You can make sure this module lints with itself using `npm run lint`.
+
+[package-url]: https://npmjs.org/package/eslint-config-airbnb-base
+[npm-version-svg]: https://versionbadg.es/airbnb/javascript.svg
+[license-image]: https://img.shields.io/npm/l/eslint-config-airbnb-base.svg
+[license-url]: LICENSE.md
+[downloads-image]: https://img.shields.io/npm/dm/eslint-config-airbnb-base.svg
+[downloads-url]: https://npm-stat.com/charts.html?package=eslint-config-airbnb-base
+[actions-image]: https://img.shields.io/endpoint?url=https://github-actions-badge-u3jn4tfpocch.runkit.sh/airbnb/javascript
+[actions-url]: https://github.com/airbnb/javascript/actions

From be6966b2514c53097b98e218afb52e813859dfe1 Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Mon, 8 Nov 2021 22:33:12 -0800
Subject: [PATCH 1499/1591] [eslint-config] [meta] add `--no-save` to link
 scripts

---
 packages/eslint-config-airbnb/package.json | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/packages/eslint-config-airbnb/package.json b/packages/eslint-config-airbnb/package.json
index dd5a214145..929110f7e7 100644
--- a/packages/eslint-config-airbnb/package.json
+++ b/packages/eslint-config-airbnb/package.json
@@ -13,7 +13,7 @@
     "pretest": "npm run --silent lint",
     "test": "npm run --silent tests-only",
     "link:eslint": "cd node_modules/eslint && npm link --production && cd -",
-    "pretravis": "npm run link:eslint && cd ../eslint-config-airbnb-base && npm link eslint && npm install && npm link && cd - && npm link --no-save eslint-config-airbnb-base",
+    "pretravis": "npm run link:eslint && cd ../eslint-config-airbnb-base && npm link --no-save eslint && npm install && npm link && cd - && npm link --no-save eslint-config-airbnb-base",
     "travis": "npm run --silent tests-only",
     "posttravis": "npm unlink --no-save eslint-config-airbnb-base eslint >/dev/null &"
   },

From eac8cc605b0ee7acf32b9b3c7fa62fa66cd35de0 Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Mon, 8 Nov 2021 18:48:04 -0800
Subject: [PATCH 1500/1591] [eslint config] [base] [breaking] add `exports`

---
 packages/eslint-config-airbnb-base/package.json | 14 ++++++++++++++
 1 file changed, 14 insertions(+)

diff --git a/packages/eslint-config-airbnb-base/package.json b/packages/eslint-config-airbnb-base/package.json
index a5cb181d37..fdfc405fab 100644
--- a/packages/eslint-config-airbnb-base/package.json
+++ b/packages/eslint-config-airbnb-base/package.json
@@ -3,6 +3,20 @@
   "version": "14.2.1",
   "description": "Airbnb's base JS ESLint config, following our styleguide",
   "main": "index.js",
+  "exports": {
+    ".": "./index.js",
+    "./legacy": "./legacy.js",
+    "./whitespace": "./whitespace.js",
+    "./rules/best-practices": "./rules/best-practices.js",
+    "./rules/es6": "./rules/es6.js",
+    "./rules/node": "./rules/node.js",
+    "./rules/style": "./rules/style.js",
+    "./rules/errors": "./rules/errors.js",
+    "./rules/imports": "./rules/imports.js",
+    "./rules/strict": "./rules/strict.js",
+    "./rules/variables": "./rules/variables.js",
+    "./package.json": "./package.json"
+  },
   "scripts": {
     "prelint": "eclint check * rules/* test/*",
     "lint": "eslint --report-unused-disable-directives .",

From f3d3a075cda2acc02011e71991c10bb5b4a15278 Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Mon, 8 Nov 2021 18:27:29 -0800
Subject: [PATCH 1501/1591] [eslint config] [base] [breaking] drop eslint < 7,
 add eslint 8

---
 .github/workflows/node.yml                    |  32 ++--
 .../eslint-config-airbnb-base/package.json    |  10 +-
 .../rules/best-practices.js                   |  20 +-
 .../eslint-config-airbnb-base/rules/errors.js |  29 ++-
 .../eslint-config-airbnb-base/rules/es6.js    |   5 +-
 .../rules/imports.js                          |   8 +-
 .../eslint-config-airbnb-base/rules/style.js  |  11 +-
 .../whitespace-async.js                       |  96 ++++++++++
 .../eslint-config-airbnb-base/whitespace.js   | 171 ++++++++++--------
 9 files changed, 237 insertions(+), 145 deletions(-)
 create mode 100755 packages/eslint-config-airbnb-base/whitespace-async.js

diff --git a/.github/workflows/node.yml b/.github/workflows/node.yml
index 78fd3e5a3c..8337d1da57 100644
--- a/.github/workflows/node.yml
+++ b/.github/workflows/node.yml
@@ -13,7 +13,7 @@ jobs:
         with:
           versionsAsRoot: true
           type: 'majors'
-          preset: '^10 || ^12 || ^14 || ^16 || >= 17'
+          preset: '^12 || ^14 || ^16 || >= 17'
 
   base:
     needs: [matrix]
@@ -25,11 +25,14 @@ jobs:
       matrix:
         node-version: ${{ fromJson(needs.matrix.outputs.latest) }}
         eslint:
+          - 8
           - 7
-          - 6
-          - 5
         package:
           - eslint-config-airbnb-base
+        exclude:
+          - node-version: 10
+            eslint: 8
+            package: eslint-config-airbnb-base
 
     defaults:
       run:
@@ -60,15 +63,15 @@ jobs:
         node-version: ${{ fromJson(needs.matrix.outputs.latest) }}
         eslint:
           - 7
-          - 6
-          - 5
+          # - 6
+          # - 5
         package:
           - eslint-config-airbnb
         react-hooks:
           - ''
-          - 3
-          - 2.3
-          - 1.7
+          # - 3 # TODO: re-enable these once the react config uses eslint 8
+          # - 2.3
+          # - 1.7
 
     defaults:
       run:
@@ -97,9 +100,8 @@ jobs:
       fail-fast: false
       matrix:
         eslint:
+          - 8
           - 7
-          - 6
-          - 5
         package:
           - eslint-config-airbnb-base
 
@@ -130,15 +132,15 @@ jobs:
       matrix:
         eslint:
           - 7
-          - 6
-          - 5
+          # - 6
+          # - 5
         package:
           - eslint-config-airbnb
         react-hooks:
           - ''
-          - 3
-          - 2.3
-          - 1.7
+          # - 3 # TODO: re-enable these once the react config uses eslint 8
+          # - 2.3
+          # - 1.7
 
     defaults:
       run:
diff --git a/packages/eslint-config-airbnb-base/package.json b/packages/eslint-config-airbnb-base/package.json
index fdfc405fab..ef11845cae 100644
--- a/packages/eslint-config-airbnb-base/package.json
+++ b/packages/eslint-config-airbnb-base/package.json
@@ -72,19 +72,19 @@
     "babel-preset-airbnb": "^4.5.0",
     "babel-tape-runner": "^3.0.0",
     "eclint": "^2.8.1",
-    "eslint": "^5.16.0 || ^6.8.0 || ^7.2.0",
-    "eslint-find-rules": "^3.6.1",
+    "eslint": "^7.32.0 || ^8.2.0",
+    "eslint-find-rules": "^4.0.0",
     "eslint-plugin-import": "^2.25.2",
     "in-publish": "^2.0.1",
-    "safe-publish-latest": "^1.1.4",
+    "safe-publish-latest": "^2.0.0",
     "tape": "^5.3.1"
   },
   "peerDependencies": {
-    "eslint": "^5.16.0 || ^6.8.0 || ^7.2.0",
+    "eslint": "^7.32.0 || ^8.2.0",
     "eslint-plugin-import": "^2.25.2"
   },
   "engines": {
-    "node": ">= 6"
+    "node": "^10.12.0 || >=12.0.0"
   },
   "dependencies": {
     "confusing-browser-globals": "^1.0.10",
diff --git a/packages/eslint-config-airbnb-base/rules/best-practices.js b/packages/eslint-config-airbnb-base/rules/best-practices.js
index deb91cfb01..b91133de0a 100644
--- a/packages/eslint-config-airbnb-base/rules/best-practices.js
+++ b/packages/eslint-config-airbnb-base/rules/best-practices.js
@@ -36,12 +36,10 @@ module.exports = {
 
     // Enforce default clauses in switch statements to be last
     // https://eslint.org/docs/rules/default-case-last
-    // TODO: enable, semver-minor, when eslint v7 is required (which is a major)
-    'default-case-last': 'off',
+    'default-case-last': 'error',
 
     // https://eslint.org/docs/rules/default-param-last
-    // TODO: enable, semver-minor, when eslint v6.4 is required (which is a major)
-    'default-param-last': 'off',
+    'default-param-last': 'error',
 
     // encourages use of dot notation whenever possible
     // https://eslint.org/docs/rules/dot-notation
@@ -57,8 +55,7 @@ module.exports = {
 
     // Require grouped accessor pairs in object literals and classes
     // https://eslint.org/docs/rules/grouped-accessor-pairs
-    // TODO: enable in next major, altho the guide forbids getters/setters anyways
-    'grouped-accessor-pairs': 'off',
+    'grouped-accessor-pairs': 'error',
 
     // make sure for-in loops have an if statement
     // https://eslint.org/docs/rules/guard-for-in
@@ -82,8 +79,7 @@ module.exports = {
 
     // Disallow returning value in constructor
     // https://eslint.org/docs/rules/no-constructor-return
-    // TODO: enable, semver-major
-    'no-constructor-return': 'off',
+    'no-constructor-return': 'error',
 
     // disallow division operators explicitly at beginning of regular expression
     // https://eslint.org/docs/rules/no-div-regex
@@ -213,8 +209,7 @@ module.exports = {
 
     // Disallow \8 and \9 escape sequences in string literals
     // https://eslint.org/docs/rules/no-nonoctal-decimal-escape
-    // todo: semver-major: enable when v7.14 is required
-    'no-nonoctal-decimal-escape': 'off',
+    'no-nonoctal-decimal-escape': 'error',
 
     // disallow use of (old style) octal literals
     // https://eslint.org/docs/rules/no-octal
@@ -382,8 +377,9 @@ module.exports = {
     'prefer-named-capture-group': 'off',
 
     // https://eslint.org/docs/rules/prefer-regex-literals
-    // TODO; enable, semver-minor, once eslint v6.4 is required (which is a major)
-    'prefer-regex-literals': 'off',
+    'prefer-regex-literals': ['error', {
+      disallowRedundantWrapping: true,
+    }],
 
     // require use of the second argument for parseInt()
     // https://eslint.org/docs/rules/radix
diff --git a/packages/eslint-config-airbnb-base/rules/errors.js b/packages/eslint-config-airbnb-base/rules/errors.js
index 71ebcdecc6..cdc8c26eb7 100644
--- a/packages/eslint-config-airbnb-base/rules/errors.js
+++ b/packages/eslint-config-airbnb-base/rules/errors.js
@@ -40,8 +40,7 @@ module.exports = {
 
     // Disallow duplicate conditions in if-else-if chains
     // https://eslint.org/docs/rules/no-dupe-else-if
-    // TODO: enable, semver-major
-    'no-dupe-else-if': 'off',
+    'no-dupe-else-if': 'error',
 
     // disallow duplicate keys when creating object literals
     'no-dupe-keys': 'error',
@@ -79,8 +78,7 @@ module.exports = {
     'no-func-assign': 'error',
 
     // https://eslint.org/docs/rules/no-import-assign
-    // TODO: enable, semver-minor, once eslint v6.4 is required (which is a major)
-    'no-import-assign': 'off',
+    'no-import-assign': 'error',
 
     // disallow function or variable declarations in nested blocks
     'no-inner-declarations': 'error',
@@ -93,8 +91,7 @@ module.exports = {
 
     // Disallow Number Literals That Lose Precision
     // https://eslint.org/docs/rules/no-loss-of-precision
-    // TODO: enable, semver-minor, once eslint v7.1 is required (which is major)
-    'no-loss-of-precision': 'off',
+    'no-loss-of-precision': 'error',
 
     // Disallow characters which are made with multiple code points in character class syntax
     // https://eslint.org/docs/rules/no-misleading-character-class
@@ -105,8 +102,7 @@ module.exports = {
 
     // Disallow returning values from Promise executor functions
     // https://eslint.org/docs/rules/no-promise-executor-return
-    // TODO: enable, semver-minor, once eslint v7.3 is required (which is major)
-    'no-promise-executor-return': 'off',
+    'no-promise-executor-return': 'error',
 
     // disallow use of Object.prototypes builtins directly
     // https://eslint.org/docs/rules/no-prototype-builtins
@@ -117,8 +113,7 @@ module.exports = {
 
     // Disallow returning values from setters
     // https://eslint.org/docs/rules/no-setter-return
-    // TODO: enable, semver-major (altho the guide forbids getters/setters already)
-    'no-setter-return': 'off',
+    'no-setter-return': 'error',
 
     // disallow sparse arrays
     'no-sparse-arrays': 'error',
@@ -136,8 +131,7 @@ module.exports = {
 
     // Disallow loops with a body that allows only one iteration
     // https://eslint.org/docs/rules/no-unreachable-loop
-    // TODO: enable, semver-minor, once eslint v7.3 is required (which is major)
-    'no-unreachable-loop': ['off', {
+    'no-unreachable-loop': ['error', {
       ignore: [], // WhileStatement, DoWhileStatement, ForStatement, ForInStatement, ForOfStatement
     }],
 
@@ -151,13 +145,16 @@ module.exports = {
 
     // disallow use of optional chaining in contexts where the undefined value is not allowed
     // https://eslint.org/docs/rules/no-unsafe-optional-chaining
-    // TODO: enable, semver-minor, once eslint v7.15 is required (which is major)
-    'no-unsafe-optional-chaining': ['off', { disallowArithmeticOperators: true }],
+    'no-unsafe-optional-chaining': ['error', { disallowArithmeticOperators: true }],
+
+    // Disallow Unused Private Class Members
+    // https://eslint.org/docs/rules/no-unused-private-class-members
+    // TODO: enable once eslint 7 is dropped (which is semver-major)
+    'no-unused-private-class-members': 'off',
 
     // Disallow useless backreferences in regular expressions
     // https://eslint.org/docs/rules/no-useless-backreference
-    // TODO: enable, semver-minor, once eslint v7 is required (which is major)
-    'no-useless-backreference': 'off',
+    'no-useless-backreference': 'error',
 
     // disallow negation of the left operand of an in expression
     // deprecated in favor of no-unsafe-negation
diff --git a/packages/eslint-config-airbnb-base/rules/es6.js b/packages/eslint-config-airbnb-base/rules/es6.js
index 835afdd319..79a4cdcc25 100644
--- a/packages/eslint-config-airbnb-base/rules/es6.js
+++ b/packages/eslint-config-airbnb-base/rules/es6.js
@@ -62,11 +62,10 @@ module.exports = {
 
     // Disallow specified names in exports
     // https://eslint.org/docs/rules/no-restricted-exports
-    // TODO enable, semver-minor, once eslint v7 is required (which is major)
-    'no-restricted-exports': ['off', {
+    'no-restricted-exports': ['error', {
       restrictedNamedExports: [
         'default', // use `export default` to provide a default export
-        'then', // this will cause tons of confusion when your module is dynamically `import()`ed
+        'then', // this will cause tons of confusion when your module is dynamically `import()`ed, and will break in most node ESM versions
       ],
     }],
 
diff --git a/packages/eslint-config-airbnb-base/rules/imports.js b/packages/eslint-config-airbnb-base/rules/imports.js
index f3a477b4b5..5f7f1bd470 100644
--- a/packages/eslint-config-airbnb-base/rules/imports.js
+++ b/packages/eslint-config-airbnb-base/rules/imports.js
@@ -253,7 +253,7 @@ module.exports = {
 
     // Reports modules without any exports, or with unused exports
     // https://github.com/benmosher/eslint-plugin-import/blob/f63dd261809de6883b13b6b5b960e6d7f42a7813/docs/rules/no-unused-modules.md
-    // TODO: enable, semver-major
+    // TODO: enable once it supports CJS
     'import/no-unused-modules': ['off', {
       ignoreExports: [],
       missingExports: true,
@@ -262,14 +262,12 @@ module.exports = {
 
     // Reports the use of import declarations with CommonJS exports in any module except for the main module.
     // https://github.com/benmosher/eslint-plugin-import/blob/1012eb951767279ce3b540a4ec4f29236104bb5b/docs/rules/no-import-module-exports.md
-    // TODO: enable, semver-major
-    'import/no-import-module-exports': ['off', {
+    'import/no-import-module-exports': ['error', {
       exceptions: [],
     }],
 
     // Use this rule to prevent importing packages through relative paths.
     // https://github.com/benmosher/eslint-plugin-import/blob/1012eb951767279ce3b540a4ec4f29236104bb5b/docs/rules/no-relative-packages.md
-    // TODO: enable, semver-major
-    'import/no-relative-packages': 'off',
+    'import/no-relative-packages': 'error',
   },
 };
diff --git a/packages/eslint-config-airbnb-base/rules/style.js b/packages/eslint-config-airbnb-base/rules/style.js
index d73ddefb1d..2973b258ac 100644
--- a/packages/eslint-config-airbnb-base/rules/style.js
+++ b/packages/eslint-config-airbnb-base/rules/style.js
@@ -80,8 +80,7 @@ module.exports = {
     'eol-last': ['error', 'always'],
 
     // https://eslint.org/docs/rules/function-call-argument-newline
-    // TODO: enable, semver-minor, once eslint v6.2 is required (which is a major)
-    'function-call-argument-newline': ['off', 'consistent'],
+    'function-call-argument-newline': ['error', 'consistent'],
 
     // enforce spacing between functions and their invocations
     // https://eslint.org/docs/rules/func-call-spacing
@@ -108,11 +107,6 @@ module.exports = {
     // https://eslint.org/docs/rules/function-paren-newline
     'function-paren-newline': ['error', semver.satisfies(eslintPkg.version, '>= 6') ? 'multiline-arguments' : 'consistent'],
 
-    // Blacklist certain identifiers to prevent them being used
-    // https://eslint.org/docs/rules/id-blacklist
-    // TODO: semver-major, remove once eslint v7.4+ is required
-    'id-blacklist': 'off',
-
     // disallow specified identifiers
     // https://eslint.org/docs/rules/id-denylist
     'id-denylist': 'off',
@@ -444,8 +438,7 @@ module.exports = {
 
     // Disallow the use of Math.pow in favor of the ** operator
     // https://eslint.org/docs/rules/prefer-exponentiation-operator
-    // TODO: enable, semver-major when eslint 5 is dropped
-    'prefer-exponentiation-operator': 'off',
+    'prefer-exponentiation-operator': 'error',
 
     // Prefer use of an object spread over Object.assign
     // https://eslint.org/docs/rules/prefer-object-spread
diff --git a/packages/eslint-config-airbnb-base/whitespace-async.js b/packages/eslint-config-airbnb-base/whitespace-async.js
new file mode 100755
index 0000000000..ee7e8b4034
--- /dev/null
+++ b/packages/eslint-config-airbnb-base/whitespace-async.js
@@ -0,0 +1,96 @@
+#!/usr/bin/env node
+
+const assign = require('object.assign');
+const entries = require('object.entries');
+const { ESLint } = require('eslint');
+
+const baseConfig = require('.');
+
+const severities = ['off', 'warn', 'error'];
+
+function getSeverity(ruleConfig) {
+  if (Array.isArray(ruleConfig)) {
+    return getSeverity(ruleConfig[0]);
+  }
+  if (typeof ruleConfig === 'number') {
+    return severities[ruleConfig];
+  }
+  return ruleConfig;
+}
+
+async function onlyErrorOnRules(rulesToError, config) {
+  const errorsOnly = assign({}, config);
+  const cli = new ESLint({
+    useEslintrc: false,
+    baseConfig: config
+  });
+  const baseRules = (await cli.calculateConfigForFile(require.resolve('./'))).rules;
+
+  entries(baseRules).forEach((rule) => {
+    const ruleName = rule[0];
+    const ruleConfig = rule[1];
+    const severity = getSeverity(ruleConfig);
+
+    if (rulesToError.indexOf(ruleName) === -1 && severity === 'error') {
+      if (Array.isArray(ruleConfig)) {
+        errorsOnly.rules[ruleName] = ['warn'].concat(ruleConfig.slice(1));
+      } else if (typeof ruleConfig === 'number') {
+        errorsOnly.rules[ruleName] = 1;
+      } else {
+        errorsOnly.rules[ruleName] = 'warn';
+      }
+    }
+  });
+
+  return errorsOnly;
+}
+
+onlyErrorOnRules([
+  'array-bracket-newline',
+  'array-bracket-spacing',
+  'array-element-newline',
+  'arrow-spacing',
+  'block-spacing',
+  'comma-spacing',
+  'computed-property-spacing',
+  'dot-location',
+  'eol-last',
+  'func-call-spacing',
+  'function-paren-newline',
+  'generator-star-spacing',
+  'implicit-arrow-linebreak',
+  'indent',
+  'key-spacing',
+  'keyword-spacing',
+  'line-comment-position',
+  'linebreak-style',
+  'multiline-ternary',
+  'newline-per-chained-call',
+  'no-irregular-whitespace',
+  'no-mixed-spaces-and-tabs',
+  'no-multi-spaces',
+  'no-regex-spaces',
+  'no-spaced-func',
+  'no-trailing-spaces',
+  'no-whitespace-before-property',
+  'nonblock-statement-body-position',
+  'object-curly-newline',
+  'object-curly-spacing',
+  'object-property-newline',
+  'one-var-declaration-per-line',
+  'operator-linebreak',
+  'padded-blocks',
+  'padding-line-between-statements',
+  'rest-spread-spacing',
+  'semi-spacing',
+  'semi-style',
+  'space-before-blocks',
+  'space-before-function-paren',
+  'space-in-parens',
+  'space-infix-ops',
+  'space-unary-ops',
+  'spaced-comment',
+  'switch-colon-spacing',
+  'template-tag-spacing',
+  'import/newline-after-import',
+], baseConfig).then((config) => console.log(JSON.stringify(config)));
diff --git a/packages/eslint-config-airbnb-base/whitespace.js b/packages/eslint-config-airbnb-base/whitespace.js
index 0b7bda8f6f..e60f7a7918 100644
--- a/packages/eslint-config-airbnb-base/whitespace.js
+++ b/packages/eslint-config-airbnb-base/whitespace.js
@@ -1,91 +1,102 @@
-const assign = require('object.assign');
-const entries = require('object.entries');
+/* eslint global-require: 0 */
+
 const { CLIEngine } = require('eslint');
 
-const baseConfig = require('.');
+if (CLIEngine) {
+  /* eslint no-inner-declarations: 0 */
+  const assign = require('object.assign');
+  const entries = require('object.entries');
 
-const severities = ['off', 'warn', 'error'];
+  const baseConfig = require('.');
 
-function getSeverity(ruleConfig) {
-  if (Array.isArray(ruleConfig)) {
-    return getSeverity(ruleConfig[0]);
-  }
-  if (typeof ruleConfig === 'number') {
-    return severities[ruleConfig];
+  const severities = ['off', 'warn', 'error'];
+
+  function getSeverity(ruleConfig) {
+    if (Array.isArray(ruleConfig)) {
+      return getSeverity(ruleConfig[0]);
+    }
+    if (typeof ruleConfig === 'number') {
+      return severities[ruleConfig];
+    }
+    return ruleConfig;
   }
-  return ruleConfig;
-}
 
-function onlyErrorOnRules(rulesToError, config) {
-  const errorsOnly = assign({}, config);
-  const cli = new CLIEngine({ baseConfig: config, useEslintrc: false });
-  const baseRules = cli.getConfigForFile(require.resolve('./')).rules;
+  function onlyErrorOnRules(rulesToError, config) {
+    const errorsOnly = assign({}, config);
+    const cli = new CLIEngine({ baseConfig: config, useEslintrc: false });
+    const baseRules = cli.getConfigForFile(require.resolve('./')).rules;
 
-  entries(baseRules).forEach((rule) => {
-    const ruleName = rule[0];
-    const ruleConfig = rule[1];
-    const severity = getSeverity(ruleConfig);
+    entries(baseRules).forEach((rule) => {
+      const ruleName = rule[0];
+      const ruleConfig = rule[1];
+      const severity = getSeverity(ruleConfig);
 
-    if (rulesToError.indexOf(ruleName) === -1 && severity === 'error') {
-      if (Array.isArray(ruleConfig)) {
-        errorsOnly.rules[ruleName] = ['warn'].concat(ruleConfig.slice(1));
-      } else if (typeof ruleConfig === 'number') {
-        errorsOnly.rules[ruleName] = 1;
-      } else {
-        errorsOnly.rules[ruleName] = 'warn';
+      if (rulesToError.indexOf(ruleName) === -1 && severity === 'error') {
+        if (Array.isArray(ruleConfig)) {
+          errorsOnly.rules[ruleName] = ['warn'].concat(ruleConfig.slice(1));
+        } else if (typeof ruleConfig === 'number') {
+          errorsOnly.rules[ruleName] = 1;
+        } else {
+          errorsOnly.rules[ruleName] = 'warn';
+        }
       }
-    }
-  });
+    });
 
-  return errorsOnly;
-}
+    return errorsOnly;
+  }
 
-module.exports = onlyErrorOnRules([
-  'array-bracket-newline',
-  'array-bracket-spacing',
-  'array-element-newline',
-  'arrow-spacing',
-  'block-spacing',
-  'comma-spacing',
-  'computed-property-spacing',
-  'dot-location',
-  'eol-last',
-  'func-call-spacing',
-  'function-paren-newline',
-  'generator-star-spacing',
-  'implicit-arrow-linebreak',
-  'indent',
-  'key-spacing',
-  'keyword-spacing',
-  'line-comment-position',
-  'linebreak-style',
-  'multiline-ternary',
-  'newline-per-chained-call',
-  'no-irregular-whitespace',
-  'no-mixed-spaces-and-tabs',
-  'no-multi-spaces',
-  'no-regex-spaces',
-  'no-spaced-func',
-  'no-trailing-spaces',
-  'no-whitespace-before-property',
-  'nonblock-statement-body-position',
-  'object-curly-newline',
-  'object-curly-spacing',
-  'object-property-newline',
-  'one-var-declaration-per-line',
-  'operator-linebreak',
-  'padded-blocks',
-  'padding-line-between-statements',
-  'rest-spread-spacing',
-  'semi-spacing',
-  'semi-style',
-  'space-before-blocks',
-  'space-before-function-paren',
-  'space-in-parens',
-  'space-infix-ops',
-  'space-unary-ops',
-  'spaced-comment',
-  'switch-colon-spacing',
-  'template-tag-spacing',
-  'import/newline-after-import',
-], baseConfig);
+  module.exports = onlyErrorOnRules([
+    'array-bracket-newline',
+    'array-bracket-spacing',
+    'array-element-newline',
+    'arrow-spacing',
+    'block-spacing',
+    'comma-spacing',
+    'computed-property-spacing',
+    'dot-location',
+    'eol-last',
+    'func-call-spacing',
+    'function-paren-newline',
+    'generator-star-spacing',
+    'implicit-arrow-linebreak',
+    'indent',
+    'key-spacing',
+    'keyword-spacing',
+    'line-comment-position',
+    'linebreak-style',
+    'multiline-ternary',
+    'newline-per-chained-call',
+    'no-irregular-whitespace',
+    'no-mixed-spaces-and-tabs',
+    'no-multi-spaces',
+    'no-regex-spaces',
+    'no-spaced-func',
+    'no-trailing-spaces',
+    'no-whitespace-before-property',
+    'nonblock-statement-body-position',
+    'object-curly-newline',
+    'object-curly-spacing',
+    'object-property-newline',
+    'one-var-declaration-per-line',
+    'operator-linebreak',
+    'padded-blocks',
+    'padding-line-between-statements',
+    'rest-spread-spacing',
+    'semi-spacing',
+    'semi-style',
+    'space-before-blocks',
+    'space-before-function-paren',
+    'space-in-parens',
+    'space-infix-ops',
+    'space-unary-ops',
+    'spaced-comment',
+    'switch-colon-spacing',
+    'template-tag-spacing',
+    'import/newline-after-import',
+  ], baseConfig);
+} else {
+  const path = require('path');
+  const { execSync } = require('child_process');
+
+  module.exports = JSON.parse(String(execSync(path.join(__dirname, 'whitespace-async.js'))));
+}

From 366bfa66380c08304101c6add46355696e90b348 Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Mon, 8 Nov 2021 22:59:44 -0800
Subject: [PATCH 1502/1591] [eslint config] [base] v15.0.0

---
 .../eslint-config-airbnb-base/CHANGELOG.md    | 19 +++++++++++++++++++
 .../eslint-config-airbnb-base/package.json    |  2 +-
 2 files changed, 20 insertions(+), 1 deletion(-)

diff --git a/packages/eslint-config-airbnb-base/CHANGELOG.md b/packages/eslint-config-airbnb-base/CHANGELOG.md
index 5f8dddf100..dcc6551f4f 100644
--- a/packages/eslint-config-airbnb-base/CHANGELOG.md
+++ b/packages/eslint-config-airbnb-base/CHANGELOG.md
@@ -1,3 +1,22 @@
+15.0.0 / 2021-11-08
+==================
+ - [breaking] drop eslint < 7, add eslint 8 (#2495)
+ - [breaking] add `exports`
+ - [patch] Improve `function-paren-newline` with `multiline-arguments` option (#2471)
+ - [patch] update default value for complexity (#2420)
+ - [patch] add disabled `no-unsafe-optional-chaining` rule
+ - [patch] arthmetic -> arithmetic (#2341)
+ - [patch] fix spelling of "than" (#2333)
+ - [patch] add `no-nonoctal-decimal-escape` rule
+ - [patch] `import/no-extraneous-dependencies`: Add .eslintrc.js to devDeps (#2329)
+ - [guide] Spread operator => Spread syntax (#2423)
+ - [guide] add references for eslint rules (#2419)
+ - [Docs] HTTP => HTTPS (#2489)
+ - [readme] some updates
+ - [meta] use `prepublishOnly` script for npm 7+
+ - [deps] update `eslint-plugin-import`, `eslint-plugin-react`, `object.entries`
+ - [dev deps] update `@babel/runtime`, ``tape`
+
 14.2.1 / 2020-11-06
 ==================
  - [base] `no-restricted-globals`: add better messages (#2320)
diff --git a/packages/eslint-config-airbnb-base/package.json b/packages/eslint-config-airbnb-base/package.json
index ef11845cae..ff6a8764a7 100644
--- a/packages/eslint-config-airbnb-base/package.json
+++ b/packages/eslint-config-airbnb-base/package.json
@@ -1,6 +1,6 @@
 {
   "name": "eslint-config-airbnb-base",
-  "version": "14.2.1",
+  "version": "15.0.0",
   "description": "Airbnb's base JS ESLint config, following our styleguide",
   "main": "index.js",
   "exports": {

From 930a6f2e4c98df904ec748a6a2bd4928ef6218b1 Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Wed, 10 Nov 2021 00:01:04 -0800
Subject: [PATCH 1503/1591] [eslint config] [*] update `@babel/runtime`,
 `eslint-plugin-import`

---
 packages/eslint-config-airbnb-base/package.json | 6 +++---
 packages/eslint-config-airbnb/package.json      | 6 +++---
 2 files changed, 6 insertions(+), 6 deletions(-)

diff --git a/packages/eslint-config-airbnb-base/package.json b/packages/eslint-config-airbnb-base/package.json
index ff6a8764a7..196f78c2e1 100644
--- a/packages/eslint-config-airbnb-base/package.json
+++ b/packages/eslint-config-airbnb-base/package.json
@@ -68,20 +68,20 @@
   },
   "homepage": "https://github.com/airbnb/javascript",
   "devDependencies": {
-    "@babel/runtime": "^7.16.0",
+    "@babel/runtime": "^7.16.3",
     "babel-preset-airbnb": "^4.5.0",
     "babel-tape-runner": "^3.0.0",
     "eclint": "^2.8.1",
     "eslint": "^7.32.0 || ^8.2.0",
     "eslint-find-rules": "^4.0.0",
-    "eslint-plugin-import": "^2.25.2",
+    "eslint-plugin-import": "^2.25.3",
     "in-publish": "^2.0.1",
     "safe-publish-latest": "^2.0.0",
     "tape": "^5.3.1"
   },
   "peerDependencies": {
     "eslint": "^7.32.0 || ^8.2.0",
-    "eslint-plugin-import": "^2.25.2"
+    "eslint-plugin-import": "^2.25.3"
   },
   "engines": {
     "node": "^10.12.0 || >=12.0.0"
diff --git a/packages/eslint-config-airbnb/package.json b/packages/eslint-config-airbnb/package.json
index 929110f7e7..8870bb2320 100644
--- a/packages/eslint-config-airbnb/package.json
+++ b/packages/eslint-config-airbnb/package.json
@@ -60,13 +60,13 @@
     "object.entries": "^1.1.5"
   },
   "devDependencies": {
-    "@babel/runtime": "^7.16.0",
+    "@babel/runtime": "^7.16.3",
     "babel-preset-airbnb": "^4.5.0",
     "babel-tape-runner": "^3.0.0",
     "eclint": "^2.8.1",
     "eslint": "^5.16.0 || ^6.8.0 || ^7.2.0",
     "eslint-find-rules": "^3.6.1",
-    "eslint-plugin-import": "^2.25.2",
+    "eslint-plugin-import": "^2.25.3",
     "eslint-plugin-jsx-a11y": "^6.4.1",
     "eslint-plugin-react": "^7.26.0",
     "eslint-plugin-react-hooks": "^4.0.1 || ^3 || ^2.3.0 || ^1.7.0",
@@ -77,7 +77,7 @@
   },
   "peerDependencies": {
     "eslint": "^5.16.0 || ^6.8.0 || ^7.2.0",
-    "eslint-plugin-import": "^2.25.2",
+    "eslint-plugin-import": "^2.25.3",
     "eslint-plugin-jsx-a11y": "^6.4.1",
     "eslint-plugin-react": "^7.26.0",
     "eslint-plugin-react-hooks": "^4.0.1 || ^3 || ^2.3.0 || ^1.7.0"

From 37ebbba44cb1a7cf994c43f4b8e900b9fe7e6d22 Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Wed, 10 Nov 2021 00:04:12 -0800
Subject: [PATCH 1504/1591] [eslint config] [deps] update
 `eslint-config-airbnb-base`, `eslint-plugin-jsx-a11y`, `eslint-plugin-react`,
 `eslint-plugin-react-hooks`, `safe-publish-latest`

---
 packages/eslint-config-airbnb/package.json | 16 ++++++++--------
 1 file changed, 8 insertions(+), 8 deletions(-)

diff --git a/packages/eslint-config-airbnb/package.json b/packages/eslint-config-airbnb/package.json
index 8870bb2320..f2eb5d073d 100644
--- a/packages/eslint-config-airbnb/package.json
+++ b/packages/eslint-config-airbnb/package.json
@@ -55,7 +55,7 @@
   },
   "homepage": "https://github.com/airbnb/javascript",
   "dependencies": {
-    "eslint-config-airbnb-base": "^14.2.1",
+    "eslint-config-airbnb-base": "^15.0.0",
     "object.assign": "^4.1.2",
     "object.entries": "^1.1.5"
   },
@@ -67,20 +67,20 @@
     "eslint": "^5.16.0 || ^6.8.0 || ^7.2.0",
     "eslint-find-rules": "^3.6.1",
     "eslint-plugin-import": "^2.25.3",
-    "eslint-plugin-jsx-a11y": "^6.4.1",
-    "eslint-plugin-react": "^7.26.0",
-    "eslint-plugin-react-hooks": "^4.0.1 || ^3 || ^2.3.0 || ^1.7.0",
+    "eslint-plugin-jsx-a11y": "^6.5.1",
+    "eslint-plugin-react": "^7.27.0",
+    "eslint-plugin-react-hooks": "^4.3.0 || ^3 || ^2.3.0 || ^1.7.0",
     "in-publish": "^2.0.1",
     "react": ">= 0.13.0",
-    "safe-publish-latest": "^1.1.4",
+    "safe-publish-latest": "^2.0.0",
     "tape": "^5.3.1"
   },
   "peerDependencies": {
     "eslint": "^5.16.0 || ^6.8.0 || ^7.2.0",
     "eslint-plugin-import": "^2.25.3",
-    "eslint-plugin-jsx-a11y": "^6.4.1",
-    "eslint-plugin-react": "^7.26.0",
-    "eslint-plugin-react-hooks": "^4.0.1 || ^3 || ^2.3.0 || ^1.7.0"
+    "eslint-plugin-jsx-a11y": "^6.5.1",
+    "eslint-plugin-react": "^7.27.0",
+    "eslint-plugin-react-hooks": "^4.3.0 || ^3 || ^2.3.0 || ^1.7.0"
   },
   "engines": {
     "node": ">= 6"

From 1bc8cabd447ef9ce69d27ae70e67eb47daeffc21 Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Wed, 10 Nov 2021 11:31:18 -0800
Subject: [PATCH 1505/1591] [eslint config] [breaking] support `eslint` 8; drop
 `eslint` < 7

---
 packages/eslint-config-airbnb/package.json    | 23 +++++++++----
 packages/eslint-config-airbnb/rules/react.js  | 33 +++++++++++--------
 .../test/test-react-order.js                  |  2 ++
 3 files changed, 38 insertions(+), 20 deletions(-)

diff --git a/packages/eslint-config-airbnb/package.json b/packages/eslint-config-airbnb/package.json
index f2eb5d073d..eba28173ea 100644
--- a/packages/eslint-config-airbnb/package.json
+++ b/packages/eslint-config-airbnb/package.json
@@ -3,6 +3,17 @@
   "version": "18.2.1",
   "description": "Airbnb's ESLint config, following our styleguide",
   "main": "index.js",
+  "exports": {
+    ".": "./index.js",
+    "./base": "./base.js",
+    "./hooks": "./hooks.js",
+    "./legacy": "./legacy.js",
+    "./whitespace": "./whitespace.js",
+    "./rules/react": "./rules/react.js",
+    "./rules/react-a11y": "./rules/react-a11y.js",
+    "./rules/react-hooks": "./rules/react-hook.js",
+    "./package.json": "./package.json"
+  },
   "scripts": {
     "prelint": "eclint check * rules/* test/*",
     "lint": "eslint .",
@@ -64,25 +75,25 @@
     "babel-preset-airbnb": "^4.5.0",
     "babel-tape-runner": "^3.0.0",
     "eclint": "^2.8.1",
-    "eslint": "^5.16.0 || ^6.8.0 || ^7.2.0",
-    "eslint-find-rules": "^3.6.1",
+    "eslint": "^7.32.0 || ^8.2.0",
+    "eslint-find-rules": "^4.0.0",
     "eslint-plugin-import": "^2.25.3",
     "eslint-plugin-jsx-a11y": "^6.5.1",
     "eslint-plugin-react": "^7.27.0",
-    "eslint-plugin-react-hooks": "^4.3.0 || ^3 || ^2.3.0 || ^1.7.0",
+    "eslint-plugin-react-hooks": "^4.3.0",
     "in-publish": "^2.0.1",
     "react": ">= 0.13.0",
     "safe-publish-latest": "^2.0.0",
     "tape": "^5.3.1"
   },
   "peerDependencies": {
-    "eslint": "^5.16.0 || ^6.8.0 || ^7.2.0",
+    "eslint": "^7.32.0 || ^8.2.0",
     "eslint-plugin-import": "^2.25.3",
     "eslint-plugin-jsx-a11y": "^6.5.1",
     "eslint-plugin-react": "^7.27.0",
-    "eslint-plugin-react-hooks": "^4.3.0 || ^3 || ^2.3.0 || ^1.7.0"
+    "eslint-plugin-react-hooks": "^4.3.0"
   },
   "engines": {
-    "node": ">= 6"
+    "node": "^10.12.0 || ^12.22.0 || ^14.17.0 || >=16.0.0"
   }
 }
diff --git a/packages/eslint-config-airbnb/rules/react.js b/packages/eslint-config-airbnb/rules/react.js
index ca16948432..71230fac71 100644
--- a/packages/eslint-config-airbnb/rules/react.js
+++ b/packages/eslint-config-airbnb/rules/react.js
@@ -506,8 +506,7 @@ module.exports = {
 
     // Prevent usage of `javascript:` URLs
     // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/jsx-no-script-url.md
-    // TODO: enable, semver-major
-    'react/jsx-no-script-url': ['off', [
+    'react/jsx-no-script-url': ['error', [
       {
         name: 'Link',
         props: ['to'],
@@ -516,8 +515,7 @@ module.exports = {
 
     // Disallow unnecessary fragments
     // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/jsx-no-useless-fragment.md
-    // TODO: enable, semver-major
-    'react/jsx-no-useless-fragment': 'off',
+    'react/jsx-no-useless-fragment': 'error',
 
     // Prevent adjacent inline elements not separated by whitespace
     // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/no-adjacent-inline-elements.md
@@ -526,9 +524,8 @@ module.exports = {
 
     // Enforce a specific function type for function components
     // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/function-component-definition.md
-    // TODO: enable! semver-minor, but do it in a major to be safe
     // TODO: investigate if setting namedComponents to expression vs declaration is problematic
-    'react/function-component-definition': ['off', {
+    'react/function-component-definition': ['error', {
       namedComponents: 'function-expression',
       unnamedComponents: 'function-expression',
     }],
@@ -539,23 +536,31 @@ module.exports = {
 
     // Prevent react contexts from taking non-stable values
     // https://github.com/yannickcr/eslint-plugin-react/blob/e2eaadae316f9506d163812a09424eb42698470a/docs/rules/jsx-no-constructed-context-values.md
-    // TODO: enable, semver-minor
-    'react/jsx-no-constructed-context-values': 'off',
+    'react/jsx-no-constructed-context-values': 'error',
 
     // Prevent creating unstable components inside components
     // https://github.com/yannickcr/eslint-plugin-react/blob/c2a790a3472eea0f6de984bdc3ee2a62197417fb/docs/rules/no-unstable-nested-components.md
-    // TODO: enable, semver-major
-    'react/no-unstable-nested-components': 'off',
+    'react/no-unstable-nested-components': 'error',
 
     // Enforce that namespaces are not used in React elements
     // https://github.com/yannickcr/eslint-plugin-react/blob/8785c169c25b09b33c95655bf508cf46263bc53f/docs/rules/no-namespace.md
-    // TODO: enable, semver-minor
-    'react/no-namespace': 'off',
+    'react/no-namespace': 'error',
 
     // Prefer exact proptype definitions
     // https://github.com/yannickcr/eslint-plugin-react/blob/8785c169c25b09b33c95655bf508cf46263bc53f/docs/rules/prefer-exact-props.md
-    // TODO: enable, semver-major, just in case
-    'react/prefer-exact-props': 'off',
+    'react/prefer-exact-props': 'error',
+
+    // Lifecycle methods should be methods on the prototype, not class fields
+    // https://github.com/yannickcr/eslint-plugin-react/blob/21e01b61af7a38fc86d94f27eb66cda8054582ed/docs/rules/no-arrow-function-lifecycle.md
+    'react/no-arrow-function-lifecycle': 'error',
+
+    // Prevent usage of invalid attributes
+    // https://github.com/yannickcr/eslint-plugin-react/blob/21e01b61af7a38fc86d94f27eb66cda8054582ed/docs/rules/no-invalid-html-attribute.md
+    'react/no-invalid-html-attribute': 'error',
+
+    // Prevent declaring unused methods of component class
+    // https://github.com/yannickcr/eslint-plugin-react/blob/21e01b61af7a38fc86d94f27eb66cda8054582ed/docs/rules/no-unused-class-component-methods.md
+    'react/no-unused-class-component-methods': 'error',
   },
 
   settings: {
diff --git a/packages/eslint-config-airbnb/test/test-react-order.js b/packages/eslint-config-airbnb/test/test-react-order.js
index a394fe1c3c..dca8b73e8a 100644
--- a/packages/eslint-config-airbnb/test/test-react-order.js
+++ b/packages/eslint-config-airbnb/test/test-react-order.js
@@ -13,6 +13,8 @@ const cli = new (CLIEngine || ESLint)({
     'import/no-extraneous-dependencies': [2, { devDependencies: true }],
     // this doesn't matter for tests
     'lines-between-class-members': 0,
+    // otherwise we need some junk in our fixture code
+    'react/no-unused-class-component-methods': 0,
   },
 });
 

From 52e710c14ec0197cfefe131061e1fe41c966f93b Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Wed, 10 Nov 2021 12:25:30 -0800
Subject: [PATCH 1506/1591] [eslint config] v19.0.0

---
 packages/eslint-config-airbnb/CHANGELOG.md | 13 +++++++++++++
 packages/eslint-config-airbnb/package.json |  2 +-
 2 files changed, 14 insertions(+), 1 deletion(-)

diff --git a/packages/eslint-config-airbnb/CHANGELOG.md b/packages/eslint-config-airbnb/CHANGELOG.md
index 745b541d58..52ce158263 100644
--- a/packages/eslint-config-airbnb/CHANGELOG.md
+++ b/packages/eslint-config-airbnb/CHANGELOG.md
@@ -1,3 +1,16 @@
+19.0.0 / 2021-11-10
+==================
+ - [breaking] support `eslint` 8; drop `eslint` < 7
+ - [patch] Explain why `react/jsx-key` is turned off (#2474)
+ - [fix] bump eslint-plugin-react-hooks peer dependency version (#2356)
+ - [patch] Alphabetize the rules for react-a11y.js (#2407)
+ - [Docs] HTTP => HTTPS (#2489)
+ - [readme] clarify hooks requirement (#2482)
+ - [deps] update `eslint-config-airbnb-base`, `eslint-plugin-jsx-a11y`, `eslint-plugin-react`, `eslint-plugin-react-hooks`, `safe-publish-latest`,  `eslint-plugin-import`, `object.entries`
+ - [meta] add `--no-save` to link scripts
+ - [meta] use `prepublishOnly` script for npm 7+
+ - [dev deps] update `@babel/runtime`, `tape`
+
 18.2.1 / 2020-11-06
 ==================
  - [patch] remove deprecated `jsx-a11y/accessible-emoji` rule (#2322)
diff --git a/packages/eslint-config-airbnb/package.json b/packages/eslint-config-airbnb/package.json
index eba28173ea..0a72d75fef 100644
--- a/packages/eslint-config-airbnb/package.json
+++ b/packages/eslint-config-airbnb/package.json
@@ -1,6 +1,6 @@
 {
   "name": "eslint-config-airbnb",
-  "version": "18.2.1",
+  "version": "19.0.0",
   "description": "Airbnb's ESLint config, following our styleguide",
   "main": "index.js",
   "exports": {

From d8cb404da74c302506f91e5928f30cc75109e74d Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E5=8D=8E?= <sliphua@outlook.com>
Date: Thu, 11 Nov 2021 23:36:01 +0800
Subject: [PATCH 1507/1591] [eslint config] [base] remove unneeded eslint
 version check

---
 packages/eslint-config-airbnb-base/package.json   | 3 +--
 packages/eslint-config-airbnb-base/rules/style.js | 5 +----
 2 files changed, 2 insertions(+), 6 deletions(-)

diff --git a/packages/eslint-config-airbnb-base/package.json b/packages/eslint-config-airbnb-base/package.json
index 196f78c2e1..ba2af920da 100644
--- a/packages/eslint-config-airbnb-base/package.json
+++ b/packages/eslint-config-airbnb-base/package.json
@@ -89,7 +89,6 @@
   "dependencies": {
     "confusing-browser-globals": "^1.0.10",
     "object.assign": "^4.1.2",
-    "object.entries": "^1.1.5",
-    "semver": "^6.3.0"
+    "object.entries": "^1.1.5"
   }
 }
diff --git a/packages/eslint-config-airbnb-base/rules/style.js b/packages/eslint-config-airbnb-base/rules/style.js
index 2973b258ac..4fad26be00 100644
--- a/packages/eslint-config-airbnb-base/rules/style.js
+++ b/packages/eslint-config-airbnb-base/rules/style.js
@@ -1,6 +1,3 @@
-const semver = require('semver');
-const eslintPkg = require('eslint/package.json');
-
 module.exports = {
   rules: {
     // enforce line breaks after opening and before closing array brackets
@@ -105,7 +102,7 @@ module.exports = {
 
     // require line breaks inside function parentheses if there are line breaks between parameters
     // https://eslint.org/docs/rules/function-paren-newline
-    'function-paren-newline': ['error', semver.satisfies(eslintPkg.version, '>= 6') ? 'multiline-arguments' : 'consistent'],
+    'function-paren-newline': ['error', 'multiline-arguments'],
 
     // disallow specified identifiers
     // https://eslint.org/docs/rules/id-denylist

From 91cab81f69d7b8258846e1256d06a11e544c0870 Mon Sep 17 00:00:00 2001
From: Yatin <yatinkathuria74@gmail.com>
Date: Wed, 17 Nov 2021 00:14:08 +0530
Subject: [PATCH 1508/1591] [readme] operator => parameter syntax

---
 README.md | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/README.md b/README.md
index 3fcade31f4..b97db7cc7e 100644
--- a/README.md
+++ b/README.md
@@ -310,7 +310,7 @@ Other Style Guides
     ```
 
   <a name="objects--rest-spread"></a>
-  - [3.8](#objects--rest-spread) Prefer the object spread syntax over [`Object.assign`](https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Object/assign) to shallow-copy objects. Use the object rest operator to get a new object with certain properties omitted. eslint: [`prefer-object-spread`](https://eslint.org/docs/rules/prefer-object-spread)
+  - [3.8](#objects--rest-spread) Prefer the object spread syntax over [`Object.assign`](https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Object/assign) to shallow-copy objects. Use the object rest parameter syntax to get a new object with certain properties omitted. eslint: [`prefer-object-spread`](https://eslint.org/docs/rules/prefer-object-spread)
 
     ```javascript
     // very bad

From 31c6f21878a4aeb13e6d3547252a88aece6002b0 Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Mon, 22 Nov 2021 11:06:19 -0800
Subject: [PATCH 1509/1591] [eslint config] [base] [refactor] make a single
 source of truth for whitespace rule names

---
 .../whitespace-async.js                       | 51 +------------------
 .../eslint-config-airbnb-base/whitespace.js   | 51 +------------------
 .../whitespaceRules.js                        | 49 ++++++++++++++++++
 3 files changed, 53 insertions(+), 98 deletions(-)
 create mode 100644 packages/eslint-config-airbnb-base/whitespaceRules.js

diff --git a/packages/eslint-config-airbnb-base/whitespace-async.js b/packages/eslint-config-airbnb-base/whitespace-async.js
index ee7e8b4034..55c5161235 100755
--- a/packages/eslint-config-airbnb-base/whitespace-async.js
+++ b/packages/eslint-config-airbnb-base/whitespace-async.js
@@ -5,6 +5,7 @@ const entries = require('object.entries');
 const { ESLint } = require('eslint');
 
 const baseConfig = require('.');
+const whitespaceRules = require('./whitespaceRules');
 
 const severities = ['off', 'warn', 'error'];
 
@@ -45,52 +46,4 @@ async function onlyErrorOnRules(rulesToError, config) {
   return errorsOnly;
 }
 
-onlyErrorOnRules([
-  'array-bracket-newline',
-  'array-bracket-spacing',
-  'array-element-newline',
-  'arrow-spacing',
-  'block-spacing',
-  'comma-spacing',
-  'computed-property-spacing',
-  'dot-location',
-  'eol-last',
-  'func-call-spacing',
-  'function-paren-newline',
-  'generator-star-spacing',
-  'implicit-arrow-linebreak',
-  'indent',
-  'key-spacing',
-  'keyword-spacing',
-  'line-comment-position',
-  'linebreak-style',
-  'multiline-ternary',
-  'newline-per-chained-call',
-  'no-irregular-whitespace',
-  'no-mixed-spaces-and-tabs',
-  'no-multi-spaces',
-  'no-regex-spaces',
-  'no-spaced-func',
-  'no-trailing-spaces',
-  'no-whitespace-before-property',
-  'nonblock-statement-body-position',
-  'object-curly-newline',
-  'object-curly-spacing',
-  'object-property-newline',
-  'one-var-declaration-per-line',
-  'operator-linebreak',
-  'padded-blocks',
-  'padding-line-between-statements',
-  'rest-spread-spacing',
-  'semi-spacing',
-  'semi-style',
-  'space-before-blocks',
-  'space-before-function-paren',
-  'space-in-parens',
-  'space-infix-ops',
-  'space-unary-ops',
-  'spaced-comment',
-  'switch-colon-spacing',
-  'template-tag-spacing',
-  'import/newline-after-import',
-], baseConfig).then((config) => console.log(JSON.stringify(config)));
+onlyErrorOnRules(whitespaceRules, baseConfig).then((config) => console.log(JSON.stringify(config)));
diff --git a/packages/eslint-config-airbnb-base/whitespace.js b/packages/eslint-config-airbnb-base/whitespace.js
index e60f7a7918..dfdf95a18e 100644
--- a/packages/eslint-config-airbnb-base/whitespace.js
+++ b/packages/eslint-config-airbnb-base/whitespace.js
@@ -6,6 +6,7 @@ if (CLIEngine) {
   /* eslint no-inner-declarations: 0 */
   const assign = require('object.assign');
   const entries = require('object.entries');
+  const whitespaceRules = require('./whitespaceRules');
 
   const baseConfig = require('.');
 
@@ -45,55 +46,7 @@ if (CLIEngine) {
     return errorsOnly;
   }
 
-  module.exports = onlyErrorOnRules([
-    'array-bracket-newline',
-    'array-bracket-spacing',
-    'array-element-newline',
-    'arrow-spacing',
-    'block-spacing',
-    'comma-spacing',
-    'computed-property-spacing',
-    'dot-location',
-    'eol-last',
-    'func-call-spacing',
-    'function-paren-newline',
-    'generator-star-spacing',
-    'implicit-arrow-linebreak',
-    'indent',
-    'key-spacing',
-    'keyword-spacing',
-    'line-comment-position',
-    'linebreak-style',
-    'multiline-ternary',
-    'newline-per-chained-call',
-    'no-irregular-whitespace',
-    'no-mixed-spaces-and-tabs',
-    'no-multi-spaces',
-    'no-regex-spaces',
-    'no-spaced-func',
-    'no-trailing-spaces',
-    'no-whitespace-before-property',
-    'nonblock-statement-body-position',
-    'object-curly-newline',
-    'object-curly-spacing',
-    'object-property-newline',
-    'one-var-declaration-per-line',
-    'operator-linebreak',
-    'padded-blocks',
-    'padding-line-between-statements',
-    'rest-spread-spacing',
-    'semi-spacing',
-    'semi-style',
-    'space-before-blocks',
-    'space-before-function-paren',
-    'space-in-parens',
-    'space-infix-ops',
-    'space-unary-ops',
-    'spaced-comment',
-    'switch-colon-spacing',
-    'template-tag-spacing',
-    'import/newline-after-import',
-  ], baseConfig);
+  module.exports = onlyErrorOnRules(whitespaceRules, baseConfig);
 } else {
   const path = require('path');
   const { execSync } = require('child_process');
diff --git a/packages/eslint-config-airbnb-base/whitespaceRules.js b/packages/eslint-config-airbnb-base/whitespaceRules.js
new file mode 100644
index 0000000000..6b0d3bfec7
--- /dev/null
+++ b/packages/eslint-config-airbnb-base/whitespaceRules.js
@@ -0,0 +1,49 @@
+module.exports = [
+  'array-bracket-newline',
+  'array-bracket-spacing',
+  'array-element-newline',
+  'arrow-spacing',
+  'block-spacing',
+  'comma-spacing',
+  'computed-property-spacing',
+  'dot-location',
+  'eol-last',
+  'func-call-spacing',
+  'function-paren-newline',
+  'generator-star-spacing',
+  'implicit-arrow-linebreak',
+  'indent',
+  'key-spacing',
+  'keyword-spacing',
+  'line-comment-position',
+  'linebreak-style',
+  'multiline-ternary',
+  'newline-per-chained-call',
+  'no-irregular-whitespace',
+  'no-mixed-spaces-and-tabs',
+  'no-multi-spaces',
+  'no-regex-spaces',
+  'no-spaced-func',
+  'no-trailing-spaces',
+  'no-whitespace-before-property',
+  'nonblock-statement-body-position',
+  'object-curly-newline',
+  'object-curly-spacing',
+  'object-property-newline',
+  'one-var-declaration-per-line',
+  'operator-linebreak',
+  'padded-blocks',
+  'padding-line-between-statements',
+  'rest-spread-spacing',
+  'semi-spacing',
+  'semi-style',
+  'space-before-blocks',
+  'space-before-function-paren',
+  'space-in-parens',
+  'space-infix-ops',
+  'space-unary-ops',
+  'spaced-comment',
+  'switch-colon-spacing',
+  'template-tag-spacing',
+  'import/newline-after-import'
+];

From c4000b932a452a5d33663310b28ce7d11ea88f33 Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Mon, 22 Nov 2021 11:07:00 -0800
Subject: [PATCH 1510/1591] [eslint config] [fix] `whitespace`: udpate to
 support eslint 8

Fixes #2517
---
 .../eslint-config-airbnb/whitespace-async.js  |  49 ++++++
 packages/eslint-config-airbnb/whitespace.js   | 140 ++++++------------
 .../eslint-config-airbnb/whitespaceRules.js   |  64 ++++++++
 3 files changed, 158 insertions(+), 95 deletions(-)
 create mode 100755 packages/eslint-config-airbnb/whitespace-async.js
 create mode 100644 packages/eslint-config-airbnb/whitespaceRules.js

diff --git a/packages/eslint-config-airbnb/whitespace-async.js b/packages/eslint-config-airbnb/whitespace-async.js
new file mode 100755
index 0000000000..55c5161235
--- /dev/null
+++ b/packages/eslint-config-airbnb/whitespace-async.js
@@ -0,0 +1,49 @@
+#!/usr/bin/env node
+
+const assign = require('object.assign');
+const entries = require('object.entries');
+const { ESLint } = require('eslint');
+
+const baseConfig = require('.');
+const whitespaceRules = require('./whitespaceRules');
+
+const severities = ['off', 'warn', 'error'];
+
+function getSeverity(ruleConfig) {
+  if (Array.isArray(ruleConfig)) {
+    return getSeverity(ruleConfig[0]);
+  }
+  if (typeof ruleConfig === 'number') {
+    return severities[ruleConfig];
+  }
+  return ruleConfig;
+}
+
+async function onlyErrorOnRules(rulesToError, config) {
+  const errorsOnly = assign({}, config);
+  const cli = new ESLint({
+    useEslintrc: false,
+    baseConfig: config
+  });
+  const baseRules = (await cli.calculateConfigForFile(require.resolve('./'))).rules;
+
+  entries(baseRules).forEach((rule) => {
+    const ruleName = rule[0];
+    const ruleConfig = rule[1];
+    const severity = getSeverity(ruleConfig);
+
+    if (rulesToError.indexOf(ruleName) === -1 && severity === 'error') {
+      if (Array.isArray(ruleConfig)) {
+        errorsOnly.rules[ruleName] = ['warn'].concat(ruleConfig.slice(1));
+      } else if (typeof ruleConfig === 'number') {
+        errorsOnly.rules[ruleName] = 1;
+      } else {
+        errorsOnly.rules[ruleName] = 'warn';
+      }
+    }
+  });
+
+  return errorsOnly;
+}
+
+onlyErrorOnRules(whitespaceRules, baseConfig).then((config) => console.log(JSON.stringify(config)));
diff --git a/packages/eslint-config-airbnb/whitespace.js b/packages/eslint-config-airbnb/whitespace.js
index 48445ada24..dfdf95a18e 100644
--- a/packages/eslint-config-airbnb/whitespace.js
+++ b/packages/eslint-config-airbnb/whitespace.js
@@ -1,105 +1,55 @@
-const assign = require('object.assign');
-const entries = require('object.entries');
+/* eslint global-require: 0 */
+
 const { CLIEngine } = require('eslint');
 
-const baseConfig = require('.');
+if (CLIEngine) {
+  /* eslint no-inner-declarations: 0 */
+  const assign = require('object.assign');
+  const entries = require('object.entries');
+  const whitespaceRules = require('./whitespaceRules');
 
-const severities = ['off', 'warn', 'error'];
+  const baseConfig = require('.');
 
-function getSeverity(ruleConfig) {
-  if (Array.isArray(ruleConfig)) {
-    return getSeverity(ruleConfig[0]);
-  }
-  if (typeof ruleConfig === 'number') {
-    return severities[ruleConfig];
+  const severities = ['off', 'warn', 'error'];
+
+  function getSeverity(ruleConfig) {
+    if (Array.isArray(ruleConfig)) {
+      return getSeverity(ruleConfig[0]);
+    }
+    if (typeof ruleConfig === 'number') {
+      return severities[ruleConfig];
+    }
+    return ruleConfig;
   }
-  return ruleConfig;
-}
 
-function onlyErrorOnRules(rulesToError, config) {
-  const errorsOnly = assign({}, config);
-  const cli = new CLIEngine({ baseConfig: config, useEslintrc: false });
-  const baseRules = cli.getConfigForFile(require.resolve('./')).rules;
+  function onlyErrorOnRules(rulesToError, config) {
+    const errorsOnly = assign({}, config);
+    const cli = new CLIEngine({ baseConfig: config, useEslintrc: false });
+    const baseRules = cli.getConfigForFile(require.resolve('./')).rules;
+
+    entries(baseRules).forEach((rule) => {
+      const ruleName = rule[0];
+      const ruleConfig = rule[1];
+      const severity = getSeverity(ruleConfig);
+
+      if (rulesToError.indexOf(ruleName) === -1 && severity === 'error') {
+        if (Array.isArray(ruleConfig)) {
+          errorsOnly.rules[ruleName] = ['warn'].concat(ruleConfig.slice(1));
+        } else if (typeof ruleConfig === 'number') {
+          errorsOnly.rules[ruleName] = 1;
+        } else {
+          errorsOnly.rules[ruleName] = 'warn';
+        }
+      }
+    });
 
-  entries(baseRules).forEach((rule) => {
-    const ruleName = rule[0];
-    const ruleConfig = rule[1];
-    const severity = getSeverity(ruleConfig);
+    return errorsOnly;
+  }
 
-    if (rulesToError.indexOf(ruleName) === -1 && severity === 'error') {
-      if (Array.isArray(ruleConfig)) {
-        errorsOnly.rules[ruleName] = ['warn'].concat(ruleConfig.slice(1));
-      } else if (typeof ruleConfig === 'number') {
-        errorsOnly.rules[ruleName] = 1;
-      } else {
-        errorsOnly.rules[ruleName] = 'warn';
-      }
-    }
-  });
+  module.exports = onlyErrorOnRules(whitespaceRules, baseConfig);
+} else {
+  const path = require('path');
+  const { execSync } = require('child_process');
 
-  return errorsOnly;
+  module.exports = JSON.parse(String(execSync(path.join(__dirname, 'whitespace-async.js'))));
 }
-
-module.exports = onlyErrorOnRules([
-  'array-bracket-newline',
-  'array-bracket-spacing',
-  'array-element-newline',
-  'arrow-spacing',
-  'block-spacing',
-  'comma-spacing',
-  'computed-property-spacing',
-  'dot-location',
-  'eol-last',
-  'func-call-spacing',
-  'function-paren-newline',
-  'generator-star-spacing',
-  'implicit-arrow-linebreak',
-  'indent',
-  'key-spacing',
-  'keyword-spacing',
-  'line-comment-position',
-  'linebreak-style',
-  'multiline-ternary',
-  'newline-per-chained-call',
-  'no-irregular-whitespace',
-  'no-mixed-spaces-and-tabs',
-  'no-multi-spaces',
-  'no-regex-spaces',
-  'no-spaced-func',
-  'no-trailing-spaces',
-  'no-whitespace-before-property',
-  'nonblock-statement-body-position',
-  'object-curly-newline',
-  'object-curly-spacing',
-  'object-property-newline',
-  'one-var-declaration-per-line',
-  'operator-linebreak',
-  'padded-blocks',
-  'padding-line-between-statements',
-  'rest-spread-spacing',
-  'semi-spacing',
-  'semi-style',
-  'space-before-blocks',
-  'space-before-function-paren',
-  'space-in-parens',
-  'space-infix-ops',
-  'space-unary-ops',
-  'spaced-comment',
-  'switch-colon-spacing',
-  'template-tag-spacing',
-  'import/newline-after-import',
-  // eslint-plugin-react rules
-  'react/jsx-child-element-spacing',
-  'react/jsx-closing-bracket-location',
-  'react/jsx-closing-tag-location',
-  'react/jsx-curly-spacing',
-  'react/jsx-equals-spacing',
-  'react/jsx-first-prop-newline',
-  'react/jsx-indent',
-  'react/jsx-indent-props',
-  'react/jsx-max-props-per-line',
-  'react/jsx-one-expression-per-line',
-  'react/jsx-space-before-closing',
-  'react/jsx-tag-spacing',
-  'react/jsx-wrap-multilines',
-], baseConfig);
diff --git a/packages/eslint-config-airbnb/whitespaceRules.js b/packages/eslint-config-airbnb/whitespaceRules.js
new file mode 100644
index 0000000000..7c4cf691c3
--- /dev/null
+++ b/packages/eslint-config-airbnb/whitespaceRules.js
@@ -0,0 +1,64 @@
+module.exports = [
+  'array-bracket-newline',
+  'array-bracket-spacing',
+  'array-element-newline',
+  'arrow-spacing',
+  'block-spacing',
+  'comma-spacing',
+  'computed-property-spacing',
+  'dot-location',
+  'eol-last',
+  'func-call-spacing',
+  'function-paren-newline',
+  'generator-star-spacing',
+  'implicit-arrow-linebreak',
+  'indent',
+  'key-spacing',
+  'keyword-spacing',
+  'line-comment-position',
+  'linebreak-style',
+  'multiline-ternary',
+  'newline-per-chained-call',
+  'no-irregular-whitespace',
+  'no-mixed-spaces-and-tabs',
+  'no-multi-spaces',
+  'no-regex-spaces',
+  'no-spaced-func',
+  'no-trailing-spaces',
+  'no-whitespace-before-property',
+  'nonblock-statement-body-position',
+  'object-curly-newline',
+  'object-curly-spacing',
+  'object-property-newline',
+  'one-var-declaration-per-line',
+  'operator-linebreak',
+  'padded-blocks',
+  'padding-line-between-statements',
+  'rest-spread-spacing',
+  'semi-spacing',
+  'semi-style',
+  'space-before-blocks',
+  'space-before-function-paren',
+  'space-in-parens',
+  'space-infix-ops',
+  'space-unary-ops',
+  'spaced-comment',
+  'switch-colon-spacing',
+  'template-tag-spacing',
+  'import/newline-after-import',
+
+  // eslint-plugin-react rules
+  'react/jsx-child-element-spacing',
+  'react/jsx-closing-bracket-location',
+  'react/jsx-closing-tag-location',
+  'react/jsx-curly-spacing',
+  'react/jsx-equals-spacing',
+  'react/jsx-first-prop-newline',
+  'react/jsx-indent',
+  'react/jsx-indent-props',
+  'react/jsx-max-props-per-line',
+  'react/jsx-one-expression-per-line',
+  'react/jsx-space-before-closing',
+  'react/jsx-tag-spacing',
+  'react/jsx-wrap-multilines',
+];

From e0bb39351941fa06978dcf90ea57cf3923c19143 Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Mon, 22 Nov 2021 11:12:26 -0800
Subject: [PATCH 1511/1591] [eslint config] [*] [dev deps] update `tape`

---
 packages/eslint-config-airbnb-base/package.json | 2 +-
 packages/eslint-config-airbnb/package.json      | 2 +-
 2 files changed, 2 insertions(+), 2 deletions(-)

diff --git a/packages/eslint-config-airbnb-base/package.json b/packages/eslint-config-airbnb-base/package.json
index ba2af920da..2534488c92 100644
--- a/packages/eslint-config-airbnb-base/package.json
+++ b/packages/eslint-config-airbnb-base/package.json
@@ -77,7 +77,7 @@
     "eslint-plugin-import": "^2.25.3",
     "in-publish": "^2.0.1",
     "safe-publish-latest": "^2.0.0",
-    "tape": "^5.3.1"
+    "tape": "^5.3.2"
   },
   "peerDependencies": {
     "eslint": "^7.32.0 || ^8.2.0",
diff --git a/packages/eslint-config-airbnb/package.json b/packages/eslint-config-airbnb/package.json
index 0a72d75fef..17e3643010 100644
--- a/packages/eslint-config-airbnb/package.json
+++ b/packages/eslint-config-airbnb/package.json
@@ -84,7 +84,7 @@
     "in-publish": "^2.0.1",
     "react": ">= 0.13.0",
     "safe-publish-latest": "^2.0.0",
-    "tape": "^5.3.1"
+    "tape": "^5.3.2"
   },
   "peerDependencies": {
     "eslint": "^7.32.0 || ^8.2.0",

From 97a3238020ddf3d9ae8d7e0d46d542c960cfe93b Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Mon, 22 Nov 2021 11:12:36 -0800
Subject: [PATCH 1512/1591] [eslint config] [deps] update `eslint-plugin-react`

---
 packages/eslint-config-airbnb/package.json | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/packages/eslint-config-airbnb/package.json b/packages/eslint-config-airbnb/package.json
index 17e3643010..0d2e9165fe 100644
--- a/packages/eslint-config-airbnb/package.json
+++ b/packages/eslint-config-airbnb/package.json
@@ -79,7 +79,7 @@
     "eslint-find-rules": "^4.0.0",
     "eslint-plugin-import": "^2.25.3",
     "eslint-plugin-jsx-a11y": "^6.5.1",
-    "eslint-plugin-react": "^7.27.0",
+    "eslint-plugin-react": "^7.27.1",
     "eslint-plugin-react-hooks": "^4.3.0",
     "in-publish": "^2.0.1",
     "react": ">= 0.13.0",
@@ -90,7 +90,7 @@
     "eslint": "^7.32.0 || ^8.2.0",
     "eslint-plugin-import": "^2.25.3",
     "eslint-plugin-jsx-a11y": "^6.5.1",
-    "eslint-plugin-react": "^7.27.0",
+    "eslint-plugin-react": "^7.27.1",
     "eslint-plugin-react-hooks": "^4.3.0"
   },
   "engines": {

From c05ffb2417908650ec789aa442020e34669ad824 Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Mon, 22 Nov 2021 13:32:11 -0800
Subject: [PATCH 1513/1591] [eslint config] v19.0.1

---
 packages/eslint-config-airbnb/CHANGELOG.md | 6 ++++++
 packages/eslint-config-airbnb/package.json | 2 +-
 2 files changed, 7 insertions(+), 1 deletion(-)

diff --git a/packages/eslint-config-airbnb/CHANGELOG.md b/packages/eslint-config-airbnb/CHANGELOG.md
index 52ce158263..3d06242f65 100644
--- a/packages/eslint-config-airbnb/CHANGELOG.md
+++ b/packages/eslint-config-airbnb/CHANGELOG.md
@@ -1,3 +1,9 @@
+19.0.1 / 2021-11-22
+==================
+ - [fix] `whitespace`: update to support eslint 8 (#2517)
+ - [deps] update `eslint-plugin-react`
+ - [dev deps] update `tape`
+
 19.0.0 / 2021-11-10
 ==================
  - [breaking] support `eslint` 8; drop `eslint` < 7
diff --git a/packages/eslint-config-airbnb/package.json b/packages/eslint-config-airbnb/package.json
index 0d2e9165fe..4fd8af70c8 100644
--- a/packages/eslint-config-airbnb/package.json
+++ b/packages/eslint-config-airbnb/package.json
@@ -1,6 +1,6 @@
 {
   "name": "eslint-config-airbnb",
-  "version": "19.0.0",
+  "version": "19.0.1",
   "description": "Airbnb's ESLint config, following our styleguide",
   "main": "index.js",
   "exports": {

From 371537f393da4862c624bdd90ae823bda0e251ec Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Mon, 22 Nov 2021 13:44:36 -0800
Subject: [PATCH 1514/1591] [Tests] re-enable tests disabled for the eslint 8
 upgrade

---
 .github/workflows/node.yml                    | 16 ++----
 .../test/test-react-order.js                  | 54 +++++++++----------
 2 files changed, 28 insertions(+), 42 deletions(-)

diff --git a/.github/workflows/node.yml b/.github/workflows/node.yml
index 8337d1da57..6fc77ea08d 100644
--- a/.github/workflows/node.yml
+++ b/.github/workflows/node.yml
@@ -62,16 +62,12 @@ jobs:
       matrix:
         node-version: ${{ fromJson(needs.matrix.outputs.latest) }}
         eslint:
+          - 8
           - 7
-          # - 6
-          # - 5
         package:
           - eslint-config-airbnb
         react-hooks:
-          - ''
-          # - 3 # TODO: re-enable these once the react config uses eslint 8
-          # - 2.3
-          # - 1.7
+          - 4
 
     defaults:
       run:
@@ -131,16 +127,12 @@ jobs:
       fail-fast: false
       matrix:
         eslint:
+          - 8
           - 7
-          # - 6
-          # - 5
         package:
           - eslint-config-airbnb
         react-hooks:
-          - ''
-          # - 3 # TODO: re-enable these once the react config uses eslint 8
-          # - 2.3
-          # - 1.7
+          - 4
 
     defaults:
       run:
diff --git a/packages/eslint-config-airbnb/test/test-react-order.js b/packages/eslint-config-airbnb/test/test-react-order.js
index dca8b73e8a..0ab4f937f7 100644
--- a/packages/eslint-config-airbnb/test/test-react-order.js
+++ b/packages/eslint-config-airbnb/test/test-react-order.js
@@ -4,25 +4,25 @@ import eslintrc from '..';
 import reactRules from '../rules/react';
 import reactA11yRules from '../rules/react-a11y';
 
+const rules = {
+  // It is okay to import devDependencies in tests.
+  'import/no-extraneous-dependencies': [2, { devDependencies: true }],
+  // this doesn't matter for tests
+  'lines-between-class-members': 0,
+  // otherwise we need some junk in our fixture code
+  'react/no-unused-class-component-methods': 0,
+};
 const cli = new (CLIEngine || ESLint)({
   useEslintrc: false,
   baseConfig: eslintrc,
-
-  rules: {
-    // It is okay to import devDependencies in tests.
-    'import/no-extraneous-dependencies': [2, { devDependencies: true }],
-    // this doesn't matter for tests
-    'lines-between-class-members': 0,
-    // otherwise we need some junk in our fixture code
-    'react/no-unused-class-component-methods': 0,
-  },
+  ...(CLIEngine ? { rules } : { overrideConfig: { rules } }),
 });
 
-function lint(text) {
+async function lint(text) {
   // @see https://eslint.org/docs/developer-guide/nodejs-api.html#executeonfiles
   // @see https://eslint.org/docs/developer-guide/nodejs-api.html#executeontext
-  const linter = CLIEngine ? cli.executeOnText(text) : cli.lintText(text);
-  return linter.results[0];
+  const linter = CLIEngine ? cli.executeOnText(text) : await cli.lintText(text);
+  return (CLIEngine ? linter.results : linter)[0];
 }
 
 function wrapComponent(body) {
@@ -42,9 +42,8 @@ test('validate react methods order', (t) => {
     t.deepEqual(reactA11yRules.plugins, ['jsx-a11y', 'react']);
   });
 
-  t.test('passes a good component', (t) => {
-    t.plan(3);
-    const result = lint(wrapComponent(`
+  t.test('passes a good component', async (t) => {
+    const result = await lint(wrapComponent(`
   componentDidMount() {}
   handleSubmit() {}
   onButtonAClick() {}
@@ -61,9 +60,8 @@ test('validate react methods order', (t) => {
     t.notOk(result.errorCount, 'no errors');
   });
 
-  t.test('order: when random method is first', (t) => {
-    t.plan(2);
-    const result = lint(wrapComponent(`
+  t.test('order: when random method is first', async (t) => {
+    const result = await lint(wrapComponent(`
   someMethod() {}
   componentDidMount() {}
   setFoo() {}
@@ -77,9 +75,8 @@ test('validate react methods order', (t) => {
     t.deepEqual(result.messages.map((msg) => msg.ruleId), ['react/sort-comp'], 'fails due to sort');
   });
 
-  t.test('order: when random method after lifecycle methods', (t) => {
-    t.plan(2);
-    const result = lint(wrapComponent(`
+  t.test('order: when random method after lifecycle methods', async (t) => {
+    const result = await lint(wrapComponent(`
   componentDidMount() {}
   someMethod() {}
   setFoo() {}
@@ -93,9 +90,8 @@ test('validate react methods order', (t) => {
     t.deepEqual(result.messages.map((msg) => msg.ruleId), ['react/sort-comp'], 'fails due to sort');
   });
 
-  t.test('order: when handler method with `handle` prefix after method with `on` prefix', (t) => {
-    t.plan(2);
-    const result = lint(wrapComponent(`
+  t.test('order: when handler method with `handle` prefix after method with `on` prefix', async (t) => {
+    const result = await lint(wrapComponent(`
   componentDidMount() {}
   onButtonAClick() {}
   handleSubmit() {}
@@ -108,9 +104,8 @@ test('validate react methods order', (t) => {
     t.deepEqual(result.messages.map((msg) => msg.ruleId), ['react/sort-comp'], 'fails due to sort');
   });
 
-  t.test('order: when lifecycle methods after event handler methods', (t) => {
-    t.plan(2);
-    const result = lint(wrapComponent(`
+  t.test('order: when lifecycle methods after event handler methods', async (t) => {
+    const result = await lint(wrapComponent(`
   handleSubmit() {}
   componentDidMount() {}
   setFoo() {}
@@ -122,9 +117,8 @@ test('validate react methods order', (t) => {
     t.deepEqual(result.messages.map((msg) => msg.ruleId), ['react/sort-comp'], 'fails due to sort');
   });
 
-  t.test('order: when event handler methods after getters and setters', (t) => {
-    t.plan(2);
-    const result = lint(wrapComponent(`
+  t.test('order: when event handler methods after getters and setters', async (t) => {
+    const result = await lint(wrapComponent(`
   componentDidMount() {}
   setFoo() {}
   getFoo() {}

From afc2cc34327459dcda12ce0d0656a0ffecf100a0 Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Thu, 2 Dec 2021 10:04:51 -0800
Subject: [PATCH 1515/1591] [eslint config] [meta] fix "exports" path

Fixes #2524
---
 packages/eslint-config-airbnb/package.json | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/packages/eslint-config-airbnb/package.json b/packages/eslint-config-airbnb/package.json
index 4fd8af70c8..c7565b53a1 100644
--- a/packages/eslint-config-airbnb/package.json
+++ b/packages/eslint-config-airbnb/package.json
@@ -11,7 +11,7 @@
     "./whitespace": "./whitespace.js",
     "./rules/react": "./rules/react.js",
     "./rules/react-a11y": "./rules/react-a11y.js",
-    "./rules/react-hooks": "./rules/react-hook.js",
+    "./rules/react-hooks": "./rules/react-hooks.js",
     "./package.json": "./package.json"
   },
   "scripts": {

From 152bd5e85a9ba941d6a3f38643317bbfb6e1fbb3 Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Thu, 2 Dec 2021 10:34:58 -0800
Subject: [PATCH 1516/1591] [eslint config] v19.0.2

---
 packages/eslint-config-airbnb/CHANGELOG.md | 5 +++++
 packages/eslint-config-airbnb/package.json | 2 +-
 2 files changed, 6 insertions(+), 1 deletion(-)

diff --git a/packages/eslint-config-airbnb/CHANGELOG.md b/packages/eslint-config-airbnb/CHANGELOG.md
index 3d06242f65..590cc8e704 100644
--- a/packages/eslint-config-airbnb/CHANGELOG.md
+++ b/packages/eslint-config-airbnb/CHANGELOG.md
@@ -1,3 +1,8 @@
+19.0.2 / 2021-12-02
+==================
+ - [meta] fix "exports" path (#2525)
+ - [Tests] re-enable tests disabled for the eslint 8 upgrade
+
 19.0.1 / 2021-11-22
 ==================
  - [fix] `whitespace`: update to support eslint 8 (#2517)
diff --git a/packages/eslint-config-airbnb/package.json b/packages/eslint-config-airbnb/package.json
index c7565b53a1..46fd4b6bbf 100644
--- a/packages/eslint-config-airbnb/package.json
+++ b/packages/eslint-config-airbnb/package.json
@@ -1,6 +1,6 @@
 {
   "name": "eslint-config-airbnb",
-  "version": "19.0.1",
+  "version": "19.0.2",
   "description": "Airbnb's ESLint config, following our styleguide",
   "main": "index.js",
   "exports": {

From 445322db64f0dbba35616ee68366f9d929970a3e Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Wed, 22 Dec 2021 15:09:25 -0800
Subject: [PATCH 1517/1591] [eslint config] [deps] update `eslint-plugin-react`

---
 packages/eslint-config-airbnb/package.json | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/packages/eslint-config-airbnb/package.json b/packages/eslint-config-airbnb/package.json
index 46fd4b6bbf..d882d4cb4f 100644
--- a/packages/eslint-config-airbnb/package.json
+++ b/packages/eslint-config-airbnb/package.json
@@ -79,7 +79,7 @@
     "eslint-find-rules": "^4.0.0",
     "eslint-plugin-import": "^2.25.3",
     "eslint-plugin-jsx-a11y": "^6.5.1",
-    "eslint-plugin-react": "^7.27.1",
+    "eslint-plugin-react": "^7.28.0",
     "eslint-plugin-react-hooks": "^4.3.0",
     "in-publish": "^2.0.1",
     "react": ">= 0.13.0",
@@ -90,7 +90,7 @@
     "eslint": "^7.32.0 || ^8.2.0",
     "eslint-plugin-import": "^2.25.3",
     "eslint-plugin-jsx-a11y": "^6.5.1",
-    "eslint-plugin-react": "^7.27.1",
+    "eslint-plugin-react": "^7.28.0",
     "eslint-plugin-react-hooks": "^4.3.0"
   },
   "engines": {

From 38bc026fe46f807627967bed1e5e7415182cba20 Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Wed, 22 Dec 2021 15:12:04 -0800
Subject: [PATCH 1518/1591] [eslint config] [base] add disabled
 `prefer-object-has-own` rule

---
 packages/eslint-config-airbnb-base/rules/best-practices.js | 5 +++++
 1 file changed, 5 insertions(+)

diff --git a/packages/eslint-config-airbnb-base/rules/best-practices.js b/packages/eslint-config-airbnb-base/rules/best-practices.js
index b91133de0a..31f74b51c0 100644
--- a/packages/eslint-config-airbnb-base/rules/best-practices.js
+++ b/packages/eslint-config-airbnb-base/rules/best-practices.js
@@ -376,6 +376,11 @@ module.exports = {
     // https://eslint.org/docs/rules/prefer-named-capture-group
     'prefer-named-capture-group': 'off',
 
+    // Prefer Object.hasOwn() over Object.prototype.hasOwnProperty.call()
+    // https://eslint.org/docs/rules/prefer-object-has-own
+    // TODO: semver-major: enable thus rule, once eslint v8.5.0 is required
+    'prefer-object-has-own': 'off',
+
     // https://eslint.org/docs/rules/prefer-regex-literals
     'prefer-regex-literals': ['error', {
       disallowRedundantWrapping: true,

From 274c8d570155a05b016980294d4204c5711bce86 Mon Sep 17 00:00:00 2001
From: David Petersen <david@petersendidit.com>
Date: Wed, 10 Nov 2021 17:05:21 -0600
Subject: [PATCH 1519/1591] [eslint config] [patch] set `namedComponents`
 option to match style guide

Change the `namedComponents` option to `function-declaration` to match what the style guide requires.

https://github.com/airbnb/javascript/commit/019e0f7e07477e85249e1d584f22773120c41b91#r60060792
---
 packages/eslint-config-airbnb/rules/react.js | 3 +--
 1 file changed, 1 insertion(+), 2 deletions(-)

diff --git a/packages/eslint-config-airbnb/rules/react.js b/packages/eslint-config-airbnb/rules/react.js
index 71230fac71..4ece5a342c 100644
--- a/packages/eslint-config-airbnb/rules/react.js
+++ b/packages/eslint-config-airbnb/rules/react.js
@@ -524,9 +524,8 @@ module.exports = {
 
     // Enforce a specific function type for function components
     // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/function-component-definition.md
-    // TODO: investigate if setting namedComponents to expression vs declaration is problematic
     'react/function-component-definition': ['error', {
-      namedComponents: 'function-expression',
+      namedComponents: ['function-declaration', 'function-expression'],
       unnamedComponents: 'function-expression',
     }],
 

From baaa5e8d26f869c2520f991b34e701f220a66313 Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Fri, 24 Dec 2021 12:27:19 -0800
Subject: [PATCH 1520/1591] [eslint config] v19.0.3

---
 packages/eslint-config-airbnb/CHANGELOG.md | 5 +++++
 packages/eslint-config-airbnb/package.json | 2 +-
 2 files changed, 6 insertions(+), 1 deletion(-)

diff --git a/packages/eslint-config-airbnb/CHANGELOG.md b/packages/eslint-config-airbnb/CHANGELOG.md
index 590cc8e704..e2adecc9dd 100644
--- a/packages/eslint-config-airbnb/CHANGELOG.md
+++ b/packages/eslint-config-airbnb/CHANGELOG.md
@@ -1,3 +1,8 @@
+19.0.3 / 2021-12-24
+==================
+ - [patch] set `namedComponents` option to match style guide
+ - [deps] update `eslint-plugin-react`
+
 19.0.2 / 2021-12-02
 ==================
  - [meta] fix "exports" path (#2525)
diff --git a/packages/eslint-config-airbnb/package.json b/packages/eslint-config-airbnb/package.json
index d882d4cb4f..095c9fc03f 100644
--- a/packages/eslint-config-airbnb/package.json
+++ b/packages/eslint-config-airbnb/package.json
@@ -1,6 +1,6 @@
 {
   "name": "eslint-config-airbnb",
-  "version": "19.0.2",
+  "version": "19.0.3",
   "description": "Airbnb's ESLint config, following our styleguide",
   "main": "index.js",
   "exports": {

From d4e39c9b10767cc77c7d0091f2eae06a6ccfc33e Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Sat, 25 Dec 2021 07:34:29 -0800
Subject: [PATCH 1521/1591] v19.0.4

---
 packages/eslint-config-airbnb-base/package.json | 4 ++--
 packages/eslint-config-airbnb/CHANGELOG.md      | 4 ++++
 packages/eslint-config-airbnb/package.json      | 2 +-
 3 files changed, 7 insertions(+), 3 deletions(-)

diff --git a/packages/eslint-config-airbnb-base/package.json b/packages/eslint-config-airbnb-base/package.json
index 2534488c92..13c3f13c6c 100644
--- a/packages/eslint-config-airbnb-base/package.json
+++ b/packages/eslint-config-airbnb-base/package.json
@@ -72,7 +72,7 @@
     "babel-preset-airbnb": "^4.5.0",
     "babel-tape-runner": "^3.0.0",
     "eclint": "^2.8.1",
-    "eslint": "^7.32.0 || ^8.2.0",
+    "eslint": "file:../eslint-config-airbnb/node_modules/eslint",
     "eslint-find-rules": "^4.0.0",
     "eslint-plugin-import": "^2.25.3",
     "in-publish": "^2.0.1",
@@ -80,7 +80,7 @@
     "tape": "^5.3.2"
   },
   "peerDependencies": {
-    "eslint": "^7.32.0 || ^8.2.0",
+    "eslint": "file:../eslint-config-airbnb/node_modules/eslint",
     "eslint-plugin-import": "^2.25.3"
   },
   "engines": {
diff --git a/packages/eslint-config-airbnb/CHANGELOG.md b/packages/eslint-config-airbnb/CHANGELOG.md
index e2adecc9dd..c66e534407 100644
--- a/packages/eslint-config-airbnb/CHANGELOG.md
+++ b/packages/eslint-config-airbnb/CHANGELOG.md
@@ -1,3 +1,7 @@
+19.0.4 / 2021-12-25
+==================
+ - republish to fix #2529
+
 19.0.3 / 2021-12-24
 ==================
  - [patch] set `namedComponents` option to match style guide
diff --git a/packages/eslint-config-airbnb/package.json b/packages/eslint-config-airbnb/package.json
index 095c9fc03f..6cc5faa228 100644
--- a/packages/eslint-config-airbnb/package.json
+++ b/packages/eslint-config-airbnb/package.json
@@ -1,6 +1,6 @@
 {
   "name": "eslint-config-airbnb",
-  "version": "19.0.3",
+  "version": "19.0.4",
   "description": "Airbnb's ESLint config, following our styleguide",
   "main": "index.js",
   "exports": {

From 34b5bc39f1a7b8b999e041db5c3b84c0ebe0f850 Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Sat, 25 Dec 2021 12:34:37 -0800
Subject: [PATCH 1522/1591] [meta] revert changes from
 d4e39c9b10767cc77c7d0091f2eae06a6ccfc33e

Caused by https://github.com/npm/cli/issues/3619
---
 packages/eslint-config-airbnb-base/package.json | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/packages/eslint-config-airbnb-base/package.json b/packages/eslint-config-airbnb-base/package.json
index 13c3f13c6c..2534488c92 100644
--- a/packages/eslint-config-airbnb-base/package.json
+++ b/packages/eslint-config-airbnb-base/package.json
@@ -72,7 +72,7 @@
     "babel-preset-airbnb": "^4.5.0",
     "babel-tape-runner": "^3.0.0",
     "eclint": "^2.8.1",
-    "eslint": "file:../eslint-config-airbnb/node_modules/eslint",
+    "eslint": "^7.32.0 || ^8.2.0",
     "eslint-find-rules": "^4.0.0",
     "eslint-plugin-import": "^2.25.3",
     "in-publish": "^2.0.1",
@@ -80,7 +80,7 @@
     "tape": "^5.3.2"
   },
   "peerDependencies": {
-    "eslint": "file:../eslint-config-airbnb/node_modules/eslint",
+    "eslint": "^7.32.0 || ^8.2.0",
     "eslint-plugin-import": "^2.25.3"
   },
   "engines": {

From b4377fb03089dd7f08955242695860d47f9caab4 Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Tue, 11 Jan 2022 12:09:40 -0800
Subject: [PATCH 1523/1591] [meta] better `eclint` command

---
 packages/eslint-config-airbnb-base/package.json | 2 +-
 packages/eslint-config-airbnb/package.json      | 2 +-
 2 files changed, 2 insertions(+), 2 deletions(-)

diff --git a/packages/eslint-config-airbnb-base/package.json b/packages/eslint-config-airbnb-base/package.json
index 2534488c92..2bf9b40d46 100644
--- a/packages/eslint-config-airbnb-base/package.json
+++ b/packages/eslint-config-airbnb-base/package.json
@@ -18,7 +18,7 @@
     "./package.json": "./package.json"
   },
   "scripts": {
-    "prelint": "eclint check * rules/* test/*",
+    "prelint": "eclint check $(git ls-files | xargs find 2> /dev/null | grep -vE 'node_modules|\\.git')",
     "lint": "eslint --report-unused-disable-directives .",
     "pretests-only": "node ./test/requires",
     "tests-only": "babel-tape-runner ./test/test-*.js",
diff --git a/packages/eslint-config-airbnb/package.json b/packages/eslint-config-airbnb/package.json
index 6cc5faa228..1e2a5dd708 100644
--- a/packages/eslint-config-airbnb/package.json
+++ b/packages/eslint-config-airbnb/package.json
@@ -15,7 +15,7 @@
     "./package.json": "./package.json"
   },
   "scripts": {
-    "prelint": "eclint check * rules/* test/*",
+    "prelint": "eclint check $(git ls-files | xargs find 2> /dev/null | grep -vE 'node_modules|\\.git')",
     "lint": "eslint .",
     "pretests-only": "node ./test/requires",
     "tests-only": "babel-tape-runner ./test/test-*.js",

From fd2f5a1daed62e129de3fa909421568e9fa3e2e6 Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Tue, 3 May 2022 10:29:37 -0700
Subject: [PATCH 1524/1591] [eslint config] [base] [deps] update
 `@babel/runtime`, `confusing-browser-globals`, `eslint-find-rules`,
 `eslint-plugin-import`, `tape`

---
 packages/eslint-config-airbnb-base/package.json    | 12 ++++++------
 packages/eslint-config-airbnb-base/rules/errors.js |  5 +++++
 2 files changed, 11 insertions(+), 6 deletions(-)

diff --git a/packages/eslint-config-airbnb-base/package.json b/packages/eslint-config-airbnb-base/package.json
index 2bf9b40d46..cdebd865be 100644
--- a/packages/eslint-config-airbnb-base/package.json
+++ b/packages/eslint-config-airbnb-base/package.json
@@ -68,26 +68,26 @@
   },
   "homepage": "https://github.com/airbnb/javascript",
   "devDependencies": {
-    "@babel/runtime": "^7.16.3",
+    "@babel/runtime": "^7.17.9",
     "babel-preset-airbnb": "^4.5.0",
     "babel-tape-runner": "^3.0.0",
     "eclint": "^2.8.1",
     "eslint": "^7.32.0 || ^8.2.0",
-    "eslint-find-rules": "^4.0.0",
-    "eslint-plugin-import": "^2.25.3",
+    "eslint-find-rules": "^4.1.0",
+    "eslint-plugin-import": "^2.26.0",
     "in-publish": "^2.0.1",
     "safe-publish-latest": "^2.0.0",
-    "tape": "^5.3.2"
+    "tape": "^5.5.3"
   },
   "peerDependencies": {
     "eslint": "^7.32.0 || ^8.2.0",
-    "eslint-plugin-import": "^2.25.3"
+    "eslint-plugin-import": "^2.26.0"
   },
   "engines": {
     "node": "^10.12.0 || >=12.0.0"
   },
   "dependencies": {
-    "confusing-browser-globals": "^1.0.10",
+    "confusing-browser-globals": "^1.0.11",
     "object.assign": "^4.1.2",
     "object.entries": "^1.1.5"
   }
diff --git a/packages/eslint-config-airbnb-base/rules/errors.js b/packages/eslint-config-airbnb-base/rules/errors.js
index cdc8c26eb7..7770d5cb86 100644
--- a/packages/eslint-config-airbnb-base/rules/errors.js
+++ b/packages/eslint-config-airbnb-base/rules/errors.js
@@ -26,6 +26,11 @@ module.exports = {
     // disallow use of console
     'no-console': 'warn',
 
+    // Disallows expressions where the operation doesn't affect the value
+    // https://eslint.org/docs/rules/no-constant-binary-expression
+    // TODO: semver-major, enable
+    'no-constant-binary-expression': 'off',
+
     // disallow use of constant expressions in conditions
     'no-constant-condition': 'warn',
 

From 7c0f28af8b9cdece524fa224cbddc4ac16e948fd Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Tue, 3 May 2022 10:33:40 -0700
Subject: [PATCH 1525/1591] [eslint config] [deps] update `@babel/runtime`,
 `eslint-find-rules`, `eslint-plugin-import`, `eslint-plugin-react`,
 `eslint-plugin-react-hooks`, `tape`

---
 packages/eslint-config-airbnb/package.json   | 18 +++++++++---------
 packages/eslint-config-airbnb/rules/react.js | 10 ++++++++++
 2 files changed, 19 insertions(+), 9 deletions(-)

diff --git a/packages/eslint-config-airbnb/package.json b/packages/eslint-config-airbnb/package.json
index 1e2a5dd708..2988682c42 100644
--- a/packages/eslint-config-airbnb/package.json
+++ b/packages/eslint-config-airbnb/package.json
@@ -71,27 +71,27 @@
     "object.entries": "^1.1.5"
   },
   "devDependencies": {
-    "@babel/runtime": "^7.16.3",
+    "@babel/runtime": "^7.17.9",
     "babel-preset-airbnb": "^4.5.0",
     "babel-tape-runner": "^3.0.0",
     "eclint": "^2.8.1",
     "eslint": "^7.32.0 || ^8.2.0",
-    "eslint-find-rules": "^4.0.0",
-    "eslint-plugin-import": "^2.25.3",
+    "eslint-find-rules": "^4.1.0",
+    "eslint-plugin-import": "^2.26.0",
     "eslint-plugin-jsx-a11y": "^6.5.1",
-    "eslint-plugin-react": "^7.28.0",
-    "eslint-plugin-react-hooks": "^4.3.0",
+    "eslint-plugin-react": "^7.29.4",
+    "eslint-plugin-react-hooks": "^4.5.0",
     "in-publish": "^2.0.1",
     "react": ">= 0.13.0",
     "safe-publish-latest": "^2.0.0",
-    "tape": "^5.3.2"
+    "tape": "^5.5.3"
   },
   "peerDependencies": {
     "eslint": "^7.32.0 || ^8.2.0",
-    "eslint-plugin-import": "^2.25.3",
+    "eslint-plugin-import": "^2.26.0",
     "eslint-plugin-jsx-a11y": "^6.5.1",
-    "eslint-plugin-react": "^7.28.0",
-    "eslint-plugin-react-hooks": "^4.3.0"
+    "eslint-plugin-react": "^7.29.4",
+    "eslint-plugin-react-hooks": "^4.5.0"
   },
   "engines": {
     "node": "^10.12.0 || ^12.22.0 || ^14.17.0 || >=16.0.0"
diff --git a/packages/eslint-config-airbnb/rules/react.js b/packages/eslint-config-airbnb/rules/react.js
index 4ece5a342c..2a21021de3 100644
--- a/packages/eslint-config-airbnb/rules/react.js
+++ b/packages/eslint-config-airbnb/rules/react.js
@@ -560,6 +560,16 @@ module.exports = {
     // Prevent declaring unused methods of component class
     // https://github.com/yannickcr/eslint-plugin-react/blob/21e01b61af7a38fc86d94f27eb66cda8054582ed/docs/rules/no-unused-class-component-methods.md
     'react/no-unused-class-component-methods': 'error',
+
+    // Ensure destructuring and symmetric naming of useState hook value and setter variables
+    // https://github.com/jsx-eslint/eslint-plugin-react/blob/c8833f301314dab3e79ef7ac4cf863e4d5fa0019/docs/rules/hook-use-state.md
+    // TODO: semver-major, enable
+    'react/hook-use-state': 'off',
+
+    // Enforce sandbox attribute on iframe elements
+    // https://github.com/jsx-eslint/eslint-plugin-react/blob/c8833f301314dab3e79ef7ac4cf863e4d5fa0019/docs/rules/iframe-missing-sandbox.md
+    // TODO: semver-major, enable
+    'react/iframe-missing-sandbox': 'off',
   },
 
   settings: {

From 1677ba6c6a285366e38998e292d42a7eab64d18e Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Tue, 3 May 2022 10:41:03 -0700
Subject: [PATCH 1526/1591] [eslint config] [meta] update eslint-plugin-react
 repo URLs

---
 packages/eslint-config-airbnb/CHANGELOG.md   |  16 +-
 packages/eslint-config-airbnb/rules/react.js | 190 +++++++++----------
 2 files changed, 103 insertions(+), 103 deletions(-)

diff --git a/packages/eslint-config-airbnb/CHANGELOG.md b/packages/eslint-config-airbnb/CHANGELOG.md
index c66e534407..68ba86b925 100644
--- a/packages/eslint-config-airbnb/CHANGELOG.md
+++ b/packages/eslint-config-airbnb/CHANGELOG.md
@@ -467,11 +467,11 @@
 [space-in-parens]: https://eslint.org/docs/rules/space-in-parens
 [template-curly-spacing]: https://eslint.org/docs/rules/template-curly-spacing
 
-[react/jsx-space-before-closing]: https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/jsx-space-before-closing.md
-[react/sort-comp]: https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/sort-comp.md
-[react/display-name]: https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/display-name.md
-[react/jsx-no-bind]: https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/jsx-no-bind.md
-[react/no-is-mounted]: https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/no-is-mounted.md
-[react/prefer-es6-class]: https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/prefer-es6-class.md
-[react/jsx-quotes]: https://github.com/yannickcr/eslint-plugin-react/blob/f817e37beddddc84b4788969f07c524fa7f0823b/docs/rules/jsx-quotes.md
-[react/prefer-stateless-function]: https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/prefer-stateless-function.md
+[react/jsx-space-before-closing]: https://github.com/jsx-eslint/eslint-plugin-react/blob/HEAD/docs/rules/jsx-space-before-closing.md
+[react/sort-comp]: https://github.com/jsx-eslint/eslint-plugin-react/blob/HEAD/docs/rules/sort-comp.md
+[react/display-name]: https://github.com/jsx-eslint/eslint-plugin-react/blob/HEAD/docs/rules/display-name.md
+[react/jsx-no-bind]: https://github.com/jsx-eslint/eslint-plugin-react/blob/HEAD/docs/rules/jsx-no-bind.md
+[react/no-is-mounted]: https://github.com/jsx-eslint/eslint-plugin-react/blob/HEAD/docs/rules/no-is-mounted.md
+[react/prefer-es6-class]: https://github.com/jsx-eslint/eslint-plugin-react/blob/HEAD/docs/rules/prefer-es6-class.md
+[react/jsx-quotes]: https://github.com/jsx-eslint/eslint-plugin-react/blob/f817e37beddddc84b4788969f07c524fa7f0823b/docs/rules/jsx-quotes.md
+[react/prefer-stateless-function]: https://github.com/jsx-eslint/eslint-plugin-react/blob/HEAD/docs/rules/prefer-stateless-function.md
diff --git a/packages/eslint-config-airbnb/rules/react.js b/packages/eslint-config-airbnb/rules/react.js
index 2a21021de3..d957fcbe7d 100644
--- a/packages/eslint-config-airbnb/rules/react.js
+++ b/packages/eslint-config-airbnb/rules/react.js
@@ -15,7 +15,7 @@ module.exports = {
   },
 
   // View link below for react rules documentation
-  // https://github.com/yannickcr/eslint-plugin-react#list-of-supported-rules
+  // https://github.com/jsx-eslint/eslint-plugin-react#list-of-supported-rules
   rules: {
     'no-underscore-dangle': [dangleRules[0], assign({}, dangleRules[1], {
       allow: dangleRules[1].allow.concat(['__REDUX_DEVTOOLS_EXTENSION_COMPOSE__']),
@@ -47,11 +47,11 @@ module.exports = {
     }],
 
     // Prevent missing displayName in a React component definition
-    // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/display-name.md
+    // https://github.com/jsx-eslint/eslint-plugin-react/blob/master/docs/rules/display-name.md
     'react/display-name': ['off', { ignoreTranspilerName: false }],
 
     // Forbid certain propTypes (any, array, object)
-    // https://github.com/yannickcr/eslint-plugin-react/blob/843d71a432baf0f01f598d7cf1eea75ad6896e4b/docs/rules/forbid-prop-types.md
+    // https://github.com/jsx-eslint/eslint-plugin-react/blob/843d71a432baf0f01f598d7cf1eea75ad6896e4b/docs/rules/forbid-prop-types.md
     'react/forbid-prop-types': ['error', {
       forbid: ['any', 'array', 'object'],
       checkContextTypes: true,
@@ -59,47 +59,47 @@ module.exports = {
     }],
 
     // Forbid certain props on DOM Nodes
-    // https://github.com/yannickcr/eslint-plugin-react/blob/843d71a432baf0f01f598d7cf1eea75ad6896e4b/docs/rules/forbid-dom-props.md
+    // https://github.com/jsx-eslint/eslint-plugin-react/blob/843d71a432baf0f01f598d7cf1eea75ad6896e4b/docs/rules/forbid-dom-props.md
     'react/forbid-dom-props': ['off', { forbid: [] }],
 
     // Enforce boolean attributes notation in JSX
-    // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/jsx-boolean-value.md
+    // https://github.com/jsx-eslint/eslint-plugin-react/blob/master/docs/rules/jsx-boolean-value.md
     'react/jsx-boolean-value': ['error', 'never', { always: [] }],
 
     // Validate closing bracket location in JSX
-    // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/jsx-closing-bracket-location.md
+    // https://github.com/jsx-eslint/eslint-plugin-react/blob/master/docs/rules/jsx-closing-bracket-location.md
     'react/jsx-closing-bracket-location': ['error', 'line-aligned'],
 
     // Validate closing tag location in JSX
-    // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/jsx-closing-tag-location.md
+    // https://github.com/jsx-eslint/eslint-plugin-react/blob/master/docs/rules/jsx-closing-tag-location.md
     'react/jsx-closing-tag-location': 'error',
 
     // Enforce or disallow spaces inside of curly braces in JSX attributes
-    // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/jsx-curly-spacing.md
+    // https://github.com/jsx-eslint/eslint-plugin-react/blob/master/docs/rules/jsx-curly-spacing.md
     'react/jsx-curly-spacing': ['error', 'never', { allowMultiline: true }],
 
     // Enforce event handler naming conventions in JSX
-    // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/jsx-handler-names.md
+    // https://github.com/jsx-eslint/eslint-plugin-react/blob/master/docs/rules/jsx-handler-names.md
     'react/jsx-handler-names': ['off', {
       eventHandlerPrefix: 'handle',
       eventHandlerPropPrefix: 'on',
     }],
 
     // Validate props indentation in JSX
-    // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/jsx-indent-props.md
+    // https://github.com/jsx-eslint/eslint-plugin-react/blob/master/docs/rules/jsx-indent-props.md
     'react/jsx-indent-props': ['error', 2],
 
     // Validate JSX has key prop when in array or iterator
-    // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/jsx-key.md
+    // https://github.com/jsx-eslint/eslint-plugin-react/blob/master/docs/rules/jsx-key.md
     // Turned off because it has too many false positives
     'react/jsx-key': 'off',
 
     // Limit maximum of props on a single line in JSX
-    // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/jsx-max-props-per-line.md
+    // https://github.com/jsx-eslint/eslint-plugin-react/blob/master/docs/rules/jsx-max-props-per-line.md
     'react/jsx-max-props-per-line': ['error', { maximum: 1, when: 'multiline' }],
 
     // Prevent usage of .bind() in JSX props
-    // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/jsx-no-bind.md
+    // https://github.com/jsx-eslint/eslint-plugin-react/blob/master/docs/rules/jsx-no-bind.md
     'react/jsx-no-bind': ['error', {
       ignoreRefs: true,
       allowArrowFunctions: true,
@@ -109,26 +109,26 @@ module.exports = {
     }],
 
     // Prevent duplicate props in JSX
-    // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/jsx-no-duplicate-props.md
+    // https://github.com/jsx-eslint/eslint-plugin-react/blob/master/docs/rules/jsx-no-duplicate-props.md
     'react/jsx-no-duplicate-props': ['error', { ignoreCase: true }],
 
     // Prevent usage of unwrapped JSX strings
-    // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/jsx-no-literals.md
+    // https://github.com/jsx-eslint/eslint-plugin-react/blob/master/docs/rules/jsx-no-literals.md
     'react/jsx-no-literals': ['off', { noStrings: true }],
 
     // Disallow undeclared variables in JSX
-    // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/jsx-no-undef.md
+    // https://github.com/jsx-eslint/eslint-plugin-react/blob/master/docs/rules/jsx-no-undef.md
     'react/jsx-no-undef': 'error',
 
     // Enforce PascalCase for user-defined JSX components
-    // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/jsx-pascal-case.md
+    // https://github.com/jsx-eslint/eslint-plugin-react/blob/master/docs/rules/jsx-pascal-case.md
     'react/jsx-pascal-case': ['error', {
       allowAllCaps: true,
       ignore: [],
     }],
 
     // Enforce propTypes declarations alphabetical sorting
-    // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/sort-prop-types.md
+    // https://github.com/jsx-eslint/eslint-plugin-react/blob/master/docs/rules/sort-prop-types.md
     'react/sort-prop-types': ['off', {
       ignoreCase: true,
       callbacksLast: false,
@@ -140,7 +140,7 @@ module.exports = {
     'react/jsx-sort-prop-types': 'off',
 
     // Enforce props alphabetical sorting
-    // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/jsx-sort-props.md
+    // https://github.com/jsx-eslint/eslint-plugin-react/blob/master/docs/rules/jsx-sort-props.md
     'react/jsx-sort-props': ['off', {
       ignoreCase: true,
       callbacksLast: false,
@@ -151,74 +151,74 @@ module.exports = {
     }],
 
     // Enforce defaultProps declarations alphabetical sorting
-    // https://github.com/yannickcr/eslint-plugin-react/blob/843d71a432baf0f01f598d7cf1eea75ad6896e4b/docs/rules/jsx-sort-default-props.md
+    // https://github.com/jsx-eslint/eslint-plugin-react/blob/843d71a432baf0f01f598d7cf1eea75ad6896e4b/docs/rules/jsx-sort-default-props.md
     'react/jsx-sort-default-props': ['off', {
       ignoreCase: true,
     }],
 
     // Prevent React to be incorrectly marked as unused
-    // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/jsx-uses-react.md
+    // https://github.com/jsx-eslint/eslint-plugin-react/blob/master/docs/rules/jsx-uses-react.md
     'react/jsx-uses-react': ['error'],
 
     // Prevent variables used in JSX to be incorrectly marked as unused
-    // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/jsx-uses-vars.md
+    // https://github.com/jsx-eslint/eslint-plugin-react/blob/master/docs/rules/jsx-uses-vars.md
     'react/jsx-uses-vars': 'error',
 
     // Prevent usage of dangerous JSX properties
-    // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/no-danger.md
+    // https://github.com/jsx-eslint/eslint-plugin-react/blob/master/docs/rules/no-danger.md
     'react/no-danger': 'warn',
 
     // Prevent usage of deprecated methods
-    // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/no-deprecated.md
+    // https://github.com/jsx-eslint/eslint-plugin-react/blob/master/docs/rules/no-deprecated.md
     'react/no-deprecated': ['error'],
 
     // Prevent usage of setState in componentDidMount
-    // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/no-did-mount-set-state.md
+    // https://github.com/jsx-eslint/eslint-plugin-react/blob/master/docs/rules/no-did-mount-set-state.md
     // this is necessary for server-rendering
     'react/no-did-mount-set-state': 'off',
 
     // Prevent usage of setState in componentDidUpdate
-    // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/no-did-update-set-state.md
+    // https://github.com/jsx-eslint/eslint-plugin-react/blob/master/docs/rules/no-did-update-set-state.md
     'react/no-did-update-set-state': 'error',
 
     // Prevent usage of setState in componentWillUpdate
-    // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/no-will-update-set-state.md
+    // https://github.com/jsx-eslint/eslint-plugin-react/blob/master/docs/rules/no-will-update-set-state.md
     'react/no-will-update-set-state': 'error',
 
     // Prevent direct mutation of this.state
-    // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/no-direct-mutation-state.md
+    // https://github.com/jsx-eslint/eslint-plugin-react/blob/master/docs/rules/no-direct-mutation-state.md
     'react/no-direct-mutation-state': 'off',
 
     // Prevent usage of isMounted
-    // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/no-is-mounted.md
+    // https://github.com/jsx-eslint/eslint-plugin-react/blob/master/docs/rules/no-is-mounted.md
     'react/no-is-mounted': 'error',
 
     // Prevent multiple component definition per file
-    // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/no-multi-comp.md
+    // https://github.com/jsx-eslint/eslint-plugin-react/blob/master/docs/rules/no-multi-comp.md
     'react/no-multi-comp': 'off',
 
     // Prevent usage of setState
-    // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/no-set-state.md
+    // https://github.com/jsx-eslint/eslint-plugin-react/blob/master/docs/rules/no-set-state.md
     'react/no-set-state': 'off',
 
     // Prevent using string references
-    // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/no-string-refs.md
+    // https://github.com/jsx-eslint/eslint-plugin-react/blob/master/docs/rules/no-string-refs.md
     'react/no-string-refs': 'error',
 
     // Prevent usage of unknown DOM property
-    // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/no-unknown-property.md
+    // https://github.com/jsx-eslint/eslint-plugin-react/blob/master/docs/rules/no-unknown-property.md
     'react/no-unknown-property': 'error',
 
     // Require ES6 class declarations over React.createClass
-    // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/prefer-es6-class.md
+    // https://github.com/jsx-eslint/eslint-plugin-react/blob/master/docs/rules/prefer-es6-class.md
     'react/prefer-es6-class': ['error', 'always'],
 
     // Require stateless functions when not using lifecycle methods, setState or ref
-    // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/prefer-stateless-function.md
+    // https://github.com/jsx-eslint/eslint-plugin-react/blob/master/docs/rules/prefer-stateless-function.md
     'react/prefer-stateless-function': ['error', { ignorePureComponents: true }],
 
     // Prevent missing props validation in a React component definition
-    // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/prop-types.md
+    // https://github.com/jsx-eslint/eslint-plugin-react/blob/master/docs/rules/prop-types.md
     'react/prop-types': ['error', {
       ignore: [],
       customValidators: [],
@@ -226,19 +226,19 @@ module.exports = {
     }],
 
     // Prevent missing React when using JSX
-    // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/react-in-jsx-scope.md
+    // https://github.com/jsx-eslint/eslint-plugin-react/blob/master/docs/rules/react-in-jsx-scope.md
     'react/react-in-jsx-scope': 'error',
 
     // Require render() methods to return something
-    // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/require-render-return.md
+    // https://github.com/jsx-eslint/eslint-plugin-react/blob/master/docs/rules/require-render-return.md
     'react/require-render-return': 'error',
 
     // Prevent extra closing tags for components without children
-    // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/self-closing-comp.md
+    // https://github.com/jsx-eslint/eslint-plugin-react/blob/master/docs/rules/self-closing-comp.md
     'react/self-closing-comp': 'error',
 
     // Enforce component methods order
-    // https://github.com/yannickcr/eslint-plugin-react/blob/843d71a432baf0f01f598d7cf1eea75ad6896e4b/docs/rules/sort-comp.md
+    // https://github.com/jsx-eslint/eslint-plugin-react/blob/843d71a432baf0f01f598d7cf1eea75ad6896e4b/docs/rules/sort-comp.md
     'react/sort-comp': ['error', {
       order: [
         'static-variables',
@@ -290,7 +290,7 @@ module.exports = {
     }],
 
     // Prevent missing parentheses around multilines JSX
-    // https://github.com/yannickcr/eslint-plugin-react/blob/843d71a432baf0f01f598d7cf1eea75ad6896e4b/docs/rules/jsx-wrap-multilines.md
+    // https://github.com/jsx-eslint/eslint-plugin-react/blob/843d71a432baf0f01f598d7cf1eea75ad6896e4b/docs/rules/jsx-wrap-multilines.md
     'react/jsx-wrap-multilines': ['error', {
       declaration: 'parens-new-line',
       assignment: 'parens-new-line',
@@ -302,55 +302,55 @@ module.exports = {
     }],
 
     // Require that the first prop in a JSX element be on a new line when the element is multiline
-    // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/jsx-first-prop-new-line.md
+    // https://github.com/jsx-eslint/eslint-plugin-react/blob/master/docs/rules/jsx-first-prop-new-line.md
     'react/jsx-first-prop-new-line': ['error', 'multiline-multiprop'],
 
     // Enforce spacing around jsx equals signs
-    // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/jsx-equals-spacing.md
+    // https://github.com/jsx-eslint/eslint-plugin-react/blob/master/docs/rules/jsx-equals-spacing.md
     'react/jsx-equals-spacing': ['error', 'never'],
 
     // Enforce JSX indentation
-    // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/jsx-indent.md
+    // https://github.com/jsx-eslint/eslint-plugin-react/blob/master/docs/rules/jsx-indent.md
     'react/jsx-indent': ['error', 2],
 
     // Disallow target="_blank" on links
-    // https://github.com/yannickcr/eslint-plugin-react/blob/ac102885765be5ff37847a871f239c6703e1c7cc/docs/rules/jsx-no-target-blank.md
+    // https://github.com/jsx-eslint/eslint-plugin-react/blob/ac102885765be5ff37847a871f239c6703e1c7cc/docs/rules/jsx-no-target-blank.md
     'react/jsx-no-target-blank': ['error', { enforceDynamicLinks: 'always' }],
 
     // only .jsx files may have JSX
-    // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/jsx-filename-extension.md
+    // https://github.com/jsx-eslint/eslint-plugin-react/blob/master/docs/rules/jsx-filename-extension.md
     'react/jsx-filename-extension': ['error', { extensions: ['.jsx'] }],
 
     // prevent accidental JS comments from being injected into JSX as text
-    // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/jsx-no-comment-textnodes.md
+    // https://github.com/jsx-eslint/eslint-plugin-react/blob/master/docs/rules/jsx-no-comment-textnodes.md
     'react/jsx-no-comment-textnodes': 'error',
 
     // disallow using React.render/ReactDOM.render's return value
-    // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/no-render-return-value.md
+    // https://github.com/jsx-eslint/eslint-plugin-react/blob/master/docs/rules/no-render-return-value.md
     'react/no-render-return-value': 'error',
 
     // require a shouldComponentUpdate method, or PureRenderMixin
-    // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/require-optimization.md
+    // https://github.com/jsx-eslint/eslint-plugin-react/blob/master/docs/rules/require-optimization.md
     'react/require-optimization': ['off', { allowDecorators: [] }],
 
     // warn against using findDOMNode()
-    // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/no-find-dom-node.md
+    // https://github.com/jsx-eslint/eslint-plugin-react/blob/master/docs/rules/no-find-dom-node.md
     'react/no-find-dom-node': 'error',
 
     // Forbid certain props on Components
-    // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/forbid-component-props.md
+    // https://github.com/jsx-eslint/eslint-plugin-react/blob/master/docs/rules/forbid-component-props.md
     'react/forbid-component-props': ['off', { forbid: [] }],
 
     // Forbid certain elements
-    // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/forbid-elements.md
+    // https://github.com/jsx-eslint/eslint-plugin-react/blob/master/docs/rules/forbid-elements.md
     'react/forbid-elements': ['off', { forbid: [], }],
 
     // Prevent problem with children and props.dangerouslySetInnerHTML
-    // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/no-danger-with-children.md
+    // https://github.com/jsx-eslint/eslint-plugin-react/blob/master/docs/rules/no-danger-with-children.md
     'react/no-danger-with-children': 'error',
 
     // Prevent unused propType definitions
-    // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/no-unused-prop-types.md
+    // https://github.com/jsx-eslint/eslint-plugin-react/blob/master/docs/rules/no-unused-prop-types.md
     'react/no-unused-prop-types': ['error', {
       customValidators: [
       ],
@@ -358,19 +358,19 @@ module.exports = {
     }],
 
     // Require style prop value be an object or var
-    // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/style-prop-object.md
+    // https://github.com/jsx-eslint/eslint-plugin-react/blob/master/docs/rules/style-prop-object.md
     'react/style-prop-object': 'error',
 
     // Prevent invalid characters from appearing in markup
-    // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/no-unescaped-entities.md
+    // https://github.com/jsx-eslint/eslint-plugin-react/blob/master/docs/rules/no-unescaped-entities.md
     'react/no-unescaped-entities': 'error',
 
     // Prevent passing of children as props
-    // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/no-children-prop.md
+    // https://github.com/jsx-eslint/eslint-plugin-react/blob/master/docs/rules/no-children-prop.md
     'react/no-children-prop': 'error',
 
     // Validate whitespace in and around the JSX opening and closing brackets
-    // https://github.com/yannickcr/eslint-plugin-react/blob/843d71a432baf0f01f598d7cf1eea75ad6896e4b/docs/rules/jsx-tag-spacing.md
+    // https://github.com/jsx-eslint/eslint-plugin-react/blob/843d71a432baf0f01f598d7cf1eea75ad6896e4b/docs/rules/jsx-tag-spacing.md
     'react/jsx-tag-spacing': ['error', {
       closingSlash: 'never',
       beforeSelfClosing: 'always',
@@ -379,44 +379,44 @@ module.exports = {
     }],
 
     // Enforce spaces before the closing bracket of self-closing JSX elements
-    // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/jsx-space-before-closing.md
+    // https://github.com/jsx-eslint/eslint-plugin-react/blob/master/docs/rules/jsx-space-before-closing.md
     // Deprecated in favor of jsx-tag-spacing
     'react/jsx-space-before-closing': ['off', 'always'],
 
     // Prevent usage of Array index in keys
-    // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/no-array-index-key.md
+    // https://github.com/jsx-eslint/eslint-plugin-react/blob/master/docs/rules/no-array-index-key.md
     'react/no-array-index-key': 'error',
 
     // Enforce a defaultProps definition for every prop that is not a required prop
-    // https://github.com/yannickcr/eslint-plugin-react/blob/843d71a432baf0f01f598d7cf1eea75ad6896e4b/docs/rules/require-default-props.md
+    // https://github.com/jsx-eslint/eslint-plugin-react/blob/843d71a432baf0f01f598d7cf1eea75ad6896e4b/docs/rules/require-default-props.md
     'react/require-default-props': ['error', {
       forbidDefaultForRequired: true,
     }],
 
     // Forbids using non-exported propTypes
-    // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/forbid-foreign-prop-types.md
+    // https://github.com/jsx-eslint/eslint-plugin-react/blob/master/docs/rules/forbid-foreign-prop-types.md
     // this is intentionally set to "warn". it would be "error",
     // but it's only critical if you're stripping propTypes in production.
     'react/forbid-foreign-prop-types': ['warn', { allowInPropTypes: true }],
 
     // Prevent void DOM elements from receiving children
-    // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/void-dom-elements-no-children.md
+    // https://github.com/jsx-eslint/eslint-plugin-react/blob/master/docs/rules/void-dom-elements-no-children.md
     'react/void-dom-elements-no-children': 'error',
 
     // Enforce all defaultProps have a corresponding non-required PropType
-    // https://github.com/yannickcr/eslint-plugin-react/blob/9e13ae2c51e44872b45cc15bf1ac3a72105bdd0e/docs/rules/default-props-match-prop-types.md
+    // https://github.com/jsx-eslint/eslint-plugin-react/blob/9e13ae2c51e44872b45cc15bf1ac3a72105bdd0e/docs/rules/default-props-match-prop-types.md
     'react/default-props-match-prop-types': ['error', { allowRequiredDefaults: false }],
 
     // Prevent usage of shouldComponentUpdate when extending React.PureComponent
-    // https://github.com/yannickcr/eslint-plugin-react/blob/9e13ae2c51e44872b45cc15bf1ac3a72105bdd0e/docs/rules/no-redundant-should-component-update.md
+    // https://github.com/jsx-eslint/eslint-plugin-react/blob/9e13ae2c51e44872b45cc15bf1ac3a72105bdd0e/docs/rules/no-redundant-should-component-update.md
     'react/no-redundant-should-component-update': 'error',
 
     // Prevent unused state values
-    // https://github.com/yannickcr/eslint-plugin-react/pull/1103/
+    // https://github.com/jsx-eslint/eslint-plugin-react/pull/1103/
     'react/no-unused-state': 'error',
 
     // Enforces consistent naming for boolean props
-    // https://github.com/yannickcr/eslint-plugin-react/blob/843d71a432baf0f01f598d7cf1eea75ad6896e4b/docs/rules/boolean-prop-naming.md
+    // https://github.com/jsx-eslint/eslint-plugin-react/blob/843d71a432baf0f01f598d7cf1eea75ad6896e4b/docs/rules/boolean-prop-naming.md
     'react/boolean-prop-naming': ['off', {
       propTypeNames: ['bool', 'mutuallyExclusiveTrueProps'],
       rule: '^(is|has)[A-Z]([A-Za-z0-9]?)+',
@@ -424,27 +424,27 @@ module.exports = {
     }],
 
     // Prevents common casing typos
-    // https://github.com/yannickcr/eslint-plugin-react/blob/73abadb697034b5ccb514d79fb4689836fe61f91/docs/rules/no-typos.md
+    // https://github.com/jsx-eslint/eslint-plugin-react/blob/73abadb697034b5ccb514d79fb4689836fe61f91/docs/rules/no-typos.md
     'react/no-typos': 'error',
 
     // Enforce curly braces or disallow unnecessary curly braces in JSX props and/or children
-    // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/jsx-curly-brace-presence.md
+    // https://github.com/jsx-eslint/eslint-plugin-react/blob/master/docs/rules/jsx-curly-brace-presence.md
     'react/jsx-curly-brace-presence': ['error', { props: 'never', children: 'never' }],
 
     // One JSX Element Per Line
-    // https://github.com/yannickcr/eslint-plugin-react/blob/843d71a432baf0f01f598d7cf1eea75ad6896e4b/docs/rules/jsx-one-expression-per-line.md
+    // https://github.com/jsx-eslint/eslint-plugin-react/blob/843d71a432baf0f01f598d7cf1eea75ad6896e4b/docs/rules/jsx-one-expression-per-line.md
     'react/jsx-one-expression-per-line': ['error', { allow: 'single-child' }],
 
     // Enforce consistent usage of destructuring assignment of props, state, and context
-    // https://github.com/yannickcr/eslint-plugin-react/blob/843d71a432baf0f01f598d7cf1eea75ad6896e4b/docs/rules/destructuring-assignment.md
+    // https://github.com/jsx-eslint/eslint-plugin-react/blob/843d71a432baf0f01f598d7cf1eea75ad6896e4b/docs/rules/destructuring-assignment.md
     'react/destructuring-assignment': ['error', 'always'],
 
     // Prevent using this.state within a this.setState
-    // https://github.com/yannickcr/eslint-plugin-react/blob/843d71a432baf0f01f598d7cf1eea75ad6896e4b/docs/rules/no-access-state-in-setstate.md
+    // https://github.com/jsx-eslint/eslint-plugin-react/blob/843d71a432baf0f01f598d7cf1eea75ad6896e4b/docs/rules/no-access-state-in-setstate.md
     'react/no-access-state-in-setstate': 'error',
 
     // Prevent usage of button elements without an explicit type attribute
-    // https://github.com/yannickcr/eslint-plugin-react/blob/843d71a432baf0f01f598d7cf1eea75ad6896e4b/docs/rules/button-has-type.md
+    // https://github.com/jsx-eslint/eslint-plugin-react/blob/843d71a432baf0f01f598d7cf1eea75ad6896e4b/docs/rules/button-has-type.md
     'react/button-has-type': ['error', {
       button: true,
       submit: true,
@@ -455,44 +455,44 @@ module.exports = {
     'react/jsx-child-element-spacing': 'off',
 
     // Prevent this from being used in stateless functional components
-    // https://github.com/yannickcr/eslint-plugin-react/blob/843d71a432baf0f01f598d7cf1eea75ad6896e4b/docs/rules/no-this-in-sfc.md
+    // https://github.com/jsx-eslint/eslint-plugin-react/blob/843d71a432baf0f01f598d7cf1eea75ad6896e4b/docs/rules/no-this-in-sfc.md
     'react/no-this-in-sfc': 'error',
 
     // Validate JSX maximum depth
-    // https://github.com/yannickcr/eslint-plugin-react/blob/abe8381c0d6748047224c430ce47f02e40160ed0/docs/rules/jsx-max-depth.md
+    // https://github.com/jsx-eslint/eslint-plugin-react/blob/abe8381c0d6748047224c430ce47f02e40160ed0/docs/rules/jsx-max-depth.md
     'react/jsx-max-depth': 'off',
 
     // Disallow multiple spaces between inline JSX props
-    // https://github.com/yannickcr/eslint-plugin-react/blob/ac102885765be5ff37847a871f239c6703e1c7cc/docs/rules/jsx-props-no-multi-spaces.md
+    // https://github.com/jsx-eslint/eslint-plugin-react/blob/ac102885765be5ff37847a871f239c6703e1c7cc/docs/rules/jsx-props-no-multi-spaces.md
     'react/jsx-props-no-multi-spaces': 'error',
 
     // Prevent usage of UNSAFE_ methods
-    // https://github.com/yannickcr/eslint-plugin-react/blob/157cc932be2cfaa56b3f5b45df6f6d4322a2f660/docs/rules/no-unsafe.md
+    // https://github.com/jsx-eslint/eslint-plugin-react/blob/157cc932be2cfaa56b3f5b45df6f6d4322a2f660/docs/rules/no-unsafe.md
     'react/no-unsafe': 'off',
 
     // Enforce shorthand or standard form for React fragments
-    // https://github.com/yannickcr/eslint-plugin-react/blob/bc976b837abeab1dffd90ac6168b746a83fc83cc/docs/rules/jsx-fragments.md
+    // https://github.com/jsx-eslint/eslint-plugin-react/blob/bc976b837abeab1dffd90ac6168b746a83fc83cc/docs/rules/jsx-fragments.md
     'react/jsx-fragments': ['error', 'syntax'],
 
     // Enforce linebreaks in curly braces in JSX attributes and expressions.
-    // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/jsx-curly-newline.md
+    // https://github.com/jsx-eslint/eslint-plugin-react/blob/master/docs/rules/jsx-curly-newline.md
     'react/jsx-curly-newline': ['error', {
       multiline: 'consistent',
       singleline: 'consistent',
     }],
 
     // Enforce state initialization style
-    // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/state-in-constructor.md
+    // https://github.com/jsx-eslint/eslint-plugin-react/blob/master/docs/rules/state-in-constructor.md
     // TODO: set to "never" once babel-preset-airbnb supports public class fields
     'react/state-in-constructor': ['error', 'always'],
 
     // Enforces where React component static properties should be positioned
-    // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/static-property-placement.md
+    // https://github.com/jsx-eslint/eslint-plugin-react/blob/master/docs/rules/static-property-placement.md
     // TODO: set to "static public field" once babel-preset-airbnb supports public class fields
     'react/static-property-placement': ['error', 'property assignment'],
 
     // Disallow JSX props spreading
-    // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/jsx-props-no-spreading.md
+    // https://github.com/jsx-eslint/eslint-plugin-react/blob/master/docs/rules/jsx-props-no-spreading.md
     'react/jsx-props-no-spreading': ['error', {
       html: 'enforce',
       custom: 'enforce',
@@ -501,11 +501,11 @@ module.exports = {
     }],
 
     // Enforce that props are read-only
-    // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/prefer-read-only-props.md
+    // https://github.com/jsx-eslint/eslint-plugin-react/blob/master/docs/rules/prefer-read-only-props.md
     'react/prefer-read-only-props': 'off',
 
     // Prevent usage of `javascript:` URLs
-    // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/jsx-no-script-url.md
+    // https://github.com/jsx-eslint/eslint-plugin-react/blob/master/docs/rules/jsx-no-script-url.md
     'react/jsx-no-script-url': ['error', [
       {
         name: 'Link',
@@ -514,51 +514,51 @@ module.exports = {
     ]],
 
     // Disallow unnecessary fragments
-    // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/jsx-no-useless-fragment.md
+    // https://github.com/jsx-eslint/eslint-plugin-react/blob/master/docs/rules/jsx-no-useless-fragment.md
     'react/jsx-no-useless-fragment': 'error',
 
     // Prevent adjacent inline elements not separated by whitespace
-    // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/no-adjacent-inline-elements.md
+    // https://github.com/jsx-eslint/eslint-plugin-react/blob/master/docs/rules/no-adjacent-inline-elements.md
     // TODO: enable? semver-major
     'react/no-adjacent-inline-elements': 'off',
 
     // Enforce a specific function type for function components
-    // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/function-component-definition.md
+    // https://github.com/jsx-eslint/eslint-plugin-react/blob/master/docs/rules/function-component-definition.md
     'react/function-component-definition': ['error', {
       namedComponents: ['function-declaration', 'function-expression'],
       unnamedComponents: 'function-expression',
     }],
 
     // Enforce a new line after jsx elements and expressions
-    // https://github.com/yannickcr/eslint-plugin-react/blob/e2eaadae316f9506d163812a09424eb42698470a/docs/rules/jsx-newline.md
+    // https://github.com/jsx-eslint/eslint-plugin-react/blob/e2eaadae316f9506d163812a09424eb42698470a/docs/rules/jsx-newline.md
     'react/jsx-newline': 'off',
 
     // Prevent react contexts from taking non-stable values
-    // https://github.com/yannickcr/eslint-plugin-react/blob/e2eaadae316f9506d163812a09424eb42698470a/docs/rules/jsx-no-constructed-context-values.md
+    // https://github.com/jsx-eslint/eslint-plugin-react/blob/e2eaadae316f9506d163812a09424eb42698470a/docs/rules/jsx-no-constructed-context-values.md
     'react/jsx-no-constructed-context-values': 'error',
 
     // Prevent creating unstable components inside components
-    // https://github.com/yannickcr/eslint-plugin-react/blob/c2a790a3472eea0f6de984bdc3ee2a62197417fb/docs/rules/no-unstable-nested-components.md
+    // https://github.com/jsx-eslint/eslint-plugin-react/blob/c2a790a3472eea0f6de984bdc3ee2a62197417fb/docs/rules/no-unstable-nested-components.md
     'react/no-unstable-nested-components': 'error',
 
     // Enforce that namespaces are not used in React elements
-    // https://github.com/yannickcr/eslint-plugin-react/blob/8785c169c25b09b33c95655bf508cf46263bc53f/docs/rules/no-namespace.md
+    // https://github.com/jsx-eslint/eslint-plugin-react/blob/8785c169c25b09b33c95655bf508cf46263bc53f/docs/rules/no-namespace.md
     'react/no-namespace': 'error',
 
     // Prefer exact proptype definitions
-    // https://github.com/yannickcr/eslint-plugin-react/blob/8785c169c25b09b33c95655bf508cf46263bc53f/docs/rules/prefer-exact-props.md
+    // https://github.com/jsx-eslint/eslint-plugin-react/blob/8785c169c25b09b33c95655bf508cf46263bc53f/docs/rules/prefer-exact-props.md
     'react/prefer-exact-props': 'error',
 
     // Lifecycle methods should be methods on the prototype, not class fields
-    // https://github.com/yannickcr/eslint-plugin-react/blob/21e01b61af7a38fc86d94f27eb66cda8054582ed/docs/rules/no-arrow-function-lifecycle.md
+    // https://github.com/jsx-eslint/eslint-plugin-react/blob/21e01b61af7a38fc86d94f27eb66cda8054582ed/docs/rules/no-arrow-function-lifecycle.md
     'react/no-arrow-function-lifecycle': 'error',
 
     // Prevent usage of invalid attributes
-    // https://github.com/yannickcr/eslint-plugin-react/blob/21e01b61af7a38fc86d94f27eb66cda8054582ed/docs/rules/no-invalid-html-attribute.md
+    // https://github.com/jsx-eslint/eslint-plugin-react/blob/21e01b61af7a38fc86d94f27eb66cda8054582ed/docs/rules/no-invalid-html-attribute.md
     'react/no-invalid-html-attribute': 'error',
 
     // Prevent declaring unused methods of component class
-    // https://github.com/yannickcr/eslint-plugin-react/blob/21e01b61af7a38fc86d94f27eb66cda8054582ed/docs/rules/no-unused-class-component-methods.md
+    // https://github.com/jsx-eslint/eslint-plugin-react/blob/21e01b61af7a38fc86d94f27eb66cda8054582ed/docs/rules/no-unused-class-component-methods.md
     'react/no-unused-class-component-methods': 'error',
 
     // Ensure destructuring and symmetric naming of useState hook value and setter variables

From 7fdc87a8be565fa1f1779dc1d6b6461b953f7d85 Mon Sep 17 00:00:00 2001
From: terrablue <102580937+terrablue@users.noreply.github.com>
Date: Tue, 3 May 2022 19:06:48 +0200
Subject: [PATCH 1527/1591] [guide] fix eslint core rule URLs

 - fix broken eslint eol-last link
 - remove .html ending in eslint urls
---
 README.md | 84 +++++++++++++++++++++++++++----------------------------
 1 file changed, 42 insertions(+), 42 deletions(-)

diff --git a/README.md b/README.md
index b97db7cc7e..49eebff107 100644
--- a/README.md
+++ b/README.md
@@ -105,7 +105,7 @@ Other Style Guides
 ## References
 
   <a name="references--prefer-const"></a><a name="2.1"></a>
-  - [2.1](#references--prefer-const) Use `const` for all of your references; avoid using `var`. eslint: [`prefer-const`](https://eslint.org/docs/rules/prefer-const.html), [`no-const-assign`](https://eslint.org/docs/rules/no-const-assign.html)
+  - [2.1](#references--prefer-const) Use `const` for all of your references; avoid using `var`. eslint: [`prefer-const`](https://eslint.org/docs/rules/prefer-const), [`no-const-assign`](https://eslint.org/docs/rules/no-const-assign)
 
     > Why? This ensures that you can’t reassign your references, which can lead to bugs and difficult to comprehend code.
 
@@ -120,7 +120,7 @@ Other Style Guides
     ```
 
   <a name="references--disallow-var"></a><a name="2.2"></a>
-  - [2.2](#references--disallow-var) If you must reassign references, use `let` instead of `var`. eslint: [`no-var`](https://eslint.org/docs/rules/no-var.html)
+  - [2.2](#references--disallow-var) If you must reassign references, use `let` instead of `var`. eslint: [`no-var`](https://eslint.org/docs/rules/no-var)
 
     > Why? `let` is block-scoped rather than function-scoped like `var`.
 
@@ -160,7 +160,7 @@ Other Style Guides
 ## Objects
 
   <a name="objects--no-new"></a><a name="3.1"></a>
-  - [3.1](#objects--no-new) Use the literal syntax for object creation. eslint: [`no-new-object`](https://eslint.org/docs/rules/no-new-object.html)
+  - [3.1](#objects--no-new) Use the literal syntax for object creation. eslint: [`no-new-object`](https://eslint.org/docs/rules/no-new-object)
 
     ```javascript
     // bad
@@ -197,7 +197,7 @@ Other Style Guides
     ```
 
   <a name="es6-object-shorthand"></a><a name="3.5"></a>
-  - [3.3](#es6-object-shorthand) Use object method shorthand. eslint: [`object-shorthand`](https://eslint.org/docs/rules/object-shorthand.html)
+  - [3.3](#es6-object-shorthand) Use object method shorthand. eslint: [`object-shorthand`](https://eslint.org/docs/rules/object-shorthand)
 
     ```javascript
     // bad
@@ -220,7 +220,7 @@ Other Style Guides
     ```
 
   <a name="es6-object-concise"></a><a name="3.6"></a>
-  - [3.4](#es6-object-concise) Use property value shorthand. eslint: [`object-shorthand`](https://eslint.org/docs/rules/object-shorthand.html)
+  - [3.4](#es6-object-concise) Use property value shorthand. eslint: [`object-shorthand`](https://eslint.org/docs/rules/object-shorthand)
 
     > Why? It is shorter and descriptive.
 
@@ -269,7 +269,7 @@ Other Style Guides
     ```
 
   <a name="objects--quoted-props"></a><a name="3.8"></a>
-  - [3.6](#objects--quoted-props) Only quote properties that are invalid identifiers. eslint: [`quote-props`](https://eslint.org/docs/rules/quote-props.html)
+  - [3.6](#objects--quoted-props) Only quote properties that are invalid identifiers. eslint: [`quote-props`](https://eslint.org/docs/rules/quote-props)
 
     > Why? In general we consider it subjectively easier to read. It improves syntax highlighting, and is also more easily optimized by many JS engines.
 
@@ -334,7 +334,7 @@ Other Style Guides
 ## Arrays
 
   <a name="arrays--literals"></a><a name="4.1"></a>
-  - [4.1](#arrays--literals) Use the literal syntax for array creation. eslint: [`no-array-constructor`](https://eslint.org/docs/rules/no-array-constructor.html)
+  - [4.1](#arrays--literals) Use the literal syntax for array creation. eslint: [`no-array-constructor`](https://eslint.org/docs/rules/no-array-constructor)
 
     ```javascript
     // bad
@@ -568,7 +568,7 @@ Other Style Guides
 ## Strings
 
   <a name="strings--quotes"></a><a name="6.1"></a>
-  - [6.1](#strings--quotes) Use single quotes `''` for strings. eslint: [`quotes`](https://eslint.org/docs/rules/quotes.html)
+  - [6.1](#strings--quotes) Use single quotes `''` for strings. eslint: [`quotes`](https://eslint.org/docs/rules/quotes)
 
     ```javascript
     // bad
@@ -603,7 +603,7 @@ Other Style Guides
     ```
 
   <a name="es6-template-literals"></a><a name="6.4"></a>
-  - [6.3](#es6-template-literals) When programmatically building up strings, use template strings instead of concatenation. eslint: [`prefer-template`](https://eslint.org/docs/rules/prefer-template.html) [`template-curly-spacing`](https://eslint.org/docs/rules/template-curly-spacing)
+  - [6.3](#es6-template-literals) When programmatically building up strings, use template strings instead of concatenation. eslint: [`prefer-template`](https://eslint.org/docs/rules/prefer-template) [`template-curly-spacing`](https://eslint.org/docs/rules/template-curly-spacing)
 
     > Why? Template strings give you a readable, concise syntax with proper newlines and string interpolation features.
 
@@ -674,7 +674,7 @@ Other Style Guides
     ```
 
   <a name="functions--iife"></a><a name="7.2"></a>
-  - [7.2](#functions--iife) Wrap immediately invoked function expressions in parentheses. eslint: [`wrap-iife`](https://eslint.org/docs/rules/wrap-iife.html)
+  - [7.2](#functions--iife) Wrap immediately invoked function expressions in parentheses. eslint: [`wrap-iife`](https://eslint.org/docs/rules/wrap-iife)
 
     > Why? An immediately invoked function expression is a single unit - wrapping both it, and its invocation parens, in parens, cleanly expresses this. Note that in a world with modules everywhere, you almost never need an IIFE.
 
@@ -686,7 +686,7 @@ Other Style Guides
     ```
 
   <a name="functions--in-blocks"></a><a name="7.3"></a>
-  - [7.3](#functions--in-blocks) Never declare a function in a non-function block (`if`, `while`, etc). Assign the function to a variable instead. Browsers will allow you to do it, but they all interpret it differently, which is bad news bears. eslint: [`no-loop-func`](https://eslint.org/docs/rules/no-loop-func.html)
+  - [7.3](#functions--in-blocks) Never declare a function in a non-function block (`if`, `while`, etc). Assign the function to a variable instead. Browsers will allow you to do it, but they all interpret it differently, which is bad news bears. eslint: [`no-loop-func`](https://eslint.org/docs/rules/no-loop-func)
 
   <a name="functions--note-on-blocks"></a><a name="7.4"></a>
   - [7.4](#functions--note-on-blocks) **Note:** ECMA-262 defines a `block` as a list of statements. A function declaration is not a statement.
@@ -830,7 +830,7 @@ Other Style Guides
     ```
 
   <a name="functions--mutate-params"></a><a name="7.12"></a>
-  - [7.12](#functions--mutate-params) Never mutate parameters. eslint: [`no-param-reassign`](https://eslint.org/docs/rules/no-param-reassign.html)
+  - [7.12](#functions--mutate-params) Never mutate parameters. eslint: [`no-param-reassign`](https://eslint.org/docs/rules/no-param-reassign)
 
     > Why? Manipulating objects passed in as parameters can cause unwanted variable side effects in the original caller.
 
@@ -847,7 +847,7 @@ Other Style Guides
     ```
 
   <a name="functions--reassign-params"></a><a name="7.13"></a>
-  - [7.13](#functions--reassign-params) Never reassign parameters. eslint: [`no-param-reassign`](https://eslint.org/docs/rules/no-param-reassign.html)
+  - [7.13](#functions--reassign-params) Never reassign parameters. eslint: [`no-param-reassign`](https://eslint.org/docs/rules/no-param-reassign)
 
     > Why? Reassigning parameters can lead to unexpected behavior, especially when accessing the `arguments` object. It can also cause optimization issues, especially in V8.
 
@@ -933,7 +933,7 @@ Other Style Guides
 ## Arrow Functions
 
   <a name="arrows--use-them"></a><a name="8.1"></a>
-  - [8.1](#arrows--use-them) When you must use an anonymous function (as when passing an inline callback), use arrow function notation. eslint: [`prefer-arrow-callback`](https://eslint.org/docs/rules/prefer-arrow-callback.html), [`arrow-spacing`](https://eslint.org/docs/rules/arrow-spacing.html)
+  - [8.1](#arrows--use-them) When you must use an anonymous function (as when passing an inline callback), use arrow function notation. eslint: [`prefer-arrow-callback`](https://eslint.org/docs/rules/prefer-arrow-callback), [`arrow-spacing`](https://eslint.org/docs/rules/arrow-spacing)
 
     > Why? It creates a version of the function that executes in the context of `this`, which is usually what you want, and is a more concise syntax.
 
@@ -954,7 +954,7 @@ Other Style Guides
     ```
 
   <a name="arrows--implicit-return"></a><a name="8.2"></a>
-  - [8.2](#arrows--implicit-return) If the function body consists of a single statement returning an [expression](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Expressions_and_Operators#Expressions) without side effects, omit the braces and use the implicit return. Otherwise, keep the braces and use a `return` statement. eslint: [`arrow-parens`](https://eslint.org/docs/rules/arrow-parens.html), [`arrow-body-style`](https://eslint.org/docs/rules/arrow-body-style.html)
+  - [8.2](#arrows--implicit-return) If the function body consists of a single statement returning an [expression](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Expressions_and_Operators#Expressions) without side effects, omit the braces and use the implicit return. Otherwise, keep the braces and use a `return` statement. eslint: [`arrow-parens`](https://eslint.org/docs/rules/arrow-parens), [`arrow-body-style`](https://eslint.org/docs/rules/arrow-body-style)
 
     > Why? Syntactic sugar. It reads well when multiple functions are chained together.
 
@@ -1021,7 +1021,7 @@ Other Style Guides
     ```
 
   <a name="arrows--one-arg-parens"></a><a name="8.4"></a>
-  - [8.4](#arrows--one-arg-parens) Always include parentheses around arguments for clarity and consistency. eslint: [`arrow-parens`](https://eslint.org/docs/rules/arrow-parens.html)
+  - [8.4](#arrows--one-arg-parens) Always include parentheses around arguments for clarity and consistency. eslint: [`arrow-parens`](https://eslint.org/docs/rules/arrow-parens)
 
     > Why? Minimizes diff churn when adding or removing arguments.
 
@@ -1469,7 +1469,7 @@ Other Style Guides
 ## Iterators and Generators
 
   <a name="iterators--nope"></a><a name="11.1"></a>
-  - [11.1](#iterators--nope) Don’t use iterators. Prefer JavaScript’s higher-order functions instead of loops like `for-in` or `for-of`. eslint: [`no-iterator`](https://eslint.org/docs/rules/no-iterator.html) [`no-restricted-syntax`](https://eslint.org/docs/rules/no-restricted-syntax)
+  - [11.1](#iterators--nope) Don’t use iterators. Prefer JavaScript’s higher-order functions instead of loops like `for-in` or `for-of`. eslint: [`no-iterator`](https://eslint.org/docs/rules/no-iterator) [`no-restricted-syntax`](https://eslint.org/docs/rules/no-restricted-syntax)
 
     > Why? This enforces our immutable rule. Dealing with pure functions that return values is easier to reason about than side effects.
 
@@ -1583,7 +1583,7 @@ Other Style Guides
 ## Properties
 
   <a name="properties--dot"></a><a name="12.1"></a>
-  - [12.1](#properties--dot) Use dot notation when accessing properties. eslint: [`dot-notation`](https://eslint.org/docs/rules/dot-notation.html)
+  - [12.1](#properties--dot) Use dot notation when accessing properties. eslint: [`dot-notation`](https://eslint.org/docs/rules/dot-notation)
 
     ```javascript
     const luke = {
@@ -1641,7 +1641,7 @@ Other Style Guides
     ```
 
   <a name="variables--one-const"></a><a name="13.2"></a>
-  - [13.2](#variables--one-const) Use one `const` or `let` declaration per variable or assignment. eslint: [`one-var`](https://eslint.org/docs/rules/one-var.html)
+  - [13.2](#variables--one-const) Use one `const` or `let` declaration per variable or assignment. eslint: [`one-var`](https://eslint.org/docs/rules/one-var)
 
     > Why? It’s easier to add new variable declarations this way, and you never have to worry about swapping out a `;` for a `,` or introducing punctuation-only diffs. You can also step through each declaration with the debugger, instead of jumping through all of them at once.
 
@@ -1796,7 +1796,7 @@ Other Style Guides
     ```
 
 <a name="variables--linebreak"></a>
-  - [13.7](#variables--linebreak) Avoid linebreaks before or after `=` in an assignment. If your assignment violates [`max-len`](https://eslint.org/docs/rules/max-len.html), surround the value in parens. eslint [`operator-linebreak`](https://eslint.org/docs/rules/operator-linebreak.html).
+  - [13.7](#variables--linebreak) Avoid linebreaks before or after `=` in an assignment. If your assignment violates [`max-len`](https://eslint.org/docs/rules/max-len), surround the value in parens. eslint [`operator-linebreak`](https://eslint.org/docs/rules/operator-linebreak).
 
     > Why? Linebreaks surrounding `=` can obfuscate the value of an assignment.
 
@@ -1962,7 +1962,7 @@ Other Style Guides
 ## Comparison Operators & Equality
 
   <a name="comparison--eqeqeq"></a><a name="15.1"></a>
-  - [15.1](#comparison--eqeqeq) Use `===` and `!==` over `==` and `!=`. eslint: [`eqeqeq`](https://eslint.org/docs/rules/eqeqeq.html)
+  - [15.1](#comparison--eqeqeq) Use `===` and `!==` over `==` and `!=`. eslint: [`eqeqeq`](https://eslint.org/docs/rules/eqeqeq)
 
   <a name="comparison--if"></a><a name="15.2"></a>
   - [15.2](#comparison--if) Conditional statements such as the `if` statement evaluate their expression using coercion with the `ToBoolean` abstract method and always follow these simple rules:
@@ -2020,7 +2020,7 @@ Other Style Guides
   - [15.4](#comparison--moreinfo) For more information see [Truth Equality and JavaScript](https://javascriptweblog.wordpress.com/2011/02/07/truth-equality-and-javascript/#more-2108) by Angus Croll.
 
   <a name="comparison--switch-blocks"></a><a name="15.5"></a>
-  - [15.5](#comparison--switch-blocks) Use braces to create blocks in `case` and `default` clauses that contain lexical declarations (e.g. `let`, `const`, `function`, and `class`). eslint: [`no-case-declarations`](https://eslint.org/docs/rules/no-case-declarations.html)
+  - [15.5](#comparison--switch-blocks) Use braces to create blocks in `case` and `default` clauses that contain lexical declarations (e.g. `let`, `const`, `function`, and `class`). eslint: [`no-case-declarations`](https://eslint.org/docs/rules/no-case-declarations)
 
     > Why? Lexical declarations are visible in the entire `switch` block but only get initialized when assigned, which only happens when its `case` is reached. This causes problems when multiple `case` clauses attempt to define the same thing.
 
@@ -2068,7 +2068,7 @@ Other Style Guides
     ```
 
   <a name="comparison--nested-ternaries"></a><a name="15.6"></a>
-  - [15.6](#comparison--nested-ternaries) Ternaries should not be nested and generally be single line expressions. eslint: [`no-nested-ternary`](https://eslint.org/docs/rules/no-nested-ternary.html)
+  - [15.6](#comparison--nested-ternaries) Ternaries should not be nested and generally be single line expressions. eslint: [`no-nested-ternary`](https://eslint.org/docs/rules/no-nested-ternary)
 
     ```javascript
     // bad
@@ -2089,7 +2089,7 @@ Other Style Guides
     ```
 
   <a name="comparison--unneeded-ternary"></a><a name="15.7"></a>
-  - [15.7](#comparison--unneeded-ternary) Avoid unneeded ternary statements. eslint: [`no-unneeded-ternary`](https://eslint.org/docs/rules/no-unneeded-ternary.html)
+  - [15.7](#comparison--unneeded-ternary) Avoid unneeded ternary statements. eslint: [`no-unneeded-ternary`](https://eslint.org/docs/rules/no-unneeded-ternary)
 
     ```javascript
     // bad
@@ -2105,7 +2105,7 @@ Other Style Guides
 
   <a name="comparison--no-mixed-operators"></a>
   - [15.8](#comparison--no-mixed-operators) When mixing operators, enclose them in parentheses. The only exception is the standard arithmetic operators: `+`, `-`, and `**` since their precedence is broadly understood. We recommend enclosing `/` and `*` in parentheses because their precedence can be ambiguous when they are mixed.
-  eslint: [`no-mixed-operators`](https://eslint.org/docs/rules/no-mixed-operators.html)
+  eslint: [`no-mixed-operators`](https://eslint.org/docs/rules/no-mixed-operators)
 
     > Why? This improves readability and clarifies the developer’s intention.
 
@@ -2170,7 +2170,7 @@ Other Style Guides
     ```
 
   <a name="blocks--cuddled-elses"></a><a name="16.2"></a>
-  - [16.2](#blocks--cuddled-elses) If you’re using multiline blocks with `if` and `else`, put `else` on the same line as your `if` block’s closing brace. eslint: [`brace-style`](https://eslint.org/docs/rules/brace-style.html)
+  - [16.2](#blocks--cuddled-elses) If you’re using multiline blocks with `if` and `else`, put `else` on the same line as your `if` block’s closing brace. eslint: [`brace-style`](https://eslint.org/docs/rules/brace-style)
 
     ```javascript
     // bad
@@ -2473,7 +2473,7 @@ Other Style Guides
 ## Whitespace
 
   <a name="whitespace--spaces"></a><a name="18.1"></a>
-  - [19.1](#whitespace--spaces) Use soft tabs (space character) set to 2 spaces. eslint: [`indent`](https://eslint.org/docs/rules/indent.html)
+  - [19.1](#whitespace--spaces) Use soft tabs (space character) set to 2 spaces. eslint: [`indent`](https://eslint.org/docs/rules/indent)
 
     ```javascript
     // bad
@@ -2493,7 +2493,7 @@ Other Style Guides
     ```
 
   <a name="whitespace--before-blocks"></a><a name="18.2"></a>
-  - [19.2](#whitespace--before-blocks) Place 1 space before the leading brace. eslint: [`space-before-blocks`](https://eslint.org/docs/rules/space-before-blocks.html)
+  - [19.2](#whitespace--before-blocks) Place 1 space before the leading brace. eslint: [`space-before-blocks`](https://eslint.org/docs/rules/space-before-blocks)
 
     ```javascript
     // bad
@@ -2520,7 +2520,7 @@ Other Style Guides
     ```
 
   <a name="whitespace--around-keywords"></a><a name="18.3"></a>
-  - [19.3](#whitespace--around-keywords) Place 1 space before the opening parenthesis in control statements (`if`, `while` etc.). Place no space between the argument list and the function name in function calls and declarations. eslint: [`keyword-spacing`](https://eslint.org/docs/rules/keyword-spacing.html)
+  - [19.3](#whitespace--around-keywords) Place 1 space before the opening parenthesis in control statements (`if`, `while` etc.). Place no space between the argument list and the function name in function calls and declarations. eslint: [`keyword-spacing`](https://eslint.org/docs/rules/keyword-spacing)
 
     ```javascript
     // bad
@@ -2545,7 +2545,7 @@ Other Style Guides
     ```
 
   <a name="whitespace--infix-ops"></a><a name="18.4"></a>
-  - [19.4](#whitespace--infix-ops) Set off operators with spaces. eslint: [`space-infix-ops`](https://eslint.org/docs/rules/space-infix-ops.html)
+  - [19.4](#whitespace--infix-ops) Set off operators with spaces. eslint: [`space-infix-ops`](https://eslint.org/docs/rules/space-infix-ops)
 
     ```javascript
     // bad
@@ -2556,7 +2556,7 @@ Other Style Guides
     ```
 
   <a name="whitespace--newline-at-end"></a><a name="18.5"></a>
-  - [19.5](#whitespace--newline-at-end) End files with a single newline character. eslint: [`eol-last`](https://github.com/eslint/eslint/blob/master/docs/rules/eol-last.md)
+  - [19.5](#whitespace--newline-at-end) End files with a single newline character. eslint: [`eol-last`](https://eslint.org/docs/rules/eol-last)
 
     ```javascript
     // bad
@@ -2687,7 +2687,7 @@ Other Style Guides
     ```
 
   <a name="whitespace--padded-blocks"></a><a name="18.8"></a>
-  - [19.8](#whitespace--padded-blocks) Do not pad your blocks with blank lines. eslint: [`padded-blocks`](https://eslint.org/docs/rules/padded-blocks.html)
+  - [19.8](#whitespace--padded-blocks) Do not pad your blocks with blank lines. eslint: [`padded-blocks`](https://eslint.org/docs/rules/padded-blocks)
 
     ```javascript
     // bad
@@ -2782,7 +2782,7 @@ Other Style Guides
     ```
 
   <a name="whitespace--in-parens"></a><a name="18.9"></a>
-  - [19.10](#whitespace--in-parens) Do not add spaces inside parentheses. eslint: [`space-in-parens`](https://eslint.org/docs/rules/space-in-parens.html)
+  - [19.10](#whitespace--in-parens) Do not add spaces inside parentheses. eslint: [`space-in-parens`](https://eslint.org/docs/rules/space-in-parens)
 
     ```javascript
     // bad
@@ -2807,7 +2807,7 @@ Other Style Guides
     ```
 
   <a name="whitespace--in-brackets"></a><a name="18.10"></a>
-  - [19.11](#whitespace--in-brackets) Do not add spaces inside brackets. eslint: [`array-bracket-spacing`](https://eslint.org/docs/rules/array-bracket-spacing.html)
+  - [19.11](#whitespace--in-brackets) Do not add spaces inside brackets. eslint: [`array-bracket-spacing`](https://eslint.org/docs/rules/array-bracket-spacing)
 
     ```javascript
     // bad
@@ -2820,7 +2820,7 @@ Other Style Guides
     ```
 
   <a name="whitespace--in-braces"></a><a name="18.11"></a>
-  - [19.12](#whitespace--in-braces) Add spaces inside curly braces. eslint: [`object-curly-spacing`](https://eslint.org/docs/rules/object-curly-spacing.html)
+  - [19.12](#whitespace--in-braces) Add spaces inside curly braces. eslint: [`object-curly-spacing`](https://eslint.org/docs/rules/object-curly-spacing)
 
     ```javascript
     // bad
@@ -2831,7 +2831,7 @@ Other Style Guides
     ```
 
   <a name="whitespace--max-len"></a><a name="18.12"></a>
-  - [19.13](#whitespace--max-len) Avoid having lines of code that are longer than 100 characters (including whitespace). Note: per [above](#strings--line-length), long strings are exempt from this rule, and should not be broken up. eslint: [`max-len`](https://eslint.org/docs/rules/max-len.html)
+  - [19.13](#whitespace--max-len) Avoid having lines of code that are longer than 100 characters (including whitespace). Note: per [above](#strings--line-length), long strings are exempt from this rule, and should not be broken up. eslint: [`max-len`](https://eslint.org/docs/rules/max-len)
 
     > Why? This ensures readability and maintainability.
 
@@ -2965,7 +2965,7 @@ Other Style Guides
 ## Commas
 
   <a name="commas--leading-trailing"></a><a name="19.1"></a>
-  - [20.1](#commas--leading-trailing) Leading commas: **Nope.** eslint: [`comma-style`](https://eslint.org/docs/rules/comma-style.html)
+  - [20.1](#commas--leading-trailing) Leading commas: **Nope.** eslint: [`comma-style`](https://eslint.org/docs/rules/comma-style)
 
     ```javascript
     // bad
@@ -3000,7 +3000,7 @@ Other Style Guides
     ```
 
   <a name="commas--dangling"></a><a name="19.2"></a>
-  - [20.2](#commas--dangling) Additional trailing comma: **Yup.** eslint: [`comma-dangle`](https://eslint.org/docs/rules/comma-dangle.html)
+  - [20.2](#commas--dangling) Additional trailing comma: **Yup.** eslint: [`comma-dangle`](https://eslint.org/docs/rules/comma-dangle)
 
     > Why? This leads to cleaner git diffs. Also, transpilers like Babel will remove the additional trailing comma in the transpiled code which means you don’t have to worry about the [trailing comma problem](https://github.com/airbnb/javascript/blob/es5-deprecated/es5/README.md#commas) in legacy browsers.
 
@@ -3100,7 +3100,7 @@ Other Style Guides
 ## Semicolons
 
   <a name="semicolons--required"></a><a name="20.1"></a>
-  - [21.1](#semicolons--required) **Yup.** eslint: [`semi`](https://eslint.org/docs/rules/semi.html)
+  - [21.1](#semicolons--required) **Yup.** eslint: [`semi`](https://eslint.org/docs/rules/semi)
 
     > Why? When JavaScript encounters a line break without a semicolon, it uses a set of rules called [Automatic Semicolon Insertion](https://tc39.github.io/ecma262/#sec-automatic-semicolon-insertion) to determine whether it should regard that line break as the end of a statement, and (as the name implies) place a semicolon into your code before the line break if it thinks so. ASI contains a few eccentric behaviors, though, and your code will break if JavaScript misinterprets your line break. These rules will become more complicated as new features become a part of JavaScript. Explicitly terminating your statements and configuring your linter to catch missing semicolons will help prevent you from encountering issues.
 
@@ -3256,7 +3256,7 @@ Other Style Guides
     ```
 
   <a name="naming--camelCase"></a><a name="22.2"></a>
-  - [23.2](#naming--camelCase) Use camelCase when naming objects, functions, and instances. eslint: [`camelcase`](https://eslint.org/docs/rules/camelcase.html)
+  - [23.2](#naming--camelCase) Use camelCase when naming objects, functions, and instances. eslint: [`camelcase`](https://eslint.org/docs/rules/camelcase)
 
     ```javascript
     // bad
@@ -3270,7 +3270,7 @@ Other Style Guides
     ```
 
   <a name="naming--PascalCase"></a><a name="22.3"></a>
-  - [23.3](#naming--PascalCase) Use PascalCase only when naming constructors or classes. eslint: [`new-cap`](https://eslint.org/docs/rules/new-cap.html)
+  - [23.3](#naming--PascalCase) Use PascalCase only when naming constructors or classes. eslint: [`new-cap`](https://eslint.org/docs/rules/new-cap)
 
     ```javascript
     // bad
@@ -3295,7 +3295,7 @@ Other Style Guides
     ```
 
   <a name="naming--leading-underscore"></a><a name="22.4"></a>
-  - [23.4](#naming--leading-underscore) Do not use trailing or leading underscores. eslint: [`no-underscore-dangle`](https://eslint.org/docs/rules/no-underscore-dangle.html)
+  - [23.4](#naming--leading-underscore) Do not use trailing or leading underscores. eslint: [`no-underscore-dangle`](https://eslint.org/docs/rules/no-underscore-dangle)
 
     > Why? JavaScript does not have the concept of privacy in terms of properties or methods. Although a leading underscore is a common convention to mean “private”, in fact, these properties are fully public, and as such, are part of your public API contract. This convention might lead developers to wrongly think that a change won’t count as breaking, or that tests aren’t needed. tl;dr: if you want something to be “private”, it must not be observably present.
 

From 42c0e2ea13e30ae47a6ebad1e1b5d95a44ac7665 Mon Sep 17 00:00:00 2001
From: Joe Lencioni <joe.lencioni@airbnb.com>
Date: Tue, 24 May 2022 09:52:05 -0500
Subject: [PATCH 1528/1591] Fix typo in eslint-config-airbnb-base changelog

---
 packages/eslint-config-airbnb-base/CHANGELOG.md | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/packages/eslint-config-airbnb-base/CHANGELOG.md b/packages/eslint-config-airbnb-base/CHANGELOG.md
index dcc6551f4f..51522a3f4e 100644
--- a/packages/eslint-config-airbnb-base/CHANGELOG.md
+++ b/packages/eslint-config-airbnb-base/CHANGELOG.md
@@ -15,7 +15,7 @@
  - [readme] some updates
  - [meta] use `prepublishOnly` script for npm 7+
  - [deps] update `eslint-plugin-import`, `eslint-plugin-react`, `object.entries`
- - [dev deps] update `@babel/runtime`, ``tape`
+ - [dev deps] update `@babel/runtime`, `tape`
 
 14.2.1 / 2020-11-06
 ==================

From a0e94052d542796bd756d3e2e0d563e5b392b804 Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Tue, 24 May 2022 08:49:47 -0700
Subject: [PATCH 1529/1591] [eslint config] [*] [dev deps] update
 `@babel/runtime`

---
 packages/eslint-config-airbnb-base/package.json | 2 +-
 packages/eslint-config-airbnb/package.json      | 2 +-
 2 files changed, 2 insertions(+), 2 deletions(-)

diff --git a/packages/eslint-config-airbnb-base/package.json b/packages/eslint-config-airbnb-base/package.json
index cdebd865be..8dc7924fa5 100644
--- a/packages/eslint-config-airbnb-base/package.json
+++ b/packages/eslint-config-airbnb-base/package.json
@@ -68,7 +68,7 @@
   },
   "homepage": "https://github.com/airbnb/javascript",
   "devDependencies": {
-    "@babel/runtime": "^7.17.9",
+    "@babel/runtime": "^7.18.0",
     "babel-preset-airbnb": "^4.5.0",
     "babel-tape-runner": "^3.0.0",
     "eclint": "^2.8.1",
diff --git a/packages/eslint-config-airbnb/package.json b/packages/eslint-config-airbnb/package.json
index 2988682c42..257359378e 100644
--- a/packages/eslint-config-airbnb/package.json
+++ b/packages/eslint-config-airbnb/package.json
@@ -71,7 +71,7 @@
     "object.entries": "^1.1.5"
   },
   "devDependencies": {
-    "@babel/runtime": "^7.17.9",
+    "@babel/runtime": "^7.18.0",
     "babel-preset-airbnb": "^4.5.0",
     "babel-tape-runner": "^3.0.0",
     "eclint": "^2.8.1",

From 206d25b55a9c6171499465cb38c8f09ea737d31f Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Tue, 24 May 2022 08:52:07 -0700
Subject: [PATCH 1530/1591] [eslint config] [deps] update `eslint-plugin-react`

---
 packages/eslint-config-airbnb/package.json   | 4 ++--
 packages/eslint-config-airbnb/rules/react.js | 5 +++++
 2 files changed, 7 insertions(+), 2 deletions(-)

diff --git a/packages/eslint-config-airbnb/package.json b/packages/eslint-config-airbnb/package.json
index 257359378e..fdb9073ad5 100644
--- a/packages/eslint-config-airbnb/package.json
+++ b/packages/eslint-config-airbnb/package.json
@@ -79,7 +79,7 @@
     "eslint-find-rules": "^4.1.0",
     "eslint-plugin-import": "^2.26.0",
     "eslint-plugin-jsx-a11y": "^6.5.1",
-    "eslint-plugin-react": "^7.29.4",
+    "eslint-plugin-react": "^7.30.0",
     "eslint-plugin-react-hooks": "^4.5.0",
     "in-publish": "^2.0.1",
     "react": ">= 0.13.0",
@@ -90,7 +90,7 @@
     "eslint": "^7.32.0 || ^8.2.0",
     "eslint-plugin-import": "^2.26.0",
     "eslint-plugin-jsx-a11y": "^6.5.1",
-    "eslint-plugin-react": "^7.29.4",
+    "eslint-plugin-react": "^7.30.0",
     "eslint-plugin-react-hooks": "^4.5.0"
   },
   "engines": {
diff --git a/packages/eslint-config-airbnb/rules/react.js b/packages/eslint-config-airbnb/rules/react.js
index d957fcbe7d..f1dfd20788 100644
--- a/packages/eslint-config-airbnb/rules/react.js
+++ b/packages/eslint-config-airbnb/rules/react.js
@@ -570,6 +570,11 @@ module.exports = {
     // https://github.com/jsx-eslint/eslint-plugin-react/blob/c8833f301314dab3e79ef7ac4cf863e4d5fa0019/docs/rules/iframe-missing-sandbox.md
     // TODO: semver-major, enable
     'react/iframe-missing-sandbox': 'off',
+
+    // Prevent problematic leaked values from being rendered
+    // https://github.com/jsx-eslint/eslint-plugin-react/blob/c42b624d0fb9ad647583a775ab9751091eec066f/docs/rules/jsx-no-leaked-render.md
+    // TODO: semver-major, enable
+    'react/jsx-no-leaked-render': 'off',
   },
 
   settings: {

From cbf9ade10a2f6f06c9da6dbfa25b344bee4bbef6 Mon Sep 17 00:00:00 2001
From: Michael Orzel <56739010+michael-orzel@users.noreply.github.com>
Date: Fri, 2 Jul 2021 09:40:46 -0400
Subject: [PATCH 1531/1591] [guide] Added period to 4.4 for formatting
 consistency.

---
 README.md | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/README.md b/README.md
index 49eebff107..3b1af22597 100644
--- a/README.md
+++ b/README.md
@@ -376,7 +376,7 @@ Other Style Guides
 
   <a name="arrays--from"></a>
   <a name="arrays--from-iterable"></a><a name="4.4"></a>
-  - [4.4](#arrays--from-iterable) To convert an iterable object to an array, use spreads `...` instead of [`Array.from`](https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Array/from).
+  - [4.4](#arrays--from-iterable) To convert an iterable object to an array, use spreads `...` instead of [`Array.from`](https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Array/from)
 
     ```javascript
     const foo = document.querySelectorAll('.foo');

From 5155aa5fc1ea9bb2c6493a06ddbd5c7a05414c86 Mon Sep 17 00:00:00 2001
From: Haoqun Jiang <haoqunjiang@gmail.com>
Date: Mon, 8 Aug 2022 21:56:10 +0800
Subject: [PATCH 1532/1591] [eslint config] [base] disable the deprecated
 `no-spaced-func` rule

This rule was deprecated since ESLint v3.3.0 and replaced by the
`func-call-spacing` rule.
https://eslint.org/docs/latest/rules/no-spaced-func

`func-call-spacing` was enabled in this package long ago:
https://github.com/airbnb/javascript/commit/27dcb99c6d80718946d10017144b2aa68bed8b9e

So there's no need for it to stay in the ruleset.

Besides, it is causing some tricky issues when overriding the rules for
TypeScript support (https://github.com/iamturns/eslint-config-airbnb-typescript/issues/246)
---
 packages/eslint-config-airbnb-base/rules/style.js | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/packages/eslint-config-airbnb-base/rules/style.js b/packages/eslint-config-airbnb-base/rules/style.js
index 4fad26be00..bc83e858e1 100644
--- a/packages/eslint-config-airbnb-base/rules/style.js
+++ b/packages/eslint-config-airbnb-base/rules/style.js
@@ -351,7 +351,8 @@ module.exports = {
     ],
 
     // disallow space between function identifier and application
-    'no-spaced-func': 'error',
+    // deprecated in favor of func-call-spacing
+    'no-spaced-func': 'off',
 
     // disallow tab characters entirely
     'no-tabs': 'error',

From 3cbf96de7cde974aab99f4ca85bd23ea0556c34a Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Sun, 18 Sep 2022 22:08:04 -0700
Subject: [PATCH 1533/1591] [eslint config] [base] `no-alert`: add TODO comment

---
 packages/eslint-config-airbnb-base/rules/best-practices.js | 1 +
 1 file changed, 1 insertion(+)

diff --git a/packages/eslint-config-airbnb-base/rules/best-practices.js b/packages/eslint-config-airbnb-base/rules/best-practices.js
index 31f74b51c0..90c34ccfa1 100644
--- a/packages/eslint-config-airbnb-base/rules/best-practices.js
+++ b/packages/eslint-config-airbnb-base/rules/best-practices.js
@@ -67,6 +67,7 @@ module.exports = {
 
     // disallow the use of alert, confirm, and prompt
     // https://eslint.org/docs/rules/no-alert
+    // TODO: enable, semver-major
     'no-alert': 'warn',
 
     // disallow use of arguments.caller or arguments.callee

From 5143a7a97a6969dd690fb905acee54d9f753667c Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Sun, 18 Sep 2022 22:16:08 -0700
Subject: [PATCH 1534/1591] [Dev Deps] update `markdownlint`,
 `markdownlint-cli`

---
 README.md    | 2 +-
 package.json | 4 ++--
 2 files changed, 3 insertions(+), 3 deletions(-)

diff --git a/README.md b/README.md
index 3b1af22597..b2fc7d9d2c 100644
--- a/README.md
+++ b/README.md
@@ -3739,7 +3739,7 @@ Other Style Guides
     - Be cautious about stubs and mocks - they can make your tests more brittle.
     - We primarily use [`mocha`](https://www.npmjs.com/package/mocha) and [`jest`](https://www.npmjs.com/package/jest) at Airbnb. [`tape`](https://www.npmjs.com/package/tape) is also used occasionally for small, separate modules.
     - 100% test coverage is a good goal to strive for, even if it’s not always practical to reach it.
-    - Whenever you fix a bug, _write a regression test_. A bug fixed without a regression test is almost certainly going to break again in the future.
+    - Whenever you fix a bug, *write a regression test*. A bug fixed without a regression test is almost certainly going to break again in the future.
 
 **[⬆ back to top](#table-of-contents)**
 
diff --git a/package.json b/package.json
index 77adc2e32d..04e7d56121 100644
--- a/package.json
+++ b/package.json
@@ -40,7 +40,7 @@
   },
   "homepage": "https://github.com/airbnb/javascript",
   "devDependencies": {
-    "markdownlint": "^0.20.4",
-    "markdownlint-cli": "^0.23.2"
+    "markdownlint": "^0.26.2",
+    "markdownlint-cli": "^0.32.2"
   }
 }

From 866f441d05ae07fccdd7e6c3946125875594d6f3 Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Sun, 18 Sep 2022 22:18:17 -0700
Subject: [PATCH 1535/1591] [eslint config] [*] update `@babel/runtime`, `tape`

---
 packages/eslint-config-airbnb-base/package.json | 4 ++--
 packages/eslint-config-airbnb/package.json      | 4 ++--
 2 files changed, 4 insertions(+), 4 deletions(-)

diff --git a/packages/eslint-config-airbnb-base/package.json b/packages/eslint-config-airbnb-base/package.json
index 8dc7924fa5..91d032ed76 100644
--- a/packages/eslint-config-airbnb-base/package.json
+++ b/packages/eslint-config-airbnb-base/package.json
@@ -68,7 +68,7 @@
   },
   "homepage": "https://github.com/airbnb/javascript",
   "devDependencies": {
-    "@babel/runtime": "^7.18.0",
+    "@babel/runtime": "^7.19.0",
     "babel-preset-airbnb": "^4.5.0",
     "babel-tape-runner": "^3.0.0",
     "eclint": "^2.8.1",
@@ -77,7 +77,7 @@
     "eslint-plugin-import": "^2.26.0",
     "in-publish": "^2.0.1",
     "safe-publish-latest": "^2.0.0",
-    "tape": "^5.5.3"
+    "tape": "^5.6.0"
   },
   "peerDependencies": {
     "eslint": "^7.32.0 || ^8.2.0",
diff --git a/packages/eslint-config-airbnb/package.json b/packages/eslint-config-airbnb/package.json
index fdb9073ad5..8fc0f7dcf8 100644
--- a/packages/eslint-config-airbnb/package.json
+++ b/packages/eslint-config-airbnb/package.json
@@ -71,7 +71,7 @@
     "object.entries": "^1.1.5"
   },
   "devDependencies": {
-    "@babel/runtime": "^7.18.0",
+    "@babel/runtime": "^7.19.0",
     "babel-preset-airbnb": "^4.5.0",
     "babel-tape-runner": "^3.0.0",
     "eclint": "^2.8.1",
@@ -84,7 +84,7 @@
     "in-publish": "^2.0.1",
     "react": ">= 0.13.0",
     "safe-publish-latest": "^2.0.0",
-    "tape": "^5.5.3"
+    "tape": "^5.6.0"
   },
   "peerDependencies": {
     "eslint": "^7.32.0 || ^8.2.0",

From f6f63b89f602006278eff0ba4ad3cae617705cc3 Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Sun, 18 Sep 2022 22:18:57 -0700
Subject: [PATCH 1536/1591] [eslint config] [*] [deps] update `object.assign`

---
 packages/eslint-config-airbnb-base/package.json | 2 +-
 packages/eslint-config-airbnb/package.json      | 2 +-
 2 files changed, 2 insertions(+), 2 deletions(-)

diff --git a/packages/eslint-config-airbnb-base/package.json b/packages/eslint-config-airbnb-base/package.json
index 91d032ed76..f758c7eebb 100644
--- a/packages/eslint-config-airbnb-base/package.json
+++ b/packages/eslint-config-airbnb-base/package.json
@@ -88,7 +88,7 @@
   },
   "dependencies": {
     "confusing-browser-globals": "^1.0.11",
-    "object.assign": "^4.1.2",
+    "object.assign": "^4.1.4",
     "object.entries": "^1.1.5"
   }
 }
diff --git a/packages/eslint-config-airbnb/package.json b/packages/eslint-config-airbnb/package.json
index 8fc0f7dcf8..8b99aa420a 100644
--- a/packages/eslint-config-airbnb/package.json
+++ b/packages/eslint-config-airbnb/package.json
@@ -67,7 +67,7 @@
   "homepage": "https://github.com/airbnb/javascript",
   "dependencies": {
     "eslint-config-airbnb-base": "^15.0.0",
-    "object.assign": "^4.1.2",
+    "object.assign": "^4.1.4",
     "object.entries": "^1.1.5"
   },
   "devDependencies": {

From 75a908aacfe9ad86a18f3930cfff9c4636ffd644 Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Sun, 18 Sep 2022 22:21:48 -0700
Subject: [PATCH 1537/1591] [eslint config] [deps] update
 `eslint-plugin-jsx-a11y`, `eslint-plugin-react`, `eslint-plugin-react-hooks`

---
 packages/eslint-config-airbnb/package.json | 12 ++++++------
 1 file changed, 6 insertions(+), 6 deletions(-)

diff --git a/packages/eslint-config-airbnb/package.json b/packages/eslint-config-airbnb/package.json
index 8b99aa420a..ef4cd9632b 100644
--- a/packages/eslint-config-airbnb/package.json
+++ b/packages/eslint-config-airbnb/package.json
@@ -78,9 +78,9 @@
     "eslint": "^7.32.0 || ^8.2.0",
     "eslint-find-rules": "^4.1.0",
     "eslint-plugin-import": "^2.26.0",
-    "eslint-plugin-jsx-a11y": "^6.5.1",
-    "eslint-plugin-react": "^7.30.0",
-    "eslint-plugin-react-hooks": "^4.5.0",
+    "eslint-plugin-jsx-a11y": "^6.6.1",
+    "eslint-plugin-react": "^7.31.8",
+    "eslint-plugin-react-hooks": "^4.6.0",
     "in-publish": "^2.0.1",
     "react": ">= 0.13.0",
     "safe-publish-latest": "^2.0.0",
@@ -89,9 +89,9 @@
   "peerDependencies": {
     "eslint": "^7.32.0 || ^8.2.0",
     "eslint-plugin-import": "^2.26.0",
-    "eslint-plugin-jsx-a11y": "^6.5.1",
-    "eslint-plugin-react": "^7.30.0",
-    "eslint-plugin-react-hooks": "^4.5.0"
+    "eslint-plugin-jsx-a11y": "^6.6.1",
+    "eslint-plugin-react": "^7.31.8",
+    "eslint-plugin-react-hooks": "^4.6.0"
   },
   "engines": {
     "node": "^10.12.0 || ^12.22.0 || ^14.17.0 || >=16.0.0"

From 7dbb7b154ffe38297f451440e7f59e3876a18ef7 Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Tue, 25 Oct 2022 09:42:25 -0700
Subject: [PATCH 1538/1591] [eslint config] [base] add disabled
 `logical-assignment-operators` rule

---
 packages/eslint-config-airbnb-base/rules/style.js | 7 +++++++
 1 file changed, 7 insertions(+)

diff --git a/packages/eslint-config-airbnb-base/rules/style.js b/packages/eslint-config-airbnb-base/rules/style.js
index bc83e858e1..2e7f6fed44 100644
--- a/packages/eslint-config-airbnb-base/rules/style.js
+++ b/packages/eslint-config-airbnb-base/rules/style.js
@@ -191,6 +191,13 @@ module.exports = {
       after: 'always',
     }],
 
+    // Require or disallow logical assignment logical operator shorthand
+    // https://eslint.org/docs/latest/rules/logical-assignment-operators
+    // TODO, semver-major: enable
+    'logical-assignment-operators': ['off', 'always', {
+      enforceForIfStatements: true,
+    }],
+
     // specify the maximum depth that blocks can be nested
     'max-depth': ['off', 4],
 

From 0b1f62372ee0ce9e228a1a9a98d948d323d1737f Mon Sep 17 00:00:00 2001
From: Mustafa UZUN <mustafa.uzun@std.izmirekonomi.edu.tr>
Date: Tue, 25 Oct 2022 16:03:37 +0300
Subject: [PATCH 1539/1591] [editorial] convert example to use single instead
 of double quotes

---
 README.md | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/README.md b/README.md
index b2fc7d9d2c..b351fda1c6 100644
--- a/README.md
+++ b/README.md
@@ -3131,7 +3131,7 @@ Other Style Guides
     });
 
     // good
-    const reaction = "No! That’s impossible!";
+    const reaction = 'No! That’s impossible!';
     (async function meanwhileOnTheFalcon() {
       // handle `leia`, `lando`, `chewie`, `r2`, `c3p0`
       // ...

From ca0ff97f17f355d10afc7ccd4f5ae11815d62637 Mon Sep 17 00:00:00 2001
From: Mustafa UZUN <mustafa.uzun@std.izmirekonomi.edu.tr>
Date: Tue, 25 Oct 2022 23:26:56 +0300
Subject: [PATCH 1540/1591] [guide] add Nullish Coalescing operator

---
 README.md | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/README.md b/README.md
index b351fda1c6..422d6ad79c 100644
--- a/README.md
+++ b/README.md
@@ -2096,11 +2096,13 @@ Other Style Guides
     const foo = a ? a : b;
     const bar = c ? true : false;
     const baz = c ? false : true;
+    const quux = a != null ? a : b;
 
     // good
     const foo = a || b;
     const bar = !!c;
     const baz = !c;
+    const quux = a ?? b;
     ```
 
   <a name="comparison--no-mixed-operators"></a>

From 6fb4f8e878264f7b913dc29bc6919520eb6be6c8 Mon Sep 17 00:00:00 2001
From: Mustafa UZUN <mustafa.uzun@std.izmirekonomi.edu.tr>
Date: Wed, 26 Oct 2022 00:06:26 +0300
Subject: [PATCH 1541/1591] [guide] add Optional Chaining

---
 README.md | 8 ++++++++
 1 file changed, 8 insertions(+)

diff --git a/README.md b/README.md
index 422d6ad79c..f3daaa8860 100644
--- a/README.md
+++ b/README.md
@@ -2852,6 +2852,14 @@ Other Style Guides
       && jsonData.foo.bar.baz.quux
       && jsonData.foo.bar.baz.quux.xyzzy;
 
+    // better
+    const foo = jsonData
+      ?.foo
+      ?.bar
+      ?.baz
+      ?.quux
+      ?.xyzzy;
+
     // good
     $.ajax({
       method: 'POST',

From 6947138ee34319133da0e28a0e59abad987f1586 Mon Sep 17 00:00:00 2001
From: Mustafa UZUN <mustafa.uzun@std.izmirekonomi.edu.tr>
Date: Wed, 26 Oct 2022 16:17:38 +0300
Subject: [PATCH 1542/1591] [guide] add comma to the end of the property

---
 README.md | 10 +++++-----
 1 file changed, 5 insertions(+), 5 deletions(-)

diff --git a/README.md b/README.md
index f3daaa8860..a37f14536e 100644
--- a/README.md
+++ b/README.md
@@ -2509,7 +2509,7 @@ Other Style Guides
     }
 
     // bad
-    dog.set('attr',{
+    dog.set('attr', {
       age: '1 year',
       breed: 'Bernese Mountain Dog',
     });
@@ -2609,7 +2609,7 @@ Other Style Guides
     // bad
     const leds = stage.selectAll('.led').data(data).enter().append('svg:svg').classed('led', true)
         .attr('width', (radius + margin) * 2).append('svg:g')
-        .attr('transform', `translate(${radius + margin},${radius + margin})`)
+        .attr('transform', `translate(${radius + margin}, ${radius + margin})`)
         .call(tron.led);
 
     // good
@@ -2619,7 +2619,7 @@ Other Style Guides
         .classed('led', true)
         .attr('width', (radius + margin) * 2)
       .append('svg:g')
-        .attr('transform', `translate(${radius + margin},${radius + margin})`)
+        .attr('transform', `translate(${radius + margin}, ${radius + margin})`)
         .call(tron.led);
 
     // good
@@ -2627,7 +2627,7 @@ Other Style Guides
     const svg = leds.enter().append('svg:svg');
     svg.classed('led', true).attr('width', (radius + margin) * 2);
     const g = svg.append('svg:g');
-    g.attr('transform', `translate(${radius + margin},${radius + margin})`).call(tron.led);
+    g.attr('transform', `translate(${radius + margin}, ${radius + margin})`).call(tron.led);
     ```
 
   <a name="whitespace--after-blocks"></a><a name="18.7"></a>
@@ -3481,7 +3481,7 @@ Other Style Guides
 
     // good
     export const MAPPING = {
-      key: 'value'
+      key: 'value',
     };
     ```
 

From c6b1a43c489d2c242f9c6c6d12966c95d27d9dfa Mon Sep 17 00:00:00 2001
From: Mustafa UZUN <mustafa.uzun@std.izmirekonomi.edu.tr>
Date: Wed, 26 Oct 2022 13:44:17 +0300
Subject: [PATCH 1543/1591] [guide] rename `qux` to `quux`

Fixes #2661
---
 README.md | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/README.md b/README.md
index a37f14536e..5dd908f954 100644
--- a/README.md
+++ b/README.md
@@ -2702,7 +2702,7 @@ Other Style Guides
     // bad
     if (baz) {
 
-      console.log(qux);
+      console.log(quux);
     } else {
       console.log(foo);
 
@@ -2723,7 +2723,7 @@ Other Style Guides
 
     // good
     if (baz) {
-      console.log(qux);
+      console.log(quux);
     } else {
       console.log(foo);
     }

From 38f1488918ef19f56191e855f624fa5da988d547 Mon Sep 17 00:00:00 2001
From: Maksim Ploski <50287455+plplmax@users.noreply.github.com>
Date: Mon, 31 Oct 2022 21:57:59 +0300
Subject: [PATCH 1544/1591] [guide] fix typo in `space-before-blocks`

---
 README.md | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/README.md b/README.md
index 5dd908f954..94da6593ab 100644
--- a/README.md
+++ b/README.md
@@ -2509,7 +2509,7 @@ Other Style Guides
     }
 
     // bad
-    dog.set('attr', {
+    dog.set('attr',{
       age: '1 year',
       breed: 'Bernese Mountain Dog',
     });

From 1fb7d76adde6f0822471c924bfda4ccd49879bc0 Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Thu, 17 Nov 2022 13:56:33 -0800
Subject: [PATCH 1545/1591] [eslint config] [patch] add new disabled core rules

---
 packages/eslint-config-airbnb-base/rules/best-practices.js | 5 +++++
 packages/eslint-config-airbnb-base/rules/errors.js         | 5 +++++
 2 files changed, 10 insertions(+)

diff --git a/packages/eslint-config-airbnb-base/rules/best-practices.js b/packages/eslint-config-airbnb-base/rules/best-practices.js
index 90c34ccfa1..944fe71a05 100644
--- a/packages/eslint-config-airbnb-base/rules/best-practices.js
+++ b/packages/eslint-config-airbnb-base/rules/best-practices.js
@@ -104,6 +104,11 @@ module.exports = {
     // https://eslint.org/docs/rules/no-empty-pattern
     'no-empty-pattern': 'error',
 
+    // Disallow empty static blocks
+    // https://eslint.org/docs/latest/rules/no-empty-static-block
+    // TODO: semver-major, enable
+    'no-empty-static-block': 'off',
+
     // disallow comparisons to null without a type-checking operator
     // https://eslint.org/docs/rules/no-eq-null
     'no-eq-null': 'off',
diff --git a/packages/eslint-config-airbnb-base/rules/errors.js b/packages/eslint-config-airbnb-base/rules/errors.js
index 7770d5cb86..a3dda4e510 100644
--- a/packages/eslint-config-airbnb-base/rules/errors.js
+++ b/packages/eslint-config-airbnb-base/rules/errors.js
@@ -105,6 +105,11 @@ module.exports = {
     // disallow the use of object properties of the global object (Math and JSON) as functions
     'no-obj-calls': 'error',
 
+    // Disallow new operators with global non-constructor functions
+    // https://eslint.org/docs/latest/rules/no-new-native-nonconstructor
+    // TODO: semver-major, enable
+    'no-new-native-nonconstructor': 'off',
+
     // Disallow returning values from Promise executor functions
     // https://eslint.org/docs/rules/no-promise-executor-return
     'no-promise-executor-return': 'error',

From 0d747c6d96f94e54d24d8c005da0c87105bf0fd5 Mon Sep 17 00:00:00 2001
From: Pushpendra Pal <94526347+Pushpendra100@users.noreply.github.com>
Date: Mon, 14 Nov 2022 04:54:20 +0530
Subject: [PATCH 1546/1591] [readme] add space before code blocks

---
 README.md | 4 ++++
 1 file changed, 4 insertions(+)

diff --git a/README.md b/README.md
index 94da6593ab..1bc228da5d 100644
--- a/README.md
+++ b/README.md
@@ -73,6 +73,8 @@ Other Style Guides
     - `symbol`
     - `bigint`
 
+    <br />
+
     ```javascript
     const foo = 1;
     let bar = foo;
@@ -91,6 +93,8 @@ Other Style Guides
     - `array`
     - `function`
 
+    <br />
+
     ```javascript
     const foo = [1, 2];
     const bar = foo;

From 49d08a2f134f4d6524e99aacce57914b8957994e Mon Sep 17 00:00:00 2001
From: Mustafa UZUN <mustafa.uzun@std.izmirekonomi.edu.tr>
Date: Sat, 29 Oct 2022 23:49:43 +0300
Subject: [PATCH 1547/1591] [readme] prefer `const`/`let` over `var` in
 examples

2.1 Use const for all of your references; avoid using var. eslint: prefer-const, no-const-assign
---
 README.md | 52 ++++++++++++++++++++++++++--------------------------
 1 file changed, 26 insertions(+), 26 deletions(-)

diff --git a/README.md b/README.md
index 1bc228da5d..59c1aaf3e9 100644
--- a/README.md
+++ b/README.md
@@ -778,7 +778,7 @@ Other Style Guides
     > Why? They are confusing to reason about.
 
     ```javascript
-    var b = 1;
+    let b = 1;
     // bad
     function count(a = b++) {
       console.log(a);
@@ -811,10 +811,10 @@ Other Style Guides
 
     ```javascript
     // bad
-    var add = new Function('a', 'b', 'return a + b');
+    const add = new Function('a', 'b', 'return a + b');
 
     // still bad
-    var subtract = Function('a', 'b', 'return a - b');
+    const subtract = Function('a', 'b', 'return a - b');
     ```
 
   <a name="functions--signature-spacing"></a><a name="7.11"></a>
@@ -1830,14 +1830,14 @@ Other Style Guides
     ```javascript
     // bad
 
-    var some_unused_var = 42;
+    const some_unused_var = 42;
 
     // Write-only variables are not considered as used.
-    var y = 10;
+    let y = 10;
     y = 5;
 
     // A read for a modification of itself is not considered as used.
-    var z = 0;
+    let z = 0;
     z = z + 1;
 
     // Unused function arguments.
@@ -1851,14 +1851,14 @@ Other Style Guides
       return x + y;
     }
 
-    var x = 1;
-    var y = a + 2;
+    const x = 1;
+    const y = a + 2;
 
     alert(getXPlusY(x, y));
 
     // 'type' is ignored even if unused because it has a rest property sibling.
     // This is a form of extracting an object that omits the specified keys.
-    var { type, ...coords } = data;
+    const { type, ...coords } = data;
     // 'coords' is now the 'data' object without its 'type' property.
     ```
 
@@ -2892,12 +2892,12 @@ Other Style Guides
 
     ```javascript
     // bad
-    var foo = 1,bar = 2;
-    var arr = [1 , 2];
+    const foo = 1,bar = 2;
+    const arr = [1 , 2];
 
     // good
-    var foo = 1, bar = 2;
-    var arr = [1, 2];
+    const foo = 1, bar = 2;
+    const arr = [1, 2];
     ```
 
   <a name="whitespace--computed-property-spacing"></a>
@@ -2907,13 +2907,13 @@ Other Style Guides
     // bad
     obj[foo ]
     obj[ 'foo']
-    var x = {[ b ]: a}
+    const x = {[ b ]: a}
     obj[foo[ bar ]]
 
     // good
     obj[foo]
     obj['foo']
-    var x = { [b]: a }
+    const x = { [b]: a }
     obj[foo[bar]]
     ```
 
@@ -2936,11 +2936,11 @@ Other Style Guides
 
     ```javascript
     // bad
-    var obj = { foo : 42 };
-    var obj2 = { foo:42 };
+    const obj = { foo : 42 };
+    const obj2 = { foo:42 };
 
     // good
-    var obj = { foo: 42 };
+    const obj = { foo: 42 };
     ```
 
   <a name="whitespace--no-trailing-spaces"></a>
@@ -2952,24 +2952,24 @@ Other Style Guides
     <!-- markdownlint-disable MD012 -->
     ```javascript
     // bad - multiple empty lines
-    var x = 1;
+    const x = 1;
 
 
-    var y = 2;
+    const y = 2;
 
     // bad - 2+ newlines at end of file
-    var x = 1;
-    var y = 2;
+    const x = 1;
+    const y = 2;
 
 
     // bad - 1+ newline(s) at beginning of file
 
-    var x = 1;
-    var y = 2;
+    const x = 1;
+    const y = 2;
 
     // good
-    var x = 1;
-    var y = 2;
+    const x = 1;
+    const y = 2;
 
     ```
     <!-- markdownlint-enable MD012 -->

From d60170173096486bde4eff320a22148e79acff48 Mon Sep 17 00:00:00 2001
From: Mustafa UZUN <mustafa.uzun@std.izmirekonomi.edu.tr>
Date: Sun, 30 Oct 2022 02:00:29 +0300
Subject: [PATCH 1548/1591] [readme] wayback machine, or remove, broken links

---
 README.md | 23 +++++++++++------------
 1 file changed, 11 insertions(+), 12 deletions(-)

diff --git a/README.md b/README.md
index 59c1aaf3e9..273cb92542 100644
--- a/README.md
+++ b/README.md
@@ -3213,7 +3213,7 @@ Other Style Guides
     ```
 
   <a name="coercion--comment-deviations"></a><a name="21.4"></a>
-  - [22.4](#coercion--comment-deviations) If for whatever reason you are doing something wild and `parseInt` is your bottleneck and need to use Bitshift for [performance reasons](https://jsperf.com/coercion-vs-casting/3), leave a comment explaining why and what you’re doing.
+  - [22.4](#coercion--comment-deviations) If for whatever reason you are doing something wild and `parseInt` is your bottleneck and need to use Bitshift for [performance reasons](https://web.archive.org/web/20200414205431/https://jsperf.com/coercion-vs-casting/3), leave a comment explaining why and what you’re doing.
 
     ```javascript
     // good
@@ -3636,7 +3636,7 @@ Other Style Guides
     ```
 
   <a name="jquery--queries"></a><a name="25.3"></a>
-  - [26.3](#jquery--queries) For DOM queries use Cascading `$('.sidebar ul')` or parent > child `$('.sidebar > ul')`. [jsPerf](https://jsperf.com/jquery-find-vs-context-sel/16)
+  - [26.3](#jquery--queries) For DOM queries use Cascading `$('.sidebar ul')` or parent > child `$('.sidebar > ul')`. [jsPerf](https://web.archive.org/web/20200414183810/https://jsperf.com/jquery-find-vs-context-sel/16)
 
   <a name="jquery--find"></a><a name="25.4"></a>
   - [26.4](#jquery--find) Use `find` with scoped jQuery object queries.
@@ -3760,12 +3760,12 @@ Other Style Guides
 ## Performance
 
   - [On Layout & Web Performance](https://www.kellegous.com/j/2013/01/26/layout-performance/)
-  - [String vs Array Concat](https://jsperf.com/string-vs-array-concat/2)
-  - [Try/Catch Cost In a Loop](https://jsperf.com/try-catch-in-loop-cost/12)
-  - [Bang Function](https://jsperf.com/bang-function)
-  - [jQuery Find vs Context, Selector](https://jsperf.com/jquery-find-vs-context-sel/164)
-  - [innerHTML vs textContent for script text](https://jsperf.com/innerhtml-vs-textcontent-for-script-text)
-  - [Long String Concatenation](https://jsperf.com/ya-string-concat/38)
+  - [String vs Array Concat](https://web.archive.org/web/20200414200857/https://jsperf.com/string-vs-array-concat/2)
+  - [Try/Catch Cost In a Loop](https://web.archive.org/web/20200414190827/https://jsperf.com/try-catch-in-loop-cost/12)
+  - [Bang Function](https://web.archive.org/web/20200414205426/https://jsperf.com/bang-function)
+  - [jQuery Find vs Context, Selector](https://web.archive.org/web/20200414200850/https://jsperf.com/jquery-find-vs-context-sel/164)
+  - [innerHTML vs textContent for script text](https://web.archive.org/web/20200414205428/https://jsperf.com/innerhtml-vs-textcontent-for-script-text)
+  - [Long String Concatenation](https://web.archive.org/web/20200414203914/https://jsperf.com/ya-string-concat/38)
   - [Are JavaScript functions like `map()`, `reduce()`, and `filter()` optimized for traversing arrays?](https://www.quora.com/JavaScript-programming-language-Are-Javascript-functions-like-map-reduce-and-filter-already-optimized-for-traversing-array/answer/Quildreen-Motta)
   - Loading...
 
@@ -3829,7 +3829,7 @@ Other Style Guides
   - [Superhero.js](http://superherojs.com/) - Kim Joar Bekkelund, Mads Mobæk, & Olav Bjorkoy
   - [JSBooks](https://jsbooks.revolunet.com/) - Julien Bouquillon
   - [Third Party JavaScript](https://www.manning.com/books/third-party-javascript) - Ben Vinegar and Anton Kovalyov
-  - [Effective JavaScript: 68 Specific Ways to Harness the Power of JavaScript](https://amzn.com/0321812182) - David Herman
+  - [Effective JavaScript: 68 Specific Ways to Harness the Power of JavaScript](https://amzn.com/dp/0321812182) - David Herman
   - [Eloquent JavaScript](https://eloquentjavascript.net/) - Marijn Haverbeke
   - [You Don’t Know JS: ES6 & Beyond](https://shop.oreilly.com/product/0636920033769.do) - Kyle Simpson
 
@@ -3911,16 +3911,15 @@ Other Style Guides
   - **MinnPost**: [MinnPost/javascript](https://github.com/MinnPost/javascript)
   - **MitocGroup**: [MitocGroup/javascript](https://github.com/MitocGroup/javascript)
   - **Muber**: [muber](https://github.com/muber/)
-  - **National Geographic**: [natgeo](https://github.com/natgeo/)
+  - **National Geographic Society**: [natgeosociety](https://github.com/natgeosociety/)
   - **NullDev**: [NullDevCo/JavaScript-Styleguide](https://github.com/NullDevCo/JavaScript-Styleguide)
   - **Nulogy**: [nulogy/javascript](https://github.com/nulogy/javascript)
   - **Orange Hill Development**: [orangehill/javascript](https://github.com/orangehill/javascript)
   - **Orion Health**: [orionhealth/javascript](https://github.com/orionhealth/javascript)
-  - **OutBoxSoft**: [OutBoxSoft/javascript](https://github.com/OutBoxSoft/javascript)
   - **Peerby**: [Peerby/javascript](https://github.com/Peerby/javascript)
   - **Pier 1**: [Pier1/javascript](https://github.com/pier1/javascript)
   - **Qotto**: [Qotto/javascript-style-guide](https://github.com/Qotto/javascript-style-guide)
-  - **React**: [facebook.github.io/react/contributing/how-to-contribute.html#style-guide](https://facebook.github.io/react/contributing/how-to-contribute.html#style-guide)
+  - **React**: [reactjs.org/docs/how-to-contribute.html#style-guide](https://reactjs.org/docs/how-to-contribute.html#style-guide)
   - **REI**: [reidev/js-style-guide](https://github.com/rei/code-style-guides/)
   - **Ripple**: [ripple/javascript-style-guide](https://github.com/ripple/javascript-style-guide)
   - **Sainsbury’s Supermarkets**: [jsainsburyplc](https://github.com/jsainsburyplc)

From 4ef69edc633972a559cb7418e8aee8172cc9fbad Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Mert=20Can=20Alt=C4=B1n?= <mertgold60@gmail.com>
Date: Sun, 4 Dec 2022 00:32:01 +0300
Subject: [PATCH 1549/1591] [Tests] refactor test paths

---
 packages/eslint-config-airbnb-base/test/test-base.js | 5 +++--
 packages/eslint-config-airbnb/test/test-base.js      | 5 +++--
 2 files changed, 6 insertions(+), 4 deletions(-)

diff --git a/packages/eslint-config-airbnb-base/test/test-base.js b/packages/eslint-config-airbnb-base/test/test-base.js
index 181e04f453..4380bf5567 100644
--- a/packages/eslint-config-airbnb-base/test/test-base.js
+++ b/packages/eslint-config-airbnb-base/test/test-base.js
@@ -6,9 +6,10 @@ import index from '..';
 
 const files = { ...{ index } }; // object spread is to test parsing
 
-fs.readdirSync(path.join(__dirname, '../rules')).forEach((name) => {
+const rulesDir = path.join(__dirname, '../rules');
+fs.readdirSync(rulesDir).forEach((name) => {
   // eslint-disable-next-line import/no-dynamic-require
-  files[name] = require(`../rules/${name}`); // eslint-disable-line global-require
+  files[name] = require(path.join(rulesDir, name)); // eslint-disable-line global-require
 });
 
 Object.keys(files).forEach((
diff --git a/packages/eslint-config-airbnb/test/test-base.js b/packages/eslint-config-airbnb/test/test-base.js
index c283c3410c..8f3f054d29 100644
--- a/packages/eslint-config-airbnb/test/test-base.js
+++ b/packages/eslint-config-airbnb/test/test-base.js
@@ -6,13 +6,14 @@ const base = require('../base');
 
 const files = { base };
 
-fs.readdirSync(path.join(__dirname, '../rules')).forEach((name) => {
+const rulesDir = path.join(__dirname, '../rules');
+fs.readdirSync(rulesDir).forEach((name) => {
   if (name === 'react.js' || name === 'react-a11y.js') {
     return;
   }
 
   // eslint-disable-next-line import/no-dynamic-require
-  files[name] = require(`../rules/${name}`); // eslint-disable-line global-require
+  files[name] = require(path.join(rulesDir, name)); // eslint-disable-line global-require
 });
 
 Object.keys(files).forEach((name) => {

From 81157eec2309449b31f36bf8940493623f2530c6 Mon Sep 17 00:00:00 2001
From: Mustafa UZUN <mustafa.uzun@std.izmirekonomi.edu.tr>
Date: Thu, 17 Nov 2022 20:15:09 +0300
Subject: [PATCH 1550/1591] [guide] add `Object.hasOwn`

---
 README.md | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/README.md b/README.md
index 273cb92542..db3bc6f31d 100644
--- a/README.md
+++ b/README.md
@@ -311,6 +311,8 @@ Other Style Guides
     /* or */
     import has from 'has'; // https://www.npmjs.com/package/has
     console.log(has(object, key));
+    /* or */
+    console.log(Object.hasOwn(object, key)); // https://www.npmjs.com/package/object.hasown
     ```
 
   <a name="objects--rest-spread"></a>

From fd96a4fd57be26d4d9d2f2d24b373a2df7c23548 Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Fri, 30 Dec 2022 14:48:36 -0800
Subject: [PATCH 1551/1591] [eslint config] [*] [refactor] use object spread
 instead of `Object.assign`

---
 packages/eslint-config-airbnb-base/package.json        | 1 -
 packages/eslint-config-airbnb-base/whitespace-async.js | 3 +--
 packages/eslint-config-airbnb-base/whitespace.js       | 3 +--
 packages/eslint-config-airbnb/package.json             | 1 -
 packages/eslint-config-airbnb/rules/react.js           | 6 +++---
 packages/eslint-config-airbnb/whitespace-async.js      | 3 +--
 packages/eslint-config-airbnb/whitespace.js            | 3 +--
 7 files changed, 7 insertions(+), 13 deletions(-)

diff --git a/packages/eslint-config-airbnb-base/package.json b/packages/eslint-config-airbnb-base/package.json
index f758c7eebb..25bcb9cfd3 100644
--- a/packages/eslint-config-airbnb-base/package.json
+++ b/packages/eslint-config-airbnb-base/package.json
@@ -88,7 +88,6 @@
   },
   "dependencies": {
     "confusing-browser-globals": "^1.0.11",
-    "object.assign": "^4.1.4",
     "object.entries": "^1.1.5"
   }
 }
diff --git a/packages/eslint-config-airbnb-base/whitespace-async.js b/packages/eslint-config-airbnb-base/whitespace-async.js
index 55c5161235..d6742fb7c4 100755
--- a/packages/eslint-config-airbnb-base/whitespace-async.js
+++ b/packages/eslint-config-airbnb-base/whitespace-async.js
@@ -1,6 +1,5 @@
 #!/usr/bin/env node
 
-const assign = require('object.assign');
 const entries = require('object.entries');
 const { ESLint } = require('eslint');
 
@@ -20,7 +19,7 @@ function getSeverity(ruleConfig) {
 }
 
 async function onlyErrorOnRules(rulesToError, config) {
-  const errorsOnly = assign({}, config);
+  const errorsOnly = { ...config };
   const cli = new ESLint({
     useEslintrc: false,
     baseConfig: config
diff --git a/packages/eslint-config-airbnb-base/whitespace.js b/packages/eslint-config-airbnb-base/whitespace.js
index dfdf95a18e..f4b93bb492 100644
--- a/packages/eslint-config-airbnb-base/whitespace.js
+++ b/packages/eslint-config-airbnb-base/whitespace.js
@@ -4,7 +4,6 @@ const { CLIEngine } = require('eslint');
 
 if (CLIEngine) {
   /* eslint no-inner-declarations: 0 */
-  const assign = require('object.assign');
   const entries = require('object.entries');
   const whitespaceRules = require('./whitespaceRules');
 
@@ -23,7 +22,7 @@ if (CLIEngine) {
   }
 
   function onlyErrorOnRules(rulesToError, config) {
-    const errorsOnly = assign({}, config);
+    const errorsOnly = { ...config };
     const cli = new CLIEngine({ baseConfig: config, useEslintrc: false });
     const baseRules = cli.getConfigForFile(require.resolve('./')).rules;
 
diff --git a/packages/eslint-config-airbnb/package.json b/packages/eslint-config-airbnb/package.json
index ef4cd9632b..0ad2313195 100644
--- a/packages/eslint-config-airbnb/package.json
+++ b/packages/eslint-config-airbnb/package.json
@@ -67,7 +67,6 @@
   "homepage": "https://github.com/airbnb/javascript",
   "dependencies": {
     "eslint-config-airbnb-base": "^15.0.0",
-    "object.assign": "^4.1.4",
     "object.entries": "^1.1.5"
   },
   "devDependencies": {
diff --git a/packages/eslint-config-airbnb/rules/react.js b/packages/eslint-config-airbnb/rules/react.js
index f1dfd20788..447576d18a 100644
--- a/packages/eslint-config-airbnb/rules/react.js
+++ b/packages/eslint-config-airbnb/rules/react.js
@@ -1,4 +1,3 @@
-const assign = require('object.assign');
 const baseStyleRules = require('eslint-config-airbnb-base/rules/style').rules;
 
 const dangleRules = baseStyleRules['no-underscore-dangle'];
@@ -17,9 +16,10 @@ module.exports = {
   // View link below for react rules documentation
   // https://github.com/jsx-eslint/eslint-plugin-react#list-of-supported-rules
   rules: {
-    'no-underscore-dangle': [dangleRules[0], assign({}, dangleRules[1], {
+    'no-underscore-dangle': [dangleRules[0], {
+      ...dangleRules[1],
       allow: dangleRules[1].allow.concat(['__REDUX_DEVTOOLS_EXTENSION_COMPOSE__']),
-    })],
+    }],
 
     // Specify whether double or single quotes should be used in JSX attributes
     // https://eslint.org/docs/rules/jsx-quotes
diff --git a/packages/eslint-config-airbnb/whitespace-async.js b/packages/eslint-config-airbnb/whitespace-async.js
index 55c5161235..d6742fb7c4 100755
--- a/packages/eslint-config-airbnb/whitespace-async.js
+++ b/packages/eslint-config-airbnb/whitespace-async.js
@@ -1,6 +1,5 @@
 #!/usr/bin/env node
 
-const assign = require('object.assign');
 const entries = require('object.entries');
 const { ESLint } = require('eslint');
 
@@ -20,7 +19,7 @@ function getSeverity(ruleConfig) {
 }
 
 async function onlyErrorOnRules(rulesToError, config) {
-  const errorsOnly = assign({}, config);
+  const errorsOnly = { ...config };
   const cli = new ESLint({
     useEslintrc: false,
     baseConfig: config
diff --git a/packages/eslint-config-airbnb/whitespace.js b/packages/eslint-config-airbnb/whitespace.js
index dfdf95a18e..f4b93bb492 100644
--- a/packages/eslint-config-airbnb/whitespace.js
+++ b/packages/eslint-config-airbnb/whitespace.js
@@ -4,7 +4,6 @@ const { CLIEngine } = require('eslint');
 
 if (CLIEngine) {
   /* eslint no-inner-declarations: 0 */
-  const assign = require('object.assign');
   const entries = require('object.entries');
   const whitespaceRules = require('./whitespaceRules');
 
@@ -23,7 +22,7 @@ if (CLIEngine) {
   }
 
   function onlyErrorOnRules(rulesToError, config) {
-    const errorsOnly = assign({}, config);
+    const errorsOnly = { ...config };
     const cli = new CLIEngine({ baseConfig: config, useEslintrc: false });
     const baseRules = cli.getConfigForFile(require.resolve('./')).rules;
 

From 8091e39343b86ccc8524ed068cd218a3fd928105 Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Wed, 8 Feb 2023 22:11:42 -0800
Subject: [PATCH 1552/1591] [*] [dev deps] update `@babel/runtime`, `tape`

---
 packages/eslint-config-airbnb-base/package.json | 4 ++--
 packages/eslint-config-airbnb/package.json      | 4 ++--
 2 files changed, 4 insertions(+), 4 deletions(-)

diff --git a/packages/eslint-config-airbnb-base/package.json b/packages/eslint-config-airbnb-base/package.json
index 25bcb9cfd3..9b71edda09 100644
--- a/packages/eslint-config-airbnb-base/package.json
+++ b/packages/eslint-config-airbnb-base/package.json
@@ -68,7 +68,7 @@
   },
   "homepage": "https://github.com/airbnb/javascript",
   "devDependencies": {
-    "@babel/runtime": "^7.19.0",
+    "@babel/runtime": "^7.20.13",
     "babel-preset-airbnb": "^4.5.0",
     "babel-tape-runner": "^3.0.0",
     "eclint": "^2.8.1",
@@ -77,7 +77,7 @@
     "eslint-plugin-import": "^2.26.0",
     "in-publish": "^2.0.1",
     "safe-publish-latest": "^2.0.0",
-    "tape": "^5.6.0"
+    "tape": "^5.6.3"
   },
   "peerDependencies": {
     "eslint": "^7.32.0 || ^8.2.0",
diff --git a/packages/eslint-config-airbnb/package.json b/packages/eslint-config-airbnb/package.json
index 0ad2313195..31af4bae6d 100644
--- a/packages/eslint-config-airbnb/package.json
+++ b/packages/eslint-config-airbnb/package.json
@@ -70,7 +70,7 @@
     "object.entries": "^1.1.5"
   },
   "devDependencies": {
-    "@babel/runtime": "^7.19.0",
+    "@babel/runtime": "^7.20.13",
     "babel-preset-airbnb": "^4.5.0",
     "babel-tape-runner": "^3.0.0",
     "eclint": "^2.8.1",
@@ -83,7 +83,7 @@
     "in-publish": "^2.0.1",
     "react": ">= 0.13.0",
     "safe-publish-latest": "^2.0.0",
-    "tape": "^5.6.0"
+    "tape": "^5.6.3"
   },
   "peerDependencies": {
     "eslint": "^7.32.0 || ^8.2.0",

From 917c8d92a30db5bc35ddef85ec417f1aad0dc2c1 Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Wed, 8 Feb 2023 22:19:53 -0800
Subject: [PATCH 1553/1591] [*] [deps] update `eslint-plugin-import`

---
 packages/eslint-config-airbnb-base/package.json     |  4 ++--
 packages/eslint-config-airbnb-base/rules/imports.js | 10 ++++++++++
 packages/eslint-config-airbnb/package.json          |  4 ++--
 3 files changed, 14 insertions(+), 4 deletions(-)

diff --git a/packages/eslint-config-airbnb-base/package.json b/packages/eslint-config-airbnb-base/package.json
index 9b71edda09..95e6dec90a 100644
--- a/packages/eslint-config-airbnb-base/package.json
+++ b/packages/eslint-config-airbnb-base/package.json
@@ -74,14 +74,14 @@
     "eclint": "^2.8.1",
     "eslint": "^7.32.0 || ^8.2.0",
     "eslint-find-rules": "^4.1.0",
-    "eslint-plugin-import": "^2.26.0",
+    "eslint-plugin-import": "^2.27.5",
     "in-publish": "^2.0.1",
     "safe-publish-latest": "^2.0.0",
     "tape": "^5.6.3"
   },
   "peerDependencies": {
     "eslint": "^7.32.0 || ^8.2.0",
-    "eslint-plugin-import": "^2.26.0"
+    "eslint-plugin-import": "^2.27.5"
   },
   "engines": {
     "node": "^10.12.0 || >=12.0.0"
diff --git a/packages/eslint-config-airbnb-base/rules/imports.js b/packages/eslint-config-airbnb-base/rules/imports.js
index 5f7f1bd470..70bc95a838 100644
--- a/packages/eslint-config-airbnb-base/rules/imports.js
+++ b/packages/eslint-config-airbnb-base/rules/imports.js
@@ -269,5 +269,15 @@ module.exports = {
     // Use this rule to prevent importing packages through relative paths.
     // https://github.com/benmosher/eslint-plugin-import/blob/1012eb951767279ce3b540a4ec4f29236104bb5b/docs/rules/no-relative-packages.md
     'import/no-relative-packages': 'error',
+
+    // enforce a consistent style for type specifiers (inline or top-level)
+    // https://github.com/import-js/eslint-plugin-import/blob/d5fc8b670dc8e6903dbb7b0894452f60c03089f5/docs/rules/consistent-type-specifier-style.md
+    // TODO, semver-major: enable (just in case)
+    'import/consistent-type-specifier-style': ['off', 'prefer-inline'],
+
+    // Reports the use of empty named import blocks.
+    // https://github.com/import-js/eslint-plugin-import/blob/d5fc8b670dc8e6903dbb7b0894452f60c03089f5/docs/rules/no-empty-named-blocks.md
+    // TODO, semver-minor: enable
+    'import/no-empty-named-blocks': 'off',
   },
 };
diff --git a/packages/eslint-config-airbnb/package.json b/packages/eslint-config-airbnb/package.json
index 31af4bae6d..7985899643 100644
--- a/packages/eslint-config-airbnb/package.json
+++ b/packages/eslint-config-airbnb/package.json
@@ -76,7 +76,7 @@
     "eclint": "^2.8.1",
     "eslint": "^7.32.0 || ^8.2.0",
     "eslint-find-rules": "^4.1.0",
-    "eslint-plugin-import": "^2.26.0",
+    "eslint-plugin-import": "^2.27.5",
     "eslint-plugin-jsx-a11y": "^6.6.1",
     "eslint-plugin-react": "^7.31.8",
     "eslint-plugin-react-hooks": "^4.6.0",
@@ -87,7 +87,7 @@
   },
   "peerDependencies": {
     "eslint": "^7.32.0 || ^8.2.0",
-    "eslint-plugin-import": "^2.26.0",
+    "eslint-plugin-import": "^2.27.5",
     "eslint-plugin-jsx-a11y": "^6.6.1",
     "eslint-plugin-react": "^7.31.8",
     "eslint-plugin-react-hooks": "^4.6.0"

From bf536566cee0b7f239e00f105ca422bb95be2d62 Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Wed, 8 Feb 2023 22:59:18 -0800
Subject: [PATCH 1554/1591] [eslint config] [deps] update
 `eslint-plugin-react`, `eslint-plugin-jsx-a11y`

---
 packages/eslint-config-airbnb/package.json        |  8 ++++----
 packages/eslint-config-airbnb/rules/react-a11y.js | 15 +++++++++++++++
 packages/eslint-config-airbnb/rules/react.js      | 12 ++++++++++++
 3 files changed, 31 insertions(+), 4 deletions(-)

diff --git a/packages/eslint-config-airbnb/package.json b/packages/eslint-config-airbnb/package.json
index 7985899643..c1d11d44e9 100644
--- a/packages/eslint-config-airbnb/package.json
+++ b/packages/eslint-config-airbnb/package.json
@@ -77,8 +77,8 @@
     "eslint": "^7.32.0 || ^8.2.0",
     "eslint-find-rules": "^4.1.0",
     "eslint-plugin-import": "^2.27.5",
-    "eslint-plugin-jsx-a11y": "^6.6.1",
-    "eslint-plugin-react": "^7.31.8",
+    "eslint-plugin-jsx-a11y": "^6.7.1",
+    "eslint-plugin-react": "^7.32.2",
     "eslint-plugin-react-hooks": "^4.6.0",
     "in-publish": "^2.0.1",
     "react": ">= 0.13.0",
@@ -88,8 +88,8 @@
   "peerDependencies": {
     "eslint": "^7.32.0 || ^8.2.0",
     "eslint-plugin-import": "^2.27.5",
-    "eslint-plugin-jsx-a11y": "^6.6.1",
-    "eslint-plugin-react": "^7.31.8",
+    "eslint-plugin-jsx-a11y": "^6.7.1",
+    "eslint-plugin-react": "^7.32.2",
     "eslint-plugin-react-hooks": "^4.6.0"
   },
   "engines": {
diff --git a/packages/eslint-config-airbnb/rules/react-a11y.js b/packages/eslint-config-airbnb/rules/react-a11y.js
index f7bf7c79e6..713a997b28 100644
--- a/packages/eslint-config-airbnb/rules/react-a11y.js
+++ b/packages/eslint-config-airbnb/rules/react-a11y.js
@@ -247,5 +247,20 @@ module.exports = {
       },
       allowChildren: false,
     }],
+
+    // Ensures anchor text is not ambiguous
+    // https://github.com/jsx-eslint/eslint-plugin-jsx-a11y/blob/93f78856655696a55309440593e0948c6fb96134/docs/rules/anchor-ambiguous-text.md
+    // TODO: semver-major, enable
+    'jsx-a11y/anchor-ambiguous-text': 'off',
+
+    // Enforce that aria-hidden="true" is not set on focusable elements.
+    // https://github.com/jsx-eslint/eslint-plugin-jsx-a11y/blob/93f78856655696a55309440593e0948c6fb96134/docs/rules/no-aria-hidden-on-focusable.md
+    // TODO: semver-major, enable
+    'jsx-a11y/no-aria-hidden-on-focusable': 'off',
+
+    // Enforces using semantic DOM elements over the ARIA role property.
+    // https://github.com/jsx-eslint/eslint-plugin-jsx-a11y/blob/93f78856655696a55309440593e0948c6fb96134/docs/rules/prefer-tag-over-role.md
+    // TODO: semver-major, enable
+    'jsx-a11y/prefer-tag-over-role': 'off',
   },
 };
diff --git a/packages/eslint-config-airbnb/rules/react.js b/packages/eslint-config-airbnb/rules/react.js
index 447576d18a..ac4e4e29d3 100644
--- a/packages/eslint-config-airbnb/rules/react.js
+++ b/packages/eslint-config-airbnb/rules/react.js
@@ -575,6 +575,18 @@ module.exports = {
     // https://github.com/jsx-eslint/eslint-plugin-react/blob/c42b624d0fb9ad647583a775ab9751091eec066f/docs/rules/jsx-no-leaked-render.md
     // TODO: semver-major, enable
     'react/jsx-no-leaked-render': 'off',
+
+    // https://github.com/jsx-eslint/eslint-plugin-react/blob/66b58dd4864678eb869a7bf434c72ff7ac530eb1/docs/rules/no-object-type-as-default-prop.md
+    // https://github.com/jsx-eslint/eslint-plugin-react/blob/66b58dd4864678eb869a7bf434c72ff7ac530eb1/docs/rules/no-object-type-as-default-prop.md
+    // TODO: semver-major, enable
+    'react/no-object-type-as-default-prop': 'off',
+
+    // https://github.com/jsx-eslint/eslint-plugin-react/blob/66b58dd4864678eb869a7bf434c72ff7ac530eb1/docs/rules/sort-default-props.md
+    // https://github.com/jsx-eslint/eslint-plugin-react/blob/66b58dd4864678eb869a7bf434c72ff7ac530eb1/docs/rules/sort-default-props.md
+    // TODO: semver-major, enable?
+    'react/sort-default-props': ['off', {
+      ignoreCase: false
+    }],
   },
 
   settings: {

From 5c01a1094986c4dd50a6ee4d9f7617abdfabb58a Mon Sep 17 00:00:00 2001
From: syedmouaazfarrukh <97732099+syedmouaazfarrukh@users.noreply.github.com>
Date: Tue, 7 Feb 2023 11:17:51 -0800
Subject: [PATCH 1555/1591] [readme] added JavaScript Roadmap link

---
 README.md | 1 +
 1 file changed, 1 insertion(+)

diff --git a/README.md b/README.md
index db3bc6f31d..a9964bcac6 100644
--- a/README.md
+++ b/README.md
@@ -3781,6 +3781,7 @@ Other Style Guides
   - [ExploringJS](https://exploringjs.com/)
   - [ES6 Compatibility Table](https://kangax.github.io/compat-table/es6/)
   - [Comprehensive Overview of ES6 Features](http://es6-features.org/)
+  - [JavaScript Roadmap](https://roadmap.sh/javascript)
 
 **Read This**
 

From 69fc1bf1953a9113f30f07ef93b69caaf498c689 Mon Sep 17 00:00:00 2001
From: Felipe Garcia Diaz <41710468+felipeGarciaDiaz@users.noreply.github.com>
Date: Fri, 28 Apr 2023 03:33:28 -0400
Subject: [PATCH 1556/1591] spell checking, fixed grammar error.

---
 README.md | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/README.md b/README.md
index a9964bcac6..fbed6641ba 100644
--- a/README.md
+++ b/README.md
@@ -464,7 +464,7 @@ Other Style Guides
     ```
 
   <a name="arrays--bracket-newline"></a>
-  - [4.8](#arrays--bracket-newline) Use line breaks after open and before close array brackets if an array has multiple lines
+  - [4.8](#arrays--bracket-newline) Use line breaks after opening array brackets and before closing array brackets, if an array has multiple lines
 
     ```javascript
     // bad

From 7982931ba745c0f57ba6934fc7e6cc43901dac76 Mon Sep 17 00:00:00 2001
From: Christian Koop <contact@sprax2013.de>
Date: Tue, 2 May 2023 19:45:36 +0200
Subject: [PATCH 1557/1591] [readme] Updates ESLint rule in section 12.3
 (exponentiation-operator)

The change itself has already been made in f3d3a075cda2acc02011e71991c10bb5b4a15278
(tracked in/acording to https://github.com/airbnb/javascript/issues/2421#issuecomment-1371305010).


#2421
Remove Math.pow from `no-restricted-properties` and use `prefer-exponentiation-operator` instead.
---
 README.md | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/README.md b/README.md
index fbed6641ba..916a6c875d 100644
--- a/README.md
+++ b/README.md
@@ -1621,7 +1621,7 @@ Other Style Guides
     ```
 
   <a name="es2016-properties--exponentiation-operator"></a>
-  - [12.3](#es2016-properties--exponentiation-operator) Use exponentiation operator `**` when calculating exponentiations. eslint: [`no-restricted-properties`](https://eslint.org/docs/rules/no-restricted-properties).
+  - [12.3](#es2016-properties--exponentiation-operator) Use exponentiation operator `**` when calculating exponentiations. eslint: [`prefer-exponentiation-operator`](https://eslint.org/docs/rules/prefer-exponentiation-operator).
 
     ```javascript
     // bad

From 0e627e2fa32e16296e309af314eb3cdaae00de66 Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Mon, 15 May 2023 10:15:59 -0700
Subject: [PATCH 1558/1591] [readme] update eslint plugin repo URLs

---
 README.md                                     | 10 +--
 .../eslint-config-airbnb-base/rules/es6.js    |  2 +-
 .../rules/imports.js                          | 86 +++++++++----------
 .../eslint-config-airbnb/rules/react-a11y.js  | 70 +++++++--------
 react/README.md                               | 44 +++++-----
 5 files changed, 106 insertions(+), 106 deletions(-)

diff --git a/README.md b/README.md
index 916a6c875d..660909e9a5 100644
--- a/README.md
+++ b/README.md
@@ -1373,7 +1373,7 @@ Other Style Guides
 
   <a name="modules--no-mutable-exports"></a>
   - [10.5](#modules--no-mutable-exports) Do not export mutable bindings.
- eslint: [`import/no-mutable-exports`](https://github.com/benmosher/eslint-plugin-import/blob/master/docs/rules/no-mutable-exports.md)
+ eslint: [`import/no-mutable-exports`](https://github.com/import-js/eslint-plugin-import/blob/master/docs/rules/no-mutable-exports.md)
     > Why? Mutation should be avoided in general, but in particular when exporting mutable bindings. While this technique may be needed for some special cases, in general, only constant references should be exported.
 
     ```javascript
@@ -1388,7 +1388,7 @@ Other Style Guides
 
   <a name="modules--prefer-default-export"></a>
   - [10.6](#modules--prefer-default-export) In modules with a single export, prefer default export over named export.
- eslint: [`import/prefer-default-export`](https://github.com/benmosher/eslint-plugin-import/blob/master/docs/rules/prefer-default-export.md)
+ eslint: [`import/prefer-default-export`](https://github.com/import-js/eslint-plugin-import/blob/master/docs/rules/prefer-default-export.md)
     > Why? To encourage more files that only ever export one thing, which is better for readability and maintainability.
 
     ```javascript
@@ -1401,7 +1401,7 @@ Other Style Guides
 
   <a name="modules--imports-first"></a>
   - [10.7](#modules--imports-first) Put all `import`s above non-import statements.
- eslint: [`import/first`](https://github.com/benmosher/eslint-plugin-import/blob/master/docs/rules/first.md)
+ eslint: [`import/first`](https://github.com/import-js/eslint-plugin-import/blob/master/docs/rules/first.md)
     > Why? Since `import`s are hoisted, keeping them all at the top prevents surprising behavior.
 
     ```javascript
@@ -1440,7 +1440,7 @@ Other Style Guides
 
   <a name="modules--no-webpack-loader-syntax"></a>
   - [10.9](#modules--no-webpack-loader-syntax) Disallow Webpack loader syntax in module import statements.
- eslint: [`import/no-webpack-loader-syntax`](https://github.com/benmosher/eslint-plugin-import/blob/master/docs/rules/no-webpack-loader-syntax.md)
+ eslint: [`import/no-webpack-loader-syntax`](https://github.com/import-js/eslint-plugin-import/blob/master/docs/rules/no-webpack-loader-syntax.md)
     > Why? Since using Webpack syntax in the imports couples the code to a module bundler. Prefer using the loader syntax in `webpack.config.js`.
 
     ```javascript
@@ -1455,7 +1455,7 @@ Other Style Guides
 
   <a name="modules--import-extensions"></a>
   - [10.10](#modules--import-extensions) Do not include JavaScript filename extensions
- eslint: [`import/extensions`](https://github.com/benmosher/eslint-plugin-import/blob/master/docs/rules/extensions.md)
+ eslint: [`import/extensions`](https://github.com/import-js/eslint-plugin-import/blob/master/docs/rules/extensions.md)
     > Why? Including extensions inhibits refactoring, and inappropriately hardcodes implementation details of the module you're importing in every consumer.
 
     ```javascript
diff --git a/packages/eslint-config-airbnb-base/rules/es6.js b/packages/eslint-config-airbnb-base/rules/es6.js
index 79a4cdcc25..5e59cbebf4 100644
--- a/packages/eslint-config-airbnb-base/rules/es6.js
+++ b/packages/eslint-config-airbnb-base/rules/es6.js
@@ -53,7 +53,7 @@ module.exports = {
 
     // disallow importing from the same path more than once
     // https://eslint.org/docs/rules/no-duplicate-imports
-    // replaced by https://github.com/benmosher/eslint-plugin-import/blob/master/docs/rules/no-duplicates.md
+    // replaced by https://github.com/import-js/eslint-plugin-import/blob/master/docs/rules/no-duplicates.md
     'no-duplicate-imports': 'off',
 
     // disallow symbol constructor
diff --git a/packages/eslint-config-airbnb-base/rules/imports.js b/packages/eslint-config-airbnb-base/rules/imports.js
index 70bc95a838..d36e4908fa 100644
--- a/packages/eslint-config-airbnb-base/rules/imports.js
+++ b/packages/eslint-config-airbnb-base/rules/imports.js
@@ -33,40 +33,40 @@ module.exports = {
     // Static analysis:
 
     // ensure imports point to files/modules that can be resolved
-    // https://github.com/benmosher/eslint-plugin-import/blob/master/docs/rules/no-unresolved.md
+    // https://github.com/import-js/eslint-plugin-import/blob/master/docs/rules/no-unresolved.md
     'import/no-unresolved': ['error', { commonjs: true, caseSensitive: true }],
 
     // ensure named imports coupled with named exports
-    // https://github.com/benmosher/eslint-plugin-import/blob/master/docs/rules/named.md#when-not-to-use-it
+    // https://github.com/import-js/eslint-plugin-import/blob/master/docs/rules/named.md#when-not-to-use-it
     'import/named': 'error',
 
     // ensure default import coupled with default export
-    // https://github.com/benmosher/eslint-plugin-import/blob/master/docs/rules/default.md#when-not-to-use-it
+    // https://github.com/import-js/eslint-plugin-import/blob/master/docs/rules/default.md#when-not-to-use-it
     'import/default': 'off',
 
-    // https://github.com/benmosher/eslint-plugin-import/blob/master/docs/rules/namespace.md
+    // https://github.com/import-js/eslint-plugin-import/blob/master/docs/rules/namespace.md
     'import/namespace': 'off',
 
     // Helpful warnings:
 
     // disallow invalid exports, e.g. multiple defaults
-    // https://github.com/benmosher/eslint-plugin-import/blob/master/docs/rules/export.md
+    // https://github.com/import-js/eslint-plugin-import/blob/master/docs/rules/export.md
     'import/export': 'error',
 
     // do not allow a default import name to match a named export
-    // https://github.com/benmosher/eslint-plugin-import/blob/master/docs/rules/no-named-as-default.md
+    // https://github.com/import-js/eslint-plugin-import/blob/master/docs/rules/no-named-as-default.md
     'import/no-named-as-default': 'error',
 
     // warn on accessing default export property names that are also named exports
-    // https://github.com/benmosher/eslint-plugin-import/blob/master/docs/rules/no-named-as-default-member.md
+    // https://github.com/import-js/eslint-plugin-import/blob/master/docs/rules/no-named-as-default-member.md
     'import/no-named-as-default-member': 'error',
 
     // disallow use of jsdoc-marked-deprecated imports
-    // https://github.com/benmosher/eslint-plugin-import/blob/master/docs/rules/no-deprecated.md
+    // https://github.com/import-js/eslint-plugin-import/blob/master/docs/rules/no-deprecated.md
     'import/no-deprecated': 'off',
 
     // Forbid the use of extraneous packages
-    // https://github.com/benmosher/eslint-plugin-import/blob/master/docs/rules/no-extraneous-dependencies.md
+    // https://github.com/import-js/eslint-plugin-import/blob/master/docs/rules/no-extraneous-dependencies.md
     // paths are treated both as absolute paths, and relative to process.cwd()
     'import/no-extraneous-dependencies': ['error', {
       devDependencies: [
@@ -97,46 +97,46 @@ module.exports = {
     }],
 
     // Forbid mutable exports
-    // https://github.com/benmosher/eslint-plugin-import/blob/master/docs/rules/no-mutable-exports.md
+    // https://github.com/import-js/eslint-plugin-import/blob/master/docs/rules/no-mutable-exports.md
     'import/no-mutable-exports': 'error',
 
     // Module systems:
 
     // disallow require()
-    // https://github.com/benmosher/eslint-plugin-import/blob/master/docs/rules/no-commonjs.md
+    // https://github.com/import-js/eslint-plugin-import/blob/master/docs/rules/no-commonjs.md
     'import/no-commonjs': 'off',
 
     // disallow AMD require/define
-    // https://github.com/benmosher/eslint-plugin-import/blob/master/docs/rules/no-amd.md
+    // https://github.com/import-js/eslint-plugin-import/blob/master/docs/rules/no-amd.md
     'import/no-amd': 'error',
 
     // No Node.js builtin modules
-    // https://github.com/benmosher/eslint-plugin-import/blob/master/docs/rules/no-nodejs-modules.md
+    // https://github.com/import-js/eslint-plugin-import/blob/master/docs/rules/no-nodejs-modules.md
     // TODO: enable?
     'import/no-nodejs-modules': 'off',
 
     // Style guide:
 
     // disallow non-import statements appearing before import statements
-    // https://github.com/benmosher/eslint-plugin-import/blob/master/docs/rules/first.md
+    // https://github.com/import-js/eslint-plugin-import/blob/master/docs/rules/first.md
     'import/first': 'error',
 
     // disallow non-import statements appearing before import statements
-    // https://github.com/benmosher/eslint-plugin-import/blob/master/docs/rules/imports-first.md
+    // https://github.com/import-js/eslint-plugin-import/blob/master/docs/rules/imports-first.md
     // deprecated: use `import/first`
     'import/imports-first': 'off',
 
     // disallow duplicate imports
-    // https://github.com/benmosher/eslint-plugin-import/blob/master/docs/rules/no-duplicates.md
+    // https://github.com/import-js/eslint-plugin-import/blob/master/docs/rules/no-duplicates.md
     'import/no-duplicates': 'error',
 
     // disallow namespace imports
     // TODO: enable?
-    // https://github.com/benmosher/eslint-plugin-import/blob/master/docs/rules/no-namespace.md
+    // https://github.com/import-js/eslint-plugin-import/blob/master/docs/rules/no-namespace.md
     'import/no-namespace': 'off',
 
     // Ensure consistent use of file extension within the import path
-    // https://github.com/benmosher/eslint-plugin-import/blob/master/docs/rules/extensions.md
+    // https://github.com/import-js/eslint-plugin-import/blob/master/docs/rules/extensions.md
     'import/extensions': ['error', 'ignorePackages', {
       js: 'never',
       mjs: 'never',
@@ -144,62 +144,62 @@ module.exports = {
     }],
 
     // ensure absolute imports are above relative imports and that unassigned imports are ignored
-    // https://github.com/benmosher/eslint-plugin-import/blob/master/docs/rules/order.md
+    // https://github.com/import-js/eslint-plugin-import/blob/master/docs/rules/order.md
     // TODO: enforce a stricter convention in module import order?
     'import/order': ['error', { groups: [['builtin', 'external', 'internal']] }],
 
     // Require a newline after the last import/require in a group
-    // https://github.com/benmosher/eslint-plugin-import/blob/master/docs/rules/newline-after-import.md
+    // https://github.com/import-js/eslint-plugin-import/blob/master/docs/rules/newline-after-import.md
     'import/newline-after-import': 'error',
 
     // Require modules with a single export to use a default export
-    // https://github.com/benmosher/eslint-plugin-import/blob/master/docs/rules/prefer-default-export.md
+    // https://github.com/import-js/eslint-plugin-import/blob/master/docs/rules/prefer-default-export.md
     'import/prefer-default-export': 'error',
 
     // Restrict which files can be imported in a given folder
-    // https://github.com/benmosher/eslint-plugin-import/blob/master/docs/rules/no-restricted-paths.md
+    // https://github.com/import-js/eslint-plugin-import/blob/master/docs/rules/no-restricted-paths.md
     'import/no-restricted-paths': 'off',
 
     // Forbid modules to have too many dependencies
-    // https://github.com/benmosher/eslint-plugin-import/blob/master/docs/rules/max-dependencies.md
+    // https://github.com/import-js/eslint-plugin-import/blob/master/docs/rules/max-dependencies.md
     'import/max-dependencies': ['off', { max: 10 }],
 
     // Forbid import of modules using absolute paths
-    // https://github.com/benmosher/eslint-plugin-import/blob/master/docs/rules/no-absolute-path.md
+    // https://github.com/import-js/eslint-plugin-import/blob/master/docs/rules/no-absolute-path.md
     'import/no-absolute-path': 'error',
 
     // Forbid require() calls with expressions
-    // https://github.com/benmosher/eslint-plugin-import/blob/master/docs/rules/no-dynamic-require.md
+    // https://github.com/import-js/eslint-plugin-import/blob/master/docs/rules/no-dynamic-require.md
     'import/no-dynamic-require': 'error',
 
     // prevent importing the submodules of other modules
-    // https://github.com/benmosher/eslint-plugin-import/blob/master/docs/rules/no-internal-modules.md
+    // https://github.com/import-js/eslint-plugin-import/blob/master/docs/rules/no-internal-modules.md
     'import/no-internal-modules': ['off', {
       allow: [],
     }],
 
     // Warn if a module could be mistakenly parsed as a script by a consumer
     // leveraging Unambiguous JavaScript Grammar
-    // https://github.com/benmosher/eslint-plugin-import/blob/master/docs/rules/unambiguous.md
+    // https://github.com/import-js/eslint-plugin-import/blob/master/docs/rules/unambiguous.md
     // this should not be enabled until this proposal has at least been *presented* to TC39.
     // At the moment, it's not a thing.
     'import/unambiguous': 'off',
 
     // Forbid Webpack loader syntax in imports
-    // https://github.com/benmosher/eslint-plugin-import/blob/master/docs/rules/no-webpack-loader-syntax.md
+    // https://github.com/import-js/eslint-plugin-import/blob/master/docs/rules/no-webpack-loader-syntax.md
     'import/no-webpack-loader-syntax': 'error',
 
     // Prevent unassigned imports
-    // https://github.com/benmosher/eslint-plugin-import/blob/master/docs/rules/no-unassigned-import.md
+    // https://github.com/import-js/eslint-plugin-import/blob/master/docs/rules/no-unassigned-import.md
     // importing for side effects is perfectly acceptable, if you need side effects.
     'import/no-unassigned-import': 'off',
 
     // Prevent importing the default as if it were named
-    // https://github.com/benmosher/eslint-plugin-import/blob/master/docs/rules/no-named-default.md
+    // https://github.com/import-js/eslint-plugin-import/blob/master/docs/rules/no-named-default.md
     'import/no-named-default': 'error',
 
     // Reports if a module's default export is unnamed
-    // https://github.com/benmosher/eslint-plugin-import/blob/d9b712ac7fd1fddc391f7b234827925c160d956f/docs/rules/no-anonymous-default-export.md
+    // https://github.com/import-js/eslint-plugin-import/blob/d9b712ac7fd1fddc391f7b234827925c160d956f/docs/rules/no-anonymous-default-export.md
     'import/no-anonymous-default-export': ['off', {
       allowArray: false,
       allowArrowFunction: false,
@@ -210,49 +210,49 @@ module.exports = {
     }],
 
     // This rule enforces that all exports are declared at the bottom of the file.
-    // https://github.com/benmosher/eslint-plugin-import/blob/98acd6afd04dcb6920b81330114e146dc8532ea4/docs/rules/exports-last.md
+    // https://github.com/import-js/eslint-plugin-import/blob/98acd6afd04dcb6920b81330114e146dc8532ea4/docs/rules/exports-last.md
     // TODO: enable?
     'import/exports-last': 'off',
 
     // Reports when named exports are not grouped together in a single export declaration
     // or when multiple assignments to CommonJS module.exports or exports object are present
     // in a single file.
-    // https://github.com/benmosher/eslint-plugin-import/blob/44a038c06487964394b1e15b64f3bd34e5d40cde/docs/rules/group-exports.md
+    // https://github.com/import-js/eslint-plugin-import/blob/44a038c06487964394b1e15b64f3bd34e5d40cde/docs/rules/group-exports.md
     'import/group-exports': 'off',
 
     // forbid default exports. this is a terrible rule, do not use it.
-    // https://github.com/benmosher/eslint-plugin-import/blob/44a038c06487964394b1e15b64f3bd34e5d40cde/docs/rules/no-default-export.md
+    // https://github.com/import-js/eslint-plugin-import/blob/44a038c06487964394b1e15b64f3bd34e5d40cde/docs/rules/no-default-export.md
     'import/no-default-export': 'off',
 
     // Prohibit named exports. this is a terrible rule, do not use it.
-    // https://github.com/benmosher/eslint-plugin-import/blob/1ec80fa35fa1819e2d35a70e68fb6a149fb57c5e/docs/rules/no-named-export.md
+    // https://github.com/import-js/eslint-plugin-import/blob/1ec80fa35fa1819e2d35a70e68fb6a149fb57c5e/docs/rules/no-named-export.md
     'import/no-named-export': 'off',
 
     // Forbid a module from importing itself
-    // https://github.com/benmosher/eslint-plugin-import/blob/44a038c06487964394b1e15b64f3bd34e5d40cde/docs/rules/no-self-import.md
+    // https://github.com/import-js/eslint-plugin-import/blob/44a038c06487964394b1e15b64f3bd34e5d40cde/docs/rules/no-self-import.md
     'import/no-self-import': 'error',
 
     // Forbid cyclical dependencies between modules
-    // https://github.com/benmosher/eslint-plugin-import/blob/d81f48a2506182738409805f5272eff4d77c9348/docs/rules/no-cycle.md
+    // https://github.com/import-js/eslint-plugin-import/blob/d81f48a2506182738409805f5272eff4d77c9348/docs/rules/no-cycle.md
     'import/no-cycle': ['error', { maxDepth: '∞' }],
 
     // Ensures that there are no useless path segments
-    // https://github.com/benmosher/eslint-plugin-import/blob/ebafcbf59ec9f653b2ac2a0156ca3bcba0a7cf57/docs/rules/no-useless-path-segments.md
+    // https://github.com/import-js/eslint-plugin-import/blob/ebafcbf59ec9f653b2ac2a0156ca3bcba0a7cf57/docs/rules/no-useless-path-segments.md
     'import/no-useless-path-segments': ['error', { commonjs: true }],
 
     // dynamic imports require a leading comment with a webpackChunkName
-    // https://github.com/benmosher/eslint-plugin-import/blob/ebafcbf59ec9f653b2ac2a0156ca3bcba0a7cf57/docs/rules/dynamic-import-chunkname.md
+    // https://github.com/import-js/eslint-plugin-import/blob/ebafcbf59ec9f653b2ac2a0156ca3bcba0a7cf57/docs/rules/dynamic-import-chunkname.md
     'import/dynamic-import-chunkname': ['off', {
       importFunctions: [],
       webpackChunknameFormat: '[0-9a-zA-Z-_/.]+',
     }],
 
     // Use this rule to prevent imports to folders in relative parent paths.
-    // https://github.com/benmosher/eslint-plugin-import/blob/c34f14f67f077acd5a61b3da9c0b0de298d20059/docs/rules/no-relative-parent-imports.md
+    // https://github.com/import-js/eslint-plugin-import/blob/c34f14f67f077acd5a61b3da9c0b0de298d20059/docs/rules/no-relative-parent-imports.md
     'import/no-relative-parent-imports': 'off',
 
     // Reports modules without any exports, or with unused exports
-    // https://github.com/benmosher/eslint-plugin-import/blob/f63dd261809de6883b13b6b5b960e6d7f42a7813/docs/rules/no-unused-modules.md
+    // https://github.com/import-js/eslint-plugin-import/blob/f63dd261809de6883b13b6b5b960e6d7f42a7813/docs/rules/no-unused-modules.md
     // TODO: enable once it supports CJS
     'import/no-unused-modules': ['off', {
       ignoreExports: [],
@@ -261,13 +261,13 @@ module.exports = {
     }],
 
     // Reports the use of import declarations with CommonJS exports in any module except for the main module.
-    // https://github.com/benmosher/eslint-plugin-import/blob/1012eb951767279ce3b540a4ec4f29236104bb5b/docs/rules/no-import-module-exports.md
+    // https://github.com/import-js/eslint-plugin-import/blob/1012eb951767279ce3b540a4ec4f29236104bb5b/docs/rules/no-import-module-exports.md
     'import/no-import-module-exports': ['error', {
       exceptions: [],
     }],
 
     // Use this rule to prevent importing packages through relative paths.
-    // https://github.com/benmosher/eslint-plugin-import/blob/1012eb951767279ce3b540a4ec4f29236104bb5b/docs/rules/no-relative-packages.md
+    // https://github.com/import-js/eslint-plugin-import/blob/1012eb951767279ce3b540a4ec4f29236104bb5b/docs/rules/no-relative-packages.md
     'import/no-relative-packages': 'error',
 
     // enforce a consistent style for type specifiers (inline or top-level)
diff --git a/packages/eslint-config-airbnb/rules/react-a11y.js b/packages/eslint-config-airbnb/rules/react-a11y.js
index 713a997b28..643cf64407 100644
--- a/packages/eslint-config-airbnb/rules/react-a11y.js
+++ b/packages/eslint-config-airbnb/rules/react-a11y.js
@@ -12,12 +12,12 @@ module.exports = {
 
   rules: {
     // ensure emoji are accessible
-    // https://github.com/evcohen/eslint-plugin-jsx-a11y/blob/master/docs/rules/accessible-emoji.md
+    // https://github.com/jsx-eslint/eslint-plugin-jsx-a11y/blob/master/docs/rules/accessible-emoji.md
     // disabled; rule is deprecated
     'jsx-a11y/accessible-emoji': 'off',
 
     // Enforce that all elements that require alternative text have meaningful information
-    // https://github.com/evcohen/eslint-plugin-jsx-a11y/blob/master/docs/rules/alt-text.md
+    // https://github.com/jsx-eslint/eslint-plugin-jsx-a11y/blob/master/docs/rules/alt-text.md
     'jsx-a11y/alt-text': ['error', {
       elements: ['img', 'object', 'area', 'input[type="image"]'],
       img: [],
@@ -27,11 +27,11 @@ module.exports = {
     }],
 
     // Enforce that anchors have content
-    // https://github.com/evcohen/eslint-plugin-jsx-a11y/blob/master/docs/rules/anchor-has-content.md
+    // https://github.com/jsx-eslint/eslint-plugin-jsx-a11y/blob/master/docs/rules/anchor-has-content.md
     'jsx-a11y/anchor-has-content': ['error', { components: [] }],
 
     // ensure <a> tags are valid
-    // https://github.com/evcohen/eslint-plugin-jsx-a11y/blob/0745af376cdc8686d85a361ce36952b1fb1ccf6e/docs/rules/anchor-is-valid.md
+    // https://github.com/jsx-eslint/eslint-plugin-jsx-a11y/blob/0745af376cdc8686d85a361ce36952b1fb1ccf6e/docs/rules/anchor-is-valid.md
     'jsx-a11y/anchor-is-valid': ['error', {
       components: ['Link'],
       specialLink: ['to'],
@@ -39,24 +39,24 @@ module.exports = {
     }],
 
     // elements with aria-activedescendant must be tabbable
-    // https://github.com/evcohen/eslint-plugin-jsx-a11y/blob/master/docs/rules/aria-activedescendant-has-tabindex.md
+    // https://github.com/jsx-eslint/eslint-plugin-jsx-a11y/blob/master/docs/rules/aria-activedescendant-has-tabindex.md
     'jsx-a11y/aria-activedescendant-has-tabindex': 'error',
 
     // Enforce all aria-* props are valid.
-    // https://github.com/evcohen/eslint-plugin-jsx-a11y/blob/master/docs/rules/aria-props.md
+    // https://github.com/jsx-eslint/eslint-plugin-jsx-a11y/blob/master/docs/rules/aria-props.md
     'jsx-a11y/aria-props': 'error',
 
     // Enforce ARIA state and property values are valid.
-    // https://github.com/evcohen/eslint-plugin-jsx-a11y/blob/master/docs/rules/aria-proptypes.md
+    // https://github.com/jsx-eslint/eslint-plugin-jsx-a11y/blob/master/docs/rules/aria-proptypes.md
     'jsx-a11y/aria-proptypes': 'error',
 
     // Require ARIA roles to be valid and non-abstract
-    // https://github.com/evcohen/eslint-plugin-jsx-a11y/blob/master/docs/rules/aria-role.md
+    // https://github.com/jsx-eslint/eslint-plugin-jsx-a11y/blob/master/docs/rules/aria-role.md
     'jsx-a11y/aria-role': ['error', { ignoreNonDOM: false }],
 
     // Enforce that elements that do not support ARIA roles, states, and
     // properties do not have those attributes.
-    // https://github.com/evcohen/eslint-plugin-jsx-a11y/blob/master/docs/rules/aria-unsupported-elements.md
+    // https://github.com/jsx-eslint/eslint-plugin-jsx-a11y/blob/master/docs/rules/aria-unsupported-elements.md
     'jsx-a11y/aria-unsupported-elements': 'error',
 
     // Ensure the autocomplete attribute is correct and suitable for the form field it is used with
@@ -66,11 +66,11 @@ module.exports = {
     }],
 
     // require onClick be accompanied by onKeyUp/onKeyDown/onKeyPress
-    // https://github.com/evcohen/eslint-plugin-jsx-a11y/blob/master/docs/rules/click-events-have-key-events.md
+    // https://github.com/jsx-eslint/eslint-plugin-jsx-a11y/blob/master/docs/rules/click-events-have-key-events.md
     'jsx-a11y/click-events-have-key-events': 'error',
 
     // Enforce that a control (an interactive element) has a text label.
-    // https://github.com/evcohen/eslint-plugin-jsx-a11y/blob/master/docs/rules/control-has-associated-label.md
+    // https://github.com/jsx-eslint/eslint-plugin-jsx-a11y/blob/master/docs/rules/control-has-associated-label.md
     'jsx-a11y/control-has-associated-label': ['error', {
       labelAttributes: ['label'],
       controlComponents: [],
@@ -99,27 +99,27 @@ module.exports = {
     }],
 
     // ensure <hX> tags have content and are not aria-hidden
-    // https://github.com/evcohen/eslint-plugin-jsx-a11y/blob/master/docs/rules/heading-has-content.md
+    // https://github.com/jsx-eslint/eslint-plugin-jsx-a11y/blob/master/docs/rules/heading-has-content.md
     'jsx-a11y/heading-has-content': ['error', { components: [''] }],
 
     // require HTML elements to have a "lang" prop
-    // https://github.com/evcohen/eslint-plugin-jsx-a11y/blob/master/docs/rules/html-has-lang.md
+    // https://github.com/jsx-eslint/eslint-plugin-jsx-a11y/blob/master/docs/rules/html-has-lang.md
     'jsx-a11y/html-has-lang': 'error',
 
     // ensure iframe elements have a unique title
-    // https://github.com/evcohen/eslint-plugin-jsx-a11y/blob/master/docs/rules/iframe-has-title.md
+    // https://github.com/jsx-eslint/eslint-plugin-jsx-a11y/blob/master/docs/rules/iframe-has-title.md
     'jsx-a11y/iframe-has-title': 'error',
 
     // Prevent img alt text from containing redundant words like "image", "picture", or "photo"
-    // https://github.com/evcohen/eslint-plugin-jsx-a11y/blob/master/docs/rules/img-redundant-alt.md
+    // https://github.com/jsx-eslint/eslint-plugin-jsx-a11y/blob/master/docs/rules/img-redundant-alt.md
     'jsx-a11y/img-redundant-alt': 'error',
 
     // Elements with an interactive role and interaction handlers must be focusable
-    // https://github.com/evcohen/eslint-plugin-jsx-a11y/blob/master/docs/rules/interactive-supports-focus.md
+    // https://github.com/jsx-eslint/eslint-plugin-jsx-a11y/blob/master/docs/rules/interactive-supports-focus.md
     'jsx-a11y/interactive-supports-focus': 'error',
 
     // Enforce that a label tag has a text label and an associated control.
-    // https://github.com/evcohen/eslint-plugin-jsx-a11y/blob/b800f40a2a69ad48015ae9226fbe879f946757ed/docs/rules/label-has-associated-control.md
+    // https://github.com/jsx-eslint/eslint-plugin-jsx-a11y/blob/b800f40a2a69ad48015ae9226fbe879f946757ed/docs/rules/label-has-associated-control.md
     'jsx-a11y/label-has-associated-control': ['error', {
       labelComponents: [],
       labelAttributes: [],
@@ -129,11 +129,11 @@ module.exports = {
     }],
 
     // require HTML element's lang prop to be valid
-    // https://github.com/evcohen/eslint-plugin-jsx-a11y/blob/master/docs/rules/lang.md
+    // https://github.com/jsx-eslint/eslint-plugin-jsx-a11y/blob/master/docs/rules/lang.md
     'jsx-a11y/lang': 'error',
 
     // media elements must have captions
-    // https://github.com/evcohen/eslint-plugin-jsx-a11y/blob/master/docs/rules/media-has-caption.md
+    // https://github.com/jsx-eslint/eslint-plugin-jsx-a11y/blob/master/docs/rules/media-has-caption.md
     'jsx-a11y/media-has-caption': ['error', {
       audio: [],
       video: [],
@@ -141,31 +141,31 @@ module.exports = {
     }],
 
     // require that mouseover/out come with focus/blur, for keyboard-only users
-    // https://github.com/evcohen/eslint-plugin-jsx-a11y/blob/master/docs/rules/mouse-events-have-key-events.md
+    // https://github.com/jsx-eslint/eslint-plugin-jsx-a11y/blob/master/docs/rules/mouse-events-have-key-events.md
     'jsx-a11y/mouse-events-have-key-events': 'error',
 
     // Prevent use of `accessKey`
-    // https://github.com/evcohen/eslint-plugin-jsx-a11y/blob/master/docs/rules/no-access-key.md
+    // https://github.com/jsx-eslint/eslint-plugin-jsx-a11y/blob/master/docs/rules/no-access-key.md
     'jsx-a11y/no-access-key': 'error',
 
     // prohibit autoFocus prop
-    // https://github.com/evcohen/eslint-plugin-jsx-a11y/blob/master/docs/rules/no-autofocus.md
+    // https://github.com/jsx-eslint/eslint-plugin-jsx-a11y/blob/master/docs/rules/no-autofocus.md
     'jsx-a11y/no-autofocus': ['error', { ignoreNonDOM: true }],
 
     // prevent distracting elements, like <marquee> and <blink>
-    // https://github.com/evcohen/eslint-plugin-jsx-a11y/blob/master/docs/rules/no-distracting-elements.md
+    // https://github.com/jsx-eslint/eslint-plugin-jsx-a11y/blob/master/docs/rules/no-distracting-elements.md
     'jsx-a11y/no-distracting-elements': ['error', {
       elements: ['marquee', 'blink'],
     }],
 
     // WAI-ARIA roles should not be used to convert an interactive element to non-interactive
-    // https://github.com/evcohen/eslint-plugin-jsx-a11y/blob/master/docs/rules/no-interactive-element-to-noninteractive-role.md
+    // https://github.com/jsx-eslint/eslint-plugin-jsx-a11y/blob/master/docs/rules/no-interactive-element-to-noninteractive-role.md
     'jsx-a11y/no-interactive-element-to-noninteractive-role': ['error', {
       tr: ['none', 'presentation'],
     }],
 
     // A non-interactive element does not support event handlers (mouse and key handlers)
-    // https://github.com/evcohen/eslint-plugin-jsx-a11y/blob/master/docs/rules/no-noninteractive-element-interactions.md
+    // https://github.com/jsx-eslint/eslint-plugin-jsx-a11y/blob/master/docs/rules/no-noninteractive-element-interactions.md
     'jsx-a11y/no-noninteractive-element-interactions': ['error', {
       handlers: [
         'onClick',
@@ -178,7 +178,7 @@ module.exports = {
     }],
 
     // WAI-ARIA roles should not be used to convert a non-interactive element to interactive
-    // https://github.com/evcohen/eslint-plugin-jsx-a11y/blob/master/docs/rules/no-noninteractive-element-to-interactive-role.md
+    // https://github.com/jsx-eslint/eslint-plugin-jsx-a11y/blob/master/docs/rules/no-noninteractive-element-to-interactive-role.md
     'jsx-a11y/no-noninteractive-element-to-interactive-role': ['error', {
       ul: ['listbox', 'menu', 'menubar', 'radiogroup', 'tablist', 'tree', 'treegrid'],
       ol: ['listbox', 'menu', 'menubar', 'radiogroup', 'tablist', 'tree', 'treegrid'],
@@ -188,22 +188,22 @@ module.exports = {
     }],
 
     // Tab key navigation should be limited to elements on the page that can be interacted with.
-    // https://github.com/evcohen/eslint-plugin-jsx-a11y/blob/master/docs/rules/no-noninteractive-tabindex.md
+    // https://github.com/jsx-eslint/eslint-plugin-jsx-a11y/blob/master/docs/rules/no-noninteractive-tabindex.md
     'jsx-a11y/no-noninteractive-tabindex': ['error', {
       tags: [],
       roles: ['tabpanel'],
     }],
 
     // require onBlur instead of onChange
-    // https://github.com/evcohen/eslint-plugin-jsx-a11y/blob/master/docs/rules/no-onchange.md
+    // https://github.com/jsx-eslint/eslint-plugin-jsx-a11y/blob/master/docs/rules/no-onchange.md
     'jsx-a11y/no-onchange': 'off',
 
     // ensure HTML elements do not specify redundant ARIA roles
-    // https://github.com/evcohen/eslint-plugin-jsx-a11y/blob/master/docs/rules/no-redundant-roles.md
+    // https://github.com/jsx-eslint/eslint-plugin-jsx-a11y/blob/master/docs/rules/no-redundant-roles.md
     'jsx-a11y/no-redundant-roles': 'error',
 
     // Enforce that DOM elements without semantic behavior not have interaction handlers
-    // https://github.com/evcohen/eslint-plugin-jsx-a11y/blob/master/docs/rules/no-static-element-interactions.md
+    // https://github.com/jsx-eslint/eslint-plugin-jsx-a11y/blob/master/docs/rules/no-static-element-interactions.md
     'jsx-a11y/no-static-element-interactions': ['error', {
       handlers: [
         'onClick',
@@ -217,20 +217,20 @@ module.exports = {
 
     // Enforce that elements with ARIA roles must have all required attributes
     // for that role.
-    // https://github.com/evcohen/eslint-plugin-jsx-a11y/blob/master/docs/rules/role-has-required-aria-props.md
+    // https://github.com/jsx-eslint/eslint-plugin-jsx-a11y/blob/master/docs/rules/role-has-required-aria-props.md
     'jsx-a11y/role-has-required-aria-props': 'error',
 
     // Enforce that elements with explicit or implicit roles defined contain
     // only aria-* properties supported by that role.
-    // https://github.com/evcohen/eslint-plugin-jsx-a11y/blob/master/docs/rules/role-supports-aria-props.md
+    // https://github.com/jsx-eslint/eslint-plugin-jsx-a11y/blob/master/docs/rules/role-supports-aria-props.md
     'jsx-a11y/role-supports-aria-props': 'error',
 
     // only allow <th> to have the "scope" attr
-    // https://github.com/evcohen/eslint-plugin-jsx-a11y/blob/master/docs/rules/scope.md
+    // https://github.com/jsx-eslint/eslint-plugin-jsx-a11y/blob/master/docs/rules/scope.md
     'jsx-a11y/scope': 'error',
 
     // Enforce tabIndex value is not greater than zero.
-    // https://github.com/evcohen/eslint-plugin-jsx-a11y/blob/master/docs/rules/tabindex-no-positive.md
+    // https://github.com/jsx-eslint/eslint-plugin-jsx-a11y/blob/master/docs/rules/tabindex-no-positive.md
     'jsx-a11y/tabindex-no-positive': 'error',
 
     // ----------------------------------------------------
@@ -238,7 +238,7 @@ module.exports = {
     // ----------------------------------------------------
 
     // require that JSX labels use "htmlFor"
-    // https://github.com/evcohen/eslint-plugin-jsx-a11y/blob/master/docs/rules/label-has-for.md
+    // https://github.com/jsx-eslint/eslint-plugin-jsx-a11y/blob/master/docs/rules/label-has-for.md
     // deprecated: replaced by `label-has-associated-control` rule
     'jsx-a11y/label-has-for': ['off', {
       components: [],
diff --git a/react/README.md b/react/README.md
index e7679d26da..a590a19672 100644
--- a/react/README.md
+++ b/react/README.md
@@ -25,14 +25,14 @@ This style guide is mostly based on the standards that are currently prevalent i
 ## Basic Rules
 
   - Only include one React component per file.
-    - However, multiple [Stateless, or Pure, Components](https://facebook.github.io/react/docs/reusable-components.html#stateless-functions) are allowed per file. eslint: [`react/no-multi-comp`](https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/no-multi-comp.md#ignorestateless).
+    - However, multiple [Stateless, or Pure, Components](https://facebook.github.io/react/docs/reusable-components.html#stateless-functions) are allowed per file. eslint: [`react/no-multi-comp`](https://github.com/jsx-eslint/eslint-plugin-react/blob/master/docs/rules/no-multi-comp.md#ignorestateless).
   - Always use JSX syntax.
   - Do not use `React.createElement` unless you’re initializing the app from a file that is not JSX.
-  - [`react/forbid-prop-types`](https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/forbid-prop-types.md) will allow `arrays` and `objects` only if it is explicitly noted what `array` and `object` contains, using `arrayOf`, `objectOf`, or `shape`.
+  - [`react/forbid-prop-types`](https://github.com/jsx-eslint/eslint-plugin-react/blob/master/docs/rules/forbid-prop-types.md) will allow `arrays` and `objects` only if it is explicitly noted what `array` and `object` contains, using `arrayOf`, `objectOf`, or `shape`.
 
 ## Class vs `React.createClass` vs stateless
 
-  - If you have internal state and/or refs, prefer `class extends React.Component` over `React.createClass`. eslint: [`react/prefer-es6-class`](https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/prefer-es6-class.md) [`react/prefer-stateless-function`](https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/prefer-stateless-function.md)
+  - If you have internal state and/or refs, prefer `class extends React.Component` over `React.createClass`. eslint: [`react/prefer-es6-class`](https://github.com/jsx-eslint/eslint-plugin-react/blob/master/docs/rules/prefer-es6-class.md) [`react/prefer-stateless-function`](https://github.com/jsx-eslint/eslint-plugin-react/blob/master/docs/rules/prefer-stateless-function.md)
 
     ```jsx
     // bad
@@ -81,9 +81,9 @@ This style guide is mostly based on the standards that are currently prevalent i
 
 ## Naming
 
-  - **Extensions**: Use `.jsx` extension for React components. eslint: [`react/jsx-filename-extension`](https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/jsx-filename-extension.md)
+  - **Extensions**: Use `.jsx` extension for React components. eslint: [`react/jsx-filename-extension`](https://github.com/jsx-eslint/eslint-plugin-react/blob/master/docs/rules/jsx-filename-extension.md)
   - **Filename**: Use PascalCase for filenames. E.g., `ReservationCard.jsx`.
-  - **Reference Naming**: Use PascalCase for React components and camelCase for their instances. eslint: [`react/jsx-pascal-case`](https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/jsx-pascal-case.md)
+  - **Reference Naming**: Use PascalCase for React components and camelCase for their instances. eslint: [`react/jsx-pascal-case`](https://github.com/jsx-eslint/eslint-plugin-react/blob/master/docs/rules/jsx-pascal-case.md)
 
     ```jsx
     // bad
@@ -172,7 +172,7 @@ This style guide is mostly based on the standards that are currently prevalent i
 
 ## Alignment
 
-  - Follow these alignment styles for JSX syntax. eslint: [`react/jsx-closing-bracket-location`](https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/jsx-closing-bracket-location.md) [`react/jsx-closing-tag-location`](https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/jsx-closing-tag-location.md)
+  - Follow these alignment styles for JSX syntax. eslint: [`react/jsx-closing-bracket-location`](https://github.com/jsx-eslint/eslint-plugin-react/blob/master/docs/rules/jsx-closing-bracket-location.md) [`react/jsx-closing-tag-location`](https://github.com/jsx-eslint/eslint-plugin-react/blob/master/docs/rules/jsx-closing-tag-location.md)
 
     ```jsx
     // bad
@@ -259,7 +259,7 @@ This style guide is mostly based on the standards that are currently prevalent i
 
 ## Spacing
 
-  - Always include a single space in your self-closing tag. eslint: [`no-multi-spaces`](https://eslint.org/docs/rules/no-multi-spaces), [`react/jsx-tag-spacing`](https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/jsx-tag-spacing.md)
+  - Always include a single space in your self-closing tag. eslint: [`no-multi-spaces`](https://eslint.org/docs/rules/no-multi-spaces), [`react/jsx-tag-spacing`](https://github.com/jsx-eslint/eslint-plugin-react/blob/master/docs/rules/jsx-tag-spacing.md)
 
     ```jsx
     // bad
@@ -276,7 +276,7 @@ This style guide is mostly based on the standards that are currently prevalent i
     <Foo />
     ```
 
-  - Do not pad JSX curly braces with spaces. eslint: [`react/jsx-curly-spacing`](https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/jsx-curly-spacing.md)
+  - Do not pad JSX curly braces with spaces. eslint: [`react/jsx-curly-spacing`](https://github.com/jsx-eslint/eslint-plugin-react/blob/master/docs/rules/jsx-curly-spacing.md)
 
     ```jsx
     // bad
@@ -305,7 +305,7 @@ This style guide is mostly based on the standards that are currently prevalent i
     />
     ```
 
-  - Omit the value of the prop when it is explicitly `true`. eslint: [`react/jsx-boolean-value`](https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/jsx-boolean-value.md)
+  - Omit the value of the prop when it is explicitly `true`. eslint: [`react/jsx-boolean-value`](https://github.com/jsx-eslint/eslint-plugin-react/blob/master/docs/rules/jsx-boolean-value.md)
 
     ```jsx
     // bad
@@ -322,7 +322,7 @@ This style guide is mostly based on the standards that are currently prevalent i
     <Foo hidden />
     ```
 
-  - Always include an `alt` prop on `<img>` tags. If the image is presentational, `alt` can be an empty string or the `<img>` must have `role="presentation"`. eslint: [`jsx-a11y/alt-text`](https://github.com/evcohen/eslint-plugin-jsx-a11y/blob/master/docs/rules/alt-text.md)
+  - Always include an `alt` prop on `<img>` tags. If the image is presentational, `alt` can be an empty string or the `<img>` must have `role="presentation"`. eslint: [`jsx-a11y/alt-text`](https://github.com/jsx-eslint/eslint-plugin-jsx-a11y/blob/master/docs/rules/alt-text.md)
 
     ```jsx
     // bad
@@ -338,7 +338,7 @@ This style guide is mostly based on the standards that are currently prevalent i
     <img src="hello.jpg" role="presentation" />
     ```
 
-  - Do not use words like "image", "photo", or "picture" in `<img>` `alt` props. eslint: [`jsx-a11y/img-redundant-alt`](https://github.com/evcohen/eslint-plugin-jsx-a11y/blob/master/docs/rules/img-redundant-alt.md)
+  - Do not use words like "image", "photo", or "picture" in `<img>` `alt` props. eslint: [`jsx-a11y/img-redundant-alt`](https://github.com/jsx-eslint/eslint-plugin-jsx-a11y/blob/master/docs/rules/img-redundant-alt.md)
 
     > Why? Screenreaders already announce `img` elements as images, so there is no need to include this information in the alt text.
 
@@ -350,7 +350,7 @@ This style guide is mostly based on the standards that are currently prevalent i
     <img src="hello.jpg" alt="Me waving hello" />
     ```
 
-  - Use only valid, non-abstract [ARIA roles](https://www.w3.org/TR/wai-aria/#usage_intro). eslint: [`jsx-a11y/aria-role`](https://github.com/evcohen/eslint-plugin-jsx-a11y/blob/master/docs/rules/aria-role.md)
+  - Use only valid, non-abstract [ARIA roles](https://www.w3.org/TR/wai-aria/#usage_intro). eslint: [`jsx-a11y/aria-role`](https://github.com/jsx-eslint/eslint-plugin-jsx-a11y/blob/master/docs/rules/aria-role.md)
 
     ```jsx
     // bad - not an ARIA role
@@ -363,7 +363,7 @@ This style guide is mostly based on the standards that are currently prevalent i
     <div role="button" />
     ```
 
-  - Do not use `accessKey` on elements. eslint: [`jsx-a11y/no-access-key`](https://github.com/evcohen/eslint-plugin-jsx-a11y/blob/master/docs/rules/no-access-key.md)
+  - Do not use `accessKey` on elements. eslint: [`jsx-a11y/no-access-key`](https://github.com/jsx-eslint/eslint-plugin-jsx-a11y/blob/master/docs/rules/no-access-key.md)
 
   > Why? Inconsistencies between keyboard shortcuts and keyboard commands used by people using screenreaders and keyboards complicate accessibility.
 
@@ -375,7 +375,7 @@ This style guide is mostly based on the standards that are currently prevalent i
   <div />
   ```
 
-  - Avoid using an array index as `key` prop, prefer a stable ID. eslint: [`react/no-array-index-key`](https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/no-array-index-key.md)
+  - Avoid using an array index as `key` prop, prefer a stable ID. eslint: [`react/no-array-index-key`](https://github.com/jsx-eslint/eslint-plugin-react/blob/master/docs/rules/no-array-index-key.md)
 
 > Why? Not using a stable ID [is an anti-pattern](https://medium.com/@robinpokorny/index-as-a-key-is-an-anti-pattern-e0349aece318) because it can negatively impact performance and cause issues with component state.
 
@@ -483,7 +483,7 @@ We don’t recommend using indexes for keys if the order of items may change.
 
 ## Refs
 
-  - Always use ref callbacks. eslint: [`react/no-string-refs`](https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/no-string-refs.md)
+  - Always use ref callbacks. eslint: [`react/no-string-refs`](https://github.com/jsx-eslint/eslint-plugin-react/blob/master/docs/rules/no-string-refs.md)
 
     ```jsx
     // bad
@@ -499,7 +499,7 @@ We don’t recommend using indexes for keys if the order of items may change.
 
 ## Parentheses
 
-  - Wrap JSX tags in parentheses when they span more than one line. eslint: [`react/jsx-wrap-multilines`](https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/jsx-wrap-multilines.md)
+  - Wrap JSX tags in parentheses when they span more than one line. eslint: [`react/jsx-wrap-multilines`](https://github.com/jsx-eslint/eslint-plugin-react/blob/master/docs/rules/jsx-wrap-multilines.md)
 
     ```jsx
     // bad
@@ -527,7 +527,7 @@ We don’t recommend using indexes for keys if the order of items may change.
 
 ## Tags
 
-  - Always self-close tags that have no children. eslint: [`react/self-closing-comp`](https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/self-closing-comp.md)
+  - Always self-close tags that have no children. eslint: [`react/self-closing-comp`](https://github.com/jsx-eslint/eslint-plugin-react/blob/master/docs/rules/self-closing-comp.md)
 
     ```jsx
     // bad
@@ -537,7 +537,7 @@ We don’t recommend using indexes for keys if the order of items may change.
     <Foo variant="stuff" />
     ```
 
-  - If your component has multiline properties, close its tag on a new line. eslint: [`react/jsx-closing-bracket-location`](https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/jsx-closing-bracket-location.md)
+  - If your component has multiline properties, close its tag on a new line. eslint: [`react/jsx-closing-bracket-location`](https://github.com/jsx-eslint/eslint-plugin-react/blob/master/docs/rules/jsx-closing-bracket-location.md)
 
     ```jsx
     // bad
@@ -571,7 +571,7 @@ We don’t recommend using indexes for keys if the order of items may change.
     }
     ```
 
-  - Bind event handlers for the render method in the constructor. eslint: [`react/jsx-no-bind`](https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/jsx-no-bind.md)
+  - Bind event handlers for the render method in the constructor. eslint: [`react/jsx-no-bind`](https://github.com/jsx-eslint/eslint-plugin-react/blob/master/docs/rules/jsx-no-bind.md)
 
     > Why? A bind call in the render path creates a brand new function on every single render. Do not use arrow functions in class fields, because it makes them [challenging to test and debug, and can negatively impact performance](https://medium.com/@charpeni/arrow-functions-in-class-properties-might-not-be-as-great-as-we-think-3b3551c440b1), and because conceptually, class fields are for data, not logic.
 
@@ -639,7 +639,7 @@ We don’t recommend using indexes for keys if the order of items may change.
     }
     ```
 
-  - Be sure to return a value in your `render` methods. eslint: [`react/require-render-return`](https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/require-render-return.md)
+  - Be sure to return a value in your `render` methods. eslint: [`react/require-render-return`](https://github.com/jsx-eslint/eslint-plugin-react/blob/master/docs/rules/require-render-return.md)
 
     ```jsx
     // bad
@@ -705,7 +705,7 @@ We don’t recommend using indexes for keys if the order of items may change.
     export default Link;
     ```
 
-  - Ordering for `React.createClass`: eslint: [`react/sort-comp`](https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/sort-comp.md)
+  - Ordering for `React.createClass`: eslint: [`react/sort-comp`](https://github.com/jsx-eslint/eslint-plugin-react/blob/master/docs/rules/sort-comp.md)
 
   1. `displayName`
   1. `propTypes`
@@ -731,7 +731,7 @@ We don’t recommend using indexes for keys if the order of items may change.
 
 ## `isMounted`
 
-  - Do not use `isMounted`. eslint: [`react/no-is-mounted`](https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/no-is-mounted.md)
+  - Do not use `isMounted`. eslint: [`react/no-is-mounted`](https://github.com/jsx-eslint/eslint-plugin-react/blob/master/docs/rules/no-is-mounted.md)
 
   > Why? [`isMounted` is an anti-pattern][anti-pattern], is not available when using ES6 classes, and is on its way to being officially deprecated.
 

From 240a3789db57dd285545e51d7484fcbc3cc2a3e1 Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Mon, 15 May 2023 10:19:05 -0700
Subject: [PATCH 1559/1591] [Dev Deps] update `markdownlint`,
 `markdownlint-cli`

---
 package.json | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/package.json b/package.json
index 04e7d56121..0fd14e961b 100644
--- a/package.json
+++ b/package.json
@@ -40,7 +40,7 @@
   },
   "homepage": "https://github.com/airbnb/javascript",
   "devDependencies": {
-    "markdownlint": "^0.26.2",
-    "markdownlint-cli": "^0.32.2"
+    "markdownlint": "^0.28.2",
+    "markdownlint-cli": "^0.34.0"
   }
 }

From 95b6b43d634814c3ea81a350a9ab9c0b7d12457e Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Mon, 15 May 2023 10:20:15 -0700
Subject: [PATCH 1560/1591] [eslint-config] [*] [dev deps] update
 `@babel/runtime`

---
 packages/eslint-config-airbnb-base/package.json | 2 +-
 packages/eslint-config-airbnb/package.json      | 2 +-
 2 files changed, 2 insertions(+), 2 deletions(-)

diff --git a/packages/eslint-config-airbnb-base/package.json b/packages/eslint-config-airbnb-base/package.json
index 95e6dec90a..8784c6f15f 100644
--- a/packages/eslint-config-airbnb-base/package.json
+++ b/packages/eslint-config-airbnb-base/package.json
@@ -68,7 +68,7 @@
   },
   "homepage": "https://github.com/airbnb/javascript",
   "devDependencies": {
-    "@babel/runtime": "^7.20.13",
+    "@babel/runtime": "^7.21.5",
     "babel-preset-airbnb": "^4.5.0",
     "babel-tape-runner": "^3.0.0",
     "eclint": "^2.8.1",
diff --git a/packages/eslint-config-airbnb/package.json b/packages/eslint-config-airbnb/package.json
index c1d11d44e9..5c72eb8db2 100644
--- a/packages/eslint-config-airbnb/package.json
+++ b/packages/eslint-config-airbnb/package.json
@@ -70,7 +70,7 @@
     "object.entries": "^1.1.5"
   },
   "devDependencies": {
-    "@babel/runtime": "^7.20.13",
+    "@babel/runtime": "^7.21.5",
     "babel-preset-airbnb": "^4.5.0",
     "babel-tape-runner": "^3.0.0",
     "eclint": "^2.8.1",

From 0f3ca32323b8d5770de3301036e65511c6d18e00 Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Mon, 15 May 2023 10:21:09 -0700
Subject: [PATCH 1561/1591] [eslint config] [*] [deps] update `object.entries`

---
 packages/eslint-config-airbnb-base/package.json | 2 +-
 packages/eslint-config-airbnb/package.json      | 2 +-
 2 files changed, 2 insertions(+), 2 deletions(-)

diff --git a/packages/eslint-config-airbnb-base/package.json b/packages/eslint-config-airbnb-base/package.json
index 8784c6f15f..2e2d7dba60 100644
--- a/packages/eslint-config-airbnb-base/package.json
+++ b/packages/eslint-config-airbnb-base/package.json
@@ -88,6 +88,6 @@
   },
   "dependencies": {
     "confusing-browser-globals": "^1.0.11",
-    "object.entries": "^1.1.5"
+    "object.entries": "^1.1.6"
   }
 }
diff --git a/packages/eslint-config-airbnb/package.json b/packages/eslint-config-airbnb/package.json
index 5c72eb8db2..e924eda286 100644
--- a/packages/eslint-config-airbnb/package.json
+++ b/packages/eslint-config-airbnb/package.json
@@ -67,7 +67,7 @@
   "homepage": "https://github.com/airbnb/javascript",
   "dependencies": {
     "eslint-config-airbnb-base": "^15.0.0",
-    "object.entries": "^1.1.5"
+    "object.entries": "^1.1.6"
   },
   "devDependencies": {
     "@babel/runtime": "^7.21.5",

From 01f046dc0567e4495762e8e4fc4dde7b87dd5eb8 Mon Sep 17 00:00:00 2001
From: zhesha <savzhe@gmail.com>
Date: Tue, 23 May 2023 15:10:23 +0300
Subject: [PATCH 1562/1591] [guide] added second link to eslint rule for item
 7.1

---
 README.md | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/README.md b/README.md
index 660909e9a5..61b7fb5bb9 100644
--- a/README.md
+++ b/README.md
@@ -657,7 +657,7 @@ Other Style Guides
 ## Functions
 
   <a name="functions--declarations"></a><a name="7.1"></a>
-  - [7.1](#functions--declarations) Use named function expressions instead of function declarations. eslint: [`func-style`](https://eslint.org/docs/rules/func-style)
+  - [7.1](#functions--declarations) Use named function expressions instead of function declarations. eslint: [`func-style`](https://eslint.org/docs/rules/func-style), [`func-names`](https://eslint.org/docs/latest/rules/func-names)
 
     > Why? Function declarations are hoisted, which means that it’s easy - too easy - to reference the function before it is defined in the file. This harms readability and maintainability. If you find that a function’s definition is large or complex enough that it is interfering with understanding the rest of the file, then perhaps it’s time to extract it to its own module! Don’t forget to explicitly name the expression, regardless of whether or not the name is inferred from the containing variable (which is often the case in modern browsers or when using compilers such as Babel). This eliminates any assumptions made about the Error’s call stack. ([Discussion](https://github.com/airbnb/javascript/issues/794))
 

From 7916d6f538028e91129e65fd5633b7d6fa85d000 Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Mon, 15 May 2023 10:21:09 -0700
Subject: [PATCH 1563/1591] [guide] Add documentation for
 `no-use-before-define` rule under hoisting section

---
 README.md | 50 ++++++++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 50 insertions(+)

diff --git a/README.md b/README.md
index 61b7fb5bb9..5732b91c59 100644
--- a/README.md
+++ b/README.md
@@ -1961,6 +1961,56 @@ Other Style Guides
     }
     ```
 
+  <a name="no-use-before-define"></a>
+  - [14.5](#no-use-before-define) Variables, classes, and functions should be defined before they can be used. eslint: [`no-use-before-define`](https://eslint.org/docs/latest/rules/no-use-before-define)
+
+    > Why? When variables, classes, or functions are declared before being used, it can harm readability since a reader won't know what a thing that's referenced is. It's much clearer for a reader to first encounter the source of a thing (whether imported from another module, or defined in the file) before encountering a use of the thing.
+
+    ```javascript
+    // bad
+
+    // Variable a is being used before it is being defined.
+    console.log(a); // this will be undefined, since while the declaration is hoisted, the initialization is not
+    var a = 10;
+
+    // Function fun is being called before being defined.
+    fun();
+    function fun() {}
+
+    // Class A is being used before being defined.
+    new A(); // ReferenceError: Cannot access 'A' before initialization
+    class A {
+    }
+
+    // `let` and `const` are hoisted, but they don't have a default initialization.
+    // The variables 'a' and 'b' are in a Temporal Dead Zone where JavaScript
+    // knows they exist (declaration is hoisted) but they are not accessible
+    // (as they are not yet initialized).
+
+    console.log(a); // ReferenceError: Cannot access 'a' before initialization
+    console.log(b); // ReferenceError: Cannot access 'b' before initialization
+    let a = 10;
+    const b = 5;
+
+
+    // good
+
+    var a = 10;
+    console.log(a); // 10
+
+    function fun() {}
+    fun();
+
+    class A {
+    }
+    new A();
+
+    let a = 10;
+    const b = 5;
+    console.log(a); // 10
+    console.log(b); // 5
+    ```
+
   - For more information refer to [JavaScript Scoping & Hoisting](https://www.adequatelygood.com/2010/2/JavaScript-Scoping-and-Hoisting/) by [Ben Cherry](https://www.adequatelygood.com/).
 
 **[⬆ back to top](#table-of-contents)**

From fd77bbebb77362ddecfef7aba3bf6abf7bdd81f2 Mon Sep 17 00:00:00 2001
From: Khadija-Batool <khadijagardezi10@gmail.com>
Date: Sun, 2 Jul 2023 23:51:01 +0500
Subject: [PATCH 1564/1591] [guide] add nullish-coalescing-operator definition

---
 README.md | 27 +++++++++++++++++++++++++++
 1 file changed, 27 insertions(+)

diff --git a/README.md b/README.md
index 5732b91c59..026c7ebe3e 100644
--- a/README.md
+++ b/README.md
@@ -2198,6 +2198,33 @@ Other Style Guides
     const bar = a + (b / c) * d;
     ```
 
+  <a name="nullish-coalescing-operator"></a>
+  - [15.9](#nullish-coalescing-operator) The nullish coalescing operator (`??`) is a logical operator that returns its right-hand side operand when its left-hand side operand is `null` or `undefined`. Otherwise, it returns the left-hand side operand.
+
+    > Why? It provides precision by distinguishing null/undefined from other falsy values, enhancing code clarity and predictability.
+
+    ```javascript
+    // bad
+    const value = 0 ?? 'default';
+    // returns 0, not 'default'
+
+    // bad
+    const value = '' ?? 'default';
+    // returns '', not 'default'
+
+    // good
+    const value = null ?? 'default';
+    // returns 'default'
+
+    // good
+    const user = {
+      name: 'John',
+      age: null
+    };
+    const age = user.age ?? 18;
+    // returns 18
+    ```
+
 **[⬆ back to top](#table-of-contents)**
 
 ## Blocks

From 18a08b862b14ec8d8fd8bd70bcba2d8e9714c93b Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Sat, 5 Aug 2023 11:55:23 +1200
Subject: [PATCH 1565/1591] [Dev Deps] update `markdownlint`,
 `markdownlint-cli`

---
 package.json | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/package.json b/package.json
index 0fd14e961b..a78bc250d4 100644
--- a/package.json
+++ b/package.json
@@ -40,7 +40,7 @@
   },
   "homepage": "https://github.com/airbnb/javascript",
   "devDependencies": {
-    "markdownlint": "^0.28.2",
-    "markdownlint-cli": "^0.34.0"
+    "markdownlint": "^0.29.0",
+    "markdownlint-cli": "^0.35.0"
   }
 }

From 4aee38f1e794ec846aa2d1120b80a1ac7ad4db12 Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Sat, 5 Aug 2023 12:05:40 +1200
Subject: [PATCH 1566/1591] [eslint config] [*] [deps] update
 `eslint-plugin-import`, `@babel/runtime`, `tape`

---
 packages/eslint-config-airbnb-base/package.json | 8 ++++----
 packages/eslint-config-airbnb/package.json      | 8 ++++----
 2 files changed, 8 insertions(+), 8 deletions(-)

diff --git a/packages/eslint-config-airbnb-base/package.json b/packages/eslint-config-airbnb-base/package.json
index 2e2d7dba60..39c0fdf944 100644
--- a/packages/eslint-config-airbnb-base/package.json
+++ b/packages/eslint-config-airbnb-base/package.json
@@ -68,20 +68,20 @@
   },
   "homepage": "https://github.com/airbnb/javascript",
   "devDependencies": {
-    "@babel/runtime": "^7.21.5",
+    "@babel/runtime": "^7.22.6",
     "babel-preset-airbnb": "^4.5.0",
     "babel-tape-runner": "^3.0.0",
     "eclint": "^2.8.1",
     "eslint": "^7.32.0 || ^8.2.0",
     "eslint-find-rules": "^4.1.0",
-    "eslint-plugin-import": "^2.27.5",
+    "eslint-plugin-import": "^2.28.0",
     "in-publish": "^2.0.1",
     "safe-publish-latest": "^2.0.0",
-    "tape": "^5.6.3"
+    "tape": "^5.6.6"
   },
   "peerDependencies": {
     "eslint": "^7.32.0 || ^8.2.0",
-    "eslint-plugin-import": "^2.27.5"
+    "eslint-plugin-import": "^2.28.0"
   },
   "engines": {
     "node": "^10.12.0 || >=12.0.0"
diff --git a/packages/eslint-config-airbnb/package.json b/packages/eslint-config-airbnb/package.json
index e924eda286..a9d800a773 100644
--- a/packages/eslint-config-airbnb/package.json
+++ b/packages/eslint-config-airbnb/package.json
@@ -70,24 +70,24 @@
     "object.entries": "^1.1.6"
   },
   "devDependencies": {
-    "@babel/runtime": "^7.21.5",
+    "@babel/runtime": "^7.22.6",
     "babel-preset-airbnb": "^4.5.0",
     "babel-tape-runner": "^3.0.0",
     "eclint": "^2.8.1",
     "eslint": "^7.32.0 || ^8.2.0",
     "eslint-find-rules": "^4.1.0",
-    "eslint-plugin-import": "^2.27.5",
+    "eslint-plugin-import": "^2.28.0",
     "eslint-plugin-jsx-a11y": "^6.7.1",
     "eslint-plugin-react": "^7.32.2",
     "eslint-plugin-react-hooks": "^4.6.0",
     "in-publish": "^2.0.1",
     "react": ">= 0.13.0",
     "safe-publish-latest": "^2.0.0",
-    "tape": "^5.6.3"
+    "tape": "^5.6.6"
   },
   "peerDependencies": {
     "eslint": "^7.32.0 || ^8.2.0",
-    "eslint-plugin-import": "^2.27.5",
+    "eslint-plugin-import": "^2.28.0",
     "eslint-plugin-jsx-a11y": "^6.7.1",
     "eslint-plugin-react": "^7.32.2",
     "eslint-plugin-react-hooks": "^4.6.0"

From 749f4c2bd0e2e890fed7f421ac39b8689fe00d99 Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Sat, 5 Aug 2023 12:06:55 +1200
Subject: [PATCH 1567/1591] [eslint config] [deps] update `eslint-plugin-react`

---
 packages/eslint-config-airbnb/package.json | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/packages/eslint-config-airbnb/package.json b/packages/eslint-config-airbnb/package.json
index a9d800a773..1ac7a902a2 100644
--- a/packages/eslint-config-airbnb/package.json
+++ b/packages/eslint-config-airbnb/package.json
@@ -78,7 +78,7 @@
     "eslint-find-rules": "^4.1.0",
     "eslint-plugin-import": "^2.28.0",
     "eslint-plugin-jsx-a11y": "^6.7.1",
-    "eslint-plugin-react": "^7.32.2",
+    "eslint-plugin-react": "^7.33.1",
     "eslint-plugin-react-hooks": "^4.6.0",
     "in-publish": "^2.0.1",
     "react": ">= 0.13.0",
@@ -89,7 +89,7 @@
     "eslint": "^7.32.0 || ^8.2.0",
     "eslint-plugin-import": "^2.28.0",
     "eslint-plugin-jsx-a11y": "^6.7.1",
-    "eslint-plugin-react": "^7.32.2",
+    "eslint-plugin-react": "^7.33.1",
     "eslint-plugin-react-hooks": "^4.6.0"
   },
   "engines": {

From 2fc5e2d52c48c1dfc76f52f704c41dcfd28a0de7 Mon Sep 17 00:00:00 2001
From: Joe Mornin <119512+morninj@users.noreply.github.com>
Date: Wed, 2 Aug 2023 13:16:48 -0700
Subject: [PATCH 1568/1591] [guide] fix grammar

---
 README.md | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/README.md b/README.md
index 026c7ebe3e..06d773c275 100644
--- a/README.md
+++ b/README.md
@@ -636,7 +636,7 @@ Other Style Guides
     ```
 
   <a name="strings--eval"></a><a name="6.5"></a>
-  - [6.4](#strings--eval) Never use `eval()` on a string, it opens too many vulnerabilities. eslint: [`no-eval`](https://eslint.org/docs/rules/no-eval)
+  - [6.4](#strings--eval) Never use `eval()` on a string; it opens too many vulnerabilities. eslint: [`no-eval`](https://eslint.org/docs/rules/no-eval)
 
   <a name="strings--escaping"></a>
   - [6.5](#strings--escaping) Do not unnecessarily escape characters in strings. eslint: [`no-useless-escape`](https://eslint.org/docs/rules/no-useless-escape)

From cda44dad403979d313a4b02ce55f0bb6cc3a24b2 Mon Sep 17 00:00:00 2001
From: Joe Mornin <119512+morninj@users.noreply.github.com>
Date: Tue, 1 Aug 2023 09:25:54 -0700
Subject: [PATCH 1569/1591] [guide] Add commas to Truth, Equality, and
 JavaScript

Co-authored-by: Jordan Harband <ljharb@gmail.com>
---
 README.md | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/README.md b/README.md
index 06d773c275..88b1d11ddf 100644
--- a/README.md
+++ b/README.md
@@ -2073,7 +2073,7 @@ Other Style Guides
     ```
 
   <a name="comparison--moreinfo"></a><a name="15.4"></a>
-  - [15.4](#comparison--moreinfo) For more information see [Truth Equality and JavaScript](https://javascriptweblog.wordpress.com/2011/02/07/truth-equality-and-javascript/#more-2108) by Angus Croll.
+  - [15.4](#comparison--moreinfo) For more information see [Truth, Equality, and JavaScript](https://javascriptweblog.wordpress.com/2011/02/07/truth-equality-and-javascript/#more-2108) by Angus Croll.
 
   <a name="comparison--switch-blocks"></a><a name="15.5"></a>
   - [15.5](#comparison--switch-blocks) Use braces to create blocks in `case` and `default` clauses that contain lexical declarations (e.g. `let`, `const`, `function`, and `class`). eslint: [`no-case-declarations`](https://eslint.org/docs/rules/no-case-declarations)

From cb191776dbdd2c8674fc81a6850c4c1377af46e6 Mon Sep 17 00:00:00 2001
From: hamzahuda <116317495+hamzahuda@users.noreply.github.com>
Date: Sat, 12 Aug 2023 12:19:30 +0100
Subject: [PATCH 1570/1591] [readme] correct no-use-before-define justification

The recommendation is to declare the variables, classes and functions before. So the contrasting negative example should say after.
---
 README.md | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/README.md b/README.md
index 88b1d11ddf..e7ed4d29ae 100644
--- a/README.md
+++ b/README.md
@@ -1964,7 +1964,7 @@ Other Style Guides
   <a name="no-use-before-define"></a>
   - [14.5](#no-use-before-define) Variables, classes, and functions should be defined before they can be used. eslint: [`no-use-before-define`](https://eslint.org/docs/latest/rules/no-use-before-define)
 
-    > Why? When variables, classes, or functions are declared before being used, it can harm readability since a reader won't know what a thing that's referenced is. It's much clearer for a reader to first encounter the source of a thing (whether imported from another module, or defined in the file) before encountering a use of the thing.
+    > Why? When variables, classes, or functions are declared after being used, it can harm readability since a reader won't know what a thing that's referenced is. It's much clearer for a reader to first encounter the source of a thing (whether imported from another module, or defined in the file) before encountering a use of the thing.
 
     ```javascript
     // bad

From 46ae3e225673b6bbd52a49f78b9474cd282b8e4f Mon Sep 17 00:00:00 2001
From: savalaram-redkar <rredkar1996@gmail.com>
Date: Tue, 15 Aug 2023 20:24:16 +0530
Subject: [PATCH 1571/1591] [readme] Add `Object.hasOwn` to section 3.7

---
 README.md | 8 ++++++--
 1 file changed, 6 insertions(+), 2 deletions(-)

diff --git a/README.md b/README.md
index e7ed4d29ae..9681aa4b51 100644
--- a/README.md
+++ b/README.md
@@ -296,7 +296,7 @@ Other Style Guides
   <a name="objects--prototype-builtins"></a>
   - [3.7](#objects--prototype-builtins) Do not call `Object.prototype` methods directly, such as `hasOwnProperty`, `propertyIsEnumerable`, and `isPrototypeOf`. eslint: [`no-prototype-builtins`](https://eslint.org/docs/rules/no-prototype-builtins)
 
-    > Why? These methods may be shadowed by properties on the object in question - consider `{ hasOwnProperty: false }` - or, the object may be a null object (`Object.create(null)`).
+    > Why? These methods may be shadowed by properties on the object in question - consider `{ hasOwnProperty: false }` - or, the object may be a null object (`Object.create(null)`). In modern browsers that support ES2022, or with a polyfill such as <https://npmjs.com/object.hasown>, `Object.hasOwn` can also be used as an alternative to `Object.prototype.hasOwnProperty.call`.
 
     ```javascript
     // bad
@@ -305,9 +305,13 @@ Other Style Guides
     // good
     console.log(Object.prototype.hasOwnProperty.call(object, key));
 
-    // best
+    // better
     const has = Object.prototype.hasOwnProperty; // cache the lookup once, in module scope.
     console.log(has.call(object, key));
+
+    // best
+    console.log(Object.hasOwn(object, key)); // only supported in browsers that support ES2022
+
     /* or */
     import has from 'has'; // https://www.npmjs.com/package/has
     console.log(has(object, key));

From 11ab37144b7f846f04f64a29b5beb6e00d74e84b Mon Sep 17 00:00:00 2001
From: Vahid Mohammadi <vahidm1467@gmail.com>
Date: Mon, 21 Aug 2023 15:43:54 +0100
Subject: [PATCH 1572/1591] [eslint config] [base] [patch] Add a message for
 `confusing-browser-globals`

---
 packages/eslint-config-airbnb-base/rules/variables.js | 5 ++++-
 1 file changed, 4 insertions(+), 1 deletion(-)

diff --git a/packages/eslint-config-airbnb-base/rules/variables.js b/packages/eslint-config-airbnb-base/rules/variables.js
index 6fb98bcfb6..7d61989e6a 100644
--- a/packages/eslint-config-airbnb-base/rules/variables.js
+++ b/packages/eslint-config-airbnb-base/rules/variables.js
@@ -28,7 +28,10 @@ module.exports = {
         message:
           'Use Number.isNaN instead https://github.com/airbnb/javascript#standard-library--isnan',
       },
-    ].concat(confusingBrowserGlobals),
+    ].concat(confusingBrowserGlobals.map((g) => ({
+      name: g,
+      message: `Use window.${g} instead. https://github.com/facebook/create-react-app/blob/HEAD/packages/confusing-browser-globals/README.md`,
+    }))),
 
     // disallow declaration of variables already declared in the outer scope
     'no-shadow': 'error',

From e95b1f2754258cf219ecfdfdf712b6de5657dd8a Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Sat, 27 Jan 2024 21:07:02 -0800
Subject: [PATCH 1573/1591] [eslint config] [base] add new disabled rules

---
 packages/eslint-config-airbnb-base/rules/best-practices.js | 5 +++++
 1 file changed, 5 insertions(+)

diff --git a/packages/eslint-config-airbnb-base/rules/best-practices.js b/packages/eslint-config-airbnb-base/rules/best-practices.js
index 944fe71a05..09c247451a 100644
--- a/packages/eslint-config-airbnb-base/rules/best-practices.js
+++ b/packages/eslint-config-airbnb-base/rules/best-practices.js
@@ -217,6 +217,11 @@ module.exports = {
     // https://eslint.org/docs/rules/no-nonoctal-decimal-escape
     'no-nonoctal-decimal-escape': 'error',
 
+    // Disallow calls to the Object constructor without an argument
+    // https://eslint.org/docs/latest/rules/no-object-constructor
+    // TODO: enable, semver-major
+    'no-object-constructor': 'off',
+
     // disallow use of (old style) octal literals
     // https://eslint.org/docs/rules/no-octal
     'no-octal': 'error',

From 55899b57a6de826d8d762693d6d4f999d652ae2d Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Sat, 27 Jan 2024 21:08:54 -0800
Subject: [PATCH 1574/1591] [eslint config] [*] [deps] update deps

---
 .../eslint-config-airbnb-base/package.json     | 10 +++++-----
 packages/eslint-config-airbnb/package.json     | 18 +++++++++---------
 2 files changed, 14 insertions(+), 14 deletions(-)

diff --git a/packages/eslint-config-airbnb-base/package.json b/packages/eslint-config-airbnb-base/package.json
index 39c0fdf944..683284f43e 100644
--- a/packages/eslint-config-airbnb-base/package.json
+++ b/packages/eslint-config-airbnb-base/package.json
@@ -68,26 +68,26 @@
   },
   "homepage": "https://github.com/airbnb/javascript",
   "devDependencies": {
-    "@babel/runtime": "^7.22.6",
+    "@babel/runtime": "^7.23.9",
     "babel-preset-airbnb": "^4.5.0",
     "babel-tape-runner": "^3.0.0",
     "eclint": "^2.8.1",
     "eslint": "^7.32.0 || ^8.2.0",
     "eslint-find-rules": "^4.1.0",
-    "eslint-plugin-import": "^2.28.0",
+    "eslint-plugin-import": "^2.29.1",
     "in-publish": "^2.0.1",
     "safe-publish-latest": "^2.0.0",
-    "tape": "^5.6.6"
+    "tape": "^5.7.4"
   },
   "peerDependencies": {
     "eslint": "^7.32.0 || ^8.2.0",
-    "eslint-plugin-import": "^2.28.0"
+    "eslint-plugin-import": "^2.29.1"
   },
   "engines": {
     "node": "^10.12.0 || >=12.0.0"
   },
   "dependencies": {
     "confusing-browser-globals": "^1.0.11",
-    "object.entries": "^1.1.6"
+    "object.entries": "^1.1.7"
   }
 }
diff --git a/packages/eslint-config-airbnb/package.json b/packages/eslint-config-airbnb/package.json
index 1ac7a902a2..c99ef24811 100644
--- a/packages/eslint-config-airbnb/package.json
+++ b/packages/eslint-config-airbnb/package.json
@@ -67,29 +67,29 @@
   "homepage": "https://github.com/airbnb/javascript",
   "dependencies": {
     "eslint-config-airbnb-base": "^15.0.0",
-    "object.entries": "^1.1.6"
+    "object.entries": "^1.1.7"
   },
   "devDependencies": {
-    "@babel/runtime": "^7.22.6",
+    "@babel/runtime": "^7.23.9",
     "babel-preset-airbnb": "^4.5.0",
     "babel-tape-runner": "^3.0.0",
     "eclint": "^2.8.1",
     "eslint": "^7.32.0 || ^8.2.0",
     "eslint-find-rules": "^4.1.0",
-    "eslint-plugin-import": "^2.28.0",
-    "eslint-plugin-jsx-a11y": "^6.7.1",
-    "eslint-plugin-react": "^7.33.1",
+    "eslint-plugin-import": "^2.29.1",
+    "eslint-plugin-jsx-a11y": "^6.8.0",
+    "eslint-plugin-react": "^7.33.2",
     "eslint-plugin-react-hooks": "^4.6.0",
     "in-publish": "^2.0.1",
     "react": ">= 0.13.0",
     "safe-publish-latest": "^2.0.0",
-    "tape": "^5.6.6"
+    "tape": "^5.7.4"
   },
   "peerDependencies": {
     "eslint": "^7.32.0 || ^8.2.0",
-    "eslint-plugin-import": "^2.28.0",
-    "eslint-plugin-jsx-a11y": "^6.7.1",
-    "eslint-plugin-react": "^7.33.1",
+    "eslint-plugin-import": "^2.29.1",
+    "eslint-plugin-jsx-a11y": "^6.8.0",
+    "eslint-plugin-react": "^7.33.2",
     "eslint-plugin-react-hooks": "^4.6.0"
   },
   "engines": {

From 0681a43e0a0181e8cafd0d3004f967a238411ba2 Mon Sep 17 00:00:00 2001
From: 43081j <43081j@users.noreply.github.com>
Date: Thu, 4 Jan 2024 19:14:38 +0000
Subject: [PATCH 1575/1591] [eslint config] [*] [refactor] remove
 `object.entries` dependency

This removes the `object.entries` package and uses the widely available built-in native `Object.entries`.
---
 packages/eslint-config-airbnb-base/package.json        | 3 +--
 packages/eslint-config-airbnb-base/whitespace-async.js | 3 +--
 packages/eslint-config-airbnb-base/whitespace.js       | 3 +--
 packages/eslint-config-airbnb/package.json             | 3 +--
 packages/eslint-config-airbnb/whitespace-async.js      | 3 +--
 packages/eslint-config-airbnb/whitespace.js            | 3 +--
 6 files changed, 6 insertions(+), 12 deletions(-)

diff --git a/packages/eslint-config-airbnb-base/package.json b/packages/eslint-config-airbnb-base/package.json
index 683284f43e..92daf3c33b 100644
--- a/packages/eslint-config-airbnb-base/package.json
+++ b/packages/eslint-config-airbnb-base/package.json
@@ -87,7 +87,6 @@
     "node": "^10.12.0 || >=12.0.0"
   },
   "dependencies": {
-    "confusing-browser-globals": "^1.0.11",
-    "object.entries": "^1.1.7"
+    "confusing-browser-globals": "^1.0.11"
   }
 }
diff --git a/packages/eslint-config-airbnb-base/whitespace-async.js b/packages/eslint-config-airbnb-base/whitespace-async.js
index d6742fb7c4..f7994fca04 100755
--- a/packages/eslint-config-airbnb-base/whitespace-async.js
+++ b/packages/eslint-config-airbnb-base/whitespace-async.js
@@ -1,6 +1,5 @@
 #!/usr/bin/env node
 
-const entries = require('object.entries');
 const { ESLint } = require('eslint');
 
 const baseConfig = require('.');
@@ -26,7 +25,7 @@ async function onlyErrorOnRules(rulesToError, config) {
   });
   const baseRules = (await cli.calculateConfigForFile(require.resolve('./'))).rules;
 
-  entries(baseRules).forEach((rule) => {
+  Object.entries(baseRules).forEach((rule) => {
     const ruleName = rule[0];
     const ruleConfig = rule[1];
     const severity = getSeverity(ruleConfig);
diff --git a/packages/eslint-config-airbnb-base/whitespace.js b/packages/eslint-config-airbnb-base/whitespace.js
index f4b93bb492..fcc5099af9 100644
--- a/packages/eslint-config-airbnb-base/whitespace.js
+++ b/packages/eslint-config-airbnb-base/whitespace.js
@@ -4,7 +4,6 @@ const { CLIEngine } = require('eslint');
 
 if (CLIEngine) {
   /* eslint no-inner-declarations: 0 */
-  const entries = require('object.entries');
   const whitespaceRules = require('./whitespaceRules');
 
   const baseConfig = require('.');
@@ -26,7 +25,7 @@ if (CLIEngine) {
     const cli = new CLIEngine({ baseConfig: config, useEslintrc: false });
     const baseRules = cli.getConfigForFile(require.resolve('./')).rules;
 
-    entries(baseRules).forEach((rule) => {
+    Object.entries(baseRules).forEach((rule) => {
       const ruleName = rule[0];
       const ruleConfig = rule[1];
       const severity = getSeverity(ruleConfig);
diff --git a/packages/eslint-config-airbnb/package.json b/packages/eslint-config-airbnb/package.json
index c99ef24811..69a4670f8e 100644
--- a/packages/eslint-config-airbnb/package.json
+++ b/packages/eslint-config-airbnb/package.json
@@ -66,8 +66,7 @@
   },
   "homepage": "https://github.com/airbnb/javascript",
   "dependencies": {
-    "eslint-config-airbnb-base": "^15.0.0",
-    "object.entries": "^1.1.7"
+    "eslint-config-airbnb-base": "^15.0.0"
   },
   "devDependencies": {
     "@babel/runtime": "^7.23.9",
diff --git a/packages/eslint-config-airbnb/whitespace-async.js b/packages/eslint-config-airbnb/whitespace-async.js
index d6742fb7c4..f7994fca04 100755
--- a/packages/eslint-config-airbnb/whitespace-async.js
+++ b/packages/eslint-config-airbnb/whitespace-async.js
@@ -1,6 +1,5 @@
 #!/usr/bin/env node
 
-const entries = require('object.entries');
 const { ESLint } = require('eslint');
 
 const baseConfig = require('.');
@@ -26,7 +25,7 @@ async function onlyErrorOnRules(rulesToError, config) {
   });
   const baseRules = (await cli.calculateConfigForFile(require.resolve('./'))).rules;
 
-  entries(baseRules).forEach((rule) => {
+  Object.entries(baseRules).forEach((rule) => {
     const ruleName = rule[0];
     const ruleConfig = rule[1];
     const severity = getSeverity(ruleConfig);
diff --git a/packages/eslint-config-airbnb/whitespace.js b/packages/eslint-config-airbnb/whitespace.js
index f4b93bb492..fcc5099af9 100644
--- a/packages/eslint-config-airbnb/whitespace.js
+++ b/packages/eslint-config-airbnb/whitespace.js
@@ -4,7 +4,6 @@ const { CLIEngine } = require('eslint');
 
 if (CLIEngine) {
   /* eslint no-inner-declarations: 0 */
-  const entries = require('object.entries');
   const whitespaceRules = require('./whitespaceRules');
 
   const baseConfig = require('.');
@@ -26,7 +25,7 @@ if (CLIEngine) {
     const cli = new CLIEngine({ baseConfig: config, useEslintrc: false });
     const baseRules = cli.getConfigForFile(require.resolve('./')).rules;
 
-    entries(baseRules).forEach((rule) => {
+    Object.entries(baseRules).forEach((rule) => {
       const ruleName = rule[0];
       const ruleConfig = rule[1];
       const severity = getSeverity(ruleConfig);

From 51a37d0fa5f334fdfae9fea39711402fb6eb3b34 Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Sat, 27 Jan 2024 21:02:05 -0800
Subject: [PATCH 1576/1591] [eslint config] [*] [robustness] cache static
 builtins

---
 packages/eslint-config-airbnb-base/whitespace-async.js | 8 +++++---
 packages/eslint-config-airbnb-base/whitespace.js       | 8 +++++---
 packages/eslint-config-airbnb/whitespace-async.js      | 8 +++++---
 packages/eslint-config-airbnb/whitespace.js            | 8 +++++---
 4 files changed, 20 insertions(+), 12 deletions(-)

diff --git a/packages/eslint-config-airbnb-base/whitespace-async.js b/packages/eslint-config-airbnb-base/whitespace-async.js
index f7994fca04..06f4f89075 100755
--- a/packages/eslint-config-airbnb-base/whitespace-async.js
+++ b/packages/eslint-config-airbnb-base/whitespace-async.js
@@ -1,5 +1,7 @@
 #!/usr/bin/env node
 
+const { isArray } = Array;
+const { entries } = Object;
 const { ESLint } = require('eslint');
 
 const baseConfig = require('.');
@@ -8,7 +10,7 @@ const whitespaceRules = require('./whitespaceRules');
 const severities = ['off', 'warn', 'error'];
 
 function getSeverity(ruleConfig) {
-  if (Array.isArray(ruleConfig)) {
+  if (isArray(ruleConfig)) {
     return getSeverity(ruleConfig[0]);
   }
   if (typeof ruleConfig === 'number') {
@@ -25,13 +27,13 @@ async function onlyErrorOnRules(rulesToError, config) {
   });
   const baseRules = (await cli.calculateConfigForFile(require.resolve('./'))).rules;
 
-  Object.entries(baseRules).forEach((rule) => {
+  entries(baseRules).forEach((rule) => {
     const ruleName = rule[0];
     const ruleConfig = rule[1];
     const severity = getSeverity(ruleConfig);
 
     if (rulesToError.indexOf(ruleName) === -1 && severity === 'error') {
-      if (Array.isArray(ruleConfig)) {
+      if (isArray(ruleConfig)) {
         errorsOnly.rules[ruleName] = ['warn'].concat(ruleConfig.slice(1));
       } else if (typeof ruleConfig === 'number') {
         errorsOnly.rules[ruleName] = 1;
diff --git a/packages/eslint-config-airbnb-base/whitespace.js b/packages/eslint-config-airbnb-base/whitespace.js
index fcc5099af9..e896072154 100644
--- a/packages/eslint-config-airbnb-base/whitespace.js
+++ b/packages/eslint-config-airbnb-base/whitespace.js
@@ -1,5 +1,7 @@
 /* eslint global-require: 0 */
 
+const { isArray } = Array;
+const { entries } = Object;
 const { CLIEngine } = require('eslint');
 
 if (CLIEngine) {
@@ -11,7 +13,7 @@ if (CLIEngine) {
   const severities = ['off', 'warn', 'error'];
 
   function getSeverity(ruleConfig) {
-    if (Array.isArray(ruleConfig)) {
+    if (isArray(ruleConfig)) {
       return getSeverity(ruleConfig[0]);
     }
     if (typeof ruleConfig === 'number') {
@@ -25,13 +27,13 @@ if (CLIEngine) {
     const cli = new CLIEngine({ baseConfig: config, useEslintrc: false });
     const baseRules = cli.getConfigForFile(require.resolve('./')).rules;
 
-    Object.entries(baseRules).forEach((rule) => {
+    entries(baseRules).forEach((rule) => {
       const ruleName = rule[0];
       const ruleConfig = rule[1];
       const severity = getSeverity(ruleConfig);
 
       if (rulesToError.indexOf(ruleName) === -1 && severity === 'error') {
-        if (Array.isArray(ruleConfig)) {
+        if (isArray(ruleConfig)) {
           errorsOnly.rules[ruleName] = ['warn'].concat(ruleConfig.slice(1));
         } else if (typeof ruleConfig === 'number') {
           errorsOnly.rules[ruleName] = 1;
diff --git a/packages/eslint-config-airbnb/whitespace-async.js b/packages/eslint-config-airbnb/whitespace-async.js
index f7994fca04..06f4f89075 100755
--- a/packages/eslint-config-airbnb/whitespace-async.js
+++ b/packages/eslint-config-airbnb/whitespace-async.js
@@ -1,5 +1,7 @@
 #!/usr/bin/env node
 
+const { isArray } = Array;
+const { entries } = Object;
 const { ESLint } = require('eslint');
 
 const baseConfig = require('.');
@@ -8,7 +10,7 @@ const whitespaceRules = require('./whitespaceRules');
 const severities = ['off', 'warn', 'error'];
 
 function getSeverity(ruleConfig) {
-  if (Array.isArray(ruleConfig)) {
+  if (isArray(ruleConfig)) {
     return getSeverity(ruleConfig[0]);
   }
   if (typeof ruleConfig === 'number') {
@@ -25,13 +27,13 @@ async function onlyErrorOnRules(rulesToError, config) {
   });
   const baseRules = (await cli.calculateConfigForFile(require.resolve('./'))).rules;
 
-  Object.entries(baseRules).forEach((rule) => {
+  entries(baseRules).forEach((rule) => {
     const ruleName = rule[0];
     const ruleConfig = rule[1];
     const severity = getSeverity(ruleConfig);
 
     if (rulesToError.indexOf(ruleName) === -1 && severity === 'error') {
-      if (Array.isArray(ruleConfig)) {
+      if (isArray(ruleConfig)) {
         errorsOnly.rules[ruleName] = ['warn'].concat(ruleConfig.slice(1));
       } else if (typeof ruleConfig === 'number') {
         errorsOnly.rules[ruleName] = 1;
diff --git a/packages/eslint-config-airbnb/whitespace.js b/packages/eslint-config-airbnb/whitespace.js
index fcc5099af9..e896072154 100644
--- a/packages/eslint-config-airbnb/whitespace.js
+++ b/packages/eslint-config-airbnb/whitespace.js
@@ -1,5 +1,7 @@
 /* eslint global-require: 0 */
 
+const { isArray } = Array;
+const { entries } = Object;
 const { CLIEngine } = require('eslint');
 
 if (CLIEngine) {
@@ -11,7 +13,7 @@ if (CLIEngine) {
   const severities = ['off', 'warn', 'error'];
 
   function getSeverity(ruleConfig) {
-    if (Array.isArray(ruleConfig)) {
+    if (isArray(ruleConfig)) {
       return getSeverity(ruleConfig[0]);
     }
     if (typeof ruleConfig === 'number') {
@@ -25,13 +27,13 @@ if (CLIEngine) {
     const cli = new CLIEngine({ baseConfig: config, useEslintrc: false });
     const baseRules = cli.getConfigForFile(require.resolve('./')).rules;
 
-    Object.entries(baseRules).forEach((rule) => {
+    entries(baseRules).forEach((rule) => {
       const ruleName = rule[0];
       const ruleConfig = rule[1];
       const severity = getSeverity(ruleConfig);
 
       if (rulesToError.indexOf(ruleName) === -1 && severity === 'error') {
-        if (Array.isArray(ruleConfig)) {
+        if (isArray(ruleConfig)) {
           errorsOnly.rules[ruleName] = ['warn'].concat(ruleConfig.slice(1));
         } else if (typeof ruleConfig === 'number') {
           errorsOnly.rules[ruleName] = 1;

From 09adc22031e545ef818a57fee3e8a88de3afb0f0 Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Tue, 30 Jan 2024 10:59:23 -0800
Subject: [PATCH 1577/1591] [eslint config] [patch]
 `jsx-a11y/no-noninteractive-tabindex`: allow expression values

---
 packages/eslint-config-airbnb/rules/react-a11y.js | 1 +
 1 file changed, 1 insertion(+)

diff --git a/packages/eslint-config-airbnb/rules/react-a11y.js b/packages/eslint-config-airbnb/rules/react-a11y.js
index 643cf64407..e83c5512ea 100644
--- a/packages/eslint-config-airbnb/rules/react-a11y.js
+++ b/packages/eslint-config-airbnb/rules/react-a11y.js
@@ -192,6 +192,7 @@ module.exports = {
     'jsx-a11y/no-noninteractive-tabindex': ['error', {
       tags: [],
       roles: ['tabpanel'],
+      allowExpressionValues: true,
     }],
 
     // require onBlur instead of onChange

From b23992033ce67ace887044140efb2df70aa1766d Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Tue, 30 Jan 2024 10:59:47 -0800
Subject: [PATCH 1578/1591] [eslint config] [patch]
 `jsx-a11y/no-redundant-roles`: allow `nav` to have `navigation` role

---
 packages/eslint-config-airbnb/rules/react-a11y.js | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

diff --git a/packages/eslint-config-airbnb/rules/react-a11y.js b/packages/eslint-config-airbnb/rules/react-a11y.js
index e83c5512ea..58065120a4 100644
--- a/packages/eslint-config-airbnb/rules/react-a11y.js
+++ b/packages/eslint-config-airbnb/rules/react-a11y.js
@@ -201,7 +201,9 @@ module.exports = {
 
     // ensure HTML elements do not specify redundant ARIA roles
     // https://github.com/jsx-eslint/eslint-plugin-jsx-a11y/blob/master/docs/rules/no-redundant-roles.md
-    'jsx-a11y/no-redundant-roles': 'error',
+    'jsx-a11y/no-redundant-roles': ['error', {
+      nav: ['navigation'],
+    }],
 
     // Enforce that DOM elements without semantic behavior not have interaction handlers
     // https://github.com/jsx-eslint/eslint-plugin-jsx-a11y/blob/master/docs/rules/no-static-element-interactions.md

From 5f019b1b11e69e7ee300ab15d5b0123c9c226bbe Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Mon, 25 Mar 2024 09:28:53 -0700
Subject: [PATCH 1579/1591] [eslint config] [*] [dev deps] update `tape`

---
 packages/eslint-config-airbnb-base/package.json | 2 +-
 packages/eslint-config-airbnb/package.json      | 2 +-
 2 files changed, 2 insertions(+), 2 deletions(-)

diff --git a/packages/eslint-config-airbnb-base/package.json b/packages/eslint-config-airbnb-base/package.json
index 92daf3c33b..6ae226d583 100644
--- a/packages/eslint-config-airbnb-base/package.json
+++ b/packages/eslint-config-airbnb-base/package.json
@@ -77,7 +77,7 @@
     "eslint-plugin-import": "^2.29.1",
     "in-publish": "^2.0.1",
     "safe-publish-latest": "^2.0.0",
-    "tape": "^5.7.4"
+    "tape": "^5.7.5"
   },
   "peerDependencies": {
     "eslint": "^7.32.0 || ^8.2.0",
diff --git a/packages/eslint-config-airbnb/package.json b/packages/eslint-config-airbnb/package.json
index 69a4670f8e..622e30682f 100644
--- a/packages/eslint-config-airbnb/package.json
+++ b/packages/eslint-config-airbnb/package.json
@@ -82,7 +82,7 @@
     "in-publish": "^2.0.1",
     "react": ">= 0.13.0",
     "safe-publish-latest": "^2.0.0",
-    "tape": "^5.7.4"
+    "tape": "^5.7.5"
   },
   "peerDependencies": {
     "eslint": "^7.32.0 || ^8.2.0",

From 932951adc2d503d906c85b01179b4e1256c41896 Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Mon, 25 Mar 2024 09:31:09 -0700
Subject: [PATCH 1580/1591] [eslint config] [deps] update `eslint-plugin-react`

---
 packages/eslint-config-airbnb/package.json   | 4 ++--
 packages/eslint-config-airbnb/rules/react.js | 7 +++++++
 2 files changed, 9 insertions(+), 2 deletions(-)

diff --git a/packages/eslint-config-airbnb/package.json b/packages/eslint-config-airbnb/package.json
index 622e30682f..2b18a55f64 100644
--- a/packages/eslint-config-airbnb/package.json
+++ b/packages/eslint-config-airbnb/package.json
@@ -77,7 +77,7 @@
     "eslint-find-rules": "^4.1.0",
     "eslint-plugin-import": "^2.29.1",
     "eslint-plugin-jsx-a11y": "^6.8.0",
-    "eslint-plugin-react": "^7.33.2",
+    "eslint-plugin-react": "^7.34.1",
     "eslint-plugin-react-hooks": "^4.6.0",
     "in-publish": "^2.0.1",
     "react": ">= 0.13.0",
@@ -88,7 +88,7 @@
     "eslint": "^7.32.0 || ^8.2.0",
     "eslint-plugin-import": "^2.29.1",
     "eslint-plugin-jsx-a11y": "^6.8.0",
-    "eslint-plugin-react": "^7.33.2",
+    "eslint-plugin-react": "^7.34.1",
     "eslint-plugin-react-hooks": "^4.6.0"
   },
   "engines": {
diff --git a/packages/eslint-config-airbnb/rules/react.js b/packages/eslint-config-airbnb/rules/react.js
index ac4e4e29d3..b5ccc6ccf2 100644
--- a/packages/eslint-config-airbnb/rules/react.js
+++ b/packages/eslint-config-airbnb/rules/react.js
@@ -46,6 +46,13 @@ module.exports = {
       ],
     }],
 
+    // This rule enforces onChange or readonly attribute for checked property of input elements.
+    // https://github.com/jsx-eslint/eslint-plugin-react/blob/master/docs/rules/checked-requires-onchange-or-readonly.md
+    'react/checked-requires-onchange-or-readonly': ['off', {
+      ignoreMissingProperties: false,
+      ignoreExclusiveCheckedAttribute: false
+    }],
+
     // Prevent missing displayName in a React component definition
     // https://github.com/jsx-eslint/eslint-plugin-react/blob/master/docs/rules/display-name.md
     'react/display-name': ['off', { ignoreTranspilerName: false }],

From f20eca9f646954f2ebb0375e3a99b85e7b7161ad Mon Sep 17 00:00:00 2001
From: Riaz <muhammedriaz95@gmail.com>
Date: Mon, 25 Mar 2024 13:00:44 +0400
Subject: [PATCH 1581/1591] [guide] fix compat table URL

https://kangax.github.io/compat-table/es6/ hit a 404 error,

URL: https://compat-table.github.io/compat-table/es6/
---
 README.md | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/README.md b/README.md
index 9681aa4b51..120057b062 100644
--- a/README.md
+++ b/README.md
@@ -3406,7 +3406,7 @@ Other Style Guides
     this.firstName = 'Panda';
 
     // good, in environments where WeakMaps are available
-    // see https://kangax.github.io/compat-table/es6/#test-WeakMap
+    // see https://compat-table.github.io/compat-table/es6/#test-WeakMap
     const firstNames = new WeakMap();
     firstNames.set(this, 'Panda');
     ```
@@ -3860,7 +3860,7 @@ Other Style Guides
 
   - [Latest ECMA spec](https://tc39.github.io/ecma262/)
   - [ExploringJS](https://exploringjs.com/)
-  - [ES6 Compatibility Table](https://kangax.github.io/compat-table/es6/)
+  - [ES6 Compatibility Table](https://compat-table.github.io/compat-table/es6/)
   - [Comprehensive Overview of ES6 Features](http://es6-features.org/)
   - [JavaScript Roadmap](https://roadmap.sh/javascript)
 

From c25bce83be4db06e6a221d79686c485cd2ed5d5d Mon Sep 17 00:00:00 2001
From: Hadi <104451011+khanhadi@users.noreply.github.com>
Date: Sun, 7 Apr 2024 19:18:29 +0100
Subject: [PATCH 1582/1591] [readme] replace dead link with archive.org link

---
 README.md | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/README.md b/README.md
index 120057b062..0f66720755 100644
--- a/README.md
+++ b/README.md
@@ -3861,7 +3861,7 @@ Other Style Guides
   - [Latest ECMA spec](https://tc39.github.io/ecma262/)
   - [ExploringJS](https://exploringjs.com/)
   - [ES6 Compatibility Table](https://compat-table.github.io/compat-table/es6/)
-  - [Comprehensive Overview of ES6 Features](http://es6-features.org/)
+  - [Comprehensive Overview of ES6 Features](https://web.archive.org/web/20240404212626/http://es6-features.org/)
   - [JavaScript Roadmap](https://roadmap.sh/javascript)
 
 **Read This**

From 7a8f5687699bad856ca7bb7df0a731f0597a772a Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Fri, 20 Sep 2024 22:36:49 -0700
Subject: [PATCH 1583/1591] [eslint config] [patch] add new disabled react
 rules

---
 packages/eslint-config-airbnb/rules/react.js | 10 ++++++++--
 1 file changed, 8 insertions(+), 2 deletions(-)

diff --git a/packages/eslint-config-airbnb/rules/react.js b/packages/eslint-config-airbnb/rules/react.js
index b5ccc6ccf2..c4d29e0b39 100644
--- a/packages/eslint-config-airbnb/rules/react.js
+++ b/packages/eslint-config-airbnb/rules/react.js
@@ -583,17 +583,23 @@ module.exports = {
     // TODO: semver-major, enable
     'react/jsx-no-leaked-render': 'off',
 
-    // https://github.com/jsx-eslint/eslint-plugin-react/blob/66b58dd4864678eb869a7bf434c72ff7ac530eb1/docs/rules/no-object-type-as-default-prop.md
     // https://github.com/jsx-eslint/eslint-plugin-react/blob/66b58dd4864678eb869a7bf434c72ff7ac530eb1/docs/rules/no-object-type-as-default-prop.md
     // TODO: semver-major, enable
     'react/no-object-type-as-default-prop': 'off',
 
-    // https://github.com/jsx-eslint/eslint-plugin-react/blob/66b58dd4864678eb869a7bf434c72ff7ac530eb1/docs/rules/sort-default-props.md
     // https://github.com/jsx-eslint/eslint-plugin-react/blob/66b58dd4864678eb869a7bf434c72ff7ac530eb1/docs/rules/sort-default-props.md
     // TODO: semver-major, enable?
     'react/sort-default-props': ['off', {
       ignoreCase: false
     }],
+
+    // https://github.com/jsx-eslint/eslint-plugin-react/blob/9668ee0762acd5c23f53cd3a372e2d8d9563944d/docs/rules/forward-ref-uses-ref.md
+    // TODO: semver-major, enable
+    'react/forward-ref-uses-ref': 'off',
+
+    // https://github.com/jsx-eslint/eslint-plugin-react/blob/9668ee0762acd5c23f53cd3a372e2d8d9563944d/docs/rules/jsx-props-no-spread-multi.md
+    // TODO: semver-major, enable
+    'react/jsx-props-no-spread-multi': 'off',
   },
 
   settings: {

From e6f292286b1c03add35c98481337b5f26eebc06e Mon Sep 17 00:00:00 2001
From: Jordan Harband <ljharb@gmail.com>
Date: Fri, 20 Sep 2024 22:39:53 -0700
Subject: [PATCH 1584/1591] [eslint config] [*] [deps] update deps

---
 .../eslint-config-airbnb-base/package.json    |  8 ++++----
 packages/eslint-config-airbnb/package.json    | 20 +++++++++----------
 2 files changed, 14 insertions(+), 14 deletions(-)

diff --git a/packages/eslint-config-airbnb-base/package.json b/packages/eslint-config-airbnb-base/package.json
index 6ae226d583..8f039d4d7c 100644
--- a/packages/eslint-config-airbnb-base/package.json
+++ b/packages/eslint-config-airbnb-base/package.json
@@ -68,20 +68,20 @@
   },
   "homepage": "https://github.com/airbnb/javascript",
   "devDependencies": {
-    "@babel/runtime": "^7.23.9",
+    "@babel/runtime": "^7.25.6",
     "babel-preset-airbnb": "^4.5.0",
     "babel-tape-runner": "^3.0.0",
     "eclint": "^2.8.1",
     "eslint": "^7.32.0 || ^8.2.0",
     "eslint-find-rules": "^4.1.0",
-    "eslint-plugin-import": "^2.29.1",
+    "eslint-plugin-import": "^2.30.0",
     "in-publish": "^2.0.1",
     "safe-publish-latest": "^2.0.0",
-    "tape": "^5.7.5"
+    "tape": "^5.9.0"
   },
   "peerDependencies": {
     "eslint": "^7.32.0 || ^8.2.0",
-    "eslint-plugin-import": "^2.29.1"
+    "eslint-plugin-import": "^2.30.0"
   },
   "engines": {
     "node": "^10.12.0 || >=12.0.0"
diff --git a/packages/eslint-config-airbnb/package.json b/packages/eslint-config-airbnb/package.json
index 2b18a55f64..efa5be5cee 100644
--- a/packages/eslint-config-airbnb/package.json
+++ b/packages/eslint-config-airbnb/package.json
@@ -69,27 +69,27 @@
     "eslint-config-airbnb-base": "^15.0.0"
   },
   "devDependencies": {
-    "@babel/runtime": "^7.23.9",
+    "@babel/runtime": "^7.25.6",
     "babel-preset-airbnb": "^4.5.0",
     "babel-tape-runner": "^3.0.0",
     "eclint": "^2.8.1",
     "eslint": "^7.32.0 || ^8.2.0",
     "eslint-find-rules": "^4.1.0",
-    "eslint-plugin-import": "^2.29.1",
-    "eslint-plugin-jsx-a11y": "^6.8.0",
-    "eslint-plugin-react": "^7.34.1",
-    "eslint-plugin-react-hooks": "^4.6.0",
+    "eslint-plugin-import": "^2.30.0",
+    "eslint-plugin-jsx-a11y": "^6.10.0",
+    "eslint-plugin-react": "^7.36.1",
+    "eslint-plugin-react-hooks": "^4.6.2",
     "in-publish": "^2.0.1",
     "react": ">= 0.13.0",
     "safe-publish-latest": "^2.0.0",
-    "tape": "^5.7.5"
+    "tape": "^5.9.0"
   },
   "peerDependencies": {
     "eslint": "^7.32.0 || ^8.2.0",
-    "eslint-plugin-import": "^2.29.1",
-    "eslint-plugin-jsx-a11y": "^6.8.0",
-    "eslint-plugin-react": "^7.34.1",
-    "eslint-plugin-react-hooks": "^4.6.0"
+    "eslint-plugin-import": "^2.30.0",
+    "eslint-plugin-jsx-a11y": "^6.10.0",
+    "eslint-plugin-react": "^7.36.1",
+    "eslint-plugin-react-hooks": "^4.6.2"
   },
   "engines": {
     "node": "^10.12.0 || ^12.22.0 || ^14.17.0 || >=16.0.0"

From d1705c389ed3745f10139b32fca655c306dd56bb Mon Sep 17 00:00:00 2001
From: Ngene Arinzechukwu <120824375+emmanuel-455@users.noreply.github.com>
Date: Mon, 19 Feb 2024 16:47:10 +0100
Subject: [PATCH 1585/1591] [guide] [css] Added what BEM stands for (Block
 Element Modifier)

---
 css-in-javascript/README.md | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/css-in-javascript/README.md b/css-in-javascript/README.md
index d6162df55d..2e6ab68a1b 100644
--- a/css-in-javascript/README.md
+++ b/css-in-javascript/README.md
@@ -34,7 +34,7 @@
 
   - Use an underscore for modifiers to other styles.
 
-    > Why? Similar to BEM, this naming convention makes it clear that the styles are intended to modify the element preceded by the underscore. Underscores do not need to be quoted, so they are preferred over other characters, such as dashes.
+    > Why? Similar to [BEM](https://getbem.com/introduction/), this naming convention makes it clear that the styles are intended to modify the element preceded by the underscore. Underscores do not need to be quoted, so they are preferred over other characters, such as dashes.
 
     ```js
     // bad

From 39b970f7024006d34d40d5afdf763b32c9a8a074 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Kim=20Minh=20Th=E1=BA=AFng?= <thangved02@gmail.com>
Date: Tue, 24 Sep 2024 14:42:47 +0700
Subject: [PATCH 1586/1591] Add Zit Software to `In the Wild`
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

Signed-off-by: Kim Minh Thắng <thangved02@gmail.com>
---
 README.md | 1 +
 1 file changed, 1 insertion(+)

diff --git a/README.md b/README.md
index 0f66720755..e36a24265f 100644
--- a/README.md
+++ b/README.md
@@ -4028,6 +4028,7 @@ Other Style Guides
   - **WeBox Studio**: [weboxstudio/javascript](https://github.com/weboxstudio/javascript)
   - **Weggo**: [Weggo/javascript](https://github.com/Weggo/javascript)
   - **Zillow**: [zillow/javascript](https://github.com/zillow/javascript)
+  - **Zit Software**: [zit-software/javascript](https://github.com/zit-software/javascript)
   - **ZocDoc**: [ZocDoc/javascript](https://github.com/ZocDoc/javascript)
 
 **[⬆ back to top](#table-of-contents)**

From b912288e4bf7fa46d9254d3cdfa190e9b59f36c0 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E2=80=9Cnaandalist=E2=80=9D?=
 <listiananda.apriliawan@gmail.com>
Date: Sun, 22 Sep 2024 05:00:08 +0700
Subject: [PATCH 1587/1591] [readme] Remove dead URLs

---
 README.md | 4 ----
 1 file changed, 4 deletions(-)

diff --git a/README.md b/README.md
index e36a24265f..342443625a 100644
--- a/README.md
+++ b/README.md
@@ -3952,7 +3952,6 @@ Other Style Guides
   - **Axept**: [axept/javascript](https://github.com/axept/javascript)
   - **Billabong**: [billabong/javascript](https://github.com/billabong/javascript)
   - **Bisk**: [bisk](https://github.com/Bisk/)
-  - **Bonhomme**: [bonhommeparis/javascript](https://github.com/bonhommeparis/javascript)
   - **Brainshark**: [brainshark/javascript](https://github.com/brainshark/javascript)
   - **CaseNine**: [CaseNine/javascript](https://github.com/CaseNine/javascript)
   - **Cerner**: [Cerner](https://github.com/cerner/)
@@ -3965,7 +3964,6 @@ Other Style Guides
   - **Digitpaint** [digitpaint/javascript](https://github.com/digitpaint/javascript)
   - **Drupal**: [www.drupal.org](https://git.drupalcode.org/project/drupal/blob/8.6.x/core/.eslintrc.json)
   - **Ecosia**: [ecosia/javascript](https://github.com/ecosia/javascript)
-  - **Evernote**: [evernote/javascript-style-guide](https://github.com/evernote/javascript-style-guide)
   - **Evolution Gaming**: [evolution-gaming/javascript](https://github.com/evolution-gaming/javascript)
   - **EvozonJs**: [evozonjs/javascript](https://github.com/evozonjs/javascript)
   - **ExactTarget**: [ExactTarget/javascript](https://github.com/ExactTarget/javascript)
@@ -3978,7 +3976,6 @@ Other Style Guides
   - **Grooveshark**: [grooveshark/javascript](https://github.com/grooveshark/javascript)
   - **Grupo-Abraxas**: [Grupo-Abraxas/javascript](https://github.com/Grupo-Abraxas/javascript)
   - **Happeo**: [happeo/javascript](https://github.com/happeo/javascript)
-  - **Honey**: [honeyscience/javascript](https://github.com/honeyscience/javascript)
   - **How About We**: [howaboutwe/javascript](https://github.com/howaboutwe/javascript-style-guide)
   - **HubSpot**: [HubSpot/javascript](https://github.com/HubSpot/javascript)
   - **Hyper**: [hyperoslo/javascript-playbook](https://github.com/hyperoslo/javascript-playbook/blob/master/style.md)
@@ -4004,7 +4001,6 @@ Other Style Guides
   - **Pier 1**: [Pier1/javascript](https://github.com/pier1/javascript)
   - **Qotto**: [Qotto/javascript-style-guide](https://github.com/Qotto/javascript-style-guide)
   - **React**: [reactjs.org/docs/how-to-contribute.html#style-guide](https://reactjs.org/docs/how-to-contribute.html#style-guide)
-  - **REI**: [reidev/js-style-guide](https://github.com/rei/code-style-guides/)
   - **Ripple**: [ripple/javascript-style-guide](https://github.com/ripple/javascript-style-guide)
   - **Sainsbury’s Supermarkets**: [jsainsburyplc](https://github.com/jsainsburyplc)
   - **Shutterfly**: [shutterfly/javascript](https://github.com/shutterfly/javascript)

From e6080c7beed96700a599e7d86f1517bdc8269366 Mon Sep 17 00:00:00 2001
From: Richard Klees <richard.klees@concepts-and-training.de>
Date: Thu, 11 May 2023 17:30:30 +0200
Subject: [PATCH 1588/1591] [readme] add ILIAS to users

---
 README.md | 1 +
 1 file changed, 1 insertion(+)

diff --git a/README.md b/README.md
index 342443625a..9026489006 100644
--- a/README.md
+++ b/README.md
@@ -3979,6 +3979,7 @@ Other Style Guides
   - **How About We**: [howaboutwe/javascript](https://github.com/howaboutwe/javascript-style-guide)
   - **HubSpot**: [HubSpot/javascript](https://github.com/HubSpot/javascript)
   - **Hyper**: [hyperoslo/javascript-playbook](https://github.com/hyperoslo/javascript-playbook/blob/master/style.md)
+  - **ILIAS**: [ILIAS](https://github.com/ILIAS-eLearning/ILIAS)
   - **InterCity Group**: [intercitygroup/javascript-style-guide](https://github.com/intercitygroup/javascript-style-guide)
   - **Jam3**: [Jam3/Javascript-Code-Conventions](https://github.com/Jam3/Javascript-Code-Conventions)
   - **JSSolutions**: [JSSolutions/javascript](https://github.com/JSSolutions/javascript)

From f45bd1ebc0549d370ccd7cb0ca039b40d3be768b Mon Sep 17 00:00:00 2001
From: Anees Iqbal <hello@aneesiqbal.ai>
Date: Wed, 2 Oct 2024 01:14:01 +0400
Subject: [PATCH 1589/1591] [eslint config] [*] [fix] fix crash in eslint
 invocation with TIMING env set

---
 packages/eslint-config-airbnb-base/whitespace.js | 8 +++++++-
 packages/eslint-config-airbnb/whitespace.js      | 8 +++++++-
 2 files changed, 14 insertions(+), 2 deletions(-)

diff --git a/packages/eslint-config-airbnb-base/whitespace.js b/packages/eslint-config-airbnb-base/whitespace.js
index e896072154..01e5198671 100644
--- a/packages/eslint-config-airbnb-base/whitespace.js
+++ b/packages/eslint-config-airbnb-base/whitespace.js
@@ -51,5 +51,11 @@ if (CLIEngine) {
   const path = require('path');
   const { execSync } = require('child_process');
 
-  module.exports = JSON.parse(String(execSync(path.join(__dirname, 'whitespace-async.js'))));
+  // NOTE: ESLint adds runtime statistics to the output (so it's no longer JSON) if TIMING is set
+  module.exports = JSON.parse(String(execSync(path.join(__dirname, 'whitespace-async.js'), {
+    env: {
+      ...process.env,
+      TIMING: undefined,
+    }
+  })));
 }
diff --git a/packages/eslint-config-airbnb/whitespace.js b/packages/eslint-config-airbnb/whitespace.js
index e896072154..01e5198671 100644
--- a/packages/eslint-config-airbnb/whitespace.js
+++ b/packages/eslint-config-airbnb/whitespace.js
@@ -51,5 +51,11 @@ if (CLIEngine) {
   const path = require('path');
   const { execSync } = require('child_process');
 
-  module.exports = JSON.parse(String(execSync(path.join(__dirname, 'whitespace-async.js'))));
+  // NOTE: ESLint adds runtime statistics to the output (so it's no longer JSON) if TIMING is set
+  module.exports = JSON.parse(String(execSync(path.join(__dirname, 'whitespace-async.js'), {
+    env: {
+      ...process.env,
+      TIMING: undefined,
+    }
+  })));
 }

From 6499695ac11c4640ed0f77f8865a1adcb32d3239 Mon Sep 17 00:00:00 2001
From: Matheus Felipe <matheusfelipeog@protonmail.com>
Date: Fri, 13 Oct 2023 04:58:10 -0300
Subject: [PATCH 1590/1591] [readme] update link to es5 and es6 compat table in
 readme

---
 README.md | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/README.md b/README.md
index 9026489006..9a325a355b 100644
--- a/README.md
+++ b/README.md
@@ -3746,7 +3746,7 @@ Other Style Guides
 ## ECMAScript 5 Compatibility
 
   <a name="es5-compat--kangax"></a><a name="26.1"></a>
-  - [27.1](#es5-compat--kangax) Refer to [Kangax](https://twitter.com/kangax/)’s ES5 [compatibility table](https://kangax.github.io/es5-compat-table/).
+  - [27.1](#es5-compat--kangax) Refer to [Kangax](https://twitter.com/kangax/)’s ES5 [compatibility table](https://compat-table.github.io/compat-table/es5/).
 
 **[⬆ back to top](#table-of-contents)**
 

From 11f986fdc7d6b4c80e396437e9c45c939362bdee Mon Sep 17 00:00:00 2001
From: ptmkenny <1451472+ptmkenny@users.noreply.github.com>
Date: Sat, 7 Dec 2024 13:03:23 +0900
Subject: [PATCH 1591/1591] [eslint config] [deps] update
 `eslint-plugin-react-hooks`

---
 packages/eslint-config-airbnb/package.json | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/packages/eslint-config-airbnb/package.json b/packages/eslint-config-airbnb/package.json
index efa5be5cee..c36359ea7c 100644
--- a/packages/eslint-config-airbnb/package.json
+++ b/packages/eslint-config-airbnb/package.json
@@ -78,7 +78,7 @@
     "eslint-plugin-import": "^2.30.0",
     "eslint-plugin-jsx-a11y": "^6.10.0",
     "eslint-plugin-react": "^7.36.1",
-    "eslint-plugin-react-hooks": "^4.6.2",
+    "eslint-plugin-react-hooks": "^5.1.0",
     "in-publish": "^2.0.1",
     "react": ">= 0.13.0",
     "safe-publish-latest": "^2.0.0",
@@ -89,7 +89,7 @@
     "eslint-plugin-import": "^2.30.0",
     "eslint-plugin-jsx-a11y": "^6.10.0",
     "eslint-plugin-react": "^7.36.1",
-    "eslint-plugin-react-hooks": "^4.6.2"
+    "eslint-plugin-react-hooks": "^5.1.0"
   },
   "engines": {
     "node": "^10.12.0 || ^12.22.0 || ^14.17.0 || >=16.0.0"
