提交 94af79ff 编写于 作者: I isidor

debug: more precise handling of presentationHints

fixes #28939
上级 709211c2
......@@ -184,6 +184,7 @@ export interface IScope extends IExpressionContainer {
export interface IStackFrame extends ITreeElement {
thread: IThread;
name: string;
presentationHint: string;
frameId: number;
range: IRange;
source: Source;
......
......@@ -335,6 +335,7 @@ export class StackFrame implements IStackFrame {
public frameId: number,
public source: Source,
public name: string,
public presentationHint: string,
public range: IRange,
private index: number
) {
......@@ -458,16 +459,14 @@ export class Thread implements IThread {
}
return response.body.stackFrames.map((rsf, index) => {
let source = new Source(rsf.source, rsf.source ? rsf.source.presentationHint : rsf.presentationHint);
let source = new Source(rsf.source);
if (this.process.sources.has(source.uri.toString())) {
const alreadyCreatedSource = this.process.sources.get(source.uri.toString());
alreadyCreatedSource.presentationHint = source.presentationHint;
source = alreadyCreatedSource;
source = this.process.sources.get(source.uri.toString());
} else {
this.process.sources.set(source.uri.toString(), source);
}
return new StackFrame(this, rsf.id, source, rsf.name, new Range(
return new StackFrame(this, rsf.id, source, rsf.name, rsf.presentationHint, new Range(
rsf.line,
rsf.column,
rsf.endLine,
......
......@@ -14,7 +14,7 @@ export class Source {
public uri: uri;
public available: boolean;
constructor(public raw: DebugProtocol.Source, public presentationHint: string) {
constructor(public raw: DebugProtocol.Source) {
if (!raw) {
this.raw = { name: UNKNOWN_SOURCE_LABEL };
}
......@@ -31,6 +31,10 @@ export class Source {
return this.raw.origin;
}
public get presentationHint() {
return this.raw.presentationHint;
}
public get reference() {
return this.raw.sourceReference;
}
......
......@@ -544,9 +544,9 @@ export class CallStackRenderer implements IRenderer {
}
private renderStackFrame(stackFrame: debug.IStackFrame, data: IStackFrameTemplateData): void {
dom.toggleClass(data.stackFrame, 'disabled', stackFrame.source.presentationHint === 'deemphasize');
dom.toggleClass(data.stackFrame, 'label', stackFrame.source.presentationHint === 'label');
dom.toggleClass(data.stackFrame, 'subtle', stackFrame.source.presentationHint === 'subtle');
dom.toggleClass(data.stackFrame, 'disabled', !stackFrame.source.available || stackFrame.source.presentationHint === 'deemphasize');
dom.toggleClass(data.stackFrame, 'label', stackFrame.presentationHint === 'label');
dom.toggleClass(data.stackFrame, 'subtle', stackFrame.presentationHint === 'subtle');
data.file.title = stackFrame.source.raw.path || stackFrame.source.name;
if (stackFrame.source.raw.origin) {
......
......@@ -10,30 +10,30 @@ import { Source } from 'vs/workbench/parts/debug/common/debugSource';
suite('Debug - Source', () => {
test('from raw source', () => {
const rawSource = {
const source = new Source({
name: 'zz',
path: '/xx/yy/zz',
sourceReference: 0
};
const source = new Source(rawSource, 'label');
sourceReference: 0,
presentationHint: 'emphasize'
});
assert.equal(source.presentationHint, 'label');
assert.equal(source.name, rawSource.name);
assert.equal(source.name, 'zz');
assert.equal(source.inMemory, false);
assert.equal(source.reference, rawSource.sourceReference);
assert.equal(source.uri.toString(), uri.file(rawSource.path).toString());
assert.equal(source.reference, 0);
assert.equal(source.uri.toString(), uri.file('/xx/yy/zz').toString());
});
test('from raw internal source', () => {
const rawSource = {
const source = new Source({
name: 'internalModule.js',
sourceReference: 11
};
const source = new Source(rawSource, 'deemphasize');
sourceReference: 11,
presentationHint: 'deemphasize'
});
assert.equal(source.presentationHint, 'deemphasize');
assert.equal(source.name, rawSource.name);
assert.equal(source.name, 'internalModule.js');
assert.equal(source.inMemory, true);
assert.equal(source.reference, rawSource.sourceReference);
assert.equal(source.reference, 11);
});
});
......@@ -25,7 +25,7 @@ suite('Debug - View Model', () => {
const mockSession = new MockSession();
const process = new Process({ name: 'mockProcess', type: 'node', request: 'launch' }, mockSession);
const thread = new Thread(process, 'myThread', 1);
const frame = new StackFrame(thread, 1, null, 'app.js', { startColumn: 1, startLineNumber: 1, endColumn: undefined, endLineNumber: undefined }, 0);
const frame = new StackFrame(thread, 1, null, 'app.js', 'normal', { startColumn: 1, startLineNumber: 1, endColumn: undefined, endLineNumber: undefined }, 0);
model.setFocusedStackFrame(frame, process);
assert.equal(model.focusedStackFrame.getId(), frame.getId());
......
......@@ -304,7 +304,7 @@ suite('Debug - Model', () => {
assert.equal(model.getWatchExpressions().length, 0);
const process = new Process({ name: 'mockProcess', type: 'node', request: 'launch' }, rawSession);
const thread = new Thread(process, 'mockthread', 1);
const stackFrame = new StackFrame(thread, 1, null, 'app.js', { startLineNumber: 1, startColumn: 1, endLineNumber: undefined, endColumn: undefined }, 0);
const stackFrame = new StackFrame(thread, 1, null, 'app.js', 'normal', { startLineNumber: 1, startColumn: 1, endLineNumber: undefined, endColumn: undefined }, 0);
model.addWatchExpression(process, stackFrame, 'console').done();
model.addWatchExpression(process, stackFrame, 'console').done();
let watchExpressions = model.getWatchExpressions();
......@@ -332,7 +332,7 @@ suite('Debug - Model', () => {
assert.equal(model.getReplElements().length, 0);
const process = new Process({ name: 'mockProcess', type: 'node', request: 'launch' }, rawSession);
const thread = new Thread(process, 'mockthread', 1);
const stackFrame = new StackFrame(thread, 1, null, 'app.js', { startLineNumber: 1, startColumn: 1, endLineNumber: 1, endColumn: 10 }, 1);
const stackFrame = new StackFrame(thread, 1, null, 'app.js', 'normal', { startLineNumber: 1, startColumn: 1, endLineNumber: 1, endColumn: 10 }, 1);
model.addReplExpression(process, stackFrame, 'myVariable').done();
model.addReplExpression(process, stackFrame, 'myVariable').done();
model.addReplExpression(process, stackFrame, 'myVariable').done();
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册