Skip to content

Commit a9db0d0

Browse files
committed
fix: remove @types/eslint dependency as eslint is optional
Closes: #379
1 parent 3c3b894 commit a9db0d0

File tree

10 files changed

+59
-40
lines changed

10 files changed

+59
-40
lines changed

package.json

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -85,7 +85,6 @@
8585
"devDependencies": {
8686
"@commitlint/config-conventional": "^7.5.0",
8787
"@types/babel-code-frame": "^6.20.1",
88-
"@types/eslint": "^4.16.6",
8988
"@types/jest": "^24.0.11",
9089
"@types/lodash": "^4.14.134",
9190
"@types/micromatch": "^3.1.0",

src/ApiIncrementalChecker.ts

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,3 @@
1-
import * as eslint from 'eslint'; // Imported for types alone
2-
31
import {
42
IncrementalCheckerInterface,
53
IncrementalCheckerParams
@@ -11,11 +9,12 @@ import {
119
createIssuesFromTsDiagnostics,
1210
createIssuesFromEsLintReports
1311
} from './issue';
12+
import { LintReport } from './types/eslint';
1413

1514
export class ApiIncrementalChecker implements IncrementalCheckerInterface {
1615
protected readonly tsIncrementalCompiler: CompilerHost;
1716

18-
private currentEsLintErrors = new Map<string, eslint.CLIEngine.LintReport>();
17+
private currentEsLintErrors = new Map<string, LintReport>();
1918
private lastUpdatedFiles: string[] = [];
2019
private lastRemovedFiles: string[] = [];
2120

src/FilesRegister.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
11
import * as ts from 'typescript'; // import for types alone
2-
import * as eslint from 'eslint'; // import for types alone
2+
import { LintReport } from './types/eslint';
33

44
export interface DataShape {
55
source?: ts.SourceFile;
66
linted: boolean;
7-
eslints: eslint.CLIEngine.LintReport[];
7+
eslints: LintReport[];
88
}
99

1010
export class FilesRegister {

src/IncrementalChecker.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
import * as fs from 'fs';
22
import * as path from 'path';
33
import * as ts from 'typescript'; // Imported for types alone; actual requires take place in methods below
4-
import * as eslint from 'eslint';
54

65
import { FilesRegister } from './FilesRegister';
76
import { CancellationToken } from './CancellationToken';
@@ -22,6 +21,7 @@ import {
2221
createIssuesFromEsLintReports,
2322
createIssuesFromTsDiagnostics
2423
} from './issue';
24+
import { LintReport } from './types/eslint';
2525

2626
export class IncrementalChecker implements IncrementalCheckerInterface {
2727
private files = new FilesRegister(() => ({
@@ -261,7 +261,7 @@ export class IncrementalChecker implements IncrementalCheckerInterface {
261261
!IncrementalChecker.isFileExcluded(filePath)
262262
);
263263

264-
const currentEsLintErrors = new Map<string, eslint.CLIEngine.LintReport>();
264+
const currentEsLintErrors = new Map<string, LintReport>();
265265
filesToLint.forEach(fileName => {
266266
cancellationToken.throwIfCancellationRequested();
267267

@@ -289,7 +289,7 @@ export class IncrementalChecker implements IncrementalCheckerInterface {
289289

290290
const reports = this.files
291291
.keys()
292-
.reduce<eslint.CLIEngine.LintReport[]>(
292+
.reduce<LintReport[]>(
293293
(innerLints, filePath) =>
294294
innerLints.concat(this.files.getData(filePath).eslints),
295295
[]

src/createEslinter.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,16 @@
1-
import * as eslint from 'eslint'; // import for types alone
21
import * as path from 'path';
32

3+
import { LintReport } from './types/eslint';
44
import { throwIfIsInvalidSourceFileError } from './FsHelper';
55

66
export function createEslinter(eslintOptions: object) {
77
// eslint-disable-next-line @typescript-eslint/no-var-requires
8-
const { CLIEngine }: typeof eslint = require('eslint');
8+
const { CLIEngine } = require('eslint');
99

1010
// See https://eslint.org/docs/1.0.0/developer-guide/nodejs-api#cliengine
1111
const eslinter = new CLIEngine(eslintOptions);
1212

13-
function getReport(filepath: string) {
13+
function getReport(filepath: string): LintReport | undefined {
1414
try {
1515
if (
1616
eslinter.isPathIgnored(filepath) ||

src/issue/eslint/EsLintIssueFactory.ts

Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
1-
import * as eslint from 'eslint';
21
import { FileAwareEsLintMessage } from './FileAwareEsLintMessage';
32
import { deduplicateAndSortIssues, Issue } from '../Issue';
43
import { IssueOrigin } from '../IssueOrigin';
54
import { IssueSeverity } from '../IssueSeverity';
5+
import { LintReport, LintResult } from '../../types/eslint';
66

77
function createIssueFromEsLintMessage(message: FileAwareEsLintMessage): Issue {
88
return {
@@ -18,7 +18,7 @@ function createIssueFromEsLintMessage(message: FileAwareEsLintMessage): Issue {
1818
}
1919

2020
function createFileAwareEsLintMessagesFromEsLintResult(
21-
result: eslint.CLIEngine.LintResult
21+
result: LintResult
2222
): FileAwareEsLintMessage[] {
2323
return result.messages.map(message => ({
2424
...message,
@@ -27,7 +27,7 @@ function createFileAwareEsLintMessagesFromEsLintResult(
2727
}
2828

2929
function createFileAwareEsLintMessagesFromEsLintReport(
30-
report: eslint.CLIEngine.LintReport
30+
report: LintReport
3131
): FileAwareEsLintMessage[] {
3232
return report.results.reduce<FileAwareEsLintMessage[]>(
3333
(messages, result) => [
@@ -39,7 +39,7 @@ function createFileAwareEsLintMessagesFromEsLintReport(
3939
}
4040

4141
function createFileAwareEsLintMessagesFromEsLintReports(
42-
reports: eslint.CLIEngine.LintReport[]
42+
reports: LintReport[]
4343
): FileAwareEsLintMessage[] {
4444
return reports.reduce<FileAwareEsLintMessage[]>(
4545
(messages, report) => [
@@ -56,9 +56,7 @@ function createIssuesFromEsLintMessages(
5656
return deduplicateAndSortIssues(messages.map(createIssueFromEsLintMessage));
5757
}
5858

59-
function createIssuesFromEsLintReports(
60-
reports: eslint.CLIEngine.LintReport[]
61-
): Issue[] {
59+
function createIssuesFromEsLintReports(reports: LintReport[]): Issue[] {
6260
return createIssuesFromEsLintMessages(
6361
createFileAwareEsLintMessagesFromEsLintReports(reports)
6462
);

src/issue/eslint/FileAwareEsLintMessage.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
1-
import * as eslint from 'eslint';
1+
import { LintMessage } from '../../types/eslint';
22

33
/**
44
* We need to define custom interface because of eslint architecture which
55
* groups lint messages per file
66
*/
7-
interface FileAwareEsLintMessage extends eslint.Linter.LintMessage {
7+
interface FileAwareEsLintMessage extends LintMessage {
88
filePath?: string;
99
}
1010

src/types/eslint.ts

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
// copy eslint types as installation of eslint package is optional
2+
export interface LintMessage {
3+
column: number;
4+
line: number;
5+
endColumn?: number;
6+
endLine?: number;
7+
ruleId: string | null;
8+
message: string;
9+
nodeType: string;
10+
fatal?: true;
11+
severity: 0 | 1 | 2;
12+
fix?: {
13+
range: [number, number];
14+
text: string;
15+
};
16+
source: string | null;
17+
}
18+
19+
export interface LintResult {
20+
filePath: string;
21+
messages: LintMessage[];
22+
errorCount: number;
23+
warningCount: number;
24+
fixableErrorCount: number;
25+
fixableWarningCount: number;
26+
output?: string;
27+
source?: string;
28+
}
29+
30+
export interface LintReport {
31+
results: LintResult[];
32+
errorCount: number;
33+
warningCount: number;
34+
fixableErrorCount: number;
35+
fixableWarningCount: number;
36+
}

test/unit/issue/eslint/EsLintIssueFactory.spec.ts

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
11
import { createIssuesFromEsLintReports } from '../../../../lib/issue';
2-
import * as eslint from 'eslint';
2+
import {
3+
LintMessage,
4+
LintReport,
5+
LintResult
6+
} from '../../../../lib/types/eslint';
37

48
describe('[UNIT] issue/eslint/EsLintIssueFactory', () => {
5-
type LintMessage = eslint.Linter.LintMessage;
6-
type LintResult = eslint.CLIEngine.LintResult;
7-
type LintReport = eslint.CLIEngine.LintReport;
8-
99
const ES_LINT_MESSAGE_ERROR: LintMessage = {
1010
column: 0,
1111
line: 13,

yarn.lock

Lines changed: 1 addition & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -490,19 +490,6 @@
490490
resolved "https://registry.yarnpkg.com/@types/eslint-visitor-keys/-/eslint-visitor-keys-1.0.0.tgz#1ee30d79544ca84d68d4b3cdb0af4f205663dd2d"
491491
integrity sha512-OCutwjDZ4aFS6PB1UZ988C4YgwlBHJd6wCeQqaLdmadZ/7e+w79+hbMUFC1QXDNCmdyoRfAFdm0RypzwR+Qpag==
492492

493-
"@types/eslint@^4.16.6":
494-
version "4.16.6"
495-
resolved "https://registry.yarnpkg.com/@types/eslint/-/eslint-4.16.6.tgz#96d4ecddbea618ab0b55eaf0dffedf387129b06c"
496-
integrity sha512-GL7tGJig55FeclpOytU7nCCqtR143jBoC7AUdH0DO9xBSIFiNNUFCY/S3KNWsHeQJuU3hjw/OC1+kRTFNXqUZQ==
497-
dependencies:
498-
"@types/estree" "*"
499-
"@types/json-schema" "*"
500-
501-
"@types/estree@*":
502-
version "0.0.39"
503-
resolved "https://registry.yarnpkg.com/@types/estree/-/estree-0.0.39.tgz#e177e699ee1b8c22d23174caaa7422644389509f"
504-
integrity sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw==
505-
506493
"@types/events@*":
507494
version "1.2.0"
508495
resolved "https://registry.yarnpkg.com/@types/events/-/events-1.2.0.tgz#81a6731ce4df43619e5c8c945383b3e62a89ea86"
@@ -533,7 +520,7 @@
533520
dependencies:
534521
"@types/jest-diff" "*"
535522

536-
"@types/json-schema@*", "@types/json-schema@^7.0.3":
523+
"@types/json-schema@^7.0.3":
537524
version "7.0.3"
538525
resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.3.tgz#bdfd69d61e464dcc81b25159c270d75a73c1a636"
539526
integrity sha512-Il2DtDVRGDcqjDtE+rF8iqg1CArehSK84HZJCT7AMITlyXRBpuPhqGLDQMowraqqu1coEaimg4ZOqggt6L6L+A==

0 commit comments

Comments
 (0)