Skip to content

Commit 8a5792b

Browse files
fix: createJavaScriptConfig should print projectPath instead of project (#2184)
## PR Checklist - [x] Addresses an existing open issue: fixes #2178 - [x] That issue was marked as [`status: accepting prs`](https://github.com/JoshuaKGoldberg/TypeStat/issues?q=is%3Aopen+is%3Aissue+label%3A%22status%3A+accepting+prs%22) - [x] Steps in [CONTRIBUTING.md](https://github.com/JoshuaKGoldberg/TypeStat/blob/main/.github/CONTRIBUTING.md) were taken ## Overview It seems that the structure should have `projectPath` instead of `project`. I also moved the code little bit so that there was less nested ternaries.
1 parent 7b57fcc commit 8a5792b

File tree

2 files changed

+86
-58
lines changed

2 files changed

+86
-58
lines changed

src/initialization/initializeJavaScript/createJavaScriptConfig.test.ts

Lines changed: 26 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,22 @@
11
import { describe, expect, it } from "vitest";
22

3+
import { RawTypeStatOptions } from "../../options/types.js";
34
import { InitializationCleanups } from "./cleanups.js";
4-
import { createJavaScriptConfig } from "./createJavaScriptConfig.js";
5+
import {
6+
createJavaScriptConfig,
7+
JavaScriptConfigSettings,
8+
} from "./createJavaScriptConfig.js";
59
import { InitializationImports } from "./imports.js";
610
import { InitializationRenames } from "./renames.js";
711

12+
interface TestArguments {
13+
expected: RawTypeStatOptions | RawTypeStatOptions[];
14+
name: string;
15+
settings: JavaScriptConfigSettings;
16+
}
17+
818
describe("createJavaScriptConfig", () => {
9-
it.each([
19+
it.each<TestArguments>([
1020
{
1121
expected: {
1222
files: { renameExtensions: "ts" },
@@ -15,7 +25,7 @@ describe("createJavaScriptConfig", () => {
1525
missingProperties: true,
1626
noImplicitAny: true,
1727
},
18-
project: "tsconfig.json",
28+
projectPath: "tsconfig.json",
1929
},
2030
name: "Basic",
2131
settings: {
@@ -36,7 +46,7 @@ describe("createJavaScriptConfig", () => {
3646
missingProperties: true,
3747
noImplicitAny: true,
3848
},
39-
project: "tsconfig.json",
49+
projectPath: "tsconfig.json",
4050
},
4151
name: "Basic with Suppressions",
4252
settings: {
@@ -54,7 +64,7 @@ describe("createJavaScriptConfig", () => {
5464
files: { renameExtensions: "ts" },
5565
fixes: { importExtensions: true },
5666
include: ["src/**/*.{js,jsx}"],
57-
project: "tsconfig.json",
67+
projectPath: "tsconfig.json",
5868
},
5969
{
6070
fixes: {
@@ -63,7 +73,7 @@ describe("createJavaScriptConfig", () => {
6373
noImplicitAny: true,
6474
},
6575
include: ["src/**/*.ts"],
66-
project: "tsconfig.json",
76+
projectPath: "tsconfig.json",
6777
},
6878
],
6979
name: "TS Renames (multiple sourceFiles extensions)",
@@ -83,7 +93,7 @@ describe("createJavaScriptConfig", () => {
8393
files: { renameExtensions: "tsx" },
8494
fixes: { importExtensions: true },
8595
include: ["src/**/*.{js,jsx}"],
86-
project: "tsconfig.json",
96+
projectPath: "tsconfig.json",
8797
},
8898
{
8999
fixes: {
@@ -92,7 +102,7 @@ describe("createJavaScriptConfig", () => {
92102
noImplicitAny: true,
93103
},
94104
include: ["src/**/*.tsx"],
95-
project: "tsconfig.json",
105+
projectPath: "tsconfig.json",
96106
},
97107
],
98108
name: "TSX Renames (multiple sourceFiles extensions)",
@@ -111,15 +121,15 @@ describe("createJavaScriptConfig", () => {
111121
{
112122
files: { renameExtensions: true },
113123
fixes: { importExtensions: true },
114-
project: "tsconfig.json",
124+
projectPath: "tsconfig.json",
115125
},
116126
{
117127
fixes: {
118128
incompleteTypes: true,
119129
missingProperties: true,
120130
noImplicitAny: true,
121131
},
122-
project: "tsconfig.json",
132+
projectPath: "tsconfig.json",
123133
},
124134
],
125135
name: "Auto Renames (no sourceFiles)",
@@ -138,7 +148,7 @@ describe("createJavaScriptConfig", () => {
138148
files: { renameExtensions: true },
139149
fixes: { importExtensions: true },
140150
include: ["src/**/*.js"],
141-
project: "tsconfig.json",
151+
projectPath: "tsconfig.json",
142152
},
143153
{
144154
fixes: {
@@ -147,7 +157,7 @@ describe("createJavaScriptConfig", () => {
147157
noImplicitAny: true,
148158
},
149159
include: ["src/**/*.{ts,tsx}"],
150-
project: "tsconfig.json",
160+
projectPath: "tsconfig.json",
151161
},
152162
],
153163
name: "Auto Renames (single sourceFiles extension)",
@@ -167,7 +177,7 @@ describe("createJavaScriptConfig", () => {
167177
files: { renameExtensions: true },
168178
fixes: { importExtensions: true },
169179
include: ["src/**/*.{js,jsx}"],
170-
project: "tsconfig.json",
180+
projectPath: "tsconfig.json",
171181
},
172182
{
173183
fixes: {
@@ -176,7 +186,7 @@ describe("createJavaScriptConfig", () => {
176186
noImplicitAny: true,
177187
},
178188
include: ["src/**/*.{ts,tsx}"],
179-
project: "tsconfig.json",
189+
projectPath: "tsconfig.json",
180190
},
181191
],
182192
name: "Auto Renames (multiple sourceFiles extensions)",
@@ -196,7 +206,7 @@ describe("createJavaScriptConfig", () => {
196206
files: { renameExtensions: true },
197207
fixes: { importExtensions: true },
198208
include: ["src/**/*.js(x)"],
199-
project: "tsconfig.json",
209+
projectPath: "tsconfig.json",
200210
},
201211
{
202212
fixes: {
@@ -205,7 +215,7 @@ describe("createJavaScriptConfig", () => {
205215
noImplicitAny: true,
206216
},
207217
include: ["src/**/*.ts(x)"],
208-
project: "tsconfig.json",
218+
projectPath: "tsconfig.json",
209219
},
210220
],
211221
name: "Auto Renames (parenthesized sourceFiles extensions)",

src/initialization/initializeJavaScript/createJavaScriptConfig.ts

Lines changed: 60 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
import { RawTypeStatOptions, RenameExtensions } from "../../options/types.js";
12
import { ProjectDescription } from "../initializeProject/shared.js";
23
import { InitializationCleanups } from "./cleanups.js";
34
import { InitializationImports } from "./imports.js";
@@ -17,60 +18,61 @@ export const createJavaScriptConfig = ({
1718
project,
1819
renames,
1920
sourceFiles,
20-
}: JavaScriptConfigSettings) => {
21-
const fileConversion = {
21+
}: JavaScriptConfigSettings): RawTypeStatOptions | RawTypeStatOptions[] => {
22+
const fileConversion: RawTypeStatOptions = {
2223
files: {
2324
renameExtensions: printRenames(renames),
2425
},
2526
};
26-
const coreConversion = {
27+
28+
const coreCleanups: RawTypeStatOptions =
29+
cleanups === InitializationCleanups.Yes
30+
? { cleanups: { suppressTypeErrors: true } }
31+
: {};
32+
33+
const coreConversion: RawTypeStatOptions = {
2734
fixes: {
2835
incompleteTypes: true,
2936
missingProperties: true,
3037
noImplicitAny: true,
3138
},
32-
...(cleanups === InitializationCleanups.Yes
33-
? { cleanups: { suppressTypeErrors: true } }
34-
: {}),
39+
...coreCleanups,
3540
};
36-
const shared = (include: string[] | undefined) => ({
37-
...(include && { include }),
38-
project: project.filePath,
39-
});
4041

41-
const allConversions =
42-
imports === InitializationImports.Yes
43-
? [
44-
{
45-
...fileConversion,
46-
fixes: {
47-
importExtensions: true,
48-
},
49-
...shared(sourceFiles ? [sourceFiles] : undefined),
50-
},
51-
{
52-
...coreConversion,
53-
...shared(
54-
sourceFiles
55-
? renames === InitializationRenames.Auto
56-
? renameSourceFilesExtensionsAuto(sourceFiles)
57-
: renames === InitializationRenames.TS
58-
? renameSourceFilesExtensions(sourceFiles, "ts")
59-
: renameSourceFilesExtensions(sourceFiles, "tsx")
60-
: undefined,
61-
),
62-
},
63-
]
64-
: {
65-
...fileConversion,
66-
...coreConversion,
67-
...shared(sourceFiles ? [sourceFiles] : undefined),
68-
};
42+
const included = (include: string[] | undefined): RawTypeStatOptions =>
43+
include?.length ? { include } : {};
44+
45+
const sourceFilesInclude: RawTypeStatOptions = included(
46+
sourceFiles ? [sourceFiles] : undefined,
47+
);
6948

70-
return allConversions;
49+
if (imports === InitializationImports.Yes) {
50+
return [
51+
{
52+
...fileConversion,
53+
fixes: {
54+
importExtensions: true,
55+
},
56+
...sourceFilesInclude,
57+
projectPath: project.filePath,
58+
},
59+
{
60+
...coreConversion,
61+
...included(getRenamedSourceFiles(sourceFiles, renames)),
62+
projectPath: project.filePath,
63+
},
64+
];
65+
}
66+
67+
return {
68+
...fileConversion,
69+
...coreConversion,
70+
...sourceFilesInclude,
71+
projectPath: project.filePath,
72+
};
7173
};
7274

73-
const printRenames = (renames: InitializationRenames) => {
75+
const printRenames = (renames: InitializationRenames): RenameExtensions => {
7476
switch (renames) {
7577
case InitializationRenames.Auto:
7678
return true;
@@ -83,15 +85,31 @@ const printRenames = (renames: InitializationRenames) => {
8385
}
8486
};
8587

86-
function renameSourceFilesExtensions(sourceFiles: string, extension: string) {
88+
function getRenamedSourceFiles(
89+
sourceFiles: string | undefined,
90+
renames: InitializationRenames,
91+
): string[] | undefined {
92+
return sourceFiles
93+
? renames === InitializationRenames.Auto
94+
? renameSourceFilesExtensionsAuto(sourceFiles)
95+
: renames === InitializationRenames.TS
96+
? renameSourceFilesExtensions(sourceFiles, "ts")
97+
: renameSourceFilesExtensions(sourceFiles, "tsx")
98+
: undefined;
99+
}
100+
101+
function renameSourceFilesExtensions(
102+
sourceFiles: string,
103+
extension: string,
104+
): string[] {
87105
return [
88106
sourceFiles
89107
.replace(/(\.|\{)js/, `$1${extension}`)
90108
.replace(new RegExp(`{${extension},jsx?}`), extension),
91109
];
92110
}
93111

94-
function renameSourceFilesExtensionsAuto(sourceFiles: string) {
112+
function renameSourceFilesExtensionsAuto(sourceFiles: string): string[] {
95113
for (const [original, replacement] of [
96114
[/\{js,jsx\}/, "{ts,tsx}"],
97115
[/\.js$/, ".{ts,tsx}"],

0 commit comments

Comments
 (0)