diff --git a/lib/options-manager.js b/lib/options-manager.js index d061f840..2656cf8d 100644 --- a/lib/options-manager.js +++ b/lib/options-manager.js @@ -297,7 +297,12 @@ const buildXOConfig = options => config => { } if (options.semicolon === false && !options.prettier) { - config.rules.semi = ['error', 'never']; + if (options.ts) { + config.rules['@typescript-eslint/semi'] = ['error', 'never']; + } else { + config.rules.semi = ['error', 'never']; + } + config.rules['semi-spacing'] = ['error', { before: false, after: true diff --git a/test/fixtures/typescript/child/no-semicolon.ts b/test/fixtures/typescript/child/no-semicolon.ts new file mode 100644 index 00000000..1008a4fc --- /dev/null +++ b/test/fixtures/typescript/child/no-semicolon.ts @@ -0,0 +1 @@ +console.log('no-semicolon') diff --git a/test/lint-files.js b/test/lint-files.js index 593ab917..04fb87d2 100644 --- a/test/lint-files.js +++ b/test/lint-files.js @@ -196,6 +196,21 @@ test('typescript files', async t => { ); }); +test('typescript 2 space option', async t => { + const {errorCount} = await fn.lintFiles('two-spaces.tsx', {cwd: 'fixtures/typescript', space: 2}); + t.is(errorCount, 0); +}); + +test('typescript 4 space option', async t => { + const {errorCount} = await fn.lintFiles('child/sub-child/four-spaces.ts', {cwd: 'fixtures/typescript', space: 4}); + t.is(errorCount, 0); +}); + +test('typescript no semicolon option', async t => { + const {errorCount} = await fn.lintFiles('child/no-semicolon.ts', {cwd: 'fixtures/typescript', semicolon: false}); + t.is(errorCount, 0); +}); + test('webpack import resolver is used if webpack.config.js is found', async t => { const cwd = 'fixtures/webpack/with-config/'; const {results} = await fn.lintFiles(path.resolve(cwd, 'file1.js'), { diff --git a/test/lint-text.js b/test/lint-text.js index 1014ae21..a3cb1d7d 100644 --- a/test/lint-text.js +++ b/test/lint-text.js @@ -270,17 +270,34 @@ test('find configurations close to linted file', t => { test('typescript files', t => { let {results} = fn.lintText(`console.log([ - 2 - ]);`, {filename: 'fixtures/typescript/two-spaces.tsx'}); + 2 +]); +`, {filename: 'fixtures/typescript/two-spaces.tsx'}); t.true(hasRule(results, '@typescript-eslint/indent')); + ({results} = fn.lintText(`console.log([ + 2 +]); +`, {filename: 'fixtures/typescript/two-spaces.tsx', space: 2})); + t.is(results[0].errorCount, 0); + ({results} = fn.lintText('console.log(\'extra-semicolon\');;\n', {filename: 'fixtures/typescript/child/extra-semicolon.ts'})); t.true(hasRule(results, '@typescript-eslint/no-extra-semi')); + ({results} = fn.lintText('console.log(\'no-semicolon\')\n', {filename: 'fixtures/typescript/child/no-semicolon.ts', semicolon: false})); + t.is(results[0].errorCount, 0); + ({results} = fn.lintText(`console.log([ 4 -]);`, {filename: 'fixtures/typescript/child/sub-child/four-spaces.ts'})); +]); +`, {filename: 'fixtures/typescript/child/sub-child/four-spaces.ts'})); t.true(hasRule(results, '@typescript-eslint/indent')); + + ({results} = fn.lintText(`console.log([ + 4 +]); +`, {filename: 'fixtures/typescript/child/sub-child/four-spaces.ts', space: 4})); + t.is(results[0].errorCount, 0); }); function configType(t, {dir}) {