Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
徽霖
Vscode
提交
ed788cfc
V
Vscode
项目概览
徽霖
/
Vscode
通知
9
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
V
Vscode
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
未验证
提交
ed788cfc
编写于
6月 21, 2018
作者:
J
Johannes Rieken
提交者:
GitHub
6月 21, 2018
浏览文件
操作
浏览文件
下载
差异文件
Merge pull request #52506 from bitshiftza/master
Fix for issue #39458
上级
c205df5c
d49c0673
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
90 addition
and
17 deletion
+90
-17
src/vs/editor/contrib/goToDefinition/goToDefinitionMouse.ts
src/vs/editor/contrib/goToDefinition/goToDefinitionMouse.ts
+90
-17
未找到文件。
src/vs/editor/contrib/goToDefinition/goToDefinitionMouse.ts
浏览文件 @
ed788cfc
...
...
@@ -25,7 +25,8 @@ import { editorActiveLinkForeground } from 'vs/platform/theme/common/colorRegist
import
{
EditorState
,
CodeEditorStateFlag
}
from
'
vs/editor/browser/core/editorState
'
;
import
{
DefinitionAction
,
DefinitionActionConfig
}
from
'
./goToDefinitionCommands
'
;
import
{
ClickLinkGesture
,
ClickLinkMouseEvent
,
ClickLinkKeyboardEvent
}
from
'
vs/editor/contrib/goToDefinition/clickLinkGesture
'
;
import
{
IWordAtPosition
,
IModelDeltaDecoration
}
from
'
vs/editor/common/model
'
;
import
{
IWordAtPosition
,
IModelDeltaDecoration
,
ITextModel
}
from
'
vs/editor/common/model
'
;
import
{
Position
}
from
'
vs/editor/common/core/position
'
;
class
GotoDefinitionWithMouseEditorContribution
implements
editorCommon
.
IEditorContribution
{
...
...
@@ -141,21 +142,7 @@ class GotoDefinitionWithMouseEditorContribution implements editorCommon.IEditorC
return
;
}
const
startIndent
=
textEditorModel
.
getLineFirstNonWhitespaceColumn
(
startLineNumber
);
const
maxLineNumber
=
Math
.
min
(
textEditorModel
.
getLineCount
(),
startLineNumber
+
GotoDefinitionWithMouseEditorContribution
.
MAX_SOURCE_PREVIEW_LINES
);
let
endLineNumber
=
startLineNumber
+
1
;
let
minIndent
=
startIndent
;
for
(;
endLineNumber
<
maxLineNumber
;
endLineNumber
++
)
{
let
endIndent
=
textEditorModel
.
getLineFirstNonWhitespaceColumn
(
endLineNumber
);
minIndent
=
Math
.
min
(
minIndent
,
endIndent
);
if
(
startIndent
===
endIndent
)
{
break
;
}
}
const
previewRange
=
new
Range
(
startLineNumber
,
1
,
endLineNumber
+
1
,
1
);
const
value
=
textEditorModel
.
getValueInRange
(
previewRange
).
replace
(
new
RegExp
(
`^\\s{
${
minIndent
-
1
}
}`
,
'
gm
'
),
''
).
trim
();
const
previewValue
=
this
.
getPreviewValue
(
textEditorModel
,
startLineNumber
);
let
wordRange
:
Range
;
if
(
result
.
origin
)
{
...
...
@@ -166,7 +153,7 @@ class GotoDefinitionWithMouseEditorContribution implements editorCommon.IEditorC
this
.
addDecoration
(
wordRange
,
new
MarkdownString
().
appendCodeblock
(
this
.
modeService
.
getModeIdByFilenameOrFirstLine
(
textEditorModel
.
uri
.
fsPath
),
v
alue
)
new
MarkdownString
().
appendCodeblock
(
this
.
modeService
.
getModeIdByFilenameOrFirstLine
(
textEditorModel
.
uri
.
fsPath
),
previewV
alue
)
);
ref
.
dispose
();
});
...
...
@@ -174,6 +161,92 @@ class GotoDefinitionWithMouseEditorContribution implements editorCommon.IEditorC
}).
done
(
undefined
,
onUnexpectedError
);
}
private
getPreviewValue
(
textEditorModel
:
ITextModel
,
startLineNumber
:
number
)
{
let
rangeToUse
=
this
.
getPreviewRangeBasedOnBrackets
(
textEditorModel
,
startLineNumber
);
const
numberOfLinesInRange
=
rangeToUse
.
endLineNumber
-
rangeToUse
.
startLineNumber
;
if
(
numberOfLinesInRange
>=
GotoDefinitionWithMouseEditorContribution
.
MAX_SOURCE_PREVIEW_LINES
)
{
rangeToUse
=
this
.
getPreviewRangeBasedOnIndentation
(
textEditorModel
,
startLineNumber
);
}
const
previewValue
=
this
.
stripIndentationFromPreviewRange
(
textEditorModel
,
startLineNumber
,
rangeToUse
);
return
previewValue
;
}
private
stripIndentationFromPreviewRange
(
textEditorModel
:
ITextModel
,
startLineNumber
:
number
,
previewRange
:
Range
)
{
const
startIndent
=
textEditorModel
.
getLineFirstNonWhitespaceColumn
(
startLineNumber
);
let
minIndent
=
startIndent
;
for
(
let
endLineNumber
=
startLineNumber
+
1
;
endLineNumber
<
previewRange
.
endLineNumber
;
endLineNumber
++
)
{
const
endIndent
=
textEditorModel
.
getLineFirstNonWhitespaceColumn
(
endLineNumber
);
minIndent
=
Math
.
min
(
minIndent
,
endIndent
);
}
const
previewValue
=
textEditorModel
.
getValueInRange
(
previewRange
).
replace
(
new
RegExp
(
`^\\s{
${
minIndent
-
1
}
}`
,
'
gm
'
),
''
).
trim
();
return
previewValue
;
}
private
getPreviewRangeBasedOnIndentation
(
textEditorModel
:
ITextModel
,
startLineNumber
:
number
)
{
const
startIndent
=
textEditorModel
.
getLineFirstNonWhitespaceColumn
(
startLineNumber
);
const
maxLineNumber
=
Math
.
min
(
textEditorModel
.
getLineCount
(),
startLineNumber
+
GotoDefinitionWithMouseEditorContribution
.
MAX_SOURCE_PREVIEW_LINES
);
let
endLineNumber
=
startLineNumber
+
1
;
for
(;
endLineNumber
<
maxLineNumber
;
endLineNumber
++
)
{
let
endIndent
=
textEditorModel
.
getLineFirstNonWhitespaceColumn
(
endLineNumber
);
if
(
startIndent
===
endIndent
)
{
break
;
}
}
return
new
Range
(
startLineNumber
,
1
,
endLineNumber
+
1
,
1
);
}
private
getPreviewRangeBasedOnBrackets
(
textEditorModel
:
ITextModel
,
startLineNumber
:
number
)
{
const
maxLineNumber
=
Math
.
min
(
textEditorModel
.
getLineCount
(),
startLineNumber
+
GotoDefinitionWithMouseEditorContribution
.
MAX_SOURCE_PREVIEW_LINES
);
const
brackets
=
[];
let
ignoreFirstEmpty
=
true
;
let
currentBracket
=
textEditorModel
.
findNextBracket
(
new
Position
(
startLineNumber
,
1
));
while
(
currentBracket
!==
null
)
{
if
(
brackets
.
length
===
0
)
{
brackets
.
push
(
currentBracket
);
}
else
{
const
lastBracket
=
brackets
[
brackets
.
length
-
1
];
if
(
lastBracket
.
open
===
currentBracket
.
open
&&
lastBracket
.
isOpen
&&
!
currentBracket
.
isOpen
)
{
brackets
.
pop
();
}
else
{
brackets
.
push
(
currentBracket
);
}
if
(
brackets
.
length
===
0
)
{
if
(
ignoreFirstEmpty
)
{
ignoreFirstEmpty
=
false
;
}
else
{
return
new
Range
(
startLineNumber
,
1
,
currentBracket
.
range
.
endLineNumber
+
1
,
1
);
}
}
}
const
maxColumn
=
textEditorModel
.
getLineMaxColumn
(
startLineNumber
);
let
nextLineNumber
=
currentBracket
.
range
.
endLineNumber
;
let
nextColumn
=
currentBracket
.
range
.
endColumn
;
if
(
maxColumn
===
currentBracket
.
range
.
endColumn
)
{
nextLineNumber
++
;
nextColumn
=
1
;
}
if
(
nextLineNumber
>
maxLineNumber
)
{
return
new
Range
(
startLineNumber
,
1
,
maxLineNumber
+
1
,
1
);
}
currentBracket
=
textEditorModel
.
findNextBracket
(
new
Position
(
nextLineNumber
,
nextColumn
));
}
return
new
Range
(
startLineNumber
,
1
,
maxLineNumber
+
1
,
1
);
}
private
addDecoration
(
range
:
Range
,
hoverMessage
:
MarkdownString
):
void
{
const
newDecorations
:
IModelDeltaDecoration
=
{
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录