Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
lwm1986
roslyn
提交
a02f1d51
R
roslyn
项目概览
lwm1986
/
roslyn
与 Fork 源项目一致
从无法访问的项目Fork
通知
1
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
R
roslyn
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
a02f1d51
编写于
7月 18, 2017
作者:
J
Jonathon Marolf
提交者:
GitHub
7月 18, 2017
浏览文件
操作
浏览文件
下载
差异文件
Merge pull request #20933 from dotnet/merges/dev15.3.x-to-master-20170718-070008
Merge dev15.3.x to master
上级
6258827a
fa1b0e4e
变更
15
隐藏空白更改
内联
并排
Showing
15 changed file
with
138 addition
and
58 deletion
+138
-58
src/Compilers/CSharp/Portable/Lowering/LocalRewriter/LocalRewriter_ConditionalAccess.cs
...Lowering/LocalRewriter/LocalRewriter_ConditionalAccess.cs
+5
-0
src/Compilers/CSharp/Portable/Lowering/LocalRewriter/LocalRewriter_Conversion.cs
...rtable/Lowering/LocalRewriter/LocalRewriter_Conversion.cs
+1
-1
src/Compilers/CSharp/Test/Emit/CodeGen/CodeGenConditionalOperatorTests.cs
...harp/Test/Emit/CodeGen/CodeGenConditionalOperatorTests.cs
+25
-0
src/EditorFeatures/CSharp/QuickInfo/SyntacticQuickInfoProvider.cs
...orFeatures/CSharp/QuickInfo/SyntacticQuickInfoProvider.cs
+1
-1
src/EditorFeatures/CSharpTest/Completion/CompletionProviders/ExplicitInterfaceTypeCompletionProviderTests.cs
...Providers/ExplicitInterfaceTypeCompletionProviderTests.cs
+13
-0
src/EditorFeatures/CSharpTest/QuickInfo/SyntacticQuickInfoSourceTests.cs
...res/CSharpTest/QuickInfo/SyntacticQuickInfoSourceTests.cs
+3
-10
src/EditorFeatures/Core/Implementation/IntelliSense/QuickInfo/DeferredContent/ProjectionBufferDeferredContent.cs
...ckInfo/DeferredContent/ProjectionBufferDeferredContent.cs
+5
-5
src/EditorFeatures/Core/Implementation/IntelliSense/QuickInfo/Providers/AbstractQuickInfoProvider.cs
...lliSense/QuickInfo/Providers/AbstractQuickInfoProvider.cs
+2
-2
src/EditorFeatures/Core/Implementation/Structure/BlockTagState.cs
...orFeatures/Core/Implementation/Structure/BlockTagState.cs
+1
-1
src/EditorFeatures/Core/Shared/Extensions/IProjectionBufferFactoryServiceExtensions.cs
...d/Extensions/IProjectionBufferFactoryServiceExtensions.cs
+32
-14
src/EditorFeatures/Core/Shared/Utilities/ViewHostingControl.cs
...ditorFeatures/Core/Shared/Utilities/ViewHostingControl.cs
+41
-20
src/EditorFeatures/Test/Extensions/IProjectionBufferFactoryServiceExtensionsTests.cs
...ensions/IProjectionBufferFactoryServiceExtensionsTests.cs
+1
-1
src/EditorFeatures/Test/Structure/StructureTaggerTests.cs
src/EditorFeatures/Test/Structure/StructureTaggerTests.cs
+1
-1
src/Features/CSharp/Portable/Completion/CompletionProviders/ExplicitInterfaceTypeCompletionProvider.cs
...etionProviders/ExplicitInterfaceTypeCompletionProvider.cs
+6
-1
src/VisualStudio/Core/Next/FindReferences/Entries/DocumentSpanEntry.cs
...dio/Core/Next/FindReferences/Entries/DocumentSpanEntry.cs
+1
-1
未找到文件。
src/Compilers/CSharp/Portable/Lowering/LocalRewriter/LocalRewriter_ConditionalAccess.cs
浏览文件 @
a02f1d51
...
...
@@ -13,6 +13,11 @@ public override BoundNode VisitConditionalAccess(BoundConditionalAccess node)
return
RewriteConditionalAccess
(
node
,
used
:
true
);
}
public
override
BoundNode
VisitLoweredConditionalAccess
(
BoundLoweredConditionalAccess
node
)
{
throw
ExceptionUtilities
.
Unreachable
;
}
// null when currently enclosing conditional access node
// is not supposed to be lowered.
private
BoundExpression
_currentConditionalAccessTarget
;
...
...
src/Compilers/CSharp/Portable/Lowering/LocalRewriter/LocalRewriter_Conversion.cs
浏览文件 @
a02f1d51
...
...
@@ -348,7 +348,7 @@ private static bool IsFloatPointExpressionOfUnknownPrecision(BoundExpression rew
Debug
.
Assert
((
object
)
method
!=
null
);
var
oldSyntax
=
_factory
.
Syntax
;
_factory
.
Syntax
=
(
mg
.
ReceiverOpt
??
mg
).
Syntax
;
var
receiver
=
(
method
.
IsStatic
&&
!
oldNode
.
IsExtensionMethod
)
?
_factory
.
Type
(
method
.
ContainingType
)
:
VisitExpression
(
mg
.
ReceiverOpt
)
;
var
receiver
=
(
method
.
IsStatic
&&
!
oldNode
.
IsExtensionMethod
)
?
_factory
.
Type
(
method
.
ContainingType
)
:
mg
.
ReceiverOpt
;
_factory
.
Syntax
=
oldSyntax
;
return
new
BoundDelegateCreationExpression
(
syntax
,
argument
:
receiver
,
methodOpt
:
method
,
isExtensionMethod
:
oldNode
.
IsExtensionMethod
,
type
:
rewrittenType
);
}
...
...
src/Compilers/CSharp/Test/Emit/CodeGen/CodeGenConditionalOperatorTests.cs
浏览文件 @
a02f1d51
...
...
@@ -103,6 +103,31 @@ .maxstack 2
"
);
}
[
Fact
,
WorkItem
(
20266
,
"https://github.com/dotnet/roslyn/issues/20266"
)]
public
void
ConditionalAccessInMethodGroupConversion
()
{
var
source
=
@"
class C
{
void M(object o)
{
System.Func<int, string> filter = new C(o?.ToString()).Method;
filter(0);
}
string Method(int x)
{
throw null;
}
C(string x)
{
}
}
"
;
var
comp
=
CreateStandardCompilation
(
source
);
comp
.
VerifyDiagnostics
();
CompileAndVerify
(
comp
);
}
[
Fact
,
WorkItem
(
638289
,
"http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/638289"
)]
public
void
ConditionalDelegateInterfaceUnification2
()
{
...
...
src/EditorFeatures/CSharp/QuickInfo/SyntacticQuickInfoProvider.cs
浏览文件 @
a02f1d51
...
...
@@ -84,7 +84,7 @@ internal class SyntacticQuickInfoProvider : AbstractQuickInfoProvider
}
var
span
=
new
SnapshotSpan
(
textSnapshot
,
Span
.
FromBounds
(
spanStart
,
spanEnd
));
return
this
.
Create
Elis
ionBufferDeferredContent
(
span
);
return
this
.
Create
Project
ionBufferDeferredContent
(
span
);
}
private
static
bool
IsScopeBlock
(
SyntaxNode
node
)
...
...
src/EditorFeatures/CSharpTest/Completion/CompletionProviders/ExplicitInterfaceTypeCompletionProviderTests.cs
浏览文件 @
a02f1d51
...
...
@@ -36,6 +36,19 @@ class C : IList
await
VerifyItemExistsAsync
(
markup
,
"IList"
);
}
[
Fact
,
Trait
(
Traits
.
Feature
,
Traits
.
Features
.
Completion
)]
[
WorkItem
(
459044
,
"https://devdiv.visualstudio.com/DefaultCollection/DevDiv/_workitems?id=459044"
)]
public
async
Task
TestInMisplacedUsing
()
{
var
markup
=
@"
class C
{
using ($$)
}
"
;
await
VerifyNoItemsExistAsync
(
markup
);
// no crash
}
[
Fact
,
Trait
(
Traits
.
Feature
,
Traits
.
Features
.
Completion
)]
public
async
Task
TestAtStartOfStruct
()
{
...
...
src/EditorFeatures/CSharpTest/QuickInfo/SyntacticQuickInfoSourceTests.cs
浏览文件 @
a02f1d51
...
...
@@ -292,16 +292,9 @@ private IQuickInfoProvider CreateProvider(TestWorkspace workspace)
var
state
=
await
provider
.
GetItemAsync
(
document
,
position
,
cancellationToken
:
CancellationToken
.
None
);
Assert
.
NotNull
(
state
);
var
viewHostingControl
=
(
ViewHostingControl
)((
ElisionBufferDeferredContent
)
state
.
Content
).
Create
();
try
{
var
actualContent
=
viewHostingControl
.
ToString
();
Assert
.
Equal
(
expectedContent
,
actualContent
);
}
finally
{
viewHostingControl
.
TextView_TestOnly
.
Close
();
}
var
viewHostingControl
=
(
ViewHostingControl
)((
ProjectionBufferDeferredContent
)
state
.
Content
).
Create
();
var
actualContent
=
viewHostingControl
.
GetText_TestOnly
();
Assert
.
Equal
(
expectedContent
,
actualContent
);
}
protected
override
Task
TestInMethodAsync
(
string
code
,
string
expectedContent
,
string
expectedDocumentationComment
=
null
)
...
...
src/EditorFeatures/Core/Implementation/IntelliSense/QuickInfo/DeferredContent/
Elis
ionBufferDeferredContent.cs
→
src/EditorFeatures/Core/Implementation/IntelliSense/QuickInfo/DeferredContent/
Project
ionBufferDeferredContent.cs
浏览文件 @
a02f1d51
...
...
@@ -14,10 +14,10 @@ namespace Microsoft.CodeAnalysis.Editor.Implementation.IntelliSense.QuickInfo
{
/// <summary>
/// Creates quick info content out of the span of an existing snapshot. The span will be
/// used to create an
elis
ion buffer out that will then be displayed in the quick info
/// used to create an
project
ion buffer out that will then be displayed in the quick info
/// window.
/// </summary>
internal
class
Elis
ionBufferDeferredContent
:
IDeferredQuickInfoContent
internal
class
Project
ionBufferDeferredContent
:
IDeferredQuickInfoContent
{
private
readonly
SnapshotSpan
_span
;
private
readonly
IProjectionBufferFactoryService
_projectionBufferFactoryService
;
...
...
@@ -26,7 +26,7 @@ internal class ElisionBufferDeferredContent : IDeferredQuickInfoContent
private
readonly
IContentType
_contentType
;
private
readonly
ITextViewRoleSet
_roleSet
;
public
Elis
ionBufferDeferredContent
(
public
Project
ionBufferDeferredContent
(
SnapshotSpan
span
,
IProjectionBufferFactoryService
projectionBufferFactoryService
,
IEditorOptionsFactoryService
editorOptionsFactoryService
,
...
...
@@ -63,9 +63,9 @@ private IWpfTextView CreateView(ITextBuffer buffer)
return
view
;
}
private
I
Elis
ionBuffer
CreateBuffer
()
private
I
Project
ionBuffer
CreateBuffer
()
{
return
_projectionBufferFactoryService
.
Create
Elis
ionBufferWithoutIndentation
(
return
_projectionBufferFactoryService
.
Create
Project
ionBufferWithoutIndentation
(
_editorOptionsFactoryService
.
GlobalOptions
,
_contentType
,
_span
);
}
}
...
...
src/EditorFeatures/Core/Implementation/IntelliSense/QuickInfo/Providers/AbstractQuickInfoProvider.cs
浏览文件 @
a02f1d51
...
...
@@ -151,9 +151,9 @@ protected IDeferredQuickInfoContent CreateGlyphDeferredContent(ISymbol symbol)
return
new
DocumentationCommentDeferredContent
(
documentationComment
,
_typeMap
);
}
protected
IDeferredQuickInfoContent
Create
Elis
ionBufferDeferredContent
(
SnapshotSpan
span
)
protected
IDeferredQuickInfoContent
Create
Project
ionBufferDeferredContent
(
SnapshotSpan
span
)
{
return
new
Elis
ionBufferDeferredContent
(
return
new
Project
ionBufferDeferredContent
(
span
,
_projectionBufferFactoryService
,
_editorOptionsFactoryService
,
_textEditorFactoryService
);
}
}
...
...
src/EditorFeatures/Core/Implementation/Structure/BlockTagState.cs
浏览文件 @
a02f1d51
...
...
@@ -156,7 +156,7 @@ private Span TrimStartingNewlines(Span span)
private
ITextBuffer
CreateElisionBufferWithoutIndentation
(
ITextBuffer
dataBuffer
,
Span
shortHintSpan
)
{
return
_projectionBufferFactoryService
.
Create
Elis
ionBufferWithoutIndentation
(
return
_projectionBufferFactoryService
.
Create
Project
ionBufferWithoutIndentation
(
_editorOptionsFactoryService
.
GlobalOptions
,
contentType
:
null
,
exposedSpans
:
new
SnapshotSpan
(
dataBuffer
.
CurrentSnapshot
,
shortHintSpan
));
...
...
src/EditorFeatures/Core/Shared/Extensions/IProjectionBufferFactoryServiceExtensions.cs
浏览文件 @
a02f1d51
...
...
@@ -30,19 +30,19 @@ internal static class IProjectionBufferFactoryServiceExtensions
[
BaseDefinition
(
"projection"
)]
public
static
readonly
ContentTypeDefinition
RoslynPreviewContentTypeDefinition
;
public
static
I
ElisionBuffer
CreateElis
ionBufferWithoutIndentation
(
public
static
I
ProjectionBuffer
CreateProject
ionBufferWithoutIndentation
(
this
IProjectionBufferFactoryService
factoryService
,
IEditorOptions
editorOptions
,
IContentType
contentType
=
null
,
params
SnapshotSpan
[]
exposedSpans
)
{
return
factoryService
.
Create
Elis
ionBufferWithoutIndentation
(
return
factoryService
.
Create
Project
ionBufferWithoutIndentation
(
editorOptions
,
contentType
,
(
IEnumerable
<
SnapshotSpan
>)
exposedSpans
);
}
public
static
I
ElisionBuffer
CreateElis
ionBufferWithoutIndentation
(
public
static
I
ProjectionBuffer
CreateProject
ionBufferWithoutIndentation
(
this
IProjectionBufferFactoryService
factoryService
,
IEditorOptions
editorOptions
,
IContentType
contentType
,
...
...
@@ -61,37 +61,55 @@ internal static class IProjectionBufferFactoryServiceExtensions
}
contentType
=
contentType
??
factoryService
.
ProjectionContentType
;
var
elisionBuffer
=
factoryService
.
CreateElisionBuffer
(
null
,
spans
,
ElisionBufferOptions
.
None
,
contentType
);
var
projectionBuffer
=
factoryService
.
CreateProjectionBuffer
(
projectionEditResolver
:
null
,
sourceSpans
:
Array
.
Empty
<
object
>(),
options
:
ProjectionBufferOptions
.
None
,
contentType
:
contentType
);
if
(
spans
.
Count
>
0
)
{
var
snapshot
=
spans
.
First
().
Snapshot
;
var
buffer
=
snapshot
.
TextBuffer
;
var
finalSpans
=
new
List
<
object
>();
// We need to figure out the shorted indentation level of the exposed lines. We'll
// then remove that indentation from all lines.
var
indentationColumn
=
DetermineIndentationColumn
(
editorOptions
,
spans
);
var
spansToElide
=
new
List
<
Span
>();
foreach
(
var
span
in
spans
)
{
var
snapshot
=
span
.
Snapshot
;
var
startLineNumber
=
snapshot
.
GetLineNumberFromPosition
(
span
.
Start
);
var
endLineNumber
=
snapshot
.
GetLineNumberFromPosition
(
span
.
End
);
for
(
var
lineNumber
=
startLineNumber
;
lineNumber
<=
endLineNumber
;
lineNumber
++)
{
// Compute the span clamped to this line
var
line
=
snapshot
.
GetLineFromLineNumber
(
lineNumber
);
var
lineOffsetOfColumn
=
line
.
GetLineOffsetFromColumn
(
indentationColumn
,
editorOptions
);
spansToElide
.
Add
(
Span
.
FromBounds
(
line
.
Start
,
line
.
Start
+
lineOffsetOfColumn
));
var
finalSpanStart
=
Math
.
Max
(
line
.
Start
,
span
.
Start
);
var
finalSpanEnd
=
Math
.
Min
(
line
.
EndIncludingLineBreak
,
span
.
End
);
// We'll only offset if our span doesn't already start at the start of the line. See the similar exclusion in
// DetermineIndentationColumn that this matches.
if
(
line
.
Start
==
finalSpanStart
)
{
finalSpanStart
+=
line
.
GetLineOffsetFromColumn
(
indentationColumn
,
editorOptions
);
// Paranoia: what if the indentation reversed our ordering?
if
(
finalSpanStart
>
finalSpanEnd
)
{
finalSpanStart
=
finalSpanEnd
;
}
}
// We don't expect edits to happen while this projection buffer is active. We'll choose EdgeExclusive so
// if they do we don't end up in any cases where there is overlapping source spans.
finalSpans
.
Add
(
snapshot
.
CreateTrackingSpan
(
Span
.
FromBounds
(
finalSpanStart
,
finalSpanEnd
),
SpanTrackingMode
.
EdgeExclusive
));
}
}
elisionBuffer
.
ElideSpans
(
new
NormalizedSpanCollection
(
spansToElide
));
projectionBuffer
.
InsertSpans
(
0
,
finalSpans
);
}
return
elis
ionBuffer
;
return
project
ionBuffer
;
}
private
static
int
DetermineIndentationColumn
(
...
...
src/EditorFeatures/Core/Shared/Utilities/ViewHostingControl.cs
浏览文件 @
a02f1d51
...
...
@@ -6,6 +6,7 @@
using
System.Windows.Media
;
using
Microsoft.VisualStudio.Text
;
using
Microsoft.VisualStudio.Text.Editor
;
using
Microsoft.VisualStudio.Text.Projection
;
namespace
Microsoft.CodeAnalysis.Editor.Shared.Utilities
{
...
...
@@ -14,6 +15,9 @@ internal class ViewHostingControl : ContentControl
private
readonly
Func
<
ITextBuffer
,
IWpfTextView
>
_createView
;
private
readonly
Func
<
ITextBuffer
>
_createBuffer
;
private
ITextBuffer
_createdTextBuffer
;
private
IWpfTextView
_createdView
;
public
ViewHostingControl
(
Func
<
ITextBuffer
,
IWpfTextView
>
createView
,
Func
<
ITextBuffer
>
createBuffer
)
...
...
@@ -25,18 +29,30 @@ internal class ViewHostingControl : ContentControl
this
.
IsVisibleChanged
+=
OnIsVisibleChanged
;
}
private
void
EnsureBufferCreated
()
{
if
(
_createdTextBuffer
==
null
)
{
_createdTextBuffer
=
_createBuffer
();
}
}
private
void
EnsureContentCreated
()
{
if
(
this
.
Content
==
null
)
{
EnsureBufferCreated
();
_createdView
=
_createView
(
_createdTextBuffer
);
this
.
Content
=
_createdView
.
VisualElement
;
}
}
public
ITextView
TextView_TestOnly
{
get
{
var
view
=
(
IWpfTextView
)
this
.
Content
;
if
(
view
==
null
)
{
view
=
_createView
(
_createBuffer
());
this
.
Content
=
view
.
VisualElement
;
}
return
view
;
EnsureContentCreated
();
return
(
ITextView
)
this
.
Content
;
}
}
...
...
@@ -45,26 +61,31 @@ private void OnIsVisibleChanged(object sender, DependencyPropertyChangedEventArg
var
nowVisible
=
(
bool
)
e
.
NewValue
;
if
(
nowVisible
)
{
if
(
this
.
Content
==
null
)
{
this
.
Content
=
_createView
(
_createBuffer
()).
VisualElement
;
}
EnsureContentCreated
();
}
else
{
((
ITextView
)
this
.
Content
).
Close
();
this
.
Content
=
null
;
_createdView
.
Close
();
_createdView
=
null
;
// If a projection buffer has a source span from another buffer, the projection buffer is held alive by the other buffer too.
// This means that a one-off projection buffer created for a tooltip would be kept alive as long as the underlying file
// is still open. Removing the source spans from the projection buffer ensures the projection buffer can be GC'ed.
if
(
_createdTextBuffer
is
IProjectionBuffer
projectionBuffer
)
{
projectionBuffer
.
DeleteSpans
(
0
,
projectionBuffer
.
CurrentSnapshot
.
SpanCount
);
}
_createdTextBuffer
=
null
;
}
}
public
override
string
ToString
()
public
string
GetText_TestOnly
()
{
if
(
this
.
Content
!=
null
)
{
return
((
ITextView
)
this
.
Content
).
TextBuffer
.
CurrentSnapshot
.
GetText
();
}
return
_createBuffer
().
CurrentSnapshot
.
GetText
();
EnsureBufferCreated
();
return
_createdTextBuffer
.
CurrentSnapshot
.
GetText
();
}
}
}
src/EditorFeatures/Test/Extensions/IProjectionBufferFactoryServiceExtensionsTests.cs
浏览文件 @
a02f1d51
...
...
@@ -27,7 +27,7 @@ public void TestCreateElisionBufferWithoutIndentation()
line 2
line 3"
,
contentTypeRegistryService
.
GetContentType
(
"text"
));
var
elisionBuffer
=
IProjectionBufferFactoryServiceExtensions
.
Create
Elis
ionBufferWithoutIndentation
(
var
elisionBuffer
=
IProjectionBufferFactoryServiceExtensions
.
Create
Project
ionBufferWithoutIndentation
(
exportProvider
.
GetExportedValue
<
IProjectionBufferFactoryService
>(),
exportProvider
.
GetExportedValue
<
IEditorOptionsFactoryService
>().
GlobalOptions
,
contentType
:
null
,
...
...
src/EditorFeatures/Test/Structure/StructureTaggerTests.cs
浏览文件 @
a02f1d51
...
...
@@ -155,7 +155,7 @@ End Sub
var
tags
=
await
GetTagsFromWorkspaceAsync
(
workspace
);
var
hints
=
tags
.
Select
(
x
=>
x
.
CollapsedHintForm
).
Cast
<
ViewHostingControl
>().
ToArray
();
Assert
.
Equal
(
"Sub Main(args As String())\r\nEnd Sub"
,
hints
[
1
].
ToString
());
// method
Assert
.
Equal
(
"Sub Main(args As String())\r\nEnd Sub"
,
hints
[
1
].
GetText_TestOnly
());
// method
hints
.
Do
(
v
=>
v
.
TextView_TestOnly
.
Close
());
}
}
...
...
src/Features/CSharp/Portable/Completion/CompletionProviders/ExplicitInterfaceTypeCompletionProvider.cs
浏览文件 @
a02f1d51
...
...
@@ -86,8 +86,13 @@ public override async Task ProvideCompletionsAsync(CompletionContext context)
return
SpecializedTasks
.
EmptyImmutableArray
<
ISymbol
>();
}
// Looks syntactically good. See what interfaces our containing class/struct has
var
typeDeclaration
=
typeNode
.
GetAncestor
<
TypeDeclarationSyntax
>();
if
(
typeDeclaration
==
null
)
{
return
SpecializedTasks
.
EmptyImmutableArray
<
ISymbol
>();
}
// Looks syntactically good. See what interfaces our containing class/struct has
Debug
.
Assert
(
IsClassOrStruct
(
typeDeclaration
));
var
semanticModel
=
context
.
SemanticModel
;
...
...
src/VisualStudio/Core/Next/FindReferences/Entries/DocumentSpanEntry.cs
浏览文件 @
a02f1d51
...
...
@@ -140,7 +140,7 @@ private ContentControl CreateToolTipContent(ITextBuffer textBuffer)
PredefinedTextViewRoles
.
Document
,
PredefinedTextViewRoles
.
Editable
);
var
content
=
new
Elis
ionBufferDeferredContent
(
var
content
=
new
Project
ionBufferDeferredContent
(
snapshotSpan
,
Presenter
.
ProjectionBufferFactoryService
,
Presenter
.
EditorOptionsFactoryService
,
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录