提交 e941688d 编写于 作者: C CyrusNajmabadi 提交者: GitHub

Merge pull request #14957 from CyrusNajmabadi/outlineExpressionBodies

Outline expression bodied members.

Fixes #9238
......@@ -281,6 +281,7 @@
<Compile Include="Formatting\Indentation\SmartTokenFormatterFormatTokenTests.cs" />
<Compile Include="InlineDeclaration\CSharpInlineDeclarationTests_FixAllTests.cs" />
<Compile Include="InlineDeclaration\CSharpInlineDeclarationTests.cs" />
<Compile Include="Structure\ArrowExpressionClauseStructureTests.cs" />
<Compile Include="Structure\InitializerExpressionStructureTests.cs" />
<Compile Include="UseCollectionInitializer\UseCollectionInitializerTests.cs" />
<Compile Include="UseCoalesceExpression\UseCoalesceExpressionForNullableTests.cs" />
......
// Copyright (c) Microsoft. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
using System.Threading.Tasks;
using Microsoft.CodeAnalysis.CSharp.Structure;
using Microsoft.CodeAnalysis.CSharp.Syntax;
using Microsoft.CodeAnalysis.Structure;
using Roslyn.Test.Utilities;
using Xunit;
namespace Microsoft.CodeAnalysis.Editor.CSharp.UnitTests.Structure
{
public class ArrowExpressionClauseStructureTests : AbstractCSharpSyntaxNodeStructureTests<ArrowExpressionClauseSyntax>
{
internal override AbstractSyntaxStructureProvider CreateProvider()
=> new ArrowExpressionClauseStructureProvider();
[Fact, Trait(Traits.Feature, Traits.Features.Outlining)]
public async Task TestArrowExpressionClause1()
{
await VerifyBlockSpansAsync(
@"
class C
{
{|hintspan:void M(){|textspan: $$=> expression
? trueCase
: falseCase;|}|};
}
",
Region("textspan", "hintspan", CSharpStructureHelpers.Ellipsis, autoCollapse: false));
}
}
}
\ No newline at end of file
......@@ -55,6 +55,7 @@
<Compile Include="..\..\..\Compilers\CSharp\Portable\Syntax\LambdaUtilities.cs">
<Link>InternalUtilities\LambdaUtilities.cs</Link>
</Compile>
<Compile Include="Structure\Providers\ArrowExpressionClauseStructureProvider.cs" />
<Compile Include="ConvertToInterpolatedString\CSharpConvertConcatenationToInterpolatedStringRefactoringProvider.cs" />
<Compile Include="Structure\Providers\InitializerExpressionStructureProvider.cs" />
<Compile Include="UseCoalesceExpression\CSharpUseCoalesceExpressionForNullableDiagnosticAnalyzer.cs" />
......
......@@ -7,7 +7,6 @@
namespace Microsoft.CodeAnalysis.CSharp.Structure
{
internal class CSharpBlockStructureProvider : AbstractBlockStructureProvider
{
private static ImmutableDictionary<Type, ImmutableArray<AbstractSyntaxStructureProvider>> CreateDefaultNodeProviderMap()
......@@ -16,6 +15,7 @@ internal class CSharpBlockStructureProvider : AbstractBlockStructureProvider
builder.Add<AccessorDeclarationSyntax, AccessorDeclarationStructureProvider>();
builder.Add<AnonymousMethodExpressionSyntax, AnonymousMethodExpressionStructureProvider>();
builder.Add<ArrowExpressionClauseSyntax, ArrowExpressionClauseStructureProvider>();
builder.Add<BlockSyntax, BlockSyntaxStructureProvider>();
builder.Add<ClassDeclarationSyntax, TypeDeclarationStructureProvider, MetadataAsSource.MetadataTypeDeclarationStructureProvider>();
builder.Add<CompilationUnitSyntax, CompilationUnitStructureProvider>();
......
// Copyright (c) Microsoft. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
using System.Threading;
using Microsoft.CodeAnalysis.CSharp.Syntax;
using Microsoft.CodeAnalysis.Options;
using Microsoft.CodeAnalysis.Structure;
using Microsoft.CodeAnalysis.Text;
namespace Microsoft.CodeAnalysis.CSharp.Structure
{
internal class ArrowExpressionClauseStructureProvider : AbstractSyntaxNodeStructureProvider<ArrowExpressionClauseSyntax>
{
protected override void CollectBlockSpans(
ArrowExpressionClauseSyntax node,
ArrayBuilder<BlockSpan> spans,
OptionSet options,
CancellationToken cancellationToken)
{
var previousToken = node.ArrowToken.GetPreviousToken();
spans.Add(new BlockSpan(
isCollapsible: true,
textSpan: TextSpan.FromBounds(previousToken.Span.End, node.Parent.Span.End),
hintSpan: node.Parent.Span,
type: BlockTypes.Nonstructural));
}
}
}
\ No newline at end of file
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册