UNPKG

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