Skip to content
This repository was archived by the owner on Nov 28, 2022. It is now read-only.

Commit 7eefbba

Browse files
kevinansfieldkirrg001
authored andcommitted
πŸ’„πŸ· sort-imports eslint rule (#712)
no issue - adds `eslint-plugin-sort-imports-es6-autofix` dependency - implements ESLint's base `sort-imports` rule but has a distinction in that `import {foo} from 'bar';` is considered `multiple` rather than `single` - fixes ESLint's autofix behaviour so `eslint --fix` will actually fix the sort order - updates all unordered import rules by using `eslint --fix` With the increased number of `import` statements since Ember+ecosystem started moving towards es6 modules I've found it frustrating at times trying to search through randomly ordered import statements. Recently I've been sorting imports manually when I've added new code or touched old code so I thought I'd add an ESLint rule to codify it.
1 parent 2efd732 commit 7eefbba

File tree

253 files changed

+674
-739
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

253 files changed

+674
-739
lines changed

β€Ž.eslintrc.js

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,20 @@
1+
/* eslint-env node */
12
module.exports = {
23
root: true,
34
parserOptions: {
45
ecmaVersion: 2017,
56
sourceType: 'module'
67
},
8+
env: {
9+
browser: true
10+
},
711
extends: [
812
'eslint:recommended',
913
'plugin:ember-suave/recommended'
1014
],
11-
env: {
12-
browser: true
13-
},
15+
plugins: [
16+
'sort-imports-es6-autofix'
17+
],
1418
rules: {
1519
indent: ['error', 4],
1620
'space-before-function-paren': ['error', {anonymous: 'ignore', named: 'never'}],
@@ -20,7 +24,10 @@ module.exports = {
2024
'keyword-spacing': ['error', {overrides: {
2125
'catch': {'after': true}
2226
}}],
23-
'ember-suave/require-access-in-comments': 'off'
27+
'ember-suave/require-access-in-comments': 'off',
28+
'sort-imports-es6-autofix/sort-imports-es6': ['error', {
29+
memberSyntaxSortOrder: ['none', 'all', 'single', 'multiple']
30+
}]
2431
},
2532
globals: {
2633
validator: false

β€Žapp/adapters/base.js

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
1-
import injectService from 'ember-service/inject';
1+
import AjaxServiceSupport from 'ember-ajax/mixins/ajax-support';
2+
import DataAdapterMixin from 'ember-simple-auth/mixins/data-adapter-mixin';
23
import RESTAdapter from 'ember-data/adapters/rest';
34
import ghostPaths from 'ghost-admin/utils/ghost-paths';
4-
import DataAdapterMixin from 'ember-simple-auth/mixins/data-adapter-mixin';
5-
import AjaxServiceSupport from 'ember-ajax/mixins/ajax-support';
5+
import injectService from 'ember-service/inject';
66

77
export default RESTAdapter.extend(DataAdapterMixin, AjaxServiceSupport, {
88
authorizer: 'authorizer:oauth2',

β€Žapp/adapters/embedded-relation-adapter.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
1+
import BaseAdapter from 'ghost-admin/adapters/base';
12
import get from 'ember-metal/get';
23
import {isNone} from 'ember-utils';
3-
import BaseAdapter from 'ghost-admin/adapters/base';
44

55
// EmbeddedRelationAdapter will augment the query object in calls made to
66
// DS.Store#findRecord, findAll, query, and queryRecord with the correct "includes"

β€Žapp/app.js

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
1-
import Ember from 'ember';
2-
import Application from 'ember-application';
3-
import Resolver from './resolver';
4-
import loadInitializers from 'ember-load-initializers';
5-
import 'ghost-admin/utils/route';
61
import 'ghost-admin/utils/link-component';
2+
import 'ghost-admin/utils/route';
73
import 'ghost-admin/utils/text-field';
4+
import Application from 'ember-application';
5+
import Ember from 'ember';
6+
import Resolver from './resolver';
87
import config from './config/environment';
8+
import loadInitializers from 'ember-load-initializers';
99

1010
Ember.MODEL_FACTORY_INJECTIONS = true;
1111

β€Žapp/authenticators/oauth2.js

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
1+
import Authenticator from 'ember-simple-auth/authenticators/oauth2-password-grant';
2+
import RSVP from 'rsvp';
13
import computed from 'ember-computed';
24
import injectService from 'ember-service/inject';
3-
import Authenticator from 'ember-simple-auth/authenticators/oauth2-password-grant';
45
import run from 'ember-runloop';
5-
import RSVP from 'rsvp';
6-
import {wrap} from 'ember-array/utils';
7-
import {isEmpty} from 'ember-utils';
86
import {assign} from 'ember-platform';
7+
import {isEmpty} from 'ember-utils';
8+
import {wrap} from 'ember-array/utils';
99

1010
export default Authenticator.extend({
1111
ajax: injectService(),

β€Žapp/components/gh-alerts.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import Component from 'ember-component';
2-
import {alias} from 'ember-computed';
32
import injectService from 'ember-service/inject';
43
import observer from 'ember-metal/observer';
4+
import {alias} from 'ember-computed';
55

66
export default Component.extend({
77
tagName: 'aside',

β€Žapp/components/gh-basic-dropdown.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import BasicDropdown from 'ember-basic-dropdown/components/basic-dropdown';
2-
import layout from 'ember-basic-dropdown/templates/components/basic-dropdown';
32
import injectService from 'ember-service/inject';
3+
import layout from 'ember-basic-dropdown/templates/components/basic-dropdown';
44

55
export default BasicDropdown.extend({
66
dropdown: injectService(),

β€Žapp/components/gh-cm-editor.js

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
11
/* global CodeMirror */
22
import Component from 'ember-component';
3-
import {bind, once, scheduleOnce} from 'ember-runloop';
4-
import injectService from 'ember-service/inject';
53
import RSVP from 'rsvp';
6-
import {assign} from 'ember-platform';
74
import boundOneWay from 'ghost-admin/utils/bound-one-way';
5+
import injectService from 'ember-service/inject';
86
import {InvokeActionMixin} from 'ember-invoke-action';
7+
import {assign} from 'ember-platform';
8+
import {bind, once, scheduleOnce} from 'ember-runloop';
99

1010
const CmEditorComponent = Component.extend(InvokeActionMixin, {
1111
classNameBindings: ['isFocused:focused'],

β€Žapp/components/gh-date-time-picker.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import Component from 'ember-component';
2-
import computed, {reads, or} from 'ember-computed';
2+
import computed, {or, reads} from 'ember-computed';
33
import injectService from 'ember-service/inject';
44
import moment from 'moment';
55
import {isBlank, isEmpty} from 'ember-utils';

β€Žapp/components/gh-datetime-input.js

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
11
import Component from 'ember-component';
2-
import injectService from 'ember-service/inject';
32
import boundOneWay from 'ghost-admin/utils/bound-one-way';
4-
import {formatDate} from 'ghost-admin/utils/date-formatting';
5-
import {InvokeActionMixin} from 'ember-invoke-action';
3+
import injectService from 'ember-service/inject';
64
import moment from 'moment';
5+
import {InvokeActionMixin} from 'ember-invoke-action';
6+
import {formatDate} from 'ghost-admin/utils/date-formatting';
77

88
export default Component.extend(InvokeActionMixin, {
99
tagName: 'span',

β€Žapp/components/gh-download-count.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
1-
import Ember from 'ember';
21
import Component from 'ember-component';
2+
import Ember from 'ember';
33
import injectService from 'ember-service/inject';
44
import {task, timeout} from 'ember-concurrency';
55

β€Žapp/components/gh-dropdown-button.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import Component from 'ember-component';
2-
import injectService from 'ember-service/inject';
32
import DropdownMixin from 'ghost-admin/mixins/dropdown-mixin';
3+
import injectService from 'ember-service/inject';
44

55
export default Component.extend(DropdownMixin, {
66
tagName: 'button',

β€Žapp/components/gh-dropdown.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
import Component from 'ember-component';
2+
import DropdownMixin from 'ghost-admin/mixins/dropdown-mixin';
23
import computed from 'ember-computed';
34
import injectService from 'ember-service/inject';
45
import run from 'ember-runloop';
5-
import DropdownMixin from 'ghost-admin/mixins/dropdown-mixin';
66

77
export default Component.extend(DropdownMixin, {
88
classNames: 'dropdown',

β€Žapp/components/gh-editor-post-status.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import Component from 'ember-component';
2-
import {task, timeout} from 'ember-concurrency';
32
import computed, {reads} from 'ember-computed';
3+
import {task, timeout} from 'ember-concurrency';
44

55
// TODO: reduce when in testing mode
66
const SAVE_TIMEOUT_MS = 3000;

β€Žapp/components/gh-editor.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
import Component from 'ember-component';
22
import run from 'ember-runloop';
33
import {
4-
IMAGE_MIME_TYPES,
5-
IMAGE_EXTENSIONS
4+
IMAGE_EXTENSIONS,
5+
IMAGE_MIME_TYPES
66
} from 'ghost-admin/components/gh-image-uploader';
77

88
const {debounce} = run;

β€Žapp/components/gh-file-uploader.js

Lines changed: 7 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,17 @@
11
import Component from 'ember-component';
2-
import {htmlSafe} from 'ember-string';
3-
import injectService from 'ember-service/inject';
42
import computed from 'ember-computed';
5-
import {isBlank} from 'ember-utils';
3+
import injectService from 'ember-service/inject';
64
import run from 'ember-runloop';
7-
import {isEmberArray} from 'ember-array/utils';
8-
9-
import {invokeAction} from 'ember-invoke-action';
105
import {
11-
isVersionMismatchError,
6+
UnsupportedMediaTypeError,
127
isRequestEntityTooLargeError,
138
isUnsupportedMediaTypeError,
14-
UnsupportedMediaTypeError
9+
isVersionMismatchError
1510
} from 'ghost-admin/services/ajax';
11+
import {htmlSafe} from 'ember-string';
12+
import {invokeAction} from 'ember-invoke-action';
13+
import {isBlank} from 'ember-utils';
14+
import {isEmberArray} from 'ember-array/utils';
1615

1716
export default Component.extend({
1817
tagName: 'section',

β€Žapp/components/gh-fullscreen-modal.js

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
1+
import Component from 'ember-component';
12
import RSVP from 'rsvp';
3+
import computed from 'ember-computed';
24
import injectService from 'ember-service/inject';
3-
import {A as emberA} from 'ember-array/utils';
4-
import {isBlank} from 'ember-utils';
55
import run from 'ember-runloop';
6+
import {A as emberA} from 'ember-array/utils';
67
import {invokeAction} from 'ember-invoke-action';
7-
import computed from 'ember-computed';
8-
import Component from 'ember-component';
8+
import {isBlank} from 'ember-utils';
99

1010
const FullScreenModalComponent = Component.extend({
1111

β€Žapp/components/gh-image-uploader.js

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,18 @@
11
import Component from 'ember-component';
22
import computed from 'ember-computed';
3+
import ghostPaths from 'ghost-admin/utils/ghost-paths';
34
import injectService from 'ember-service/inject';
4-
import {htmlSafe} from 'ember-string';
5-
import {isBlank} from 'ember-utils';
6-
import {isEmberArray} from 'ember-array/utils';
75
import run from 'ember-runloop';
8-
import {invokeAction} from 'ember-invoke-action';
9-
import ghostPaths from 'ghost-admin/utils/ghost-paths';
106
import {
7+
UnsupportedMediaTypeError,
118
isRequestEntityTooLargeError,
129
isUnsupportedMediaTypeError,
13-
isVersionMismatchError,
14-
UnsupportedMediaTypeError
10+
isVersionMismatchError
1511
} from 'ghost-admin/services/ajax';
12+
import {htmlSafe} from 'ember-string';
13+
import {invokeAction} from 'ember-invoke-action';
14+
import {isBlank} from 'ember-utils';
15+
import {isEmberArray} from 'ember-array/utils';
1616

1717
export const IMAGE_MIME_TYPES = 'image/gif,image/jpg,image/jpeg,image/png,image/svg+xml';
1818
export const IMAGE_EXTENSIONS = ['gif', 'jpg', 'jpeg', 'png', 'svg'];

β€Žapp/components/gh-markdown-editor.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
11
import Component from 'ember-component';
22
import computed from 'ember-computed';
3+
import formatMarkdown from 'ghost-admin/utils/format-markdown';
4+
import run from 'ember-runloop';
35
import {assign} from 'ember-platform';
46
import {copy} from 'ember-metal/utils';
57
import {isEmpty} from 'ember-utils';
6-
import run from 'ember-runloop';
7-
import formatMarkdown from 'ghost-admin/utils/format-markdown';
88

99
const MOBILEDOC_VERSION = '0.3.1';
1010

β€Žapp/components/gh-nav-menu.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import Component from 'ember-component';
2+
import calculatePosition from 'ember-basic-dropdown/utils/calculate-position';
23
import injectService from 'ember-service/inject';
34
import {htmlSafe} from 'ember-string';
4-
import calculatePosition from 'ember-basic-dropdown/utils/calculate-position';
55

66
export default Component.extend({
77
config: injectService(),

β€Žapp/components/gh-navitem.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
import Component from 'ember-component';
2+
import SortableItem from 'ember-sortable/mixins/sortable-item';
3+
import ValidationState from 'ghost-admin/mixins/validation-state';
24
import computed, {alias, readOnly} from 'ember-computed';
35
import run from 'ember-runloop';
4-
import ValidationState from 'ghost-admin/mixins/validation-state';
5-
import SortableItem from 'ember-sortable/mixins/sortable-item';
66

77
export default Component.extend(ValidationState, SortableItem, {
88
classNames: 'gh-blognav-item',

β€Žapp/components/gh-notification.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import Component from 'ember-component';
2-
import injectService from 'ember-service/inject';
32
import computed from 'ember-computed';
3+
import injectService from 'ember-service/inject';
44

55
export default Component.extend({
66
tagName: 'article',

β€Žapp/components/gh-notifications.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import Component from 'ember-component';
2-
import {alias} from 'ember-computed';
32
import injectService from 'ember-service/inject';
3+
import {alias} from 'ember-computed';
44

55
export default Component.extend({
66
tagName: 'aside',

β€Žapp/components/gh-post-settings-menu.js

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,14 @@
1-
import Ember from 'ember';
21
import Component from 'ember-component';
3-
import computed, {alias} from 'ember-computed';
4-
import {guidFor} from 'ember-metal/utils';
5-
import injectService from 'ember-service/inject';
6-
import {htmlSafe} from 'ember-string';
7-
import {invokeAction} from 'ember-invoke-action';
2+
import Ember from 'ember';
83
import SettingsMenuMixin from 'ghost-admin/mixins/settings-menu-component';
94
import boundOneWay from 'ghost-admin/utils/bound-one-way';
5+
import computed, {alias} from 'ember-computed';
6+
import injectService from 'ember-service/inject';
107
import isNumber from 'ghost-admin/utils/isNumber';
118
import moment from 'moment';
9+
import {guidFor} from 'ember-metal/utils';
10+
import {htmlSafe} from 'ember-string';
11+
import {invokeAction} from 'ember-invoke-action';
1212

1313
const {Handlebars} = Ember;
1414

β€Žapp/components/gh-posts-list-item.js

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
1-
import Ember from 'ember';
1+
import $ from 'jquery';
22
import Component from 'ember-component';
3-
import {htmlSafe} from 'ember-string';
3+
import Ember from 'ember';
44
import computed, {alias, equal} from 'ember-computed';
55
import injectService from 'ember-service/inject';
6-
import $ from 'jquery';
6+
import {htmlSafe} from 'ember-string';
77
import {isBlank} from 'ember-utils';
88

99
// ember-cli-shims doesn't export these

β€Žapp/components/gh-profile-image.js

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,10 @@
1+
import AjaxService from 'ember-ajax/services/ajax';
12
import Component from 'ember-component';
23
import computed, {notEmpty} from 'ember-computed';
3-
import {htmlSafe} from 'ember-string';
44
import injectService from 'ember-service/inject';
5-
import {isBlank} from 'ember-utils';
65
import run from 'ember-runloop';
7-
8-
import AjaxService from 'ember-ajax/services/ajax';
6+
import {htmlSafe} from 'ember-string';
7+
import {isBlank} from 'ember-utils';
98
import {isNotFoundError} from 'ember-ajax/errors';
109

1110
/**

β€Žapp/components/gh-publishmenu-scheduled.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import Component from 'ember-component';
2-
import moment from 'moment';
32
import computed from 'ember-computed';
43
import injectService from 'ember-service/inject';
4+
import moment from 'moment';
55

66
export default Component.extend({
77
clock: injectService(),

β€Žapp/components/gh-publishmenu.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
1+
import $ from 'jquery';
12
import Component from 'ember-component';
23
import computed, {reads} from 'ember-computed';
34
import injectService from 'ember-service/inject';
45
import {task} from 'ember-concurrency';
5-
import $ from 'jquery';
66

77
export default Component.extend({
88
clock: injectService(),

β€Žapp/components/gh-search-input.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,8 @@
33
import Component from 'ember-component';
44
import RSVP from 'rsvp';
55
import computed from 'ember-computed';
6-
import run from 'ember-runloop';
76
import injectService from 'ember-service/inject';
7+
import run from 'ember-runloop';
88
import {isBlank, isEmpty} from 'ember-utils';
99

1010
export function computedGroup(category) {

β€Žapp/components/gh-search-input/trigger.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
1-
import run from 'ember-runloop';
2-
import {isBlank} from 'ember-utils';
31
import Component from 'ember-component';
2+
import run from 'ember-runloop';
43
import {invokeAction} from 'ember-invoke-action';
4+
import {isBlank} from 'ember-utils';
55

66
export default Component.extend({
77
open() {

0 commit comments

Comments
Β (0)