提交 ea13f311 编写于 作者: R rajkumar42 提交者: Rajkumar Janakiraman

Incorporating code review comments.

上级 f4ad30a3
......@@ -104,30 +104,14 @@ export class DebugHoverWidget implements editorbrowser.IContentWidget {
return this.domNode;
}
public showAt(range: Range, hoveringOver: string, focus: boolean): TPromise<void> {
const pos = range.getStartPosition();
const model = this.editor.getModel();
const focusedStackFrame = this.debugService.getViewModel().getFocusedStackFrame();
if (!hoveringOver || !focusedStackFrame || (focusedStackFrame.source.uri.toString() !== model.uri.toString())) {
return;
}
private getHoveredExpression(lineContent: string, range: Range) : Range {
let matchingExpression = undefined;
let startOffset = 0;
const session = this.debugService.getActiveSession();
const canEvaluateForHovers: boolean = session.configuration.capabilities.supportsEvaluateForHovers;
const lineContent = model.getLineContent(pos.lineNumber);
let evaluatedExpression : TPromise<Expression> = undefined;
let matchingExpression: string = undefined;
let startOffset: number = 0;
if (canEvaluateForHovers) {
// If the debug adapter supports evaluation-based-hover, we need to try and guess what the expression under the mouse cursor is.
// Someday it might be nice if the language service could somehow provide this.
// But this code attempts to approximate the answer for a variety of languages.
// Some example supported expressions: myVar.prop, a.b.c.d, myVar?.prop, myVar->prop, MyClass::StaticProp, *myVar
// Match any character except a set of characters which often break interesting sub-expressions
let expression: RegExp = /([^()\[\]{}<>\s+\-/%~#^;=|,`!]|\->)+/g;
let result: RegExpExecArray = undefined;
let result = undefined;
// First find the full expression under the cursor
while (result = expression.exec(lineContent)) {
......@@ -145,7 +129,7 @@ export class DebugHoverWidget implements editorbrowser.IContentWidget {
// For example in expression 'a.b.c.d', if the focus was under 'b', 'a.b' would be evaluated.
if (matchingExpression) {
let subExpression: RegExp = /\w+/g;
let subExpressionResult: RegExpExecArray = undefined;
let subExpressionResult = undefined;
while (subExpressionResult = subExpression.exec(matchingExpression)) {
let subEnd = subExpressionResult.index + 1 + startOffset + subExpressionResult[0].length;
if (subEnd >= range.endColumn) {
......@@ -158,6 +142,31 @@ export class DebugHoverWidget implements editorbrowser.IContentWidget {
}
}
return matchingExpression ?
new Range(range.startLineNumber, startOffset, range.endLineNumber, startOffset + matchingExpression.length - 1) :
new Range(range.startLineNumber, 0, range.endLineNumber, 0);
}
public showAt(range: Range, hoveringOver: string, focus: boolean): TPromise<void> {
const pos = range.getStartPosition();
const model = this.editor.getModel();
const focusedStackFrame = this.debugService.getViewModel().getFocusedStackFrame();
if (!hoveringOver || !focusedStackFrame || (focusedStackFrame.source.uri.toString() !== model.uri.toString())) {
return;
}
const session = this.debugService.getActiveSession();
const canEvaluateForHovers: boolean = session.configuration.capabilities.supportsEvaluateForHovers;
const lineContent = model.getLineContent(pos.lineNumber);
let evaluatedExpression = undefined;
let matchingExpression = undefined;
let startOffset = 0;
if (canEvaluateForHovers) {
let expressionRange = this.getHoveredExpression(lineContent, range);
startOffset = expressionRange.startColumn;
let matchingExpression = lineContent.substring(expressionRange.startColumn - 1, expressionRange.endColumn);
evaluatedExpression = this.getExpressionSupportingEvaluate(session, matchingExpression);
}
else {
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册