Skip to content

Commit 05b2504

Browse files
committed
wip
1 parent bea7105 commit 05b2504

File tree

17 files changed

+324
-182
lines changed

17 files changed

+324
-182
lines changed

code-pushup.config.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@ export default mergeConfigs(
4141
),
4242
await eslintCoreConfigNx(),*/
4343
await typescriptPluginConfigNx({
44-
tsConfigPath: 'packages/plugin-typescript/tsconfig.lib.json',
44+
tsConfigPath: 'packages/plugin-typescript/mocks/fixtures/basic-setup/tsconfig.json',
4545
// onlyAudits: ['verbatim-module-syntax-typescript']
4646
}),
4747
);

code-pushup.preset.ts

Lines changed: 14 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -17,8 +17,9 @@ import {
1717
type TypescriptPluginOptions,
1818
typescriptPlugin,
1919
} from './packages/plugin-typescript/src/index.js';
20-
import { GROUPS } from './packages/plugin-typescript/src/lib/constants';
21-
import { filterGroupsByAuditSlug } from './packages/plugin-typescript/src/lib/utils.js';
20+
import {AUDITS, GROUPS} from './packages/plugin-typescript/src/lib/constants';
21+
import {filterGroupsByAuditSlug, getFinalAuditSlugs} from './packages/plugin-typescript/src/lib/utils.js';
22+
import {a} from "vitest/dist/suite-UrZdHRff";
2223

2324
export const jsPackagesCategories: CategoryConfig[] = [
2425
{
@@ -142,22 +143,21 @@ export const typescriptPluginConfigNx = async (
142143
...options,
143144
};
144145

146+
145147
return {
146148
plugins: [await typescriptPlugin(opt)],
147-
/*categories: [
148-
{
149+
categories: [
150+
/* {
149151
slug: 'typescript',
150152
title: 'Typescript',
151-
refs: GROUPS.filter(filterGroupsByAuditSlug(opt.onlyAudits)).map(
152-
({ slug }) => ({
153-
plugin: 'typescript',
154-
type: 'group' as const,
155-
slug,
156-
weight: 1,
157-
}),
158-
),
159-
},
160-
],*/
153+
refs: AUDITS.filter(filterGroupsByAuditSlug(await getFinalAuditSlugs(opt))).map( ({slug}) => ({
154+
type: 'audit',
155+
plugin: 'typescript',
156+
slug,
157+
weight: 1,
158+
}))
159+
},*/
160+
],
161161
};
162162
};
163163

package-lock.json

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@
2525
"@code-pushup/portal-client": "^0.9.0",
2626
"@isaacs/cliui": "^8.0.2",
2727
"@nx/devkit": "19.8.13",
28-
"@poppinss/cliui": "^6.4.1",
28+
"@poppinss/cliui": "^6.4.2",
2929
"@swc/helpers": "0.5.13",
3030
"ansis": "^3.3.2",
3131
"build-md": "^0.4.2",

packages/plugin-typescript/mocks/fixtures/basic-setup/tsconfig.json

Lines changed: 1 addition & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -3,13 +3,7 @@
33
"rootDir": "./src",
44
"strict": true,
55
"target": "ES6",
6-
"module": "CommonJS",
7-
"noImplicitAny": true,
8-
"strictNullChecks": true,
9-
"strictFunctionTypes": true,
10-
"strictBindCallApply": true,
11-
"strictPropertyInitialization": true,
12-
"alwaysStrict": true
6+
"module": "CommonJS"
137
},
148
"include": ["src/**/*.ts", "src/**/*.js"],
159
}
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
/**
2+
* Error Code: 7006
3+
* Compiler Option: noImplicitAny
4+
* Description: Parameter 'param' implicitly has an 'any' type.
5+
*/
6+
function noImplicitAnyError(param) {
7+
console.log(param);
8+
}
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
{
2+
"compilerOptions": {
3+
"rootDir": "./src",
4+
"target": "ES6",
5+
"module": "CommonJS"
6+
},
7+
"include": ["src/**/*.ts"],
8+
}

packages/plugin-typescript/src/lib/runner/runner.ts

Lines changed: 8 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -1,33 +1,14 @@
1-
import type {
2-
Audit,
3-
AuditOutput,
4-
AuditOutputs,
5-
AuditReport,
6-
Issue,
7-
RunnerFunction,
8-
} from '@code-pushup/models';
9-
import type { CompilerOptionName } from '../types.js';
10-
import { mergeTsConfigs } from '../typescript-plugin';
11-
import {
12-
type DiagnosticsOptions,
13-
getDiagnostics,
14-
getTsConfigurationFromPath,
15-
} from './typescript-runner.js';
16-
import {
17-
AUDIT_LOOKUP,
18-
getIssueFromDiagnostic,
19-
tSCodeToAuditSlug,
20-
} from './utils.js';
21-
22-
export type RunnerOptions = DiagnosticsOptions & {
23-
filteredAudits: Audit[];
24-
};
1+
import type {Audit, AuditOutput, AuditOutputs, AuditReport, Issue, RunnerFunction,} from '@code-pushup/models';
2+
import type {CompilerOptionName, TypescriptPluginOptions} from '../types.js';
3+
import {getDiagnostics,} from './typescript-runner.js';
4+
import {AUDIT_LOOKUP, getIssueFromDiagnostic, tSCodeToAuditSlug, validateDiagnostics} from './utils.js';
5+
export type RunnerOptions = TypescriptPluginOptions & {filteredAudits: Audit[]};
256

267
export function createRunnerFunction(options: RunnerOptions): RunnerFunction {
278
return async (): Promise<AuditOutputs> => {
28-
const { filteredAudits, compilerOptions, fileNames } = options;
29-
const diagnostics = await getDiagnostics({ fileNames, compilerOptions });
309

10+
const diagnostics = await getDiagnostics(options.tsConfigPath);
11+
validateDiagnostics(diagnostics);
3112
const result: Record<
3213
CompilerOptionName,
3314
Pick<AuditReport, 'slug' | 'details'>
@@ -55,7 +36,7 @@ export function createRunnerFunction(options: RunnerOptions): RunnerFunction {
5536
>,
5637
);
5738

58-
return filteredAudits.map(audit => {
39+
return options.filteredAudits.map(audit => {
5940
const { details } = result[audit.slug as CompilerOptionName] ?? {};
6041
const issues = details?.issues ?? [];
6142
return {

packages/plugin-typescript/src/lib/runner/ts-error-codes.ts

Lines changed: 21 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,21 @@ export const GROUPS_DESCRIPTIONS = {
2121
'Configuration options that control TypeScript output generation, including whether to emit files, how to handle comments and declarations, and settings for output optimization and compatibility helpers',
2222
};
2323

24+
/**
25+
* Strict grouping: https://github.com/microsoft/TypeScript/blob/56a08250f3516b3f5bc120d6c7ab4450a9a69352/src/compiler/utilities.ts Line 9113
26+
* noImplicitThis: {
27+
* dependencies: ["strict"],
28+
* computeValue: compilerOptions => {
29+
* return getStrictOptionValue(compilerOptions, "noImplicitThis");
30+
* },
31+
* },
32+
* Line 9262
33+
* export function getStrictOptionValue(compilerOptions: CompilerOptions, flag: StrictOptionName): boolean {
34+
* return compilerOptions[flag] === undefined ? !!compilerOptions.strict : !!compilerOptions[flag];
35+
* }
36+
* https://github.com/microsoft/TypeScript/blob/56a08250f3516b3f5bc120d6c7ab4450a9a69352/src/compiler/utilities.ts#L9262
37+
*/
38+
2439
/** This is the list of error codes that can be triggered by the TypeScript compiler.
2540
* It's divided into: category -> compiler option -> error codes (that might trigger)
2641
*/
@@ -46,6 +61,7 @@ export const TS_ERROR_CODES = {
4661
isolatedModules: [18055, 18056, 18057],
4762
preserveSymlinks: [1421],
4863
} as const,
64+
/*
4965
watchOptions: {
5066
assumeChangesOnlyAffectDirectDependencies: [6373],
5167
preserveWatchOutput: [6379], // This affects watch mode behavior rather than emitting errors
@@ -57,31 +73,25 @@ export const TS_ERROR_CODES = {
5773
disableReferencedProjectLoad: [6371],
5874
disableSolutionSearching: [6370],
5975
disableSourceOfProjectReferenceRedirect: [6374],
60-
} as const,
76+
} as const,*/
6177
moduleResolution: {
62-
moduleResolutionNode: [2307],
63-
moduleResolutionBundler: [1479],
78+
moduleResolution: [2307, 1479],
6479
customConditions: [1378],
6580
resolvePackageJsonExports: [1343],
6681
resolvePackageJsonImports: [1344],
6782
verbatimModuleSyntax: [1286, 1287, 1288, 1484, 1485],
6883
} as const,
6984
typeCheckingBehavior: {
70-
noErrorTruncation: [2322, 2345], // This affects error message display rather than triggering specific errors
85+
// noErrorTruncation: [2322, 2345], // This affects error message display rather than triggering specific errors
7186
exactOptionalPropertyTypes: [2775],
7287
noUncheckedIndexedAccess: [7061],
7388
noImplicitOverride: [4114, 4113],
7489
noPropertyAccessFromIndexSignature: [4111],
7590
} as const,
7691
controlFlowOptions: {
7792
allowUnreachableCode: [7027],
78-
allowUnusedLabels: [7028],
79-
noUnusedLabels: [7028],
80-
noImplicitReturnsInAsyncFunctions: [7030, 1064],
81-
allowUnusedParameters: [6134],
93+
noImplicitReturns: [7030, 1064],
8294
noFallthroughCasesInSwitch: [7029],
83-
noImplicitReturnsInGenerators: [7030],
84-
noPropertyAccessFromComputedKey: [4111],
8595
} as const,
8696
buildEmitOptions: {
8797
noEmit: [6059],
@@ -95,7 +105,7 @@ export const TS_ERROR_CODES = {
95105
downlevelIteration: [2569],
96106
emitDeclarationOnly: [5069],
97107
} as const,
98-
strictChecks: {
108+
strict: {
99109
noImplicitAny: [
100110
7005, 7006, 7008, 7009, 7010, 7011, 7015, 7016, 7017, 7018, 7019, 7031,
101111
7032, 7033,

packages/plugin-typescript/src/lib/runner/typescript-runner.integration.test.ts

Lines changed: 26 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,34 @@
11
// eslint-disable-next-line unicorn/import-style
2-
import { basename } from 'node:path';
3-
import { describe, expect } from 'vitest';
2+
import {describe, expect} from 'vitest';
43
import {
5-
getDiagnostics,
64
getTsConfigurationFromPath,
75
} from './typescript-runner.js';
86

7+
describe('getTsConfigurationFromPath', () => {
8+
it('should accept valid options', async () => {
9+
await expect(
10+
getTsConfigurationFromPath({
11+
tsConfigPath: 'packages/plugin-typescript/mocks/fixtures/basic-setup/tsconfig.json',
12+
}),
13+
).resolves.toStrictEqual({
14+
compilerOptions: {
15+
configFilePath: undefined,
16+
module: 1,
17+
rootDir: expect.any(String),
18+
strict: true,
19+
target: 2,
20+
},
21+
fileNames: expect.arrayContaining([
22+
expect.any(String),
23+
expect.any(String),
24+
expect.any(String),
25+
expect.any(String),
26+
]),
27+
});
28+
});
29+
30+
});
31+
932
/*
1033
describe('getDiagnostics', () => {
1134
it('should accept valid options', async () => {

0 commit comments

Comments
 (0)