src/vs/editor/contrib/suggest/browser/suggest.ts/CompletionItem/resolve
class CompletionItem:	async resolve(token: CancellationToken) {
		if (!this._resolveCache) {
			const sub = token.onCancellationRequested(() => {
				this._resolveCache = undefined;
				this._isResolved = false;
			});
			this._resolveCache = Promise.resolve(this.provider.resolveCompletionItem!(this.completion, token)).then(value => {
				Object.assign(this.completion, value);
				this._isResolved = true;
				sub.dispose();
			}, err => {
				if (isCancellationError(err)) {
					// the IPC queue will reject the request with the
					// cancellation error -> reset cached
					this._resolveCache = undefined;
					this._isResolved = false;
				}
			});
		}
		return this._resolveCache;
	}