Skip to content

Commit 3543a22

Browse files
authored
Merge branch 'master' into ben/shared-process-ipc-ready
2 parents 4ac7672 + 64d55c5 commit 3543a22

File tree

8 files changed

+229
-237
lines changed

8 files changed

+229
-237
lines changed

extensions/vscode-api-tests/src/singlefolder-tests/debug.test.ts

Lines changed: 83 additions & 81 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,9 @@
44
*--------------------------------------------------------------------------------------------*/
55

66
import * as assert from 'assert';
7-
import { debug, workspace, Disposable } from 'vscode';
7+
import { debug, workspace, Disposable, commands, window } from 'vscode';
88
import { disposeAll } from '../utils';
9+
import { basename } from 'path';
910

1011
suite('Debug', function () {
1112

@@ -36,86 +37,87 @@ suite('Debug', function () {
3637
disposeAll(toDispose);
3738
});
3839

39-
// test('start debugging', async function () {
40-
// assert.equal(debug.activeDebugSession, undefined);
41-
// let stoppedEvents = 0;
42-
// let variablesReceived: () => void;
43-
// let capabilitiesReceived: () => void;
44-
// let initializedReceived: () => void;
45-
// let configurationDoneReceived: () => void;
46-
47-
// const firstVariablesRetrieved = new Promise<void>(resolve => variablesReceived = resolve);
48-
// const toDispose: Disposable[] = [];
49-
// toDispose.push(debug.registerDebugAdapterTrackerFactory('node2', {
50-
// createDebugAdapterTracker: () => ({
51-
// onDidSendMessage: m => {
52-
// if (m.event === 'stopped') {
53-
// stoppedEvents++;
54-
// }
55-
// if (m.type === 'response' && m.command === 'variables') {
56-
// variablesReceived();
57-
// }
58-
// if (m.event === 'capabilities') {
59-
// capabilitiesReceived();
60-
// }
61-
// if (m.event === 'initialized') {
62-
// initializedReceived();
63-
// }
64-
// if (m.command === 'configurationDone') {
65-
// configurationDoneReceived();
66-
// }
67-
// }
68-
// })
69-
// }));
70-
71-
// const capabilitiesPromise = new Promise<void>(resolve => capabilitiesReceived = resolve);
72-
// const initializedPromise = new Promise<void>(resolve => initializedReceived = resolve);
73-
// const configurationDonePromise = new Promise<void>(resolve => configurationDoneReceived = resolve);
74-
// await commands.executeCommand('workbench.action.debug.start');
75-
// await capabilitiesPromise;
76-
// await initializedPromise;
77-
// await configurationDonePromise;
78-
79-
// assert.notEqual(debug.activeDebugSession, undefined);
80-
// assert.equal(debug.activeDebugSession?.name, 'Launch debug.js');
81-
82-
// await firstVariablesRetrieved;
83-
// assert.equal(stoppedEvents, 1);
84-
85-
// const secondVariablesRetrieved = new Promise<void>(resolve => variablesReceived = resolve);
86-
// await commands.executeCommand('workbench.action.debug.stepOver');
87-
// await secondVariablesRetrieved;
88-
// assert.equal(stoppedEvents, 2);
89-
// const editor = window.activeTextEditor;
90-
// assert.notEqual(editor, undefined);
91-
// assert.equal(basename(editor!.document.fileName), 'debug.js');
92-
93-
// const thirdVariablesRetrieved = new Promise<void>(resolve => variablesReceived = resolve);
94-
// await commands.executeCommand('workbench.action.debug.stepOver');
95-
// await thirdVariablesRetrieved;
96-
// assert.equal(stoppedEvents, 3);
97-
98-
// const fourthVariablesRetrieved = new Promise<void>(resolve => variablesReceived = resolve);
99-
// await commands.executeCommand('workbench.action.debug.stepInto');
100-
// await fourthVariablesRetrieved;
101-
// assert.equal(stoppedEvents, 4);
102-
103-
// const fifthVariablesRetrieved = new Promise<void>(resolve => variablesReceived = resolve);
104-
// await commands.executeCommand('workbench.action.debug.stepOut');
105-
// await fifthVariablesRetrieved;
106-
// assert.equal(stoppedEvents, 5);
107-
108-
// let sessionTerminated: () => void;
109-
// toDispose.push(debug.onDidTerminateDebugSession(() => {
110-
// sessionTerminated();
111-
// }));
112-
// const sessionTerminatedPromise = new Promise<void>(resolve => sessionTerminated = resolve);
113-
// await commands.executeCommand('workbench.action.debug.stop');
114-
// await sessionTerminatedPromise;
115-
// assert.equal(debug.activeDebugSession, undefined);
116-
117-
// disposeAll(toDispose);
118-
// });
40+
test('start debugging', async function () {
41+
assert.equal(debug.activeDebugSession, undefined);
42+
let stoppedEvents = 0;
43+
let variablesReceived: () => void;
44+
let capabilitiesReceived: () => void;
45+
let initializedReceived: () => void;
46+
let configurationDoneReceived: () => void;
47+
48+
const firstVariablesRetrieved = new Promise<void>(resolve => variablesReceived = resolve);
49+
const toDispose: Disposable[] = [];
50+
toDispose.push(debug.registerDebugAdapterTrackerFactory('node2', {
51+
createDebugAdapterTracker: () => ({
52+
onDidSendMessage: m => {
53+
if (m.event === 'stopped') {
54+
stoppedEvents++;
55+
}
56+
if (m.type === 'response' && m.command === 'variables') {
57+
variablesReceived();
58+
}
59+
if (m.event === 'capabilities') {
60+
capabilitiesReceived();
61+
}
62+
if (m.event === 'initialized') {
63+
initializedReceived();
64+
}
65+
if (m.command === 'configurationDone') {
66+
configurationDoneReceived();
67+
}
68+
}
69+
})
70+
}));
71+
72+
const capabilitiesPromise = new Promise<void>(resolve => capabilitiesReceived = resolve);
73+
const initializedPromise = new Promise<void>(resolve => initializedReceived = resolve);
74+
const configurationDonePromise = new Promise<void>(resolve => configurationDoneReceived = resolve);
75+
// Do not await debug start to return due to https://github.com/microsoft/vscode/issues/90134
76+
debug.startDebugging(workspace.workspaceFolders![0], 'Launch debug.js');
77+
await capabilitiesPromise;
78+
await initializedPromise;
79+
await configurationDonePromise;
80+
81+
assert.notEqual(debug.activeDebugSession, undefined);
82+
assert.equal(debug.activeDebugSession?.name, 'Launch debug.js');
83+
84+
await firstVariablesRetrieved;
85+
assert.equal(stoppedEvents, 1);
86+
87+
const secondVariablesRetrieved = new Promise<void>(resolve => variablesReceived = resolve);
88+
await commands.executeCommand('workbench.action.debug.stepOver');
89+
await secondVariablesRetrieved;
90+
assert.equal(stoppedEvents, 2);
91+
const editor = window.activeTextEditor;
92+
assert.notEqual(editor, undefined);
93+
assert.equal(basename(editor!.document.fileName), 'debug.js');
94+
95+
const thirdVariablesRetrieved = new Promise<void>(resolve => variablesReceived = resolve);
96+
await commands.executeCommand('workbench.action.debug.stepOver');
97+
await thirdVariablesRetrieved;
98+
assert.equal(stoppedEvents, 3);
99+
100+
const fourthVariablesRetrieved = new Promise<void>(resolve => variablesReceived = resolve);
101+
await commands.executeCommand('workbench.action.debug.stepInto');
102+
await fourthVariablesRetrieved;
103+
assert.equal(stoppedEvents, 4);
104+
105+
const fifthVariablesRetrieved = new Promise<void>(resolve => variablesReceived = resolve);
106+
await commands.executeCommand('workbench.action.debug.stepOut');
107+
await fifthVariablesRetrieved;
108+
assert.equal(stoppedEvents, 5);
109+
110+
let sessionTerminated: () => void;
111+
toDispose.push(debug.onDidTerminateDebugSession(() => {
112+
sessionTerminated();
113+
}));
114+
const sessionTerminatedPromise = new Promise<void>(resolve => sessionTerminated = resolve);
115+
await commands.executeCommand('workbench.action.debug.stop');
116+
await sessionTerminatedPromise;
117+
assert.equal(debug.activeDebugSession, undefined);
118+
119+
disposeAll(toDispose);
120+
});
119121

120122
test('start debugging failure', async function () {
121123
let errorCount = 0;

src/vs/editor/contrib/find/findWidget.ts

Lines changed: 13 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,7 @@ const NLS_REPLACE_ALL_BTN_LABEL = nls.localize('label.replaceAllButton', "Replac
5656
const NLS_TOGGLE_REPLACE_MODE_BTN_LABEL = nls.localize('label.toggleReplaceButton', "Toggle Replace mode");
5757
const NLS_MATCHES_COUNT_LIMIT_TITLE = nls.localize('title.matchesCountLimit', "Only the first {0} results are highlighted, but all find operations work on the entire text.", MATCHES_LIMIT);
5858
const NLS_MATCHES_LOCATION = nls.localize('label.matchesLocation', "{0} of {1}");
59-
const NLS_NO_RESULTS = nls.localize('label.noResults', "No Results");
59+
const NLS_NO_RESULTS = nls.localize('label.noResults', "No results");
6060

6161
const FIND_WIDGET_INITIAL_WIDTH = 419;
6262
const PART_WIDTH = 275;
@@ -415,11 +415,19 @@ export class FindWidget extends Widget implements IOverlayWidget, IHorizontalSas
415415
if (label === NLS_NO_RESULTS) {
416416
return searchString === ''
417417
? nls.localize('ariaSearchNoResultEmpty', "{0} found", label)
418-
: nls.localize('ariaSearchNoResult', "{0} found for {1}", label, searchString);
418+
: nls.localize('ariaSearchNoResult', "{0} found for '{1}'", label, searchString);
419419
}
420-
return currentMatch
421-
? nls.localize('ariaSearchNoResultWithLineNum', "{0} found for {1} at {2}", label, searchString, currentMatch.startLineNumber + ':' + currentMatch.startColumn)
422-
: nls.localize('ariaSearchNoResultWithLineNumNoCurrentMatch', "{0} found for {1}", label, searchString);
420+
if (currentMatch) {
421+
const ariaLabel = nls.localize('ariaSearchNoResultWithLineNum', "{0} found for '{1}' at {2}", label, searchString, currentMatch.startLineNumber + ':' + currentMatch.startColumn);
422+
const lineContent = this._codeEditor.getModel()?.getLineContent(currentMatch.startLineNumber);
423+
if (lineContent) {
424+
return `${lineContent} ${ariaLabel}`;
425+
}
426+
427+
return ariaLabel;
428+
}
429+
430+
return nls.localize('ariaSearchNoResultWithLineNumNoCurrentMatch', "{0} found for '{1}'", label, searchString);
423431
}
424432

425433
/**

src/vs/editor/contrib/gotoSymbol/link/goToDefinitionAtPosition.ts

Lines changed: 14 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,9 @@ import { Position } from 'vs/editor/common/core/position';
2828
import { withNullAsUndefined } from 'vs/base/common/types';
2929
import { IKeyboardEvent } from 'vs/base/browser/keyboardEvent';
3030
import { EditorOption } from 'vs/editor/common/config/editorOptions';
31+
import { PeekContext } from 'vs/editor/contrib/peekView/peekView';
32+
import { IContextKeyService } from 'vs/platform/contextkey/common/contextkey';
33+
import { ServicesAccessor } from 'vs/platform/instantiation/common/instantiation';
3134

3235
export class GotoDefinitionAtPositionEditorContribution implements IEditorContribution {
3336

@@ -335,9 +338,17 @@ export class GotoDefinitionAtPositionEditorContribution implements IEditorContri
335338

336339
private gotoDefinition(position: Position, openToSide: boolean): Promise<any> {
337340
this.editor.setPosition(position);
338-
const openInPeek = this.editor.getOption(EditorOption.definitionLinkOpensInPeek);
339-
const action = new DefinitionAction({ openToSide, openInPeek: openInPeek, muteMessage: true }, { alias: '', label: '', id: '', precondition: undefined });
340-
return this.editor.invokeWithinContext(accessor => action.run(accessor, this.editor));
341+
const definitionLinkOpensInPeek = this.editor.getOption(EditorOption.definitionLinkOpensInPeek);
342+
return this.editor.invokeWithinContext((accessor) => {
343+
const canPeek = definitionLinkOpensInPeek && !this.isInPeekEditor(accessor);
344+
const action = new DefinitionAction({ openToSide, openInPeek: canPeek, muteMessage: true }, { alias: '', label: '', id: '', precondition: undefined });
345+
return action.run(accessor, this.editor);
346+
});
347+
}
348+
349+
private isInPeekEditor(accessor: ServicesAccessor): boolean | undefined {
350+
const contextKeyService = accessor.get(IContextKeyService);
351+
return PeekContext.inPeekEditor.getValue(contextKeyService);
341352
}
342353

343354
public dispose(): void {

0 commit comments

Comments
 (0)