@typespec/compiler 1.5.0-dev.1 → 1.5.0-dev.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (36) hide show
  1. package/dist/manifest.js +2 -2
  2. package/dist/src/server/compile-service.d.ts +6 -6
  3. package/dist/src/server/compile-service.d.ts.map +1 -1
  4. package/dist/src/server/compile-service.js +46 -36
  5. package/dist/src/server/compile-service.js.map +1 -1
  6. package/dist/src/server/constants.d.ts +5 -4
  7. package/dist/src/server/constants.d.ts.map +1 -1
  8. package/dist/src/server/constants.js +5 -4
  9. package/dist/src/server/constants.js.map +1 -1
  10. package/dist/src/server/diagnostics.d.ts.map +1 -1
  11. package/dist/src/server/diagnostics.js +23 -8
  12. package/dist/src/server/diagnostics.js.map +1 -1
  13. package/dist/src/server/file-service.d.ts +4 -1
  14. package/dist/src/server/file-service.d.ts.map +1 -1
  15. package/dist/src/server/file-service.js +30 -0
  16. package/dist/src/server/file-service.js.map +1 -1
  17. package/dist/src/server/server-compile-manager.d.ts +55 -0
  18. package/dist/src/server/server-compile-manager.d.ts.map +1 -0
  19. package/dist/src/server/server-compile-manager.js +269 -0
  20. package/dist/src/server/server-compile-manager.js.map +1 -0
  21. package/dist/src/server/server.js +1 -0
  22. package/dist/src/server/server.js.map +1 -1
  23. package/dist/src/server/serverlib.d.ts.map +1 -1
  24. package/dist/src/server/serverlib.js +103 -30
  25. package/dist/src/server/serverlib.js.map +1 -1
  26. package/dist/src/server/types.d.ts +7 -3
  27. package/dist/src/server/types.d.ts.map +1 -1
  28. package/dist/src/server/types.js.map +1 -1
  29. package/dist/src/server/update-manager.d.ts +23 -4
  30. package/dist/src/server/update-manager.d.ts.map +1 -1
  31. package/dist/src/server/update-manager.js +110 -18
  32. package/dist/src/server/update-manager.js.map +1 -1
  33. package/dist/src/testing/test-server-host.d.ts.map +1 -1
  34. package/dist/src/testing/test-server-host.js +15 -1
  35. package/dist/src/testing/test-server-host.js.map +1 -1
  36. package/package.json +1 -1
@@ -0,0 +1,269 @@
1
+ import { formatLog } from "../core/logger/index.js";
2
+ import { compile as compileProgram, normalizePath, } from "../index.js";
3
+ import { ENABLE_SERVER_COMPILE_LOGGING } from "./constants.js";
4
+ import { trackActionFunc } from "./server-track-action-task.js";
5
+ /**
6
+ * This class purely manages compilations triggered and the caches used underneath. It doesn't have or care about any extra knowledge beyond compile itself.
7
+ * Instead compiler service would have more knowledge about the lsp scenarios to provide higher level service. It will be responsible to make sure compilation request
8
+ * is built properly (i.e. figure out the correct entrypoint file, double check whether compilation result covers given document, and so on) and then trigger the actual
9
+ * compilation with proper options through this class.
10
+ */
11
+ export class ServerCompileManager {
12
+ updateManager;
13
+ compilerHost;
14
+ log;
15
+ // We may want a ttl for this
16
+ trackerCache = new CompileCache((msg) => this.logDebug(msg));
17
+ compileId = 0;
18
+ logDebug;
19
+ constructor(updateManager, compilerHost, log) {
20
+ this.updateManager = updateManager;
21
+ this.compilerHost = compilerHost;
22
+ this.log = log;
23
+ this.logDebug =
24
+ typeof process !== "undefined" &&
25
+ process?.env?.[ENABLE_SERVER_COMPILE_LOGGING]?.toLowerCase() === "true"
26
+ ? (msg) => this.log({ level: "debug", message: msg })
27
+ : () => { };
28
+ }
29
+ async compile(mainFile, compileOptions = {}, serverCompileOptions) {
30
+ let cache = undefined;
31
+ const curId = this.compileId++;
32
+ const err = new Error();
33
+ const lines = err.stack?.split("\n") ?? [];
34
+ // log where the compiler is triggered, skip the first 2 frame and only log the next 2 if exists
35
+ const stackLines = lines.slice(3, 5).join("\n");
36
+ this.logDebug(`Server compile #${curId}: Triggered, version=${this.updateManager.docChangedVersion}, mode=${serverCompileOptions.mode}, mainFile=${mainFile}, from\n${stackLines}`);
37
+ if (!serverCompileOptions.skipCache) {
38
+ cache = this.trackerCache.get(mainFile, compileOptions, false /*hasCompleted*/, serverCompileOptions.mode);
39
+ if (cache && cache.isUpToDate()) {
40
+ this.logDebug(`Server compile #${curId}: Return cache at #${cache.getCompileId()}(${cache.getMode()})`);
41
+ return cache;
42
+ }
43
+ else {
44
+ this.logDebug(`Server compile #${curId}: Cache miss because ${cache ? `it's outdated with version ${cache.getVersion()}` : "no cache available"}`);
45
+ }
46
+ }
47
+ let oldProgram = undefined;
48
+ if (!serverCompileOptions.skipOldProgramFromCache) {
49
+ const completedTracker = this.trackerCache.get(mainFile, compileOptions, true /* hasCompleted */, serverCompileOptions.mode);
50
+ oldProgram = await completedTracker?.getCompileResult();
51
+ this.logDebug(`Server compile #${curId}: Use old program from cache: ${oldProgram ? `from #${completedTracker?.getCompileId() ?? "undefined"}` : "n/a"}`);
52
+ }
53
+ const tracker = CompileTracker.compile(curId, this.updateManager, this.compilerHost, mainFile, compileOptions, serverCompileOptions.mode, oldProgram, (msg) => this.logDebug(msg));
54
+ this.trackerCache.set(mainFile, compileOptions, tracker);
55
+ return tracker;
56
+ }
57
+ }
58
+ class CompileCache {
59
+ log;
60
+ coreCache;
61
+ fullCache;
62
+ constructor(log) {
63
+ this.log = log;
64
+ this.coreCache = new CompileCacheInternal(log);
65
+ this.fullCache = new CompileCacheInternal(log);
66
+ }
67
+ get(entrypoint, compileOption, completedOnly, mode) {
68
+ switch (mode) {
69
+ case "core":
70
+ // full cache can also be used for core, just return the latest one
71
+ const core = this.coreCache.get(entrypoint, compileOption, completedOnly);
72
+ const full = this.fullCache.get(entrypoint, compileOption, completedOnly);
73
+ // only consider using full when it's already completed, otherwise, full compilation may take longer time
74
+ if (core && full && full.isCompleted()) {
75
+ if (full.getVersion() > core.getVersion()) {
76
+ this.log(`Server compile: Using full cache (version ${full.getVersion()}) over core cache (version ${core.getVersion()})`);
77
+ return full;
78
+ }
79
+ else {
80
+ return core;
81
+ }
82
+ }
83
+ else if (core) {
84
+ return core;
85
+ }
86
+ else if (full && full.isCompleted()) {
87
+ this.log(`Server compile: Using full cache (version ${full.getVersion()}) over core cache which is unavailable`);
88
+ return full;
89
+ }
90
+ else {
91
+ return undefined;
92
+ }
93
+ case "full":
94
+ return this.fullCache.get(entrypoint, compileOption, completedOnly);
95
+ default:
96
+ // not expected, just in case, and we don't want to terminate because of cache in prod
97
+ if (process.env.NODE_ENV === "development") {
98
+ throw new Error(`Unexpected compile mode: ${mode}`);
99
+ }
100
+ return undefined;
101
+ }
102
+ }
103
+ set(entrypoint, compileOption, tracker) {
104
+ const mode = tracker.getMode();
105
+ switch (mode) {
106
+ case "core":
107
+ this.coreCache.set(entrypoint, compileOption, tracker);
108
+ break;
109
+ case "full":
110
+ this.fullCache.set(entrypoint, compileOption, tracker);
111
+ break;
112
+ default:
113
+ if (process.env.NODE_ENV === "development") {
114
+ throw new Error(`Unexpected compile mode: ${mode}`);
115
+ }
116
+ return undefined;
117
+ }
118
+ }
119
+ }
120
+ class CompileCacheInternal {
121
+ log;
122
+ cacheLatest = new Map();
123
+ /** Cache for completed compilation which is needed when we need an old program but the latest one is still in progress */
124
+ cacheCompleted = new Map();
125
+ constructor(log) {
126
+ this.log = log;
127
+ }
128
+ getCacheKey(entrypoint, compileOption) {
129
+ const normalizedEntrypoint = normalizePath(entrypoint);
130
+ const normalizedOptions = {
131
+ ...compileOption,
132
+ outputDir: undefined,
133
+ };
134
+ return `${normalizedEntrypoint}\n${normalizedOptions}`;
135
+ }
136
+ /** Get the latest completed compilation */
137
+ get(entrypoint, compileOption,
138
+ /**
139
+ * Whether to only return completed compilations
140
+ */
141
+ completedOnly) {
142
+ const key = this.getCacheKey(entrypoint, compileOption);
143
+ const tracker = this.cacheLatest.get(key);
144
+ // completed cache is from latest cache, so if latest is undefined, no need to check completed cache any more
145
+ if (!completedOnly || !tracker) {
146
+ return tracker;
147
+ }
148
+ if (tracker.isCompleted() === true) {
149
+ return tracker;
150
+ }
151
+ return this.cacheCompleted.get(key);
152
+ }
153
+ set(entrypoint, compileOption, tracker) {
154
+ const key = this.getCacheKey(entrypoint, compileOption);
155
+ this.cacheLatest.set(key, tracker);
156
+ const onComplete = () => {
157
+ const cur = this.cacheCompleted.get(key);
158
+ if (!cur || cur.getVersion() < tracker.getVersion()) {
159
+ // There may be a race condition here when two onComplete occur at the same time(both of them pass the check and try to set the cache)
160
+ // But the chance is very low, the cache status is still good (just set to a newer but not latest version), and the next compile can
161
+ // likely fix it, so don't do special handling here for it
162
+ this.cacheCompleted.set(key, tracker);
163
+ this.log(`Server compile #${tracker.getCompileId()}: Completed Cache updated ( ${cur?.getVersion() ?? "n/a"} -> ${tracker.getVersion()} )`);
164
+ }
165
+ };
166
+ tracker.getCompileResult().then(() => {
167
+ onComplete();
168
+ }, (err) => {
169
+ onComplete();
170
+ });
171
+ }
172
+ }
173
+ export class CompileTracker {
174
+ id;
175
+ updateManager;
176
+ entrypoint;
177
+ compileResultPromise;
178
+ version;
179
+ startTime;
180
+ mode;
181
+ logs;
182
+ endTime;
183
+ static compile(id, updateManager, host, mainFile, options = {}, mode, oldProgram, log) {
184
+ const sLogs = [];
185
+ // Clone an compilerhost instance with my logSink so that we can collect compiler logs
186
+ // for each compilation to it's own tracker
187
+ // Usually we don't want to send out the log because we are compiling aggressively in the lsp
188
+ // but in some case like the 'emit-code', we will want to send back the logs if there is any
189
+ const myHost = {
190
+ ...host,
191
+ logSink: {
192
+ log: (log) => {
193
+ const msg = formatLog(log, { excludeLogLevel: true });
194
+ const sLog = {
195
+ level: log.level,
196
+ message: msg,
197
+ };
198
+ sLogs.push(sLog);
199
+ },
200
+ trackAction: (message, finalMessage, action) => trackActionFunc((log) => sLogs.push(log), message, finalMessage, action),
201
+ },
202
+ };
203
+ const myOption = mode === "core"
204
+ ? {
205
+ ...options,
206
+ emit: [],
207
+ linterRuleSet: undefined,
208
+ }
209
+ : {
210
+ ...options,
211
+ };
212
+ const version = updateManager.docChangedVersion;
213
+ const startTime = new Date();
214
+ const p = compileProgram(myHost, mainFile, myOption, oldProgram);
215
+ log(`Server compile #${id}: Start compilation at ${startTime.toISOString()}, version = ${version}, mainFile = ${mainFile}, mode = ${mode}`);
216
+ return new CompileTracker(id, updateManager, mainFile, p, version, startTime, mode, sLogs, log);
217
+ }
218
+ constructor(id, updateManager, entrypoint, compileResultPromise, version, startTime, mode, logs, log) {
219
+ this.id = id;
220
+ this.updateManager = updateManager;
221
+ this.entrypoint = entrypoint;
222
+ this.compileResultPromise = compileResultPromise;
223
+ this.version = version;
224
+ this.startTime = startTime;
225
+ this.mode = mode;
226
+ this.logs = logs;
227
+ this.startTime = startTime;
228
+ const onComplete = () => {
229
+ this.endTime = new Date();
230
+ log(`Server compile #${this.getCompileId()}: Compilation finished at ${this.endTime.toISOString()}. Duration = ${this.endTime.getTime() - this.startTime.getTime()}ms`);
231
+ };
232
+ compileResultPromise.then((r) => {
233
+ onComplete();
234
+ }, (err) => {
235
+ onComplete();
236
+ });
237
+ }
238
+ getCompileId() {
239
+ return this.id;
240
+ }
241
+ getEntryPoint() {
242
+ return this.entrypoint;
243
+ }
244
+ async getCompileResult() {
245
+ return await this.compileResultPromise;
246
+ }
247
+ getVersion() {
248
+ return this.version;
249
+ }
250
+ getStartTime() {
251
+ return this.startTime;
252
+ }
253
+ getEndTime() {
254
+ return this.endTime;
255
+ }
256
+ isCompleted() {
257
+ return this.endTime !== undefined;
258
+ }
259
+ isUpToDate() {
260
+ return this.version === this.updateManager.docChangedVersion;
261
+ }
262
+ getMode() {
263
+ return this.mode;
264
+ }
265
+ getLogs() {
266
+ return this.logs;
267
+ }
268
+ }
269
+ //# sourceMappingURL=server-compile-manager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server-compile-manager.js","sourceRoot":"","sources":["../../../src/server/server-compile-manager.ts"],"names":[],"mappings":"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"}
@@ -127,6 +127,7 @@ function main() {
127
127
  connection.onRequest(compileProjectRequestName, profile(s.internalCompile));
128
128
  documents.onDidChangeContent(profile(s.checkChange));
129
129
  documents.onDidClose(profile(s.documentClosed));
130
+ documents.onDidOpen(profile(s.documentOpened));
130
131
  documents.listen(connection);
131
132
  connection.listen();
132
133
  }
@@ -1 +1 @@
1
- {"version":3,"file":"server.js","sourceRoot":"","sources":["../../../src/server/server.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"server.js","sourceRoot":"","sources":["../../../src/server/server.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"serverlib.d.ts","sourceRoot":"","sources":["../../../src/server/serverlib.ts"],"names":[],"mappings":"AAuGA,OAAO,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAC;AAiBnE,OAAO,EAML,MAAM,EAGN,UAAU,EAKX,MAAM,YAAY,CAAC;AAEpB,wBAAgB,YAAY,CAC1B,IAAI,EAAE,UAAU,EAChB,qBAAqB,CAAC,EAAE,oBAAoB,GAC3C,MAAM,CAuuCR"}
1
+ {"version":3,"file":"serverlib.d.ts","sourceRoot":"","sources":["../../../src/server/serverlib.ts"],"names":[],"mappings":"AAuGA,OAAO,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAC;AAkBnE,OAAO,EAML,MAAM,EAGN,UAAU,EAKX,MAAM,YAAY,CAAC;AAGpB,wBAAgB,YAAY,CAC1B,IAAI,EAAE,UAAU,EAChB,qBAAqB,CAAC,EAAE,oBAAoB,GAC3C,MAAM,CAuzCR"}
@@ -35,6 +35,7 @@ import { getSymbolStructure } from "./symbol-structure.js";
35
35
  import { provideTspconfigCompletionItems } from "./tspconfig/completion.js";
36
36
  import { getParameterDocumentation, getSymbolDetails, getTemplateParameterDocumentation, } from "./type-details.js";
37
37
  import { SemanticTokenKind, } from "./types.js";
38
+ import { UpdateManger } from "./update-manager.js";
38
39
  export function createServer(host, clientConfigsProvider) {
39
40
  const fileService = createFileService({ serverHost: host });
40
41
  // Cache all file I/O. Only open documents are sent over the LSP pipe. When
@@ -49,17 +50,18 @@ export function createServer(host, clientConfigsProvider) {
49
50
  const npmPackageProvider = new NpmPackageProvider(compilerHost);
50
51
  const emitterProvider = new LibraryProvider(npmPackageProvider, (exports) => exports.$onEmit !== undefined);
51
52
  const linterProvider = new LibraryProvider(npmPackageProvider, (exports) => exports.$linter !== undefined);
53
+ const updateManager = new UpdateManger(log);
52
54
  const compileService = createCompileService({
53
55
  fileService,
54
56
  fileSystemCache,
55
57
  compilerHost,
56
58
  serverHost: host,
59
+ updateManager,
57
60
  log,
58
61
  clientConfigsProvider,
59
62
  });
60
63
  const currentDiagnosticIndex = new Map();
61
64
  let diagnosticIdCounter = 0;
62
- compileService.on("compileEnd", (result) => reportDiagnostics(result));
63
65
  let workspaceFolders = [];
64
66
  let isInitialized = false;
65
67
  let pendingMessages = [];
@@ -70,7 +72,7 @@ export function createServer(host, clientConfigsProvider) {
70
72
  get workspaceFolders() {
71
73
  return workspaceFolders;
72
74
  },
73
- compile: compileService.compile,
75
+ compile,
74
76
  initialize,
75
77
  initialized,
76
78
  workspaceFoldersChanged,
@@ -78,6 +80,7 @@ export function createServer(host, clientConfigsProvider) {
78
80
  formatDocument,
79
81
  gotoDefinition,
80
82
  documentClosed,
83
+ documentOpened,
81
84
  complete,
82
85
  findReferences,
83
86
  findDocumentHighlight,
@@ -94,6 +97,7 @@ export function createServer(host, clientConfigsProvider) {
94
97
  getCodeActions,
95
98
  executeCommand,
96
99
  log,
100
+ reportDiagnostics,
97
101
  getInitProjectContext,
98
102
  validateInitProjectTemplate,
99
103
  initProject,
@@ -106,6 +110,25 @@ export function createServer(host, clientConfigsProvider) {
106
110
  .map((x) => x.slice(0, 1).toLocaleLowerCase() + x.slice(1)),
107
111
  tokenModifiers: [],
108
112
  };
113
+ updateManager.setCallback(async (updates) => {
114
+ if (updates.length === 0) {
115
+ return;
116
+ }
117
+ // we only need to compile the last update, the previous update will be overwritten by the last one anyway
118
+ const lastUpdate = updates.reduce((pre, cur) => {
119
+ return cur.latestUpdateTimestamp > pre.latestUpdateTimestamp ? cur : pre;
120
+ });
121
+ const curVersion = updateManager.docChangedVersion;
122
+ const result = await compileService.compile(lastUpdate.latest, undefined, {
123
+ mode: "full",
124
+ // the callback should be or have been triggered for the new version, so this one should be
125
+ // cancelled in this case
126
+ isCancelled: () => updateManager.docChangedVersion > curVersion,
127
+ });
128
+ if (result && curVersion === updateManager.docChangedVersion) {
129
+ await reportDiagnostics(result);
130
+ }
131
+ });
109
132
  const capabilities = {
110
133
  textDocumentSync: TextDocumentSyncKind.Incremental,
111
134
  definitionProvider: true,
@@ -231,6 +254,12 @@ export function createServer(host, clientConfigsProvider) {
231
254
  coreInitTemplates: await getTypeSpecCoreTemplates(host.compilerHost),
232
255
  };
233
256
  }
257
+ async function compile(document, additionalOptions, serverCompileOptions) {
258
+ return compileService.compile(document, additionalOptions, serverCompileOptions);
259
+ }
260
+ async function compileInCoreMode(document) {
261
+ return compile(document, undefined, { mode: "core" });
262
+ }
234
263
  async function validateInitProjectTemplate(param) {
235
264
  const { template } = param;
236
265
  // even when the strict validation fails, we still try to proceed with relaxed validation
@@ -265,8 +294,9 @@ export function createServer(host, clientConfigsProvider) {
265
294
  ...param.options,
266
295
  };
267
296
  const result = await compileService.compile(param.doc, option, {
268
- bypassCache: true,
269
- trackAction: true,
297
+ skipCache: true,
298
+ skipOldProgramFromCache: true,
299
+ mode: "full",
270
300
  });
271
301
  if (result === undefined) {
272
302
  return {
@@ -285,6 +315,7 @@ export function createServer(host, clientConfigsProvider) {
285
315
  };
286
316
  }
287
317
  else {
318
+ result.tracker.getLogs().forEach((logItem) => host.log(logItem));
288
319
  return {
289
320
  hasError: result.program.hasError(),
290
321
  diagnostics: result.program.diagnostics.map((diagnostic) => {
@@ -331,11 +362,15 @@ export function createServer(host, clientConfigsProvider) {
331
362
  }
332
363
  }
333
364
  const mainFile = await compileService.getMainFileForDocument(await fileService.getPath({ uri: firstFilePath.newUri }));
365
+ // There will be no event triggered if the renamed file is not opened in vscode, also even when it's opened
366
+ // there will be only closed and opened event triggered for the old and new file url, so send fire the update
367
+ // explicitly here to make sure the change is not missed.
368
+ updateManager.scheduleUpdate({ uri: fileService.getURL(mainFile) }, "renamed");
334
369
  // Add this method to resolve timing issues between renamed files and `fs.stat`
335
370
  // to prevent `fs.stat` from getting the files before modification.
336
371
  // Currently the test requires a delay of 300ms
337
372
  await new Promise((resolve) => setTimeout(resolve, 300));
338
- const result = await compileService.compile({ uri: fileService.getURL(mainFile) });
373
+ const result = await compileInCoreMode({ uri: fileService.getURL(mainFile) });
339
374
  if (!result) {
340
375
  log({
341
376
  level: "debug",
@@ -459,12 +494,12 @@ export function createServer(host, clientConfigsProvider) {
459
494
  async function findDocumentHighlight(params) {
460
495
  if (isTspConfigFile(params.textDocument))
461
496
  return [];
462
- const result = await compileService.compile(params.textDocument);
497
+ const result = await compileInCoreMode(params.textDocument);
463
498
  if (result === undefined) {
464
499
  return [];
465
500
  }
466
501
  const { program, document, script } = result;
467
- if (!document) {
502
+ if (!document || !script) {
468
503
  return [];
469
504
  }
470
505
  const identifiers = findReferenceIdentifiers(program, script, document.offsetAt(params.position), [script]);
@@ -473,10 +508,27 @@ export function createServer(host, clientConfigsProvider) {
473
508
  kind: DocumentHighlightKind.Read,
474
509
  }));
475
510
  }
476
- async function checkChange(change) {
477
- if (isTspConfigFile(change.document))
478
- return undefined;
479
- compileService.notifyChange(change.document);
511
+ function checkChange(change) {
512
+ const initVersion = fileService.getOpenDocumentInitVersion(change.document.uri);
513
+ if (!initVersion) {
514
+ // not expected, log something for troubleshooting
515
+ log({
516
+ level: "debug",
517
+ message: "Document change received for document not in documentsOpened set",
518
+ detail: change.document.uri,
519
+ });
520
+ documentOpened(change);
521
+ }
522
+ else if (initVersion < change.document.version) {
523
+ compileService.notifyChange(change.document, "changed");
524
+ }
525
+ else {
526
+ // do nothing for initVersion === change.document.version which should have been handled by didOpen event
527
+ }
528
+ }
529
+ function documentOpened(change) {
530
+ fileService.notifyDocumentOpened(change);
531
+ compileService.notifyChange(change.document, "opened");
480
532
  }
481
533
  async function reportDiagnostics({ program, document, optionsFromConfig }) {
482
534
  if (!document)
@@ -493,9 +545,19 @@ export function createServer(host, clientConfigsProvider) {
493
545
  const diagnosticMap = new Map();
494
546
  diagnosticMap.set(document, []);
495
547
  for (const each of program.sourceFiles.values()) {
496
- const document = each.file?.document;
497
- if (document) {
498
- diagnosticMap.set(document, []);
548
+ const saved = each.file?.document;
549
+ if (saved) {
550
+ diagnosticMap.set(saved, []);
551
+ }
552
+ else {
553
+ // The file may be opened later when the compile used as cache
554
+ // so double check the fileService for opened document. Since
555
+ // TextDocuments will always return the same TextDocument instance
556
+ // so we should be good to use the TextDocument as the key here.
557
+ const opened = fileService.getOpenDocument(each.file.path);
558
+ if (opened) {
559
+ diagnosticMap.set(opened, []);
560
+ }
499
561
  }
500
562
  }
501
563
  for (const each of program.diagnostics) {
@@ -551,12 +613,12 @@ export function createServer(host, clientConfigsProvider) {
551
613
  async function getHover(params) {
552
614
  if (isTspConfigFile(params.textDocument))
553
615
  return { contents: [] };
554
- const result = await compileService.compile(params.textDocument);
616
+ const result = await compileInCoreMode(params.textDocument);
555
617
  if (result === undefined) {
556
618
  return { contents: [] };
557
619
  }
558
620
  const { program, document, script } = result;
559
- if (!document) {
621
+ if (!document || !script) {
560
622
  return { contents: [] };
561
623
  }
562
624
  const id = getNodeAtPosition(script, document.offsetAt(params.position));
@@ -598,12 +660,12 @@ export function createServer(host, clientConfigsProvider) {
598
660
  async function getSignatureHelp(params) {
599
661
  if (isTspConfigFile(params.textDocument))
600
662
  return undefined;
601
- const result = await compileService.compile(params.textDocument);
663
+ const result = await compileInCoreMode(params.textDocument);
602
664
  if (result === undefined) {
603
665
  return undefined;
604
666
  }
605
667
  const { script, document, program } = result;
606
- if (!document) {
668
+ if (!document || !script) {
607
669
  return undefined;
608
670
  }
609
671
  const data = getSignatureHelpNodeAtPosition(script, document.offsetAt(params.position));
@@ -733,8 +795,18 @@ export function createServer(host, clientConfigsProvider) {
733
795
  level: "info",
734
796
  message: `Formatting TypeSpec document: ${JSON.stringify({ fileUri: params.textDocument.uri, vscodeOptions: params.options, prettierConfig, resolvedConfig }, null, 2)}`,
735
797
  });
736
- const formattedText = await formatTypeSpec(document.getText(), resolvedConfig);
737
- return [minimalEdit(document, formattedText)];
798
+ try {
799
+ const formattedText = await formatTypeSpec(document.getText(), resolvedConfig);
800
+ return [minimalEdit(document, formattedText)];
801
+ }
802
+ catch (error) {
803
+ log({
804
+ level: "error",
805
+ message: `Failed to format TypeSpec document: ${params.textDocument.uri}`,
806
+ detail: error,
807
+ });
808
+ return [];
809
+ }
738
810
  }
739
811
  async function resolvePrettierConfig(path) {
740
812
  try {
@@ -768,8 +840,8 @@ export function createServer(host, clientConfigsProvider) {
768
840
  async function gotoDefinition(params) {
769
841
  if (isTspConfigFile(params.textDocument))
770
842
  return [];
771
- const result = await compileService.compile(params.textDocument);
772
- if (result === undefined || result.document === undefined) {
843
+ const result = await compileInCoreMode(params.textDocument);
844
+ if (result === undefined || result.document === undefined || result.script === undefined) {
773
845
  return [];
774
846
  }
775
847
  const node = getNodeAtPosition(result.script, result.document.offsetAt(params.position));
@@ -828,10 +900,10 @@ export function createServer(host, clientConfigsProvider) {
828
900
  isIncomplete: false,
829
901
  items: [],
830
902
  };
831
- const result = await compileService.compile(params.textDocument);
903
+ const result = await compileInCoreMode(params.textDocument);
832
904
  if (result) {
833
905
  const { script, document, program } = result;
834
- if (!document) {
906
+ if (!document || !script) {
835
907
  return completions;
836
908
  }
837
909
  const posDetail = getCompletionNodeAtPosition(script, document.offsetAt(params.position));
@@ -847,8 +919,8 @@ export function createServer(host, clientConfigsProvider) {
847
919
  async function findReferences(params) {
848
920
  if (isTspConfigFile(params.textDocument))
849
921
  return [];
850
- const result = await compileService.compile(params.textDocument);
851
- if (result === undefined || result.document === undefined) {
922
+ const result = await compileInCoreMode(params.textDocument);
923
+ if (result === undefined || result.document === undefined || result.script === undefined) {
852
924
  return [];
853
925
  }
854
926
  const identifiers = findReferenceIdentifiers(result.program, result.script, result.document.offsetAt(params.position));
@@ -857,8 +929,8 @@ export function createServer(host, clientConfigsProvider) {
857
929
  async function prepareRename(params) {
858
930
  if (isTspConfigFile(params.textDocument))
859
931
  return undefined;
860
- const result = await compileService.compile(params.textDocument);
861
- if (result === undefined || result.document === undefined) {
932
+ const result = await compileInCoreMode(params.textDocument);
933
+ if (result === undefined || result.document === undefined || result.script === undefined) {
862
934
  return undefined;
863
935
  }
864
936
  const id = getNodeAtPosition(result.script, result.document.offsetAt(params.position));
@@ -868,8 +940,8 @@ export function createServer(host, clientConfigsProvider) {
868
940
  if (isTspConfigFile(params.textDocument))
869
941
  return { changes: {} };
870
942
  const changes = {};
871
- const result = await compileService.compile(params.textDocument);
872
- if (result && result.document) {
943
+ const result = await compileInCoreMode(params.textDocument);
944
+ if (result && result.document && result.script) {
873
945
  const identifiers = findReferenceIdentifiers(result.program, result.script, result.document.offsetAt(params.position));
874
946
  for (const id of identifiers) {
875
947
  const location = getLocation(id);
@@ -1009,6 +1081,7 @@ export function createServer(host, clientConfigsProvider) {
1009
1081
  }
1010
1082
  }
1011
1083
  function documentClosed(change) {
1084
+ fileService.notifyDocumentClosed(change);
1012
1085
  // clear diagnostics on file close
1013
1086
  sendDiagnostics(change.document, []);
1014
1087
  }