Skip to content

Commit

Permalink
Merge pull request #1393 from sheepsteak/eslint-6
Browse files Browse the repository at this point in the history
Support ESLint v6
  • Loading branch information
ljharb committed Jun 24, 2019
2 parents fc65509 + 7e41d29 commit c8132f2
Show file tree
Hide file tree
Showing 30 changed files with 206 additions and 188 deletions.
7 changes: 3 additions & 4 deletions .travis.yml
Expand Up @@ -9,7 +9,7 @@ node_js:
os: linux

env:
- ESLINT_VERSION=^6.0.0-alpha
- ESLINT_VERSION=6
- ESLINT_VERSION=5
- ESLINT_VERSION=4
- ESLINT_VERSION=3
Expand Down Expand Up @@ -59,16 +59,15 @@ matrix:
- node_js: '4'
env: ESLINT_VERSION=5
- node_js: '4'
env: ESLINT_VERSION=^6.0.0-alpha
env: ESLINT_VERSION=6
- node_js: '6'
env: ESLINT_VERSION=^6.0.0-alpha
env: ESLINT_VERSION=6

fast_finish: true
allow_failures:
# issues with typescript deps in this version intersection
- node_js: '4'
env: ESLINT_VERSION=4
- env: ESLINT_VERSION=^6.0.0-alpha

before_install:
- 'nvm install-latest-npm'
Expand Down
10 changes: 5 additions & 5 deletions package.json
Expand Up @@ -47,7 +47,8 @@
},
"homepage": "https://github.com/benmosher/eslint-plugin-import",
"devDependencies": {
"@typescript-eslint/parser": "^1.5.0",
"@eslint/import-test-order-redirect-scoped": "file:./tests/files/order-redirect-scoped",
"@typescript-eslint/parser": "1.10.3-alpha.13",
"babel-cli": "^6.26.0",
"babel-core": "^6.26.3",
"babel-eslint": "^8.2.6",
Expand All @@ -58,13 +59,12 @@
"chai": "^4.2.0",
"coveralls": "^3.0.2",
"cross-env": "^4.0.0",
"eslint": "2.x - 5.x",
"eslint": "2.x - 6.x",
"eslint-import-resolver-node": "file:./resolvers/node",
"eslint-import-resolver-typescript": "^1.0.2",
"eslint-import-resolver-webpack": "file:./resolvers/webpack",
"eslint-module-utils": "file:./utils",
"eslint-import-test-order-redirect": "file:./tests/files/order-redirect",
"@eslint/import-test-order-redirect-scoped": "file:./tests/files/order-redirect-scoped",
"eslint-module-utils": "file:./utils",
"eslint-plugin-import": "2.x",
"linklocal": "^2.8.2",
"mocha": "^3.5.3",
Expand All @@ -77,7 +77,7 @@
"typescript-eslint-parser": "^22.0.0"
},
"peerDependencies": {
"eslint": "2.x - 5.x"
"eslint": "2.x - 6.x"
},
"dependencies": {
"array-includes": "^3.0.3",
Expand Down
5 changes: 4 additions & 1 deletion src/rules/no-unused-modules.js
Expand Up @@ -15,7 +15,10 @@ try {
var FileEnumerator = require('eslint/lib/cli-engine/file-enumerator').FileEnumerator
listFilesToProcess = function (src) {
var e = new FileEnumerator()
return Array.from(e.iterateFiles(src))
return Array.from(e.iterateFiles(src), ({ filePath, ignored }) => ({
ignored,
filename: filePath,
}))
}
} catch (e1) {
try {
Expand Down
15 changes: 11 additions & 4 deletions tests/src/core/getExports.js
Expand Up @@ -187,6 +187,7 @@ describe('ExportMap', function () {
jsdocTests({
parserPath: 'espree',
parserOptions: {
ecmaVersion: 2015,
sourceType: 'module',
attachComment: true,
},
Expand All @@ -195,6 +196,7 @@ describe('ExportMap', function () {
jsdocTests({
parserPath: 'espree',
parserOptions: {
ecmaVersion: 2015,
sourceType: 'module',
attachComment: true,
},
Expand All @@ -206,6 +208,7 @@ describe('ExportMap', function () {
jsdocTests({
parserPath: 'babel-eslint',
parserOptions: {
ecmaVersion: 2015,
sourceType: 'module',
attachComment: true,
},
Expand All @@ -214,6 +217,7 @@ describe('ExportMap', function () {
jsdocTests({
parserPath: 'babel-eslint',
parserOptions: {
ecmaVersion: 2015,
sourceType: 'module',
attachComment: true,
},
Expand All @@ -223,8 +227,8 @@ describe('ExportMap', function () {
})

context('exported static namespaces', function () {
const espreeContext = { parserPath: 'espree', parserOptions: { sourceType: 'module' }, settings: {} }
const babelContext = { parserPath: 'babel-eslint', parserOptions: { sourceType: 'module' }, settings: {} }
const espreeContext = { parserPath: 'espree', parserOptions: { ecmaVersion: 2015, sourceType: 'module' }, settings: {} }
const babelContext = { parserPath: 'babel-eslint', parserOptions: { ecmaVersion: 2015, sourceType: 'module' }, settings: {} }

it('works with espree & traditional namespace exports', function () {
const path = getFilename('deep/a.js')
Expand Down Expand Up @@ -255,7 +259,7 @@ describe('ExportMap', function () {
})

context('deep namespace caching', function () {
const espreeContext = { parserPath: 'espree', parserOptions: { sourceType: 'module' }, settings: {} }
const espreeContext = { parserPath: 'espree', parserOptions: { ecmaVersion: 2015, sourceType: 'module' }, settings: {} }
let a
before('sanity check and prime cache', function (done) {
// first version
Expand Down Expand Up @@ -332,13 +336,16 @@ describe('ExportMap', function () {

const configs = [
// ['string form', { 'typescript-eslint-parser': '.ts' }],
['array form', { 'typescript-eslint-parser': ['.ts', '.tsx'] }],
]

if (semver.satisfies(eslintPkg.version, '>5.0.0')) {
configs.push(['array form', { '@typescript-eslint/parser': ['.ts', '.tsx'] }])
}

if (semver.satisfies(eslintPkg.version, '<6.0.0')) {
configs.push(['array form', { 'typescript-eslint-parser': ['.ts', '.tsx'] }])
}

configs.forEach(([description, parserConfig]) => {

describe(description, function () {
Expand Down
2 changes: 1 addition & 1 deletion tests/src/core/parse.js
Expand Up @@ -20,7 +20,7 @@ describe('parse(content, { settings, ecmaFeatures })', function () {
})

it('infers jsx from ecmaFeatures when using stock parser', function () {
expect(() => parse(path, content, { settings: {}, parserPath: 'espree', parserOptions: { sourceType: 'module', ecmaFeatures: { jsx: true } } }))
expect(() => parse(path, content, { settings: {}, parserPath: 'espree', parserOptions: { ecmaVersion: 2015, sourceType: 'module', ecmaFeatures: { jsx: true } } }))
.not.to.throw(Error)
})

Expand Down
26 changes: 13 additions & 13 deletions tests/src/rules/default.js
Expand Up @@ -28,19 +28,19 @@ ruleTester.run('default', rule, {

// es7 export syntax
test({ code: 'export bar from "./bar"'
, parser: 'babel-eslint' }),
, parser: require.resolve('babel-eslint') }),
test({ code: 'export { default as bar } from "./bar"' }),
test({ code: 'export bar, { foo } from "./bar"'
, parser: 'babel-eslint' }),
, parser: require.resolve('babel-eslint') }),
test({ code: 'export { default as bar, foo } from "./bar"' }),
test({ code: 'export bar, * as names from "./bar"'
, parser: 'babel-eslint' }),
, parser: require.resolve('babel-eslint') }),

// sanity check
test({ code: 'export {a} from "./named-exports"' }),
test({
code: 'import twofer from "./trampoline"',
parser: 'babel-eslint',
parser: require.resolve('babel-eslint'),
}),

// jsx
Expand Down Expand Up @@ -68,27 +68,27 @@ ruleTester.run('default', rule, {
// from no-errors
test({
code: "import Foo from './jsx/FooES7.js';",
parser: 'babel-eslint',
parser: require.resolve('babel-eslint'),
}),

// #545: more ES7 cases
test({
code: "import bar from './default-export-from.js';",
parser: 'babel-eslint',
parser: require.resolve('babel-eslint'),
}),
test({
code: "import bar from './default-export-from-named.js';",
parser: 'babel-eslint',
parser: require.resolve('babel-eslint'),
}),
test({
code: "import bar from './default-export-from-ignored.js';",
settings: { 'import/ignore': ['common'] },
parser: 'babel-eslint',
parser: require.resolve('babel-eslint'),
}),
test({
code: "export bar from './default-export-from-ignored.js';",
settings: { 'import/ignore': ['common'] },
parser: 'babel-eslint',
parser: require.resolve('babel-eslint'),
}),

...SYNTAX_CASES,
Expand All @@ -113,23 +113,23 @@ ruleTester.run('default', rule, {
// es7 export syntax
test({
code: 'export baz from "./named-exports"',
parser: 'babel-eslint',
parser: require.resolve('babel-eslint'),
errors: ['No default export found in module.'],
}),
test({
code: 'export baz, { bar } from "./named-exports"',
parser: 'babel-eslint',
parser: require.resolve('babel-eslint'),
errors: ['No default export found in module.'],
}),
test({
code: 'export baz, * as names from "./named-exports"',
parser: 'babel-eslint',
parser: require.resolve('babel-eslint'),
errors: ['No default export found in module.'],
}),
// exports default from a module with no default
test({
code: 'import twofer from "./broken-trampoline"',
parser: 'babel-eslint',
parser: require.resolve('babel-eslint'),
errors: ['No default export found in module.'],
}),

Expand Down
2 changes: 1 addition & 1 deletion tests/src/rules/dynamic-import-chunkname.js
Expand Up @@ -14,7 +14,7 @@ const pickyCommentOptions = [{
const multipleImportFunctionOptions = [{
importFunctions: ['dynamicImport', 'definitelyNotStaticImport'],
}]
const parser = 'babel-eslint'
const parser = require.resolve('babel-eslint')

const noLeadingCommentError = 'dynamic imports require a leading comment with the webpack chunkname'
const nonBlockCommentError = 'dynamic imports require a /* foo */ style comment, not a // foo comment'
Expand Down
8 changes: 6 additions & 2 deletions tests/src/rules/export.js
Expand Up @@ -112,10 +112,14 @@ ruleTester.run('export', rule, {

context('Typescript', function () {
// Typescript
const parsers = ['typescript-eslint-parser']
const parsers = []

if (semver.satisfies(eslintPkg.version, '>5.0.0')) {
parsers.push('@typescript-eslint/parser')
parsers.push(require.resolve('@typescript-eslint/parser'))
}

if (semver.satisfies(eslintPkg.version, '<6.0.0')) {
parsers.push(require.resolve('typescript-eslint-parser'))
}

parsers.forEach((parser) => {
Expand Down
2 changes: 1 addition & 1 deletion tests/src/rules/max-dependencies.js
Expand Up @@ -66,7 +66,7 @@ ruleTester.run('max-dependencies', rule, {

test({
code: 'import type { x } from \'./foo\'; import type { y } from \'./bar\'',
parser: 'babel-eslint',
parser: require.resolve('babel-eslint'),
options: [{
max: 1,
}],
Expand Down
40 changes: 22 additions & 18 deletions tests/src/rules/named.js
Expand Up @@ -55,11 +55,11 @@ ruleTester.run('named', rule, {
// es7
test({
code: 'export bar, { foo } from "./bar"',
parser: 'babel-eslint',
parser: require.resolve('babel-eslint'),
}),
test({
code: 'import { foo, bar } from "./named-trampoline"',
parser: 'babel-eslint',
parser: require.resolve('babel-eslint'),
}),

// regression tests
Expand All @@ -74,43 +74,43 @@ ruleTester.run('named', rule, {
// should ignore imported/exported flow types, even if they don’t exist
test({
code: 'import type { MissingType } from "./flowtypes"',
parser: 'babel-eslint',
parser: require.resolve('babel-eslint'),
}),
test({
code: 'import typeof { MissingType } from "./flowtypes"',
parser: 'babel-eslint',
parser: require.resolve('babel-eslint'),
}),
test({
code: 'import type { MyOpaqueType } from "./flowtypes"',
parser: 'babel-eslint',
parser: require.resolve('babel-eslint'),
}),
test({
code: 'import typeof { MyOpaqueType } from "./flowtypes"',
parser: 'babel-eslint',
parser: require.resolve('babel-eslint'),
}),
test({
code: 'import { type MyOpaqueType, MyClass } from "./flowtypes"',
parser: 'babel-eslint',
parser: require.resolve('babel-eslint'),
}),
test({
code: 'import { typeof MyOpaqueType, MyClass } from "./flowtypes"',
parser: 'babel-eslint',
parser: require.resolve('babel-eslint'),
}),
test({
code: 'import typeof MissingType from "./flowtypes"',
parser: 'babel-eslint',
parser: require.resolve('babel-eslint'),
}),
test({
code: 'import typeof * as MissingType from "./flowtypes"',
parser: 'babel-eslint',
parser: require.resolve('babel-eslint'),
}),
test({
code: 'export type { MissingType } from "./flowtypes"',
parser: 'babel-eslint',
parser: require.resolve('babel-eslint'),
}),
test({
code: 'export type { MyOpaqueType } from "./flowtypes"',
parser: 'babel-eslint',
parser: require.resolve('babel-eslint'),
}),

// jsnext
Expand Down Expand Up @@ -188,17 +188,17 @@ ruleTester.run('named', rule, {
// es7
test({
code: 'export bar2, { bar } from "./bar"',
parser: 'babel-eslint',
parser: require.resolve('babel-eslint'),
errors: ["bar not found in './bar'"],
}),
test({
code: 'import { foo, bar, baz } from "./named-trampoline"',
parser: 'babel-eslint',
parser: require.resolve('babel-eslint'),
errors: ["baz not found in './named-trampoline'"],
}),
test({
code: 'import { baz } from "./broken-trampoline"',
parser: 'babel-eslint',
parser: require.resolve('babel-eslint'),
errors: ["baz not found via broken-trampoline.js -> named-exports.js"],
}),

Expand All @@ -214,7 +214,7 @@ ruleTester.run('named', rule, {

test({
code: 'import { type MyOpaqueType, MyMissingClass } from "./flowtypes"',
parser: 'babel-eslint',
parser: require.resolve('babel-eslint'),
errors: ["MyMissingClass not found in './flowtypes'"],
}),

Expand Down Expand Up @@ -286,10 +286,14 @@ ruleTester.run('named (export *)', rule, {

context('Typescript', function () {
// Typescript
const parsers = ['typescript-eslint-parser']
const parsers = []

if (semver.satisfies(eslintPkg.version, '>5.0.0')) {
parsers.push('@typescript-eslint/parser')
parsers.push(require.resolve('@typescript-eslint/parser'))
}

if (semver.satisfies(eslintPkg.version, '<6.0.0')) {
parsers.push(require.resolve('typescript-eslint-parser'))
}

parsers.forEach((parser) => {
Expand Down

0 comments on commit c8132f2

Please sign in to comment.