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

Commit

Permalink
πŸ’„πŸ· sort-imports eslint rule (#712)
Browse files Browse the repository at this point in the history
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.
  • Loading branch information
kevinansfield authored and kirrg001 committed May 29, 2017
1 parent 2efd732 commit 7eefbba
Show file tree
Hide file tree
Showing 253 changed files with 674 additions and 739 deletions.
15 changes: 11 additions & 4 deletions .eslintrc.js
Original file line number Diff line number Diff line change
@@ -1,16 +1,20 @@
/* eslint-env node */
module.exports = {
root: true,
parserOptions: {
ecmaVersion: 2017,
sourceType: 'module'
},
env: {
browser: true
},
extends: [
'eslint:recommended',
'plugin:ember-suave/recommended'
],
env: {
browser: true
},
plugins: [
'sort-imports-es6-autofix'
],
rules: {
indent: ['error', 4],
'space-before-function-paren': ['error', {anonymous: 'ignore', named: 'never'}],
Expand All @@ -20,7 +24,10 @@ module.exports = {
'keyword-spacing': ['error', {overrides: {
'catch': {'after': true}
}}],
'ember-suave/require-access-in-comments': 'off'
'ember-suave/require-access-in-comments': 'off',
'sort-imports-es6-autofix/sort-imports-es6': ['error', {
memberSyntaxSortOrder: ['none', 'all', 'single', 'multiple']
}]
},
globals: {
validator: false
Expand Down
6 changes: 3 additions & 3 deletions app/adapters/base.js
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
import injectService from 'ember-service/inject';
import AjaxServiceSupport from 'ember-ajax/mixins/ajax-support';
import DataAdapterMixin from 'ember-simple-auth/mixins/data-adapter-mixin';
import RESTAdapter from 'ember-data/adapters/rest';
import ghostPaths from 'ghost-admin/utils/ghost-paths';
import DataAdapterMixin from 'ember-simple-auth/mixins/data-adapter-mixin';
import AjaxServiceSupport from 'ember-ajax/mixins/ajax-support';
import injectService from 'ember-service/inject';

export default RESTAdapter.extend(DataAdapterMixin, AjaxServiceSupport, {
authorizer: 'authorizer:oauth2',
Expand Down
2 changes: 1 addition & 1 deletion app/adapters/embedded-relation-adapter.js
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import BaseAdapter from 'ghost-admin/adapters/base';
import get from 'ember-metal/get';
import {isNone} from 'ember-utils';
import BaseAdapter from 'ghost-admin/adapters/base';

// EmbeddedRelationAdapter will augment the query object in calls made to
// DS.Store#findRecord, findAll, query, and queryRecord with the correct "includes"
Expand Down
10 changes: 5 additions & 5 deletions app/app.js
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
import Ember from 'ember';
import Application from 'ember-application';
import Resolver from './resolver';
import loadInitializers from 'ember-load-initializers';
import 'ghost-admin/utils/route';
import 'ghost-admin/utils/link-component';
import 'ghost-admin/utils/route';
import 'ghost-admin/utils/text-field';
import Application from 'ember-application';
import Ember from 'ember';
import Resolver from './resolver';
import config from './config/environment';
import loadInitializers from 'ember-load-initializers';

Ember.MODEL_FACTORY_INJECTIONS = true;

Expand Down
8 changes: 4 additions & 4 deletions app/authenticators/oauth2.js
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
import Authenticator from 'ember-simple-auth/authenticators/oauth2-password-grant';
import RSVP from 'rsvp';
import computed from 'ember-computed';
import injectService from 'ember-service/inject';
import Authenticator from 'ember-simple-auth/authenticators/oauth2-password-grant';
import run from 'ember-runloop';
import RSVP from 'rsvp';
import {wrap} from 'ember-array/utils';
import {isEmpty} from 'ember-utils';
import {assign} from 'ember-platform';
import {isEmpty} from 'ember-utils';
import {wrap} from 'ember-array/utils';

export default Authenticator.extend({
ajax: injectService(),
Expand Down
2 changes: 1 addition & 1 deletion app/components/gh-alerts.js
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import Component from 'ember-component';
import {alias} from 'ember-computed';
import injectService from 'ember-service/inject';
import observer from 'ember-metal/observer';
import {alias} from 'ember-computed';

export default Component.extend({
tagName: 'aside',
Expand Down
2 changes: 1 addition & 1 deletion app/components/gh-basic-dropdown.js
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import BasicDropdown from 'ember-basic-dropdown/components/basic-dropdown';
import layout from 'ember-basic-dropdown/templates/components/basic-dropdown';
import injectService from 'ember-service/inject';
import layout from 'ember-basic-dropdown/templates/components/basic-dropdown';

export default BasicDropdown.extend({
dropdown: injectService(),
Expand Down
6 changes: 3 additions & 3 deletions app/components/gh-cm-editor.js
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
/* global CodeMirror */
import Component from 'ember-component';
import {bind, once, scheduleOnce} from 'ember-runloop';
import injectService from 'ember-service/inject';
import RSVP from 'rsvp';
import {assign} from 'ember-platform';
import boundOneWay from 'ghost-admin/utils/bound-one-way';
import injectService from 'ember-service/inject';
import {InvokeActionMixin} from 'ember-invoke-action';
import {assign} from 'ember-platform';
import {bind, once, scheduleOnce} from 'ember-runloop';

const CmEditorComponent = Component.extend(InvokeActionMixin, {
classNameBindings: ['isFocused:focused'],
Expand Down
2 changes: 1 addition & 1 deletion app/components/gh-date-time-picker.js
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import Component from 'ember-component';
import computed, {reads, or} from 'ember-computed';
import computed, {or, reads} from 'ember-computed';
import injectService from 'ember-service/inject';
import moment from 'moment';
import {isBlank, isEmpty} from 'ember-utils';
Expand Down
6 changes: 3 additions & 3 deletions app/components/gh-datetime-input.js
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
import Component from 'ember-component';
import injectService from 'ember-service/inject';
import boundOneWay from 'ghost-admin/utils/bound-one-way';
import {formatDate} from 'ghost-admin/utils/date-formatting';
import {InvokeActionMixin} from 'ember-invoke-action';
import injectService from 'ember-service/inject';
import moment from 'moment';
import {InvokeActionMixin} from 'ember-invoke-action';
import {formatDate} from 'ghost-admin/utils/date-formatting';

export default Component.extend(InvokeActionMixin, {
tagName: 'span',
Expand Down
2 changes: 1 addition & 1 deletion app/components/gh-download-count.js
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import Ember from 'ember';
import Component from 'ember-component';
import Ember from 'ember';
import injectService from 'ember-service/inject';
import {task, timeout} from 'ember-concurrency';

Expand Down
2 changes: 1 addition & 1 deletion app/components/gh-dropdown-button.js
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import Component from 'ember-component';
import injectService from 'ember-service/inject';
import DropdownMixin from 'ghost-admin/mixins/dropdown-mixin';
import injectService from 'ember-service/inject';

export default Component.extend(DropdownMixin, {
tagName: 'button',
Expand Down
2 changes: 1 addition & 1 deletion app/components/gh-dropdown.js
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
import Component from 'ember-component';
import DropdownMixin from 'ghost-admin/mixins/dropdown-mixin';
import computed from 'ember-computed';
import injectService from 'ember-service/inject';
import run from 'ember-runloop';
import DropdownMixin from 'ghost-admin/mixins/dropdown-mixin';

export default Component.extend(DropdownMixin, {
classNames: 'dropdown',
Expand Down
2 changes: 1 addition & 1 deletion app/components/gh-editor-post-status.js
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import Component from 'ember-component';
import {task, timeout} from 'ember-concurrency';
import computed, {reads} from 'ember-computed';
import {task, timeout} from 'ember-concurrency';

// TODO: reduce when in testing mode
const SAVE_TIMEOUT_MS = 3000;
Expand Down
4 changes: 2 additions & 2 deletions app/components/gh-editor.js
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
import Component from 'ember-component';
import run from 'ember-runloop';
import {
IMAGE_MIME_TYPES,
IMAGE_EXTENSIONS
IMAGE_EXTENSIONS,
IMAGE_MIME_TYPES
} from 'ghost-admin/components/gh-image-uploader';

const {debounce} = run;
Expand Down
15 changes: 7 additions & 8 deletions app/components/gh-file-uploader.js
Original file line number Diff line number Diff line change
@@ -1,18 +1,17 @@
import Component from 'ember-component';
import {htmlSafe} from 'ember-string';
import injectService from 'ember-service/inject';
import computed from 'ember-computed';
import {isBlank} from 'ember-utils';
import injectService from 'ember-service/inject';
import run from 'ember-runloop';
import {isEmberArray} from 'ember-array/utils';

import {invokeAction} from 'ember-invoke-action';
import {
isVersionMismatchError,
UnsupportedMediaTypeError,
isRequestEntityTooLargeError,
isUnsupportedMediaTypeError,
UnsupportedMediaTypeError
isVersionMismatchError
} from 'ghost-admin/services/ajax';
import {htmlSafe} from 'ember-string';
import {invokeAction} from 'ember-invoke-action';
import {isBlank} from 'ember-utils';
import {isEmberArray} from 'ember-array/utils';

export default Component.extend({
tagName: 'section',
Expand Down
8 changes: 4 additions & 4 deletions app/components/gh-fullscreen-modal.js
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
import Component from 'ember-component';
import RSVP from 'rsvp';
import computed from 'ember-computed';
import injectService from 'ember-service/inject';
import {A as emberA} from 'ember-array/utils';
import {isBlank} from 'ember-utils';
import run from 'ember-runloop';
import {A as emberA} from 'ember-array/utils';
import {invokeAction} from 'ember-invoke-action';
import computed from 'ember-computed';
import Component from 'ember-component';
import {isBlank} from 'ember-utils';

const FullScreenModalComponent = Component.extend({

Expand Down
14 changes: 7 additions & 7 deletions app/components/gh-image-uploader.js
Original file line number Diff line number Diff line change
@@ -1,18 +1,18 @@
import Component from 'ember-component';
import computed from 'ember-computed';
import ghostPaths from 'ghost-admin/utils/ghost-paths';
import injectService from 'ember-service/inject';
import {htmlSafe} from 'ember-string';
import {isBlank} from 'ember-utils';
import {isEmberArray} from 'ember-array/utils';
import run from 'ember-runloop';
import {invokeAction} from 'ember-invoke-action';
import ghostPaths from 'ghost-admin/utils/ghost-paths';
import {
UnsupportedMediaTypeError,
isRequestEntityTooLargeError,
isUnsupportedMediaTypeError,
isVersionMismatchError,
UnsupportedMediaTypeError
isVersionMismatchError
} from 'ghost-admin/services/ajax';
import {htmlSafe} from 'ember-string';
import {invokeAction} from 'ember-invoke-action';
import {isBlank} from 'ember-utils';
import {isEmberArray} from 'ember-array/utils';

export const IMAGE_MIME_TYPES = 'image/gif,image/jpg,image/jpeg,image/png,image/svg+xml';
export const IMAGE_EXTENSIONS = ['gif', 'jpg', 'jpeg', 'png', 'svg'];
Expand Down
4 changes: 2 additions & 2 deletions app/components/gh-markdown-editor.js
Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@
import Component from 'ember-component';
import computed from 'ember-computed';
import formatMarkdown from 'ghost-admin/utils/format-markdown';
import run from 'ember-runloop';
import {assign} from 'ember-platform';
import {copy} from 'ember-metal/utils';
import {isEmpty} from 'ember-utils';
import run from 'ember-runloop';
import formatMarkdown from 'ghost-admin/utils/format-markdown';

const MOBILEDOC_VERSION = '0.3.1';

Expand Down
2 changes: 1 addition & 1 deletion app/components/gh-nav-menu.js
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import Component from 'ember-component';
import calculatePosition from 'ember-basic-dropdown/utils/calculate-position';
import injectService from 'ember-service/inject';
import {htmlSafe} from 'ember-string';
import calculatePosition from 'ember-basic-dropdown/utils/calculate-position';

export default Component.extend({
config: injectService(),
Expand Down
4 changes: 2 additions & 2 deletions app/components/gh-navitem.js
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
import Component from 'ember-component';
import SortableItem from 'ember-sortable/mixins/sortable-item';
import ValidationState from 'ghost-admin/mixins/validation-state';
import computed, {alias, readOnly} from 'ember-computed';
import run from 'ember-runloop';
import ValidationState from 'ghost-admin/mixins/validation-state';
import SortableItem from 'ember-sortable/mixins/sortable-item';

export default Component.extend(ValidationState, SortableItem, {
classNames: 'gh-blognav-item',
Expand Down
2 changes: 1 addition & 1 deletion app/components/gh-notification.js
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import Component from 'ember-component';
import injectService from 'ember-service/inject';
import computed from 'ember-computed';
import injectService from 'ember-service/inject';

export default Component.extend({
tagName: 'article',
Expand Down
2 changes: 1 addition & 1 deletion app/components/gh-notifications.js
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import Component from 'ember-component';
import {alias} from 'ember-computed';
import injectService from 'ember-service/inject';
import {alias} from 'ember-computed';

export default Component.extend({
tagName: 'aside',
Expand Down
12 changes: 6 additions & 6 deletions app/components/gh-post-settings-menu.js
Original file line number Diff line number Diff line change
@@ -1,14 +1,14 @@
import Ember from 'ember';
import Component from 'ember-component';
import computed, {alias} from 'ember-computed';
import {guidFor} from 'ember-metal/utils';
import injectService from 'ember-service/inject';
import {htmlSafe} from 'ember-string';
import {invokeAction} from 'ember-invoke-action';
import Ember from 'ember';
import SettingsMenuMixin from 'ghost-admin/mixins/settings-menu-component';
import boundOneWay from 'ghost-admin/utils/bound-one-way';
import computed, {alias} from 'ember-computed';
import injectService from 'ember-service/inject';
import isNumber from 'ghost-admin/utils/isNumber';
import moment from 'moment';
import {guidFor} from 'ember-metal/utils';
import {htmlSafe} from 'ember-string';
import {invokeAction} from 'ember-invoke-action';

const {Handlebars} = Ember;

Expand Down
6 changes: 3 additions & 3 deletions app/components/gh-posts-list-item.js
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
import Ember from 'ember';
import $ from 'jquery';
import Component from 'ember-component';
import {htmlSafe} from 'ember-string';
import Ember from 'ember';
import computed, {alias, equal} from 'ember-computed';
import injectService from 'ember-service/inject';
import $ from 'jquery';
import {htmlSafe} from 'ember-string';
import {isBlank} from 'ember-utils';

// ember-cli-shims doesn't export these
Expand Down
7 changes: 3 additions & 4 deletions app/components/gh-profile-image.js
Original file line number Diff line number Diff line change
@@ -1,11 +1,10 @@
import AjaxService from 'ember-ajax/services/ajax';
import Component from 'ember-component';
import computed, {notEmpty} from 'ember-computed';
import {htmlSafe} from 'ember-string';
import injectService from 'ember-service/inject';
import {isBlank} from 'ember-utils';
import run from 'ember-runloop';

import AjaxService from 'ember-ajax/services/ajax';
import {htmlSafe} from 'ember-string';
import {isBlank} from 'ember-utils';
import {isNotFoundError} from 'ember-ajax/errors';

/**
Expand Down
2 changes: 1 addition & 1 deletion app/components/gh-publishmenu-scheduled.js
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import Component from 'ember-component';
import moment from 'moment';
import computed from 'ember-computed';
import injectService from 'ember-service/inject';
import moment from 'moment';

export default Component.extend({
clock: injectService(),
Expand Down
2 changes: 1 addition & 1 deletion app/components/gh-publishmenu.js
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
import $ from 'jquery';
import Component from 'ember-component';
import computed, {reads} from 'ember-computed';
import injectService from 'ember-service/inject';
import {task} from 'ember-concurrency';
import $ from 'jquery';

export default Component.extend({
clock: injectService(),
Expand Down
2 changes: 1 addition & 1 deletion app/components/gh-search-input.js
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,8 @@
import Component from 'ember-component';
import RSVP from 'rsvp';
import computed from 'ember-computed';
import run from 'ember-runloop';
import injectService from 'ember-service/inject';
import run from 'ember-runloop';
import {isBlank, isEmpty} from 'ember-utils';

export function computedGroup(category) {
Expand Down
4 changes: 2 additions & 2 deletions app/components/gh-search-input/trigger.js
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import run from 'ember-runloop';
import {isBlank} from 'ember-utils';
import Component from 'ember-component';
import run from 'ember-runloop';
import {invokeAction} from 'ember-invoke-action';
import {isBlank} from 'ember-utils';

export default Component.extend({
open() {
Expand Down
Loading

0 comments on commit 7eefbba

Please sign in to comment.