Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
xxadev
vscode
提交
ccdaf127
V
vscode
项目概览
xxadev
/
vscode
与 Fork 源项目一致
从无法访问的项目Fork
通知
2
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
V
vscode
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
ccdaf127
编写于
1月 31, 2019
作者:
I
isidor
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
debug: dighlights in trees
上级
7cb0746b
变更
9
隐藏空白更改
内联
并排
Showing
9 changed file
with
98 addition
and
70 deletion
+98
-70
src/vs/workbench/parts/debug/browser/baseDebugView.ts
src/vs/workbench/parts/debug/browser/baseDebugView.ts
+18
-10
src/vs/workbench/parts/debug/browser/debugActions.ts
src/vs/workbench/parts/debug/browser/debugActions.ts
+1
-1
src/vs/workbench/parts/debug/browser/loadedScriptsView.ts
src/vs/workbench/parts/debug/browser/loadedScriptsView.ts
+9
-7
src/vs/workbench/parts/debug/electron-browser/callStackView.ts
...s/workbench/parts/debug/electron-browser/callStackView.ts
+24
-19
src/vs/workbench/parts/debug/electron-browser/debugHover.ts
src/vs/workbench/parts/debug/electron-browser/debugHover.ts
+1
-1
src/vs/workbench/parts/debug/electron-browser/repl.ts
src/vs/workbench/parts/debug/electron-browser/repl.ts
+19
-10
src/vs/workbench/parts/debug/electron-browser/variablesView.ts
...s/workbench/parts/debug/electron-browser/variablesView.ts
+10
-6
src/vs/workbench/parts/debug/electron-browser/watchExpressionsView.ts
...ench/parts/debug/electron-browser/watchExpressionsView.ts
+6
-8
src/vs/workbench/parts/debug/test/browser/baseDebugView.test.ts
.../workbench/parts/debug/test/browser/baseDebugView.test.ts
+10
-8
未找到文件。
src/vs/workbench/parts/debug/browser/baseDebugView.ts
浏览文件 @
ccdaf127
...
...
@@ -14,6 +14,8 @@ import { IThemeService } from 'vs/platform/theme/common/themeService';
import
{
attachInputBoxStyler
}
from
'
vs/platform/theme/common/styler
'
;
import
{
KeyCode
}
from
'
vs/base/common/keyCodes
'
;
import
{
IKeyboardEvent
}
from
'
vs/base/browser/keyboardEvent
'
;
import
{
HighlightedLabel
,
IHighlight
}
from
'
vs/base/browser/ui/highlightedlabel/highlightedLabel
'
;
import
{
FuzzyScore
,
createMatches
}
from
'
vs/base/common/filters
'
;
export
const
MAX_VALUE_RENDER_LENGTH_IN_VIEWLET
=
1024
;
export
const
twistiePixels
=
20
;
...
...
@@ -33,6 +35,7 @@ export interface IVariableTemplateData {
expression
:
HTMLElement
;
name
:
HTMLElement
;
value
:
HTMLElement
;
label
:
HighlightedLabel
;
}
export
function
renderViewTree
(
container
:
HTMLElement
):
HTMLElement
{
...
...
@@ -88,11 +91,16 @@ export function renderExpressionValue(expressionOrValue: IExpression | string, c
}
}
export
function
renderVariable
(
variable
:
Variable
,
data
:
IVariableTemplateData
,
showChanged
:
boolean
):
void
{
export
function
renderVariable
(
variable
:
Variable
,
data
:
IVariableTemplateData
,
showChanged
:
boolean
,
highlights
:
IHighlight
[]
):
void
{
if
(
variable
.
available
)
{
data
.
name
.
textContent
=
replaceWhitespace
(
variable
.
name
);
data
.
name
.
title
=
variable
.
type
?
variable
.
type
:
variable
.
name
;
let
text
=
replaceWhitespace
(
variable
.
name
);
if
(
variable
.
value
&&
typeof
variable
.
name
===
'
string
'
)
{
text
+=
'
:
'
;
}
data
.
label
.
set
(
text
,
highlights
,
variable
.
type
?
variable
.
type
:
variable
.
name
);
dom
.
toggleClass
(
data
.
name
,
'
virtual
'
,
!!
variable
.
presentationHint
&&
variable
.
presentationHint
.
kind
===
'
virtual
'
);
}
else
if
(
variable
.
value
&&
typeof
variable
.
name
===
'
string
'
)
{
data
.
label
.
set
(
'
:
'
);
}
renderExpressionValue
(
variable
,
data
.
value
,
{
...
...
@@ -102,9 +110,6 @@ export function renderVariable(variable: Variable, data: IVariableTemplateData,
showHover
:
true
,
colorize
:
true
});
if
(
variable
.
value
&&
typeof
variable
.
name
===
'
string
'
)
{
data
.
name
.
textContent
+=
'
:
'
;
}
}
export
interface
IInputBoxOptions
{
...
...
@@ -122,9 +127,10 @@ export interface IExpressionTemplateData {
inputBoxContainer
:
HTMLElement
;
enableInputBox
(
expression
:
IExpression
,
options
:
IInputBoxOptions
);
toDispose
:
IDisposable
[];
label
:
HighlightedLabel
;
}
export
abstract
class
AbstractExpressionsRenderer
implements
ITreeRenderer
<
IExpression
,
void
,
IExpressionTemplateData
>
{
export
abstract
class
AbstractExpressionsRenderer
implements
ITreeRenderer
<
IExpression
,
FuzzyScore
,
IExpressionTemplateData
>
{
constructor
(
@
IDebugService
protected
debugService
:
IDebugService
,
...
...
@@ -139,6 +145,8 @@ export abstract class AbstractExpressionsRenderer implements ITreeRenderer<IExpr
data
.
expression
=
dom
.
append
(
container
,
$
(
'
.expression
'
));
data
.
name
=
dom
.
append
(
data
.
expression
,
$
(
'
span.name
'
));
data
.
value
=
dom
.
append
(
data
.
expression
,
$
(
'
span.value
'
));
data
.
label
=
new
HighlightedLabel
(
data
.
name
,
false
);
data
.
inputBoxContainer
=
dom
.
append
(
data
.
expression
,
$
(
'
.inputBoxContainer
'
));
data
.
enableInputBox
=
(
expression
:
IExpression
,
options
:
IInputBoxOptions
)
=>
{
...
...
@@ -196,16 +204,16 @@ export abstract class AbstractExpressionsRenderer implements ITreeRenderer<IExpr
return
data
;
}
renderElement
(
node
:
ITreeNode
<
IExpression
>
,
index
:
number
,
data
:
IExpressionTemplateData
):
void
{
renderElement
(
node
:
ITreeNode
<
IExpression
,
FuzzyScore
>
,
index
:
number
,
data
:
IExpressionTemplateData
):
void
{
const
{
element
}
=
node
;
if
(
element
===
this
.
debugService
.
getViewModel
().
getSelectedExpression
())
{
data
.
enableInputBox
(
element
,
this
.
getInputBoxOptions
(
element
));
}
else
{
this
.
renderExpression
(
element
,
data
);
this
.
renderExpression
(
element
,
data
,
createMatches
(
node
.
filterData
)
);
}
}
protected
abstract
renderExpression
(
expression
:
IExpression
,
data
:
IExpressionTemplateData
):
void
;
protected
abstract
renderExpression
(
expression
:
IExpression
,
data
:
IExpressionTemplateData
,
highlights
:
IHighlight
[]
):
void
;
protected
abstract
getInputBoxOptions
(
expression
:
IExpression
):
IInputBoxOptions
;
disposeTemplate
(
templateData
:
IExpressionTemplateData
):
void
{
...
...
src/vs/workbench/parts/debug/browser/debugActions.ts
浏览文件 @
ccdaf127
...
...
@@ -803,7 +803,7 @@ export class ReverseContinueAction extends AbstractDebugAction {
}
export
class
ReplCollapseAllAction
extends
CollapseAction2
{
constructor
(
tree
:
AsyncDataTree
<
any
,
any
>
,
private
toFocus
:
{
focus
():
void
;
})
{
constructor
(
tree
:
AsyncDataTree
<
any
,
any
,
any
>
,
private
toFocus
:
{
focus
():
void
;
})
{
super
(
tree
,
true
,
undefined
);
}
...
...
src/vs/workbench/parts/debug/browser/loadedScriptsView.ts
浏览文件 @
ccdaf127
...
...
@@ -33,6 +33,7 @@ import { WorkbenchAsyncDataTree, IListService, TreeResourceNavigator2 } from 'vs
import
{
IThemeService
}
from
'
vs/platform/theme/common/themeService
'
;
import
{
DebugContentProvider
}
from
'
vs/workbench/parts/debug/browser/debugContentProvider
'
;
import
{
dispose
}
from
'
vs/base/common/lifecycle
'
;
import
{
createMatches
,
FuzzyScore
}
from
'
vs/base/common/filters
'
;
const
SMART
=
true
;
...
...
@@ -363,7 +364,7 @@ export class LoadedScriptsView extends ViewletPanel {
private
treeContainer
:
HTMLElement
;
private
loadedScriptsItemType
:
IContextKey
<
string
>
;
private
tree
:
WorkbenchAsyncDataTree
<
LoadedScriptsItem
,
LoadedScriptsItem
>
;
private
tree
:
WorkbenchAsyncDataTree
<
LoadedScriptsItem
,
LoadedScriptsItem
,
FuzzyScore
>
;
private
treeLabels
:
ResourceLabels
;
private
changeScheduler
:
RunOnceScheduler
;
private
treeNeedsRefreshOnVisible
:
boolean
;
...
...
@@ -540,7 +541,7 @@ interface ILoadedScriptsItemTemplateData {
label
:
IResourceLabel
;
}
class
LoadedScriptsRenderer
implements
ITreeRenderer
<
BaseTreeItem
,
void
,
ILoadedScriptsItemTemplateData
>
{
class
LoadedScriptsRenderer
implements
ITreeRenderer
<
BaseTreeItem
,
FuzzyScore
,
ILoadedScriptsItemTemplateData
>
{
static
readonly
ID
=
'
lsrenderer
'
;
...
...
@@ -555,11 +556,11 @@ class LoadedScriptsRenderer implements ITreeRenderer<BaseTreeItem, void, ILoaded
renderTemplate
(
container
:
HTMLElement
):
ILoadedScriptsItemTemplateData
{
let
data
:
ILoadedScriptsItemTemplateData
=
Object
.
create
(
null
);
data
.
label
=
this
.
labels
.
create
(
container
);
data
.
label
=
this
.
labels
.
create
(
container
,
{
supportHighlights
:
true
}
);
return
data
;
}
renderElement
(
node
:
ITreeNode
<
BaseTreeItem
,
void
>
,
index
:
number
,
data
:
ILoadedScriptsItemTemplateData
):
void
{
renderElement
(
node
:
ITreeNode
<
BaseTreeItem
,
FuzzyScore
>
,
index
:
number
,
data
:
ILoadedScriptsItemTemplateData
):
void
{
const
element
=
node
.
element
;
...
...
@@ -589,6 +590,7 @@ class LoadedScriptsRenderer implements ITreeRenderer<BaseTreeItem, void, ILoaded
options
.
fileKind
=
FileKind
.
FOLDER
;
}
}
options
.
matches
=
createMatches
(
node
.
filterData
);
data
.
label
.
setResource
(
label
,
options
);
}
...
...
@@ -622,7 +624,7 @@ class LoadedSciptsAccessibilityProvider implements IAccessibilityProvider<Loaded
}
}
class
LoadedScriptsFilter
implements
ITreeFilter
<
BaseTreeItem
>
{
class
LoadedScriptsFilter
implements
ITreeFilter
<
BaseTreeItem
,
FuzzyScore
>
{
private
filterText
:
string
;
...
...
@@ -630,7 +632,7 @@ class LoadedScriptsFilter implements ITreeFilter<BaseTreeItem> {
this
.
filterText
=
filterText
;
}
filter
(
element
:
BaseTreeItem
,
parentVisibility
:
TreeVisibility
):
TreeFilterResult
<
void
>
{
filter
(
element
:
BaseTreeItem
,
parentVisibility
:
TreeVisibility
):
TreeFilterResult
<
FuzzyScore
>
{
if
(
!
this
.
filterText
)
{
return
TreeVisibility
.
Visible
;
...
...
@@ -645,4 +647,4 @@ class LoadedScriptsFilter implements ITreeFilter<BaseTreeItem> {
}
return
TreeVisibility
.
Recurse
;
}
}
\ No newline at end of file
}
src/vs/workbench/parts/debug/electron-browser/callStackView.ts
浏览文件 @
ccdaf127
...
...
@@ -31,6 +31,8 @@ import { ITreeRenderer, ITreeNode, ITreeContextMenuEvent, IAsyncDataSource } fro
import
{
TreeResourceNavigator2
,
WorkbenchAsyncDataTree
,
IListService
}
from
'
vs/platform/list/browser/listService
'
;
import
{
IThemeService
}
from
'
vs/platform/theme/common/themeService
'
;
import
{
onUnexpectedError
}
from
'
vs/base/common/errors
'
;
import
{
HighlightedLabel
}
from
'
vs/base/browser/ui/highlightedlabel/highlightedLabel
'
;
import
{
createMatches
,
FuzzyScore
}
from
'
vs/base/common/filters
'
;
const
$
=
dom
.
$
;
...
...
@@ -46,7 +48,7 @@ export class CallStackView extends ViewletPanel {
private
ignoreFocusStackFrameEvent
:
boolean
;
private
callStackItemType
:
IContextKey
<
string
>
;
private
dataSource
:
CallStackDataSource
;
private
tree
:
WorkbenchAsyncDataTree
<
IDebugModel
,
CallStackItem
>
;
private
tree
:
WorkbenchAsyncDataTree
<
IDebugModel
,
CallStackItem
,
FuzzyScore
>
;
private
contributedContextMenu
:
IMenu
;
constructor
(
...
...
@@ -328,6 +330,7 @@ interface IThreadTemplateData {
name
:
HTMLElement
;
state
:
HTMLElement
;
stateLabel
:
HTMLSpanElement
;
label
:
HighlightedLabel
;
}
interface
ISessionTemplateData
{
...
...
@@ -335,6 +338,7 @@ interface ISessionTemplateData {
name
:
HTMLElement
;
state
:
HTMLElement
;
stateLabel
:
HTMLSpanElement
;
label
:
HighlightedLabel
;
}
interface
IErrorTemplateData
{
...
...
@@ -347,13 +351,13 @@ interface ILabelTemplateData {
interface
IStackFrameTemplateData
{
stackFrame
:
HTMLElement
;
label
:
HTMLElement
;
file
:
HTMLElement
;
fileName
:
HTMLElement
;
lineNumber
:
HTMLElement
;
label
:
HighlightedLabel
;
}
class
SessionsRenderer
implements
ITreeRenderer
<
IDebugSession
,
void
,
ISessionTemplateData
>
{
class
SessionsRenderer
implements
ITreeRenderer
<
IDebugSession
,
FuzzyScore
,
ISessionTemplateData
>
{
static
readonly
ID
=
'
session
'
;
get
templateId
():
string
{
...
...
@@ -366,14 +370,15 @@ class SessionsRenderer implements ITreeRenderer<IDebugSession, void, ISessionTem
data
.
name
=
dom
.
append
(
data
.
session
,
$
(
'
.name
'
));
data
.
state
=
dom
.
append
(
data
.
session
,
$
(
'
.state
'
));
data
.
stateLabel
=
dom
.
append
(
data
.
state
,
$
(
'
span.label
'
));
data
.
label
=
new
HighlightedLabel
(
data
.
name
,
false
);
return
data
;
}
renderElement
(
element
:
ITreeNode
<
IDebugSession
,
void
>
,
index
:
number
,
data
:
ISessionTemplateData
):
void
{
renderElement
(
element
:
ITreeNode
<
IDebugSession
,
FuzzyScore
>
,
index
:
number
,
data
:
ISessionTemplateData
):
void
{
const
session
=
element
.
element
;
data
.
session
.
title
=
nls
.
localize
({
key
:
'
session
'
,
comment
:
[
'
Session is a noun
'
]
},
"
Session
"
);
data
.
name
.
textContent
=
session
.
getLabel
(
);
data
.
label
.
set
(
session
.
getLabel
(),
createMatches
(
element
.
filterData
)
);
const
stoppedThread
=
session
.
getAllThreads
().
filter
(
t
=>
t
.
stopped
).
pop
();
data
.
stateLabel
.
textContent
=
stoppedThread
?
nls
.
localize
(
'
paused
'
,
"
Paused
"
)
...
...
@@ -385,7 +390,7 @@ class SessionsRenderer implements ITreeRenderer<IDebugSession, void, ISessionTem
}
}
class
ThreadsRenderer
implements
ITreeRenderer
<
IThread
,
void
,
IThreadTemplateData
>
{
class
ThreadsRenderer
implements
ITreeRenderer
<
IThread
,
FuzzyScore
,
IThreadTemplateData
>
{
static
readonly
ID
=
'
thread
'
;
get
templateId
():
string
{
...
...
@@ -402,10 +407,10 @@ class ThreadsRenderer implements ITreeRenderer<IThread, void, IThreadTemplateDat
return
data
;
}
renderElement
(
element
:
ITreeNode
<
IThread
,
void
>
,
index
:
number
,
data
:
IThreadTemplateData
):
void
{
renderElement
(
element
:
ITreeNode
<
IThread
,
FuzzyScore
>
,
index
:
number
,
data
:
IThreadTemplateData
):
void
{
const
thread
=
element
.
element
;
data
.
thread
.
title
=
nls
.
localize
(
'
thread
'
,
"
Thread
"
);
data
.
name
.
textContent
=
thread
.
name
;
data
.
label
.
set
(
thread
.
name
,
createMatches
(
element
.
filterData
))
;
if
(
thread
.
stopped
)
{
data
.
stateLabel
.
textContent
=
thread
.
stoppedDetails
.
description
||
...
...
@@ -420,7 +425,7 @@ class ThreadsRenderer implements ITreeRenderer<IThread, void, IThreadTemplateDat
}
}
class
StackFramesRenderer
implements
ITreeRenderer
<
IStackFrame
,
void
,
IStackFrameTemplateData
>
{
class
StackFramesRenderer
implements
ITreeRenderer
<
IStackFrame
,
FuzzyScore
,
IStackFrameTemplateData
>
{
static
readonly
ID
=
'
stackFrame
'
;
constructor
(@
ILabelService
private
readonly
labelService
:
ILabelService
)
{
}
...
...
@@ -432,16 +437,17 @@ class StackFramesRenderer implements ITreeRenderer<IStackFrame, void, IStackFram
renderTemplate
(
container
:
HTMLElement
):
IStackFrameTemplateData
{
const
data
:
IStackFrameTemplateData
=
Object
.
create
(
null
);
data
.
stackFrame
=
dom
.
append
(
container
,
$
(
'
.stack-frame
'
));
data
.
label
=
dom
.
append
(
data
.
stackFrame
,
$
(
'
span.label.expression
'
));
const
labelDiv
=
dom
.
append
(
data
.
stackFrame
,
$
(
'
span.label.expression
'
));
data
.
file
=
dom
.
append
(
data
.
stackFrame
,
$
(
'
.file
'
));
data
.
fileName
=
dom
.
append
(
data
.
file
,
$
(
'
span.file-name
'
));
const
wrapper
=
dom
.
append
(
data
.
file
,
$
(
'
span.line-number-wrapper
'
));
data
.
lineNumber
=
dom
.
append
(
wrapper
,
$
(
'
span.line-number
'
));
data
.
label
=
new
HighlightedLabel
(
labelDiv
,
false
);
return
data
;
}
renderElement
(
element
:
ITreeNode
<
IStackFrame
,
void
>
,
index
:
number
,
data
:
IStackFrameTemplateData
):
void
{
renderElement
(
element
:
ITreeNode
<
IStackFrame
,
FuzzyScore
>
,
index
:
number
,
data
:
IStackFrameTemplateData
):
void
{
const
stackFrame
=
element
.
element
;
dom
.
toggleClass
(
data
.
stackFrame
,
'
disabled
'
,
!
stackFrame
.
source
||
!
stackFrame
.
source
.
available
||
stackFrame
.
source
.
presentationHint
===
'
deemphasize
'
);
dom
.
toggleClass
(
data
.
stackFrame
,
'
label
'
,
stackFrame
.
presentationHint
===
'
label
'
);
...
...
@@ -451,8 +457,7 @@ class StackFramesRenderer implements ITreeRenderer<IStackFrame, void, IStackFram
if
(
stackFrame
.
source
.
raw
.
origin
)
{
data
.
file
.
title
+=
`\n
${
stackFrame
.
source
.
raw
.
origin
}
`
;
}
data
.
label
.
textContent
=
stackFrame
.
name
;
data
.
label
.
title
=
stackFrame
.
name
;
data
.
label
.
set
(
stackFrame
.
name
,
createMatches
(
element
.
filterData
),
stackFrame
.
name
);
data
.
fileName
.
textContent
=
stackFrame
.
getSpecificSourceName
();
if
(
stackFrame
.
range
.
startLineNumber
!==
undefined
)
{
data
.
lineNumber
.
textContent
=
`
${
stackFrame
.
range
.
startLineNumber
}
`
;
...
...
@@ -470,7 +475,7 @@ class StackFramesRenderer implements ITreeRenderer<IStackFrame, void, IStackFram
}
}
class
ErrorsRenderer
implements
ITreeRenderer
<
string
,
void
,
IErrorTemplateData
>
{
class
ErrorsRenderer
implements
ITreeRenderer
<
string
,
FuzzyScore
,
IErrorTemplateData
>
{
static
readonly
ID
=
'
error
'
;
get
templateId
():
string
{
...
...
@@ -484,7 +489,7 @@ class ErrorsRenderer implements ITreeRenderer<string, void, IErrorTemplateData>
return
data
;
}
renderElement
(
element
:
ITreeNode
<
string
,
void
>
,
index
:
number
,
data
:
IErrorTemplateData
):
void
{
renderElement
(
element
:
ITreeNode
<
string
,
FuzzyScore
>
,
index
:
number
,
data
:
IErrorTemplateData
):
void
{
const
error
=
element
.
element
;
data
.
label
.
textContent
=
error
;
data
.
label
.
title
=
error
;
...
...
@@ -495,7 +500,7 @@ class ErrorsRenderer implements ITreeRenderer<string, void, IErrorTemplateData>
}
}
class
LoadMoreRenderer
implements
ITreeRenderer
<
ThreadAndSessionIds
,
void
,
ILabelTemplateData
>
{
class
LoadMoreRenderer
implements
ITreeRenderer
<
ThreadAndSessionIds
,
FuzzyScore
,
ILabelTemplateData
>
{
static
readonly
ID
=
'
loadMore
'
;
static
readonly
LABEL
=
nls
.
localize
(
'
loadMoreStackFrames
'
,
"
Load More Stack Frames
"
);
...
...
@@ -510,7 +515,7 @@ class LoadMoreRenderer implements ITreeRenderer<ThreadAndSessionIds, void, ILabe
return
data
;
}
renderElement
(
element
:
ITreeNode
<
ThreadAndSessionIds
,
void
>
,
index
:
number
,
data
:
ILabelTemplateData
):
void
{
renderElement
(
element
:
ITreeNode
<
ThreadAndSessionIds
,
FuzzyScore
>
,
index
:
number
,
data
:
ILabelTemplateData
):
void
{
data
.
label
.
textContent
=
LoadMoreRenderer
.
LABEL
;
}
...
...
@@ -519,7 +524,7 @@ class LoadMoreRenderer implements ITreeRenderer<ThreadAndSessionIds, void, ILabe
}
}
class
ShowMoreRenderer
implements
ITreeRenderer
<
IStackFrame
[],
void
,
ILabelTemplateData
>
{
class
ShowMoreRenderer
implements
ITreeRenderer
<
IStackFrame
[],
FuzzyScore
,
ILabelTemplateData
>
{
static
readonly
ID
=
'
showMore
'
;
get
templateId
():
string
{
...
...
@@ -533,7 +538,7 @@ class ShowMoreRenderer implements ITreeRenderer<IStackFrame[], void, ILabelTempl
return
data
;
}
renderElement
(
element
:
ITreeNode
<
IStackFrame
[],
void
>
,
index
:
number
,
data
:
ILabelTemplateData
):
void
{
renderElement
(
element
:
ITreeNode
<
IStackFrame
[],
FuzzyScore
>
,
index
:
number
,
data
:
ILabelTemplateData
):
void
{
const
stackFrames
=
element
.
element
;
if
(
stackFrames
.
every
(
sf
=>
sf
.
source
&&
sf
.
source
.
origin
&&
sf
.
source
.
origin
===
stackFrames
[
0
].
source
.
origin
))
{
data
.
label
.
textContent
=
nls
.
localize
(
'
showMoreAndOrigin
'
,
"
Show {0} More: {1}
"
,
stackFrames
.
length
,
stackFrames
[
0
].
source
.
origin
);
...
...
src/vs/workbench/parts/debug/electron-browser/debugHover.ts
浏览文件 @
ccdaf127
...
...
@@ -45,7 +45,7 @@ export class DebugHoverWidget implements IContentWidget {
private
_isVisible
:
boolean
;
private
domNode
:
HTMLElement
;
private
tree
:
AsyncDataTree
<
IExpression
,
IExpression
>
;
private
tree
:
AsyncDataTree
<
IExpression
,
IExpression
,
any
>
;
private
showAtPosition
:
Position
;
private
highlightDecorations
:
string
[];
private
complexValueContainer
:
HTMLElement
;
...
...
src/vs/workbench/parts/debug/electron-browser/repl.ts
浏览文件 @
ccdaf127
...
...
@@ -66,6 +66,8 @@ import { IConfigurationService } from 'vs/platform/configuration/common/configur
import
{
ITextResourcePropertiesService
}
from
'
vs/editor/common/services/resourceConfiguration
'
;
import
{
RunOnceScheduler
}
from
'
vs/base/common/async
'
;
import
{
IKeybindingService
}
from
'
vs/platform/keybinding/common/keybinding
'
;
import
{
FuzzyScore
,
createMatches
}
from
'
vs/base/common/filters
'
;
import
{
HighlightedLabel
}
from
'
vs/base/browser/ui/highlightedlabel/highlightedLabel
'
;
const
$
=
dom
.
$
;
...
...
@@ -81,7 +83,7 @@ interface IPrivateReplService {
clearRepl
():
void
;
}
function
revealLastElement
(
tree
:
WorkbenchAsyncDataTree
<
any
,
any
>
)
{
function
revealLastElement
(
tree
:
WorkbenchAsyncDataTree
<
any
,
any
,
any
>
)
{
tree
.
scrollTop
=
tree
.
scrollHeight
-
tree
.
renderHeight
;
}
...
...
@@ -95,7 +97,7 @@ export class Repl extends Panel implements IPrivateReplService, IHistoryNavigati
private
static
readonly
REPL_INPUT_MAX_HEIGHT
=
170
;
private
history
:
HistoryNavigator
<
string
>
;
private
tree
:
WorkbenchAsyncDataTree
<
IDebugSession
,
IReplElement
>
;
private
tree
:
WorkbenchAsyncDataTree
<
IDebugSession
,
IReplElement
,
FuzzyScore
>
;
private
replDelegate
:
ReplDelegate
;
private
container
:
HTMLElement
;
private
treeContainer
:
HTMLElement
;
...
...
@@ -250,7 +252,7 @@ export class Repl extends Panel implements IPrivateReplService, IHistoryNavigati
getVisibleContent
():
string
{
let
text
=
''
;
const
lineDelimiter
=
this
.
textResourcePropertiesService
.
getEOL
(
this
.
model
.
uri
);
const
traverseAndAppend
=
(
node
:
ITreeNode
<
IReplElement
,
void
>
)
=>
{
const
traverseAndAppend
=
(
node
:
ITreeNode
<
IReplElement
,
FuzzyScore
>
)
=>
{
node
.
children
.
forEach
(
child
=>
{
text
+=
child
.
element
.
toString
()
+
lineDelimiter
;
if
(
!
child
.
collapsed
&&
child
.
children
.
length
)
{
...
...
@@ -507,6 +509,7 @@ interface IExpressionTemplateData {
output
:
HTMLElement
;
value
:
HTMLElement
;
annotation
:
HTMLElement
;
label
:
HighlightedLabel
;
}
interface
ISimpleReplElementTemplateData
{
...
...
@@ -515,6 +518,7 @@ interface ISimpleReplElementTemplateData {
source
:
HTMLElement
;
getReplElementSource
():
IReplElementSource
;
toDispose
:
IDisposable
[];
label
:
HighlightedLabel
;
}
interface
IRawObjectReplTemplateData
{
...
...
@@ -523,9 +527,10 @@ interface IRawObjectReplTemplateData {
name
:
HTMLElement
;
value
:
HTMLElement
;
annotation
:
HTMLElement
;
label
:
HighlightedLabel
;
}
class
ReplExpressionsRenderer
implements
ITreeRenderer
<
Expression
,
void
,
IExpressionTemplateData
>
{
class
ReplExpressionsRenderer
implements
ITreeRenderer
<
Expression
,
FuzzyScore
,
IExpressionTemplateData
>
{
static
readonly
ID
=
'
expressionRepl
'
;
get
templateId
():
string
{
...
...
@@ -536,6 +541,7 @@ class ReplExpressionsRenderer implements ITreeRenderer<Expression, void, IExpres
const
data
:
IExpressionTemplateData
=
Object
.
create
(
null
);
dom
.
addClass
(
container
,
'
input-output-pair
'
);
data
.
input
=
dom
.
append
(
container
,
$
(
'
.input.expression
'
));
data
.
label
=
new
HighlightedLabel
(
data
.
input
,
false
);
data
.
output
=
dom
.
append
(
container
,
$
(
'
.output.expression
'
));
data
.
value
=
dom
.
append
(
data
.
output
,
$
(
'
span.value
'
));
data
.
annotation
=
dom
.
append
(
data
.
output
,
$
(
'
span
'
));
...
...
@@ -543,9 +549,9 @@ class ReplExpressionsRenderer implements ITreeRenderer<Expression, void, IExpres
return
data
;
}
renderElement
(
element
:
ITreeNode
<
Expression
,
void
>
,
index
:
number
,
templateData
:
IExpressionTemplateData
):
void
{
renderElement
(
element
:
ITreeNode
<
Expression
,
FuzzyScore
>
,
index
:
number
,
templateData
:
IExpressionTemplateData
):
void
{
const
expression
=
element
.
element
;
templateData
.
input
.
textContent
=
expression
.
name
;
templateData
.
label
.
set
(
expression
.
name
,
createMatches
(
element
.
filterData
))
;
renderExpressionValue
(
expression
,
templateData
.
value
,
{
preserveWhitespace
:
!
expression
.
hasChildren
,
showHover
:
false
,
...
...
@@ -562,7 +568,7 @@ class ReplExpressionsRenderer implements ITreeRenderer<Expression, void, IExpres
}
}
class
ReplSimpleElementsRenderer
implements
ITreeRenderer
<
SimpleReplElement
,
void
,
ISimpleReplElementTemplateData
>
{
class
ReplSimpleElementsRenderer
implements
ITreeRenderer
<
SimpleReplElement
,
FuzzyScore
,
ISimpleReplElementTemplateData
>
{
static
readonly
ID
=
'
simpleReplElement
'
;
constructor
(
...
...
@@ -606,7 +612,7 @@ class ReplSimpleElementsRenderer implements ITreeRenderer<SimpleReplElement, voi
return
data
;
}
renderElement
({
element
}:
ITreeNode
<
SimpleReplElement
,
void
>
,
index
:
number
,
templateData
:
ISimpleReplElementTemplateData
):
void
{
renderElement
({
element
}:
ITreeNode
<
SimpleReplElement
,
FuzzyScore
>
,
index
:
number
,
templateData
:
ISimpleReplElementTemplateData
):
void
{
// value
dom
.
clearNode
(
templateData
.
value
);
// Reset classes to clear ansi decorations since templates are reused
...
...
@@ -625,7 +631,7 @@ class ReplSimpleElementsRenderer implements ITreeRenderer<SimpleReplElement, voi
}
}
class
ReplRawObjectsRenderer
implements
ITreeRenderer
<
RawObjectReplElement
,
void
,
IRawObjectReplTemplateData
>
{
class
ReplRawObjectsRenderer
implements
ITreeRenderer
<
RawObjectReplElement
,
FuzzyScore
,
IRawObjectReplTemplateData
>
{
static
readonly
ID
=
'
rawObject
'
;
get
templateId
():
string
{
...
...
@@ -639,14 +645,17 @@ class ReplRawObjectsRenderer implements ITreeRenderer<RawObjectReplElement, void
data
.
container
=
container
;
data
.
expression
=
dom
.
append
(
container
,
$
(
'
.output.expression
'
));
data
.
name
=
dom
.
append
(
data
.
expression
,
$
(
'
span.name
'
));
data
.
label
=
new
HighlightedLabel
(
data
.
name
,
false
);
data
.
value
=
dom
.
append
(
data
.
expression
,
$
(
'
span.value
'
));
data
.
annotation
=
dom
.
append
(
data
.
expression
,
$
(
'
span
'
));
return
data
;
}
renderElement
(
{
element
}:
ITreeNode
<
RawObjectReplElement
,
void
>
,
index
:
number
,
templateData
:
IRawObjectReplTemplateData
):
void
{
renderElement
(
node
:
ITreeNode
<
RawObjectReplElement
,
FuzzyScore
>
,
index
:
number
,
templateData
:
IRawObjectReplTemplateData
):
void
{
// key
const
element
=
node
.
element
;
templateData
.
label
.
set
(
element
.
name
?
`
${
element
.
name
}
:`
:
''
,
createMatches
(
node
.
filterData
));
if
(
element
.
name
)
{
templateData
.
name
.
textContent
=
`
${
element
.
name
}
:`
;
}
else
{
...
...
src/vs/workbench/parts/debug/electron-browser/variablesView.ts
浏览文件 @
ccdaf127
...
...
@@ -28,6 +28,8 @@ import { IContextKeyService } from 'vs/platform/contextkey/common/contextkey';
import
{
WorkbenchAsyncDataTree
,
IListService
}
from
'
vs/platform/list/browser/listService
'
;
import
{
IThemeService
}
from
'
vs/platform/theme/common/themeService
'
;
import
{
onUnexpectedError
}
from
'
vs/base/common/errors
'
;
import
{
FuzzyScore
,
createMatches
}
from
'
vs/base/common/filters
'
;
import
{
HighlightedLabel
,
IHighlight
}
from
'
vs/base/browser/ui/highlightedlabel/highlightedLabel
'
;
const
$
=
dom
.
$
;
...
...
@@ -37,7 +39,7 @@ export class VariablesView extends ViewletPanel {
private
onFocusStackFrameScheduler
:
RunOnceScheduler
;
private
needsRefresh
:
boolean
;
private
tree
:
WorkbenchAsyncDataTree
<
IViewModel
,
IExpression
|
IScope
>
;
private
tree
:
WorkbenchAsyncDataTree
<
IViewModel
,
IExpression
|
IScope
,
FuzzyScore
>
;
constructor
(
options
:
IViewletViewOptions
,
...
...
@@ -178,6 +180,7 @@ export class VariablesDataSource implements IAsyncDataSource<IViewModel, IExpres
interface
IScopeTemplateData
{
name
:
HTMLElement
;
label
:
HighlightedLabel
;
}
class
VariablesDelegate
implements
IListVirtualDelegate
<
IExpression
|
IScope
>
{
...
...
@@ -198,7 +201,7 @@ class VariablesDelegate implements IListVirtualDelegate<IExpression | IScope> {
}
}
class
ScopesRenderer
implements
ITreeRenderer
<
IScope
,
void
,
IScopeTemplateData
>
{
class
ScopesRenderer
implements
ITreeRenderer
<
IScope
,
FuzzyScore
,
IScopeTemplateData
>
{
static
readonly
ID
=
'
scope
'
;
...
...
@@ -209,12 +212,13 @@ class ScopesRenderer implements ITreeRenderer<IScope, void, IScopeTemplateData>
renderTemplate
(
container
:
HTMLElement
):
IScopeTemplateData
{
let
data
:
IScopeTemplateData
=
Object
.
create
(
null
);
data
.
name
=
dom
.
append
(
container
,
$
(
'
.scope
'
));
data
.
label
=
new
HighlightedLabel
(
data
.
name
,
false
);
return
data
;
}
renderElement
(
element
:
ITreeNode
<
IScope
,
void
>
,
index
:
number
,
templateData
:
IScopeTemplateData
):
void
{
templateData
.
name
.
textContent
=
element
.
element
.
name
;
renderElement
(
element
:
ITreeNode
<
IScope
,
FuzzyScore
>
,
index
:
number
,
templateData
:
IScopeTemplateData
):
void
{
templateData
.
label
.
set
(
element
.
element
.
name
,
createMatches
(
element
.
filterData
))
;
}
disposeTemplate
(
templateData
:
IScopeTemplateData
):
void
{
...
...
@@ -230,8 +234,8 @@ export class VariablesRenderer extends AbstractExpressionsRenderer {
return
VariablesRenderer
.
ID
;
}
protected
renderExpression
(
expression
:
IExpression
,
data
:
IExpressionTemplateData
):
void
{
renderVariable
(
expression
as
Variable
,
data
,
true
);
protected
renderExpression
(
expression
:
IExpression
,
data
:
IExpressionTemplateData
,
highlights
:
IHighlight
[]
):
void
{
renderVariable
(
expression
as
Variable
,
data
,
true
,
highlights
);
}
protected
getInputBoxOptions
(
expression
:
IExpression
):
IInputBoxOptions
{
...
...
src/vs/workbench/parts/debug/electron-browser/watchExpressionsView.ts
浏览文件 @
ccdaf127
...
...
@@ -30,6 +30,8 @@ import { IAsyncDataSource, ITreeMouseEvent, ITreeContextMenuEvent, ITreeDragAndD
import
{
IDragAndDropData
}
from
'
vs/base/browser/dnd
'
;
import
{
onUnexpectedError
}
from
'
vs/base/common/errors
'
;
import
{
ElementsDragAndDropData
}
from
'
vs/base/browser/ui/list/listView
'
;
import
{
FuzzyScore
}
from
'
vs/base/common/filters
'
;
import
{
IHighlight
}
from
'
vs/base/browser/ui/highlightedlabel/highlightedLabel
'
;
const
MAX_VALUE_RENDER_LENGTH_IN_VIEWLET
=
1024
;
...
...
@@ -37,7 +39,7 @@ export class WatchExpressionsView extends ViewletPanel {
private
onWatchExpressionsUpdatedScheduler
:
RunOnceScheduler
;
private
needsRefresh
:
boolean
;
private
tree
:
WorkbenchAsyncDataTree
<
IDebugService
,
IExpression
>
;
private
tree
:
WorkbenchAsyncDataTree
<
IDebugService
,
IExpression
,
FuzzyScore
>
;
constructor
(
options
:
IViewletViewOptions
,
...
...
@@ -223,8 +225,9 @@ export class WatchExpressionsRenderer extends AbstractExpressionsRenderer {
return
WatchExpressionsRenderer
.
ID
;
}
protected
renderExpression
(
expression
:
IExpression
,
data
:
IExpressionTemplateData
):
void
{
data
.
name
.
textContent
=
expression
.
name
;
protected
renderExpression
(
expression
:
IExpression
,
data
:
IExpressionTemplateData
,
highlights
:
IHighlight
[]):
void
{
const
text
=
typeof
expression
.
value
===
'
string
'
?
`
${
expression
.
name
}
:`
:
expression
.
name
;
data
.
label
.
set
(
text
,
highlights
,
expression
.
type
?
expression
.
type
:
expression
.
value
);
renderExpressionValue
(
expression
,
data
.
value
,
{
showChanged
:
true
,
maxValueLength
:
MAX_VALUE_RENDER_LENGTH_IN_VIEWLET
,
...
...
@@ -232,11 +235,6 @@ export class WatchExpressionsRenderer extends AbstractExpressionsRenderer {
showHover
:
true
,
colorize
:
true
});
data
.
name
.
title
=
expression
.
type
?
expression
.
type
:
expression
.
value
;
if
(
typeof
expression
.
value
===
'
string
'
)
{
data
.
name
.
textContent
+=
'
:
'
;
}
}
protected
getInputBoxOptions
(
expression
:
IExpression
):
IInputBoxOptions
{
...
...
src/vs/workbench/parts/debug/test/browser/baseDebugView.test.ts
浏览文件 @
ccdaf127
...
...
@@ -8,6 +8,7 @@ import { replaceWhitespace, renderExpressionValue, renderVariable } from 'vs/wor
import
*
as
dom
from
'
vs/base/browser/dom
'
;
import
{
Expression
,
Variable
,
Scope
,
StackFrame
,
Thread
}
from
'
vs/workbench/parts/debug/common/debugModel
'
;
import
{
MockSession
}
from
'
vs/workbench/parts/debug/test/common/mockDebug
'
;
import
{
HighlightedLabel
}
from
'
vs/base/browser/ui/highlightedlabel/highlightedLabel
'
;
const
$
=
dom
.
$
;
suite
(
'
Debug - Base Debug View
'
,
()
=>
{
...
...
@@ -61,9 +62,10 @@ suite('Debug - Base Debug View', () => {
let
expression
=
$
(
'
.
'
);
let
name
=
$
(
'
.
'
);
let
value
=
$
(
'
.
'
);
renderVariable
(
variable
,
{
expression
,
name
,
value
},
false
);
let
label
=
new
HighlightedLabel
(
name
,
false
);
renderVariable
(
variable
,
{
expression
,
name
,
value
,
label
},
false
,
[]);
assert
.
equal
(
name
.
textContent
,
'
foo
'
);
assert
.
equal
(
label
.
element
.
textContent
,
'
foo
'
);
assert
.
equal
(
value
.
textContent
,
''
);
assert
.
equal
(
value
.
title
,
''
);
...
...
@@ -71,19 +73,19 @@ suite('Debug - Base Debug View', () => {
expression
=
$
(
'
.
'
);
name
=
$
(
'
.
'
);
value
=
$
(
'
.
'
);
renderVariable
(
variable
,
{
expression
,
name
,
value
},
false
);
renderVariable
(
variable
,
{
expression
,
name
,
value
,
label
},
false
,
[]
);
assert
.
equal
(
value
.
textContent
,
'
hey
'
);
assert
.
equal
(
name
.
textContent
,
'
foo:
'
);
assert
.
equal
(
name
.
title
,
'
string
'
);
assert
.
equal
(
label
.
element
.
textContent
,
'
foo:
'
);
assert
.
equal
(
label
.
element
.
title
,
'
string
'
);
variable
=
new
Variable
(
session
,
scope
,
2
,
'
console
'
,
'
console
'
,
'
5
'
,
0
,
0
,
{
kind
:
'
virtual
'
});
expression
=
$
(
'
.
'
);
name
=
$
(
'
.
'
);
value
=
$
(
'
.
'
);
renderVariable
(
variable
,
{
expression
,
name
,
value
},
false
);
renderVariable
(
variable
,
{
expression
,
name
,
value
,
label
},
false
,
[]
);
assert
.
equal
(
name
.
className
,
'
virtual
'
);
assert
.
equal
(
name
.
textContent
,
'
console:
'
);
assert
.
equal
(
name
.
title
,
'
console
'
);
assert
.
equal
(
label
.
element
.
textContent
,
'
console:
'
);
assert
.
equal
(
label
.
element
.
title
,
'
console
'
);
assert
.
equal
(
value
.
className
,
'
value number
'
);
});
});
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录