Skip to content

Commit 8500490

Browse files
authored
Merge pull request #276173 from microsoft/tyriar/276071_terminalContrib
Remove in operator from contrib/terminalContrib
2 parents 093beda + 8d59013 commit 8500490

File tree

16 files changed

+52
-47
lines changed

16 files changed

+52
-47
lines changed

eslint.config.js

Lines changed: 0 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -338,23 +338,8 @@ export default tseslint.config(
338338
'src/vs/workbench/contrib/tasks/browser/abstractTaskService.ts',
339339
'src/vs/workbench/contrib/tasks/browser/taskTerminalStatus.ts',
340340
'src/vs/workbench/contrib/tasks/browser/terminalTaskSystem.ts',
341-
'src/vs/workbench/contrib/terminalContrib/accessibility/browser/terminal.accessibility.contribution.ts',
342-
'src/vs/workbench/contrib/terminalContrib/accessibility/browser/terminalAccessibleBufferProvider.ts',
343-
'src/vs/workbench/contrib/terminalContrib/chat/browser/terminal.initialHint.contribution.ts',
344-
'src/vs/workbench/contrib/terminalContrib/chat/browser/terminalChatActions.ts',
345-
'src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/commandLineAutoApprover.ts',
346341
'src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/taskHelpers.ts',
347-
'src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/toolTerminalCreator.ts',
348342
'src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/monitoring/outputMonitor.ts',
349-
'src/vs/workbench/contrib/terminalContrib/commandGuide/browser/terminal.commandGuide.contribution.ts',
350-
'src/vs/workbench/contrib/terminalContrib/history/browser/terminalRunRecentQuickPick.ts',
351-
'src/vs/workbench/contrib/terminalContrib/links/browser/terminalLinkQuickpick.ts',
352-
'src/vs/workbench/contrib/terminalContrib/links/test/browser/linkTestUtils.ts',
353-
'src/vs/workbench/contrib/terminalContrib/quickFix/browser/quickFixAddon.ts',
354-
'src/vs/workbench/contrib/terminalContrib/sendSequence/browser/terminal.sendSequence.contribution.ts',
355-
'src/vs/workbench/contrib/terminalContrib/sendSignal/browser/terminal.sendSignal.contribution.ts',
356-
'src/vs/workbench/contrib/terminalContrib/stickyScroll/browser/terminalStickyScrollOverlay.ts',
357-
'src/vs/workbench/contrib/terminalContrib/suggest/browser/terminalCompletionService.ts',
358343
'src/vs/workbench/contrib/testing/browser/explorerProjections/listProjection.ts',
359344
'src/vs/workbench/contrib/testing/browser/explorerProjections/treeProjection.ts',
360345
'src/vs/workbench/contrib/testing/browser/testCoverageBars.ts',

src/vs/workbench/contrib/terminalContrib/accessibility/browser/terminal.accessibility.contribution.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ import { ContextKeyExpr, IContextKeyService } from '../../../../../platform/cont
1919
import { IInstantiationService, ServicesAccessor } from '../../../../../platform/instantiation/common/instantiation.js';
2020
import { KeybindingWeight } from '../../../../../platform/keybinding/common/keybindingsRegistry.js';
2121
import { ITerminalCommand, TerminalCapability } from '../../../../../platform/terminal/common/capabilities/capabilities.js';
22-
import { ICurrentPartialCommand } from '../../../../../platform/terminal/common/capabilities/commandDetection/terminalCommand.js';
22+
import { ICurrentPartialCommand, isFullTerminalCommand } from '../../../../../platform/terminal/common/capabilities/commandDetection/terminalCommand.js';
2323
import { TerminalSettingId } from '../../../../../platform/terminal/common/terminal.js';
2424
import { accessibleViewCurrentProviderId, accessibleViewIsShown } from '../../../accessibility/browser/accessibilityConfiguration.js';
2525
import { AccessibilityHelpAction, AccessibleViewAction } from '../../../accessibility/browser/accessibleViewActions.js';
@@ -226,9 +226,9 @@ export class TerminalAccessibleViewContribution extends Disposable implements IT
226226
return;
227227
}
228228
let line: number | undefined;
229-
if ('marker' in command) {
229+
if (isFullTerminalCommand(command)) {
230230
line = command.marker?.line;
231-
} else if ('commandStartMarker' in command) {
231+
} else {
232232
line = command.commandStartMarker?.line;
233233
}
234234
if (line === undefined || line < 0) {

src/vs/workbench/contrib/terminalContrib/accessibility/browser/terminalAccessibleBufferProvider.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ import { Disposable } from '../../../../../base/common/lifecycle.js';
88
import { IAccessibleViewContentProvider, AccessibleViewProviderId, IAccessibleViewOptions, AccessibleViewType, IAccessibleViewSymbol } from '../../../../../platform/accessibility/browser/accessibleView.js';
99
import { IConfigurationService } from '../../../../../platform/configuration/common/configuration.js';
1010
import { TerminalCapability, ITerminalCommand } from '../../../../../platform/terminal/common/capabilities/capabilities.js';
11-
import { ICurrentPartialCommand } from '../../../../../platform/terminal/common/capabilities/commandDetection/terminalCommand.js';
11+
import { ICurrentPartialCommand, isFullTerminalCommand } from '../../../../../platform/terminal/common/capabilities/commandDetection/terminalCommand.js';
1212
import { AccessibilityVerbositySettingId } from '../../../accessibility/browser/accessibilityConfiguration.js';
1313
import { ITerminalInstance, ITerminalService } from '../../../terminal/browser/terminal.js';
1414
import { BufferContentTracker } from './bufferContentTracker.js';
@@ -98,9 +98,9 @@ export class TerminalAccessibleBufferProvider extends Disposable implements IAcc
9898
}
9999
private _getEditorLineForCommand(command: ITerminalCommand | ICurrentPartialCommand): number | undefined {
100100
let line: number | undefined;
101-
if ('marker' in command) {
101+
if (isFullTerminalCommand(command)) {
102102
line = command.marker?.line;
103-
} else if ('commandStartMarker' in command) {
103+
} else {
104104
line = command.commandStartMarker?.line;
105105
}
106106
if (line === undefined || line < 0) {

src/vs/workbench/contrib/terminalContrib/chat/browser/terminal.initialHint.contribution.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@ import { TerminalInstance } from '../../../terminal/browser/terminalInstance.js'
3030
import { TerminalInitialHintSettingId } from '../common/terminalInitialHintConfiguration.js';
3131
import './media/terminalInitialHint.css';
3232
import { TerminalChatCommandId } from './terminalChat.js';
33+
import { hasKey } from '../../../../../base/common/types.js';
3334

3435
const $ = dom.$;
3536

@@ -107,7 +108,7 @@ export class TerminalInitialHintContribution extends Disposable implements ITerm
107108

108109
xtermOpen(xterm: IXtermTerminal & { raw: RawXtermTerminal }): void {
109110
// Don't show is the terminal was launched by an extension or a feature like debug
110-
if ('shellLaunchConfig' in this._ctx.instance && (this._ctx.instance.shellLaunchConfig.isExtensionOwnedTerminal || this._ctx.instance.shellLaunchConfig.isFeatureTerminal)) {
111+
if (hasKey(this._ctx.instance, { shellLaunchConfig: true }) && (this._ctx.instance.shellLaunchConfig.isExtensionOwnedTerminal || this._ctx.instance.shellLaunchConfig.isFeatureTerminal)) {
111112
return;
112113
}
113114
// Don't show if disabled

src/vs/workbench/contrib/terminalContrib/chat/browser/terminalChatActions.ts

Lines changed: 11 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -54,19 +54,25 @@ registerActiveXtermAction({
5454
}
5555

5656
const contr = TerminalChatController.activeChatController || TerminalChatController.get(activeInstance);
57+
if (!contr) {
58+
return;
59+
}
5760

5861
if (opts) {
62+
function isValidOptionsObject(obj: unknown): obj is { query: string; isPartialQuery?: boolean } {
63+
return typeof obj === 'object' && obj !== null && 'query' in obj && typeof obj.query === 'string';
64+
}
5965
opts = typeof opts === 'string' ? { query: opts } : opts;
60-
if (typeof opts === 'object' && opts !== null && 'query' in opts && typeof opts.query === 'string') {
61-
contr?.updateInput(opts.query, false);
62-
if (!('isPartialQuery' in opts && opts.isPartialQuery)) {
63-
contr?.terminalChatWidget?.acceptInput();
66+
if (isValidOptionsObject(opts)) {
67+
contr.updateInput(opts.query, false);
68+
if (!opts.isPartialQuery) {
69+
contr.terminalChatWidget?.acceptInput();
6470
}
6571
}
6672

6773
}
6874

69-
contr?.terminalChatWidget?.reveal();
75+
contr.terminalChatWidget?.reveal();
7076
}
7177
});
7278

src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/commandLineAutoApprover.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -187,13 +187,13 @@ export class CommandLineAutoApprover extends Disposable {
187187
const defaultValue = configInspectValue?.default?.value;
188188
const isDefaultRule = !!(
189189
isObject(defaultValue) &&
190-
key in defaultValue &&
190+
Object.prototype.hasOwnProperty.call(defaultValue, key) &&
191191
structuralEquals((defaultValue as Record<string, unknown>)[key], value)
192192
);
193193
function checkTarget(inspectValue: Readonly<unknown> | undefined): boolean {
194194
return (
195195
isObject(inspectValue) &&
196-
key in inspectValue &&
196+
Object.prototype.hasOwnProperty.call(inspectValue, key) &&
197197
structuralEquals((inspectValue as Record<string, unknown>)[key], value)
198198
);
199199
}

src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/toolTerminalCreator.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ import { CancellationError } from '../../../../../base/common/errors.js';
1010
import { Event } from '../../../../../base/common/event.js';
1111
import { DisposableStore, MutableDisposable } from '../../../../../base/common/lifecycle.js';
1212
import { ThemeIcon } from '../../../../../base/common/themables.js';
13-
import { isNumber, isObject } from '../../../../../base/common/types.js';
13+
import { hasKey, isNumber, isObject } from '../../../../../base/common/types.js';
1414
import { IConfigurationService } from '../../../../../platform/configuration/common/configuration.js';
1515
import { TerminalCapability } from '../../../../../platform/terminal/common/capabilities/capabilities.js';
1616
import { PromptInputState } from '../../../../../platform/terminal/common/capabilities/commandDetection/promptInputModel.js';
@@ -63,7 +63,7 @@ export class ToolTerminalCreator {
6363
instance.processReady.then(() => processReadyTimestamp = Date.now()),
6464
Event.toPromise(instance.onExit),
6565
]);
66-
if (!isNumber(initResult) && isObject(initResult) && 'message' in initResult) {
66+
if (!isNumber(initResult) && isObject(initResult) && hasKey(initResult, { message: true })) {
6767
throw new Error(initResult.message);
6868
}
6969

src/vs/workbench/contrib/terminalContrib/commandGuide/browser/terminal.commandGuide.contribution.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ import { PANEL_BORDER } from '../../../../common/theme.js';
1515
import { IDetachedTerminalInstance, ITerminalContribution, ITerminalInstance, IXtermTerminal } from '../../../terminal/browser/terminal.js';
1616
import { registerTerminalContribution, type IDetachedCompatibleTerminalContributionContext, type ITerminalContributionContext } from '../../../terminal/browser/terminalExtensions.js';
1717
import { terminalCommandGuideConfigSection, TerminalCommandGuideSettingId, type ITerminalCommandGuideConfiguration } from '../common/terminalCommandGuideConfiguration.js';
18+
import { isFullTerminalCommand } from '../../../../../platform/terminal/common/capabilities/commandDetection/terminalCommand.js';
1819

1920
// #region Terminal Contributions
2021

@@ -80,7 +81,7 @@ class TerminalCommandGuideContribution extends Disposable implements ITerminalCo
8081
}
8182
const mouseCursorY = Math.floor((e.clientY - rect.top) / (rect.height / xterm.raw.rows));
8283
const command = this._ctx.instance.capabilities.get(TerminalCapability.CommandDetection)?.getCommandForLine(xterm.raw.buffer.active.viewportY + mouseCursorY);
83-
if (command && 'getOutput' in command) {
84+
if (command && isFullTerminalCommand(command)) {
8485
xterm.markTracker.showCommandGuide(command);
8586
} else {
8687
xterm.markTracker.showCommandGuide(undefined);

src/vs/workbench/contrib/terminalContrib/history/browser/terminalRunRecentQuickPick.ts

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@ import { getCommandHistory, getDirectoryHistory, getShellFileHistory } from '../
3131
import { ResourceSet } from '../../../../../base/common/map.js';
3232
import { extUri, extUriIgnorePathCase } from '../../../../../base/common/resources.js';
3333
import { IPathService } from '../../../../services/path/common/pathService.js';
34+
import { isObject } from '../../../../../base/common/types.js';
3435

3536
export async function showRunRecentQuickPick(
3637
accessor: ServicesAccessor,
@@ -325,7 +326,10 @@ export async function showRunRecentQuickPick(
325326
if (!item) {
326327
return;
327328
}
328-
if ('command' in item && item.command && item.command.marker) {
329+
function isItem(obj: unknown): obj is Item {
330+
return isObject(obj) && 'rawLabel' in obj;
331+
}
332+
if (isItem(item) && item.command && item.command.marker) {
329333
if (!terminalScrollStateSaved) {
330334
xterm.markTracker.saveScrollState();
331335
terminalScrollStateSaved = true;

src/vs/workbench/contrib/terminalContrib/links/browser/terminalLinkQuickpick.ts

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ import { ILabelService } from '../../../../../platform/label/common/label.js';
2020
import { basenameOrAuthority, dirname } from '../../../../../base/common/resources.js';
2121
import { IInstantiationService } from '../../../../../platform/instantiation/common/instantiation.js';
2222
import { AccessibleViewProviderId, IAccessibleViewService } from '../../../../../platform/accessibility/browser/accessibleView.js';
23+
import { hasKey } from '../../../../../base/common/types.js';
2324

2425
export class TerminalLinkQuickpick extends DisposableStore {
2526

@@ -167,7 +168,7 @@ export class TerminalLinkQuickpick extends DisposableStore {
167168
accepted = true;
168169
const event = new TerminalLinkQuickPickEvent(EventType.CLICK);
169170
const activeItem = pick.activeItems?.[0];
170-
if (activeItem && 'link' in activeItem) {
171+
if (activeItem && hasKey(activeItem, { link: true })) {
171172
activeItem.link.activate(event, activeItem.label);
172173
}
173174
disposables.dispose();
@@ -193,7 +194,7 @@ export class TerminalLinkQuickpick extends DisposableStore {
193194

194195
// Add a consistently formatted resolved URI label to the description if applicable
195196
let description: string | undefined;
196-
if ('uri' in link && link.uri) {
197+
if (hasKey(link, { uri: true }) && link.uri) {
197198
// For local files and folders, mimic the presentation of go to file
198199
if (
199200
link.type === TerminalBuiltinLinkType.LocalFile ||
@@ -234,15 +235,15 @@ export class TerminalLinkQuickpick extends DisposableStore {
234235
}
235236

236237
private _previewItem(item: ITerminalLinkQuickPickItem | IQuickPickItem) {
237-
if (!item || !('link' in item) || !item.link) {
238+
if (!item || !hasKey(item, { link: true }) || !item.link) {
238239
return;
239240
}
240241

241242
// Any link can be previewed in the termninal
242243
const link = item.link;
243244
this._previewItemInTerminal(link);
244245

245-
if (!('uri' in link) || !link.uri) {
246+
if (!hasKey(link, { uri: true }) || !link.uri) {
246247
return;
247248
}
248249

0 commit comments

Comments
 (0)