Skip to content

Commit f9687fc

Browse files
committed
Strict null work on extHostLanguageFeatures
1 parent f1afe72 commit f9687fc

11 files changed

Lines changed: 106 additions & 90 deletions

src/vs/base/common/types.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,7 @@ export function isStringArray(value: any): value is string[] {
4949
* @returns whether the provided parameter is of type `object` but **not**
5050
* `null`, an `array`, a `regexp`, nor a `date`.
5151
*/
52-
export function isObject(obj: any): boolean {
52+
export function isObject(obj: any): obj is Object {
5353
// The method can't do a type cast since there are type (like strings) which
5454
// are subclasses of any put not positvely matched by the function. Hence type
5555
// narrowing results in wrong results.

src/vs/vscode.d.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2019,7 +2019,7 @@ declare module 'vscode' {
20192019
/**
20202020
* String value of the kind, e.g. `"refactor.extract.function"`.
20212021
*/
2022-
readonly value?: string;
2022+
readonly value: string;
20232023

20242024
/**
20252025
* Create a new kind by appending a more specific selector to the current kind.

src/vs/workbench/api/electron-browser/mainThreadLanguageFeatures.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -111,15 +111,15 @@ export class MainThreadLanguageFeatures implements MainThreadLanguageFeaturesSha
111111
$registerDocumentSymbolProvider(handle: number, selector: ISerializedDocumentFilter[], displayName: string): void {
112112
this._registrations[handle] = modes.DocumentSymbolProviderRegistry.register(typeConverters.LanguageSelector.from(selector), <modes.DocumentSymbolProvider>{
113113
displayName,
114-
provideDocumentSymbols: (model: ITextModel, token: CancellationToken): Promise<modes.DocumentSymbol[]> => {
114+
provideDocumentSymbols: (model: ITextModel, token: CancellationToken): Promise<modes.DocumentSymbol[] | undefined> => {
115115
return this._proxy.$provideDocumentSymbols(handle, model.uri, token);
116116
}
117117
});
118118
}
119119

120120
// --- code lens
121121

122-
$registerCodeLensSupport(handle: number, selector: ISerializedDocumentFilter[], eventHandle: number): void {
122+
$registerCodeLensSupport(handle: number, selector: ISerializedDocumentFilter[], eventHandle: number | undefined): void {
123123

124124
const provider = <modes.CodeLensProvider>{
125125
provideCodeLenses: (model: ITextModel, token: CancellationToken): modes.ICodeLensSymbol[] | Promise<modes.ICodeLensSymbol[]> => {

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

Lines changed: 15 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -298,7 +298,7 @@ export interface ISerializedSignatureHelpProviderMetadata {
298298
export interface MainThreadLanguageFeaturesShape extends IDisposable {
299299
$unregister(handle: number): void;
300300
$registerDocumentSymbolProvider(handle: number, selector: ISerializedDocumentFilter[], label: string): void;
301-
$registerCodeLensSupport(handle: number, selector: ISerializedDocumentFilter[], eventHandle: number): void;
301+
$registerCodeLensSupport(handle: number, selector: ISerializedDocumentFilter[], eventHandle: number | undefined): void;
302302
$emitCodeLensEvent(eventHandle: number, event?: any): void;
303303
$registerDefinitionSupport(handle: number, selector: ISerializedDocumentFilter[]): void;
304304
$registerDeclarationSupport(handle: number, selector: ISerializedDocumentFilter[]): void;
@@ -893,31 +893,31 @@ export interface CodeLensDto extends ObjectIdentifier {
893893
}
894894

895895
export interface ExtHostLanguageFeaturesShape {
896-
$provideDocumentSymbols(handle: number, resource: UriComponents, token: CancellationToken): Promise<modes.DocumentSymbol[]>;
896+
$provideDocumentSymbols(handle: number, resource: UriComponents, token: CancellationToken): Promise<modes.DocumentSymbol[] | undefined>;
897897
$provideCodeLenses(handle: number, resource: UriComponents, token: CancellationToken): Promise<CodeLensDto[]>;
898898
$resolveCodeLens(handle: number, resource: UriComponents, symbol: CodeLensDto, token: CancellationToken): Promise<CodeLensDto>;
899899
$provideDefinition(handle: number, resource: UriComponents, position: IPosition, token: CancellationToken): Promise<DefinitionLinkDto[]>;
900900
$provideDeclaration(handle: number, resource: UriComponents, position: IPosition, token: CancellationToken): Promise<DefinitionLinkDto[]>;
901901
$provideImplementation(handle: number, resource: UriComponents, position: IPosition, token: CancellationToken): Promise<DefinitionLinkDto[]>;
902902
$provideTypeDefinition(handle: number, resource: UriComponents, position: IPosition, token: CancellationToken): Promise<DefinitionLinkDto[]>;
903-
$provideHover(handle: number, resource: UriComponents, position: IPosition, token: CancellationToken): Promise<modes.Hover>;
904-
$provideDocumentHighlights(handle: number, resource: UriComponents, position: IPosition, token: CancellationToken): Promise<modes.DocumentHighlight[]>;
905-
$provideReferences(handle: number, resource: UriComponents, position: IPosition, context: modes.ReferenceContext, token: CancellationToken): Promise<LocationDto[]>;
906-
$provideCodeActions(handle: number, resource: UriComponents, rangeOrSelection: IRange | ISelection, context: modes.CodeActionContext, token: CancellationToken): Promise<CodeActionDto[]>;
907-
$provideDocumentFormattingEdits(handle: number, resource: UriComponents, options: modes.FormattingOptions, token: CancellationToken): Promise<ISingleEditOperation[]>;
908-
$provideDocumentRangeFormattingEdits(handle: number, resource: UriComponents, range: IRange, options: modes.FormattingOptions, token: CancellationToken): Promise<ISingleEditOperation[]>;
909-
$provideOnTypeFormattingEdits(handle: number, resource: UriComponents, position: IPosition, ch: string, options: modes.FormattingOptions, token: CancellationToken): Promise<ISingleEditOperation[]>;
903+
$provideHover(handle: number, resource: UriComponents, position: IPosition, token: CancellationToken): Promise<modes.Hover | undefined>;
904+
$provideDocumentHighlights(handle: number, resource: UriComponents, position: IPosition, token: CancellationToken): Promise<modes.DocumentHighlight[] | undefined>;
905+
$provideReferences(handle: number, resource: UriComponents, position: IPosition, context: modes.ReferenceContext, token: CancellationToken): Promise<LocationDto[] | undefined>;
906+
$provideCodeActions(handle: number, resource: UriComponents, rangeOrSelection: IRange | ISelection, context: modes.CodeActionContext, token: CancellationToken): Promise<CodeActionDto[] | undefined>;
907+
$provideDocumentFormattingEdits(handle: number, resource: UriComponents, options: modes.FormattingOptions, token: CancellationToken): Promise<ISingleEditOperation[] | undefined>;
908+
$provideDocumentRangeFormattingEdits(handle: number, resource: UriComponents, range: IRange, options: modes.FormattingOptions, token: CancellationToken): Promise<ISingleEditOperation[] | undefined>;
909+
$provideOnTypeFormattingEdits(handle: number, resource: UriComponents, position: IPosition, ch: string, options: modes.FormattingOptions, token: CancellationToken): Promise<ISingleEditOperation[] | undefined>;
910910
$provideWorkspaceSymbols(handle: number, search: string, token: CancellationToken): Promise<WorkspaceSymbolsDto>;
911-
$resolveWorkspaceSymbol(handle: number, symbol: WorkspaceSymbolDto, token: CancellationToken): Promise<WorkspaceSymbolDto>;
911+
$resolveWorkspaceSymbol(handle: number, symbol: WorkspaceSymbolDto, token: CancellationToken): Promise<WorkspaceSymbolDto | undefined>;
912912
$releaseWorkspaceSymbols(handle: number, id: number): void;
913-
$provideRenameEdits(handle: number, resource: UriComponents, position: IPosition, newName: string, token: CancellationToken): Promise<WorkspaceEditDto>;
914-
$resolveRenameLocation(handle: number, resource: UriComponents, position: IPosition, token: CancellationToken): Promise<modes.RenameLocation>;
913+
$provideRenameEdits(handle: number, resource: UriComponents, position: IPosition, newName: string, token: CancellationToken): Promise<WorkspaceEditDto | undefined>;
914+
$resolveRenameLocation(handle: number, resource: UriComponents, position: IPosition, token: CancellationToken): Promise<modes.RenameLocation | undefined>;
915915
$provideCompletionItems(handle: number, resource: UriComponents, position: IPosition, context: modes.CompletionContext, token: CancellationToken): Promise<SuggestResultDto>;
916916
$resolveCompletionItem(handle: number, resource: UriComponents, position: IPosition, suggestion: modes.CompletionItem, token: CancellationToken): Promise<modes.CompletionItem>;
917917
$releaseCompletionItems(handle: number, id: number): void;
918-
$provideSignatureHelp(handle: number, resource: UriComponents, position: IPosition, context: modes.SignatureHelpContext, token: CancellationToken): Promise<modes.SignatureHelp>;
919-
$provideDocumentLinks(handle: number, resource: UriComponents, token: CancellationToken): Promise<LinkDto[]>;
920-
$resolveDocumentLink(handle: number, link: LinkDto, token: CancellationToken): Promise<LinkDto>;
918+
$provideSignatureHelp(handle: number, resource: UriComponents, position: IPosition, context: modes.SignatureHelpContext, token: CancellationToken): Promise<modes.SignatureHelp | undefined>;
919+
$provideDocumentLinks(handle: number, resource: UriComponents, token: CancellationToken): Promise<LinkDto[] | undefined>;
920+
$resolveDocumentLink(handle: number, link: LinkDto, token: CancellationToken): Promise<LinkDto | undefined>;
921921
$provideDocumentColors(handle: number, resource: UriComponents, token: CancellationToken): Promise<IRawColorInfo[]>;
922922
$provideColorPresentations(handle: number, resource: UriComponents, colorInfo: IRawColorInfo, token: CancellationToken): Promise<modes.IColorPresentation[]>;
923923
$provideFoldingRanges(handle: number, resource: UriComponents, context: modes.FoldingContext, token: CancellationToken): Promise<modes.FoldingRange[]>;

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

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -138,7 +138,11 @@ export class ExtHostCommands implements ExtHostCommandsShape {
138138
}
139139

140140
private _executeContributedCommand<T>(id: string, args: any[]): Promise<T> {
141-
let { callback, thisArg, description } = this._commands.get(id);
141+
const command = this._commands.get(id);
142+
if (!command) {
143+
throw new Error('Unknown command');
144+
}
145+
let { callback, thisArg, description } = command;
142146
if (description) {
143147
for (let i = 0; i < description.args.length; i++) {
144148
try {
@@ -207,7 +211,7 @@ export class CommandsConverter {
207211
this._commands.registerCommand(true, this._delegatingCommandId, this._executeConvertedCommand, this);
208212
}
209213

210-
toInternal(command: vscode.Command): CommandDto {
214+
toInternal(command: vscode.Command | undefined): CommandDto | undefined {
211215

212216
if (!command) {
213217
return undefined;
@@ -237,7 +241,7 @@ export class CommandsConverter {
237241
return result;
238242
}
239243

240-
fromInternal(command: modes.Command): vscode.Command {
244+
fromInternal(command: modes.Command | undefined): vscode.Command | undefined {
241245

242246
if (!command) {
243247
return undefined;
@@ -258,7 +262,7 @@ export class CommandsConverter {
258262

259263
private _executeConvertedCommand<R>(...args: any[]): Promise<R> {
260264
const actualCmd = this._heap.get<vscode.Command>(args[0]);
261-
return this._commands.executeCommand(actualCmd.command, ...actualCmd.arguments);
265+
return this._commands.executeCommand(actualCmd.command, ...(actualCmd.arguments || []));
262266
}
263267

264268
}

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ import { EndOfLine, Position, Range } from 'vs/workbench/api/node/extHostTypes';
1414
import * as vscode from 'vscode';
1515

1616
const _modeId2WordDefinition = new Map<string, RegExp>();
17-
export function setWordDefinitionFor(modeId: string, wordDefinition: RegExp): void {
17+
export function setWordDefinitionFor(modeId: string, wordDefinition: RegExp | undefined): void {
1818
_modeId2WordDefinition.set(modeId, wordDefinition);
1919
}
2020
export function getWordDefinitionFor(modeId: string): RegExp | undefined {

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -151,7 +151,7 @@ export class ExtHostDocuments implements ExtHostDocumentsShape {
151151
});
152152
}
153153

154-
public setWordDefinitionFor(modeId: string, wordDefinition: RegExp): void {
154+
public setWordDefinitionFor(modeId: string, wordDefinition: RegExp | undefined): void {
155155
setWordDefinitionFor(modeId, wordDefinition);
156156
}
157157
}

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

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,9 @@ export class ExtHostDocumentsAndEditors implements ExtHostDocumentsAndEditorsSha
5252
const id = uri.toString();
5353
const data = this._documents.get(id);
5454
this._documents.delete(id);
55-
removedDocuments.push(data);
55+
if (data) {
56+
removedDocuments.push(data);
57+
}
5658
}
5759
}
5860

@@ -79,7 +81,9 @@ export class ExtHostDocumentsAndEditors implements ExtHostDocumentsAndEditorsSha
7981
for (const id of delta.removedEditors) {
8082
const editor = this._editors.get(id);
8183
this._editors.delete(id);
82-
removedEditors.push(editor);
84+
if (editor) {
85+
removedEditors.push(editor);
86+
}
8387
}
8488
}
8589

0 commit comments

Comments
 (0)