未验证 提交 e9eb808b 编写于 作者: G Gen Lu 提交者: GitHub

Merge pull request #32617 from alrz/string-collapse

Add structure provider for string literals
// 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 Microsoft.CodeAnalysis.Test.Utilities;
using Xunit;
namespace Microsoft.CodeAnalysis.Editor.CSharp.UnitTests.Structure
{
public class StringLiteralExpressionStructureTests : AbstractCSharpSyntaxNodeStructureTests<LiteralExpressionSyntax>
{
internal override AbstractSyntaxStructureProvider CreateProvider()
=> new StringLiteralExpressionStructureProvider();
[Fact, Trait(Traits.Feature, Traits.Features.Outlining)]
public async Task TestMultiLineStringLiteral()
{
await VerifyBlockSpansAsync(
@"
class C
{
void M()
{
var v =
{|hint:{|textspan:$$@""
class
{
}
""|}|};
}
}",
Region("textspan", "hint", CSharpStructureHelpers.Ellipsis, autoCollapse: true));
}
[Fact, Trait(Traits.Feature, Traits.Features.Outlining)]
public async Task TestMissingOnIncompleteStringLiteral()
{
await VerifyNoBlockSpansAsync(
@"
class C
{
void M()
{
var v = $$"";
}
}");
}
}
}
' Copyright (c) Microsoft. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
Imports Microsoft.CodeAnalysis.Structure
Imports Microsoft.CodeAnalysis.VisualBasic.Structure
Imports Microsoft.CodeAnalysis.VisualBasic.Syntax
Namespace Microsoft.CodeAnalysis.Editor.VisualBasic.UnitTests.Outlining
Public Class StringLiteralExpressionStructureTests
Inherits AbstractVisualBasicSyntaxNodeStructureProviderTests(Of LiteralExpressionSyntax)
Friend Overrides Function CreateProvider() As AbstractSyntaxStructureProvider
Return New StringLiteralExpressionStructureProvider()
End Function
<Fact, Trait(Traits.Feature, Traits.Features.Outlining)>
Public Async Function TestMultiLineStringLiteral() As Task
Const code = "
Class C
Sub M()
Dim v =
{|hint:{|textspan:$$""
Class C
End Class
""|}|}
End Sub
End Class
"
Await VerifyBlockSpansAsync(code,
Region("textspan", "hint", "...", autoCollapse:=True))
End Function
<Fact, Trait(Traits.Feature, Traits.Features.Outlining)>
Public Async Function TestMissingOnIncompleteStringLiteral() As Task
Const code = "
Class C
Sub M()
Dim v =
$$""
End Sub
End Class
"
Await VerifyNoBlockSpansAsync(code)
End Function
End Class
End Namespace
......@@ -41,6 +41,7 @@ internal class CSharpBlockStructureProvider : AbstractBlockStructureProvider
builder.Add<SimpleLambdaExpressionSyntax, SimpleLambdaExpressionStructureProvider>();
builder.Add<StructDeclarationSyntax, TypeDeclarationStructureProvider, MetadataAsSource.MetadataTypeDeclarationStructureProvider>();
builder.Add<SwitchStatementSyntax, SwitchStatementStructureProvider>();
builder.Add<LiteralExpressionSyntax, StringLiteralExpressionStructureProvider>();
return builder.ToImmutable();
}
......
// 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.PooledObjects;
using Microsoft.CodeAnalysis.Structure;
namespace Microsoft.CodeAnalysis.CSharp.Structure
{
internal sealed class StringLiteralExpressionStructureProvider : AbstractSyntaxNodeStructureProvider<LiteralExpressionSyntax>
{
protected override void CollectBlockSpans(LiteralExpressionSyntax node, ArrayBuilder<BlockSpan> spans, OptionSet options, CancellationToken cancellationToken)
{
if (node.IsKind(SyntaxKind.StringLiteralExpression) &&
!node.ContainsDiagnostics)
{
spans.Add(new BlockSpan(
isCollapsible: true,
textSpan: node.Span,
hintSpan: node.Span,
type: BlockTypes.Expression,
autoCollapse: true,
isDefaultCollapsed: false));
}
}
}
}
' Copyright (c) Microsoft. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
Imports System.Threading
Imports Microsoft.CodeAnalysis.Options
Imports Microsoft.CodeAnalysis.PooledObjects
Imports Microsoft.CodeAnalysis.Structure
Imports Microsoft.CodeAnalysis.VisualBasic.Syntax
Namespace Microsoft.CodeAnalysis.VisualBasic.Structure
Friend Class StringLiteralExpressionStructureProvider
Inherits AbstractSyntaxNodeStructureProvider(Of LiteralExpressionSyntax)
Protected Overrides Sub CollectBlockSpans(node As LiteralExpressionSyntax, spans As ArrayBuilder(Of BlockSpan), options As OptionSet, cancellationToken As CancellationToken)
If node.IsKind(SyntaxKind.StringLiteralExpression) AndAlso
Not node.ContainsDiagnostics Then
spans.Add(New BlockSpan(
type:=BlockTypes.Expression,
isCollapsible:=True,
textSpan:=node.Span,
autoCollapse:=True,
isDefaultCollapsed:=False))
End If
End Sub
End Class
End Namespace
......@@ -79,6 +79,7 @@ Namespace Microsoft.CodeAnalysis.VisualBasic.Structure
builder.Add(Of XmlDocumentSyntax, XmlExpressionStructureProvider)()
builder.Add(Of XmlElementSyntax, XmlExpressionStructureProvider)()
builder.Add(Of XmlProcessingInstructionSyntax, XmlExpressionStructureProvider)()
builder.Add(Of LiteralExpressionSyntax, StringLiteralExpressionStructureProvider)()
Return builder.ToImmutable()
End Function
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册