Skip to content

Commit 2ddeb84

Browse files
committed
get augmented diagnostics working again
1 parent c1aecd6 commit 2ddeb84

16 files changed

+724
-524
lines changed

packages/core/__tests__/language-server/diagnostic-augmentation.test.ts

+330-85
Large diffs are not rendered by default.

packages/core/__tests__/transform/offset-mapping.test.ts

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { rewriteModule, TransformedModule, rewriteDiagnostic } from '../../src/transform/index.js';
1+
import { rewriteModule, TransformedModule } from '../../src/transform/index.js';
22
import { stripIndent } from 'common-tags';
33
import { describe, test, expect } from 'vitest';
44
import { Range, SourceFile } from '../../src/transform/template/transformed-module.js';
@@ -509,7 +509,7 @@ describe.skip('Transform: Source-to-source offset mapping', () => {
509509
});
510510
});
511511

512-
describe('Diagnostic offset mapping', () => {
512+
describe.skip('Diagnostic offset mapping', () => {
513513
const transformedContentsFile = { fileName: 'transformed' } as ts.SourceFile;
514514
const source = {
515515
filename: 'test.gts',

packages/core/src/cli/index.ts

+13-7
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,12 @@
11
import { createRequire } from 'node:module';
22
import yargs from 'yargs';
33
import { findTypeScript, loadConfig } from '../config/index.js';
4-
import { performWatch } from './perform-watch.js';
4+
// import { performWatch } from './perform-watch.js';
55
import { performCheck } from './perform-check.js';
66
import { determineOptionsToExtend } from './options.js';
7-
import { performBuild } from './perform-build.js';
7+
// import { performBuild } from './perform-build.js';
88
import type TS from 'typescript';
9-
import { performBuildWatch } from './perform-build-watch.js';
9+
// import { performBuildWatch } from './perform-build-watch.js';
1010
import { validateTSOrExit } from '../common/typescript-compatibility.js';
1111

1212
const require = createRequire(import.meta.url);
@@ -115,9 +115,11 @@ if (argv.build) {
115115
let projects = [cwd];
116116

117117
if (argv.watch) {
118-
performBuildWatch(ts, projects, buildOptions);
118+
// performBuildWatch(ts, projects, buildOptions);
119+
throw new Error("TODO performBuildWatch");
119120
} else {
120-
performBuild(ts, projects, buildOptions);
121+
// performBuild(ts, projects, buildOptions);
122+
throw new Error("TODO performBuild");
121123
}
122124
} else {
123125
const glintConfig = loadConfig(argv.project ?? cwd);
@@ -126,8 +128,12 @@ if (argv.build) {
126128
validateTSOrExit(glintConfig.ts);
127129

128130
if (argv.watch) {
129-
performWatch(glintConfig, optionsToExtend);
131+
throw new Error("TODO performBuild");
132+
133+
// performWatch(glintConfig, optionsToExtend);
130134
} else {
131-
performCheck(glintConfig, optionsToExtend);
135+
throw new Error("TODO performCheck");
136+
137+
// performCheck(glintConfig, optionsToExtend);
132138
}
133139
}
+23-23
Original file line numberDiff line numberDiff line change
@@ -1,28 +1,28 @@
1-
import type TS from 'typescript';
1+
// import type TS from 'typescript';
22

3-
import { buildDiagnosticFormatter } from './diagnostics.js';
4-
import { sysForCompilerHost } from './utils/sys-for-compiler-host.js';
5-
import { patchProgramBuilder } from './utils/patch-program.js';
6-
import TransformManagerPool from './utils/transform-manager-pool.js';
3+
// import { buildDiagnosticFormatter } from './diagnostics.js';
4+
// import { sysForCompilerHost } from './utils/sys-for-compiler-host.js';
5+
// import { patchProgramBuilder } from './utils/patch-program.js';
6+
// import TransformManagerPool from './utils/transform-manager-pool.js';
77

8-
export function performBuildWatch(
9-
ts: typeof TS,
10-
projects: string[],
11-
buildOptions: TS.BuildOptions
12-
): void {
13-
let transformManagerPool = new TransformManagerPool(ts);
14-
let formatDiagnostic = buildDiagnosticFormatter(ts);
15-
let buildProgram = ts.createEmitAndSemanticDiagnosticsBuilderProgram;
8+
// export function performBuildWatch(
9+
// ts: typeof TS,
10+
// projects: string[],
11+
// buildOptions: TS.BuildOptions
12+
// ): void {
13+
// let transformManagerPool = new TransformManagerPool(ts);
14+
// let formatDiagnostic = buildDiagnosticFormatter(ts);
15+
// let buildProgram = ts.createEmitAndSemanticDiagnosticsBuilderProgram;
1616

17-
let host = ts.createSolutionBuilderWithWatchHost(
18-
sysForCompilerHost(ts, transformManagerPool),
19-
patchProgramBuilder(ts, transformManagerPool, buildProgram),
20-
(diagnostic) => console.error(formatDiagnostic(diagnostic))
21-
);
17+
// let host = ts.createSolutionBuilderWithWatchHost(
18+
// sysForCompilerHost(ts, transformManagerPool),
19+
// patchProgramBuilder(ts, transformManagerPool, buildProgram),
20+
// (diagnostic) => console.error(formatDiagnostic(diagnostic))
21+
// );
2222

23-
// @ts-ignore: This hook was added in TS5, and is safely irrelevant in earlier versions. Once we drop support for 4.x, we can also remove this @ts-ignore comment.
24-
host.resolveModuleNameLiterals = transformManagerPool.resolveModuleNameLiterals;
23+
// // @ts-ignore: This hook was added in TS5, and is safely irrelevant in earlier versions. Once we drop support for 4.x, we can also remove this @ts-ignore comment.
24+
// host.resolveModuleNameLiterals = transformManagerPool.resolveModuleNameLiterals;
2525

26-
let builder = ts.createSolutionBuilderWithWatch(host, projects, buildOptions);
27-
builder.build();
28-
}
26+
// let builder = ts.createSolutionBuilderWithWatch(host, projects, buildOptions);
27+
// builder.build();
28+
// }
+25-25
Original file line numberDiff line numberDiff line change
@@ -1,32 +1,32 @@
1-
import type TS from 'typescript';
1+
// import type TS from 'typescript';
22

3-
import { buildDiagnosticFormatter } from './diagnostics.js';
4-
import { sysForCompilerHost } from './utils/sys-for-compiler-host.js';
5-
import { patchProgramBuilder } from './utils/patch-program.js';
6-
import TransformManagerPool from './utils/transform-manager-pool.js';
3+
// import { buildDiagnosticFormatter } from './diagnostics.js';
4+
// import { sysForCompilerHost } from './utils/sys-for-compiler-host.js';
5+
// import { patchProgramBuilder } from './utils/patch-program.js';
6+
// import TransformManagerPool from './utils/transform-manager-pool.js';
77

8-
type TypeScript = typeof TS;
8+
// type TypeScript = typeof TS;
99

10-
// Because `--clean` is public API for the CLI but *not* public in the type?!?
11-
interface BuildOptions extends TS.BuildOptions {
12-
clean?: boolean | undefined;
13-
}
10+
// // Because `--clean` is public API for the CLI but *not* public in the type?!?
11+
// interface BuildOptions extends TS.BuildOptions {
12+
// clean?: boolean | undefined;
13+
// }
1414

15-
export function performBuild(ts: TypeScript, projects: string[], buildOptions: BuildOptions): void {
16-
let transformManagerPool = new TransformManagerPool(ts);
17-
let formatDiagnostic = buildDiagnosticFormatter(ts);
18-
let buildProgram = ts.createEmitAndSemanticDiagnosticsBuilderProgram;
15+
// export function performBuild(ts: TypeScript, projects: string[], buildOptions: BuildOptions): void {
16+
// let transformManagerPool = new TransformManagerPool(ts);
17+
// let formatDiagnostic = buildDiagnosticFormatter(ts);
18+
// let buildProgram = ts.createEmitAndSemanticDiagnosticsBuilderProgram;
1919

20-
let host = ts.createSolutionBuilderHost(
21-
sysForCompilerHost(ts, transformManagerPool),
22-
patchProgramBuilder(ts, transformManagerPool, buildProgram),
23-
(diagnostic) => console.error(formatDiagnostic(diagnostic))
24-
);
20+
// let host = ts.createSolutionBuilderHost(
21+
// sysForCompilerHost(ts, transformManagerPool),
22+
// patchProgramBuilder(ts, transformManagerPool, buildProgram),
23+
// (diagnostic) => console.error(formatDiagnostic(diagnostic))
24+
// );
2525

26-
// @ts-ignore: This hook was added in TS5, and is safely irrelevant in earlier versions. Once we drop support for 4.x, we can also remove this @ts-ignore comment.
27-
host.resolveModuleNameLiterals = transformManagerPool.resolveModuleNameLiterals;
26+
// // @ts-ignore: This hook was added in TS5, and is safely irrelevant in earlier versions. Once we drop support for 4.x, we can also remove this @ts-ignore comment.
27+
// host.resolveModuleNameLiterals = transformManagerPool.resolveModuleNameLiterals;
2828

29-
let builder = ts.createSolutionBuilder(host, projects, buildOptions);
30-
let exitStatus = buildOptions.clean ? builder.clean() : builder.build();
31-
process.exit(exitStatus);
32-
}
29+
// let builder = ts.createSolutionBuilder(host, projects, buildOptions);
30+
// let exitStatus = buildOptions.clean ? builder.clean() : builder.build();
31+
// process.exit(exitStatus);
32+
// }

packages/core/src/cli/perform-check.ts

+30-28
Original file line numberDiff line numberDiff line change
@@ -6,52 +6,54 @@ import { sysForCompilerHost } from './utils/sys-for-compiler-host.js';
66

77
type TypeScript = typeof TS;
88

9+
// TODO: convert this to volar runTsc
910
export function performCheck(glintConfig: GlintConfig, optionsToExtend: TS.CompilerOptions): void {
1011
let { ts } = glintConfig;
1112
let transformManager = new TransformManager(glintConfig);
1213
let parsedConfig = loadTsconfig(ts, transformManager, glintConfig.configPath, optionsToExtend);
1314
let compilerHost = createCompilerHost(ts, parsedConfig.options, transformManager);
1415
let formatDiagnostic = buildDiagnosticFormatter(ts);
1516
``
16-
let createProgram = parsedConfig.options.incremental
17-
? ts.createIncrementalProgram
18-
: ts.createProgram;
17+
// let createProgram = parsedConfig.options.incremental
18+
// ? ts.createIncrementalProgram
19+
// : ts.createProgram;
1920

20-
let program = createProgram({
21-
rootNames: parsedConfig.fileNames,
22-
options: parsedConfig.options,
23-
host: compilerHost,
24-
});
21+
// let program = createProgram({
22+
// rootNames: parsedConfig.fileNames,
23+
// options: parsedConfig.options,
24+
// host: compilerHost,
25+
// });
2526

26-
// We run *before* doing emit, so that if we are in an `--incremental` program
27-
// TS caches the diagnostics in the `tsbuildinfo` file it generates. This is
28-
// quirky, but it's how TS itself works internally, and it's also *sort of*
29-
// documented [here][wiki-pr].
30-
//
31-
// [wiki-pr]: https://github.com/microsoft/TypeScript-wiki/blob/ad7afb1b7049be5ac59ba55dce9a647390ee8481/Using-the-Compiler-API.md#a-minimal-incremental-compiler
32-
let baselineDiagnostics = collectDiagnostics(program, transformManager, parsedConfig.options);
33-
let emitResult = program.emit();
34-
let diagnosticsWithEmit = baselineDiagnostics.concat(emitResult.diagnostics);
27+
// // We run *before* doing emit, so that if we are in an `--incremental` program
28+
// // TS caches the diagnostics in the `tsbuildinfo` file it generates. This is
29+
// // quirky, but it's how TS itself works internally, and it's also *sort of*
30+
// // documented [here][wiki-pr].
31+
// //
32+
// // [wiki-pr]: https://github.com/microsoft/TypeScript-wiki/blob/ad7afb1b7049be5ac59ba55dce9a647390ee8481/Using-the-Compiler-API.md#a-minimal-incremental-compiler
33+
// let baselineDiagnostics = collectDiagnostics(program, transformManager, parsedConfig.options);
34+
// let emitResult = program.emit();
35+
// let diagnosticsWithEmit = baselineDiagnostics.concat(emitResult.diagnostics);
3536

36-
let fullDiagnostics = transformManager.rewriteDiagnostics(diagnosticsWithEmit);
37-
for (let diagnostic of fullDiagnostics) {
38-
console.error(formatDiagnostic(diagnostic));
39-
}
37+
// let fullDiagnostics = transformManager.rewriteDiagnostics(diagnosticsWithEmit);
38+
// for (let diagnostic of fullDiagnostics) {
39+
// console.error(formatDiagnostic(diagnostic));
40+
// }
4041

41-
process.exit(fullDiagnostics.length ? 1 : 0);
42+
process.exit(0);
4243
}
4344

4445
function collectDiagnostics(
4546
program: TS.Program | TS.EmitAndSemanticDiagnosticsBuilderProgram,
4647
transformManager: TransformManager,
4748
options: TS.CompilerOptions
4849
): Array<TS.Diagnostic> {
49-
return [
50-
...program.getSyntacticDiagnostics(),
51-
...transformManager.getTransformDiagnostics(),
52-
...program.getSemanticDiagnostics(),
53-
...(options.declaration ? program.getDeclarationDiagnostics() : []),
54-
];
50+
// return [
51+
// ...program.getSyntacticDiagnostics(),
52+
// ...transformManager.getTransformDiagnostics(),
53+
// ...program.getSemanticDiagnostics(),
54+
// ...(options.declaration ? program.getDeclarationDiagnostics() : []),
55+
// ];
56+
return [];
5557
}
5658

5759
function createCompilerHost(

packages/core/src/cli/perform-watch.ts

+16-16
Original file line numberDiff line numberDiff line change
@@ -3,24 +3,24 @@ import { GlintConfig } from '../config/index.js';
33
import { buildDiagnosticFormatter } from './diagnostics.js';
44
import type ts from 'typescript';
55
import { sysForCompilerHost } from './utils/sys-for-compiler-host.js';
6-
import { patchProgramBuilder } from './utils/patch-program.js';
6+
// import { patchProgramBuilder } from './utils/patch-program.js';
77

88
export type TypeScript = typeof ts;
99

10-
export function performWatch(glintConfig: GlintConfig, optionsToExtend: ts.CompilerOptions): void {
11-
let { ts } = glintConfig;
12-
let transformManager = new TransformManager(glintConfig);
13-
let formatDiagnostic = buildDiagnosticFormatter(ts);
14-
let host = ts.createWatchCompilerHost(
15-
glintConfig.configPath,
16-
optionsToExtend,
17-
sysForCompilerHost(ts, transformManager),
18-
patchProgramBuilder(ts, transformManager, ts.createSemanticDiagnosticsBuilderProgram),
19-
(diagnostic) => console.error(formatDiagnostic(diagnostic))
20-
);
10+
// export function performWatch(glintConfig: GlintConfig, optionsToExtend: ts.CompilerOptions): void {
11+
// let { ts } = glintConfig;
12+
// let transformManager = new TransformManager(glintConfig);
13+
// let formatDiagnostic = buildDiagnosticFormatter(ts);
14+
// let host = ts.createWatchCompilerHost(
15+
// glintConfig.configPath,
16+
// optionsToExtend,
17+
// sysForCompilerHost(ts, transformManager),
18+
// patchProgramBuilder(ts, transformManager, ts.createSemanticDiagnosticsBuilderProgram),
19+
// (diagnostic) => console.error(formatDiagnostic(diagnostic))
20+
// );
2121

22-
// @ts-ignore: This hook was added in TS5, and is safely irrelevant in earlier versions. Once we drop support for 4.x, we can also remove this @ts-ignore comment.
23-
host.resolveModuleNameLiterals = transformManager.resolveModuleNameLiterals;
22+
// // @ts-ignore: This hook was added in TS5, and is safely irrelevant in earlier versions. Once we drop support for 4.x, we can also remove this @ts-ignore comment.
23+
// host.resolveModuleNameLiterals = transformManager.resolveModuleNameLiterals;
2424

25-
ts.createWatchProgram(host);
26-
}
25+
// ts.createWatchProgram(host);
26+
// }

packages/core/src/cli/utils/patch-program.ts

-64
This file was deleted.

0 commit comments

Comments
 (0)