Skip to content

Commit 9ee6077

Browse files
committed
Strict null work in extHost
1 parent d18d0ed commit 9ee6077

18 files changed

Lines changed: 56 additions & 51 deletions

src/vs/editor/common/modes/languageSelector.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ export interface LanguageFilter {
1919

2020
export type LanguageSelector = string | LanguageFilter | Array<string | LanguageFilter>;
2121

22-
export function score(selector: LanguageSelector, candidateUri: URI, candidateLanguage: string, candidateIsSynchronized: boolean): number {
22+
export function score(selector: LanguageSelector | undefined, candidateUri: URI, candidateLanguage: string, candidateIsSynchronized: boolean): number {
2323

2424
if (Array.isArray(selector)) {
2525
// array -> take max individual value

src/vs/workbench/api/node/extHost.protocol.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -655,7 +655,7 @@ export interface ExtHostDiagnosticsShape {
655655
}
656656

657657
export interface ExtHostDocumentContentProvidersShape {
658-
$provideTextDocumentContent(handle: number, uri: UriComponents): Promise<string>;
658+
$provideTextDocumentContent(handle: number, uri: UriComponents): Promise<string | null | undefined>;
659659
}
660660

661661
export interface IModelAddedData {
@@ -961,7 +961,7 @@ export interface ExtHostTerminalServiceShape {
961961
}
962962

963963
export interface ExtHostSCMShape {
964-
$provideOriginalResource(sourceControlHandle: number, uri: UriComponents, token: CancellationToken): Promise<UriComponents>;
964+
$provideOriginalResource(sourceControlHandle: number, uri: UriComponents, token: CancellationToken): Promise<UriComponents | null>;
965965
$onInputBoxValueChange(sourceControlHandle: number, value: string): void;
966966
$executeResourceCommand(sourceControlHandle: number, groupHandle: number, handle: number): Promise<void>;
967967
$validateInput(sourceControlHandle: number, value: string, cursorPosition: number): Promise<[string, number] | undefined>;

src/vs/workbench/api/node/extHostDocumentContentProviders.ts

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@ export class ExtHostDocumentContentProvider implements ExtHostDocumentContentPro
4545
this._documentContentProviders.set(handle, provider);
4646
this._proxy.$registerTextContentProvider(handle, scheme);
4747

48-
let subscription: IDisposable;
48+
let subscription: IDisposable | undefined;
4949
if (typeof provider.onDidChange === 'function') {
5050
subscription = provider.onDidChange(uri => {
5151
if (uri.scheme !== scheme) {
@@ -54,6 +54,9 @@ export class ExtHostDocumentContentProvider implements ExtHostDocumentContentPro
5454
}
5555
if (this._documentsAndEditors.getDocument(uri.toString())) {
5656
this.$provideTextDocumentContent(handle, uri).then(value => {
57+
if (!value) {
58+
return;
59+
}
5760

5861
const document = this._documentsAndEditors.getDocument(uri.toString());
5962
if (!document) {
@@ -84,7 +87,7 @@ export class ExtHostDocumentContentProvider implements ExtHostDocumentContentPro
8487
});
8588
}
8689

87-
$provideTextDocumentContent(handle: number, uri: UriComponents): Promise<string> {
90+
$provideTextDocumentContent(handle: number, uri: UriComponents): Promise<string | null | undefined> {
8891
const provider = this._documentContentProviders.get(handle);
8992
if (!provider) {
9093
return Promise.reject(new Error(`unsupported uri-scheme: ${uri.scheme}`));

src/vs/workbench/api/node/extHostDocumentSaveParticipant.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -72,7 +72,7 @@ export class ExtHostDocumentSaveParticipant implements ExtHostDocumentSavePartic
7272

7373
private _deliverEventAsyncAndBlameBadListeners([listener, thisArg, extension]: Listener, stubEvent: vscode.TextDocumentWillSaveEvent): Promise<any> {
7474
const errors = this._badListeners.get(listener);
75-
if (errors > this._thresholds.errors) {
75+
if (typeof errors === 'number' && errors > this._thresholds.errors) {
7676
// bad listener - ignore
7777
return Promise.resolve(false);
7878
}
@@ -90,7 +90,7 @@ export class ExtHostDocumentSaveParticipant implements ExtHostDocumentSavePartic
9090
const errors = this._badListeners.get(listener);
9191
this._badListeners.set(listener, !errors ? 1 : errors + 1);
9292

93-
if (errors > this._thresholds.errors) {
93+
if (typeof errors === 'number' && errors > this._thresholds.errors) {
9494
this._logService.info(`onWillSaveTextDocument-listener from extension '${extension.identifier.value}' will now be IGNORED because of timeouts and/or errors`);
9595
}
9696
}

src/vs/workbench/api/node/extHostDocuments.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,7 @@ export class ExtHostDocuments implements ExtHostDocumentsShape {
5656
return this._documentsAndEditors.allDocuments();
5757
}
5858

59-
public getDocumentData(resource: vscode.Uri): ExtHostDocumentData {
59+
public getDocumentData(resource: vscode.Uri): ExtHostDocumentData | undefined {
6060
if (!resource) {
6161
return undefined;
6262
}

src/vs/workbench/api/node/extHostExtensionService.ts

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -81,13 +81,13 @@ class ExtensionMemento implements IExtensionMemento {
8181

8282
class ExtensionStoragePath {
8383

84-
private readonly _workspace: IStaticWorkspaceData;
84+
private readonly _workspace?: IStaticWorkspaceData;
8585
private readonly _environment: IEnvironment;
8686

87-
private readonly _ready: Promise<string>;
88-
private _value: string;
87+
private readonly _ready: Promise<string | undefined>;
88+
private _value?: string;
8989

90-
constructor(workspace: IStaticWorkspaceData, environment: IEnvironment) {
90+
constructor(workspace: IStaticWorkspaceData | undefined, environment: IEnvironment) {
9191
this._workspace = workspace;
9292
this._environment = environment;
9393
this._ready = this._getOrCreateWorkspaceStoragePath().then(value => this._value = value);
@@ -97,7 +97,7 @@ class ExtensionStoragePath {
9797
return this._ready;
9898
}
9999

100-
workspaceValue(extension: IExtensionDescription): string {
100+
workspaceValue(extension: IExtensionDescription): string | undefined {
101101
if (this._value) {
102102
return path.join(this._value, extension.identifier.value);
103103
}
@@ -108,7 +108,7 @@ class ExtensionStoragePath {
108108
return path.join(this._environment.globalStorageHome.fsPath, extension.identifier.value.toLowerCase());
109109
}
110110

111-
private async _getOrCreateWorkspaceStoragePath(): Promise<string> {
111+
private async _getOrCreateWorkspaceStoragePath(): Promise<string | undefined> {
112112
if (!this._workspace) {
113113
return Promise.resolve(undefined);
114114
}
@@ -493,7 +493,7 @@ export class ExtHostExtensionService implements ExtHostExtensionServiceShape {
493493
return this._handleWorkspaceContainsEagerExtensions(workspaceProvider.workspace);
494494
}
495495

496-
private _handleWorkspaceContainsEagerExtensions(workspace: IWorkspace): Promise<void> {
496+
private _handleWorkspaceContainsEagerExtensions(workspace: IWorkspace | undefined): Promise<void> {
497497
if (!workspace || workspace.folders.length === 0) {
498498
return Promise.resolve(undefined);
499499
}
@@ -567,7 +567,7 @@ export class ExtHostExtensionService implements ExtHostExtensionServiceShape {
567567
.then(undefined, err => console.error(err));
568568
}, ExtHostExtensionService.WORKSPACE_CONTAINS_TIMEOUT);
569569

570-
let exists: boolean;
570+
let exists: boolean = false;
571571
try {
572572
exists = await searchP;
573573
} catch (err) {
@@ -608,8 +608,8 @@ export class ExtHostExtensionService implements ExtHostExtensionServiceShape {
608608
}
609609

610610
// Require the test runner via node require from the provided path
611-
let testRunner: ITestRunner;
612-
let requireError: Error;
611+
let testRunner: ITestRunner | undefined;
612+
let requireError: Error | undefined;
613613
try {
614614
testRunner = <any>require.__$__nodeRequire(this._initData.environment.extensionTestsPath);
615615
} catch (error) {
@@ -619,7 +619,7 @@ export class ExtHostExtensionService implements ExtHostExtensionServiceShape {
619619
// Execute the runner if it follows our spec
620620
if (testRunner && typeof testRunner.run === 'function') {
621621
return new Promise<void>((c, e) => {
622-
testRunner.run(this._initData.environment.extensionTestsPath, (error, failures) => {
622+
testRunner!.run(this._initData.environment.extensionTestsPath, (error, failures) => {
623623
if (error) {
624624
e(error.toString());
625625
} else {

src/vs/workbench/api/node/extHostLanguageFeatures.ts

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -499,7 +499,7 @@ class RenameAdapter {
499499
private readonly _provider: vscode.RenameProvider
500500
) { }
501501

502-
provideRenameEdits(resource: URI, position: IPosition, newName: string, token: CancellationToken): Promise<WorkspaceEditDto> {
502+
provideRenameEdits(resource: URI, position: IPosition, newName: string, token: CancellationToken): Promise<WorkspaceEditDto | undefined> {
503503

504504
let doc = this._documents.getDocumentData(resource).document;
505505
let pos = typeConvert.Position.to(position);
@@ -520,7 +520,7 @@ class RenameAdapter {
520520
});
521521
}
522522

523-
resolveRenameLocation(resource: URI, position: IPosition, token: CancellationToken): Promise<modes.RenameLocation & modes.Rejection> {
523+
resolveRenameLocation(resource: URI, position: IPosition, token: CancellationToken): Promise<(modes.RenameLocation & modes.Rejection) | undefined> {
524524
if (typeof this._provider.prepareRename !== 'function') {
525525
return Promise.resolve(undefined);
526526
}
@@ -530,7 +530,7 @@ class RenameAdapter {
530530

531531
return asPromise(() => this._provider.prepareRename(doc, pos, token)).then(rangeOrLocation => {
532532

533-
let range: vscode.Range;
533+
let range: vscode.Range | undefined;
534534
let text: string;
535535
if (Range.isRange(rangeOrLocation)) {
536536
range = rangeOrLocation;
@@ -670,7 +670,7 @@ class SuggestAdapter {
670670
this._cache.delete(id);
671671
}
672672

673-
private _convertCompletionItem(item: vscode.CompletionItem, position: vscode.Position, defaultRange: vscode.Range, _id: number, _parentId: number): SuggestionDto {
673+
private _convertCompletionItem(item: vscode.CompletionItem, position: vscode.Position, defaultRange: vscode.Range, _id: number, _parentId: number): SuggestionDto | undefined {
674674
if (typeof item.label !== 'string' || item.label.length === 0) {
675675
console.warn('INVALID text edit -> must have at least a label');
676676
return undefined;
@@ -930,7 +930,7 @@ export class ExtHostLanguageFeatures implements ExtHostLanguageFeaturesShape {
930930

931931
private static _handlePool: number = 0;
932932

933-
private readonly _schemeTransformer: ISchemeTransformer;
933+
private readonly _schemeTransformer: ISchemeTransformer | null;
934934
private _proxy: MainThreadLanguageFeaturesShape;
935935
private _documents: ExtHostDocuments;
936936
private _commands: ExtHostCommands;
@@ -941,7 +941,7 @@ export class ExtHostLanguageFeatures implements ExtHostLanguageFeaturesShape {
941941

942942
constructor(
943943
mainContext: IMainContext,
944-
schemeTransformer: ISchemeTransformer,
944+
schemeTransformer: ISchemeTransformer | null,
945945
documents: ExtHostDocuments,
946946
commands: ExtHostCommands,
947947
heapMonitor: ExtHostHeapService,

src/vs/workbench/api/node/extHostLanguages.ts

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -24,9 +24,10 @@ export class ExtHostLanguages {
2424
return this._proxy.$getLanguages();
2525
}
2626

27-
changeLanguage(uri: vscode.Uri, languageId: string): Promise<vscode.TextDocument> {
27+
changeLanguage(uri: vscode.Uri, languageId: string): Promise<vscode.TextDocument | undefined> {
2828
return this._proxy.$changeLanguage(uri, languageId).then(() => {
29-
return this._documents.getDocumentData(uri).document;
29+
const data = this._documents.getDocumentData(uri);
30+
return data ? data.document : undefined;
3031
});
3132
}
3233
}

src/vs/workbench/api/node/extHostProgress.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -27,11 +27,11 @@ export class ExtHostProgress implements ExtHostProgressShape {
2727
const { title, location, cancellable } = options;
2828
const source = localize('extensionSource', "{0} (Extension)", extension.displayName || extension.name);
2929
this._proxy.$startProgress(handle, { location: ProgressLocation.from(location), title, source, cancellable });
30-
return this._withProgress(handle, task, cancellable);
30+
return this._withProgress(handle, task, !!cancellable);
3131
}
3232

3333
private _withProgress<R>(handle: number, task: (progress: Progress<IProgressStep>, token: CancellationToken) => Thenable<R>, cancellable: boolean): Thenable<R> {
34-
let source: CancellationTokenSource;
34+
let source: CancellationTokenSource | undefined;
3535
if (cancellable) {
3636
source = new CancellationTokenSource();
3737
this._mapHandleToCancellationSource.set(handle, source);
@@ -48,7 +48,7 @@ export class ExtHostProgress implements ExtHostProgressShape {
4848
let p: Thenable<R>;
4949

5050
try {
51-
p = task(new ProgressCallback(this._proxy, handle), cancellable ? source.token : CancellationToken.None);
51+
p = task(new ProgressCallback(this._proxy, handle), cancellable && source ? source.token : CancellationToken.None);
5252
} catch (err) {
5353
progressEnd(handle);
5454
throw err;

src/vs/workbench/api/node/extHostSearch.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -35,12 +35,12 @@ export class ExtHostSearch implements ExtHostSearchShape {
3535
private _handlePool: number = 0;
3636

3737
private _internalFileSearchHandle: number;
38-
private _internalFileSearchProvider: SearchService;
38+
private _internalFileSearchProvider: SearchService | null;
3939

4040
private _fileSearchManager: FileSearchManager;
4141
private _fileIndexSearchManager: FileIndexSearchManager;
4242

43-
constructor(mainContext: IMainContext, private _schemeTransformer: ISchemeTransformer, private _logService: ILogService, private _extfs = extfs) {
43+
constructor(mainContext: IMainContext, private _schemeTransformer: ISchemeTransformer | null, private _logService: ILogService, private _extfs = extfs) {
4444
this._proxy = mainContext.getProxy(MainContext.MainThreadSearch);
4545
this._fileSearchManager = new FileSearchManager();
4646
this._fileIndexSearchManager = new FileIndexSearchManager();

0 commit comments

Comments
 (0)