Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
lwm1986
roslyn
提交
ef58f365
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,体验更适合开发者的 AI 搜索 >>
未验证
提交
ef58f365
编写于
12月 15, 2020
作者:
S
Sam Harwell
提交者:
GitHub
12月 15, 2020
浏览文件
操作
浏览文件
下载
差异文件
Merge pull request #49984 from sharwell/context-values
Implement ContextVariableArgumentProvider
上级
ab66022c
ff3a014a
变更
8
隐藏空白更改
内联
并排
Showing
8 changed file
with
307 addition
and
2 deletion
+307
-2
src/EditorFeatures/CSharpTest/Completion/ArgumentProviders/ArgumentProviderOrderTests.cs
...ompletion/ArgumentProviders/ArgumentProviderOrderTests.cs
+1
-0
src/EditorFeatures/CSharpTest/Completion/ArgumentProviders/ContextVariableArgumentProviderTests.cs
...ArgumentProviders/ContextVariableArgumentProviderTests.cs
+121
-0
src/EditorFeatures/VisualBasicTest/Completion/ArgumentProviderOrderTests.vb
.../VisualBasicTest/Completion/ArgumentProviderOrderTests.vb
+1
-0
src/EditorFeatures/VisualBasicTest/Completion/ArgumentProviders/ContextVariableArgumentProviderTests.vb
...ArgumentProviders/ContextVariableArgumentProviderTests.vb
+102
-0
src/Features/CSharp/Portable/Completion/Providers/ContextVariableArgumentProvider.cs
...e/Completion/Providers/ContextVariableArgumentProvider.cs
+44
-0
src/Features/CSharp/Portable/Completion/Providers/DefaultArgumentProvider.cs
.../Portable/Completion/Providers/DefaultArgumentProvider.cs
+1
-1
src/Features/VisualBasic/Portable/Completion/Providers/ContextVariableArgumentProvider.vb
...e/Completion/Providers/ContextVariableArgumentProvider.vb
+36
-0
src/Features/VisualBasic/Portable/Completion/Providers/DefaultArgumentProvider.vb
.../Portable/Completion/Providers/DefaultArgumentProvider.vb
+1
-1
未找到文件。
src/EditorFeatures/CSharpTest/Completion/ArgumentProviders/ArgumentProviderOrderTests.cs
浏览文件 @
ef58f365
...
...
@@ -35,6 +35,7 @@ public void TestArgumentProviderOrder()
typeof
(
FirstBuiltInArgumentProvider
),
// Built-in providers
typeof
(
ContextVariableArgumentProvider
),
typeof
(
DefaultArgumentProvider
),
// Marker for end of built-in argument providers
...
...
src/EditorFeatures/CSharpTest/Completion/ArgumentProviders/ContextVariableArgumentProviderTests.cs
0 → 100644
浏览文件 @
ef58f365
// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the MIT license.
// See the LICENSE file in the project root for more information.
using
System
;
using
System.Threading.Tasks
;
using
Microsoft.CodeAnalysis.CSharp.Completion.Providers
;
using
Microsoft.CodeAnalysis.Test.Utilities
;
using
Xunit
;
namespace
Microsoft.CodeAnalysis.Editor.CSharp.UnitTests.Completion.ArgumentProviders
{
[
Trait
(
Traits
.
Feature
,
Traits
.
Features
.
Completion
)]
public
class
ContextVariableArgumentProviderTests
:
AbstractCSharpArgumentProviderTests
{
internal
override
Type
GetArgumentProviderType
()
=>
typeof
(
ContextVariableArgumentProvider
);
[
Theory
]
[
InlineData
(
"string"
)]
[
InlineData
(
"bool"
)]
[
InlineData
(
"int?"
)]
public
async
Task
TestLocalVariable
(
string
type
)
{
var
markup
=
$@"
class C
{{
void
Method
()
{{
{
type
}
arg
=
default
;
this
.
Target
(
$$
);
}}
void
Target
({
type
}
arg
)
{{
}}
}}
"
;
await
VerifyDefaultValueAsync
(
markup
,
"arg"
);
await
VerifyDefaultValueAsync
(
markup
,
expectedDefaultValue
:
null
,
previousDefaultValue
:
"prior"
);
}
[
Theory
]
[
InlineData
(
"string"
)]
[
InlineData
(
"bool"
)]
[
InlineData
(
"int?"
)]
public
async
Task
TestParameter
(
string
type
)
{
var
markup
=
$@"
class C
{{
void
Method
({
type
}
arg
)
{{
this
.
Target
(
$$
);
}}
void
Target
({
type
}
arg
)
{{
}}
}}
"
;
await
VerifyDefaultValueAsync
(
markup
,
"arg"
);
await
VerifyDefaultValueAsync
(
markup
,
expectedDefaultValue
:
null
,
previousDefaultValue
:
"prior"
);
}
[
Theory
]
[
InlineData
(
"string"
)]
[
InlineData
(
"bool"
)]
[
InlineData
(
"int?"
)]
public
async
Task
TestInstanceVariable
(
string
type
)
{
var
markup
=
$@"
class C
{{
{
type
}
arg
;
void
Method
()
{{
this
.
Target
(
$$
);
}}
void
Target
({
type
}
arg
)
{{
}}
}}
"
;
await
VerifyDefaultValueAsync
(
markup
,
"arg"
);
await
VerifyDefaultValueAsync
(
markup
,
expectedDefaultValue
:
null
,
previousDefaultValue
:
"prior"
);
}
// Note: The current implementation checks for exact type and name match. If this changes, some of these tests
// may need to be updated to account for the new behavior.
[
Theory
]
[
InlineData
(
"object"
,
"string"
)]
[
InlineData
(
"string"
,
"object"
)]
[
InlineData
(
"bool"
,
"bool?"
)]
[
InlineData
(
"bool"
,
"int"
)]
[
InlineData
(
"int"
,
"object"
)]
public
async
Task
TestMismatchType
(
string
parameterType
,
string
valueType
)
{
var
markup
=
$@"
class C
{{
void
Method
({
valueType
}
arg
)
{{
this
.
Target
(
$$
);
}}
void
Target
({
parameterType
}
arg
)
{{
}}
}}
"
;
await
VerifyDefaultValueAsync
(
markup
,
null
);
}
}
}
src/EditorFeatures/VisualBasicTest/Completion/ArgumentProviderOrderTests.vb
浏览文件 @
ef58f365
...
...
@@ -24,6 +24,7 @@ Namespace Microsoft.CodeAnalysis.Editor.VisualBasic.UnitTests.Completion
Dim
expectedOrder
=
{
GetType
(
FirstBuiltInArgumentProvider
),
GetType
(
ContextVariableArgumentProvider
),
GetType
(
DefaultArgumentProvider
),
GetType
(
LastBuiltInArgumentProvider
)
}
...
...
src/EditorFeatures/VisualBasicTest/Completion/ArgumentProviders/ContextVariableArgumentProviderTests.vb
0 → 100644
浏览文件 @
ef58f365
' Licensed to the .NET Foundation under one or more agreements.
' The .NET Foundation licenses this file to you under the MIT license.
' See the LICENSE file in the project root for more information.
Imports
Microsoft.CodeAnalysis.VisualBasic.Completion.Providers
Namespace
Microsoft.CodeAnalysis.Editor.VisualBasic.UnitTests.Completion.ArgumentProviders
<
Trait
(
Traits
.
Feature
,
Traits
.
Features
.
Completion
)
>
Public
Class
ContextVariableArgumentProviderTests
Inherits
AbstractVisualBasicArgumentProviderTests
Friend
Overrides
Function
GetArgumentProviderType
()
As
Type
Return
GetType
(
ContextVariableArgumentProvider
)
End
Function
<
Theory
>
<
InlineData
(
"String"
)
>
<
InlineData
(
"Boolean"
)
>
<
InlineData
(
"Integer?"
)
>
Public
Async
Function
TestLocalVariable
(
type
As
String
)
As
Task
Dim
markup
=
$
"
Class C
Sub Method()
Dim arg As {type} = Nothing
Me.Target($$)
End Sub
Sub Target(arg As {type})
End Sub
End Class
"
Await
VerifyDefaultValueAsync
(
markup
,
"arg"
)
Await
VerifyDefaultValueAsync
(
markup
,
expectedDefaultValue
:
=
Nothing
,
previousDefaultValue
:
=
"prior"
)
End
Function
<
Theory
>
<
InlineData
(
"String"
)
>
<
InlineData
(
"Boolean"
)
>
<
InlineData
(
"Integer?"
)
>
Public
Async
Function
TestParameter
(
type
As
String
)
As
Task
Dim
markup
=
$
"
Class C
Sub Method(arg As {type})
Me.Target($$)
End Sub
Sub Target(arg As {type})
End Sub
End Class
"
Await
VerifyDefaultValueAsync
(
markup
,
"arg"
)
Await
VerifyDefaultValueAsync
(
markup
,
expectedDefaultValue
:
=
Nothing
,
previousDefaultValue
:
=
"prior"
)
End
Function
<
Theory
>
<
InlineData
(
"String"
)
>
<
InlineData
(
"Boolean"
)
>
<
InlineData
(
"Integer?"
)
>
Public
Async
Function
TestInstanceVariable
(
type
As
String
)
As
Task
Dim
markup
=
$
"
Class C
Dim arg As {type}
Sub Method()
Me.Target($$)
End Sub
Sub Target(arg As {type})
End Sub
End Class
"
Await
VerifyDefaultValueAsync
(
markup
,
"arg"
)
Await
VerifyDefaultValueAsync
(
markup
,
expectedDefaultValue
:
=
Nothing
,
previousDefaultValue
:
=
"prior"
)
End
Function
' Note: The current implementation checks for exact type and name match. If this changes, some of these tests
' may need to be updated to account for the new behavior.
<
Theory
>
<
InlineData
(
"Object"
,
"String"
)
>
<
InlineData
(
"String"
,
"Object"
)
>
<
InlineData
(
"Boolean"
,
"Boolean?"
)
>
<
InlineData
(
"Boolean"
,
"Integer"
)
>
<
InlineData
(
"Integer"
,
"Object"
)
>
Public
Async
Function
TestMismatchType
(
parameterType
As
String
,
valueType
As
String
)
As
Task
Dim
markup
=
$
"
Class C
Sub Method(arg As {valueType})
Me.Target($$)
End Sub
Sub Target(arg As {parameterType})
End Sub
End Class
"
Await
VerifyDefaultValueAsync
(
markup
,
Nothing
)
End
Function
End
Class
End
Namespace
src/Features/CSharp/Portable/Completion/Providers/ContextVariableArgumentProvider.cs
0 → 100644
浏览文件 @
ef58f365
// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the MIT license.
// See the LICENSE file in the project root for more information.
using
System
;
using
System.Composition
;
using
System.Threading.Tasks
;
using
Microsoft.CodeAnalysis.Completion
;
using
Microsoft.CodeAnalysis.Host.Mef
;
using
Microsoft.CodeAnalysis.Shared.Extensions
;
namespace
Microsoft.CodeAnalysis.CSharp.Completion.Providers
{
[
ExportArgumentProvider
(
nameof
(
ContextVariableArgumentProvider
),
LanguageNames
.
CSharp
)]
[
ExtensionOrder
(
After
=
nameof
(
FirstBuiltInArgumentProvider
))]
[
Shared
]
internal
sealed
class
ContextVariableArgumentProvider
:
ArgumentProvider
{
[
ImportingConstructor
]
[
Obsolete
(
MefConstruction
.
ImportingConstructorMessage
,
error
:
true
)]
public
ContextVariableArgumentProvider
()
{
}
public
override
async
Task
ProvideArgumentAsync
(
ArgumentContext
context
)
{
if
(
context
.
PreviousValue
is
not
null
)
{
return
;
}
var
semanticModel
=
await
context
.
Document
.
GetRequiredSemanticModelAsync
(
context
.
CancellationToken
).
ConfigureAwait
(
false
);
var
symbols
=
semanticModel
.
LookupSymbols
(
context
.
Position
,
name
:
context
.
Parameter
.
Name
);
foreach
(
var
symbol
in
symbols
)
{
if
(
SymbolEqualityComparer
.
Default
.
Equals
(
context
.
Parameter
.
Type
,
symbol
.
GetSymbolType
()))
{
context
.
DefaultValue
=
context
.
Parameter
.
Name
;
return
;
}
}
}
}
}
src/Features/CSharp/Portable/Completion/Providers/DefaultArgumentProvider.cs
浏览文件 @
ef58f365
...
...
@@ -12,7 +12,7 @@
namespace
Microsoft.CodeAnalysis.CSharp.Completion.Providers
{
[
ExportArgumentProvider
(
nameof
(
DefaultArgumentProvider
),
LanguageNames
.
CSharp
)]
[
ExtensionOrder
(
After
=
nameof
(
FirstBuiltIn
ArgumentProvider
))]
[
ExtensionOrder
(
After
=
nameof
(
ContextVariable
ArgumentProvider
))]
[
Shared
]
internal
sealed
class
DefaultArgumentProvider
:
AbstractDefaultArgumentProvider
{
...
...
src/Features/VisualBasic/Portable/Completion/Providers/ContextVariableArgumentProvider.vb
0 → 100644
浏览文件 @
ef58f365
' Licensed to the .NET Foundation under one or more agreements.
' The .NET Foundation licenses this file to you under the MIT license.
' See the LICENSE file in the project root for more information.
Imports
System.Composition
Imports
Microsoft.CodeAnalysis.Completion
Imports
Microsoft.CodeAnalysis.Host.Mef
Namespace
Microsoft.CodeAnalysis.VisualBasic.Completion.Providers
<
ExportArgumentProvider
(
NameOf
(
ContextVariableArgumentProvider
),
LanguageNames
.
VisualBasic
)
>
<
ExtensionOrder
(
After
:
=
NameOf
(
FirstBuiltInArgumentProvider
))
>
<
[
Shared
]
>
Friend
Class
ContextVariableArgumentProvider
Inherits
ArgumentProvider
<
ImportingConstructor
>
<
Obsolete
(
MefConstruction
.
ImportingConstructorMessage
,
True
)
>
Public
Sub
New
()
End
Sub
Public
Overrides
Async
Function
ProvideArgumentAsync
(
context
As
ArgumentContext
)
As
Task
If
context
.
PreviousValue
IsNot
Nothing
Then
Return
End
If
Dim
semanticModel
=
Await
context
.
Document
.
GetRequiredSemanticModelAsync
(
context
.
CancellationToken
).
ConfigureAwait
(
False
)
Dim
symbols
=
semanticModel
.
LookupSymbols
(
context
.
Position
,
name
:
=
context
.
Parameter
.
Name
)
For
Each
symbol
In
symbols
If
SymbolEqualityComparer
.
Default
.
Equals
(
context
.
Parameter
.
Type
,
symbol
.
GetSymbolType
())
Then
context
.
DefaultValue
=
context
.
Parameter
.
Name
Return
End
If
Next
End
Function
End
Class
End
Namespace
src/Features/VisualBasic/Portable/Completion/Providers/DefaultArgumentProvider.vb
浏览文件 @
ef58f365
...
...
@@ -8,7 +8,7 @@ Imports Microsoft.CodeAnalysis.Host.Mef
Namespace
Microsoft.CodeAnalysis.VisualBasic.Completion.Providers
<
ExportArgumentProvider
(
NameOf
(
DefaultArgumentProvider
),
LanguageNames
.
VisualBasic
)
>
<
ExtensionOrder
(
After
:
=
NameOf
(
FirstBuiltIn
ArgumentProvider
))
>
<
ExtensionOrder
(
After
:
=
NameOf
(
ContextVariable
ArgumentProvider
))
>
<
[
Shared
]
>
Friend
Class
DefaultArgumentProvider
Inherits
AbstractDefaultArgumentProvider
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录