Skip to content

Commit 5c33064

Browse files
authored
Improve output for no-file-* rules (#606)
1 parent 1c2d528 commit 5c33064

File tree

8 files changed

+83
-25
lines changed

8 files changed

+83
-25
lines changed

src/rules/no-file-dependencies.ts

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,27 @@
11
import {PackageJson} from 'type-fest';
2-
import {doVersContainFileUrl} from '../validators/dependency-audit';
2+
import {auditDependenciesForFileUrlVersion} from '../validators/dependency-audit';
33
import {LintIssue} from '../lint-issue';
44
import {RuleType} from '../types/rule-type';
55
import {Severity} from '../types/severity';
66

77
const lintId = 'no-file-dependencies';
88
const nodeName = 'dependencies';
9-
const message = 'You are using dependencies via url to local file. Please use dependencies from npm.';
109

1110
export const ruleType = RuleType.OptionalObject;
1211

1312
// eslint-disable-next-line @typescript-eslint/no-explicit-any
1413
export const lint = (packageJsonData: PackageJson | any, severity: Severity, config: any): LintIssue | null => {
15-
if (packageJsonData.hasOwnProperty(nodeName) && doVersContainFileUrl(packageJsonData, nodeName, config)) {
16-
return new LintIssue(lintId, severity, nodeName, message);
14+
const auditResult = auditDependenciesForFileUrlVersion(packageJsonData, nodeName, config);
15+
16+
if (packageJsonData.hasOwnProperty(nodeName) && auditResult.hasFileUrlVersions) {
17+
return new LintIssue(
18+
lintId,
19+
severity,
20+
nodeName,
21+
`You are using ${nodeName} via url to local file. Please use ${nodeName} from npm. Invalid ${nodeName} include: ${auditResult.dependenciesWithFileUrlVersion.join(
22+
', '
23+
)}`
24+
);
1725
}
1826

1927
return null;

src/rules/no-file-devDependencies.ts

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,27 @@
11
import {PackageJson} from 'type-fest';
2-
import {doVersContainFileUrl} from '../validators/dependency-audit';
2+
import {auditDependenciesForFileUrlVersion} from '../validators/dependency-audit';
33
import {LintIssue} from '../lint-issue';
44
import {RuleType} from '../types/rule-type';
55
import {Severity} from '../types/severity';
66

77
const lintId = 'no-file-devDependencies';
88
const nodeName = 'devDependencies';
9-
const message = 'You are using devDependencies via url to local file. Please use devDependencies from npm.';
109

1110
export const ruleType = RuleType.OptionalObject;
1211

1312
// eslint-disable-next-line @typescript-eslint/no-explicit-any
1413
export const lint = (packageJsonData: PackageJson | any, severity: Severity, config: any): LintIssue | null => {
15-
if (packageJsonData.hasOwnProperty(nodeName) && doVersContainFileUrl(packageJsonData, nodeName, config)) {
16-
return new LintIssue(lintId, severity, nodeName, message);
14+
const auditResult = auditDependenciesForFileUrlVersion(packageJsonData, nodeName, config);
15+
16+
if (packageJsonData.hasOwnProperty(nodeName) && auditResult.hasFileUrlVersions) {
17+
return new LintIssue(
18+
lintId,
19+
severity,
20+
nodeName,
21+
`You are using ${nodeName} via url to local file. Please use ${nodeName} from npm. Invalid ${nodeName} include: ${auditResult.dependenciesWithFileUrlVersion.join(
22+
', '
23+
)}`
24+
);
1725
}
1826

1927
return null;

src/validators/dependency-audit.ts

Lines changed: 30 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -370,15 +370,30 @@ export const doVersContainArchiveUrl = (packageJsonData: PackageJson | any, node
370370
return false;
371371
};
372372

373+
export interface AuditDependenciesForFileUrlVersionResponse {
374+
hasFileUrlVersions: boolean;
375+
dependenciesWithFileUrlVersion: string[];
376+
dependenciesWithoutFileUrlVersion: string[];
377+
}
378+
373379
/**
374380
* Determines whether or not dependency versions contains file url
375-
* @param {object} packageJsonData Valid JSON
376-
* @param {string} nodeName Name of a node in the package.json file
377-
* @param {object} config Rule configuration
378-
* @return {boolean} True if the package contain file url.
381+
* @param packageJsonData Valid JSON
382+
* @param nodeName Name of a node in the package.json file
383+
* @param config Rule configuration
384+
* @return True if the package contain file url.
379385
*/
380-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
381-
export const doVersContainFileUrl = (packageJsonData: PackageJson | any, nodeName: string, config: any): boolean => {
386+
export const auditDependenciesForFileUrlVersion = (
387+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
388+
packageJsonData: PackageJson | any,
389+
nodeName: string,
390+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
391+
config: any
392+
): AuditDependenciesForFileUrlVersionResponse => {
393+
let hasFileUrlVersions = false;
394+
const dependenciesWithFileUrlVersion = [];
395+
const dependenciesWithoutFileUrlVersion = [];
396+
382397
// eslint-disable-next-line no-restricted-syntax
383398
for (const dependencyName in packageJsonData[nodeName]) {
384399
if (hasExceptions(config) && config.exceptions.includes(dependencyName)) {
@@ -389,9 +404,16 @@ export const doVersContainFileUrl = (packageJsonData: PackageJson | any, nodeNam
389404
const dependencyVersion = packageJsonData[nodeName][dependencyName];
390405

391406
if (dependencyVersion.startsWith('file:')) {
392-
return true;
407+
hasFileUrlVersions = true;
408+
dependenciesWithFileUrlVersion.push(dependencyName);
409+
} else {
410+
dependenciesWithoutFileUrlVersion.push(dependencyName);
393411
}
394412
}
395413

396-
return false;
414+
return {
415+
hasFileUrlVersions,
416+
dependenciesWithFileUrlVersion,
417+
dependenciesWithoutFileUrlVersion,
418+
};
397419
};

test/unit/rules/no-file-dependencies.test.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ describe('no-archive-dependencies Unit Tests', () => {
2121
expect(response.severity).toStrictEqual('error');
2222
expect(response.node).toStrictEqual('dependencies');
2323
expect(response.lintMessage).toStrictEqual(
24-
'You are using dependencies via url to local file. Please use dependencies from npm.'
24+
'You are using dependencies via url to local file. Please use dependencies from npm. Invalid dependencies include: test-module'
2525
);
2626
});
2727
});

test/unit/rules/no-file-devDependencies.test.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ describe('no-archive-devDependencies Unit Tests', () => {
2121
expect(response.severity).toStrictEqual('error');
2222
expect(response.node).toStrictEqual('devDependencies');
2323
expect(response.lintMessage).toStrictEqual(
24-
'You are using devDependencies via url to local file. Please use devDependencies from npm.'
24+
'You are using devDependencies via url to local file. Please use devDependencies from npm. Invalid devDependencies include: test-module'
2525
);
2626
});
2727
});

test/unit/validators/dependency-audit.test.ts

Lines changed: 25 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1025,17 +1025,21 @@ describe('dependency-audit Unit Tests', () => {
10251025
});
10261026
});
10271027

1028-
describe('doVersContainFileUrl method', () => {
1028+
describe('auditDependenciesForFileUrlVersion method', () => {
10291029
describe('when the node exists in the package.json file, some versions are url to file', () => {
10301030
test('with github dependency true should be returned', () => {
10311031
const packageJson = {
10321032
dependencies: {
10331033
'my-module': 'file:local-module',
10341034
},
10351035
};
1036-
const response = dependencyAudit.doVersContainFileUrl(packageJson, 'dependencies', {});
1036+
const response = dependencyAudit.auditDependenciesForFileUrlVersion(packageJson, 'dependencies', {});
10371037

1038-
expect(response).toBe(true);
1038+
expect(response).toStrictEqual({
1039+
hasFileUrlVersions: true,
1040+
dependenciesWithFileUrlVersion: ['my-module'],
1041+
dependenciesWithoutFileUrlVersion: [],
1042+
});
10391043
});
10401044
});
10411045

@@ -1050,9 +1054,19 @@ describe('dependency-audit Unit Tests', () => {
10501054
'module-from-archive': 'https://github.com/user/repo/archive/v1.2.3.tar.gz',
10511055
},
10521056
};
1053-
const response = dependencyAudit.doVersContainFileUrl(packageJson, 'dependencies', {});
1057+
const response = dependencyAudit.auditDependenciesForFileUrlVersion(packageJson, 'dependencies', {});
10541058

1055-
expect(response).toBe(false);
1059+
expect(response).toStrictEqual({
1060+
hasFileUrlVersions: false,
1061+
dependenciesWithFileUrlVersion: [],
1062+
dependenciesWithoutFileUrlVersion: [
1063+
'npm-package-json-lint',
1064+
'grunt-npm-package-json-lint',
1065+
'gulp-npm-package-json-lint',
1066+
'module-from-git',
1067+
'module-from-archive',
1068+
],
1069+
});
10561070
});
10571071
});
10581072

@@ -1065,11 +1079,15 @@ describe('dependency-audit Unit Tests', () => {
10651079
'gulp-npm-package-json-lint': '^2.0.0',
10661080
},
10671081
};
1068-
const response = dependencyAudit.doVersContainFileUrl(packageJson, 'dependencies', {
1082+
const response = dependencyAudit.auditDependenciesForFileUrlVersion(packageJson, 'dependencies', {
10691083
exceptions: ['module-from-file'],
10701084
});
10711085

1072-
expect(response).toBe(false);
1086+
expect(response).toStrictEqual({
1087+
hasFileUrlVersions: false,
1088+
dependenciesWithFileUrlVersion: [],
1089+
dependenciesWithoutFileUrlVersion: ['grunt-npm-package-json-lint', 'gulp-npm-package-json-lint'],
1090+
});
10731091
});
10741092
});
10751093
});

website/docs/rules/dependencies/no-file-dependencies.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -63,4 +63,5 @@ With exceptions
6363

6464
## History
6565

66+
* Improved messaging when an invalid configuration is detected in version 6.2.0
6667
* Introduced in version 4.3.0

website/docs/rules/dependencies/no-file-devDependencies.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -63,4 +63,5 @@ With exceptions
6363

6464
## History
6565

66+
* Improved messaging when an invalid configuration is detected in version 6.2.0
6667
* Introduced in version 4.3.0

0 commit comments

Comments
 (0)