Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
14 changes: 14 additions & 0 deletions .changeset/ten-pets-pay.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
---
'@cloudfour/eslint-plugin': major
---

Sort imports

**Newly Enabled Rules**

- [`@cloudfour/import/order`](https://github.com/import-js/eslint-plugin-import/blob/v2.25.4/docs/rules/order.md)
- [`sort-imports`](https://eslint.org/docs/rules/sort-imports)

These rules sort imports into separate categories, with empty lines between the categories, and with the imports within a category sorted alphabetically. The variable bindings within an import statement are also sorted alphabetically.

These rules are auto-fixable, however in some cases manual sorting may be needed. Occasionally, the auto-fix will detach comments from the import statements they refer to.
3 changes: 2 additions & 1 deletion build.js
Original file line number Diff line number Diff line change
@@ -1,7 +1,8 @@
const prettier = require('prettier');
const { writeFileSync } = require('fs');
const { join, sep } = require('path');

const prettier = require('prettier');

const { configs, environments } = require('./src/config');

const resolveStart = '__REQUIRE_RESOLVE__';
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import { types as t, template } from '@babel/core';
import ReplaceSupers from '@babel/helper-replace-supers';
import nameFunction from '@babel/helper-function-name';
import ReplaceSupers from '@babel/helper-replace-supers';

export function hasOwnDecorators(node) {
return Boolean(node.decorators && node.decorators.length > 0);
Expand Down
Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@
/* eslint-disable max-params */
import { template, traverse, types as t } from '@babel/core';
import { types as t, template, traverse } from '@babel/core';
import memberExpressionToFunctions from '@babel/helper-member-expression-to-functions';
import optimiseCall from '@babel/helper-optimise-call-expression';
import ReplaceSupers, {
environmentVisitor,
} from '@babel/helper-replace-supers';
import memberExpressionToFunctions from '@babel/helper-member-expression-to-functions';
import optimiseCall from '@babel/helper-optimise-call-expression';

import * as ts from './typescript';

Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import { types as t, template } from '@babel/core';
import { declare } from '@babel/helper-plugin-utils';
import { template, types as t } from '@babel/core';

import transformWithoutHelper from './no-helper-implementation';

Expand Down
Original file line number Diff line number Diff line change
@@ -1,15 +1,15 @@
import { declare } from '@babel/helper-plugin-utils';
import { types as t, template } from '@babel/core';
import {
isModule,
rewriteModuleStatementsAndPrepareHeader,
hasExports,
isSideEffectImport,
buildNamespaceInitStatements,
ensureStatementsHoisted,
wrapInterop,
getModuleName,
hasExports,
isModule,
isSideEffectImport,
rewriteModuleStatementsAndPrepareHeader,
wrapInterop,
} from '@babel/helper-module-transforms';
import { template, types as t } from '@babel/core';
import { declare } from '@babel/helper-plugin-utils';
import { getImportSource } from 'babel-plugin-dynamic-import-node/utils';

const buildWrapper = template(`
Expand Down
Original file line number Diff line number Diff line change
@@ -1,16 +1,15 @@
import { declare } from '@babel/helper-plugin-utils';
import { types as t, template } from '@babel/core';
import {
isModule,
rewriteModuleStatementsAndPrepareHeader,
isSideEffectImport,
buildNamespaceInitStatements,
ensureStatementsHoisted,
wrapInterop,
getModuleName,
isModule,
isSideEffectImport,
rewriteModuleStatementsAndPrepareHeader,
wrapInterop,
} from '@babel/helper-module-transforms';
import { declare } from '@babel/helper-plugin-utils';
import simplifyAccess from '@babel/helper-simple-access';
import { template, types as t } from '@babel/core';

import { createDynamicImportTransform } from 'babel-plugin-dynamic-import-node/utils';

export default declare((api, options) => {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import { template, types as t } from '@babel/core';
import { types as t, template } from '@babel/core';

const buildDefaultParam = template(`
let VARIABLE_NAME =
Expand Down
Original file line number Diff line number Diff line change
@@ -1,15 +1,15 @@
'use strict';

const path = require('path');
const outputFile = require('output-file-sync');
const helpers = require('@babel/helpers');

const babel = require('@babel/core');
const helpers = require('@babel/helpers');
const runtimeVersion = require('@babel/runtime/package.json').version;
const template = require('@babel/template');
const t = require('@babel/types');
const outputFile = require('output-file-sync');

const transformRuntime = require('..');

const runtimeVersion = require('@babel/runtime/package.json').version;
const corejs2Definitions =
require('../lib/runtime-corejs2-definitions').default();
const corejs3Definitions =
Expand Down
11 changes: 6 additions & 5 deletions fixtures/cloudfour.com-patterns/gulpfile.js/tasks/svg-to-twig.js
Original file line number Diff line number Diff line change
@@ -1,11 +1,12 @@
const { readFileSync } = require('fs');
const path = require('path');

const { src, dest } = require('gulp');
const svgmin = require('gulp-svgmin');
const rename = require('gulp-rename');
const { obj } = require('through2');
const ltx = require('ltx');
const svgmin = require('gulp-svgmin');
const yaml = require('js-yaml');
const path = require('path');
const { readFileSync } = require('fs');
const ltx = require('ltx');
const { obj } = require('through2');

// Load SVGO preferences from config file to keep things DRY
const svgoPath = path.join(__dirname, '../../.svgo.yml');
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,8 @@
const { basename, extname } = require('path');

const groupBy = require('lodash/groupBy');
const kebabCase = require('lodash/kebabCase');
const startCase = require('lodash/startCase');
const { basename, extname } = require('path');

/**
* Return a string containing Storybook Docs MDX markup for a color.
Expand Down
4 changes: 3 additions & 1 deletion fixtures/dom-testing-library/src/queries/role.js
Original file line number Diff line number Diff line change
@@ -1,10 +1,12 @@
import { computeAccessibleName } from 'dom-accessibility-api';

import {
getImplicitAriaRoles,
prettyRoles,
isInaccessible,
isSubtreeInaccessible,
prettyRoles,
} from '../role-helpers';

import {
buildQueries,
fuzzyMatches,
Expand Down
6 changes: 3 additions & 3 deletions fixtures/dom-testing-library/src/queries/text.js
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
import {
buildQueries,
fuzzyMatches,
matches,
makeNormalizer,
getNodeText,
buildQueries,
makeNormalizer,
matches,
} from './all-utils';

function queryAllByText(
Expand Down
4 changes: 2 additions & 2 deletions fixtures/dom-testing-library/src/query-helpers.js
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import { fuzzyMatches, matches, makeNormalizer } from './matches';
import { waitFor } from './wait-for';
import { getConfig } from './config';
import { fuzzyMatches, makeNormalizer, matches } from './matches';
import { waitFor } from './wait-for';

function getMultipleElementsFoundError(message, container) {
return getConfig().getElementError(
Expand Down
8 changes: 4 additions & 4 deletions fixtures/dom-testing-library/src/wait-for-dom-change.js
Original file line number Diff line number Diff line change
@@ -1,12 +1,12 @@
import { getConfig } from './config';
import {
getWindowFromNode,
clearTimeout,
getDocument,
getWindowFromNode,
runWithRealTimers,
setImmediate,
setTimeout,
clearTimeout,
runWithRealTimers,
} from './helpers';
import { getConfig } from './config';

let hasWarned = false;

Expand Down
5 changes: 3 additions & 2 deletions fixtures/downshift/src/hooks/useCombobox/reducer.js
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
import { getHighlightedIndexOnOpen, getDefaultValue } from '../utils.js';
import { getNextWrappingIndex, getNextNonDisabledIndex } from '../../utils';
import { getNextNonDisabledIndex, getNextWrappingIndex } from '../../utils';
import { getDefaultValue, getHighlightedIndexOnOpen } from '../utils.js';

import * as stateChangeTypes from './stateChangeTypes';

/* eslint-disable complexity */
Expand Down
3 changes: 2 additions & 1 deletion fixtures/downshift/src/hooks/useCombobox/utils.js
Original file line number Diff line number Diff line change
@@ -1,8 +1,9 @@
import PropTypes from 'prop-types';

import { generateId, getA11yStatusMessage } from '../../utils';
import {
getElementIds as getElementIdsCommon,
defaultProps as defaultPropsCommon,
getElementIds as getElementIdsCommon,
getInitialState as getInitialStateCommon,
} from '../utils.js';

Expand Down
7 changes: 4 additions & 3 deletions fixtures/downshift/src/hooks/useSelect/reducer.js
Original file line number Diff line number Diff line change
@@ -1,7 +1,8 @@
import { getNextWrappingIndex, getNextNonDisabledIndex } from '../../utils';
import { getHighlightedIndexOnOpen, getDefaultValue } from '../utils.js';
import { getItemIndexByCharacterKey } from './utils.js';
import { getNextNonDisabledIndex, getNextWrappingIndex } from '../../utils';
import { getDefaultValue, getHighlightedIndexOnOpen } from '../utils.js';

import * as stateChangeTypes from './stateChangeTypes';
import { getItemIndexByCharacterKey } from './utils.js';

/* eslint-disable complexity */
export default function downshiftSelectReducer(state, action) {
Expand Down
1 change: 1 addition & 0 deletions fixtures/downshift/src/hooks/useSelect/utils.js
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
import PropTypes from 'prop-types';

import { defaultProps as commonDefaultProps } from '../utils.js';

// eslint-disable-next-line max-params
Expand Down
5 changes: 3 additions & 2 deletions fixtures/downshift/src/hooks/utils.js
Original file line number Diff line number Diff line change
@@ -1,10 +1,11 @@
import PropTypes from 'prop-types';
import { useCallback, useReducer } from 'react';

import {
scrollIntoView,
generateId,
getNextWrappingIndex,
getState,
generateId,
scrollIntoView,
} from '../utils';

const defaultStateValues = {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,16 +24,19 @@

const os = require('os');
const path = require('path');

const debug = require('debug')('eslint:cascading-config-array-factory');

const { validateConfigArray } = require('../shared/config-validator');
const { emitDeprecationWarning } = require('../shared/deprecation-warnings');
const { ConfigArrayFactory } = require('./config-array-factory');

const {
ConfigArray,
ConfigDependency,
IgnorePattern,
} = require('./config-array');
const { ConfigArrayFactory } = require('./config-array-factory');
const loadRules = require('./load-rules');
const debug = require('debug')('eslint:cascading-config-array-factory');

// ------------------------------------------------------------------------------
// Helpers
Expand Down
5 changes: 4 additions & 1 deletion fixtures/eslint/lib/cli-engine/config-array-factory.js
Original file line number Diff line number Diff line change
Expand Up @@ -40,18 +40,21 @@

const fs = require('fs');
const path = require('path');

const debug = require('debug')('eslint:config-array-factory');
const importFresh = require('import-fresh');
const stripComments = require('strip-json-comments');

const { validateConfigSchema } = require('../shared/config-validator');
const naming = require('../shared/naming');
const ModuleResolver = require('../shared/relative-module-resolver');

const {
ConfigArray,
ConfigDependency,
IgnorePattern,
OverrideTester,
} = require('./config-array');
const debug = require('debug')('eslint:config-array-factory');

// ------------------------------------------------------------------------------
// Helpers
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -34,8 +34,9 @@

const assert = require('assert');
const path = require('path');
const ignore = require('ignore');

const debug = require('debug')('eslint:ignore-pattern');
const ignore = require('ignore');

/** @typedef {ReturnType<import("ignore").default>} Ignore */

Expand Down
6 changes: 4 additions & 2 deletions fixtures/eslint/lib/cli-engine/file-enumerator.js
Original file line number Diff line number Diff line change
Expand Up @@ -34,15 +34,17 @@

const fs = require('fs');
const path = require('path');

const debug = require('debug')('eslint:file-enumerator');
const getGlobParent = require('glob-parent');
const isGlob = require('is-glob');
const { escapeRegExp } = require('lodash');
const { Minimatch } = require('minimatch');
const { IgnorePattern } = require('./config-array');

const {
CascadingConfigArrayFactory,
} = require('./cascading-config-array-factory');
const debug = require('debug')('eslint:file-enumerator');
const { IgnorePattern } = require('./config-array');

// ------------------------------------------------------------------------------
// Helpers
Expand Down
8 changes: 5 additions & 3 deletions fixtures/eslint/lib/init/config-initializer.js
Original file line number Diff line number Diff line change
Expand Up @@ -9,23 +9,25 @@
// Requirements
// ------------------------------------------------------------------------------

const util = require('util');
const path = require('path');
const util = require('util');

const debug = require('debug')('eslint:config-initializer');
const inquirer = require('inquirer');
const ProgressBar = require('progress');
const semver = require('semver');

const recConfig = require('../../conf/eslint-recommended');
const ConfigOps = require('../shared/config-ops');
const log = require('../shared/logging');
const naming = require('../shared/naming');
const ModuleResolver = require('../shared/relative-module-resolver');

const autoconfig = require('./autoconfig.js');
const ConfigFile = require('./config-file');
const npmUtils = require('./npm-utils');
const { getSourceCodeOfFiles } = require('./source-code-utils');

const debug = require('debug')('eslint:config-initializer');

// ------------------------------------------------------------------------------
// Private
// ------------------------------------------------------------------------------
Expand Down
9 changes: 6 additions & 3 deletions fixtures/eslint/lib/linter/linter.js
Original file line number Diff line number Diff line change
Expand Up @@ -11,29 +11,32 @@
// ------------------------------------------------------------------------------

const path = require('path');

const debug = require('debug')('eslint:linter');
const eslintScope = require('eslint-scope');
const evk = require('eslint-visitor-keys');
const espree = require('espree');
const lodash = require('lodash');

const BuiltInEnvironments = require('../../conf/environments');
const ruleReplacements = require('../../conf/replacements.json');
const pkg = require('../../package.json');
const astUtils = require('../shared/ast-utils');
const ConfigOps = require('../shared/config-ops');
const validator = require('../shared/config-validator');
const Traverser = require('../shared/traverser');
const { SourceCode } = require('../source-code');
const CodePathAnalyzer = require('./code-path-analysis/code-path-analyzer');

const applyDisableDirectives = require('./apply-disable-directives');
const CodePathAnalyzer = require('./code-path-analysis/code-path-analyzer');
const ConfigCommentParser = require('./config-comment-parser');
const NodeEventGenerator = require('./node-event-generator');
const createReportTranslator = require('./report-translator');
const Rules = require('./rules');
const createEmitter = require('./safe-emitter');
const SourceCodeFixer = require('./source-code-fixer');
const timing = require('./timing');
const ruleReplacements = require('../../conf/replacements.json');

const debug = require('debug')('eslint:linter');
const MAX_AUTOFIX_PASSES = 10;
const DEFAULT_PARSER_NAME = 'espree';
const commentParser = new ConfigCommentParser();
Expand Down
Loading