{"action":"created","comment":{"url":"https://api.github.com/repos/signpost/javascript/pulls/comments/114792662","pull_request_review_id":36290116,"id":114792662,"diff_hunk":"@@ -72,921 +79,2324 @@\n \n **[⬆ back to top](#table-of-contents)**\n \n+## References\n+\n+  <a name=\"references--prefer-const\"></a><a name=\"2.1\"></a>\n+  - [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)\n+\n+    > Why? This ensures that you can't reassign your references, which can lead to bugs and difficult to comprehend code.\n+\n+    ```javascript\n+    // bad\n+    var a = 1;\n+    var b = 2;\n+\n+    // good\n+    const a = 1;\n+    const b = 2;\n+    ```\n+\n+  <a name=\"references--disallow-var\"></a><a name=\"2.2\"></a>\n+  - [2.2](#references--disallow-var) If you must reassign references, use `let` instead of `var`. This should rarely be the case for non-primitive data types. As a general rule of thumb, you should avoid `let` in combination with non-primitive data types. Re-assigning a variable should happen consciously. eslint: [`no-var`](http://eslint.org/docs/rules/no-var.html) jscs: [`disallowVar`](http://jscs.info/rule/disallowVar)\n+\n+    > Why? `let` is block-scoped rather than function-scoped like `var`.\n+\n+    ```javascript\n+    // bad\n+    var count = 1;\n+    if (true) {\n+        count += 1;\n+    }\n+\n+    // good, use the let.\n+    let count = 1;\n+    if (true) {\n+        count += 1;\n+    }\n+    ```\n+\n+  <a name=\"references--block-scope\"></a><a name=\"2.3\"></a>\n+  - [2.3](#references--block-scope) Note that both `let` and `const` are block-scoped.\n+\n+    ```javascript\n+    // const and let only exist in the blocks they are defined in.\n+    {\n+        let a = 1;\n+        const b = 1;\n+    }\n+    console.log(a); // ReferenceError\n+    console.log(b); // ReferenceError\n+    ```\n+\n+**[⬆ back to top](#table-of-contents)**\n+\n ## Objects\n \n-  - Use the literal syntax for object creation.\n+  <a name=\"objects--no-new\"></a><a name=\"3.1\"></a>\n+  - [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)\n \n     ```javascript\n     // bad\n-    var item = new Object();\n+    const item = new Object();\n \n     // good\n-    var item = {};\n+    const item = {};\n     ```\n \n-  - 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)\n+  <a name=\"es6-computed-properties\"></a><a name=\"3.4\"></a>\n+  - [3.2](#es6-computed-properties) Use computed property names when creating objects with dynamic property names.\n+\n+    > Why? They allow you to define all the properties of an object in one place.\n \n     ```javascript\n+\n+    function getKey(k) {\n+        return `a key named ${k}`;\n+    }\n+\n     // bad\n-    var superman = {\n-      default: { clark: 'kent' },\n-      private: true\n+    const obj = {\n+        id: 5,\n+        name: 'San Francisco',\n     };\n+    obj[getKey('enabled')] = true;\n \n     // good\n-    var superman = {\n-      defaults: { clark: 'kent' },\n-      hidden: true\n+    const obj = {\n+        id: 5,\n+        name: 'San Francisco',\n+        [getKey('enabled')]: true,\n     };\n     ```\n \n-  - Use readable synonyms in place of reserved words.\n+  <a name=\"es6-object-shorthand\"></a><a name=\"3.5\"></a>\n+  - [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)\n \n     ```javascript\n     // bad\n-    var superman = {\n-      class: 'alien'\n-    };\n+    const atom = {\n+        value: 1,\n \n-    // bad\n-    var superman = {\n-      klass: 'alien'\n+        addValue: function (value) {\n+            return atom.value + value;\n+        },\n     };\n \n     // good\n-    var superman = {\n-      type: 'alien'\n+    const atom = {\n+        value: 1,\n+\n+        addValue(value) {\n+            return atom.value + value;\n+        },\n     };\n     ```\n \n-**[⬆ back to top](#table-of-contents)**\n-\n-## Arrays\n+  <a name=\"es6-object-concise\"></a><a name=\"3.6\"></a>\n+  - [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)\n \n-  - Use the literal syntax for array creation\n+    > Why? It is shorter to write and descriptive.\n \n     ```javascript\n+    const lukeSkywalker = 'Luke Skywalker';\n+\n     // bad\n-    var items = new Array();\n+    const obj = {\n+        lukeSkywalker: lukeSkywalker,\n+    };\n \n     // good\n-    var items = [];\n+    const obj = {\n+        lukeSkywalker,\n+    };\n     ```\n \n-  - If you don't know array length use Array#push.\n+  <a name=\"objects--grouped-shorthand\"></a><a name=\"3.7\"></a>\n+  - [3.5](#objects--grouped-shorthand) Group your shorthand properties at the beginning of your object declaration.\n \n-    ```javascript\n-    var someStack = [];\n+    > Why? It's easier to tell which properties are using the shorthand.\n \n+    ```javascript\n+    const anakinSkywalker = 'Anakin Skywalker';\n+    const lukeSkywalker = 'Luke Skywalker';\n \n     // bad\n-    someStack[someStack.length] = 'abracadabra';\n+    const obj = {\n+        episodeOne: 1,\n+        twoJediWalkIntoACantina: 2,\n+        lukeSkywalker,\n+        episodeThree: 3,\n+        mayTheFourth: 4,\n+        anakinSkywalker,\n+    };\n \n     // good\n-    someStack.push('abracadabra');\n+    const obj = {\n+        lukeSkywalker,\n+        anakinSkywalker,\n+        episodeOne: 1,\n+        twoJediWalkIntoACantina: 2,\n+        episodeThree: 3,\n+        mayTheFourth: 4,\n+    };\n     ```\n \n-  - When you need to copy an array use Array#slice. [jsPerf](http://jsperf.com/converting-arguments-to-an-array/7)\n+  <a name=\"objects--quoted-props\"></a><a name=\"3.8\"></a>\n+  - [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)\n \n-    ```javascript\n-    var len = items.length;\n-    var itemsCopy = [];\n-    var i;\n+    > Why? In general we consider it subjectively easier to read. It improves syntax highlighting, and is also more easily optimized by many JS engines.\n \n+    ```javascript\n     // bad\n-    for (i = 0; i < len; i++) {\n-      itemsCopy[i] = items[i];\n-    }\n+    const bad = {\n+        'foo': 3,\n+        'bar': 4,\n+        'data-blah': 5,\n+    };\n \n     // good\n-    itemsCopy = items.slice();\n+    const good = {\n+        foo: 3,\n+        bar: 4,\n+        'data-blah': 5,\n+    };\n     ```\n \n-  - To convert an array-like object to an array, use Array#slice.\n+  <a name=\"objects--prototype-builtins\"></a>\n+  - [3.7](#objects--prototype-builtins) Do not call `Object.prototype` methods directly, such as `hasOwnProperty`, `propertyIsEnumerable`, and `isPrototypeOf`.\n+\n+    > 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)`).\n \n     ```javascript\n-    function trigger() {\n-      var args = Array.prototype.slice.call(arguments);\n-      ...\n-    }\n+    // bad\n+    console.log(object.hasOwnProperty(key));\n+\n+    // good\n+    console.log(Object.prototype.hasOwnProperty.call(object, key));\n+\n+    // best\n+    const has = Object.prototype.hasOwnProperty; // cache the lookup once, in module scope.\n+    /* or */\n+    import has from 'has';\n+    // ...\n+    console.log(has.call(object, key));\n     ```\n \n **[⬆ back to top](#table-of-contents)**\n \n+## Arrays\n \n-## Strings\n-\n-  - Use single quotes `''` for strings\n+  <a name=\"arrays--literals\"></a><a name=\"4.1\"></a>\n+  - [4.1](#arrays--literals) Use the literal syntax for array creation. eslint: [`no-array-constructor`](http://eslint.org/docs/rules/no-array-constructor.html)\n \n     ```javascript\n     // bad\n-    var name = \"Bob Parr\";\n+    const items = new Array();\n \n     // good\n-    var name = 'Bob Parr';\n+    const items = [];\n+    ```\n+\n+  <a name=\"arrays--push\"></a><a name=\"4.2\"></a>\n+  - [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.\n+\n+    ```javascript\n+    const someStack = [];\n \n     // bad\n-    var fullName = \"Bob \" + this.lastName;\n+    someStack[someStack.length] = 'abracadabra';\n \n     // good\n-    var fullName = 'Bob ' + this.lastName;\n+    someStack.push('abracadabra');\n     ```\n \n-  - Strings longer than 80 characters should be written across multiple lines using string concatenation.\n-  - 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)\n+  <a name=\"es6-array-spreads\"></a><a name=\"4.3\"></a>\n+  - [4.3](#es6-array-spreads) Use array spreads `...` to copy arrays. Note that this will create a shallow copy of the array.\n \n     ```javascript\n     // bad\n-    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.';\n+    const len = items.length;\n+    const itemsCopy = [];\n+    let i;\n \n-    // bad\n-    var errorMessage = 'This is a super long error that was thrown because \\\n-    of Batman. When you stop to think about how Batman had anything to do \\\n-    with this, you would get nowhere \\\n-    fast.';\n+    for (i = 0; i < len; i += 1) {\n+        itemsCopy[i] = items[i];\n+    }\n \n     // good\n-    var errorMessage = 'This is a super long error that was thrown because ' +\n-      'of Batman. When you stop to think about how Batman had anything to do ' +\n-      'with this, you would get nowhere fast.';\n+    const itemsCopy = [...items];\n     ```\n \n-  - 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).\n+  <a name=\"arrays--from\"></a><a name=\"4.4\"></a>\n+  - [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).\n \n     ```javascript\n-    var items;\n-    var messages;\n-    var length;\n-    var i;\n+    const foo = document.querySelectorAll('.foo');\n+    const nodes = Array.from(foo);\n+    ```\n \n-    messages = [{\n-      state: 'success',\n-      message: 'This one worked.'\n-    }, {\n-      state: 'success',\n-      message: 'This one worked as well.'\n-    }, {\n-      state: 'error',\n-      message: 'This one did not work.'\n-    }];\n+**[⬆ back to top](#table-of-contents)**\n \n-    length = messages.length;\n+<a name=\"arrays--bracket-newline\"></a>\n+  - [4.6](#arrays--bracket-newline) Use line breaks after open and before close array brackets if an array has multiple lines\n \n-    // bad\n-    function inbox(messages) {\n-      items = '<ul>';\n+  ```javascript\n+  // bad\n+  const arr = [\n+      [0, 1], [2, 3], [4, 5],\n+  ];\n \n-      for (i = 0; i < length; i++) {\n-        items += '<li>' + messages[i].message + '</li>';\n-      }\n+  const objectInArray = [{\n+      id: 1,\n+  }, {\n+      id: 2,\n+  }];\n \n-      return items + '</ul>';\n-    }\n+  const numberInArray = [\n+      1, 2,\n+  ];\n \n-    // good\n-    function inbox(messages) {\n-      items = [];\n+  // good\n+  const arr = [[0, 1], [2, 3], [4, 5]];\n \n-      for (i = 0; i < length; i++) {\n-        items[i] = messages[i].message;\n-      }\n+  const objectInArray = [\n+      {\n+          id: 1,\n+      },\n+      {\n+          id: 2,\n+      },\n+  ];\n \n-      return '<ul><li>' + items.join('</li><li>') + '</li></ul>';\n-    }\n-    ```\n+  const numberInArray = [\n+      1,\n+      2,\n+  ];\n+  ```\n \n **[⬆ back to top](#table-of-contents)**\n \n+## Destructuring\n \n-## Functions\n+  <a name=\"destructuring--object\"></a><a name=\"5.1\"></a>\n+  - [5.1](#destructuring--object) Use object destructuring when accessing and using multiple properties of an object. jscs: [`requireObjectDestructuring`](http://jscs.info/rule/requireObjectDestructuring)\n \n-  - Function expressions:\n+    > Why? Destructuring saves you from creating temporary references for those properties.\n \n     ```javascript\n-    // anonymous function expression - note the space between the function keyword and the param list\n-    var anonymous = function () {\n-      return true;\n-    };\n+    // bad\n+    function getFullName(user) {\n+        const firstName = user.firstName;\n+        const lastName = user.lastName;\n \n-    // named function expression\n-    var named = function named() {\n-      return true;\n-    };\n+        return `${firstName} ${lastName}`;\n+    }\n \n-    // immediately-invoked function expression (IIFE)\n-    (function() {\n-      console.log('Welcome to the Internet. Please follow me.');\n-    })();\n+    // good\n+    function getFullName(user) {\n+        const { firstName, lastName } = user;\n+        return `${firstName} ${lastName}`;\n+    }\n+\n+    // best\n+    function getFullName({ firstName, lastName }) {\n+        return `${firstName} ${lastName}`;\n+    }\n     ```\n \n-  - 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.\n-  - **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).\n+  <a name=\"destructuring--array\"></a><a name=\"5.2\"></a>\n+  - [5.2](#destructuring--array) Use array destructuring. jscs: [`requireArrayDestructuring`](http://jscs.info/rule/requireArrayDestructuring)\n \n     ```javascript\n+    const arr = [1, 2, 3, 4];\n+\n     // bad\n-    if (currentUser) {\n-      function test() {\n-        console.log('Nope.');\n-      }\n-    }\n+    const first = arr[0];\n+    const second = arr[1];\n \n     // good\n-    var test;\n-    if (currentUser) {\n-      test = function test() {\n-        console.log('Yup.');\n-      };\n-    }\n+    const [first, second] = arr;\n     ```\n \n-  - Never name a parameter `arguments`, this will take precedence over the `arguments` object that is given to every function scope.\n+  <a name=\"destructuring--object-over-array\"></a><a name=\"5.3\"></a>\n+  - [5.3](#destructuring--object-over-array) Use object destructuring for multiple return values, not array destructuring. jscs: [`disallowArrayDestructuringReturn`](http://jscs.info/rule/disallowArrayDestructuringReturn)\n+\n+    > Why? You can add new properties over time or change the order of things without breaking call sites.\n \n     ```javascript\n     // bad\n-    function nope(name, options, arguments) {\n-      // ...stuff...\n+    function processInput(input) {\n+        // then a miracle occurs\n+        return [left, right, top, bottom];\n     }\n \n+    // the caller needs to think about the order of return data\n+    const [left, __, top] = processInput(input);\n+\n     // good\n-    function yup(name, options, args) {\n-      // ...stuff...\n+    function processInput(input) {\n+        // then a miracle occurs\n+        return { left, right, top, bottom };\n     }\n+\n+    // the caller selects only the data they need\n+    const { left, top } = processInput(input);\n     ```\n \n+\n **[⬆ back to top](#table-of-contents)**\n \n+## Strings\n \n+  <a name=\"strings--quotes\"></a><a name=\"6.1\"></a>\n+  - [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)\n \n-## Properties\n+    ```javascript\n+    // bad\n+    const name = \"Capt. Janeway\";\n+\n+    // bad - template literals should contain interpolation or newlines\n+    const name = `Capt. Janeway`;\n+\n+    // good\n+    const name = 'Capt. Janeway';\n+    ```\n+\n+  <a name=\"strings--line-length\"></a><a name=\"6.2\"></a>\n+  - [6.2](#strings--line-length) Strings that cause the line to go over 100/120 characters should not be written across multiple lines using string concatenation.\n \n-  - Use dot notation when accessing properties.\n+    > Why? Broken strings are painful to work with and make code less searchable.\n \n     ```javascript\n-    var luke = {\n-      jedi: true,\n-      age: 28\n-    };\n+    // bad\n+    const errorMessage = 'This is a super long error that was thrown because \\\n+    of Batman. When you stop to think about how Batman had anything to do \\\n+    with this, you would get nowhere \\\n+    fast.';\n \n     // bad\n-    var isJedi = luke['jedi'];\n+    const errorMessage = 'This is a super long error that was thrown because ' +\n+        'of Batman. When you stop to think about how Batman had anything to do ' +\n+        'with this, you would get nowhere fast.';\n \n     // good\n-    var isJedi = luke.jedi;\n+    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.';\n     ```\n \n-  - Use subscript notation `[]` when accessing properties with a variable.\n+  <a name=\"es6-template-literals\"></a><a name=\"6.4\"></a>\n+  - [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)\n+\n+    > Why? Template strings give you a readable, concise syntax with proper newlines and string interpolation features.\n \n     ```javascript\n-    var luke = {\n-      jedi: true,\n-      age: 28\n-    };\n+    // bad\n+    function sayHi(name) {\n+        return 'How are you, ' + name + '?';\n+    }\n \n-    function getProp(prop) {\n-      return luke[prop];\n+    // bad\n+    function sayHi(name) {\n+        return ['How are you, ', name, '?'].join();\n     }\n \n-    var isJedi = getProp('jedi');\n-    ```\n+    // bad\n+    function sayHi(name) {\n+        return `How are you, ${ name }?`;\n+    }\n \n-**[⬆ back to top](#table-of-contents)**\n+    // good\n+    function sayHi(name) {\n+        return `How are you, ${name}?`;\n+    }\n+    ```\n \n+  <a name=\"strings--eval\"></a><a name=\"6.5\"></a>\n+  - [6.4](#strings--eval) Never use `eval()` on a string, it opens too many vulnerabilities.\n \n-## Variables\n+  <a name=\"strings--escaping\"></a>\n+  - [6.5](#strings--escaping) Do not unnecessarily escape characters in strings. eslint: [`no-useless-escape`](http://eslint.org/docs/rules/no-useless-escape)\n \n-  - 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.\n+    > Why? Backslashes harm readability, thus they should only be present when necessary.\n \n     ```javascript\n     // bad\n-    superPower = new SuperPower();\n+    const foo = '\\'this\\' \\i\\s \\\"quoted\\\"';\n \n     // good\n-    var superPower = new SuperPower();\n+    const foo = '\\'this\\' is \"quoted\"';\n+    const foo = `my name is '${name}'`;\n     ```\n \n-  - Use one `var` declaration per variable.\n-    It's easier to add new variable declarations this way, and you never have\n-    to worry about swapping out a `;` for a `,` or introducing punctuation-only\n-    diffs. \n+**[⬆ back to top](#table-of-contents)**\n+\n+\n+## Functions\n+\n+  <a name=\"functions--declarations\"></a><a name=\"7.1\"></a>\n+  - [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)\n+\n+    > 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))\n \n     ```javascript\n     // bad\n-    var items = getItems(),\n-        goSportsTeam = true,\n-        dragonball = 'z';\n+    function foo() {\n+        // ...\n+    }\n \n     // bad\n-    // (compare to above, and try to spot the mistake)\n-    var items = getItems(),\n-        goSportsTeam = true;\n-        dragonball = 'z';\n+    const foo = function () {\n+        // ...\n+    };\n \n     // good\n-    var items = getItems();\n-    var goSportsTeam = true;\n-    var dragonball = 'z';\n+    const foo = function bar() {\n+        // ...\n+    };\n     ```\n \n-  - 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.\n+  <a name=\"functions--in-blocks\"></a><a name=\"7.2\"></a>\n+  - [7.2](#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)","path":"README.md","position":729,"original_position":729,"commit_id":"68f3c0142ec3b497fa983c2d0f45b146ca899d63","original_commit_id":"68f3c0142ec3b497fa983c2d0f45b146ca899d63","user":{"login":"rpaterson","id":6112804,"avatar_url":"https://avatars0.githubusercontent.com/u/6112804?v=3","gravatar_id":"","url":"https://api.github.com/users/rpaterson","html_url":"https://github.com/rpaterson","followers_url":"https://api.github.com/users/rpaterson/followers","following_url":"https://api.github.com/users/rpaterson/following{/other_user}","gists_url":"https://api.github.com/users/rpaterson/gists{/gist_id}","starred_url":"https://api.github.com/users/rpaterson/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/rpaterson/subscriptions","organizations_url":"https://api.github.com/users/rpaterson/orgs","repos_url":"https://api.github.com/users/rpaterson/repos","events_url":"https://api.github.com/users/rpaterson/events{/privacy}","received_events_url":"https://api.github.com/users/rpaterson/received_events","type":"User","site_admin":false},"body":"It's not that you _can't_ - you always can.  It's just sometimes annoying or unnatural to do so, and if there's no benefit in our environment then I don't see the benefit of this rule.","created_at":"2017-05-04T14:46:31Z","updated_at":"2017-05-04T14:46:31Z","html_url":"https://github.com/signpost/javascript/pull/4#discussion_r114792662","pull_request_url":"https://api.github.com/repos/signpost/javascript/pulls/4","_links":{"self":{"href":"https://api.github.com/repos/signpost/javascript/pulls/comments/114792662"},"html":{"href":"https://github.com/signpost/javascript/pull/4#discussion_r114792662"},"pull_request":{"href":"https://api.github.com/repos/signpost/javascript/pulls/4"}}},"pull_request":{"url":"https://api.github.com/repos/signpost/javascript/pulls/4","id":118853409,"html_url":"https://github.com/signpost/javascript/pull/4","diff_url":"https://github.com/signpost/javascript/pull/4.diff","patch_url":"https://github.com/signpost/javascript/pull/4.patch","issue_url":"https://api.github.com/repos/signpost/javascript/issues/4","number":4,"state":"open","locked":false,"title":"Update signpost styleguide (readme)","user":{"login":"adressel","id":5394703,"avatar_url":"https://avatars2.githubusercontent.com/u/5394703?v=3","gravatar_id":"","url":"https://api.github.com/users/adressel","html_url":"https://github.com/adressel","followers_url":"https://api.github.com/users/adressel/followers","following_url":"https://api.github.com/users/adressel/following{/other_user}","gists_url":"https://api.github.com/users/adressel/gists{/gist_id}","starred_url":"https://api.github.com/users/adressel/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/adressel/subscriptions","organizations_url":"https://api.github.com/users/adressel/orgs","repos_url":"https://api.github.com/users/adressel/repos","events_url":"https://api.github.com/users/adressel/events{/privacy}","received_events_url":"https://api.github.com/users/adressel/received_events","type":"User","site_admin":false},"body":"This PR's goal is to discuss and then update the README in Signpost's javascript style guide. While there are other files from the merge with airbnb/master, let's please focus on discussing the file README.md on the top level of this repository.\r\nIn a subsequent PR, I intend to update the linters with the rules we agree on.\r\n\r\nThanks to Matt E for giving me some of his inputs!","created_at":"2017-05-03T20:58:13Z","updated_at":"2017-05-04T14:46:31Z","closed_at":null,"merged_at":null,"merge_commit_sha":"b0282fcd93b495fa1fda8f4fa3efd2c96d48382f","assignee":null,"assignees":[],"milestone":null,"commits_url":"https://api.github.com/repos/signpost/javascript/pulls/4/commits","review_comments_url":"https://api.github.com/repos/signpost/javascript/pulls/4/comments","review_comment_url":"https://api.github.com/repos/signpost/javascript/pulls/comments{/number}","comments_url":"https://api.github.com/repos/signpost/javascript/issues/4/comments","statuses_url":"https://api.github.com/repos/signpost/javascript/statuses/68f3c0142ec3b497fa983c2d0f45b146ca899d63","head":{"label":"adressel:master","ref":"master","sha":"68f3c0142ec3b497fa983c2d0f45b146ca899d63","user":{"login":"adressel","id":5394703,"avatar_url":"https://avatars2.githubusercontent.com/u/5394703?v=3","gravatar_id":"","url":"https://api.github.com/users/adressel","html_url":"https://github.com/adressel","followers_url":"https://api.github.com/users/adressel/followers","following_url":"https://api.github.com/users/adressel/following{/other_user}","gists_url":"https://api.github.com/users/adressel/gists{/gist_id}","starred_url":"https://api.github.com/users/adressel/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/adressel/subscriptions","organizations_url":"https://api.github.com/users/adressel/orgs","repos_url":"https://api.github.com/users/adressel/repos","events_url":"https://api.github.com/users/adressel/events{/privacy}","received_events_url":"https://api.github.com/users/adressel/received_events","type":"User","site_admin":false},"repo":{"id":89613969,"name":"javascript","full_name":"adressel/javascript","owner":{"login":"adressel","id":5394703,"avatar_url":"https://avatars2.githubusercontent.com/u/5394703?v=3","gravatar_id":"","url":"https://api.github.com/users/adressel","html_url":"https://github.com/adressel","followers_url":"https://api.github.com/users/adressel/followers","following_url":"https://api.github.com/users/adressel/following{/other_user}","gists_url":"https://api.github.com/users/adressel/gists{/gist_id}","starred_url":"https://api.github.com/users/adressel/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/adressel/subscriptions","organizations_url":"https://api.github.com/users/adressel/orgs","repos_url":"https://api.github.com/users/adressel/repos","events_url":"https://api.github.com/users/adressel/events{/privacy}","received_events_url":"https://api.github.com/users/adressel/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/adressel/javascript","description":"JavaScript Style Guide","fork":true,"url":"https://api.github.com/repos/adressel/javascript","forks_url":"https://api.github.com/repos/adressel/javascript/forks","keys_url":"https://api.github.com/repos/adressel/javascript/keys{/key_id}","collaborators_url":"https://api.github.com/repos/adressel/javascript/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/adressel/javascript/teams","hooks_url":"https://api.github.com/repos/adressel/javascript/hooks","issue_events_url":"https://api.github.com/repos/adressel/javascript/issues/events{/number}","events_url":"https://api.github.com/repos/adressel/javascript/events","assignees_url":"https://api.github.com/repos/adressel/javascript/assignees{/user}","branches_url":"https://api.github.com/repos/adressel/javascript/branches{/branch}","tags_url":"https://api.github.com/repos/adressel/javascript/tags","blobs_url":"https://api.github.com/repos/adressel/javascript/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/adressel/javascript/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/adressel/javascript/git/refs{/sha}","trees_url":"https://api.github.com/repos/adressel/javascript/git/trees{/sha}","statuses_url":"https://api.github.com/repos/adressel/javascript/statuses/{sha}","languages_url":"https://api.github.com/repos/adressel/javascript/languages","stargazers_url":"https://api.github.com/repos/adressel/javascript/stargazers","contributors_url":"https://api.github.com/repos/adressel/javascript/contributors","subscribers_url":"https://api.github.com/repos/adressel/javascript/subscribers","subscription_url":"https://api.github.com/repos/adressel/javascript/subscription","commits_url":"https://api.github.com/repos/adressel/javascript/commits{/sha}","git_commits_url":"https://api.github.com/repos/adressel/javascript/git/commits{/sha}","comments_url":"https://api.github.com/repos/adressel/javascript/comments{/number}","issue_comment_url":"https://api.github.com/repos/adressel/javascript/issues/comments{/number}","contents_url":"https://api.github.com/repos/adressel/javascript/contents/{+path}","compare_url":"https://api.github.com/repos/adressel/javascript/compare/{base}...{head}","merges_url":"https://api.github.com/repos/adressel/javascript/merges","archive_url":"https://api.github.com/repos/adressel/javascript/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/adressel/javascript/downloads","issues_url":"https://api.github.com/repos/adressel/javascript/issues{/number}","pulls_url":"https://api.github.com/repos/adressel/javascript/pulls{/number}","milestones_url":"https://api.github.com/repos/adressel/javascript/milestones{/number}","notifications_url":"https://api.github.com/repos/adressel/javascript/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/adressel/javascript/labels{/name}","releases_url":"https://api.github.com/repos/adressel/javascript/releases{/id}","deployments_url":"https://api.github.com/repos/adressel/javascript/deployments","created_at":"2017-04-27T15:42:30Z","updated_at":"2017-05-01T15:39:38Z","pushed_at":"2017-05-03T20:50:25Z","git_url":"git://github.com/adressel/javascript.git","ssh_url":"git@github.com:adressel/javascript.git","clone_url":"https://github.com/adressel/javascript.git","svn_url":"https://github.com/adressel/javascript","homepage":null,"size":407,"stargazers_count":0,"watchers_count":0,"language":"JavaScript","has_issues":false,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":0,"mirror_url":null,"open_issues_count":0,"forks":0,"open_issues":0,"watchers":0,"default_branch":"master"}},"base":{"label":"signpost:master","ref":"master","sha":"07848b4f59e0020578111be643ba45f73d631753","user":{"login":"signpost","id":296903,"avatar_url":"https://avatars2.githubusercontent.com/u/296903?v=3","gravatar_id":"","url":"https://api.github.com/users/signpost","html_url":"https://github.com/signpost","followers_url":"https://api.github.com/users/signpost/followers","following_url":"https://api.github.com/users/signpost/following{/other_user}","gists_url":"https://api.github.com/users/signpost/gists{/gist_id}","starred_url":"https://api.github.com/users/signpost/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/signpost/subscriptions","organizations_url":"https://api.github.com/users/signpost/orgs","repos_url":"https://api.github.com/users/signpost/repos","events_url":"https://api.github.com/users/signpost/events{/privacy}","received_events_url":"https://api.github.com/users/signpost/received_events","type":"Organization","site_admin":false},"repo":{"id":27802226,"name":"javascript","full_name":"signpost/javascript","owner":{"login":"signpost","id":296903,"avatar_url":"https://avatars2.githubusercontent.com/u/296903?v=3","gravatar_id":"","url":"https://api.github.com/users/signpost","html_url":"https://github.com/signpost","followers_url":"https://api.github.com/users/signpost/followers","following_url":"https://api.github.com/users/signpost/following{/other_user}","gists_url":"https://api.github.com/users/signpost/gists{/gist_id}","starred_url":"https://api.github.com/users/signpost/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/signpost/subscriptions","organizations_url":"https://api.github.com/users/signpost/orgs","repos_url":"https://api.github.com/users/signpost/repos","events_url":"https://api.github.com/users/signpost/events{/privacy}","received_events_url":"https://api.github.com/users/signpost/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/signpost/javascript","description":"JavaScript Style Guide","fork":true,"url":"https://api.github.com/repos/signpost/javascript","forks_url":"https://api.github.com/repos/signpost/javascript/forks","keys_url":"https://api.github.com/repos/signpost/javascript/keys{/key_id}","collaborators_url":"https://api.github.com/repos/signpost/javascript/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/signpost/javascript/teams","hooks_url":"https://api.github.com/repos/signpost/javascript/hooks","issue_events_url":"https://api.github.com/repos/signpost/javascript/issues/events{/number}","events_url":"https://api.github.com/repos/signpost/javascript/events","assignees_url":"https://api.github.com/repos/signpost/javascript/assignees{/user}","branches_url":"https://api.github.com/repos/signpost/javascript/branches{/branch}","tags_url":"https://api.github.com/repos/signpost/javascript/tags","blobs_url":"https://api.github.com/repos/signpost/javascript/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/signpost/javascript/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/signpost/javascript/git/refs{/sha}","trees_url":"https://api.github.com/repos/signpost/javascript/git/trees{/sha}","statuses_url":"https://api.github.com/repos/signpost/javascript/statuses/{sha}","languages_url":"https://api.github.com/repos/signpost/javascript/languages","stargazers_url":"https://api.github.com/repos/signpost/javascript/stargazers","contributors_url":"https://api.github.com/repos/signpost/javascript/contributors","subscribers_url":"https://api.github.com/repos/signpost/javascript/subscribers","subscription_url":"https://api.github.com/repos/signpost/javascript/subscription","commits_url":"https://api.github.com/repos/signpost/javascript/commits{/sha}","git_commits_url":"https://api.github.com/repos/signpost/javascript/git/commits{/sha}","comments_url":"https://api.github.com/repos/signpost/javascript/comments{/number}","issue_comment_url":"https://api.github.com/repos/signpost/javascript/issues/comments{/number}","contents_url":"https://api.github.com/repos/signpost/javascript/contents/{+path}","compare_url":"https://api.github.com/repos/signpost/javascript/compare/{base}...{head}","merges_url":"https://api.github.com/repos/signpost/javascript/merges","archive_url":"https://api.github.com/repos/signpost/javascript/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/signpost/javascript/downloads","issues_url":"https://api.github.com/repos/signpost/javascript/issues{/number}","pulls_url":"https://api.github.com/repos/signpost/javascript/pulls{/number}","milestones_url":"https://api.github.com/repos/signpost/javascript/milestones{/number}","notifications_url":"https://api.github.com/repos/signpost/javascript/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/signpost/javascript/labels{/name}","releases_url":"https://api.github.com/repos/signpost/javascript/releases{/id}","deployments_url":"https://api.github.com/repos/signpost/javascript/deployments","created_at":"2014-12-10T04:29:34Z","updated_at":"2017-05-03T20:59:49Z","pushed_at":"2017-05-03T20:58:14Z","git_url":"git://github.com/signpost/javascript.git","ssh_url":"git@github.com:signpost/javascript.git","clone_url":"https://github.com/signpost/javascript.git","svn_url":"https://github.com/signpost/javascript","homepage":null,"size":591,"stargazers_count":0,"watchers_count":0,"language":null,"has_issues":false,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":4,"mirror_url":null,"open_issues_count":1,"forks":4,"open_issues":1,"watchers":0,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/signpost/javascript/pulls/4"},"html":{"href":"https://github.com/signpost/javascript/pull/4"},"issue":{"href":"https://api.github.com/repos/signpost/javascript/issues/4"},"comments":{"href":"https://api.github.com/repos/signpost/javascript/issues/4/comments"},"review_comments":{"href":"https://api.github.com/repos/signpost/javascript/pulls/4/comments"},"review_comment":{"href":"https://api.github.com/repos/signpost/javascript/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/signpost/javascript/pulls/4/commits"},"statuses":{"href":"https://api.github.com/repos/signpost/javascript/statuses/68f3c0142ec3b497fa983c2d0f45b146ca899d63"}}}}
{"actor":{"display_login":"rpaterson"}}