Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
microsoft
GitHub Repository: microsoft/vscode
Path: blob/main/src/vs/workbench/contrib/accessibilitySignals/browser/accessibilitySignalDebuggerContribution.ts
3296 views
1
/*---------------------------------------------------------------------------------------------
2
* Copyright (c) Microsoft Corporation. All rights reserved.
3
* Licensed under the MIT License. See License.txt in the project root for license information.
4
*--------------------------------------------------------------------------------------------*/
5
6
import { Disposable, IDisposable, toDisposable } from '../../../../base/common/lifecycle.js';
7
import { autorunWithStore, observableFromEvent } from '../../../../base/common/observable.js';
8
import { IAccessibilitySignalService, AccessibilitySignal, AccessibilitySignalService } from '../../../../platform/accessibilitySignal/browser/accessibilitySignalService.js';
9
import { IWorkbenchContribution } from '../../../common/contributions.js';
10
import { IDebugService, IDebugSession } from '../../debug/common/debug.js';
11
12
export class AccessibilitySignalLineDebuggerContribution
13
extends Disposable
14
implements IWorkbenchContribution {
15
16
constructor(
17
@IDebugService debugService: IDebugService,
18
@IAccessibilitySignalService private readonly accessibilitySignalService: AccessibilitySignalService,
19
) {
20
super();
21
22
const isEnabled = observableFromEvent(this,
23
accessibilitySignalService.onSoundEnabledChanged(AccessibilitySignal.onDebugBreak),
24
() => accessibilitySignalService.isSoundEnabled(AccessibilitySignal.onDebugBreak)
25
);
26
this._register(autorunWithStore((reader, store) => {
27
/** @description subscribe to debug sessions */
28
if (!isEnabled.read(reader)) {
29
return;
30
}
31
32
const sessionDisposables = new Map<IDebugSession, IDisposable>();
33
store.add(toDisposable(() => {
34
sessionDisposables.forEach(d => d.dispose());
35
sessionDisposables.clear();
36
}));
37
38
store.add(
39
debugService.onDidNewSession((session) =>
40
sessionDisposables.set(session, this.handleSession(session))
41
)
42
);
43
44
store.add(debugService.onDidEndSession(({ session }) => {
45
sessionDisposables.get(session)?.dispose();
46
sessionDisposables.delete(session);
47
}));
48
49
debugService
50
.getModel()
51
.getSessions()
52
.forEach((session) =>
53
sessionDisposables.set(session, this.handleSession(session))
54
);
55
}));
56
}
57
58
private handleSession(session: IDebugSession): IDisposable {
59
return session.onDidChangeState(e => {
60
const stoppedDetails = session.getStoppedDetails();
61
const BREAKPOINT_STOP_REASON = 'breakpoint';
62
if (stoppedDetails && stoppedDetails.reason === BREAKPOINT_STOP_REASON) {
63
this.accessibilitySignalService.playSignal(AccessibilitySignal.onDebugBreak);
64
}
65
});
66
}
67
}
68
69