@typespec/compiler 1.5.0-dev.0 → 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.
- package/dist/manifest.js +2 -2
- package/dist/src/server/compile-service.d.ts +6 -6
- package/dist/src/server/compile-service.d.ts.map +1 -1
- package/dist/src/server/compile-service.js +46 -36
- package/dist/src/server/compile-service.js.map +1 -1
- package/dist/src/server/constants.d.ts +5 -4
- package/dist/src/server/constants.d.ts.map +1 -1
- package/dist/src/server/constants.js +5 -4
- package/dist/src/server/constants.js.map +1 -1
- package/dist/src/server/diagnostics.d.ts.map +1 -1
- package/dist/src/server/diagnostics.js +23 -8
- package/dist/src/server/diagnostics.js.map +1 -1
- package/dist/src/server/file-service.d.ts +4 -1
- package/dist/src/server/file-service.d.ts.map +1 -1
- package/dist/src/server/file-service.js +30 -0
- package/dist/src/server/file-service.js.map +1 -1
- package/dist/src/server/server-compile-manager.d.ts +55 -0
- package/dist/src/server/server-compile-manager.d.ts.map +1 -0
- package/dist/src/server/server-compile-manager.js +269 -0
- package/dist/src/server/server-compile-manager.js.map +1 -0
- package/dist/src/server/server.js +1 -0
- package/dist/src/server/server.js.map +1 -1
- package/dist/src/server/serverlib.d.ts.map +1 -1
- package/dist/src/server/serverlib.js +127 -34
- package/dist/src/server/serverlib.js.map +1 -1
- package/dist/src/server/types.d.ts +7 -3
- package/dist/src/server/types.d.ts.map +1 -1
- package/dist/src/server/types.js.map +1 -1
- package/dist/src/server/update-manager.d.ts +23 -4
- package/dist/src/server/update-manager.d.ts.map +1 -1
- package/dist/src/server/update-manager.js +110 -18
- package/dist/src/server/update-manager.js.map +1 -1
- package/dist/src/testing/test-server-host.d.ts.map +1 -1
- package/dist/src/testing/test-server-host.js +15 -1
- package/dist/src/testing/test-server-host.js.map +1 -1
- package/package.json +1 -1
|
@@ -1,11 +1,29 @@
|
|
|
1
|
+
import { TextDocumentIdentifier } from "vscode-languageserver";
|
|
1
2
|
import { TextDocument } from "vscode-languageserver-textdocument";
|
|
3
|
+
import { ServerLog } from "./types.js";
|
|
4
|
+
interface PendingUpdate {
|
|
5
|
+
latest: TextDocument | TextDocumentIdentifier;
|
|
6
|
+
latestUpdateTimestamp: number;
|
|
7
|
+
}
|
|
8
|
+
export type UpdateType = "opened" | "changed" | "closed" | "renamed";
|
|
9
|
+
type UpdateCallback = (updates: PendingUpdate[]) => Promise<void>;
|
|
2
10
|
/**
|
|
3
11
|
* Track file updates and recompile the affected files after some debounce time.
|
|
4
12
|
*/
|
|
5
|
-
export declare class UpdateManger
|
|
13
|
+
export declare class UpdateManger {
|
|
6
14
|
#private;
|
|
7
|
-
|
|
8
|
-
|
|
15
|
+
private _log;
|
|
16
|
+
constructor(log: (sl: ServerLog) => void);
|
|
17
|
+
setCallback(callback: UpdateCallback): void;
|
|
18
|
+
get docChangedVersion(): number;
|
|
19
|
+
private bumpDocChangedVersion;
|
|
20
|
+
private pushDocChangedTimestamp;
|
|
21
|
+
private readonly WINDOW;
|
|
22
|
+
private readonly DEFAULT_DELAY;
|
|
23
|
+
private readonly DELAY_CANDIDATES;
|
|
24
|
+
private getWindowedDocChangedTimesteps;
|
|
25
|
+
private getAdaptiveDebounceDelay;
|
|
26
|
+
scheduleUpdate(document: TextDocument | TextDocumentIdentifier, UpdateType: UpdateType): void;
|
|
9
27
|
}
|
|
10
28
|
/**
|
|
11
29
|
* Debounces a function but also waits at minimum the specified number of milliseconds until
|
|
@@ -15,5 +33,6 @@ export declare class UpdateManger<T> {
|
|
|
15
33
|
* @param fn The function
|
|
16
34
|
* @param milliseconds Number of milliseconds to debounce/throttle
|
|
17
35
|
*/
|
|
18
|
-
export declare function debounceThrottle(fn: () => void,
|
|
36
|
+
export declare function debounceThrottle(fn: () => void | Promise<void>, getDelay: () => number, log: (sl: ServerLog) => void): () => void;
|
|
37
|
+
export {};
|
|
19
38
|
//# sourceMappingURL=update-manager.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"update-manager.d.ts","sourceRoot":"","sources":["../../../src/server/update-manager.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,oCAAoC,CAAC;
|
|
1
|
+
{"version":3,"file":"update-manager.d.ts","sourceRoot":"","sources":["../../../src/server/update-manager.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,sBAAsB,EAAE,MAAM,uBAAuB,CAAC;AAC/D,OAAO,EAAE,YAAY,EAAE,MAAM,oCAAoC,CAAC;AAElE,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAEvC,UAAU,aAAa;IACrB,MAAM,EAAE,YAAY,GAAG,sBAAsB,CAAC;IAC9C,qBAAqB,EAAE,MAAM,CAAC;CAC/B;AAED,MAAM,MAAM,UAAU,GAAG,QAAQ,GAAG,SAAS,GAAG,QAAQ,GAAG,SAAS,CAAC;AAErE,KAAK,cAAc,GAAG,CAAC,OAAO,EAAE,aAAa,EAAE,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;AAClE;;GAEG;AACH,qBAAa,YAAY;;IAQvB,OAAO,CAAC,IAAI,CAA0B;gBAE1B,GAAG,EAAE,CAAC,EAAE,EAAE,SAAS,KAAK,IAAI;IAsBjC,WAAW,CAAC,QAAQ,EAAE,cAAc;IAI3C,IAAW,iBAAiB,WAE3B;IAED,OAAO,CAAC,qBAAqB;IAI7B,OAAO,CAAC,uBAAuB;IAK/B,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAQ;IAC/B,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAO;IAGrC,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAiB/B;IAEF,OAAO,CAAC,8BAA8B;IAQtC,OAAO,CAAC,wBAAwB,CAS9B;IAEK,cAAc,CAAC,QAAQ,EAAE,YAAY,GAAG,sBAAsB,EAAE,UAAU,EAAE,UAAU;CAuB9F;AAED;;;;;;;GAOG;AACH,wBAAgB,gBAAgB,CAC9B,EAAE,EAAE,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,EAC9B,QAAQ,EAAE,MAAM,MAAM,EACtB,GAAG,EAAE,CAAC,EAAE,EAAE,SAAS,KAAK,IAAI,GAC3B,MAAM,IAAI,CAwCZ"}
|
|
@@ -1,33 +1,104 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { ENABLE_UPDATE_MANAGER_LOGGING } from "./constants.js";
|
|
2
2
|
/**
|
|
3
3
|
* Track file updates and recompile the affected files after some debounce time.
|
|
4
4
|
*/
|
|
5
5
|
export class UpdateManger {
|
|
6
6
|
#pendingUpdates = new Map();
|
|
7
7
|
#updateCb;
|
|
8
|
-
|
|
9
|
-
|
|
8
|
+
// overall version which should be bumped for any actual doc change
|
|
9
|
+
#docChangedVersion = 0;
|
|
10
|
+
#scheduleBatchUpdate;
|
|
11
|
+
#docChangedTimesteps = [];
|
|
12
|
+
_log;
|
|
13
|
+
constructor(log) {
|
|
14
|
+
this._log =
|
|
15
|
+
typeof process !== "undefined" &&
|
|
16
|
+
process?.env?.[ENABLE_UPDATE_MANAGER_LOGGING]?.toLowerCase() === "true"
|
|
17
|
+
? (sl) => {
|
|
18
|
+
log({ ...sl, message: `#FromUpdateManager: ${sl.message}` });
|
|
19
|
+
}
|
|
20
|
+
: () => { };
|
|
21
|
+
this.#scheduleBatchUpdate = debounceThrottle(async () => {
|
|
22
|
+
const updates = this.#pendingUpdates;
|
|
23
|
+
this.#pendingUpdates = new Map();
|
|
24
|
+
if (updates.size > 0) {
|
|
25
|
+
await this.#update(Array.from(updates.values()));
|
|
26
|
+
}
|
|
27
|
+
}, this.getAdaptiveDebounceDelay, this._log);
|
|
28
|
+
}
|
|
29
|
+
setCallback(callback) {
|
|
30
|
+
this.#updateCb = callback;
|
|
31
|
+
}
|
|
32
|
+
get docChangedVersion() {
|
|
33
|
+
return this.#docChangedVersion;
|
|
34
|
+
}
|
|
35
|
+
bumpDocChangedVersion() {
|
|
36
|
+
this.#docChangedVersion++;
|
|
37
|
+
}
|
|
38
|
+
pushDocChangedTimestamp() {
|
|
39
|
+
const now = Date.now();
|
|
40
|
+
this.#docChangedTimesteps = [...this.getWindowedDocChangedTimesteps(), now];
|
|
41
|
+
}
|
|
42
|
+
WINDOW = 5000;
|
|
43
|
+
DEFAULT_DELAY = 500;
|
|
44
|
+
// Provider different debounce delay according to whether usr are actively typing, increase the delay if so to avoid unnecessary invoke
|
|
45
|
+
// The category below is suggested from AI, may adjust as needed in the future
|
|
46
|
+
DELAY_CANDIDATES = [
|
|
47
|
+
// IMPORTANT: sort by frequencyInWindow desc, we will pick the first match
|
|
48
|
+
{
|
|
49
|
+
// active typing
|
|
50
|
+
frequencyInWindow: 20,
|
|
51
|
+
delay: 1000,
|
|
52
|
+
},
|
|
53
|
+
{
|
|
54
|
+
// moderate typing
|
|
55
|
+
frequencyInWindow: 10,
|
|
56
|
+
delay: 800,
|
|
57
|
+
},
|
|
58
|
+
{
|
|
59
|
+
// light typing
|
|
60
|
+
frequencyInWindow: 0,
|
|
61
|
+
delay: this.DEFAULT_DELAY,
|
|
62
|
+
},
|
|
63
|
+
];
|
|
64
|
+
getWindowedDocChangedTimesteps() {
|
|
65
|
+
const now = Date.now();
|
|
66
|
+
return this.#docChangedTimesteps.filter((timestamp) => {
|
|
67
|
+
const age = now - timestamp;
|
|
68
|
+
return age < this.WINDOW;
|
|
69
|
+
});
|
|
10
70
|
}
|
|
11
|
-
|
|
71
|
+
getAdaptiveDebounceDelay = () => {
|
|
72
|
+
const frequent = this.getWindowedDocChangedTimesteps().length;
|
|
73
|
+
for (const c of this.DELAY_CANDIDATES) {
|
|
74
|
+
if (frequent >= c.frequencyInWindow) {
|
|
75
|
+
return c.delay;
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
return this.DEFAULT_DELAY;
|
|
79
|
+
};
|
|
80
|
+
scheduleUpdate(document, UpdateType) {
|
|
81
|
+
if (UpdateType === "changed" || UpdateType === "renamed") {
|
|
82
|
+
// only bump this when the file is actually changed
|
|
83
|
+
// skip open
|
|
84
|
+
this.bumpDocChangedVersion();
|
|
85
|
+
this.pushDocChangedTimestamp();
|
|
86
|
+
}
|
|
12
87
|
const existing = this.#pendingUpdates.get(document.uri);
|
|
13
88
|
if (existing === undefined) {
|
|
14
89
|
this.#pendingUpdates.set(document.uri, {
|
|
15
90
|
latest: document,
|
|
91
|
+
latestUpdateTimestamp: Date.now(),
|
|
16
92
|
});
|
|
17
93
|
}
|
|
18
94
|
else {
|
|
19
95
|
existing.latest = document;
|
|
96
|
+
existing.latestUpdateTimestamp = Date.now();
|
|
20
97
|
}
|
|
21
98
|
this.#scheduleBatchUpdate();
|
|
22
99
|
}
|
|
23
|
-
#
|
|
24
|
-
this.#
|
|
25
|
-
void this.#update(update);
|
|
26
|
-
});
|
|
27
|
-
this.#pendingUpdates.clear();
|
|
28
|
-
}, UPDATE_DEBOUNCE_TIME);
|
|
29
|
-
async #update(update) {
|
|
30
|
-
await this.#updateCb(update.latest);
|
|
100
|
+
async #update(updates) {
|
|
101
|
+
await this.#updateCb?.(updates);
|
|
31
102
|
}
|
|
32
103
|
}
|
|
33
104
|
/**
|
|
@@ -38,19 +109,40 @@ export class UpdateManger {
|
|
|
38
109
|
* @param fn The function
|
|
39
110
|
* @param milliseconds Number of milliseconds to debounce/throttle
|
|
40
111
|
*/
|
|
41
|
-
export function debounceThrottle(fn,
|
|
112
|
+
export function debounceThrottle(fn, getDelay, log) {
|
|
42
113
|
let timeout;
|
|
43
|
-
let lastInvocation =
|
|
114
|
+
let lastInvocation = undefined;
|
|
115
|
+
let executingCount = 0;
|
|
116
|
+
let debounceExecutionId = 0;
|
|
117
|
+
const UPDATE_PARALLEL_LIMIT = 2;
|
|
44
118
|
function maybeCall() {
|
|
45
119
|
clearTimeout(timeout);
|
|
46
|
-
timeout = setTimeout(() => {
|
|
47
|
-
if (
|
|
120
|
+
timeout = setTimeout(async () => {
|
|
121
|
+
if (lastInvocation !== undefined &&
|
|
122
|
+
(Date.now() - lastInvocation < getDelay() || executingCount >= UPDATE_PARALLEL_LIMIT)) {
|
|
48
123
|
maybeCall();
|
|
49
124
|
return;
|
|
50
125
|
}
|
|
51
|
-
|
|
126
|
+
const curId = debounceExecutionId++;
|
|
127
|
+
const s = new Date();
|
|
128
|
+
try {
|
|
129
|
+
executingCount++;
|
|
130
|
+
log({
|
|
131
|
+
level: "debug",
|
|
132
|
+
message: `Starting debounce execution #${curId} at ${s.toISOString()}. Current parallel count: ${executingCount}`,
|
|
133
|
+
});
|
|
134
|
+
await fn();
|
|
135
|
+
}
|
|
136
|
+
finally {
|
|
137
|
+
executingCount--;
|
|
138
|
+
const e = new Date();
|
|
139
|
+
log({
|
|
140
|
+
level: "debug",
|
|
141
|
+
message: `Finish debounce execution #${curId} at ${e.toISOString()}, duration=${e.getTime() - s.getTime()}. Current parallel count: ${executingCount}`,
|
|
142
|
+
});
|
|
143
|
+
}
|
|
52
144
|
lastInvocation = Date.now();
|
|
53
|
-
},
|
|
145
|
+
}, getDelay());
|
|
54
146
|
}
|
|
55
147
|
return maybeCall;
|
|
56
148
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"update-manager.js","sourceRoot":"","sources":["../../../src/server/update-manager.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"update-manager.js","sourceRoot":"","sources":["../../../src/server/update-manager.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"test-server-host.d.ts","sourceRoot":"","sources":["../../../src/testing/test-server-host.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,oCAAoC,CAAC;AAClE,OAAO,EAAE,UAAU,
|
|
1
|
+
{"version":3,"file":"test-server-host.d.ts","sourceRoot":"","sources":["../../../src/testing/test-server-host.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,oCAAoC,CAAC;AAClE,OAAO,EAAE,UAAU,EAA0C,MAAM,+BAA+B,CAAC;AAInG,OAAO,EAAE,cAAc,EAAc,MAAM,kBAAkB,CAAC;AAE9D,OAAO,EAAE,MAAM,EAAE,UAAU,EAAgB,MAAM,oBAAoB,CAAC;AAItE,OAAO,EAAuB,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAE/E,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAE5C,MAAM,WAAW,cAAe,SAAQ,UAAU,EAAE,cAAc;IAChE,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,SAAS,MAAM,EAAE,CAAC;IAC/B,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,YAAY,GAAG,SAAS,CAAC;IACxD,mBAAmB,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,YAAY,CAAC;IACjE,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,YAAY,CAAC;IACzC,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,UAAU,EAAE,CAAC;IACpD,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAAC;CAC9B;AAED,wBAAsB,oBAAoB,CAAC,OAAO,CAAC,EAAE,eAAe,GAAG;IAAE,YAAY,CAAC,EAAE,MAAM,CAAA;CAAE,2BAqH/F;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,MAAM,GAAG,cAAc,EAAE,CAanE"}
|
|
@@ -40,6 +40,10 @@ export async function createTestServerHost(options) {
|
|
|
40
40
|
const document = TextDocument.create(url, "typespec", version, content);
|
|
41
41
|
documents.set(url, document);
|
|
42
42
|
fileSystem.addTypeSpecFile(path, ""); // force virtual file system to create directory where document lives.
|
|
43
|
+
if (!oldDocument) {
|
|
44
|
+
server.documentOpened({ document });
|
|
45
|
+
}
|
|
46
|
+
server.checkChange({ document });
|
|
43
47
|
return document;
|
|
44
48
|
},
|
|
45
49
|
openDocument(path) {
|
|
@@ -49,7 +53,7 @@ export async function createTestServerHost(options) {
|
|
|
49
53
|
getDiagnostics(path) {
|
|
50
54
|
return diagnostics.get(this.getURL(path)) ?? [];
|
|
51
55
|
},
|
|
52
|
-
sendDiagnostics(params) {
|
|
56
|
+
async sendDiagnostics(params) {
|
|
53
57
|
if (params.version && documents.get(params.uri)?.version !== params.version) {
|
|
54
58
|
return;
|
|
55
59
|
}
|
|
@@ -100,6 +104,16 @@ export async function createTestServerHost(options) {
|
|
|
100
104
|
workspaceFolders: null,
|
|
101
105
|
});
|
|
102
106
|
server.initialized({});
|
|
107
|
+
const serverCompile = server.compile;
|
|
108
|
+
server.compile = async (document, additionalOptions, serverCompileOptions) => {
|
|
109
|
+
// Wrap the compile to report diagnostics after compile in test to make sure existing tests
|
|
110
|
+
// that rely on diagnostics to work without having to change each of them to call reportDiagnostics explicitly.
|
|
111
|
+
const result = await serverCompile(document, additionalOptions, serverCompileOptions);
|
|
112
|
+
if (result) {
|
|
113
|
+
await server.reportDiagnostics(result);
|
|
114
|
+
}
|
|
115
|
+
return result;
|
|
116
|
+
};
|
|
103
117
|
serverHost.server = server;
|
|
104
118
|
return serverHost;
|
|
105
119
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"test-server-host.js","sourceRoot":"","sources":["../../../src/testing/test-server-host.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,KAAK,CAAC;AACpC,OAAO,EAAE,YAAY,EAAE,MAAM,oCAAoC,CAAC;AAClE,OAAO,EAAc,cAAc,
|
|
1
|
+
{"version":3,"file":"test-server-host.js","sourceRoot":"","sources":["../../../src/testing/test-server-host.ts"],"names":[],"mappings":"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"}
|