Skip to content

Commit d2f327b

Browse files
committed
fix: Do not show directory read errors when replacing comments
1 parent d985744 commit d2f327b

File tree

7 files changed

+65
-14
lines changed

7 files changed

+65
-14
lines changed

src/adapters/fileSystem.stub.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,9 @@
11
import { FileSystem } from "../adapters/fileSystem";
22
import { fn } from "../fn";
33

4-
export const createStubFileSystem = ({ data = {}, exists = true } = {}) => ({
4+
export const createStubFileSystem = ({ data = {}, exists = true, isDir = false } = {}) => ({
55
fileExists: async () => exists,
6+
directoryExists: async () => exists && isDir,
67
readFile: async () => data,
78
writeFile: fn<FileSystem["writeFile"]>(),
89
});

src/adapters/fileSystem.ts

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
export type FileSystem = {
22
fileExists: (filePath: string) => Promise<boolean>;
3-
readFile: (filePath: string) => Promise<Error | string>;
4-
writeFile: (filePath: string, contents: string) => Promise<Error | undefined>;
3+
directoryExists: (filePath: string) => Promise<boolean>;
4+
readFile: (filePath: string) => Promise<NodeJS.ErrnoException | string>;
5+
writeFile: (filePath: string, contents: string) => Promise<NodeJS.ErrnoException | undefined>;
56
};

src/adapters/fsFileSystem.ts

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,14 @@ export const fsFileSystem: FileSystem = {
1111
return false;
1212
}
1313
},
14+
directoryExists: async (filePath: string) => {
15+
try {
16+
const stat = await fs.promises.stat(filePath);
17+
return stat.isDirectory();
18+
} catch (error) {
19+
return false;
20+
}
21+
},
1422
readFile: async (filePath: string) => {
1523
try {
1624
return (await fs.promises.readFile(filePath)).toString();

src/api/dependencies.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -121,6 +121,7 @@ export const findOriginalConfigurationsDependencies: FindOriginalConfigurationsD
121121

122122
export const collectCommentFileNamesDependencies: CollectCommentFileNamesDependencies = {
123123
findTypeScriptConfiguration: bind(findTypeScriptConfiguration, findConfigurationDependencies),
124+
fileSystem: fsFileSystem,
124125
};
125126

126127
export const extractGlobPathsDependencies: ExtractGlobPathsDependencies = {

src/comments/collectCommentFileNames.test.ts

Lines changed: 29 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
import { describe, expect, it } from "@jest/globals";
22

33
import { collectCommentFileNames } from "./collectCommentFileNames";
4+
import { fsFileSystem as fileSystem } from "../adapters/fsFileSystem";
5+
import { createStubFileSystem } from "../adapters/fileSystem.stub";
46

57
const stubFoundConfiguration = {
68
include: ["a.ts"],
@@ -10,7 +12,10 @@ describe("collectCommentFileNames", () => {
1012
it("returns an error result when filePathGlobs is true and typescriptConfiguration is undefined", async () => {
1113
const findTypeScriptConfiguration = async () => stubFoundConfiguration;
1214

13-
const result = await collectCommentFileNames({ findTypeScriptConfiguration }, true);
15+
const result = await collectCommentFileNames(
16+
{ findTypeScriptConfiguration, fileSystem },
17+
true,
18+
);
1419

1520
expect(result).toEqual(expect.any(Error));
1621
});
@@ -22,7 +27,7 @@ describe("collectCommentFileNames", () => {
2227
};
2328

2429
const result = await collectCommentFileNames(
25-
{ findTypeScriptConfiguration },
30+
{ findTypeScriptConfiguration, fileSystem },
2631
true,
2732
typescriptConfiguration,
2833
);
@@ -35,7 +40,7 @@ describe("collectCommentFileNames", () => {
3540
const filePathGlobs = ["a.ts"];
3641

3742
const result = await collectCommentFileNames(
38-
{ findTypeScriptConfiguration },
43+
{ findTypeScriptConfiguration, fileSystem },
3944
filePathGlobs,
4045
);
4146

@@ -51,7 +56,7 @@ describe("collectCommentFileNames", () => {
5156
const filePathGlobs = "a.ts";
5257

5358
const result = await collectCommentFileNames(
54-
{ findTypeScriptConfiguration },
59+
{ findTypeScriptConfiguration, fileSystem },
5560
filePathGlobs,
5661
);
5762

@@ -65,7 +70,7 @@ describe("collectCommentFileNames", () => {
6570
const findTypeScriptConfiguration = async () => error;
6671

6772
const result = await collectCommentFileNames(
68-
{ findTypeScriptConfiguration },
73+
{ findTypeScriptConfiguration, fileSystem },
6974
"tsconfig.json",
7075
);
7176

@@ -76,12 +81,30 @@ describe("collectCommentFileNames", () => {
7681
const findTypeScriptConfiguration = async () => stubFoundConfiguration;
7782

7883
const result = await collectCommentFileNames(
79-
{ findTypeScriptConfiguration },
84+
{ findTypeScriptConfiguration, fileSystem },
8085
"tsconfig.json",
8186
);
8287

8388
expect(result).toEqual({
8489
include: ["a.ts"],
8590
});
8691
});
92+
93+
it("returns only files when filePathGlobs includes directories", async () => {
94+
const findTypeScriptConfiguration = async () => ({
95+
include: ["directory"],
96+
});
97+
98+
const result = await collectCommentFileNames(
99+
{
100+
findTypeScriptConfiguration,
101+
fileSystem: createStubFileSystem({ isDir: true }),
102+
},
103+
"tsconfig.json",
104+
);
105+
106+
expect(result).toEqual({
107+
include: [],
108+
});
109+
});
87110
});

src/comments/collectCommentFileNames.ts

Lines changed: 21 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import { SansDependencies } from "../binding";
2+
import { FileSystem } from "../adapters/fileSystem";
23
import {
34
findTypeScriptConfiguration,
45
TypeScriptConfiguration,
@@ -7,6 +8,7 @@ import { uniqueFromSources } from "../utils";
78

89
export type CollectCommentFileNamesDependencies = {
910
findTypeScriptConfiguration: SansDependencies<typeof findTypeScriptConfiguration>;
11+
fileSystem: Pick<FileSystem, "directoryExists">;
1012
};
1113

1214
export type CommentFileNames = {
@@ -26,12 +28,27 @@ export const collectCommentFileNames = async (
2628
);
2729
}
2830

31+
const includeList = uniqueFromSources(
32+
typescriptConfiguration.files,
33+
typescriptConfiguration.include,
34+
);
35+
36+
// Remove directories specified in the include list. Ignore
37+
// Errors as they'll be handled when reading the file.
38+
const includeListFiles = (
39+
await Promise.all(includeList.map(dependencies.fileSystem.directoryExists))
40+
)
41+
.map((isDirectory, i) => {
42+
if (isDirectory) {
43+
return null;
44+
}
45+
return includeList[i];
46+
})
47+
.filter((item): item is string => typeof item === "string");
48+
2949
return {
3050
exclude: typescriptConfiguration.exclude,
31-
include: uniqueFromSources(
32-
typescriptConfiguration.files,
33-
typescriptConfiguration.include,
34-
),
51+
include: includeListFiles,
3552
};
3653
}
3754

src/converters/comments/convertFileComments.test.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ import { createStubConverter } from "../lintConfigs/rules/ruleConverter.stubs";
66
import { convertFileComments, ConvertFileCommentsDependencies } from "./convertFileComments";
77

88
const createStubDependencies = (
9-
readFileResult: Error | string,
9+
readFileResult: NodeJS.ErrnoException | string,
1010
): ConvertFileCommentsDependencies => ({
1111
converters: new Map([
1212
["ts-a", createStubConverter(["es-a"])],

0 commit comments

Comments
 (0)