mirror of
https://github.com/microsoft/vscode.git
synced 2026-05-30 20:25:40 +01:00
137 lines
6.2 KiB
TypeScript
137 lines
6.2 KiB
TypeScript
/*---------------------------------------------------------------------------------------------
|
|
* Copyright (c) Microsoft Corporation. All rights reserved.
|
|
* Licensed under the MIT License. See License.txt in the project root for license information.
|
|
*--------------------------------------------------------------------------------------------*/
|
|
|
|
import { URI } from 'vs/base/common/uri';
|
|
import { StorageScope, IStorageService, StorageTarget } from 'vs/platform/storage/common/storage';
|
|
import { ExceptionBreakpoint, Expression, Breakpoint, FunctionBreakpoint, DataBreakpoint } from 'vs/workbench/contrib/debug/common/debugModel';
|
|
import { IEvaluate, IExpression, IDebugModel } from 'vs/workbench/contrib/debug/common/debug';
|
|
import { ITextFileService } from 'vs/workbench/services/textfile/common/textfiles';
|
|
import { IUriIdentityService } from 'vs/workbench/services/uriIdentity/common/uriIdentity';
|
|
|
|
const DEBUG_BREAKPOINTS_KEY = 'debug.breakpoint';
|
|
const DEBUG_FUNCTION_BREAKPOINTS_KEY = 'debug.functionbreakpoint';
|
|
const DEBUG_DATA_BREAKPOINTS_KEY = 'debug.databreakpoint';
|
|
const DEBUG_EXCEPTION_BREAKPOINTS_KEY = 'debug.exceptionbreakpoint';
|
|
const DEBUG_WATCH_EXPRESSIONS_KEY = 'debug.watchexpressions';
|
|
const DEBUG_CHOSEN_ENVIRONMENTS_KEY = 'debug.chosenenvironment';
|
|
const DEBUG_UX_STATE_KEY = 'debug.uxstate';
|
|
|
|
export class DebugStorage {
|
|
constructor(
|
|
@IStorageService private readonly storageService: IStorageService,
|
|
@ITextFileService private readonly textFileService: ITextFileService,
|
|
@IUriIdentityService private readonly uriIdentityService: IUriIdentityService
|
|
) { }
|
|
|
|
loadDebugUxState(): 'simple' | 'default' {
|
|
return this.storageService.get(DEBUG_UX_STATE_KEY, StorageScope.WORKSPACE, 'default') as 'simple' | 'default';
|
|
}
|
|
|
|
storeDebugUxState(value: 'simple' | 'default'): void {
|
|
this.storageService.store(DEBUG_UX_STATE_KEY, value, StorageScope.WORKSPACE, StorageTarget.USER);
|
|
}
|
|
|
|
loadBreakpoints(): Breakpoint[] {
|
|
let result: Breakpoint[] | undefined;
|
|
try {
|
|
result = JSON.parse(this.storageService.get(DEBUG_BREAKPOINTS_KEY, StorageScope.WORKSPACE, '[]')).map((breakpoint: any) => {
|
|
return new Breakpoint(URI.parse(breakpoint.uri.external || breakpoint.source.uri.external), breakpoint.lineNumber, breakpoint.column, breakpoint.enabled, breakpoint.condition, breakpoint.hitCondition, breakpoint.logMessage, breakpoint.adapterData, this.textFileService, this.uriIdentityService);
|
|
});
|
|
} catch (e) { }
|
|
|
|
return result || [];
|
|
}
|
|
|
|
loadFunctionBreakpoints(): FunctionBreakpoint[] {
|
|
let result: FunctionBreakpoint[] | undefined;
|
|
try {
|
|
result = JSON.parse(this.storageService.get(DEBUG_FUNCTION_BREAKPOINTS_KEY, StorageScope.WORKSPACE, '[]')).map((fb: any) => {
|
|
return new FunctionBreakpoint(fb.name, fb.enabled, fb.hitCondition, fb.condition, fb.logMessage);
|
|
});
|
|
} catch (e) { }
|
|
|
|
return result || [];
|
|
}
|
|
|
|
loadExceptionBreakpoints(): ExceptionBreakpoint[] {
|
|
let result: ExceptionBreakpoint[] | undefined;
|
|
try {
|
|
result = JSON.parse(this.storageService.get(DEBUG_EXCEPTION_BREAKPOINTS_KEY, StorageScope.WORKSPACE, '[]')).map((exBreakpoint: any) => {
|
|
return new ExceptionBreakpoint(exBreakpoint.filter, exBreakpoint.label, exBreakpoint.enabled, exBreakpoint.supportsCondition, exBreakpoint.condition, exBreakpoint.description, exBreakpoint.conditionDescription);
|
|
});
|
|
} catch (e) { }
|
|
|
|
return result || [];
|
|
}
|
|
|
|
loadDataBreakpoints(): DataBreakpoint[] {
|
|
let result: DataBreakpoint[] | undefined;
|
|
try {
|
|
result = JSON.parse(this.storageService.get(DEBUG_DATA_BREAKPOINTS_KEY, StorageScope.WORKSPACE, '[]')).map((dbp: any) => {
|
|
return new DataBreakpoint(dbp.description, dbp.dataId, true, dbp.enabled, dbp.hitCondition, dbp.condition, dbp.logMessage, dbp.accessTypes, dbp.accessType);
|
|
});
|
|
} catch (e) { }
|
|
|
|
return result || [];
|
|
}
|
|
|
|
loadWatchExpressions(): Expression[] {
|
|
let result: Expression[] | undefined;
|
|
try {
|
|
result = JSON.parse(this.storageService.get(DEBUG_WATCH_EXPRESSIONS_KEY, StorageScope.WORKSPACE, '[]')).map((watchStoredData: { name: string, id: string }) => {
|
|
return new Expression(watchStoredData.name, watchStoredData.id);
|
|
});
|
|
} catch (e) { }
|
|
|
|
return result || [];
|
|
}
|
|
|
|
loadChosenEnvironments(): { [key: string]: string } {
|
|
return JSON.parse(this.storageService.get(DEBUG_CHOSEN_ENVIRONMENTS_KEY, StorageScope.WORKSPACE, '{}'));
|
|
}
|
|
|
|
storeChosenEnvironments(environments: { [key: string]: string }): void {
|
|
this.storageService.store(DEBUG_CHOSEN_ENVIRONMENTS_KEY, JSON.stringify(environments), StorageScope.WORKSPACE, StorageTarget.USER);
|
|
}
|
|
|
|
storeWatchExpressions(watchExpressions: (IExpression & IEvaluate)[]): void {
|
|
if (watchExpressions.length) {
|
|
this.storageService.store(DEBUG_WATCH_EXPRESSIONS_KEY, JSON.stringify(watchExpressions.map(we => ({ name: we.name, id: we.getId() }))), StorageScope.WORKSPACE, StorageTarget.USER);
|
|
} else {
|
|
this.storageService.remove(DEBUG_WATCH_EXPRESSIONS_KEY, StorageScope.WORKSPACE);
|
|
}
|
|
}
|
|
|
|
storeBreakpoints(debugModel: IDebugModel): void {
|
|
const breakpoints = debugModel.getBreakpoints();
|
|
if (breakpoints.length) {
|
|
this.storageService.store(DEBUG_BREAKPOINTS_KEY, JSON.stringify(breakpoints), StorageScope.WORKSPACE, StorageTarget.USER);
|
|
} else {
|
|
this.storageService.remove(DEBUG_BREAKPOINTS_KEY, StorageScope.WORKSPACE);
|
|
}
|
|
|
|
const functionBreakpoints = debugModel.getFunctionBreakpoints();
|
|
if (functionBreakpoints.length) {
|
|
this.storageService.store(DEBUG_FUNCTION_BREAKPOINTS_KEY, JSON.stringify(functionBreakpoints), StorageScope.WORKSPACE, StorageTarget.USER);
|
|
} else {
|
|
this.storageService.remove(DEBUG_FUNCTION_BREAKPOINTS_KEY, StorageScope.WORKSPACE);
|
|
}
|
|
|
|
const dataBreakpoints = debugModel.getDataBreakpoints().filter(dbp => dbp.canPersist);
|
|
if (dataBreakpoints.length) {
|
|
this.storageService.store(DEBUG_DATA_BREAKPOINTS_KEY, JSON.stringify(dataBreakpoints), StorageScope.WORKSPACE, StorageTarget.USER);
|
|
} else {
|
|
this.storageService.remove(DEBUG_DATA_BREAKPOINTS_KEY, StorageScope.WORKSPACE);
|
|
}
|
|
|
|
const exceptionBreakpoints = debugModel.getExceptionBreakpoints();
|
|
if (exceptionBreakpoints.length) {
|
|
this.storageService.store(DEBUG_EXCEPTION_BREAKPOINTS_KEY, JSON.stringify(exceptionBreakpoints), StorageScope.WORKSPACE, StorageTarget.USER);
|
|
} else {
|
|
this.storageService.remove(DEBUG_EXCEPTION_BREAKPOINTS_KEY, StorageScope.WORKSPACE);
|
|
}
|
|
}
|
|
}
|