Skip to content

Commit c9b4e6c

Browse files
author
Josh Goldberg
authored
Again allowed rules from extended rulesets to be factored in (#262)
1 parent 3adfbd4 commit c9b4e6c

File tree

5 files changed

+58
-24
lines changed

5 files changed

+58
-24
lines changed

src/creation/formatMissingRules.test.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ describe("formatMissingRules", () => {
1313
];
1414

1515
// Act
16-
const output = formatMissingRules(missing, []);
16+
const output = formatMissingRules(missing);
1717

1818
// Assert
1919
expect(output).toEqual([

src/creation/formatMissingRules.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import { TSLintRuleOptions } from "../rules/types";
22

3-
export const formatMissingRules = (missing: TSLintRuleOptions[], rulesDirectory: string[]) => {
4-
const rules: { [i: string]: unknown } = {};
3+
export const formatMissingRules = (missing: TSLintRuleOptions[], rulesDirectory: string[] = []) => {
4+
const rules: Record<string, unknown> = {};
55

66
for (const rule of missing.sort((a, b) => a.ruleName.localeCompare(b.ruleName))) {
77
if (rule.ruleSeverity !== "off") {

src/input/findRawConfiguration.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ import { importer } from "./importer";
44
export const findRawConfiguration = async <Configuration>(
55
fileImporter: SansDependencies<typeof importer>,
66
filePath: string,
7-
defaults: Partial<Configuration>,
7+
defaults: Partial<Configuration> = {},
88
): Promise<Configuration | Error> => {
99
let results: Configuration;
1010

src/input/findTSLintConfiguration.ts

Lines changed: 19 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -1,24 +1,18 @@
11
import { findRawConfiguration } from "./findRawConfiguration";
22
import { findReportedConfiguration } from "./findReportedConfiguration";
33
import { Exec } from "../adapters/exec";
4-
import { OriginalConfigurations } from "./findOriginalConfigurations";
54
import { SansDependencies } from "../binding";
65
import { importer } from "./importer";
6+
import { isDefined } from "../utils";
77

88
export type TSLintConfiguration = {
99
extends?: string[];
10-
rulesDirectory: string[];
10+
rulesDirectory?: string[];
1111
rules: TSLintConfigurationRules;
1212
};
1313

1414
export type TSLintConfigurationRules = Record<string, any>;
1515

16-
const defaultTSLintConfiguration = {
17-
extends: [],
18-
rulesDirectory: [],
19-
rules: {},
20-
};
21-
2216
export type FindTSLintConfigurationDependencies = {
2317
exec: Exec;
2418
importer: SansDependencies<typeof importer>;
@@ -27,12 +21,10 @@ export type FindTSLintConfigurationDependencies = {
2721
export const findTSLintConfiguration = async (
2822
dependencies: FindTSLintConfigurationDependencies,
2923
config: string | undefined,
30-
): Promise<OriginalConfigurations<TSLintConfiguration> | Error> => {
24+
) => {
3125
const filePath = config || "./tslint.json";
3226
const [rawConfiguration, reportedConfiguration] = await Promise.all([
33-
findRawConfiguration<Partial<TSLintConfiguration>>(dependencies.importer, filePath, {
34-
extends: [],
35-
}),
27+
findRawConfiguration<Partial<TSLintConfiguration>>(dependencies.importer, filePath),
3628
findReportedConfiguration<TSLintConfiguration>(
3729
dependencies.exec,
3830
"tslint --print-config",
@@ -52,15 +44,23 @@ export const findTSLintConfiguration = async (
5244
return rawConfiguration;
5345
}
5446

47+
const extensions = Array.from(
48+
new Set(
49+
[[rawConfiguration.extends], [reportedConfiguration.extends]]
50+
.flat(Infinity)
51+
.filter(isDefined),
52+
),
53+
);
54+
55+
const rules = {
56+
...rawConfiguration.rules,
57+
...reportedConfiguration.rules,
58+
};
59+
5560
return {
5661
full: {
57-
...defaultTSLintConfiguration,
58-
...rawConfiguration,
59-
extends: Array.from(
60-
new Set(
61-
[[rawConfiguration.extends], [reportedConfiguration.extends]].flat(Infinity),
62-
),
63-
),
62+
...(extensions.length !== 0 && { extends: extensions }),
63+
rules,
6464
},
6565
raw: rawConfiguration,
6666
};

src/input/findTslintConfiguration.test.ts

Lines changed: 35 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -119,10 +119,44 @@ describe("findTSLintConfiguration", () => {
119119
expect(result).toEqual({
120120
full: {
121121
extends: ["raw", "duplicated", "reported"],
122-
rulesDirectory: [],
123122
rules: {},
124123
},
125124
raw,
126125
});
127126
});
127+
128+
it("adds reported configuration rules on top of raw rules", async () => {
129+
// Arrange
130+
const raw = {
131+
rules: {
132+
"raw-rule": true,
133+
},
134+
};
135+
const reported = {
136+
rules: {
137+
"reported-rule": true,
138+
},
139+
};
140+
const dependencies = createStubDependencies({
141+
exec: createStubExec({
142+
stdout: JSON.stringify(reported),
143+
}),
144+
importer: async () => raw,
145+
});
146+
const config = "./custom/tslint.json";
147+
148+
// Act
149+
const result = await findTSLintConfiguration(dependencies, config);
150+
151+
// Assert
152+
expect(result).toEqual({
153+
full: {
154+
rules: {
155+
...raw.rules,
156+
...reported.rules,
157+
},
158+
},
159+
raw,
160+
});
161+
});
128162
});

0 commit comments

Comments
 (0)