UNPKG

28.3 kBMarkdownView Raw
1# Changelog
2
3<!-- ## Unreleased -->
4
5## [24.0.0] - 2018-08-30
6
7### Fixed
8* `plugin:shopify/flow` now disables rules checked by Flow's static analyzer. ([#135](https://github.com/Shopify/eslint-plugin-shopify/pull/135))
9* `plugin:shopify/prettier` and `plugin:shopify/typescript-prettier` defer missing semicolon rules to a project´s `.prettierrc`. ([#135](https://github.com/Shopify/eslint-plugin-shopify/pull/135))
10* Updated `strict-component-boundaries` to exclude fixture imports. ([#117](https://github.com/Shopify/eslint-plugin-shopify/pull/117))
11* Updated `strict-component-boundaries` to exclude imports from node_modules. ([#140](https://github.com/Shopify/eslint-plugin-shopify/pull/140))
12* Updated `jest/no-vague-titles` to support `.each` syntax. ([#148](https://github.com/Shopify/eslint-plugin-shopify/pull/148))
13
14### Changed
15* Namespaced `prefer-pascal-case-enums` and `prefer-singular-enums` under `typescript`. ([#141](https://github.com/Shopify/eslint-plugin-shopify/pull/141))
16* **Breaking:** Updated to eslint `v5.4.0`. Consuming projects must be using [supported](https://eslint.org/docs/user-guide/migrating-to-5.0.0#-nodejs-4-is-no-longer-supported) node versions, we recommend `^8.10.0`. See details on the v4 to v5 [migration guide](https://eslint.org/docs/user-guide/migrating-to-5.0.0). ([#151](https://github.com/Shopify/eslint-plugin-shopify/pull/151))
17
18### Added
19* `shopify/prefer-singular-enums` ([#132](https://github.com/Shopify/eslint-plugin-shopify/pull/132))
20* `shopify/react-no-multiple-render-methods` ([#134](https://github.com/Shopify/eslint-plugin-shopify/pull/134))
21
22* New eslint rules and plugins rules: ([#151](https://github.com/Shopify/eslint-plugin-shopify/pull/151))
23 * [`max-classes-per-file`](https://eslint.org/docs/rules/max-classes-per-file) (disabled)
24 * [`no-self-assign`](https://eslint.org/docs/rules/no-self-assign)
25 * [`require-unicode-regexp`](https://eslint.org/docs/rules/require-unicode-regexp) (disabled)
26 * [`no-async-promise-executor`](https://eslint.org/docs/rules/no-async-promise-executor)
27 * [`no-misleading-character-class`](https://eslint.org/docs/rules/no-misleading-character-class)
28 * [`require-atomic-updates`](https://eslint.org/docs/rules/require-atomic-updates)
29 * [`lines-between-class-members`](https://eslint.org/docs/rules/lines-between-class-members)
30 * [`max-lines-per-function`](https://eslint.org/docs/rules/max-lines-per-function) (disabled)
31 * [`multiline-comment-style`](https://eslint.org/docs/rules/multiline-comment-style) (disabled)
32 * [`prefer-object-spread`](https://eslint.org/docs/rules/prefer-object-spread)
33 * [`import/no-self-import`](https://github.com/benmosher/eslint-plugin-import/blob/master/docs/rules/no-self-import.md)
34 * [`import/no-cycle`](https://github.com/benmosher/eslint-plugin-import/blob/master/docs/rules/no-cycle.md)
35 * [`import/no-relative-parent-imports`](https://github.com/benmosher/eslint-plugin-import/blob/master/docs/rules/no-relative-parent-imports.md)
36 * [`jest/expect-expect`](https://github.com/jest-community/eslint-plugin-jest/blob/master/docs/rules/expect-expect.md)
37 * [`jest/no-jasmine-globals`](https://github.com/jest-community/eslint-plugin-jest/blob/master/docs/rules/no-jasmine-globals.md)
38 * [`jest/prefer-inline-snapshots`](https://github.com/jest-community/eslint-plugin-jest/blob/master/docs/rules/prefer-inline-snapshots.md) (disabled)
39 * [`jest/no-test-return-statement`](https://github.com/jest-community/eslint-plugin-jest/blob/master/docs/rules/no-test-return-statement.md)
40 * [`node/prefer-global/buffer`](https://github.com/mysticatea/eslint-plugin-node/blob/master/docs/rules/prefer-global/buffer.md)
41 * [`node/prefer-global/console`](https://github.com/mysticatea/eslint-plugin-node/blob/master/docs/rules/prefer-global/console.md)
42 * [`node/prefer-global/process`](https://github.com/mysticatea/eslint-plugin-node/blob/master/docs/rules/prefer-global/process.md0)
43 * [`node/prefer-global/url-search-params`](https://github.com/mysticatea/eslint-plugin-node/blob/master/lib/rules/prefer-global/url-search-params.js)
44 * [`node/prefer-global/url`](https://github.com/mysticatea/eslint-plugin-node/blob/master/docs/rules/prefer-global/url.md)
45 * [`node/no-unsupported-features/es-builtins`](https://github.com/mysticatea/eslint-plugin-node/blob/master/docs/rules/no-unsupported-features/es-builtins.md) (disabled)
46 * [`node/no-unsupported-features/es-syntax`](https://github.com/mysticatea/eslint-plugin-node/blob/master/docs/rules/no-unsupported-features/es-syntax.md) (disabled)
47 * [`node/no-unsupported-features/node-builtins`](https://github.com/mysticatea/eslint-plugin-node/blob/master/docs/rules/no-unsupported-features/node-builtins.md)
48 * [`react/no-unsafe`](https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/no-unsafe.md)
49 * [`react/jsx-props-no-multi-spaces`](https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/jsx-props-no-multi-spaces.md)
50 * [`typescript/no-inferrable-types`](https://github.com/nzakas/eslint-plugin-typescript/blob/master/docs/rules/no-inferrable-types.md)
51 * [`typescript/no-var-requires`](https://github.com/nzakas/eslint-plugin-typescript/blob/master/docs/rules/no-var-requires.md)
52
53
54## [23.1.0] - 2018-08-02
55
56### Fixed
57* Updated `typescript-eslint-parser` dependency to version 17.0.1 in order to support TypeScript 3. ([#121](https://github.com/Shopify/eslint-plugin-shopify/pull/121))
58* Removed default prettier configurations. `plugin:shopify/prettier` and `plugin:shopify/typescript-prettier` now defer Prettier's config to a project's `.prettierrc`. ([#121](https://github.com/Shopify/eslint-plugin-shopify/pull/121))
59
60### Changed
61* Included `all` as a vague term for `no-vague-titles` ([#114](https://github.com/Shopify/eslint-plugin-shopify/pull/114))
62
63## [23.0.0] - 2018-07-16
64* **Breaking** `eslint-plugin-shopify` will no longer install `prettier` as a dependency. Please ensure you have added `prettier` to your `package.json` if you wish to use it.
65
66### Added
67* `shopify/jsx-prefer-fragment-wrappers` ([#94](https://github.com/Shopify/eslint-plugin-shopify/pull/94))
68* `shopify/jest/no-vague-titles` ([#93](https://github.com/Shopify/eslint-plugin-shopify/pull/93))
69* `shopify/strict-component-boundaries` ([#98](https://github.com/Shopify/eslint-plugin-shopify/pull/98))
70
71### Changed
72* **Breaking** Moved prettier to be a peerDependency, this avoids the potential for having multiple versions of prettier in the dependency graph. If you use prettier you will need to ensure you have it installed in your project as eslint-plugin-shopify will no longer install it for you ([#107](https://github.com/Shopify/eslint-plugin-shopify/pull/107))
73* **Breaking** Updated `typescript-eslint-parser` to support `typescript@2.9.1` ([#102](https://github.com/Shopify/eslint-plugin-shopify/pull/102))
74
75## [22.1.0] - 2018-06-08
76
77### Fixed
78* Updated `eslint-plugin-sort-class-members` dependency to version 1.3.1 in order to support node 10.
79
80### Added
81* `shopify/prefer-pascal-case-enums` ([#96](https://github.com/Shopify/eslint-plugin-shopify/pull/96))
82* `shopify/react-prefer-private-members` ([#95](https://github.com/Shopify/eslint-plugin-shopify/pull/95))
83
84## [22.0.0]
85* Updated dependencies
86* Added support for TypeScript 2.8
87
88## [21.0.1] - 2018-04-25
89* Fixed the publish config for the package.
90
91## [21.0.0] - 2018-04-25
92
93### Added
94* `shopify/jsx-no-hardcoded-content` now accepts a `dom` option that allows specifying attributes on DOM elements and Web Components to be checked for hardcoded content.
95
96### Removed
97* **Breaking:** turned off four rules that previously triggered errors in all cases:
98 * `shopify/react-type-state` (TypeScript now addresses the issue this rule was meant to catch)
99 * `promise/always-return`
100 * `react/no-did-mount-set-state`
101 * `no-undefined`
102* **Breaking:** turned off two rules in specific plugins:
103 * `babel/no-invalid-this` (turned off for the `typescript` configs as TypeScript has better mechanisms for unsuring a valid `this` is used)
104 * `no-process-env` (turned off for the `webpack` and `node` configs as both targets can benefit from use of `process.env`)
105
106### Fixed
107* Fixed an issue where various rules were not correctly resolving paths in `node_modules`.
108
109## [20.0.0] - 2018-03-15
110* **Breaking:** the version of TypeScript supported by this plugin is 2.7.x (in line with [typescript-eslint-parser](https://github.com/eslint/typescript-eslint-parser)’s TypeScript support)
111* Updated dependencies that support the new ESLint documentation URL metadata. Errors from these plugins are accompanied by a link to the documentation for the broken rule.
112* Dependencies are now strictly versioned for tighter control over the exact rules the plugin enforces.
113
114| Package | old | new |
115| ------- | --- | --- |
116| `eslint-plugin-ava` | `^4.4.0` | `4.5.1` |
117| `eslint-plugin-import` | `^2.8.0` | `2.9.0` |
118| `eslint-plugin-jest` | `^21.5.0` | `21.14.1` |
119| `eslint-plugin-lodash` | `^2.5.0` | `2.6.1` |
120| `eslint-plugin-node` | `^5.2.1` | `6.0.1` |
121| `eslint-plugin-prettier` | `^2.4.0` | `2.6.0` |
122| `eslint-plugin-promise` | `^3.6.0` | `3.7.0` |
123| `eslint-plugin-react` | `^7.5.1` | `7.7.0` |
124| `eslint-plugin-typescript` | `^0.8.1` | `0.10.0` |
125
126* Added rules:
127 - [`react/forbid-dom-props`](https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/forbid-dom-props.md) (disabled)
128 - [`react/jsx-child-element-spacing`](https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/jsx-child-element-spacing.md) **error**
129 - [`react/jsx-max-depth`](https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/jsx-max-depth.md) (disabled)
130 - [`react/jsx-sort-default-props`](https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/jsx-sort-default-props.md) (disabled)
131 - [`react/no-this-in-sfc`](https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/no-this-in-sfc.md) **error**
132 - [`import/group-exports`](https://github.com/benmosher/eslint-plugin-import/blob/master/docs/rules/group-exports.md) (disabled)
133 - [`import/no-self-import`](https://github.com/benmosher/eslint-plugin-import/blob/master/docs/rules/no-self-import.md) **error**
134 - [`import/no-default-export`](https://github.com/benmosher/eslint-plugin-import/blob/master/docs/rules/no-default-export.md) (disabled)
135 - [`import/no-useless-path-segments`](https://github.com/benmosher/eslint-plugin-import/blob/master/docs/rules/no-useless-path-segments.md) **error**
136 - [`jest/prefer-expect-assertions`](https://github.com/jest-community/eslint-plugin-jest/blob/master/docs/rules/prefer-expect-assertions.md) (disabled)
137 - [`jest/valid-expect-in-promise`](https://github.com/jest-community/eslint-plugin-jest/blob/master/docs/rules/valid-expect-in-promise.md) **error**
138 - [`jest/valid-describe`](https://github.com/jest-community/eslint-plugin-jest/blob/master/docs/rules/valid-describe.md) **error**
139 - [`jest/consistent-test-it`](https://github.com/jest-community/eslint-plugin-jest/blob/master/docs/rules/consistent-test-it.md) **error**
140 - [`jest/no-test-prefixes`](https://github.com/jest-community/eslint-plugin-jest/blob/master/docs/rules/no-test-prefixes.md) **error**
141 - [`jest/lowercase-name`](https://github.com/jest-community/eslint-plugin-jest/blob/master/docs/rules/lowercase-name.md) (disabled)
142 - [`jest/no-jest-import`](https://github.com/jest-community/eslint-plugin-jest/blob/master/docs/rules/no-jest-import.md) **error**
143 - [`promise/valid-params`](https://github.com/xjamundx/eslint-plugin-promise/blob/master/docs/rules/valid-params.md) **error**
144 - [`promise/no-new-statics`](https://github.com/xjamundx/eslint-plugin-promise/blob/master/docs/rules/no-new-statics.md) (disabled)
145 - [`typescript/explicit-function-return-type`](https://github.com/nzakas/eslint-plugin-typescript/blob/master/docs/rules/explicit-function-return-type.md) (disabled)
146 - [`typescript/no-non-null-assertion`](https://github.com/nzakas/eslint-plugin-typescript/blob/master/docs/rules/no-non-null-assertion.md) **error**
147* Updated `import/extensions` due to changes in its implementation: some extensions are explicitly allowed in `import`s: `.svg`, `.png`, `.jpg`, `.ico`, `.css`, `.sass`, `.scss`, `.less`, `.styl`. `.json` is still required as well.
148* Chore: updated CircleCI from v1 to v2.
149
150## [19.0.1] - 2018-03-12
151
152### Fixed
153* `shopify/jsx-no-hardcoded-content` rule now does not warn on all-whitespace strings as children. This was causing issues with indented JSX content, and is typically not an issue for different locales.
154
155## [19.0.0] - 2018-01-17
156
157### Added
158* `shopify/jest` config with [eslint-plugin-jest](https://www.npmjs.com/package/eslint-plugin-jest) rules:
159 - `jest/no-disabled-tests` (disabled)
160 - `jest/no-focused-tests`
161 - `jest/no-identical-title`
162 - `jest/no-large-snapshots` (limited to 12 lines)
163 - `jest/prefer-to-have-length`
164 - `jest/prefer-to-be-null`
165 - `jest/prefer-to-be-undefined`
166 - `jest/valid-expect`
167* Added `shopify/webpack` config
168* Added `shopify/polaris` config
169* Added `shopify/webpack/no-unnamed-dynamic-imports` rule
170* Added `shopify/prefer-module-scope-constants` rule
171* Added `shopify/jsx-no-complex-expressions` rule
172* Added `shopify/jsx-no-hardcoded-content` rule
173* Added `shopify/polaris-no-bare-stack-item` rule
174* Added `shopify/polaris-prefer-sectioned-prop` rule
175* Added `shopify/react-initialize-state` rule
176* Added `shopify/react-type-state` rule
177* Added [`implicit-arrow-linebreak`][] rule
178* Added [`lines-around-comment`][] rule (as a [special
179 rule][lines-around-comment-special]).
180* Added [`no-unexpected-multiline`][] rule (as a [special rule][no-unexpected-multiline-special]).
181* Added [`flowtype/no-flow-fix-me-comments`](https://github.com/gajus/eslint-plugin-flowtype/blob/677e55c6a0f1dd355268a0f19618cd2696424c53/.README/rules/no-flow-fix-me-comments.md)
182* Added [`react/jsx-one-expression-per-line`][]
183* Added [`react/destructuring-assignment`][]
184* Added [`react/no-access-state-in-setstate`][]
185* Added [`react/button-has-type`][]
186* Added [`react/jsx-curly-brace-presence`][]
187* Added [`typescript/member-naming`](https://github.com/nzakas/eslint-plugin-typescript/tree/master/docs/rules/member-naming.md)
188* Added [`typescript/no-array-constructor`](https://github.com/nzakas/eslint-plugin-typescript/tree/master/docs/rules/no-array-constructor.md)
189* Added `yarn prettier` script (prettifies source files)
190
191[`implicit-arrow-linebreak`]: https://eslint.org/docs/rules/implicit-arrow-linebreak
192[lines-around-comment-special]: https://github.com/prettier/eslint-config-prettier/blob/5399175c37466747aae9d407021dffec2c169c8b/README.md#lines-around-comment
193[`lines-around-comment`]: https://eslint.org/docs/rules/lines-around-comment
194[no-unexpected-multiline-special]: https://github.com/prettier/eslint-config-prettier/blob/5399175c37466747aae9d407021dffec2c169c8b/README.md#no-unexpected-multiline
195[`no-unexpected-multiline`]: https://eslint.org/docs/rules/no-unexpected-multiline
196[`react/jsx-one-expression-per-line`]: https://github.com/yannickcr/eslint-plugin-react/tree/master/docs/rules/jsx-one-expression-per-line.md
197[`react/destructuring-assignment`]: https://github.com/yannickcr/eslint-plugin-react/tree/master/docs/rules/destructuring-assignment.md
198[`react/no-access-state-in-setstate`]: https://github.com/yannickcr/eslint-plugin-react/tree/master/docs/rules/no-access-state-in-setstate.md
199[`react/button-has-type`]: https://github.com/yannickcr/eslint-plugin-react/tree/master/docs/rules/button-has-type.md
200[`react/jsx-curly-brace-presence`]: https://github.com/yannickcr/eslint-plugin-react/tree/master/docs/rules/jsx-curly-brace-presence.md
201
202### Changed
203* Updated dependencies to their latest versions (full details in [#63](https://github.com/Shopify/eslint-plugin-shopify/pull/63))
204* **Breaking:** `node.js` minimum supported node version update to `8.9.4` (LTS).
205* **Breaking:** Changed `eslint-config-shopify` codebase to `trailingComma: 'all'` and drop support for Node.js 6
206* **Breaking:** Updated prettier to 1.9.2, introducing a change in function parens style (set to `arrowParens: 'always'`):
207
208 ```js
209 // Before
210 const foo = myArray.map(foo => {});
211
212 // After
213 const foo = myArray.map((foo) => {});
214 ```
215
216 #### ⚠️ Upgrade path
217
218 Your project config files (`package.json`, `.prettierrc`, `.eslintrc`…)
219 may need to be updated like so:
220
221 ```diff
222 "singleQuote": true,
223 "bracketSpacing": false,
224 "trailingComma": "all",
225 + "arrowParens": "always"
226 ```
227* Prettified source files using the new config
228
229## [18.3.1] - 2017-12-21
230
231### Changed
232* Changed `eslint-config-shopify` codebase to follow es5 trailingComma [[#61](https://github.com/Shopify/eslint-plugin-shopify/pull/61)]
233
234## [18.3.0] - 2017-12-18
235
236### Added
237* Added `shopify/no-debugger`, which behaves the same as ESLint's `no-debugger` but without a fixer.
238
239## [18.2.0] - 2017-12-04
240### Added
241* Added a `typescript-prettier` config to run prettier against typescript projects.
242
243## [18.1.0] - 2017-12-01
244
245### Added
246* Added a `typescript` and `typescript-react` config [[#54](https://github.com/Shopify/eslint-plugin-shopify/pull/54)]
247
248### Changed
249* `plugin:shopify/prettier` will now enforce trailing commas in function parameter calls [[#55](https://github.com/Shopify/eslint-plugin-shopify/pull/55)]
250* `comma-dangle` will now enforce multi-line function parameters [[#55](https://github.com/Shopify/eslint-plugin-shopify/pull/55)]
251* Removed `plugin:shopify/esnext` as an included extension of the `plugin:shopify/prettier` config. `plugin:shopify/esnext` must now be extended by the consumer to use the `plugin:shopify/prettier`. [[#53](https://github.com/Shopify/eslint-plugin-shopify/pull/53)]
252
253 Example (`package.json`):
254 ```
255 "eslintConfig": {
256 "extends": [
257 "plugin:shopify/esnext",
258 "plugin:shopify/prettier"
259 ]
260 }
261 ```
262
263## [18.0.0] - 2017-10-31
264### Changed
265* Turned off `class-methods-use-this`
266
267## [17.2.1] - 2017-10-30
268### Changed
269* Turned off `babel/semi` rule in prettier config
270
271## [17.2.0] - 2017-10-25
272### Added
273* Added a prettier config [[#46](https://github.com/Shopify/eslint-plugin-shopify/pull/46)]
274
275Example:
276```
277"eslintConfig": {
278 "extends": [
279 "plugin:shopify/prettier"
280 ]
281}
282```
283
284### Changed
285* Replace all `warn` with `error` [[#48](https://github.com/Shopify/eslint-plugin-shopify/pull/48)]
286* `space-before-function-paren` now uses `asyncArrow` option (eg. `async () => {}`) [[#43](https://github.com/Shopify/eslint-plugin-shopify/pull/43)]
287* Enable `padding-line-between-statements` for directives. [[#44](https://github.com/Shopify/eslint-plugin-shopify/pull/44)]
288
289### Removed
290* `lines-around-directive` was deprecated in ESLint `v4.0.0`. [[#44](https://github.com/Shopify/eslint-plugin-shopify/pull/44)]
291
292
293## [17.1.0] - 2017-09-19
294
295### Added
296* New rules ([#41](https://github.com/Shopify/eslint-plugin-shopify/pull/41)):
297 - `import/no-anonymous-default-export`
298 - `jsx-a11y/anchor-is-valid`
299 - `no-buffer-constructor`
300 - `node/no-extraneous-import` (disabled)
301 - `node/no-extraneous-require`
302 - `for-direction`
303 - `getter-return`
304 - `react/boolean-prop-naming` (disabled)
305 - `react/default-props-match-prop-types`
306 - `react/no-redundant-should-component-update`
307 - `react/no-typos`
308 - `react/no-unused-state`
309 - `react/jsx-closing-tag-location`
310 - `array-bracket-newline` (disabled)
311 - `array-element-newline` (disabled)
312 - `function-paren-newline`
313 - `padding-line-between-statements` (disabled)
314 - `semi-style`
315 - `switch-colon-spacing`
316
317
318### Changed
319- Updated dependencies ([#41](https://github.com/Shopify/eslint-plugin-shopify/pull/41)):
320 - `eslint`
321 - `babel-eslint`
322 - `eslint-plugin-import`
323 - `eslint-plugin-jsx-a11y`
324 - `eslint-plugin-node`
325 - `eslint-plugin-react`
326- `jquery-dollar-sign-reference` no longer flags assignments from `await` expressions
327
328### Removed
329- `jsx-a11y/href-no-hash` replaced with `jsx-a11y/anchor-is-valid`
330
331## [17.0.0] - 2017-08-17
332### Changed
333- `eslint` upgrade to `4.3.0`
334- `node.js` minimum supported node version update to `6.11.1` (LTS).
335- Update dependencies:
336 - `eslint-plugin-ava`: `^4.2.0` → `^4.2.1`.
337 - `eslint-plugin-babel`: `^4.1.1` → `^4.1.2`.
338 - `eslint-plugin-lodash`: `^2.4.2` → `^2.4.4`.
339 - `eslint-plugin-mocha`: `^4.9.0` → `^4.11.0`.
340 - `eslint-plugin-node`: `^4.2.2` → `^4.2.3`.
341 - `eslint-plugin-react`: `^7.0.0` → `^7.0.1`.
342
343
344## [16.0.1] - 2017-05-29
345### Changed
346- Turned off [`prefer-destructuring`](http://eslint.org/docs/rules/prefer-destructuring) ([#30](https://github.com/Shopify/eslint-plugin-shopify/pull/30))
347
348## [16.0.0] - 2017-05-16
349### Added
350- New rule: [`babel/semi`](https://github.com/babel/eslint-plugin-babel/releases/tag/v4.1.0)
351- New rule: [`flowtype/no-types-missing-file-annotation`](https://github.com/gajus/eslint-plugin-flowtype#eslint-plugin-flowtype-rules-no-types-missing-file-annotation)
352- New rule: [`jsx-a11y/accessible-emoji`](https://github.com/evcohen/eslint-plugin-jsx-a11y/blob/master/docs/rules/accessible-emoji.md)
353- New rule: [`jsx-a11y/alt-text`](https://github.com/evcohen/eslint-plugin-jsx-a11y/blob/master/docs/rules/alt-text.md)
354- New rule: [`jsx-a11y/aria-activedescendant-has-tabindex`](https://github.com/evcohen/eslint-plugin-jsx-a11y/blob/master/docs/rules/aria-activedescendant-has-tabindex.md)
355- New rule: [`jsx-a11y/iframe-has-title`](https://github.com/evcohen/eslint-plugin-jsx-a11y/blob/master/docs/rules/iframe-has-title.md)
356- New rule: [`jsx-a11y/interactive-supports-focus`](https://github.com/evcohen/eslint-plugin-jsx-a11y/blob/master/docs/rules/interactive-supports-focus.md)
357- New rule: [`jsx-a11y/media-has-caption`](https://github.com/evcohen/eslint-plugin-jsx-a11y/blob/master/docs/rules/media-has-caption.md) (disabled)
358- New rule: [`jsx-a11y/no-autofocus`](https://github.com/evcohen/eslint-plugin-jsx-a11y/blob/master/docs/rules/no-autofocus.md)
359- New rule: [`jsx-a11y/no-distracting-elements`](https://github.com/evcohen/eslint-plugin-jsx-a11y/blob/master/docs/rules/no-distracting-elements.md)
360- New rule: [`jsx-a11y/no-interactive-element-to-noninteractive-role`](https://github.com/evcohen/eslint-plugin-jsx-a11y/blob/master/docs/rules/no-interactive-element-to-noninteractive-role.md) (disabled)
361- New rule: [`jsx-a11y/no-noninteractive-element-interactions`](https://github.com/evcohen/eslint-plugin-jsx-a11y/blob/master/docs/rules/no-noninteractive-element-interactions.md)
362- New rule: [`jsx-a11y/no-noninteractive-element-to-interactive-role`](https://github.com/evcohen/eslint-plugin-jsx-a11y/blob/master/docs/rules/no-noninteractive-element-to-interactive-role.md)
363- New rule: [`jsx-a11y/no-noninteractive-tabindex`](https://github.com/evcohen/eslint-plugin-jsx-a11y/blob/master/docs/rules/no-noninteractive-tabindex.md)
364- New rule: [`jsx-a11y/no-redundant-roles`](https://github.com/evcohen/eslint-plugin-jsx-a11y/blob/master/docs/rules/no-redundant-roles.md)
365- New rule: [`lodash/prefer-some`](https://github.com/wix/eslint-plugin-lodash/blob/master/docs/rules/prefer-some.md)
366- New rule: [`react/forbid-elements`](https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/forbid-elements.md) (disabled)
367- New rule: [`react/forbid-foreign-prop-types`](https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/forbid-foreign-prop-types.md)
368- New rule: [`react/no-will-update-set-state`](https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/no-will-update-set-state.md)
369- New rule: [`react/void-dom-elements-no-children`](https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/void-dom-elements-no-children.md)
370- New rule: [`no-await-in-loop`](http://eslint.org/docs/rules/no-await-in-loop)
371- New rule: [`prefer-promise-reject-errors`](http://eslint.org/docs/rules/prefer-promise-reject-errors)
372- New rule: [`require-await`](http://eslint.org/docs/rules/require-await)
373- New rule: [`prefer-destructuring`](http://eslint.org/docs/rules/prefer-destructuring)
374- New rule: [`no-compare-neg-zero`](http://eslint.org/docs/rules/no-compare-neg-zero)
375- New rule: [`capitalized-comments`](http://eslint.org/docs/rules/capitalized-comments) (disabled)
376- New rule: [`no-multi-assign`](http://eslint.org/docs/rules/no-multi-assign)
377- New rule: [`nonblock-statement-body-position`](http://eslint.org/docs/rules/nonblock-statement-body-position) (disabled)
378- New rule: [`template-tag-spacing`](http://eslint.org/docs/rules/template-tag-spacing)
379
380### Removed
381- Deprecated: [`babel/no-await-in-loop`](https://github.com/babel/eslint-plugin-babel/releases/tag/v4.1.1)
382- Deprecated: [`jsx-a11y/img-has-alt`](https://github.com/evcohen/eslint-plugin-jsx-a11y/blob/master/CHANGELOG.md#500--2017-05-05)
383- Deprecated: [`jsx-a11y/onclick-has-focus`](https://github.com/evcohen/eslint-plugin-jsx-a11y/blob/master/CHANGELOG.md#500--2017-05-05)
384- Deprecated: [`jsx-a11y/onclick-has-role`](https://github.com/evcohen/eslint-plugin-jsx-a11y/blob/master/CHANGELOG.md#500--2017-05-05)
385- Deprecated: [`jsx-a11y/jsx-space-before-closing`](https://github.com/yannickcr/eslint-plugin-react/blob/master/CHANGELOG.md#700---2017-05-06)
386
387
388## [15.2.0] - 2017-03-06
389### Changed
390- `eslint` upgrade to `3.17.x`
391
392## [15.1.2] - 2017-02-23
393### Fixed
394- `jquery-dollar-sign-reference` now checks assignments from `LogicalExpression` / `BinaryExpression`
395
396## [15.1.1] - 2017-01-17
397### Added
398- Added `eslint-index` package ([#4](https://github.com/Shopify/eslint-plugin-shopify/pull/4))
399- Added `rules-status` and `rules-omitted` scripts ([#4](https://github.com/Shopify/eslint-plugin-shopify/pull/4))
400- Added new `eslint-plugin-react` rules: `no-array-index-key`, `require-default-props` ([#4](https://github.com/Shopify/eslint-plugin-shopify/pull/4))
401- Added new `eslint-plugin-lodash` rules: `import-scope` ([#4](https://github.com/Shopify/eslint-plugin-shopify/pull/4))
402- Added new `eslint-plugin-promise` rules: `no-return-wrap`, `no-nesting`, `no-promise-in-callback`, `no-callback-in-promise`, `avoid-new`, `prefer-await-to-then`, `prefer-await-to-callbacks` ([#4](https://github.com/Shopify/eslint-plugin-shopify/pull/4))
403
404### Changed
405- Updated `eslint-plugin-flowtype`, `eslint-plugin-lodash`, `eslint-plugin-mocha`, `eslint-plugin-promise`, `eslint-plugin-react` to their latest versions ([#4](https://github.com/Shopify/eslint-plugin-shopify/pull/4))
406- Updated `react/prefer-stateless-function` rule to include `ignorePureComponents` flag ([#4](https://github.com/Shopify/eslint-plugin-shopify/pull/4))
407
408### Removed
409- Removed `eslint-find-rules` package ([#4](https://github.com/Shopify/eslint-plugin-shopify/pull/4))
410
411# Pre-15.1.1 Changelog
412
413Changes were originally tracked in Shopify's [JavaScript monorepo](https://github.com/Shopify/javascript/blob/f10bf7ddbdae07370cfe7c94617c450257731552/CHANGELOG.md).
414
415[Unreleased]: https://github.com/Shopify/eslint-plugin-shopify/compare/v24.0.0...HEAD
416[24.0.0]: https://github.com/Shopify/eslint-plugin-shopify/compare/v23.1.0...v24.0.0
417[23.1.0]: https://github.com/Shopify/eslint-plugin-shopify/compare/v23.0.0...v23.1.0
418[23.0.0]: https://github.com/Shopify/eslint-plugin-shopify/compare/v22.1.0...v23.0.0
419[22.1.0]: https://github.com/Shopify/eslint-plugin-shopify/compare/v22.0.0...v22.1.0
420[22.0.0]: https://github.com/Shopify/eslint-plugin-shopify/compare/v21.0.1...v22.0.0
421[21.0.1]: https://github.com/Shopify/eslint-plugin-shopify/compare/v21.0.0...v21.0.1
422[21.0.0]: https://github.com/Shopify/eslint-plugin-shopify/compare/v20.0.0...v21.0.0
423[20.0.0]: https://github.com/Shopify/eslint-plugin-shopify/compare/v19.0.1...v20.0.0
424[19.0.1]: https://github.com/Shopify/eslint-plugin-shopify/compare/v19.0.0...v19.0.1
425[19.0.0]: https://github.com/Shopify/eslint-plugin-shopify/compare/v18.3.1...v19.0.0
426[18.3.1]: https://github.com/Shopify/eslint-plugin-shopify/compare/v18.3.0...v18.3.1
427[18.3.0]: https://github.com/Shopify/eslint-plugin-shopify/compare/v18.2.0...v18.3.0
428[18.2.0]: https://github.com/Shopify/eslint-plugin-shopify/compare/v18.1.0...v18.2.0
429[18.1.0]: https://github.com/Shopify/eslint-plugin-shopify/compare/v18.0.0...v18.1.0
430[18.0.0]: https://github.com/Shopify/eslint-plugin-shopify/compare/v17.2.1...v18.0.0
431[17.2.1]: https://github.com/Shopify/eslint-plugin-shopify/compare/v17.2.0...v17.2.1
432
\No newline at end of file