Merge from vscode 81d7885dc2e9dc617e1522697a2966bc4025a45d (#5949)

* Merge from vscode 81d7885dc2e9dc617e1522697a2966bc4025a45d

* Fix vs unit tests and hygiene issue

* Fix strict null check issue
This commit is contained in:
Chris LaFreniere
2019-06-10 18:27:09 -07:00
committed by GitHub
parent ff38bc8143
commit d15a3fcc98
926 changed files with 19529 additions and 11383 deletions

View File

@@ -30,7 +30,7 @@ import { ICodeEditor } from 'vs/editor/browser/editorBrowser';
import { INotificationService } from 'vs/platform/notification/common/notification';
import { CancellationToken } from 'vs/base/common/cancellation';
import { IExtensionService } from 'vs/workbench/services/extensions/common/extensions';
import { Disposable } from 'vs/base/common/lifecycle';
import { Disposable, DisposableStore, IDisposable } from 'vs/base/common/lifecycle';
import { timeout } from 'vs/base/common/async';
export const ALL_COMMANDS_PREFIX = '>';
@@ -294,7 +294,7 @@ abstract class BaseCommandEntry extends QuickOpenEntryGroup {
this.onBeforeRun(this.commandId);
// Use a timeout to give the quick open widget a chance to close itself first
setTimeout(() => {
setTimeout(async () => {
if (action && (!(action instanceof Action) || action.enabled)) {
try {
/* __GDPR__
@@ -304,11 +304,17 @@ abstract class BaseCommandEntry extends QuickOpenEntryGroup {
}
*/
this.telemetryService.publicLog('workbenchActionExecuted', { id: action.id, from: 'quick open' });
(action.run() || Promise.resolve()).then(() => {
if (action instanceof Action) {
action.dispose();
const promise = action.run();
if (promise) {
try {
await promise;
} finally {
if (action instanceof Action) {
action.dispose();
}
}
}, err => this.onError(err));
}
} catch (error) {
this.onError(error);
}
@@ -371,12 +377,14 @@ class ActionCommandEntry extends BaseCommandEntry {
const wordFilter = or(matchesPrefix, matchesWords, matchesContiguousSubString);
export class CommandsHandler extends QuickOpenHandler {
export class CommandsHandler extends QuickOpenHandler implements IDisposable {
static readonly ID = 'workbench.picker.commands';
private commandHistoryEnabled: boolean;
private commandsHistory: CommandsHistory;
private readonly commandsHistory: CommandsHistory;
private readonly disposables = new DisposableStore();
private waitedForExtensionsRegistered: boolean;
@@ -390,7 +398,7 @@ export class CommandsHandler extends QuickOpenHandler {
) {
super();
this.commandsHistory = this.instantiationService.createInstance(CommandsHistory);
this.commandsHistory = this.disposables.add(this.instantiationService.createInstance(CommandsHistory));
this.extensionService.whenInstalledExtensionsRegistered().then(() => this.waitedForExtensionsRegistered = true);
@@ -402,7 +410,7 @@ export class CommandsHandler extends QuickOpenHandler {
this.commandHistoryEnabled = resolveCommandHistory(this.configurationService) > 0;
}
getResults(searchValue: string, token: CancellationToken): Promise<QuickOpenModel> {
async getResults(searchValue: string, token: CancellationToken): Promise<QuickOpenModel> {
if (this.waitedForExtensionsRegistered) {
return this.doGetResults(searchValue, token);
}
@@ -411,11 +419,10 @@ export class CommandsHandler extends QuickOpenHandler {
// a chance to register so that the complete set of commands shows up as result
// We do not want to delay functionality beyond that time though to keep the commands
// functional.
return Promise.race([timeout(800), this.extensionService.whenInstalledExtensionsRegistered().then(() => undefined)]).then(() => {
this.waitedForExtensionsRegistered = true;
await Promise.race([timeout(800).then(), this.extensionService.whenInstalledExtensionsRegistered()]);
this.waitedForExtensionsRegistered = true;
return this.doGetResults(searchValue, token);
});
return this.doGetResults(searchValue, token);
}
private doGetResults(searchValue: string, token: CancellationToken): Promise<QuickOpenModel> {
@@ -583,6 +590,10 @@ export class CommandsHandler extends QuickOpenHandler {
getEmptyLabel(searchString: string): string {
return nls.localize('noCommandsMatching', "No commands matching");
}
dispose() {
this.disposables.dispose();
}
}
registerEditorAction(CommandPaletteEditorAction);

View File

@@ -495,7 +495,7 @@ export class GotoSymbolHandler extends QuickOpenHandler {
return this.cachedOutlineRequest;
}
private doGetActiveOutline(): Promise<OutlineModel | null> {
private async doGetActiveOutline(): Promise<OutlineModel | null> {
const activeTextEditorWidget = this.editorService.activeTextEditorWidget;
if (activeTextEditorWidget) {
let model = activeTextEditorWidget.getModel();
@@ -504,13 +504,13 @@ export class GotoSymbolHandler extends QuickOpenHandler {
}
if (model && types.isFunction((<ITextModel>model).getLanguageIdentifier)) {
return Promise.resolve(asPromise(() => getDocumentSymbols(<ITextModel>model, true, this.pendingOutlineRequest!.token)).then(entries => {
return new OutlineModel(this.toQuickOpenEntries(entries));
}));
const entries = await asPromise(() => getDocumentSymbols(<ITextModel>model, true, this.pendingOutlineRequest!.token));
return new OutlineModel(this.toQuickOpenEntries(entries));
}
}
return Promise.resolve(null);
return null;
}
decorateOutline(fullRange: IRange, startRange: IRange, editor: IEditor, group: IEditorGroup): void {