/*--------------------------------------------------------------------------------------------- * Copyright (c) Microsoft Corporation. All rights reserved. * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ import nls = require('vs/nls'); import uri from 'vs/base/common/uri'; import { TPromise, Promise } from 'vs/base/common/winjs.base'; import ee = require('vs/base/common/eventEmitter'); import severity from 'vs/base/common/severity'; import { createDecorator, ServiceIdentifier } from 'vs/platform/instantiation/common/instantiation'; import editor = require('vs/editor/common/editorCommon'); import { Source } from 'vs/workbench/parts/debug/common/debugSource'; export var VIEWLET_ID = 'workbench.view.debug'; export var DEBUG_SERVICE_ID = 'debugService'; export var CONTEXT_IN_DEBUG_MODE = 'inDebugMode'; // Raw export interface IRawModelUpdate { threadId: number; thread?: DebugProtocol.Thread; callStack?: DebugProtocol.StackFrame[]; exception?: boolean; } // Model export interface ITreeElement { getId(): string; } export interface IExpressionContainer extends ITreeElement { reference: number; getChildren(debugService: IDebugService): TPromise; } export interface IExpression extends ITreeElement, IExpressionContainer { name: string; value: string; } export interface IThread extends ITreeElement { threadId: number; name: string; callStack: IStackFrame[]; exception: boolean; } export interface IScope extends IExpressionContainer { name: string; expensive: boolean; } export interface IStackFrame extends ITreeElement { threadId: number; name: string; lineNumber: number; column: number; frameId: number; source: Source; getScopes(debugService: IDebugService): TPromise; } export interface IEnablement extends ITreeElement { enabled: boolean; } export interface IBreakpoint extends IEnablement { source: Source; lineNumber: number; desiredLineNumber: number; condition: string; } export interface IFunctionBreakpoint extends IEnablement { functionName: string; } export interface IExceptionBreakpoint extends IEnablement { name: string; } // Events export var ModelEvents = { BREAKPOINTS_UPDATED: 'BreakpointsUpdated', CALLSTACK_UPDATED: 'CallStackUpdated', WATCH_EXPRESSIONS_UPDATED: 'WatchExpressionsUpdated', REPL_ELEMENTS_UPDATED: 'ReplElementsUpdated' }; export var ViewModelEvents = { FOCUSED_STACK_FRAME_UPDATED: 'FocusedStackFrameUpdated', SELECTED_EXPRESSION_UPDATED: 'SelectedExpressionUpdated' }; export var ServiceEvents = { STATE_CHANGED: 'StateChanged' }; export var SessionEvents = { INITIALIZED: 'initialized', STOPPED: 'stopped', DEBUGEE_TERMINATED: 'terminated', SERVER_EXIT: 'exit', CONTINUED: 'continued', THREAD: 'thread', OUTPUT: 'output' }; // Model interfaces export interface IViewModel extends ee.EventEmitter { getFocusedStackFrame(): IStackFrame; getSelectedExpression(): IExpression; getFocusedThreadId(): number; setSelectedExpression(expression: IExpression); } export interface IModel extends ee.IEventEmitter, ITreeElement { getThreads(): { [reference: number]: IThread; }; getBreakpoints(): IBreakpoint[]; areBreakpointsActivated(): boolean; getFunctionBreakpoints(): IFunctionBreakpoint[]; getExceptionBreakpoints(): IExceptionBreakpoint[]; getWatchExpressions(): IExpression[]; getReplElements(): ITreeElement[]; } // Service enums export enum State { Disabled, Inactive, Initializing, Stopped, Running } // Service interfaces export interface IGlobalConfig { version: string; debugServer: number; configurations: IConfig[]; } export interface IConfig { name: string; type: string; request: string; program: string; stopOnEntry: boolean; args: string[]; cwd: string; runtimeExecutable: string; runtimeArgs: string[]; env: { [key: string]: string; }; sourceMaps: boolean; outDir: string; address: string; port: number; preLaunchTask: string; externalConsole: boolean; debugServer: number; extensionHostData: any; } export interface IRawEnvAdapter { type?: string; label?: string; program?: string; args?: string[]; runtime?: string; runtimeArgs?: string[]; } export interface IRawAdapter extends IRawEnvAdapter { enableBreakpointsFor?: { languageIds: string[] }; configurationAttributes?: any; initialConfigurations?: any[]; win?: IRawEnvAdapter; osx?: IRawEnvAdapter; linux?: IRawEnvAdapter; } export interface IRawDebugSession extends ee.EventEmitter { getType(): string; disconnect(restart?: boolean): TPromise; next(args: DebugProtocol.NextArguments): TPromise; stepIn(args: DebugProtocol.StepInArguments): TPromise; stepOut(args: DebugProtocol.StepOutArguments): TPromise; continue(args: DebugProtocol.ContinueArguments): TPromise; pause(args: DebugProtocol.PauseArguments): TPromise; scopes(args: DebugProtocol.ScopesArguments): TPromise; variables(args: DebugProtocol.VariablesArguments): TPromise; evaluate(args: DebugProtocol.EvaluateArguments): TPromise; } export var IDebugService = createDecorator(DEBUG_SERVICE_ID); export interface IDebugService extends ee.IEventEmitter { serviceId: ServiceIdentifier; getState(): State; canSetBreakpointsIn(model: editor.IModel, lineNumber: number): boolean; getConfiguration(): IConfig; setConfiguration(name: string): Promise; openConfigFile(sideBySide: boolean): TPromise; loadLaunchConfig(): TPromise; setFocusedStackFrameAndEvaluate(focusedStackFrame: IStackFrame): void; setBreakpointsForModel(modelUri: uri, data: { lineNumber: number; enabled: boolean; condition: string }[]): Promise; toggleBreakpoint(modelUri: uri, lineNumber: number, condition?: string): Promise; enableOrDisableAllBreakpoints(enabled: boolean): Promise; toggleEnablement(element: IEnablement): Promise; clearBreakpoints(modelUri?: uri): Promise; toggleBreakpointsActivated(): Promise; sendAllBreakpoints(): Promise; addFunctionBreakpoint(functionName?: string): Promise; removeFunctionBreakpoint(id: string): Promise; addReplExpression(name: string): Promise; clearReplExpressions(): void; logToRepl(value: string, severity?: severity): void; logToRepl(value: { [key: string]: any }, severity?: severity): void; appendReplOutput(value: string, severity?: severity): void; addWatchExpression(name?: string): Promise; renameWatchExpression(id: string, newName: string): Promise; clearWatchExpressions(id?: string): void; createSession(): Promise; restartSession(): Promise; getActiveSession(): IRawDebugSession; getModel(): IModel; getViewModel(): IViewModel; openOrRevealEditor(source: Source, lineNumber: number, preserveFocus: boolean, sideBySide: boolean): Promise; revealRepl(inBackground?:boolean): Promise; } // Utils var _formatPIIRegexp = /{([^}]+)}/g; export function formatPII(value:string, excludePII: boolean, args: {[key: string]: string}): string { return value.replace(_formatPIIRegexp, function(match, group) { if (excludePII && group.length > 0 && group[0] !== '_') { return match; } return args.hasOwnProperty(group) ? args[group] : match; }) }