diff --git a/src/vs/base/browser/dom.ts b/src/vs/base/browser/dom.ts index 249a479504b..a72e8e0ea85 100644 --- a/src/vs/base/browser/dom.ts +++ b/src/vs/base/browser/dom.ts @@ -15,7 +15,6 @@ import { KeyCode } from 'vs/base/common/keyCodes'; import { Disposable, DisposableStore, IDisposable, toDisposable } from 'vs/base/common/lifecycle'; import { FileAccess, RemoteAuthorities, Schemas } from 'vs/base/common/network'; import * as platform from 'vs/base/common/platform'; -import { withNullAsUndefined } from 'vs/base/common/types'; import { URI } from 'vs/base/common/uri'; export function clearNode(node: HTMLElement): void { @@ -1284,7 +1283,7 @@ export function triggerUpload(): Promise { // Resolve once the input event has fired once event.Event.once(event.Event.fromDOMEventEmitter(input, 'input'))(() => { - resolve(withNullAsUndefined(input.files)); + resolve(input.files ?? undefined); }); input.click(); diff --git a/src/vs/base/browser/ui/menu/menubar.ts b/src/vs/base/browser/ui/menu/menubar.ts index fe7586f0d56..061003dbc9a 100644 --- a/src/vs/base/browser/ui/menu/menubar.ts +++ b/src/vs/base/browser/ui/menu/menubar.ts @@ -20,7 +20,6 @@ import { ResolvedKeybinding } from 'vs/base/common/keybindings'; import { Disposable, dispose, IDisposable } from 'vs/base/common/lifecycle'; import { isMacintosh } from 'vs/base/common/platform'; import * as strings from 'vs/base/common/strings'; -import { withNullAsUndefined } from 'vs/base/common/types'; import 'vs/css!./menubar'; import * as nls from 'vs/nls'; @@ -1020,7 +1019,7 @@ export class MenuBar extends Disposable { getKeyBinding: this.options.getKeybinding, actionRunner: this.actionRunner, enableMnemonics: this.options.alwaysOnMnemonics || (this.mnemonicsInUse && this.options.enableMnemonics), - ariaLabel: withNullAsUndefined(customMenu.buttonElement.getAttribute('aria-label')), + ariaLabel: customMenu.buttonElement.getAttribute('aria-label') ?? undefined, expandDirection: this.isCompact ? this.options.compactMode : Direction.Right, useEventAsContext: true }; diff --git a/src/vs/base/browser/ui/toolbar/toolbar.ts b/src/vs/base/browser/ui/toolbar/toolbar.ts index 85936d72ce6..c91d4ee1b07 100644 --- a/src/vs/base/browser/ui/toolbar/toolbar.ts +++ b/src/vs/base/browser/ui/toolbar/toolbar.ts @@ -13,7 +13,6 @@ import { ThemeIcon } from 'vs/base/common/themables'; import { EventMultiplexer } from 'vs/base/common/event'; import { ResolvedKeybinding } from 'vs/base/common/keybindings'; import { Disposable, DisposableStore } from 'vs/base/common/lifecycle'; -import { withNullAsUndefined } from 'vs/base/common/types'; import 'vs/css!./toolbar'; import * as nls from 'vs/nls'; @@ -196,7 +195,7 @@ export class ToolBar extends Disposable { private getKeybindingLabel(action: IAction): string | undefined { const key = this.lookupKeybindings ? this.options.getKeyBinding?.(action) : undefined; - return withNullAsUndefined(key?.getLabel()); + return key?.getLabel() ?? undefined; } private clear(): void { diff --git a/src/vs/base/common/types.ts b/src/vs/base/common/types.ts index cd17ebe8775..d35246667bc 100644 --- a/src/vs/base/common/types.ts +++ b/src/vs/base/common/types.ts @@ -190,14 +190,6 @@ export function validateConstraint(arg: unknown, constraint: TypeConstraint | un } } -/** - * Converts null to undefined, passes all other values through. - */ -export function withNullAsUndefined(x: T | null): T | undefined { - return x === null ? undefined : x; -} - - type AddFirstParameterToFunction = T extends (...args: any[]) => TargetFunctionsReturnType ? // Function: add param to function (firstArg: FirstParameter, ...args: Parameters) => ReturnType : diff --git a/src/vs/base/parts/contextmenu/electron-main/contextmenu.ts b/src/vs/base/parts/contextmenu/electron-main/contextmenu.ts index 6b2eb1cb820..40b3d5c46d3 100644 --- a/src/vs/base/parts/contextmenu/electron-main/contextmenu.ts +++ b/src/vs/base/parts/contextmenu/electron-main/contextmenu.ts @@ -5,7 +5,6 @@ import { BrowserWindow, IpcMainEvent, Menu, MenuItem } from 'electron'; import { validatedIpcMain } from 'vs/base/parts/ipc/electron-main/ipcMain'; -import { withNullAsUndefined } from 'vs/base/common/types'; import { CONTEXT_MENU_CHANNEL, CONTEXT_MENU_CLOSE_CHANNEL, IPopupOptions, ISerializableContextMenuItem } from 'vs/base/parts/contextmenu/common/contextmenu'; export function registerContextMenuListener(): void { @@ -13,7 +12,7 @@ export function registerContextMenuListener(): void { const menu = createMenu(event, onClickChannel, items); menu.popup({ - window: withNullAsUndefined(BrowserWindow.fromWebContents(event.sender)), + window: BrowserWindow.fromWebContents(event.sender) ?? undefined, x: options ? options.x : undefined, y: options ? options.y : undefined, positioningItem: options ? options.positioningItem : undefined, diff --git a/src/vs/code/electron-main/auth.ts b/src/vs/code/electron-main/auth.ts index 6a18eba4eb5..9e6793fd489 100644 --- a/src/vs/code/electron-main/auth.ts +++ b/src/vs/code/electron-main/auth.ts @@ -8,7 +8,6 @@ import { CancellationToken } from 'vs/base/common/cancellation'; import { Event } from 'vs/base/common/event'; import { hash } from 'vs/base/common/hash'; import { Disposable } from 'vs/base/common/lifecycle'; -import { withNullAsUndefined } from 'vs/base/common/types'; import { generateUuid } from 'vs/base/common/uuid'; import { ICredentialsMainService } from 'vs/platform/credentials/common/credentials'; import { IEncryptionMainService } from 'vs/platform/encryption/common/encryptionService'; @@ -153,7 +152,7 @@ export class ProxyAuthHandler extends Disposable { let encryptedSerializedProxyCredentials = this.applicationStorageMainService.get(this.PROXY_CREDENTIALS_SERVICE_KEY + authInfoHash, StorageScope.APPLICATION); let decryptedSerializedProxyCredentials: string | undefined; if (!encryptedSerializedProxyCredentials) { - encryptedSerializedProxyCredentials = withNullAsUndefined(await this.credentialsService.getPassword(this.OLD_PROXY_CREDENTIALS_SERVICE_KEY, authInfoHash)); + encryptedSerializedProxyCredentials = await this.credentialsService.getPassword(this.OLD_PROXY_CREDENTIALS_SERVICE_KEY, authInfoHash) ?? undefined; if (encryptedSerializedProxyCredentials) { // re-encrypt to force new encryption algorithm to apply decryptedSerializedProxyCredentials = await this.encryptionMainService.decrypt(encryptedSerializedProxyCredentials); diff --git a/src/vs/editor/browser/editorExtensions.ts b/src/vs/editor/browser/editorExtensions.ts index 779468acc0a..75562c53821 100644 --- a/src/vs/editor/browser/editorExtensions.ts +++ b/src/vs/editor/browser/editorExtensions.ts @@ -19,7 +19,7 @@ import { ServicesAccessor as InstantiationServicesAccessor, BrandedService, IIns import { IKeybindings, KeybindingsRegistry, KeybindingWeight } from 'vs/platform/keybinding/common/keybindingsRegistry'; import { Registry } from 'vs/platform/registry/common/platform'; import { ITelemetryService } from 'vs/platform/telemetry/common/telemetry'; -import { withNullAsUndefined, assertType } from 'vs/base/common/types'; +import { assertType } from 'vs/base/common/types'; import { ThemeIcon } from 'vs/base/common/themables'; import { IDisposable } from 'vs/base/common/lifecycle'; import { KeyMod, KeyCode } from 'vs/base/common/keyCodes'; @@ -307,7 +307,7 @@ export abstract class EditorCommand extends Command { return editor.invokeWithinContext((editorAccessor) => { const kbService = editorAccessor.get(IContextKeyService); - if (!kbService.contextMatchesRules(withNullAsUndefined(precondition))) { + if (!kbService.contextMatchesRules(precondition ?? undefined)) { // precondition does not hold return; } @@ -460,7 +460,7 @@ export abstract class EditorAction2 extends Action2 { return editor.invokeWithinContext((editorAccessor) => { const kbService = editorAccessor.get(IContextKeyService); const logService = editorAccessor.get(ILogService); - const enabled = kbService.contextMatchesRules(withNullAsUndefined(this.desc.precondition)); + const enabled = kbService.contextMatchesRules(this.desc.precondition ?? undefined); if (!enabled) { logService.debug(`[EditorAction2] NOT running command because its precondition is FALSE`, this.desc.id, this.desc.precondition?.serialize()); return; diff --git a/src/vs/editor/browser/widget/codeEditorWidget.ts b/src/vs/editor/browser/widget/codeEditorWidget.ts index f6389bf5410..a6f59231e39 100644 --- a/src/vs/editor/browser/widget/codeEditorWidget.ts +++ b/src/vs/editor/browser/widget/codeEditorWidget.ts @@ -48,7 +48,6 @@ import { ServiceCollection } from 'vs/platform/instantiation/common/serviceColle import { INotificationService, Severity } from 'vs/platform/notification/common/notification'; import { IThemeService, registerThemingParticipant } from 'vs/platform/theme/common/themeService'; import { IAccessibilityService } from 'vs/platform/accessibility/common/accessibility'; -import { withNullAsUndefined } from 'vs/base/common/types'; import { MonospaceLineBreaksComputerFactory } from 'vs/editor/common/viewModel/monospaceLineBreaksComputer'; import { DOMLineBreaksComputerFactory } from 'vs/editor/browser/view/domLineBreaksComputer'; import { WordOperations } from 'vs/editor/common/cursor/cursorWordOperations'; @@ -345,7 +344,7 @@ export class CodeEditorWidget extends Disposable implements editorBrowser.ICodeE action.id, action.label, action.alias, - withNullAsUndefined(action.precondition), + action.precondition ?? undefined, (): Promise => { return this._instantiationService.invokeFunction((accessor) => { return Promise.resolve(action.runEditorCommand(accessor, this, null)); diff --git a/src/vs/editor/contrib/codeAction/browser/lightBulbWidget.ts b/src/vs/editor/contrib/codeAction/browser/lightBulbWidget.ts index 948e4d7d6bb..035c456ac5a 100644 --- a/src/vs/editor/contrib/codeAction/browser/lightBulbWidget.ts +++ b/src/vs/editor/contrib/codeAction/browser/lightBulbWidget.ts @@ -9,7 +9,6 @@ import { Codicon } from 'vs/base/common/codicons'; import { Emitter, Event } from 'vs/base/common/event'; import { Disposable } from 'vs/base/common/lifecycle'; import { ThemeIcon } from 'vs/base/common/themables'; -import { withNullAsUndefined } from 'vs/base/common/types'; import 'vs/css!./lightBulbWidget'; import { ContentWidgetPositionPreference, ICodeEditor, IContentWidget, IContentWidgetPosition } from 'vs/editor/browser/editorBrowser'; import { EditorOption } from 'vs/editor/common/config/editorOptions'; @@ -122,8 +121,8 @@ export class LightBulbWidget extends Disposable implements IContentWidget { })); this._register(Event.runAndSubscribe(keybindingService.onDidUpdateKeybindings, () => { - this._preferredKbLabel = withNullAsUndefined(keybindingService.lookupKeybinding(autoFixCommandId)?.getLabel()); - this._quickFixKbLabel = withNullAsUndefined(keybindingService.lookupKeybinding(quickFixCommandId)?.getLabel()); + this._preferredKbLabel = keybindingService.lookupKeybinding(autoFixCommandId)?.getLabel() ?? undefined; + this._quickFixKbLabel = keybindingService.lookupKeybinding(quickFixCommandId)?.getLabel() ?? undefined; this._updateLightBulbTitleAndIcon(); })); diff --git a/src/vs/editor/contrib/gotoSymbol/browser/link/goToDefinitionAtPosition.ts b/src/vs/editor/contrib/gotoSymbol/browser/link/goToDefinitionAtPosition.ts index a71163b6deb..f5a08f94c1e 100644 --- a/src/vs/editor/contrib/gotoSymbol/browser/link/goToDefinitionAtPosition.ts +++ b/src/vs/editor/contrib/gotoSymbol/browser/link/goToDefinitionAtPosition.ts @@ -9,7 +9,6 @@ import { CancellationToken } from 'vs/base/common/cancellation'; import { onUnexpectedError } from 'vs/base/common/errors'; import { MarkdownString } from 'vs/base/common/htmlContent'; import { DisposableStore } from 'vs/base/common/lifecycle'; -import { withNullAsUndefined } from 'vs/base/common/types'; import 'vs/css!./goToDefinitionAtPosition'; import { CodeEditorStateFlag, EditorState } from 'vs/editor/contrib/editorState/browser/editorState'; import { ICodeEditor, MouseTargetType } from 'vs/editor/browser/editorBrowser'; @@ -58,7 +57,7 @@ export class GotoDefinitionAtPositionEditorContribution implements IEditorContri this.toUnhook.add(linkGesture); this.toUnhook.add(linkGesture.onMouseMoveOrRelevantKeyDown(([mouseEvent, keyboardEvent]) => { - this.startFindDefinitionFromMouse(mouseEvent, withNullAsUndefined(keyboardEvent)); + this.startFindDefinitionFromMouse(mouseEvent, keyboardEvent ?? undefined); })); this.toUnhook.add(linkGesture.onExecute((mouseEvent: ClickLinkMouseEvent) => { diff --git a/src/vs/editor/contrib/quickAccess/browser/editorNavigationQuickAccess.ts b/src/vs/editor/contrib/quickAccess/browser/editorNavigationQuickAccess.ts index 4336914a3ce..d4082fc5a27 100644 --- a/src/vs/editor/contrib/quickAccess/browser/editorNavigationQuickAccess.ts +++ b/src/vs/editor/contrib/quickAccess/browser/editorNavigationQuickAccess.ts @@ -7,7 +7,6 @@ import { CancellationToken } from 'vs/base/common/cancellation'; import { Event } from 'vs/base/common/event'; import { once } from 'vs/base/common/functional'; import { DisposableStore, IDisposable, MutableDisposable, toDisposable } from 'vs/base/common/lifecycle'; -import { withNullAsUndefined } from 'vs/base/common/types'; import { getCodeEditor, isDiffEditor } from 'vs/editor/browser/editorBrowser'; import { IRange } from 'vs/editor/common/core/range'; import { IDiffEditor, IEditor, ScrollType } from 'vs/editor/common/editorCommon'; @@ -95,9 +94,9 @@ export abstract class AbstractEditorNavigationQuickAccessProvider implements IQu // changes even later because it could be that the user has // configured quick access to remain open when focus is lost and // we always want to restore the current location. - let lastKnownEditorViewState = withNullAsUndefined(editor.saveViewState()); + let lastKnownEditorViewState = editor.saveViewState() ?? undefined; disposables.add(codeEditor.onDidChangeCursorPosition(() => { - lastKnownEditorViewState = withNullAsUndefined(editor.saveViewState()); + lastKnownEditorViewState = editor.saveViewState() ?? undefined; })); context.restoreViewState = () => { diff --git a/src/vs/editor/contrib/snippet/browser/snippetSession.ts b/src/vs/editor/contrib/snippet/browser/snippetSession.ts index 78b6a87e8b2..80a9959f475 100644 --- a/src/vs/editor/contrib/snippet/browser/snippetSession.ts +++ b/src/vs/editor/contrib/snippet/browser/snippetSession.ts @@ -7,7 +7,6 @@ import { groupBy } from 'vs/base/common/arrays'; import { CharCode } from 'vs/base/common/charCode'; import { dispose } from 'vs/base/common/lifecycle'; import { getLeadingWhitespace } from 'vs/base/common/strings'; -import { withNullAsUndefined } from 'vs/base/common/types'; import 'vs/css!./snippetSession'; import { IActiveCodeEditor } from 'vs/editor/browser/editorBrowser'; import { EditorOption } from 'vs/editor/common/config/editorOptions'; @@ -346,7 +345,7 @@ export class OneSnippet { let result: Range | undefined; const model = this._editor.getModel(); for (const decorationId of this._placeholderDecorations!.values()) { - const placeholderRange = withNullAsUndefined(model.getDecorationRange(decorationId)); + const placeholderRange = model.getDecorationRange(decorationId) ?? undefined; if (!result) { result = placeholderRange; } else { diff --git a/src/vs/editor/standalone/browser/quickAccess/standaloneCommandsQuickAccess.ts b/src/vs/editor/standalone/browser/quickAccess/standaloneCommandsQuickAccess.ts index 5e87aa8f710..171a395e6f3 100644 --- a/src/vs/editor/standalone/browser/quickAccess/standaloneCommandsQuickAccess.ts +++ b/src/vs/editor/standalone/browser/quickAccess/standaloneCommandsQuickAccess.ts @@ -10,7 +10,6 @@ import { ICommandQuickPick } from 'vs/platform/quickinput/browser/commandsQuickA import { ICodeEditorService } from 'vs/editor/browser/services/codeEditorService'; import { AbstractEditorCommandsQuickAccessProvider } from 'vs/editor/contrib/quickAccess/browser/commandsQuickAccess'; import { IEditor } from 'vs/editor/common/editorCommon'; -import { withNullAsUndefined } from 'vs/base/common/types'; import { IInstantiationService, ServicesAccessor } from 'vs/platform/instantiation/common/instantiation'; import { IKeybindingService } from 'vs/platform/keybinding/common/keybinding'; import { ICommandService } from 'vs/platform/commands/common/commands'; @@ -24,7 +23,7 @@ import { IQuickInputService } from 'vs/platform/quickinput/common/quickInput'; export class StandaloneCommandsQuickAccessProvider extends AbstractEditorCommandsQuickAccessProvider { - protected get activeTextEditorControl(): IEditor | undefined { return withNullAsUndefined(this.codeEditorService.getFocusedCodeEditor()); } + protected get activeTextEditorControl(): IEditor | undefined { return this.codeEditorService.getFocusedCodeEditor() ?? undefined; } constructor( @IInstantiationService instantiationService: IInstantiationService, diff --git a/src/vs/editor/standalone/browser/quickAccess/standaloneGotoLineQuickAccess.ts b/src/vs/editor/standalone/browser/quickAccess/standaloneGotoLineQuickAccess.ts index 71cfc2ec4ba..c6ccecf960c 100644 --- a/src/vs/editor/standalone/browser/quickAccess/standaloneGotoLineQuickAccess.ts +++ b/src/vs/editor/standalone/browser/quickAccess/standaloneGotoLineQuickAccess.ts @@ -7,7 +7,6 @@ import { AbstractGotoLineQuickAccessProvider } from 'vs/editor/contrib/quickAcce import { Registry } from 'vs/platform/registry/common/platform'; import { IQuickAccessRegistry, Extensions } from 'vs/platform/quickinput/common/quickAccess'; import { ICodeEditorService } from 'vs/editor/browser/services/codeEditorService'; -import { withNullAsUndefined } from 'vs/base/common/types'; import { GoToLineNLS } from 'vs/editor/common/standaloneStrings'; import { Event } from 'vs/base/common/event'; import { EditorAction, registerEditorAction, ServicesAccessor } from 'vs/editor/browser/editorExtensions'; @@ -25,7 +24,7 @@ export class StandaloneGotoLineQuickAccessProvider extends AbstractGotoLineQuick } protected get activeTextEditorControl() { - return withNullAsUndefined(this.editorService.getFocusedCodeEditor()); + return this.editorService.getFocusedCodeEditor() ?? undefined; } } diff --git a/src/vs/editor/standalone/browser/quickAccess/standaloneGotoSymbolQuickAccess.ts b/src/vs/editor/standalone/browser/quickAccess/standaloneGotoSymbolQuickAccess.ts index d7bf0d94002..0c2cfb8617b 100644 --- a/src/vs/editor/standalone/browser/quickAccess/standaloneGotoSymbolQuickAccess.ts +++ b/src/vs/editor/standalone/browser/quickAccess/standaloneGotoSymbolQuickAccess.ts @@ -9,7 +9,6 @@ import { AbstractGotoSymbolQuickAccessProvider } from 'vs/editor/contrib/quickAc import { Registry } from 'vs/platform/registry/common/platform'; import { IQuickAccessRegistry, Extensions } from 'vs/platform/quickinput/common/quickAccess'; import { ICodeEditorService } from 'vs/editor/browser/services/codeEditorService'; -import { withNullAsUndefined } from 'vs/base/common/types'; import { QuickOutlineNLS } from 'vs/editor/common/standaloneStrings'; import { Event } from 'vs/base/common/event'; import { EditorAction, registerEditorAction } from 'vs/editor/browser/editorExtensions'; @@ -34,7 +33,7 @@ export class StandaloneGotoSymbolQuickAccessProvider extends AbstractGotoSymbolQ } protected get activeTextEditorControl() { - return withNullAsUndefined(this.editorService.getFocusedCodeEditor()); + return this.editorService.getFocusedCodeEditor() ?? undefined; } } diff --git a/src/vs/platform/dialogs/electron-main/dialogMainService.ts b/src/vs/platform/dialogs/electron-main/dialogMainService.ts index d2b346a5e38..666829d56be 100644 --- a/src/vs/platform/dialogs/electron-main/dialogMainService.ts +++ b/src/vs/platform/dialogs/electron-main/dialogMainService.ts @@ -10,7 +10,6 @@ import { mnemonicButtonLabel } from 'vs/base/common/labels'; import { Disposable, dispose, IDisposable, toDisposable } from 'vs/base/common/lifecycle'; import { normalizeNFC } from 'vs/base/common/normalization'; import { isMacintosh } from 'vs/base/common/platform'; -import { withNullAsUndefined } from 'vs/base/common/types'; import { Promises } from 'vs/base/node/pfs'; import { localize } from 'vs/nls'; import { INativeOpenDialogOptions, massageMessageBoxOptions } from 'vs/platform/dialogs/common/dialogs'; @@ -106,7 +105,7 @@ export class DialogMainService implements IDialogMainService { } // Show Dialog - const result = await this.showOpenDialog(dialogOptions, withNullAsUndefined(window || BrowserWindow.getFocusedWindow())); + const result = await this.showOpenDialog(dialogOptions, (window || BrowserWindow.getFocusedWindow()) ?? undefined); if (result && result.filePaths && result.filePaths.length > 0) { return result.filePaths; } diff --git a/src/vs/platform/dnd/browser/dnd.ts b/src/vs/platform/dnd/browser/dnd.ts index 04d024b9675..2046ddb1143 100644 --- a/src/vs/platform/dnd/browser/dnd.ts +++ b/src/vs/platform/dnd/browser/dnd.ts @@ -12,7 +12,6 @@ import { ResourceMap } from 'vs/base/common/map'; import { parse } from 'vs/base/common/marshalling'; import { Schemas } from 'vs/base/common/network'; import { isWeb } from 'vs/base/common/platform'; -import { withNullAsUndefined } from 'vs/base/common/types'; import { URI } from 'vs/base/common/uri'; import { localize } from 'vs/nls'; import { IDialogService } from 'vs/platform/dialogs/common/dialogs'; @@ -269,7 +268,7 @@ export async function extractFileListData(accessor: ServicesAccessor, files: Fil reader.onload = async event => { const name = file.name; - const loadResult = withNullAsUndefined(event.target?.result); + const loadResult = event.target?.result ?? undefined; if (typeof name !== 'string' || typeof loadResult === 'undefined') { result.complete(undefined); return; diff --git a/src/vs/platform/issue/electron-main/issueMainService.ts b/src/vs/platform/issue/electron-main/issueMainService.ts index dec29f8884c..14372990060 100644 --- a/src/vs/platform/issue/electron-main/issueMainService.ts +++ b/src/vs/platform/issue/electron-main/issueMainService.ts @@ -24,7 +24,6 @@ import { IIPCObjectUrl, IProtocolMainService } from 'vs/platform/protocol/electr import { zoomLevelToZoomFactor } from 'vs/platform/window/common/window'; import { IWindowState } from 'vs/platform/window/electron-main/window'; import { randomPath } from 'vs/base/common/extpath'; -import { withNullAsUndefined } from 'vs/base/common/types'; import { IStateService } from 'vs/platform/state/node/state'; import { UtilityProcess } from 'vs/platform/utilityProcess/electron-main/utilityProcess'; import { CancellationTokenSource } from 'vs/base/common/cancellation'; @@ -286,7 +285,7 @@ export class IssueMainService implements IIssueMainService { message: localize('trace.message', "Successfully created the trace file"), detail: localize('trace.detail', "Please create an issue and manually attach the following file:\n{0}", path), buttons: [localize({ key: 'trace.ok', comment: ['&& denotes a mnemonic'] }, "&&OK")], - }, withNullAsUndefined(BrowserWindow.getFocusedWindow())); + }, BrowserWindow.getFocusedWindow() ?? undefined); // Show item in explorer this.nativeHostMainService.showItemInFolder(undefined, path); diff --git a/src/vs/platform/quickinput/browser/commandsQuickAccess.ts b/src/vs/platform/quickinput/browser/commandsQuickAccess.ts index 97a5cb2ce5b..49e70c41c70 100644 --- a/src/vs/platform/quickinput/browser/commandsQuickAccess.ts +++ b/src/vs/platform/quickinput/browser/commandsQuickAccess.ts @@ -10,7 +10,6 @@ import { isCancellationError } from 'vs/base/common/errors'; import { matchesContiguousSubString, matchesPrefix, matchesWords, or } from 'vs/base/common/filters'; import { Disposable, DisposableStore, IDisposable } from 'vs/base/common/lifecycle'; import { LRUCache } from 'vs/base/common/map'; -import { withNullAsUndefined } from 'vs/base/common/types'; import { localize } from 'vs/nls'; import { ICommandService } from 'vs/platform/commands/common/commands'; import { IConfigurationChangeEvent, IConfigurationService } from 'vs/platform/configuration/common/configuration'; @@ -69,8 +68,8 @@ export abstract class AbstractCommandsQuickAccessProvider extends PickerQuickAcc // Filter const filteredCommandPicks: ICommandQuickPick[] = []; for (const commandPick of allCommandPicks) { - const labelHighlights = withNullAsUndefined(AbstractCommandsQuickAccessProvider.WORD_FILTER(filter, commandPick.label)); - const aliasHighlights = commandPick.commandAlias ? withNullAsUndefined(AbstractCommandsQuickAccessProvider.WORD_FILTER(filter, commandPick.commandAlias)) : undefined; + const labelHighlights = AbstractCommandsQuickAccessProvider.WORD_FILTER(filter, commandPick.label) ?? undefined; + const aliasHighlights = commandPick.commandAlias ? AbstractCommandsQuickAccessProvider.WORD_FILTER(filter, commandPick.commandAlias) ?? undefined : undefined; // Add if matching in label or alias if (labelHighlights || aliasHighlights) { diff --git a/src/vs/platform/quickinput/browser/quickInput.ts b/src/vs/platform/quickinput/browser/quickInput.ts index 621bed2b3e2..bede230413b 100644 --- a/src/vs/platform/quickinput/browser/quickInput.ts +++ b/src/vs/platform/quickinput/browser/quickInput.ts @@ -27,7 +27,7 @@ import { Disposable, DisposableStore, dispose } from 'vs/base/common/lifecycle'; import { isIOS } from 'vs/base/common/platform'; import Severity from 'vs/base/common/severity'; import { ThemeIcon } from 'vs/base/common/themables'; -import { isString, withNullAsUndefined } from 'vs/base/common/types'; +import { isString } from 'vs/base/common/types'; import 'vs/css!./media/quickInput'; import { localize } from 'vs/nls'; import { ILayoutService } from 'vs/platform/layout/browser/layoutService'; @@ -1807,7 +1807,7 @@ export class QuickInputController extends Disposable { if (!focusChanged) { let currentElement = this.previousFocusElement; while (currentElement && !currentElement.offsetParent) { - currentElement = withNullAsUndefined(currentElement.parentElement); + currentElement = currentElement.parentElement ?? undefined; } if (currentElement?.offsetParent) { currentElement.focus(); diff --git a/src/vs/platform/quickinput/browser/quickInputList.ts b/src/vs/platform/quickinput/browser/quickInputList.ts index 643864da673..650219bb460 100644 --- a/src/vs/platform/quickinput/browser/quickInputList.ts +++ b/src/vs/platform/quickinput/browser/quickInputList.ts @@ -27,7 +27,6 @@ import { KeyCode } from 'vs/base/common/keyCodes'; import { DisposableStore, dispose, IDisposable } from 'vs/base/common/lifecycle'; import * as platform from 'vs/base/common/platform'; import { ltrim } from 'vs/base/common/strings'; -import { withNullAsUndefined } from 'vs/base/common/types'; import 'vs/css!./media/quickInput'; import { localize } from 'vs/nls'; import { IQuickInputOptions } from 'vs/platform/quickinput/browser/quickInput'; @@ -291,7 +290,7 @@ class ListElementRenderer implements IListRenderer { let labelHighlights: IMatch[] | undefined; if (this.matchOnLabelMode === 'fuzzy') { - labelHighlights = this.matchOnLabel ? withNullAsUndefined(matchesFuzzyIconAware(query, parseLabelWithIcons(element.saneLabel))) : undefined; + labelHighlights = this.matchOnLabel ? matchesFuzzyIconAware(query, parseLabelWithIcons(element.saneLabel)) ?? undefined : undefined; } else { - labelHighlights = this.matchOnLabel ? withNullAsUndefined(matchesContiguousIconAware(queryWithWhitespace, parseLabelWithIcons(element.saneLabel))) : undefined; + labelHighlights = this.matchOnLabel ? matchesContiguousIconAware(queryWithWhitespace, parseLabelWithIcons(element.saneLabel)) ?? undefined : undefined; } - const descriptionHighlights = this.matchOnDescription ? withNullAsUndefined(matchesFuzzyIconAware(query, parseLabelWithIcons(element.saneDescription || ''))) : undefined; - const detailHighlights = this.matchOnDetail ? withNullAsUndefined(matchesFuzzyIconAware(query, parseLabelWithIcons(element.saneDetail || ''))) : undefined; + const descriptionHighlights = this.matchOnDescription ? matchesFuzzyIconAware(query, parseLabelWithIcons(element.saneDescription || '')) ?? undefined : undefined; + const detailHighlights = this.matchOnDetail ? matchesFuzzyIconAware(query, parseLabelWithIcons(element.saneDetail || '')) ?? undefined : undefined; if (labelHighlights || descriptionHighlights || detailHighlights) { element.labelHighlights = labelHighlights; diff --git a/src/vs/platform/windows/electron-main/windowsMainService.ts b/src/vs/platform/windows/electron-main/windowsMainService.ts index 57d429c0f47..022a20e4ee0 100644 --- a/src/vs/platform/windows/electron-main/windowsMainService.ts +++ b/src/vs/platform/windows/electron-main/windowsMainService.ts @@ -21,7 +21,7 @@ import { getMarks, mark } from 'vs/base/common/performance'; import { IProcessEnvironment, isMacintosh, isWindows, OS } from 'vs/base/common/platform'; import { cwd } from 'vs/base/common/process'; import { extUriBiasedIgnorePathCase, isEqualAuthority, normalizePath, originalFSPath, removeTrailingPathSeparator } from 'vs/base/common/resources'; -import { assertIsDefined, withNullAsUndefined } from 'vs/base/common/types'; +import { assertIsDefined } from 'vs/base/common/types'; import { URI } from 'vs/base/common/uri'; import { localize } from 'vs/nls'; import { IBackupMainService } from 'vs/platform/backup/electron-main/backup'; @@ -799,7 +799,7 @@ export class WindowsMainService extends Disposable implements IWindowsMainServic detail: uri.scheme === Schemas.file ? localize('pathNotExistDetail', "The path '{0}' does not exist on this computer.", getPathLabel(uri, { os: OS, tildify: this.environmentMainService })) : localize('uriInvalidDetail', "The URI '{0}' is not valid and can not be opened.", uri.toString(true)) - }, withNullAsUndefined(BrowserWindow.getFocusedWindow())); + }, BrowserWindow.getFocusedWindow() ?? undefined); return undefined; })); diff --git a/src/vs/platform/workspaces/electron-main/workspacesManagementMainService.ts b/src/vs/platform/workspaces/electron-main/workspacesManagementMainService.ts index 39579b873fa..34913c5ffc5 100644 --- a/src/vs/platform/workspaces/electron-main/workspacesManagementMainService.ts +++ b/src/vs/platform/workspaces/electron-main/workspacesManagementMainService.ts @@ -10,7 +10,6 @@ import { Disposable } from 'vs/base/common/lifecycle'; import { Schemas } from 'vs/base/common/network'; import { dirname, join } from 'vs/base/common/path'; import { basename, extUriBiasedIgnorePathCase, joinPath, originalFSPath } from 'vs/base/common/resources'; -import { withNullAsUndefined } from 'vs/base/common/types'; import { URI } from 'vs/base/common/uri'; import { Promises } from 'vs/base/node/pfs'; import { localize } from 'vs/nls'; @@ -281,7 +280,7 @@ export class WorkspacesManagementMainService extends Disposable implements IWork buttons: [localize({ key: 'ok', comment: ['&& denotes a mnemonic'] }, "&&OK")], message: localize('workspaceOpenedMessage', "Unable to save workspace '{0}'", basename(workspacePath)), detail: localize('workspaceOpenedDetail', "The workspace is already opened in another window. Please close that window first and then try again.") - }, withNullAsUndefined(BrowserWindow.getFocusedWindow())); + }, BrowserWindow.getFocusedWindow() ?? undefined); return false; } diff --git a/src/vs/server/node/remoteTerminalChannel.ts b/src/vs/server/node/remoteTerminalChannel.ts index 0918a4855a2..3b08dc6bbd9 100644 --- a/src/vs/server/node/remoteTerminalChannel.ts +++ b/src/vs/server/node/remoteTerminalChannel.ts @@ -30,7 +30,6 @@ import { IServerEnvironmentService } from 'vs/server/node/serverEnvironmentServi import { IProductService } from 'vs/platform/product/common/productService'; import { IExtensionManagementService } from 'vs/platform/extensionManagement/common/extensionManagement'; import { IConfigurationService } from 'vs/platform/configuration/common/configuration'; -import { withNullAsUndefined } from 'vs/base/common/types'; import { ILogService } from 'vs/platform/log/common/log'; class CustomVariableResolver extends AbstractVariableResolverService { @@ -242,7 +241,7 @@ export class RemoteTerminalChannel extends Disposable implements IServerChannel< } const envVariableCollections = new Map(entries); const mergedCollection = new MergedEnvironmentVariableCollection(envVariableCollections); - const workspaceFolder = activeWorkspaceFolder ? withNullAsUndefined(activeWorkspaceFolder) : undefined; + const workspaceFolder = activeWorkspaceFolder ? activeWorkspaceFolder ?? undefined : undefined; await mergedCollection.applyToProcessEnvironment(env, { workspaceFolder }, variableResolver); } diff --git a/src/vs/workbench/api/browser/mainThreadEditor.ts b/src/vs/workbench/api/browser/mainThreadEditor.ts index 05b1a4921c9..449791c204b 100644 --- a/src/vs/workbench/api/browser/mainThreadEditor.ts +++ b/src/vs/workbench/api/browser/mainThreadEditor.ts @@ -16,7 +16,6 @@ import { IModelService } from 'vs/editor/common/services/model'; import { SnippetController2 } from 'vs/editor/contrib/snippet/browser/snippetController2'; import { IApplyEditsOptions, IEditorPropertiesChangeData, IResolvedTextEditorConfiguration, ITextEditorConfigurationUpdate, IUndoStopOptions, TextEditorRevealType } from 'vs/workbench/api/common/extHost.protocol'; import { IEditorPane } from 'vs/workbench/common/editor'; -import { withNullAsUndefined } from 'vs/base/common/types'; import { equals } from 'vs/base/common/arrays'; import { CodeEditorStateFlag, EditorState } from 'vs/editor/contrib/editorState/browser/editorState'; import { IClipboardService } from 'vs/platform/clipboard/common/clipboardService'; @@ -110,7 +109,7 @@ export class MainThreadTextEditorProperties { if (!oldProps || !MainThreadTextEditorProperties._selectionsEqual(oldProps.selections, this.selections)) { delta.selections = { selections: this.selections, - source: withNullAsUndefined(selectionChangeSource) + source: selectionChangeSource ?? undefined, }; } diff --git a/src/vs/workbench/api/browser/mainThreadTask.ts b/src/vs/workbench/api/browser/mainThreadTask.ts index 18163ed9261..8db946cea29 100644 --- a/src/vs/workbench/api/browser/mainThreadTask.ts +++ b/src/vs/workbench/api/browser/mainThreadTask.ts @@ -284,7 +284,7 @@ namespace TaskSourceDTO { scope = value.scope; } else { scope = TaskScope.Folder; - workspaceFolder = Types.withNullAsUndefined(workspace.getWorkspaceFolder(URI.revive(value.scope))); + workspaceFolder = workspace.getWorkspaceFolder(URI.revive(value.scope)) ?? undefined; } const result: IExtensionTaskSource = { kind: TaskSourceKind.Extension, diff --git a/src/vs/workbench/api/browser/mainThreadTerminalService.ts b/src/vs/workbench/api/browser/mainThreadTerminalService.ts index da519c2c911..daab5df909d 100644 --- a/src/vs/workbench/api/browser/mainThreadTerminalService.ts +++ b/src/vs/workbench/api/browser/mainThreadTerminalService.ts @@ -17,7 +17,6 @@ import { IEnvironmentVariableService } from 'vs/workbench/contrib/terminal/commo import { deserializeEnvironmentDescriptionMap, deserializeEnvironmentVariableCollection, serializeEnvironmentVariableCollection } from 'vs/platform/terminal/common/environmentVariableShared'; import { IStartExtensionTerminalRequest, ITerminalProcessExtHostProxy, ITerminalProfileResolverService, ITerminalProfileService } from 'vs/workbench/contrib/terminal/common/terminal'; import { IRemoteAgentService } from 'vs/workbench/services/remote/common/remoteAgentService'; -import { withNullAsUndefined } from 'vs/base/common/types'; import { OperatingSystem, OS } from 'vs/base/common/platform'; import { TerminalEditorLocationOptions } from 'vscode'; import { Promises } from 'vs/base/common/async'; @@ -121,7 +120,7 @@ export class MainThreadTerminalService implements MainThreadTerminalServiceShape } private async _updateDefaultProfile() { - const remoteAuthority = withNullAsUndefined(this._extHostContext.remoteAuthority); + const remoteAuthority = this._extHostContext.remoteAuthority ?? undefined; const defaultProfile = this._terminalProfileResolverService.getDefaultProfile({ remoteAuthority, os: this._os }); const defaultAutomationProfile = this._terminalProfileResolverService.getDefaultProfile({ remoteAuthority, os: this._os, allowAutomationShell: true }); this._proxy.$acceptDefaultProfile(...await Promise.all([defaultProfile, defaultAutomationProfile])); diff --git a/src/vs/workbench/api/browser/mainThreadWorkspace.ts b/src/vs/workbench/api/browser/mainThreadWorkspace.ts index 0c2b6f99b6a..8e97e6a954c 100644 --- a/src/vs/workbench/api/browser/mainThreadWorkspace.ts +++ b/src/vs/workbench/api/browser/mainThreadWorkspace.ts @@ -7,7 +7,6 @@ import { CancellationToken, CancellationTokenSource } from 'vs/base/common/cance import { isCancellationError } from 'vs/base/common/errors'; import { DisposableStore, IDisposable } from 'vs/base/common/lifecycle'; import { isNative } from 'vs/base/common/platform'; -import { withNullAsUndefined } from 'vs/base/common/types'; import { URI, UriComponents } from 'vs/base/common/uri'; import { localize } from 'vs/nls'; import { IEnvironmentService } from 'vs/platform/environment/common/environment'; @@ -148,11 +147,11 @@ export class MainThreadWorkspace implements MainThreadWorkspaceShape { const query = this._queryBuilder.file( includeFolder ? [includeFolder] : workspace.folders, { - maxResults: withNullAsUndefined(maxResults), + maxResults: maxResults ?? undefined, disregardExcludeSettings: (excludePatternOrDisregardExcludes === false) || undefined, disregardSearchExcludeSettings: true, disregardIgnoreFiles: true, - includePattern: withNullAsUndefined(includePattern), + includePattern: includePattern ?? undefined, excludePattern: typeof excludePatternOrDisregardExcludes === 'string' ? excludePatternOrDisregardExcludes : undefined, _reason: 'startFileSearch' }); diff --git a/src/vs/workbench/api/common/extHostChat.ts b/src/vs/workbench/api/common/extHostChat.ts index 6a4dd119dc9..df995d8fc23 100644 --- a/src/vs/workbench/api/common/extHostChat.ts +++ b/src/vs/workbench/api/common/extHostChat.ts @@ -9,7 +9,6 @@ import { Emitter } from 'vs/base/common/event'; import { Iterable } from 'vs/base/common/iterator'; import { toDisposable } from 'vs/base/common/lifecycle'; import { StopWatch } from 'vs/base/common/stopwatch'; -import { withNullAsUndefined } from 'vs/base/common/types'; import { localize } from 'vs/nls'; import { IRelaxedExtensionDescription } from 'vs/platform/extensions/common/extensions'; import { ILogService } from 'vs/platform/log/common/log'; @@ -318,6 +317,6 @@ export class ExtHostChat implements ExtHostChatShape { } const resolved = await entry.provider.resolveSlashCommand(command, token); - return withNullAsUndefined(resolved); + return resolved ?? undefined; } } diff --git a/src/vs/workbench/api/common/extHostComments.ts b/src/vs/workbench/api/common/extHostComments.ts index c44e10e1acc..c1208be0537 100644 --- a/src/vs/workbench/api/common/extHostComments.ts +++ b/src/vs/workbench/api/common/extHostComments.ts @@ -20,7 +20,6 @@ import type * as vscode from 'vscode'; import { ExtHostCommentsShape, IMainContext, MainContext, CommentThreadChanges, CommentChanges } from './extHost.protocol'; import { ExtHostCommands } from './extHostCommands'; import { checkProposedApiEnabled } from 'vs/workbench/services/extensions/common/extensions'; -import { withNullAsUndefined } from 'vs/base/common/types'; type ProviderHandle = number; @@ -207,7 +206,7 @@ export function createExtHostComments(mainContext: IMainContext, commands: ExtHo fileComments: rangesResult.fileComments || false }; } else { - ranges = withNullAsUndefined(rangesResult); + ranges = rangesResult ?? undefined; } return ranges; }).then(ranges => { diff --git a/src/vs/workbench/api/common/extHostDebugService.ts b/src/vs/workbench/api/common/extHostDebugService.ts index a9d439ecc47..8eacd6f83b2 100644 --- a/src/vs/workbench/api/common/extHostDebugService.ts +++ b/src/vs/workbench/api/common/extHostDebugService.ts @@ -6,7 +6,6 @@ import { asPromise } from 'vs/base/common/async'; import { CancellationToken } from 'vs/base/common/cancellation'; import { Emitter, Event } from 'vs/base/common/event'; -import { withNullAsUndefined } from 'vs/base/common/types'; import { URI, UriComponents } from 'vs/base/common/uri'; import { IExtensionDescription } from 'vs/platform/extensions/common/extensions'; import { createDecorator } from 'vs/platform/instantiation/common/instantiation'; @@ -475,9 +474,9 @@ export abstract class ExtHostDebugServiceBase implements IExtHostDebugService, E }); debugAdapter.onExit((code: number | null) => { if (tracker && tracker.onExit) { - tracker.onExit(withNullAsUndefined(code), undefined); + tracker.onExit(code ?? undefined, undefined); } - this._debugServiceProxy.$acceptDAExit(debugAdapterHandle, withNullAsUndefined(code), undefined); + this._debugServiceProxy.$acceptDAExit(debugAdapterHandle, code ?? undefined, undefined); }); if (tracker && tracker.onWillStartSession) { diff --git a/src/vs/workbench/api/common/extHostTerminalService.ts b/src/vs/workbench/api/common/extHostTerminalService.ts index 1f95913ee42..40fdcbb2c87 100644 --- a/src/vs/workbench/api/common/extHostTerminalService.ts +++ b/src/vs/workbench/api/common/extHostTerminalService.ts @@ -21,7 +21,6 @@ import { IEnvironmentVariableCollectionDescription, IEnvironmentVariableMutator, import { ICreateContributedTerminalProfileOptions, IProcessReadyEvent, IShellLaunchConfigDto, ITerminalChildProcess, ITerminalLaunchError, ITerminalProfile, TerminalIcon, TerminalLocation, IProcessProperty, ProcessPropertyType, IProcessPropertyMap } from 'vs/platform/terminal/common/terminal'; import { TerminalDataBufferer } from 'vs/platform/terminal/common/terminalDataBuffering'; import { ThemeColor } from 'vs/base/common/themables'; -import { withNullAsUndefined } from 'vs/base/common/types'; import { Promises } from 'vs/base/common/async'; import { EditorGroupColumn } from 'vs/workbench/services/editor/common/editorGroupColumn'; import { ViewColumn } from 'vs/workbench/api/common/extHostTypeConverters'; @@ -148,20 +147,20 @@ export class ExtHostTerminal { } await this._proxy.$createTerminal(this._id, { name: options.name, - shellPath: withNullAsUndefined(options.shellPath), - shellArgs: withNullAsUndefined(options.shellArgs), - cwd: withNullAsUndefined(options.cwd), - env: withNullAsUndefined(options.env), - icon: withNullAsUndefined(asTerminalIcon(options.iconPath)), + shellPath: options.shellPath ?? undefined, + shellArgs: options.shellArgs ?? undefined, + cwd: options.cwd ?? undefined, + env: options.env ?? undefined, + icon: asTerminalIcon(options.iconPath) ?? undefined, color: ThemeColor.isThemeColor(options.color) ? options.color.id : undefined, - initialText: withNullAsUndefined(options.message), - strictEnv: withNullAsUndefined(options.strictEnv), - hideFromUser: withNullAsUndefined(options.hideFromUser), - isFeatureTerminal: withNullAsUndefined(internalOptions?.isFeatureTerminal), + initialText: options.message ?? undefined, + strictEnv: options.strictEnv ?? undefined, + hideFromUser: options.hideFromUser ?? undefined, + isFeatureTerminal: internalOptions?.isFeatureTerminal ?? undefined, isExtensionOwnedTerminal: true, - useShellEnvironment: withNullAsUndefined(internalOptions?.useShellEnvironment), + useShellEnvironment: internalOptions?.useShellEnvironment ?? undefined, location: internalOptions?.location || this._serializeParentTerminal(options.location, internalOptions?.resolvedExtHostIdentifier), - isTransient: withNullAsUndefined(options.isTransient) + isTransient: options.isTransient ?? undefined, }); } diff --git a/src/vs/workbench/api/common/extHostTypeConverters.ts b/src/vs/workbench/api/common/extHostTypeConverters.ts index a4fa2e9340b..64b6623e79e 100644 --- a/src/vs/workbench/api/common/extHostTypeConverters.ts +++ b/src/vs/workbench/api/common/extHostTypeConverters.ts @@ -14,7 +14,7 @@ import { marked } from 'vs/base/common/marked/marked'; import { parse } from 'vs/base/common/marshalling'; import { Mimes } from 'vs/base/common/mime'; import { cloneAndChange } from 'vs/base/common/objects'; -import { isEmptyObject, isNumber, isString, isUndefinedOrNull, withNullAsUndefined } from 'vs/base/common/types'; +import { isEmptyObject, isNumber, isString, isUndefinedOrNull } from 'vs/base/common/types'; import { URI, UriComponents } from 'vs/base/common/uri'; import { IURITransformer } from 'vs/base/common/uriIpc'; import { RenderLineNumbersType } from 'vs/editor/common/config/editorOptions'; @@ -1717,12 +1717,12 @@ export namespace NotebookExclusiveDocumentPattern { export function from(pattern: { include: vscode.GlobPattern | undefined | null; exclude: vscode.GlobPattern | undefined } | vscode.GlobPattern | undefined): string | extHostProtocol.IRelativePatternDto | { include: string | extHostProtocol.IRelativePatternDto | undefined; exclude: string | extHostProtocol.IRelativePatternDto | undefined } | undefined { if (isExclusivePattern(pattern)) { return { - include: withNullAsUndefined(GlobPattern.from(pattern.include)), - exclude: withNullAsUndefined(GlobPattern.from(pattern.exclude)) + include: GlobPattern.from(pattern.include) ?? undefined, + exclude: GlobPattern.from(pattern.exclude) ?? undefined, }; } - return withNullAsUndefined(GlobPattern.from(pattern)); + return GlobPattern.from(pattern) ?? undefined; } export function to(pattern: string | extHostProtocol.IRelativePatternDto | { include: string | extHostProtocol.IRelativePatternDto; exclude: string | extHostProtocol.IRelativePatternDto }): { include: vscode.GlobPattern; exclude: vscode.GlobPattern } | vscode.GlobPattern { diff --git a/src/vs/workbench/api/test/browser/extHostLanguageFeatures.test.ts b/src/vs/workbench/api/test/browser/extHostLanguageFeatures.test.ts index c0f47b0bc85..dc5f1061385 100644 --- a/src/vs/workbench/api/test/browser/extHostLanguageFeatures.test.ts +++ b/src/vs/workbench/api/test/browser/extHostLanguageFeatures.test.ts @@ -45,7 +45,6 @@ import { provideSelectionRanges } from 'vs/editor/contrib/smartSelect/browser/sm import { mock } from 'vs/base/test/common/mock'; import { IEditorWorkerService } from 'vs/editor/common/services/editorWorker'; import { dispose } from 'vs/base/common/lifecycle'; -import { withNullAsUndefined } from 'vs/base/common/types'; import { NullApiDeprecationService } from 'vs/workbench/api/common/extHostApiDeprecationService'; import { Progress } from 'vs/platform/progress/common/progress'; import { IExtHostFileSystemInfo } from 'vs/workbench/api/common/extHostFileSystemInfo'; @@ -1051,7 +1050,7 @@ suite('ExtHostLanguageFeatures', function () { const NullWorkerService = new class extends mock() { override computeMoreMinimalEdits(resource: URI, edits: languages.TextEdit[] | null | undefined): Promise { - return Promise.resolve(withNullAsUndefined(edits)); + return Promise.resolve(edits ?? undefined); } }; diff --git a/src/vs/workbench/browser/parts/compositePart.ts b/src/vs/workbench/browser/parts/compositePart.ts index 742dcd68c79..de055f7b032 100644 --- a/src/vs/workbench/browser/parts/compositePart.ts +++ b/src/vs/workbench/browser/parts/compositePart.ts @@ -26,7 +26,7 @@ import { IThemeService } from 'vs/platform/theme/common/themeService'; import { INotificationService } from 'vs/platform/notification/common/notification'; import { Dimension, append, $, hide, show } from 'vs/base/browser/dom'; import { AnchorAlignment } from 'vs/base/browser/ui/contextview/contextview'; -import { assertIsDefined, withNullAsUndefined } from 'vs/base/common/types'; +import { assertIsDefined } from 'vs/base/common/types'; import { createActionViewItem } from 'vs/platform/actions/browser/menuEntryActionViewItem'; import { AbstractProgressScope, ScopedProgressIndicator } from 'vs/workbench/services/progress/browser/progressIndicator'; import { WorkbenchToolBar } from 'vs/platform/actions/browser/toolbar'; @@ -322,7 +322,7 @@ export abstract class CompositePart extends Part { const keybinding = this.keybindingService.lookupKeybinding(compositeId); - this.titleLabel.updateTitle(compositeId, compositeTitle, withNullAsUndefined(keybinding?.getLabel())); + this.titleLabel.updateTitle(compositeId, compositeTitle, keybinding?.getLabel() ?? undefined); const toolBar = assertIsDefined(this.toolBar); toolBar.setAriaLabel(localize('ariaCompositeToolbarLabel', "{0} actions", compositeTitle)); diff --git a/src/vs/workbench/browser/parts/editor/breadcrumbsModel.ts b/src/vs/workbench/browser/parts/editor/breadcrumbsModel.ts index 67668bd3093..c056eb29fb3 100644 --- a/src/vs/workbench/browser/parts/editor/breadcrumbsModel.ts +++ b/src/vs/workbench/browser/parts/editor/breadcrumbsModel.ts @@ -14,7 +14,6 @@ import { Schemas } from 'vs/base/common/network'; import { IConfigurationService } from 'vs/platform/configuration/common/configuration'; import { BreadcrumbsConfig } from 'vs/workbench/browser/parts/editor/breadcrumbs'; import { FileKind } from 'vs/platform/files/common/files'; -import { withNullAsUndefined } from 'vs/base/common/types'; import { IOutline, IOutlineService, OutlineTarget } from 'vs/workbench/services/outline/browser/outline'; import { IEditorPane } from 'vs/workbench/common/editor'; import { matchesSomeScheme } from 'vs/platform/opener/common/opener'; @@ -125,7 +124,7 @@ export class BreadcrumbsModel { } const info: FileInfo = { - folder: withNullAsUndefined(this._workspaceService.getWorkspaceFolder(uri)), + folder: this._workspaceService.getWorkspaceFolder(uri) ?? undefined, path: [] }; diff --git a/src/vs/workbench/browser/parts/editor/editorAutoSave.ts b/src/vs/workbench/browser/parts/editor/editorAutoSave.ts index c16023cc81a..1de67c853f8 100644 --- a/src/vs/workbench/browser/parts/editor/editorAutoSave.ts +++ b/src/vs/workbench/browser/parts/editor/editorAutoSave.ts @@ -11,7 +11,6 @@ import { SaveReason, IEditorIdentifier, GroupIdentifier, ISaveOptions, EditorInp import { EditorInput } from 'vs/workbench/common/editor/editorInput'; import { IEditorService } from 'vs/workbench/services/editor/common/editorService'; import { IEditorGroupsService } from 'vs/workbench/services/editor/common/editorGroupsService'; -import { withNullAsUndefined } from 'vs/base/common/types'; import { IWorkingCopyService } from 'vs/workbench/services/workingCopy/common/workingCopyService'; import { IWorkingCopy, WorkingCopyCapabilities } from 'vs/workbench/services/workingCopy/common/workingCopy'; import { ILogService } from 'vs/platform/log/common/log'; @@ -75,7 +74,7 @@ export class EditorAutoSave extends Disposable implements IWorkbenchContribution // Remember as last active const activeGroup = this.editorGroupService.activeGroup; - const activeEditor = this.lastActiveEditor = withNullAsUndefined(activeGroup.activeEditor); + const activeEditor = this.lastActiveEditor = activeGroup.activeEditor ?? undefined; this.lastActiveGroupId = activeGroup.id; // Dispose previous active control listeners diff --git a/src/vs/workbench/browser/parts/editor/editorCommands.ts b/src/vs/workbench/browser/parts/editor/editorCommands.ts index 1153276c44f..044bd29da9e 100644 --- a/src/vs/workbench/browser/parts/editor/editorCommands.ts +++ b/src/vs/workbench/browser/parts/editor/editorCommands.ts @@ -4,7 +4,7 @@ *--------------------------------------------------------------------------------------------*/ import { localize } from 'vs/nls'; -import { isObject, isString, isUndefined, isNumber, withNullAsUndefined } from 'vs/base/common/types'; +import { isObject, isString, isUndefined, isNumber } from 'vs/base/common/types'; import { IInstantiationService, ServicesAccessor } from 'vs/platform/instantiation/common/instantiation'; import { KeybindingsRegistry, KeybindingWeight } from 'vs/platform/keybinding/common/keybindingsRegistry'; import { IEditorIdentifier, IEditorCommandsContext, CloseDirection, IVisibleEditorPane, EditorsOrder, EditorInputCapabilities, isEditorIdentifier, isEditorInputWithOptionsAndGroup, IUntitledTextResourceEditorInput } from 'vs/workbench/common/editor'; @@ -749,7 +749,7 @@ export function splitEditor(editorGroupService: IEditorGroupsService, direction: if (context && typeof context.editorIndex === 'number') { editorToCopy = sourceGroup.getEditorByIndex(context.editorIndex); } else { - editorToCopy = withNullAsUndefined(sourceGroup.activeEditor); + editorToCopy = sourceGroup.activeEditor ?? undefined; } // Copy the editor to the new group, else create an empty group @@ -1461,7 +1461,7 @@ function resolveCommandsContext(editorGroupService: IEditorGroupsService, contex // Resolve from context let group = context && typeof context.groupId === 'number' ? editorGroupService.getGroup(context.groupId) : undefined; - let editor = group && context && typeof context.editorIndex === 'number' ? withNullAsUndefined(group.getEditorByIndex(context.editorIndex)) : undefined; + let editor = group && context && typeof context.editorIndex === 'number' ? group.getEditorByIndex(context.editorIndex) ?? undefined : undefined; // Fallback to active group as needed if (!group) { @@ -1470,7 +1470,7 @@ function resolveCommandsContext(editorGroupService: IEditorGroupsService, contex // Fallback to active editor as needed if (!editor) { - editor = withNullAsUndefined(group.activeEditor); + editor = group.activeEditor ?? undefined; } return { group, editor }; diff --git a/src/vs/workbench/browser/parts/editor/editorGroupView.ts b/src/vs/workbench/browser/parts/editor/editorGroupView.ts index 898bd528d24..c80fa632d3e 100644 --- a/src/vs/workbench/browser/parts/editor/editorGroupView.ts +++ b/src/vs/workbench/browser/parts/editor/editorGroupView.ts @@ -47,7 +47,6 @@ import { Schemas } from 'vs/base/common/network'; import { EditorActivation, IEditorOptions } from 'vs/platform/editor/common/editor'; import { IFileDialogService, ConfirmResult } from 'vs/platform/dialogs/common/dialogs'; import { IFilesConfigurationService, AutoSaveMode } from 'vs/workbench/services/filesConfiguration/common/filesConfigurationService'; -import { withNullAsUndefined } from 'vs/base/common/types'; import { URI } from 'vs/base/common/uri'; import { IUriIdentityService } from 'vs/platform/uriIdentity/common/uriIdentity'; import { isLinux, isMacintosh, isNative, isWindows } from 'vs/base/common/platform'; @@ -831,7 +830,7 @@ export class EditorGroupView extends Themable implements IEditorGroupView { } get activeEditorPane(): IVisibleEditorPane | undefined { - return this.editorPane ? withNullAsUndefined(this.editorPane.activeEditorPane) : undefined; + return this.editorPane ? this.editorPane.activeEditorPane ?? undefined : undefined; } get activeEditor(): EditorInput | null { @@ -1175,7 +1174,7 @@ export class EditorGroupView extends Themable implements IEditorGroupView { // Opening many editors at once can put any editor to be // the active one depending on options. As such, we simply // return the active editor pane after this operation. - return withNullAsUndefined(this.editorPane.activeEditorPane); + return this.editorPane.activeEditorPane ?? undefined; } //#endregion diff --git a/src/vs/workbench/browser/parts/editor/editorStatus.ts b/src/vs/workbench/browser/parts/editor/editorStatus.ts index 4b8a497d2b1..d18e4fc12f7 100644 --- a/src/vs/workbench/browser/parts/editor/editorStatus.ts +++ b/src/vs/workbench/browser/parts/editor/editorStatus.ts @@ -8,7 +8,7 @@ import { localize } from 'vs/nls'; import { runAtThisOrScheduleAtNextAnimationFrame } from 'vs/base/browser/dom'; import { format, compare, splitLines } from 'vs/base/common/strings'; import { extname, basename, isEqual } from 'vs/base/common/resources'; -import { areFunctions, assertIsDefined, withNullAsUndefined } from 'vs/base/common/types'; +import { areFunctions, assertIsDefined } from 'vs/base/common/types'; import { URI } from 'vs/base/common/uri'; import { Action } from 'vs/base/common/actions'; import { Language } from 'vs/base/common/platform'; @@ -579,7 +579,7 @@ export class EditorStatus extends Disposable implements IWorkbenchContribution { private updateStatusBar(): void { const activeInput = this.editorService.activeEditor; const activeEditorPane = this.editorService.activeEditorPane; - const activeCodeEditor = activeEditorPane ? withNullAsUndefined(getCodeEditor(activeEditorPane.getControl())) : undefined; + const activeCodeEditor = activeEditorPane ? getCodeEditor(activeEditorPane.getControl()) ?? undefined : undefined; // Update all states this.onColumnSelectionModeChange(activeCodeEditor); @@ -686,7 +686,7 @@ export class EditorStatus extends Disposable implements IWorkbenchContribution { const textModel = editorWidget.getModel(); if (textModel) { const languageId = textModel.getLanguageId(); - info.languageId = withNullAsUndefined(this.languageService.getLanguageName(languageId)); + info.languageId = this.languageService.getLanguageName(languageId) ?? undefined; } } @@ -817,7 +817,7 @@ export class EditorStatus extends Disposable implements IWorkbenchContribution { if (activeEditorPane) { const activeResource = EditorResourceAccessor.getCanonicalUri(activeEditorPane.input, { supportSideBySide: SideBySideEditor.PRIMARY }); if (activeResource && isEqual(activeResource, resource)) { - const activeCodeEditor = withNullAsUndefined(getCodeEditor(activeEditorPane.getControl())); + const activeCodeEditor = getCodeEditor(activeEditorPane.getControl()) ?? undefined; return this.onEncodingChange(activeEditorPane, activeCodeEditor); // only update if the encoding changed for the active resource } @@ -1036,7 +1036,7 @@ export class ChangeLanguageAction extends Action2 { let currentLanguageId: string | undefined; if (textModel) { currentLanguageId = textModel.getLanguageId(); - currentLanguageName = withNullAsUndefined(languageService.getLanguageName(currentLanguageId)); + currentLanguageName = languageService.getLanguageName(currentLanguageId) ?? undefined; } let hasLanguageSupport = !!resource; @@ -1128,7 +1128,7 @@ export class ChangeLanguageAction extends Action2 { const resource = EditorResourceAccessor.getOriginalUri(activeEditor, { supportSideBySide: SideBySideEditor.PRIMARY }); if (resource) { // Detect languages since we are in an untitled file - let languageId: string | undefined = withNullAsUndefined(languageService.guessLanguageIdByFilepathOrFirstLine(resource, textModel.getLineContent(1))); + let languageId: string | undefined = languageService.guessLanguageIdByFilepathOrFirstLine(resource, textModel.getLineContent(1)) ?? undefined; if (!languageId || languageId === 'unknown') { detectedLanguage = await languageDetectionService.detectLanguage(resource); languageId = detectedLanguage; @@ -1378,7 +1378,7 @@ export class ChangeEncodingAction extends Action2 { const isReopenWithEncoding = (action === reopenWithEncodingPick); - const configuredEncoding = textResourceConfigurationService.getValue(withNullAsUndefined(resource), 'files.encoding'); + const configuredEncoding = textResourceConfigurationService.getValue(resource ?? undefined, 'files.encoding'); let directMatchIndex: number | undefined; let aliasMatchIndex: number | undefined; diff --git a/src/vs/workbench/browser/parts/editor/noTabsTitleControl.ts b/src/vs/workbench/browser/parts/editor/noTabsTitleControl.ts index 202c93594de..d60267cd22f 100644 --- a/src/vs/workbench/browser/parts/editor/noTabsTitleControl.ts +++ b/src/vs/workbench/browser/parts/editor/noTabsTitleControl.ts @@ -13,7 +13,7 @@ import { EventType as TouchEventType, GestureEvent, Gesture } from 'vs/base/brow import { addDisposableListener, EventType, EventHelper, Dimension, isAncestor } from 'vs/base/browser/dom'; import { CLOSE_EDITOR_COMMAND_ID, UNLOCK_GROUP_COMMAND_ID } from 'vs/workbench/browser/parts/editor/editorCommands'; import { Color } from 'vs/base/common/color'; -import { withNullAsUndefined, assertIsDefined, assertAllDefined } from 'vs/base/common/types'; +import { assertIsDefined, assertAllDefined } from 'vs/base/common/types'; import { IEditorGroupTitleHeight } from 'vs/workbench/browser/parts/editor/editor'; import { equals } from 'vs/base/common/objects'; import { toDisposable } from 'vs/base/common/lifecycle'; @@ -245,7 +245,7 @@ export class NoTabsTitleControl extends TitleControl { } private redraw(): void { - const editor = withNullAsUndefined(this.group.activeEditor); + const editor = this.group.activeEditor ?? undefined; const options = this.accessor.partOptions; const isEditorPinned = editor ? this.group.isPinned(editor) : false; diff --git a/src/vs/workbench/browser/parts/editor/textCodeEditor.ts b/src/vs/workbench/browser/parts/editor/textCodeEditor.ts index 6bc581eee8f..3cd1a486281 100644 --- a/src/vs/workbench/browser/parts/editor/textCodeEditor.ts +++ b/src/vs/workbench/browser/parts/editor/textCodeEditor.ts @@ -5,7 +5,7 @@ import { localize } from 'vs/nls'; import { URI } from 'vs/base/common/uri'; -import { assertIsDefined, withNullAsUndefined } from 'vs/base/common/types'; +import { assertIsDefined } from 'vs/base/common/types'; import { ITextEditorPane } from 'vs/workbench/common/editor'; import { applyTextEditorOptions } from 'vs/workbench/common/editor/editorOptions'; import { IContextKeyService } from 'vs/platform/contextkey/common/contextkey'; @@ -77,7 +77,7 @@ export abstract class AbstractTextCodeEditor extends return undefined; // prevent saving view state for a model that is not the expected one } - return withNullAsUndefined(this.editorControl.saveViewState() as unknown as T); + return this.editorControl.saveViewState() as unknown as T ?? undefined; } override setOptions(options: ITextEditorOptions | undefined): void { diff --git a/src/vs/workbench/browser/parts/editor/textDiffEditor.ts b/src/vs/workbench/browser/parts/editor/textDiffEditor.ts index 784b56215fe..091111019e2 100644 --- a/src/vs/workbench/browser/parts/editor/textDiffEditor.ts +++ b/src/vs/workbench/browser/parts/editor/textDiffEditor.ts @@ -5,7 +5,7 @@ import { localize } from 'vs/nls'; import { deepClone } from 'vs/base/common/objects'; -import { isObject, assertIsDefined, withNullAsUndefined } from 'vs/base/common/types'; +import { isObject, assertIsDefined } from 'vs/base/common/types'; import { ICodeEditor, IDiffEditor } from 'vs/editor/browser/editorBrowser'; import { IDiffEditorOptions, IEditorOptions as ICodeEditorOptions } from 'vs/editor/common/config/editorOptions'; import { AbstractTextEditor, IEditorConfiguration } from 'vs/workbench/browser/parts/editor/textEditor'; @@ -399,7 +399,7 @@ export class TextDiffEditor extends AbstractTextEditor imp return undefined; // prevent saving view state for a model that is not the expected one } - return withNullAsUndefined(this.diffEditorControl.saveViewState()); + return this.diffEditorControl.saveViewState() ?? undefined; } protected override toEditorViewStateResource(modelOrInput: IDiffEditorModel | EditorInput): URI | undefined { diff --git a/src/vs/workbench/browser/parts/editor/textResourceEditor.ts b/src/vs/workbench/browser/parts/editor/textResourceEditor.ts index 6c88cf45b5f..2da5fb20fa3 100644 --- a/src/vs/workbench/browser/parts/editor/textResourceEditor.ts +++ b/src/vs/workbench/browser/parts/editor/textResourceEditor.ts @@ -3,7 +3,7 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { assertIsDefined, withNullAsUndefined } from 'vs/base/common/types'; +import { assertIsDefined } from 'vs/base/common/types'; import { ICodeEditor, IPasteEvent } from 'vs/editor/browser/editorBrowser'; import { IEditorOpenContext, isTextEditorViewState } from 'vs/workbench/common/editor'; import { EditorInput } from 'vs/workbench/common/editor/editorInput'; @@ -195,7 +195,7 @@ export class TextResourceEditor extends AbstractTextResourceEditor { // We can still try to guess a good languageId from the first line if // the paste changed the first line else { - const guess = withNullAsUndefined(this.languageService.guessLanguageIdByFilepathOrFirstLine(textModel.uri, textModel.getLineContent(1).substr(0, ModelConstants.FIRST_LINE_DETECTION_LENGTH_LIMIT))); + const guess = this.languageService.guessLanguageIdByFilepathOrFirstLine(textModel.uri, textModel.getLineContent(1).substr(0, ModelConstants.FIRST_LINE_DETECTION_LENGTH_LIMIT)) ?? undefined; if (guess) { candidateLanguage = { id: guess, source: 'guess' }; } diff --git a/src/vs/workbench/browser/parts/editor/titleControl.ts b/src/vs/workbench/browser/parts/editor/titleControl.ts index 0bfa78864d0..73a36af9470 100644 --- a/src/vs/workbench/browser/parts/editor/titleControl.ts +++ b/src/vs/workbench/browser/parts/editor/titleControl.ts @@ -33,7 +33,7 @@ import { EditorInput } from 'vs/workbench/common/editor/editorInput'; import { ResourceContextKey, ActiveEditorPinnedContext, ActiveEditorStickyContext, ActiveEditorGroupLockedContext, ActiveEditorCanSplitInGroupContext, SideBySideEditorActiveContext, ActiveEditorLastInGroupContext, ActiveEditorFirstInGroupContext, ActiveEditorAvailableEditorIdsContext, applyAvailableEditorIds } from 'vs/workbench/common/contextkeys'; import { AnchorAlignment } from 'vs/base/browser/ui/contextview/contextview'; import { IFileService } from 'vs/platform/files/common/files'; -import { withNullAsUndefined, assertIsDefined } from 'vs/base/common/types'; +import { assertIsDefined } from 'vs/base/common/types'; import { isFirefox } from 'vs/base/browser/browser'; import { isCancellationError } from 'vs/base/common/errors'; import { SideBySideEditorInput } from 'vs/workbench/common/editor/sideBySideEditorInput'; @@ -418,7 +418,7 @@ export abstract class TitleControl extends Themable { protected getKeybindingLabel(action: IAction): string | undefined { const keybinding = this.getKeybinding(action); - return keybinding ? withNullAsUndefined(keybinding.getLabel()) : undefined; + return keybinding ? keybinding.getLabel() ?? undefined : undefined; } abstract openEditor(editor: EditorInput): void; diff --git a/src/vs/workbench/browser/parts/titlebar/windowTitle.ts b/src/vs/workbench/browser/parts/titlebar/windowTitle.ts index bcfc971b2a4..4b5269d456e 100644 --- a/src/vs/workbench/browser/parts/titlebar/windowTitle.ts +++ b/src/vs/workbench/browser/parts/titlebar/windowTitle.ts @@ -22,7 +22,6 @@ import { Emitter } from 'vs/base/common/event'; import { RunOnceScheduler } from 'vs/base/common/async'; import { IProductService } from 'vs/platform/product/common/productService'; import { Schemas } from 'vs/base/common/network'; -import { withNullAsUndefined } from 'vs/base/common/types'; import { getVirtualWorkspaceLocation } from 'vs/platform/workspace/common/virtualWorkspace'; import { IUserDataProfileService } from 'vs/workbench/services/userDataProfile/common/userDataProfile'; @@ -205,7 +204,7 @@ export class WindowTitle extends Disposable { if (this.contextService.getWorkbenchState() === WorkbenchState.FOLDER) { folder = workspace.folders[0]; } else if (editorResource) { - folder = withNullAsUndefined(this.contextService.getWorkspaceFolder(editorResource)); + folder = this.contextService.getWorkspaceFolder(editorResource) ?? undefined; } // Compute remote diff --git a/src/vs/workbench/common/editor/diffEditorInput.ts b/src/vs/workbench/common/editor/diffEditorInput.ts index 03aa9873c02..76248f4429f 100644 --- a/src/vs/workbench/common/editor/diffEditorInput.ts +++ b/src/vs/workbench/common/editor/diffEditorInput.ts @@ -11,7 +11,6 @@ import { TEXT_DIFF_EDITOR_ID, BINARY_DIFF_EDITOR_ID, Verbosity, IEditorDescripto import { BaseTextEditorModel } from 'vs/workbench/common/editor/textEditorModel'; import { DiffEditorModel } from 'vs/workbench/common/editor/diffEditorModel'; import { TextDiffEditorModel } from 'vs/workbench/common/editor/textDiffEditorModel'; -import { withNullAsUndefined } from 'vs/base/common/types'; import { IInstantiationService } from 'vs/platform/instantiation/common/instantiation'; import { IEditorService } from 'vs/workbench/services/editor/common/editorService'; import { shorten } from 'vs/base/common/labels'; @@ -201,7 +200,7 @@ export class DiffEditorInput extends SideBySideEditorInput implements IDiffEdito } // Otherwise return normal diff model - return new DiffEditorModel(withNullAsUndefined(originalEditorModel), withNullAsUndefined(modifiedEditorModel)); + return new DiffEditorModel(originalEditorModel ?? undefined, modifiedEditorModel ?? undefined); } override toUntyped(options?: { preserveViewState: GroupIdentifier }): (IResourceDiffEditorInput & IResourceSideBySideEditorInput) | undefined { diff --git a/src/vs/workbench/contrib/chat/browser/actions/chatAccessibilityHelp.ts b/src/vs/workbench/contrib/chat/browser/actions/chatAccessibilityHelp.ts index 9fe45ef64a3..5c59b07b1c4 100644 --- a/src/vs/workbench/contrib/chat/browser/actions/chatAccessibilityHelp.ts +++ b/src/vs/workbench/contrib/chat/browser/actions/chatAccessibilityHelp.ts @@ -6,7 +6,6 @@ import { localize } from 'vs/nls'; import { format } from 'vs/base/common/strings'; import { IKeybindingService } from 'vs/platform/keybinding/common/keybinding'; -import { withNullAsUndefined } from 'vs/base/common/types'; import { ICodeEditor } from 'vs/editor/browser/editorBrowser'; import { ServicesAccessor } from 'vs/editor/browser/editorExtensions'; import { IChatWidgetService } from 'vs/workbench/contrib/chat/browser/chat'; @@ -65,7 +64,7 @@ export async function runAccessibilityHelpAction(accessor: ServicesAccessor, edi if (!inputEditor || !editorUri) { return; } - const domNode = withNullAsUndefined(inputEditor.getDomNode()); + const domNode = inputEditor.getDomNode() ?? undefined; if (!domNode) { return; } diff --git a/src/vs/workbench/contrib/chat/browser/chatListRenderer.ts b/src/vs/workbench/contrib/chat/browser/chatListRenderer.ts index 146af7fe6e5..ce72542854c 100644 --- a/src/vs/workbench/contrib/chat/browser/chatListRenderer.ts +++ b/src/vs/workbench/contrib/chat/browser/chatListRenderer.ts @@ -25,7 +25,6 @@ import { ResourceMap } from 'vs/base/common/map'; import { marked } from 'vs/base/common/marked/marked'; import { FileAccess } from 'vs/base/common/network'; import { ThemeIcon } from 'vs/base/common/themables'; -import { withNullAsUndefined } from 'vs/base/common/types'; import { URI } from 'vs/base/common/uri'; import { EditorExtensionsRegistry } from 'vs/editor/browser/editorExtensions'; import { CodeEditorWidget } from 'vs/editor/browser/widget/codeEditorWidget'; @@ -807,7 +806,7 @@ class CodeBlockPart extends Disposable implements IChatResultCodeBlockPart { const text = this.fixCodeText(data.text, data.languageId); this.setText(text); - const vscodeLanguageId = withNullAsUndefined(this.languageService.getLanguageIdByLanguageName(data.languageId)); + const vscodeLanguageId = this.languageService.getLanguageIdByLanguageName(data.languageId) ?? undefined; this.setLanguage(vscodeLanguageId); this.layout(width); diff --git a/src/vs/workbench/contrib/chat/browser/chatWidget.ts b/src/vs/workbench/contrib/chat/browser/chatWidget.ts index 24ca69d9d1c..c0a162bfdf1 100644 --- a/src/vs/workbench/contrib/chat/browser/chatWidget.ts +++ b/src/vs/workbench/contrib/chat/browser/chatWidget.ts @@ -10,7 +10,6 @@ import { CancellationToken } from 'vs/base/common/cancellation'; import { Emitter } from 'vs/base/common/event'; import { Disposable, DisposableStore, IDisposable, combinedDisposable, toDisposable } from 'vs/base/common/lifecycle'; import { isEqual } from 'vs/base/common/resources'; -import { withNullAsUndefined } from 'vs/base/common/types'; import { URI } from 'vs/base/common/uri'; import 'vs/css!./media/chat'; import { ICodeEditor } from 'vs/editor/browser/editorBrowser'; @@ -411,7 +410,7 @@ export class ChatWidget extends Disposable implements IChatWidget { } getFocus(): ChatTreeItem | undefined { - return withNullAsUndefined(this.tree.getFocus()[0]); + return this.tree.getFocus()[0] ?? undefined; } reveal(item: ChatTreeItem): void { diff --git a/src/vs/workbench/contrib/chat/common/chatServiceImpl.ts b/src/vs/workbench/contrib/chat/common/chatServiceImpl.ts index c7008c19e8a..9956ea633ca 100644 --- a/src/vs/workbench/contrib/chat/common/chatServiceImpl.ts +++ b/src/vs/workbench/contrib/chat/common/chatServiceImpl.ts @@ -11,7 +11,6 @@ import { Iterable } from 'vs/base/common/iterator'; import { Disposable, IDisposable, toDisposable } from 'vs/base/common/lifecycle'; import { revive } from 'vs/base/common/marshalling'; import { StopWatch } from 'vs/base/common/stopwatch'; -import { withNullAsUndefined } from 'vs/base/common/types'; import { URI, UriComponents } from 'vs/base/common/uri'; import { localize } from 'vs/nls'; import { CommandsRegistry } from 'vs/platform/commands/common/commands'; @@ -351,7 +350,7 @@ export class ChatService extends Disposable implements IChatService { let session: IChat | undefined; try { - session = withNullAsUndefined(await provider.prepareSession(model.providerState, token)); + session = await provider.prepareSession(model.providerState, token) ?? undefined; } catch (err) { this.trace('initializeSession', `Provider initializeSession threw: ${err}`); } @@ -362,7 +361,7 @@ export class ChatService extends Disposable implements IChatService { this.trace('startSession', `Provider returned session`); - const welcomeMessage = model.welcomeMessage ? undefined : withNullAsUndefined(await provider.provideWelcomeMessage?.(token)); + const welcomeMessage = model.welcomeMessage ? undefined : await provider.provideWelcomeMessage?.(token) ?? undefined; const welcomeModel = welcomeMessage && new ChatWelcomeMessageModel( model, welcomeMessage.map(item => typeof item === 'string' ? new MarkdownString(item) : item as IChatReplyFollowup[])); @@ -500,7 +499,7 @@ export class ChatService extends Disposable implements IChatService { // TODO refactor this or rethink the API https://github.com/microsoft/vscode-copilot/issues/593 if (provider.provideFollowups) { Promise.resolve(provider.provideFollowups(model.session!, CancellationToken.None)).then(followups => { - model.setFollowups(request, withNullAsUndefined(followups)); + model.setFollowups(request, followups ?? undefined); model.completeResponse(request); }); } else { @@ -568,12 +567,12 @@ export class ChatService extends Disposable implements IChatService { try { const slashCommands = (await providerResults).filter(c => !!c) as ISlashCommand[][]; - return withNullAsUndefined(slashCommands.flat()); + return slashCommands.flat() ?? undefined; } catch (e) { this.logService.error(e); // If one of the other contributed providers fails, return the main provider's result - return withNullAsUndefined(await mainProviderRequest); + return await mainProviderRequest ?? undefined; } } diff --git a/src/vs/workbench/contrib/comments/browser/commentThreadZoneWidget.ts b/src/vs/workbench/contrib/comments/browser/commentThreadZoneWidget.ts index 6301479ad72..1f00b285fa2 100644 --- a/src/vs/workbench/contrib/comments/browser/commentThreadZoneWidget.ts +++ b/src/vs/workbench/contrib/comments/browser/commentThreadZoneWidget.ts @@ -7,7 +7,6 @@ import * as dom from 'vs/base/browser/dom'; import { Color } from 'vs/base/common/color'; import { Emitter, Event } from 'vs/base/common/event'; import { IDisposable, DisposableStore } from 'vs/base/common/lifecycle'; -import { withNullAsUndefined } from 'vs/base/common/types'; import { ICodeEditor, IEditorMouseEvent, MouseTargetType } from 'vs/editor/browser/editorBrowser'; import { IPosition } from 'vs/editor/common/core/position'; import { IRange, Range } from 'vs/editor/common/core/range'; @@ -171,7 +170,7 @@ export class ReviewZoneWidget extends ZoneWidget implements ICommentThreadWidget } if (this._commentGlyph) { - return withNullAsUndefined(this._commentGlyph.getPosition().position); + return this._commentGlyph.getPosition().position ?? undefined; } return undefined; } diff --git a/src/vs/workbench/contrib/comments/browser/commentsController.ts b/src/vs/workbench/contrib/comments/browser/commentsController.ts index 97df0066099..339b10df9e7 100644 --- a/src/vs/workbench/contrib/comments/browser/commentsController.ts +++ b/src/vs/workbench/contrib/comments/browser/commentsController.ts @@ -37,7 +37,6 @@ import { Position } from 'vs/editor/common/core/position'; import { CommentThreadRangeDecorator } from 'vs/workbench/contrib/comments/browser/commentThreadRangeDecorator'; import { ICursorSelectionChangedEvent } from 'vs/editor/common/cursorEvents'; import { CommentsPanel } from 'vs/workbench/contrib/comments/browser/commentsView'; -import { withNullAsUndefined } from 'vs/base/common/types'; export const ID = 'editor.contrib.review'; @@ -498,7 +497,7 @@ export class CommentController implements IEditorContribution { }).then(commentInfos => { if (this.commentService.isCommentingEnabled) { const meaningfulCommentInfos = coalesce(commentInfos); - this._commentingRangeDecorator.update(this.editor, meaningfulCommentInfos, this.editor?.getPosition()?.lineNumber, withNullAsUndefined(this.editor?.getSelection())); + this._commentingRangeDecorator.update(this.editor, meaningfulCommentInfos, this.editor?.getPosition()?.lineNumber, this.editor?.getSelection() ?? undefined); } }, (err) => { onUnexpectedError(err); diff --git a/src/vs/workbench/contrib/debug/browser/breakpointEditorContribution.ts b/src/vs/workbench/contrib/debug/browser/breakpointEditorContribution.ts index 8c7e0c62b0e..c6126663925 100644 --- a/src/vs/workbench/contrib/debug/browser/breakpointEditorContribution.ts +++ b/src/vs/workbench/contrib/debug/browser/breakpointEditorContribution.ts @@ -18,7 +18,6 @@ import * as env from 'vs/base/common/platform'; import severity from 'vs/base/common/severity'; import { noBreakWhitespace } from 'vs/base/common/strings'; import { ThemeIcon } from 'vs/base/common/themables'; -import { withNullAsUndefined } from 'vs/base/common/types'; import { URI } from 'vs/base/common/uri'; import { generateUuid } from 'vs/base/common/uuid'; import { ContentWidgetPositionPreference, IActiveCodeEditor, ICodeEditor, IContentWidget, IContentWidgetPosition, IEditorMouseEvent, MouseTargetType } from 'vs/editor/browser/editorBrowser'; @@ -95,7 +94,7 @@ function getBreakpointDecorationOptions(accessor: ServicesAccessor, model: IText if (message) { if (!langId) { // Lazily compute this, only if needed for some debug adapter - langId = withNullAsUndefined(languageService.guessLanguageIdByFilepathOrFirstLine(breakpoint.uri)); + langId = languageService.guessLanguageIdByFilepathOrFirstLine(breakpoint.uri) ?? undefined; } return langId && dbg.interestedInLanguage(langId) ? message : undefined; } diff --git a/src/vs/workbench/contrib/debug/browser/debugQuickAccess.ts b/src/vs/workbench/contrib/debug/browser/debugQuickAccess.ts index 44e073d3d77..0433b7ae76b 100644 --- a/src/vs/workbench/contrib/debug/browser/debugQuickAccess.ts +++ b/src/vs/workbench/contrib/debug/browser/debugQuickAccess.ts @@ -11,7 +11,6 @@ import { IDebugService } from 'vs/workbench/contrib/debug/common/debug'; import { IWorkspaceContextService, WorkbenchState } from 'vs/platform/workspace/common/workspace'; import { ICommandService } from 'vs/platform/commands/common/commands'; import { matchesFuzzy } from 'vs/base/common/filters'; -import { withNullAsUndefined } from 'vs/base/common/types'; import { ADD_CONFIGURATION_ID, DEBUG_QUICK_ACCESS_PREFIX } from 'vs/workbench/contrib/debug/browser/debugCommands'; import { debugConfigure, debugRemoveConfig } from 'vs/workbench/contrib/debug/browser/debugIcons'; import { ThemeIcon } from 'vs/base/common/themables'; @@ -151,7 +150,7 @@ export class StartDebugQuickAccessProvider extends PickerQuickAccessProvider this.commandService.executeCommand(ADD_CONFIGURATION_ID, launch.uri.toString()) }); } diff --git a/src/vs/workbench/contrib/notebook/browser/services/notebookExecutionStateServiceImpl.ts b/src/vs/workbench/contrib/notebook/browser/services/notebookExecutionStateServiceImpl.ts index 3d763f0c453..9ebea229e18 100644 --- a/src/vs/workbench/contrib/notebook/browser/services/notebookExecutionStateServiceImpl.ts +++ b/src/vs/workbench/contrib/notebook/browser/services/notebookExecutionStateServiceImpl.ts @@ -7,7 +7,6 @@ import { Emitter } from 'vs/base/common/event'; import { combinedDisposable, Disposable, IDisposable } from 'vs/base/common/lifecycle'; import { ResourceMap } from 'vs/base/common/map'; import { isEqual } from 'vs/base/common/resources'; -import { withNullAsUndefined } from 'vs/base/common/types'; import { URI } from 'vs/base/common/uri'; import { generateUuid } from 'vs/base/common/uuid'; import { AudioCue, IAudioCueService } from 'vs/platform/audioCues/browser/audioCueService'; @@ -85,7 +84,7 @@ export class NotebookExecutionStateService extends Disposable implements INotebo getCellExecutionsByHandleForNotebook(notebook: URI): Map | undefined { const exeMap = this._executions.get(notebook); - return withNullAsUndefined(exeMap); + return exeMap ?? undefined; } private _onCellExecutionDidChange(notebookUri: URI, cellHandle: number, exe: CellExecution): void { diff --git a/src/vs/workbench/contrib/preferences/browser/keybindingWidgets.ts b/src/vs/workbench/contrib/preferences/browser/keybindingWidgets.ts index c8e4a1fb3c0..894b9e8f74d 100644 --- a/src/vs/workbench/contrib/preferences/browser/keybindingWidgets.ts +++ b/src/vs/workbench/contrib/preferences/browser/keybindingWidgets.ts @@ -23,7 +23,6 @@ import { ICodeEditor, IOverlayWidget, IOverlayWidgetPosition } from 'vs/editor/b import { asCssVariable, editorWidgetBackground, editorWidgetForeground, widgetShadow } from 'vs/platform/theme/common/colorRegistry'; import { ScrollType } from 'vs/editor/common/editorCommon'; import { SearchWidget, SearchOptions } from 'vs/workbench/contrib/preferences/browser/preferencesWidgets'; -import { withNullAsUndefined } from 'vs/base/common/types'; import { Promises, timeout } from 'vs/base/common/async'; import { IContextKeyService } from 'vs/platform/contextkey/common/contextkey'; import { defaultInputBoxStyles, defaultKeybindingLabelStyles } from 'vs/platform/theme/browser/defaultStyles'; @@ -244,7 +243,7 @@ export class DefineKeybindingWidget extends Widget { dom.clearNode(this._showExistingKeybindingsNode); const firstLabel = new KeybindingLabel(this._outputNode, OS, defaultKeybindingLabelStyles); - firstLabel.set(withNullAsUndefined(this._chords?.[0])); + firstLabel.set(this._chords?.[0] ?? undefined); if (this._chords) { for (let i = 1; i < this._chords.length; i++) { diff --git a/src/vs/workbench/contrib/preferences/browser/settingsEditor2.ts b/src/vs/workbench/contrib/preferences/browser/settingsEditor2.ts index 315476bf3be..98dfa564221 100644 --- a/src/vs/workbench/contrib/preferences/browser/settingsEditor2.ts +++ b/src/vs/workbench/contrib/preferences/browser/settingsEditor2.ts @@ -19,7 +19,6 @@ import { Iterable } from 'vs/base/common/iterator'; import { KeyCode } from 'vs/base/common/keyCodes'; import { Disposable, DisposableStore, dispose } from 'vs/base/common/lifecycle'; import * as platform from 'vs/base/common/platform'; -import { withNullAsUndefined } from 'vs/base/common/types'; import { URI } from 'vs/base/common/uri'; import 'vs/css!./media/settingsEditor2'; import { localize } from 'vs/nls'; @@ -839,7 +838,7 @@ export class SettingsEditor2 extends EditorPane { this.tocTree.setSelection(element ? [element] : []); if (this.searchResultModel) { if (this.viewState.filterToCategory !== element) { - this.viewState.filterToCategory = withNullAsUndefined(element); + this.viewState.filterToCategory = element ?? undefined; // Force render in this case, because // onDidClickSetting relies on the updated view. this.renderTree(undefined, true); diff --git a/src/vs/workbench/contrib/quickaccess/browser/viewQuickAccess.ts b/src/vs/workbench/contrib/quickaccess/browser/viewQuickAccess.ts index 78059b2f79a..66c38b0fb91 100644 --- a/src/vs/workbench/contrib/quickaccess/browser/viewQuickAccess.ts +++ b/src/vs/workbench/contrib/quickaccess/browser/viewQuickAccess.ts @@ -13,7 +13,6 @@ import { IContextKeyService } from 'vs/platform/contextkey/common/contextkey'; import { PaneCompositeDescriptor } from 'vs/workbench/browser/panecomposite'; import { matchesFuzzy } from 'vs/base/common/filters'; import { fuzzyContains } from 'vs/base/common/strings'; -import { withNullAsUndefined } from 'vs/base/common/types'; import { IKeybindingService } from 'vs/platform/keybinding/common/keybinding'; import { Action2 } from 'vs/platform/actions/common/actions'; import { ServicesAccessor } from 'vs/platform/instantiation/common/instantiation'; @@ -56,7 +55,7 @@ export class ViewQuickAccessProvider extends PickerQuickAccessProvider number { @@ -71,7 +70,7 @@ export class QuickDiffService extends Disposable implements IQuickDiffService { const diffs = await Promise.all(providers.map(async provider => { const scoreValue = provider.selector ? score(provider.selector, uri, language, isSynchronized, undefined, undefined) : 10; const diff: Partial = { - originalResource: scoreValue > 0 ? withNullAsUndefined(await provider.getOriginalResource(uri)) : undefined, + originalResource: scoreValue > 0 ? await provider.getOriginalResource(uri) ?? undefined : undefined, label: provider.label, isSCM: provider.isSCM }; diff --git a/src/vs/workbench/contrib/search/browser/anythingQuickAccess.ts b/src/vs/workbench/contrib/search/browser/anythingQuickAccess.ts index dde4d2279da..ccd7471df75 100644 --- a/src/vs/workbench/contrib/search/browser/anythingQuickAccess.ts +++ b/src/vs/workbench/contrib/search/browser/anythingQuickAccess.ts @@ -48,7 +48,6 @@ import { ScrollType, IEditor, ICodeEditorViewState, IDiffEditorViewState } from import { once } from 'vs/base/common/functional'; import { IEditorGroup } from 'vs/workbench/services/editor/common/editorGroupsService'; import { getIEditor } from 'vs/editor/browser/editorBrowser'; -import { withNullAsUndefined } from 'vs/base/common/types'; import { Codicon } from 'vs/base/common/codicons'; import { ThemeIcon } from 'vs/base/common/themables'; import { IUriIdentityService } from 'vs/platform/uriIdentity/common/uriIdentity'; @@ -145,7 +144,7 @@ export class AnythingQuickAccessProvider extends PickerQuickAccessProvider const options: ITextQueryBuilderOptions = { _reason: 'searchEditor', extraFileResources: this.instantiationService.invokeFunction(getOutOfWorkspaceEditorResources), - maxResults: withNullAsUndefined(this.searchConfig.maxResults), + maxResults: this.searchConfig.maxResults ?? undefined, disregardIgnoreFiles: !config.useExcludeSettingsAndIgnoreFiles || undefined, disregardExcludeSettings: !config.useExcludeSettingsAndIgnoreFiles || undefined, excludePattern: config.filesToExclude, diff --git a/src/vs/workbench/contrib/searchEditor/browser/searchEditorActions.ts b/src/vs/workbench/contrib/searchEditor/browser/searchEditorActions.ts index 5ffd22ec0d3..787d4cd991e 100644 --- a/src/vs/workbench/contrib/searchEditor/browser/searchEditorActions.ts +++ b/src/vs/workbench/contrib/searchEditor/browser/searchEditorActions.ts @@ -4,7 +4,6 @@ *--------------------------------------------------------------------------------------------*/ import { Schemas } from 'vs/base/common/network'; -import { withNullAsUndefined } from 'vs/base/common/types'; import { URI } from 'vs/base/common/uri'; import 'vs/css!./media/searchEditor'; import { ICodeEditor, isDiffEditor } from 'vs/editor/browser/editorBrowser'; @@ -108,7 +107,7 @@ export const openNewSearchEditor = const workspaceContextService = accessor.get(IWorkspaceContextService); const historyService = accessor.get(IHistoryService); const activeWorkspaceRootUri = historyService.getLastActiveWorkspaceRoot(Schemas.file); - const lastActiveWorkspaceRoot = activeWorkspaceRootUri ? withNullAsUndefined(workspaceContextService.getWorkspaceFolder(activeWorkspaceRootUri)) : undefined; + const lastActiveWorkspaceRoot = activeWorkspaceRootUri ? workspaceContextService.getWorkspaceFolder(activeWorkspaceRootUri) ?? undefined : undefined; const activeEditorControl = editorService.activeTextEditorControl; diff --git a/src/vs/workbench/contrib/terminal/browser/baseTerminalBackend.ts b/src/vs/workbench/contrib/terminal/browser/baseTerminalBackend.ts index 0cec710ed1e..fcb01ae3e84 100644 --- a/src/vs/workbench/contrib/terminal/browser/baseTerminalBackend.ts +++ b/src/vs/workbench/contrib/terminal/browser/baseTerminalBackend.ts @@ -6,7 +6,6 @@ import { Emitter } from 'vs/base/common/event'; import { Disposable } from 'vs/base/common/lifecycle'; import { Schemas } from 'vs/base/common/network'; -import { withNullAsUndefined } from 'vs/base/common/types'; import { localize } from 'vs/nls'; import { ICrossVersionSerializedTerminalState, IPtyHostController, ISerializedTerminalState, ITerminalLogService } from 'vs/platform/terminal/common/terminal'; import { themeColorFromId } from 'vs/platform/theme/common/themeService'; @@ -92,7 +91,7 @@ export abstract class BaseTerminalBackend extends Disposable { return; } const activeWorkspaceRootUri = historyService.getLastActiveWorkspaceRoot(Schemas.file); - const lastActiveWorkspaceRoot = activeWorkspaceRootUri ? withNullAsUndefined(this._workspaceContextService.getWorkspaceFolder(activeWorkspaceRootUri)) : undefined; + const lastActiveWorkspaceRoot = activeWorkspaceRootUri ? this._workspaceContextService.getWorkspaceFolder(activeWorkspaceRootUri) ?? undefined : undefined; const resolveCalls: Promise[] = e.originalText.map(t => { return configurationResolverService.resolveAsync(lastActiveWorkspaceRoot, t); }); diff --git a/src/vs/workbench/contrib/terminal/browser/terminalActions.ts b/src/vs/workbench/contrib/terminal/browser/terminalActions.ts index 5932d72db82..88e8def8389 100644 --- a/src/vs/workbench/contrib/terminal/browser/terminalActions.ts +++ b/src/vs/workbench/contrib/terminal/browser/terminalActions.ts @@ -10,7 +10,7 @@ import { KeyChord, KeyCode, KeyMod } from 'vs/base/common/keyCodes'; import { Schemas } from 'vs/base/common/network'; import { isLinux, isWindows } from 'vs/base/common/platform'; import { IDisposable } from 'vs/base/common/lifecycle'; -import { withNullAsUndefined, isObject, isString } from 'vs/base/common/types'; +import { isObject, isString } from 'vs/base/common/types'; import { URI } from 'vs/base/common/uri'; import { ICodeEditorService } from 'vs/editor/browser/services/codeEditorService'; import { EndOfLinePreference } from 'vs/editor/common/model'; @@ -112,7 +112,7 @@ export const terminalSendSequenceCommand = async (accessor: ServicesAccessor, ar const workspaceContextService = accessor.get(IWorkspaceContextService); const historyService = accessor.get(IHistoryService); const activeWorkspaceRootUri = historyService.getLastActiveWorkspaceRoot(instance.isRemote ? Schemas.vscodeRemote : Schemas.file); - const lastActiveWorkspaceRoot = activeWorkspaceRootUri ? withNullAsUndefined(workspaceContextService.getWorkspaceFolder(activeWorkspaceRootUri)) : undefined; + const lastActiveWorkspaceRoot = activeWorkspaceRootUri ? workspaceContextService.getWorkspaceFolder(activeWorkspaceRootUri) ?? undefined : undefined; const resolvedText = await configurationResolverService.resolveAsync(lastActiveWorkspaceRoot, text); instance.sendText(resolvedText, false); } diff --git a/src/vs/workbench/contrib/terminal/browser/terminalInstance.ts b/src/vs/workbench/contrib/terminal/browser/terminalInstance.ts index 3d65f2cf44b..fecc0535f37 100644 --- a/src/vs/workbench/contrib/terminal/browser/terminalInstance.ts +++ b/src/vs/workbench/contrib/terminal/browser/terminalInstance.ts @@ -22,7 +22,6 @@ import { Schemas } from 'vs/base/common/network'; import * as path from 'vs/base/common/path'; import { OS, OperatingSystem, isMacintosh, isWindows } from 'vs/base/common/platform'; import { ScrollbarVisibility } from 'vs/base/common/scrollable'; -import { withNullAsUndefined } from 'vs/base/common/types'; import { URI } from 'vs/base/common/uri'; import { TabFocus, TabFocusContext } from 'vs/editor/browser/config/tabFocus'; import * as nls from 'vs/nls'; @@ -392,12 +391,12 @@ export class TerminalInstance extends Disposable implements ITerminalInstance { path: this._shellLaunchConfig.cwd }) : this._shellLaunchConfig.cwd; if (cwdUri) { - this._workspaceFolder = withNullAsUndefined(this._workspaceContextService.getWorkspaceFolder(cwdUri)); + this._workspaceFolder = this._workspaceContextService.getWorkspaceFolder(cwdUri) ?? undefined; } } if (!this._workspaceFolder) { const activeWorkspaceRootUri = this._historyService.getLastActiveWorkspaceRoot(); - this._workspaceFolder = activeWorkspaceRootUri ? withNullAsUndefined(this._workspaceContextService.getWorkspaceFolder(activeWorkspaceRootUri)) : undefined; + this._workspaceFolder = activeWorkspaceRootUri ? this._workspaceContextService.getWorkspaceFolder(activeWorkspaceRootUri) ?? undefined : undefined; } const scopedContextKeyService = this._register(_contextKeyService.createScoped(this._wrapperElement)); diff --git a/src/vs/workbench/contrib/terminal/browser/terminalProfileResolverService.ts b/src/vs/workbench/contrib/terminal/browser/terminalProfileResolverService.ts index 1b0aa408a81..f61f13cb486 100644 --- a/src/vs/workbench/contrib/terminal/browser/terminalProfileResolverService.ts +++ b/src/vs/workbench/contrib/terminal/browser/terminalProfileResolverService.ts @@ -5,7 +5,6 @@ import { Schemas } from 'vs/base/common/network'; import { env } from 'vs/base/common/process'; -import { withNullAsUndefined } from 'vs/base/common/types'; import { IConfigurationService } from 'vs/platform/configuration/common/configuration'; import { IWorkspaceContextService, IWorkspaceFolder } from 'vs/platform/workspace/common/workspace'; import { IConfigurationResolverService } from 'vs/workbench/services/configurationResolver/common/configurationResolver'; @@ -297,7 +296,7 @@ export abstract class BaseTerminalProfileResolverService implements ITerminalPro // Resolve path variables const activeWorkspaceRootUri = this._historyService.getLastActiveWorkspaceRoot(options.remoteAuthority ? Schemas.vscodeRemote : Schemas.file); - const lastActiveWorkspace = activeWorkspaceRootUri ? withNullAsUndefined(this._workspaceContextService.getWorkspaceFolder(activeWorkspaceRootUri)) : undefined; + const lastActiveWorkspace = activeWorkspaceRootUri ? this._workspaceContextService.getWorkspaceFolder(activeWorkspaceRootUri) ?? undefined : undefined; profile.path = await this._resolveVariables(profile.path, env, lastActiveWorkspace); // Resolve args variables diff --git a/src/vs/workbench/contrib/terminal/browser/terminalView.ts b/src/vs/workbench/contrib/terminal/browser/terminalView.ts index c1a38a3f014..04ed7f22ce7 100644 --- a/src/vs/workbench/contrib/terminal/browser/terminalView.ts +++ b/src/vs/workbench/contrib/terminal/browser/terminalView.ts @@ -37,7 +37,6 @@ import { dispose, IDisposable, toDisposable } from 'vs/base/common/lifecycle'; import { URI } from 'vs/base/common/uri'; import { ColorScheme } from 'vs/platform/theme/common/theme'; import { getColorClass, getUriClasses } from 'vs/workbench/contrib/terminal/browser/terminalIcon'; -import { withNullAsUndefined } from 'vs/base/common/types'; import { getTerminalActionBarArgs } from 'vs/workbench/contrib/terminal/browser/terminalMenus'; import { TerminalContextKeys } from 'vs/workbench/contrib/terminal/common/terminalContextKey'; import { getInstanceHoverInfo } from 'vs/workbench/contrib/terminal/browser/terminalTooltip'; @@ -294,7 +293,7 @@ export class TerminalViewPane extends ViewPane { } private _getKeybindingLabel(action: IAction): string | undefined { - return withNullAsUndefined(this._keybindingService.lookupKeybinding(action.id)?.getLabel()); + return this._keybindingService.lookupKeybinding(action.id)?.getLabel() ?? undefined; } private _updateTabActionBar(profiles: ITerminalProfile[]): void { diff --git a/src/vs/workbench/contrib/terminal/common/remote/remoteTerminalChannel.ts b/src/vs/workbench/contrib/terminal/common/remote/remoteTerminalChannel.ts index 1e493eecc6f..ab1c7d898c7 100644 --- a/src/vs/workbench/contrib/terminal/common/remote/remoteTerminalChannel.ts +++ b/src/vs/workbench/contrib/terminal/common/remote/remoteTerminalChannel.ts @@ -4,7 +4,6 @@ *--------------------------------------------------------------------------------------------*/ import { Event } from 'vs/base/common/event'; -import { withNullAsUndefined } from 'vs/base/common/types'; import { URI, UriComponents } from 'vs/base/common/uri'; import { IChannel } from 'vs/base/parts/ipc/common/ipc'; import { IWorkbenchConfigurationService } from 'vs/workbench/services/configuration/common/configuration'; @@ -133,7 +132,7 @@ export class RemoteTerminalChannelClient implements IPtyHostController { // We will use the resolver service to resolve all the variables in the config / launch config // But then we will keep only some variables, since the rest need to be resolved on the remote side const resolvedVariables = Object.create(null); - const lastActiveWorkspace = activeWorkspaceRootUri ? withNullAsUndefined(this._workspaceContextService.getWorkspaceFolder(activeWorkspaceRootUri)) : undefined; + const lastActiveWorkspace = activeWorkspaceRootUri ? this._workspaceContextService.getWorkspaceFolder(activeWorkspaceRootUri) ?? undefined : undefined; let allResolvedVariables: Map | undefined = undefined; try { allResolvedVariables = (await this._resolverService.resolveAnyMap(lastActiveWorkspace, { diff --git a/src/vs/workbench/contrib/terminal/common/terminalEnvironment.ts b/src/vs/workbench/contrib/terminal/common/terminalEnvironment.ts index db80c0b1a3a..22aedd0758c 100644 --- a/src/vs/workbench/contrib/terminal/common/terminalEnvironment.ts +++ b/src/vs/workbench/contrib/terminal/common/terminalEnvironment.ts @@ -15,7 +15,7 @@ import { sanitizeProcessEnvironment } from 'vs/base/common/processes'; import { IShellLaunchConfig, ITerminalBackend, ITerminalEnvironment, TerminalShellType, WindowsShellType } from 'vs/platform/terminal/common/terminal'; import { IProcessEnvironment, isWindows, language, OperatingSystem } from 'vs/base/common/platform'; import { escapeNonWindowsPath, sanitizeCwd } from 'vs/platform/terminal/common/terminalEnvironment'; -import { isString, withNullAsUndefined } from 'vs/base/common/types'; +import { isString } from 'vs/base/common/types'; import { IHistoryService } from 'vs/workbench/services/history/common/history'; import { ILogService } from 'vs/platform/log/common/log'; @@ -361,12 +361,12 @@ export async function preparePathForShell(resource: string | URI, executable: st export function getWorkspaceForTerminal(cwd: URI | string | undefined, workspaceContextService: IWorkspaceContextService, historyService: IHistoryService): IWorkspaceFolder | undefined { const cwdUri = typeof cwd === 'string' ? URI.parse(cwd) : cwd; - let workspaceFolder = cwdUri ? withNullAsUndefined(workspaceContextService.getWorkspaceFolder(cwdUri)) : undefined; + let workspaceFolder = cwdUri ? workspaceContextService.getWorkspaceFolder(cwdUri) ?? undefined : undefined; if (!workspaceFolder) { // fallback to last active workspace if cwd is not available or it is not in workspace // TOOD: last active workspace is known to be unreliable, we should remove this fallback eventually const activeWorkspaceRootUri = historyService.getLastActiveWorkspaceRoot(); - workspaceFolder = activeWorkspaceRootUri ? withNullAsUndefined(workspaceContextService.getWorkspaceFolder(activeWorkspaceRootUri)) : undefined; + workspaceFolder = activeWorkspaceRootUri ? workspaceContextService.getWorkspaceFolder(activeWorkspaceRootUri) ?? undefined : undefined; } return workspaceFolder; } diff --git a/src/vs/workbench/contrib/terminal/electron-sandbox/localTerminalBackend.ts b/src/vs/workbench/contrib/terminal/electron-sandbox/localTerminalBackend.ts index bb730ffa8ac..d2a375a498f 100644 --- a/src/vs/workbench/contrib/terminal/electron-sandbox/localTerminalBackend.ts +++ b/src/vs/workbench/contrib/terminal/electron-sandbox/localTerminalBackend.ts @@ -5,7 +5,6 @@ import { Emitter } from 'vs/base/common/event'; import { IProcessEnvironment, isMacintosh, isWindows, OperatingSystem } from 'vs/base/common/platform'; -import { withNullAsUndefined } from 'vs/base/common/types'; import { URI } from 'vs/base/common/uri'; import { IConfigurationService } from 'vs/platform/configuration/common/configuration'; import { IInstantiationService } from 'vs/platform/instantiation/common/instantiation'; @@ -331,7 +330,7 @@ class LocalTerminalBackend extends BaseTerminalBackend implements ITerminalBacke try { // Create variable resolver const activeWorkspaceRootUri = this._historyService.getLastActiveWorkspaceRoot(); - const lastActiveWorkspace = activeWorkspaceRootUri ? withNullAsUndefined(this._workspaceContextService.getWorkspaceFolder(activeWorkspaceRootUri)) : undefined; + const lastActiveWorkspace = activeWorkspaceRootUri ? this._workspaceContextService.getWorkspaceFolder(activeWorkspaceRootUri) ?? undefined : undefined; const variableResolver = terminalEnvironment.createVariableResolver(lastActiveWorkspace, await this._terminalProfileResolverService.getEnvironment(this.remoteAuthority), this._configurationResolverService); // Re-resolve the environments and replace it on the state so local terminals use a fresh diff --git a/src/vs/workbench/contrib/terminalContrib/accessibility/browser/terminalAccessibleBuffer.ts b/src/vs/workbench/contrib/terminalContrib/accessibility/browser/terminalAccessibleBuffer.ts index 18a05b903cf..fab258f94e6 100644 --- a/src/vs/workbench/contrib/terminalContrib/accessibility/browser/terminalAccessibleBuffer.ts +++ b/src/vs/workbench/contrib/terminalContrib/accessibility/browser/terminalAccessibleBuffer.ts @@ -4,7 +4,6 @@ *--------------------------------------------------------------------------------------------*/ import { Event } from 'vs/base/common/event'; -import { withNullAsUndefined } from 'vs/base/common/types'; import { IEditorViewState } from 'vs/editor/common/editorCommon'; import { ITextModel } from 'vs/editor/common/model'; import { IModelService } from 'vs/editor/common/services/model'; @@ -121,7 +120,7 @@ export class AccessibleBufferWidget extends TerminalAccessibleWidget { } async createQuickPick(): Promise | undefined> { - this._cursorPosition = withNullAsUndefined(this.editorWidget.getPosition()); + this._cursorPosition = this.editorWidget.getPosition() ?? undefined; const commands = this._getCommandsWithEditorLine(); if (!commands) { return; @@ -233,7 +232,7 @@ export class AccessibleBufferWidget extends TerminalAccessibleWidget { // Save the view state before the update if it was set by the user let savedViewState: IEditorViewState | undefined; if (dataChanged) { - savedViewState = withNullAsUndefined(this.editorWidget.saveViewState()); + savedViewState = this.editorWidget.saveViewState() ?? undefined; } let model = this.editorWidget.getModel(); diff --git a/src/vs/workbench/contrib/webviewView/browser/webviewViewPane.ts b/src/vs/workbench/contrib/webviewView/browser/webviewViewPane.ts index 313cda95762..b56367f4cb6 100644 --- a/src/vs/workbench/contrib/webviewView/browser/webviewViewPane.ts +++ b/src/vs/workbench/contrib/webviewView/browser/webviewViewPane.ts @@ -7,7 +7,6 @@ import { addDisposableListener, Dimension, EventType, findParentWithClass } from import { CancellationTokenSource } from 'vs/base/common/cancellation'; import { Emitter } from 'vs/base/common/event'; import { DisposableStore, IDisposable, MutableDisposable, toDisposable } from 'vs/base/common/lifecycle'; -import { withNullAsUndefined } from 'vs/base/common/types'; import { MenuId } from 'vs/platform/actions/common/actions'; import { IConfigurationService } from 'vs/platform/configuration/common/configuration'; import { IContextKeyService } from 'vs/platform/contextkey/common/contextkey'; @@ -301,6 +300,6 @@ export class WebviewViewPane extends ViewPane { } private findRootContainer(container: HTMLElement): HTMLElement | undefined { - return withNullAsUndefined(findParentWithClass(container, 'monaco-scrollable-element')); + return findParentWithClass(container, 'monaco-scrollable-element') ?? undefined; } } diff --git a/src/vs/workbench/electron-sandbox/parts/titlebar/menubarControl.ts b/src/vs/workbench/electron-sandbox/parts/titlebar/menubarControl.ts index a5d93553f0b..be89833271e 100644 --- a/src/vs/workbench/electron-sandbox/parts/titlebar/menubarControl.ts +++ b/src/vs/workbench/electron-sandbox/parts/titlebar/menubarControl.ts @@ -19,7 +19,6 @@ import { IOpenRecentAction, MenubarControl } from 'vs/workbench/browser/parts/ti import { IStorageService } from 'vs/platform/storage/common/storage'; import { IMenubarData, IMenubarMenu, IMenubarKeybinding, IMenubarMenuItemSubmenu, IMenubarMenuItemAction, MenubarMenuItem } from 'vs/platform/menubar/common/menubar'; import { IMenubarService } from 'vs/platform/menubar/electron-sandbox/menubar'; -import { withNullAsUndefined } from 'vs/base/common/types'; import { INativeHostService } from 'vs/platform/native/common/native'; import { IHostService } from 'vs/workbench/services/host/browser/host'; import { IPreferencesService } from 'vs/workbench/services/preferences/common/preferences'; @@ -197,13 +196,13 @@ export class NativeMenubarControl extends MenubarControl { // first try to resolve a native accelerator const electronAccelerator = binding.getElectronAccelerator(); if (electronAccelerator) { - return { label: electronAccelerator, userSettingsLabel: withNullAsUndefined(binding.getUserSettingsLabel()) }; + return { label: electronAccelerator, userSettingsLabel: binding.getUserSettingsLabel() ?? undefined }; } // we need this fallback to support keybindings that cannot show in electron menus (e.g. chords) const acceleratorLabel = binding.getLabel(); if (acceleratorLabel) { - return { label: acceleratorLabel, isNative: false, userSettingsLabel: withNullAsUndefined(binding.getUserSettingsLabel()) }; + return { label: acceleratorLabel, isNative: false, userSettingsLabel: binding.getUserSettingsLabel() ?? undefined }; } return undefined; diff --git a/src/vs/workbench/services/configuration/common/configurationEditing.ts b/src/vs/workbench/services/configuration/common/configurationEditing.ts index 2d42e3db59c..721f789dadb 100644 --- a/src/vs/workbench/services/configuration/common/configurationEditing.ts +++ b/src/vs/workbench/services/configuration/common/configurationEditing.ts @@ -20,7 +20,6 @@ import { IConfigurationRegistry, Extensions as ConfigurationExtensions, Configur import { IEditorService } from 'vs/workbench/services/editor/common/editorService'; import { INotificationService, Severity } from 'vs/platform/notification/common/notification'; import { IOpenSettingsOptions, IPreferencesService } from 'vs/workbench/services/preferences/common/preferences'; -import { withNullAsUndefined } from 'vs/base/common/types'; import { IUriIdentityService } from 'vs/platform/uriIdentity/common/uriIdentity'; import { ITextModel } from 'vs/editor/common/model'; import { IReference } from 'vs/base/common/lifecycle'; @@ -569,14 +568,14 @@ export class ConfigurationEditing { // Check for prefix if (config.key === key) { const jsonPath = this.isWorkspaceConfigurationResource(resource) ? [key] : []; - return { key: jsonPath[jsonPath.length - 1], jsonPath, value: config.value, resource: withNullAsUndefined(resource), workspaceStandAloneConfigurationKey: key, target }; + return { key: jsonPath[jsonPath.length - 1], jsonPath, value: config.value, resource: resource ?? undefined, workspaceStandAloneConfigurationKey: key, target }; } // Check for prefix. const keyPrefix = `${key}.`; if (config.key.indexOf(keyPrefix) === 0) { const jsonPath = this.isWorkspaceConfigurationResource(resource) ? [key, config.key.substr(keyPrefix.length)] : [config.key.substr(keyPrefix.length)]; - return { key: jsonPath[jsonPath.length - 1], jsonPath, value: config.value, resource: withNullAsUndefined(resource), workspaceStandAloneConfigurationKey: key, target }; + return { key: jsonPath[jsonPath.length - 1], jsonPath, value: config.value, resource: resource ?? undefined, workspaceStandAloneConfigurationKey: key, target }; } } } @@ -586,14 +585,14 @@ export class ConfigurationEditing { const configurationScope = configurationProperties[key]?.scope; let jsonPath = overrides.overrideIdentifiers?.length ? [keyFromOverrideIdentifiers(overrides.overrideIdentifiers), key] : [key]; if (target === EditableConfigurationTarget.USER_LOCAL || target === EditableConfigurationTarget.USER_REMOTE) { - return { key, jsonPath, value: config.value, resource: withNullAsUndefined(this.getConfigurationFileResource(target, key, '', null, configurationScope)), target }; + return { key, jsonPath, value: config.value, resource: this.getConfigurationFileResource(target, key, '', null, configurationScope) ?? undefined, target }; } const resource = this.getConfigurationFileResource(target, key, FOLDER_SETTINGS_PATH, overrides.resource, configurationScope); if (this.isWorkspaceConfigurationResource(resource)) { jsonPath = ['settings', ...jsonPath]; } - return { key, jsonPath, value: config.value, resource: withNullAsUndefined(resource), target }; + return { key, jsonPath, value: config.value, resource: resource ?? undefined, target }; } private isWorkspaceConfigurationResource(resource: URI | null): boolean { diff --git a/src/vs/workbench/services/editor/browser/editorService.ts b/src/vs/workbench/services/editor/browser/editorService.ts index ad7d341a7b8..e241e493f65 100644 --- a/src/vs/workbench/services/editor/browser/editorService.ts +++ b/src/vs/workbench/services/editor/browser/editorService.ts @@ -22,7 +22,7 @@ import { coalesce, distinct } from 'vs/base/common/arrays'; import { isCodeEditor, isDiffEditor, ICodeEditor, IDiffEditor, isCompositeEditor } from 'vs/editor/browser/editorBrowser'; import { IEditorGroupView, EditorServiceImpl } from 'vs/workbench/browser/parts/editor/editor'; import { InstantiationType, registerSingleton } from 'vs/platform/instantiation/common/extensions'; -import { isUndefined, withNullAsUndefined } from 'vs/base/common/types'; +import { isUndefined } from 'vs/base/common/types'; import { EditorsObserver } from 'vs/workbench/browser/parts/editor/editorsObserver'; import { Promises, timeout } from 'vs/base/common/async'; import { IWorkspaceContextService } from 'vs/platform/workspace/common/workspace'; @@ -136,7 +136,7 @@ export class EditorService extends Disposable implements EditorServiceImpl { // Remember as last active const activeGroup = this.editorGroupService.activeGroup; - this.lastActiveEditor = withNullAsUndefined(activeGroup.activeEditor); + this.lastActiveEditor = activeGroup.activeEditor ?? undefined; // Fire event to outside parties this._onDidActiveEditorChange.fire(); @@ -459,7 +459,7 @@ export class EditorService extends Disposable implements EditorServiceImpl { get activeEditor(): EditorInput | undefined { const activeGroup = this.editorGroupService.activeGroup; - return activeGroup ? withNullAsUndefined(activeGroup.activeEditor) : undefined; + return activeGroup ? activeGroup.activeEditor ?? undefined : undefined; } get visibleEditorPanes(): IVisibleEditorPane[] { diff --git a/src/vs/workbench/services/extensions/electron-sandbox/extensionHostProfiler.ts b/src/vs/workbench/services/extensions/electron-sandbox/extensionHostProfiler.ts index 12671cf7cce..8b380b9a887 100644 --- a/src/vs/workbench/services/extensions/electron-sandbox/extensionHostProfiler.ts +++ b/src/vs/workbench/services/extensions/electron-sandbox/extensionHostProfiler.ts @@ -6,7 +6,6 @@ import { TernarySearchTree } from 'vs/base/common/ternarySearchTree'; import { IExtensionHostProfile, IExtensionService, ProfileSegmentId, ProfileSession } from 'vs/workbench/services/extensions/common/extensions'; import { IExtensionDescription } from 'vs/platform/extensions/common/extensions'; -import { withNullAsUndefined } from 'vs/base/common/types'; import { Schemas } from 'vs/base/common/network'; import { URI } from 'vs/base/common/uri'; import { IV8InspectProfilingService, IV8Profile, IV8ProfileNode } from 'vs/platform/profiling/common/profiling'; @@ -104,7 +103,7 @@ export class ExtensionHostProfiler { distilledIds.push(currSegmentId); distilledDeltas.push(currSegmentTime); } - currSegmentId = withNullAsUndefined(segmentId); + currSegmentId = segmentId ?? undefined; currSegmentTime = 0; } currSegmentTime += timeDeltas[i]; diff --git a/src/vs/workbench/services/extensions/electron-sandbox/localProcessExtensionHost.ts b/src/vs/workbench/services/extensions/electron-sandbox/localProcessExtensionHost.ts index 763d67ddf37..b72e19b9ec6 100644 --- a/src/vs/workbench/services/extensions/electron-sandbox/localProcessExtensionHost.ts +++ b/src/vs/workbench/services/extensions/electron-sandbox/localProcessExtensionHost.ts @@ -12,7 +12,6 @@ import * as objects from 'vs/base/common/objects'; import * as platform from 'vs/base/common/platform'; import { removeDangerousEnvVariables } from 'vs/base/common/processes'; import { StopWatch } from 'vs/base/common/stopwatch'; -import { withNullAsUndefined } from 'vs/base/common/types'; import { URI } from 'vs/base/common/uri'; import { generateUuid } from 'vs/base/common/uuid'; import { IMessagePassingProtocol } from 'vs/base/parts/ipc/common/ipc'; @@ -440,7 +439,7 @@ export class NativeLocalProcessExtensionHost implements IExtensionHost { extensionLogLevel: this._environmentService.extensionLogLevel }, workspace: this._contextService.getWorkbenchState() === WorkbenchState.EMPTY ? undefined : { - configuration: withNullAsUndefined(workspace.configuration), + configuration: workspace.configuration ?? undefined, id: workspace.id, name: this._labelService.getWorkspaceLabel(workspace), isUntitled: workspace.configuration ? isUntitledWorkspace(workspace.configuration, this._environmentService) : false, @@ -533,7 +532,7 @@ export class NativeLocalProcessExtensionHost implements IExtensionHost { } public getInspectPort(): number | undefined { - return withNullAsUndefined(this._inspectPort); + return this._inspectPort ?? undefined; } private _onWillShutdown(event: WillShutdownEvent): void { diff --git a/src/vs/workbench/services/filesConfiguration/common/filesConfigurationService.ts b/src/vs/workbench/services/filesConfiguration/common/filesConfigurationService.ts index 19d723d383a..9e9594a25f4 100644 --- a/src/vs/workbench/services/filesConfiguration/common/filesConfigurationService.ts +++ b/src/vs/workbench/services/filesConfiguration/common/filesConfigurationService.ts @@ -20,7 +20,6 @@ import { IdleValue } from 'vs/base/common/async'; import { IUriIdentityService } from 'vs/platform/uriIdentity/common/uriIdentity'; import { IEnvironmentService } from 'vs/platform/environment/common/environment'; import { ResourceMap } from 'vs/base/common/map'; -import { withNullAsUndefined } from 'vs/base/common/types'; import { IMarkdownString } from 'vs/base/common/htmlContent'; export const AutoSaveAfterShortDelayContext = new RawContextKey('autoSaveAfterShortDelayContext', false, true); @@ -168,7 +167,7 @@ export class FilesConfigurationService extends Disposable implements IFilesConfi if ( this.uriIdentityService.extUri.isEqualOrParent(resource, this.environmentService.userRoamingDataHome) || - this.uriIdentityService.extUri.isEqual(resource, withNullAsUndefined(this.contextService.getWorkspace().configuration)) + this.uriIdentityService.extUri.isEqual(resource, this.contextService.getWorkspace().configuration ?? undefined) ) { return false; // explicitly exclude some paths from readonly that we need for configuration } diff --git a/src/vs/workbench/services/preferences/common/preferencesModels.ts b/src/vs/workbench/services/preferences/common/preferencesModels.ts index 8b374aa28ea..0ccee385532 100644 --- a/src/vs/workbench/services/preferences/common/preferencesModels.ts +++ b/src/vs/workbench/services/preferences/common/preferencesModels.ts @@ -21,7 +21,6 @@ import { IKeybindingService } from 'vs/platform/keybinding/common/keybinding'; import { Registry } from 'vs/platform/registry/common/platform'; import { EditorModel } from 'vs/workbench/common/editor/editorModel'; import { IFilterMetadata, IFilterResult, IGroupFilter, IKeybindingsEditorModel, ISearchResultGroup, ISetting, ISettingMatch, ISettingMatcher, ISettingsEditorModel, ISettingsGroup, SettingMatchType } from 'vs/workbench/services/preferences/common/preferences'; -import { withNullAsUndefined } from 'vs/base/common/types'; import { FOLDER_SCOPES, WORKSPACE_SCOPES } from 'vs/workbench/services/configuration/common/configuration'; import { createValidator } from 'vs/workbench/services/preferences/common/preferencesValidation'; @@ -387,7 +386,7 @@ function parse(model: ITextModel, isSettingsProperty: (currentProperty: string, valueRange: nullRange, descriptionRanges: [], overrides: [], - overrideOf: withNullAsUndefined(overrideSetting) + overrideOf: overrideSetting ?? undefined, }; if (previousParents.length === settingsPropertyIndex + 1) { settings.push(setting); diff --git a/src/vs/workbench/services/textfile/browser/textFileService.ts b/src/vs/workbench/services/textfile/browser/textFileService.ts index d2efcbdad27..45015baa458 100644 --- a/src/vs/workbench/services/textfile/browser/textFileService.ts +++ b/src/vs/workbench/services/textfile/browser/textFileService.ts @@ -43,7 +43,6 @@ import { IDecorationData, IDecorationsProvider, IDecorationsService } from 'vs/w import { Emitter } from 'vs/base/common/event'; import { Codicon } from 'vs/base/common/codicons'; import { listErrorForeground } from 'vs/platform/theme/common/colorRegistry'; -import { withNullAsUndefined } from 'vs/base/common/types'; import { firstOrDefault } from 'vs/base/common/arrays'; /** @@ -308,7 +307,7 @@ export abstract class AbstractTextFileService extends Disposable implements ITex acceptTextOnly: options?.acceptTextOnly ?? false, guessEncoding: options?.autoGuessEncoding || this.textResourceConfigurationService.getValue(resource, 'files.autoGuessEncoding'), overwriteEncoding: async detectedEncoding => { - const { encoding } = await this.encoding.getPreferredReadEncoding(resource, options, withNullAsUndefined(detectedEncoding)); + const { encoding } = await this.encoding.getPreferredReadEncoding(resource, options, detectedEncoding ?? undefined); return encoding; } @@ -507,7 +506,7 @@ export abstract class AbstractTextFileService extends Disposable implements ITex let sourceTextModel: ITextModel | undefined = undefined; if (sourceModel instanceof BaseTextEditorModel) { if (sourceModel.isResolved()) { - sourceTextModel = withNullAsUndefined(sourceModel.textEditorModel); + sourceTextModel = sourceModel.textEditorModel ?? undefined; } } else { sourceTextModel = sourceModel as ITextModel; diff --git a/src/vs/workbench/services/textfile/common/textFileEditorModel.ts b/src/vs/workbench/services/textfile/common/textFileEditorModel.ts index e5df1583fac..51af0329394 100644 --- a/src/vs/workbench/services/textfile/common/textFileEditorModel.ts +++ b/src/vs/workbench/services/textfile/common/textFileEditorModel.ts @@ -7,7 +7,7 @@ import { localize } from 'vs/nls'; import { Emitter } from 'vs/base/common/event'; import { URI } from 'vs/base/common/uri'; import { mark } from 'vs/base/common/performance'; -import { assertIsDefined, withNullAsUndefined } from 'vs/base/common/types'; +import { assertIsDefined } from 'vs/base/common/types'; import { EncodingMode, ITextFileService, TextFileEditorModelState, ITextFileEditorModel, ITextFileStreamContent, ITextFileResolveOptions, IResolvedTextFileEditorModel, ITextFileSaveOptions, TextFileResolveReason, ITextFileEditorModelSaveEvent } from 'vs/workbench/services/textfile/common/textfiles'; import { IRevertOptions, SaveReason, SaveSourceRegistry } from 'vs/workbench/common/editor'; import { BaseTextEditorModel } from 'vs/workbench/common/editor/textEditorModel'; @@ -227,7 +227,7 @@ export class TextFileEditorModel extends BaseTextEditorModel implements ITextFil // Fill in content the same way we would do when // saving the file via the text file service // encoding support (hardcode UTF-8) - const content = await this.textFileService.getEncodedReadable(this.resource, withNullAsUndefined(this.createSnapshot()), { encoding: UTF8 }); + const content = await this.textFileService.getEncodedReadable(this.resource, this.createSnapshot() ?? undefined, { encoding: UTF8 }); return { meta, content }; } diff --git a/src/vs/workbench/services/untitled/common/untitledTextEditorModel.ts b/src/vs/workbench/services/untitled/common/untitledTextEditorModel.ts index ac48868bd37..93d906d886e 100644 --- a/src/vs/workbench/services/untitled/common/untitledTextEditorModel.ts +++ b/src/vs/workbench/services/untitled/common/untitledTextEditorModel.ts @@ -18,7 +18,7 @@ import { IWorkingCopyService } from 'vs/workbench/services/workingCopy/common/wo import { IWorkingCopy, WorkingCopyCapabilities, IWorkingCopyBackup, NO_TYPE_ID, IWorkingCopySaveEvent } from 'vs/workbench/services/workingCopy/common/workingCopy'; import { IEncodingSupport, ILanguageSupport, ITextFileService } from 'vs/workbench/services/textfile/common/textfiles'; import { IModelContentChangedEvent } from 'vs/editor/common/textModelEvents'; -import { withNullAsUndefined, assertIsDefined } from 'vs/base/common/types'; +import { assertIsDefined } from 'vs/base/common/types'; import { ILabelService } from 'vs/platform/label/common/label'; import { ensureValidWordDefinition } from 'vs/editor/common/core/wordHelper'; import { IEditorService } from 'vs/workbench/services/editor/common/editorService'; @@ -295,7 +295,7 @@ export class UntitledTextEditorModel extends BaseTextEditorModel implements IUnt if (this.isResolved()) { // Fill in content the same way we would do when saving the file // via the text file service encoding support (hardcode UTF-8) - content = await this.textFileService.getEncodedReadable(this.resource, withNullAsUndefined(this.createSnapshot()), { encoding: UTF8 }); + content = await this.textFileService.getEncodedReadable(this.resource, this.createSnapshot() ?? undefined, { encoding: UTF8 }); } else if (typeof this.initialValue === 'string') { content = bufferToReadable(VSBuffer.fromString(this.initialValue)); }