提交 63dd1bf0 编写于 作者: C CyrusNajmabadi 提交者: GitHub

Merge pull request #14902 from CyrusNajmabadi/outliningCollapseOption

Add option to control if #regions should be collapsed when outlining.
......@@ -30,7 +30,7 @@ public async Task SimpleRegion()
#endregion|}";
await VerifyBlockSpansAsync(code,
Region("span", "Foo", autoCollapse: true, isDefaultCollapsed: true));
Region("span", "Foo", autoCollapse: false, isDefaultCollapsed: true));
}
[WorkItem(539361, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/539361")]
......@@ -66,7 +66,7 @@ class Classic
}";
await VerifyBlockSpansAsync(code,
Region("span", "TaoRegion", autoCollapse: true, isDefaultCollapsed: true));
Region("span", "TaoRegion", autoCollapse: false, isDefaultCollapsed: true));
}
[WorkItem(953668, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/953668")]
......@@ -84,7 +84,7 @@ static void Main(string[] args)
}";
await VerifyBlockSpansAsync(code,
Region("span", "Region", autoCollapse: true, isDefaultCollapsed: true));
Region("span", "Region", autoCollapse: false, isDefaultCollapsed: true));
}
[WorkItem(4105, "https://github.com/dotnet/roslyn/issues/4105")]
......@@ -102,7 +102,7 @@ static void Main(string[] args)
}";
await VerifyBlockSpansAsync(code,
Region("span", "Region", autoCollapse: true, isDefaultCollapsed: true));
Region("span", "Region", autoCollapse: false, isDefaultCollapsed: true));
}
}
}
\ No newline at end of file
......@@ -75,7 +75,8 @@ protected sealed override ITaggerEventSource CreateEventSource(ITextView textVie
TaggerEventSources.OnOptionChanged(subjectBuffer, BlockStructureOptions.ShowBlockStructureGuidesForCommentsAndPreprocessorRegions, TaggerDelay.NearImmediate),
TaggerEventSources.OnOptionChanged(subjectBuffer, BlockStructureOptions.ShowOutliningForCodeLevelConstructs, TaggerDelay.NearImmediate),
TaggerEventSources.OnOptionChanged(subjectBuffer, BlockStructureOptions.ShowOutliningForDeclarationLevelConstructs, TaggerDelay.NearImmediate),
TaggerEventSources.OnOptionChanged(subjectBuffer, BlockStructureOptions.ShowOutliningForCommentsAndPreprocessorRegions, TaggerDelay.NearImmediate));
TaggerEventSources.OnOptionChanged(subjectBuffer, BlockStructureOptions.ShowOutliningForCommentsAndPreprocessorRegions, TaggerDelay.NearImmediate),
TaggerEventSources.OnOptionChanged(subjectBuffer, BlockStructureOptions.CollapseRegionsWhenCollapsingToDefinitions, TaggerDelay.NearImmediate));
}
/// <summary>
......
......@@ -10,6 +10,7 @@
using Microsoft.VisualStudio.Text.Editor;
using Microsoft.VisualStudio.Text.Projection;
using Microsoft.VisualStudio.Text.Tagging;
using Roslyn.Utilities;
namespace Microsoft.CodeAnalysis.Editor.Implementation.Structure
{
......@@ -55,13 +56,14 @@ internal class RoslynOutliningRegionTag : IOutliningRegionTag
public override bool Equals(object obj)
=> Equals(obj as RoslynOutliningRegionTag);
// This is only called if the spans for the tags were the same. In that case, we
// consider ourselves the same unless the CollapsedForm properties are different.
public bool Equals(RoslynOutliningRegionTag tag)
=> tag != null && Equals(this.CollapsedForm, tag.CollapsedForm);
=> tag != null &&
IsImplementation == tag.IsImplementation &&
Equals(this.CollapsedForm, tag.CollapsedForm);
public override int GetHashCode()
=> EqualityComparer<object>.Default.GetHashCode(this.CollapsedForm);
=> Hash.Combine(IsImplementation,
EqualityComparer<object>.Default.GetHashCode(this.CollapsedForm));
public object CollapsedHintForm =>
new ViewHostingControl(CreateElisionBufferView, CreateElisionBuffer);
......
......@@ -63,9 +63,9 @@ private class RoslynBlockTag : RoslynOutliningRegionTag, IBlockTag
ITextSnapshot snapshot,
BlockSpan blockSpan) :
base(textEditorFactoryService,
projectionBufferFactoryService,
editorOptionsFactoryService,
snapshot, blockSpan)
projectionBufferFactoryService,
editorOptionsFactoryService,
snapshot, blockSpan)
{
Parent = parent;
Level = parent == null ? 0 : parent.Level + 1;
......@@ -87,21 +87,20 @@ public override bool Equals(object obj)
/// </summary>
public bool Equals(RoslynBlockTag tag)
{
return tag != null &&
this.IsCollapsible == tag.IsCollapsible &&
this.Level == tag.Level &&
this.Type == tag.Type &&
EqualityComparer<object>.Default.Equals(this.CollapsedForm, tag.CollapsedForm) &&
this.StatementSpan == tag.StatementSpan &&
this.Span == tag.Span;
return base.Equals(tag) &&
IsCollapsible == tag.IsCollapsible &&
Level == tag.Level &&
Type == tag.Type &&
StatementSpan == tag.StatementSpan &&
Span == tag.Span;
}
public override int GetHashCode()
{
return Hash.Combine(this.IsCollapsible,
return Hash.Combine(base.GetHashCode(),
Hash.Combine(this.IsCollapsible,
Hash.Combine(this.Level,
Hash.Combine(this.Type,
Hash.Combine(this.CollapsedForm,
Hash.Combine(this.StatementSpan.GetHashCode(), this.Span.GetHashCode())))));
}
}
......
......@@ -8,6 +8,7 @@
using Microsoft.CodeAnalysis.Editor.Tagging;
using Microsoft.CodeAnalysis.Editor.UnitTests.Workspaces;
using Microsoft.CodeAnalysis.Shared.TestHooks;
using Microsoft.CodeAnalysis.Structure;
using Microsoft.VisualStudio.Text.Editor;
using Microsoft.VisualStudio.Text.Projection;
using Microsoft.VisualStudio.Text.Tagging;
......@@ -20,7 +21,7 @@ namespace Microsoft.CodeAnalysis.Editor.UnitTests.Structure
public class StructureTaggerTests
{
[WpfFact, Trait(Traits.Feature, Traits.Features.Outlining)]
public async Task CSharpOutliningTagger()
public async Task CSharpOutliningTagger_RegionIsDefinition()
{
var code =
@"using System;
......@@ -39,6 +40,9 @@ static void Main(string[] args)
using (var workspace = await TestWorkspace.CreateCSharpAsync(code))
{
workspace.Options = workspace.Options.WithChangedOption(
BlockStructureOptions.CollapseRegionsWhenCollapsingToDefinitions, LanguageNames.CSharp, true);
var tags = await GetTagsFromWorkspaceAsync(workspace);
// ensure all 4 outlining region tags were found
......@@ -60,6 +64,47 @@ static void Main(string[] args)
}
}
[WpfFact, Trait(Traits.Feature, Traits.Features.Outlining)]
public async Task CSharpOutliningTagger_RegionIsNotDefinition()
{
var code =
@"using System;
namespace MyNamespace
{
#region MyRegion
public class MyClass
{
static void Main(string[] args)
{
int x = 5;
}
}
#endregion
}";
using (var workspace = await TestWorkspace.CreateCSharpAsync(code))
{
var tags = await GetTagsFromWorkspaceAsync(workspace);
// ensure all 4 outlining region tags were found
Assert.Equal(4, tags.Count);
// ensure only the method is marked as implementation
Assert.False(tags[0].IsImplementation);
Assert.False(tags[1].IsImplementation);
Assert.False(tags[2].IsImplementation);
Assert.True(tags[3].IsImplementation);
// verify line counts
var hints = tags.Select(x => x.CollapsedHintForm).Cast<ViewHostingControl>().Select(vhc => vhc.TextView_TestOnly).ToList();
Assert.Equal(12, hints[0].TextSnapshot.LineCount); // namespace
Assert.Equal(9, hints[1].TextSnapshot.LineCount); // region
Assert.Equal(7, hints[2].TextSnapshot.LineCount); // class
Assert.Equal(4, hints[3].TextSnapshot.LineCount); // method
hints.Do(v => v.Close());
}
}
[WpfFact, Trait(Traits.Feature, Traits.Features.Outlining)]
public async Task VisualBasicOutliningTagger()
{
......
......@@ -2,6 +2,7 @@
using System.Threading;
using Microsoft.CodeAnalysis.CSharp.Syntax;
using Microsoft.CodeAnalysis.Options;
using Microsoft.CodeAnalysis.Structure;
namespace Microsoft.CodeAnalysis.CSharp.Structure
......@@ -11,6 +12,7 @@ internal class AccessorDeclarationStructureProvider : AbstractSyntaxNodeStructur
protected override void CollectBlockSpans(
AccessorDeclarationSyntax accessorDeclaration,
ArrayBuilder<BlockSpan> spans,
OptionSet options,
CancellationToken cancellationToken)
{
CSharpStructureHelpers.CollectCommentBlockSpans(accessorDeclaration, spans);
......
......@@ -2,6 +2,7 @@
using System.Threading;
using Microsoft.CodeAnalysis.CSharp.Syntax;
using Microsoft.CodeAnalysis.Options;
using Microsoft.CodeAnalysis.Structure;
namespace Microsoft.CodeAnalysis.CSharp.Structure
......@@ -11,6 +12,7 @@ internal class AnonymousMethodExpressionStructureProvider : AbstractSyntaxNodeSt
protected override void CollectBlockSpans(
AnonymousMethodExpressionSyntax anonymousMethod,
ArrayBuilder<BlockSpan> spans,
OptionSet options,
CancellationToken cancellationToken)
{
// fault tolerance
......
// 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;
using System.Threading;
using Microsoft.CodeAnalysis.CSharp.Extensions;
using Microsoft.CodeAnalysis.CSharp.Syntax;
using Microsoft.CodeAnalysis.Options;
using Microsoft.CodeAnalysis.Structure;
using Microsoft.CodeAnalysis.Text;
......@@ -12,7 +11,10 @@ namespace Microsoft.CodeAnalysis.CSharp.Structure
internal class BlockSyntaxStructureProvider : AbstractSyntaxNodeStructureProvider<BlockSyntax>
{
protected override void CollectBlockSpans(
BlockSyntax node, ArrayBuilder<BlockSpan> spans, CancellationToken cancellationToken)
BlockSyntax node,
ArrayBuilder<BlockSpan> spans,
OptionSet options,
CancellationToken cancellationToken)
{
var parentKind = node.Parent.Kind();
......
......@@ -3,6 +3,7 @@
using System.Collections.Generic;
using System.Threading;
using Microsoft.CodeAnalysis.CSharp.Syntax;
using Microsoft.CodeAnalysis.Options;
using Microsoft.CodeAnalysis.Structure;
namespace Microsoft.CodeAnalysis.CSharp.Structure
......@@ -12,6 +13,7 @@ internal class CompilationUnitStructureProvider : AbstractSyntaxNodeStructurePro
protected override void CollectBlockSpans(
CompilationUnitSyntax compilationUnit,
ArrayBuilder<BlockSpan> spans,
OptionSet options,
CancellationToken cancellationToken)
{
CSharpStructureHelpers.CollectCommentBlockSpans(compilationUnit, spans);
......
......@@ -2,6 +2,7 @@
using System.Threading;
using Microsoft.CodeAnalysis.CSharp.Syntax;
using Microsoft.CodeAnalysis.Options;
using Microsoft.CodeAnalysis.Structure;
namespace Microsoft.CodeAnalysis.CSharp.Structure
......@@ -11,6 +12,7 @@ internal class ConstructorDeclarationStructureProvider : AbstractSyntaxNodeStruc
protected override void CollectBlockSpans(
ConstructorDeclarationSyntax constructorDeclaration,
ArrayBuilder<BlockSpan> spans,
OptionSet options,
CancellationToken cancellationToken)
{
CSharpStructureHelpers.CollectCommentBlockSpans(constructorDeclaration, spans);
......
......@@ -2,6 +2,7 @@
using System.Threading;
using Microsoft.CodeAnalysis.CSharp.Syntax;
using Microsoft.CodeAnalysis.Options;
using Microsoft.CodeAnalysis.Structure;
namespace Microsoft.CodeAnalysis.CSharp.Structure
......@@ -11,6 +12,7 @@ internal class ConversionOperatorDeclarationStructureProvider : AbstractSyntaxNo
protected override void CollectBlockSpans(
ConversionOperatorDeclarationSyntax operatorDeclaration,
ArrayBuilder<BlockSpan> spans,
OptionSet options,
CancellationToken cancellationToken)
{
CSharpStructureHelpers.CollectCommentBlockSpans(operatorDeclaration, spans);
......
......@@ -3,6 +3,7 @@
using System.Collections.Immutable;
using System.Threading;
using Microsoft.CodeAnalysis.CSharp.Syntax;
using Microsoft.CodeAnalysis.Options;
using Microsoft.CodeAnalysis.Structure;
namespace Microsoft.CodeAnalysis.CSharp.Structure
......@@ -12,6 +13,7 @@ internal class DelegateDeclarationStructureProvider : AbstractSyntaxNodeStructur
protected override void CollectBlockSpans(
DelegateDeclarationSyntax delegateDeclaration,
ArrayBuilder<BlockSpan> spans,
OptionSet options,
CancellationToken cancellationToken)
{
CSharpStructureHelpers.CollectCommentBlockSpans(delegateDeclaration, spans);
......
......@@ -2,6 +2,7 @@
using System.Threading;
using Microsoft.CodeAnalysis.CSharp.Syntax;
using Microsoft.CodeAnalysis.Options;
using Microsoft.CodeAnalysis.Structure;
namespace Microsoft.CodeAnalysis.CSharp.Structure
......@@ -11,6 +12,7 @@ internal class DestructorDeclarationStructureProvider : AbstractSyntaxNodeStruct
protected override void CollectBlockSpans(
DestructorDeclarationSyntax destructorDeclaration,
ArrayBuilder<BlockSpan> spans,
OptionSet options,
CancellationToken cancellationToken)
{
CSharpStructureHelpers.CollectCommentBlockSpans(destructorDeclaration, spans);
......
......@@ -6,6 +6,7 @@
using System.Text;
using System.Threading;
using Microsoft.CodeAnalysis.CSharp.Syntax;
using Microsoft.CodeAnalysis.Options;
using Microsoft.CodeAnalysis.Structure;
using Microsoft.CodeAnalysis.Text;
using Roslyn.Utilities;
......@@ -108,6 +109,7 @@ private static void AppendTextTokens(StringBuilder sb, SyntaxTokenList textToken
protected override void CollectBlockSpans(
DocumentationCommentTriviaSyntax documentationComment,
ArrayBuilder<BlockSpan> spans,
OptionSet options,
CancellationToken cancellationToken)
{
var startPos = documentationComment.FullSpan.Start;
......
......@@ -2,6 +2,7 @@
using System.Threading;
using Microsoft.CodeAnalysis.CSharp.Syntax;
using Microsoft.CodeAnalysis.Options;
using Microsoft.CodeAnalysis.Structure;
namespace Microsoft.CodeAnalysis.CSharp.Structure
......@@ -11,6 +12,7 @@ internal class EnumDeclarationStructureProvider : AbstractSyntaxNodeStructurePro
protected override void CollectBlockSpans(
EnumDeclarationSyntax enumDeclaration,
ArrayBuilder<BlockSpan> spans,
OptionSet options,
CancellationToken cancellationToken)
{
CSharpStructureHelpers.CollectCommentBlockSpans(enumDeclaration, spans);
......
......@@ -2,6 +2,7 @@
using System.Threading;
using Microsoft.CodeAnalysis.CSharp.Syntax;
using Microsoft.CodeAnalysis.Options;
using Microsoft.CodeAnalysis.Structure;
namespace Microsoft.CodeAnalysis.CSharp.Structure
......@@ -11,6 +12,7 @@ internal class EventDeclarationStructureProvider : AbstractSyntaxNodeStructurePr
protected override void CollectBlockSpans(
EventDeclarationSyntax eventDeclaration,
ArrayBuilder<BlockSpan> spans,
OptionSet options,
CancellationToken cancellationToken)
{
CSharpStructureHelpers.CollectCommentBlockSpans(eventDeclaration, spans);
......
......@@ -3,6 +3,7 @@
using System.Collections.Immutable;
using System.Threading;
using Microsoft.CodeAnalysis.CSharp.Syntax;
using Microsoft.CodeAnalysis.Options;
using Microsoft.CodeAnalysis.Structure;
namespace Microsoft.CodeAnalysis.CSharp.Structure
......@@ -12,6 +13,7 @@ internal class EventFieldDeclarationStructureProvider : AbstractSyntaxNodeStruct
protected override void CollectBlockSpans(
EventFieldDeclarationSyntax eventFieldDeclaration,
ArrayBuilder<BlockSpan> spans,
OptionSet options,
CancellationToken cancellationToken)
{
CSharpStructureHelpers.CollectCommentBlockSpans(eventFieldDeclaration, spans);
......
......@@ -3,6 +3,7 @@
using System.Collections.Immutable;
using System.Threading;
using Microsoft.CodeAnalysis.CSharp.Syntax;
using Microsoft.CodeAnalysis.Options;
using Microsoft.CodeAnalysis.Structure;
namespace Microsoft.CodeAnalysis.CSharp.Structure
......@@ -12,6 +13,7 @@ internal class FieldDeclarationStructureProvider : AbstractSyntaxNodeStructurePr
protected override void CollectBlockSpans(
FieldDeclarationSyntax fieldDeclaration,
ArrayBuilder<BlockSpan> spans,
OptionSet options,
CancellationToken cancellationToken)
{
CSharpStructureHelpers.CollectCommentBlockSpans(fieldDeclaration, spans);
......
......@@ -2,6 +2,7 @@
using System.Threading;
using Microsoft.CodeAnalysis.CSharp.Syntax;
using Microsoft.CodeAnalysis.Options;
using Microsoft.CodeAnalysis.Structure;
namespace Microsoft.CodeAnalysis.CSharp.Structure
......@@ -11,6 +12,7 @@ internal class IndexerDeclarationStructureProvider : AbstractSyntaxNodeStructure
protected override void CollectBlockSpans(
IndexerDeclarationSyntax indexerDeclaration,
ArrayBuilder<BlockSpan> spans,
OptionSet options,
CancellationToken cancellationToken)
{
CSharpStructureHelpers.CollectCommentBlockSpans(indexerDeclaration, spans);
......
......@@ -2,6 +2,7 @@
using System.Collections.Immutable;
using System.Threading;
using Microsoft.CodeAnalysis.Options;
using Microsoft.CodeAnalysis.Structure;
using Microsoft.CodeAnalysis.Text;
using Roslyn.Utilities;
......@@ -12,7 +13,10 @@ internal abstract class AbstractMetadataAsSourceStructureProvider<TSyntaxNode> :
where TSyntaxNode : SyntaxNode
{
protected override void CollectBlockSpans(
TSyntaxNode node, ArrayBuilder<BlockSpan> spans, CancellationToken cancellationToken)
TSyntaxNode node,
ArrayBuilder<BlockSpan> spans,
OptionSet options,
CancellationToken cancellationToken)
{
var startToken = node.GetFirstToken();
var endToken = GetEndToken(node);
......
......@@ -4,6 +4,7 @@
using System.Threading;
using Microsoft.CodeAnalysis.CSharp.Extensions;
using Microsoft.CodeAnalysis.CSharp.Syntax;
using Microsoft.CodeAnalysis.Options;
using Microsoft.CodeAnalysis.Structure;
using Microsoft.CodeAnalysis.Text;
......@@ -30,6 +31,7 @@ private static string GetBannerText(DirectiveTriviaSyntax simpleDirective)
protected override void CollectBlockSpans(
RegionDirectiveTriviaSyntax regionDirective,
ArrayBuilder<BlockSpan> spans,
OptionSet options,
CancellationToken cancellationToken)
{
var match = regionDirective.GetMatchingDirective(cancellationToken);
......
......@@ -2,6 +2,7 @@
using System.Threading;
using Microsoft.CodeAnalysis.CSharp.Syntax;
using Microsoft.CodeAnalysis.Options;
using Microsoft.CodeAnalysis.Structure;
namespace Microsoft.CodeAnalysis.CSharp.Structure
......@@ -11,6 +12,7 @@ internal class MethodDeclarationStructureProvider : AbstractSyntaxNodeStructureP
protected override void CollectBlockSpans(
MethodDeclarationSyntax methodDeclaration,
ArrayBuilder<BlockSpan> spans,
OptionSet options,
CancellationToken cancellationToken)
{
CSharpStructureHelpers.CollectCommentBlockSpans(methodDeclaration, spans);
......
......@@ -3,6 +3,7 @@
using System.Linq;
using System.Threading;
using Microsoft.CodeAnalysis.CSharp.Syntax;
using Microsoft.CodeAnalysis.Options;
using Microsoft.CodeAnalysis.Structure;
namespace Microsoft.CodeAnalysis.CSharp.Structure
......@@ -12,6 +13,7 @@ internal class NamespaceDeclarationStructureProvider : AbstractSyntaxNodeStructu
protected override void CollectBlockSpans(
NamespaceDeclarationSyntax namespaceDeclaration,
ArrayBuilder<BlockSpan> spans,
OptionSet options,
CancellationToken cancellationToken)
{
// add leading comments
......
......@@ -2,6 +2,7 @@
using System.Threading;
using Microsoft.CodeAnalysis.CSharp.Syntax;
using Microsoft.CodeAnalysis.Options;
using Microsoft.CodeAnalysis.Structure;
namespace Microsoft.CodeAnalysis.CSharp.Structure
......@@ -11,6 +12,7 @@ internal class OperatorDeclarationStructureProvider : AbstractSyntaxNodeStructur
protected override void CollectBlockSpans(
OperatorDeclarationSyntax operatorDeclaration,
ArrayBuilder<BlockSpan> spans,
OptionSet options,
CancellationToken cancellationToken)
{
CSharpStructureHelpers.CollectCommentBlockSpans(operatorDeclaration, spans);
......
......@@ -3,6 +3,7 @@
using System.Collections.Immutable;
using System.Threading;
using Microsoft.CodeAnalysis.CSharp.Syntax;
using Microsoft.CodeAnalysis.Options;
using Microsoft.CodeAnalysis.Structure;
namespace Microsoft.CodeAnalysis.CSharp.Structure
......@@ -12,6 +13,7 @@ internal class ParenthesizedLambdaExpressionStructureProvider : AbstractSyntaxNo
protected override void CollectBlockSpans(
ParenthesizedLambdaExpressionSyntax lambdaExpression,
ArrayBuilder<BlockSpan> spans,
OptionSet options,
CancellationToken cancellationToken)
{
// fault tolerance
......
......@@ -2,6 +2,7 @@
using System.Threading;
using Microsoft.CodeAnalysis.CSharp.Syntax;
using Microsoft.CodeAnalysis.Options;
using Microsoft.CodeAnalysis.Structure;
namespace Microsoft.CodeAnalysis.CSharp.Structure
......@@ -11,6 +12,7 @@ internal class PropertyDeclarationStructureProvider : AbstractSyntaxNodeStructur
protected override void CollectBlockSpans(
PropertyDeclarationSyntax propertyDeclaration,
ArrayBuilder<BlockSpan> spans,
OptionSet options,
CancellationToken cancellationToken)
{
CSharpStructureHelpers.CollectCommentBlockSpans(propertyDeclaration, spans);
......
......@@ -4,6 +4,7 @@
using System.Threading;
using Microsoft.CodeAnalysis.CSharp.Extensions;
using Microsoft.CodeAnalysis.CSharp.Syntax;
using Microsoft.CodeAnalysis.Options;
using Microsoft.CodeAnalysis.Structure;
using Microsoft.CodeAnalysis.Text;
......@@ -30,17 +31,20 @@ private static string GetBannerText(DirectiveTriviaSyntax simpleDirective)
protected override void CollectBlockSpans(
RegionDirectiveTriviaSyntax regionDirective,
ArrayBuilder<BlockSpan> spans,
OptionSet options,
CancellationToken cancellationToken)
{
var match = regionDirective.GetMatchingDirective(cancellationToken);
if (match != null)
{
var autoCollapse = options.GetOption(
BlockStructureOptions.CollapseRegionsWhenCollapsingToDefinitions, LanguageNames.CSharp);
spans.Add(new BlockSpan(
isCollapsible: true,
textSpan: TextSpan.FromBounds(regionDirective.SpanStart, match.Span.End),
type: BlockTypes.PreprocessorRegion,
bannerText: GetBannerText(regionDirective),
autoCollapse: true,
autoCollapse: autoCollapse,
isDefaultCollapsed: true));
}
}
......
......@@ -2,6 +2,7 @@
using System.Threading;
using Microsoft.CodeAnalysis.CSharp.Syntax;
using Microsoft.CodeAnalysis.Options;
using Microsoft.CodeAnalysis.Structure;
namespace Microsoft.CodeAnalysis.CSharp.Structure
......@@ -11,6 +12,7 @@ internal class SimpleLambdaExpressionStructureProvider : AbstractSyntaxNodeStruc
protected override void CollectBlockSpans(
SimpleLambdaExpressionSyntax lambdaExpression,
ArrayBuilder<BlockSpan> spans,
OptionSet options,
CancellationToken cancellationToken)
{
// fault tolerance
......
......@@ -2,6 +2,7 @@
using System.Threading;
using Microsoft.CodeAnalysis.CSharp.Syntax;
using Microsoft.CodeAnalysis.Options;
using Microsoft.CodeAnalysis.Structure;
using Microsoft.CodeAnalysis.Text;
......@@ -12,6 +13,7 @@ internal class SwitchStatementStructureProvider : AbstractSyntaxNodeStructurePro
protected override void CollectBlockSpans(
SwitchStatementSyntax node,
ArrayBuilder<BlockSpan> spans,
OptionSet options,
CancellationToken cancellationToken)
{
spans.Add(new BlockSpan(
......
......@@ -2,6 +2,7 @@
using System.Threading;
using Microsoft.CodeAnalysis.CSharp.Syntax;
using Microsoft.CodeAnalysis.Options;
using Microsoft.CodeAnalysis.Structure;
namespace Microsoft.CodeAnalysis.CSharp.Structure
......@@ -11,6 +12,7 @@ internal class TypeDeclarationStructureProvider : AbstractSyntaxNodeStructurePro
protected override void CollectBlockSpans(
TypeDeclarationSyntax typeDeclaration,
ArrayBuilder<BlockSpan> spans,
OptionSet options,
CancellationToken cancellationToken)
{
CSharpStructureHelpers.CollectCommentBlockSpans(typeDeclaration, spans);
......
......@@ -23,5 +23,8 @@ internal static class BlockStructureOptions
public static readonly PerLanguageOption<bool> ShowOutliningForCodeLevelConstructs = new PerLanguageOption<bool>(
nameof(BlockStructureOptions), nameof(ShowOutliningForCodeLevelConstructs), defaultValue: true);
public static readonly PerLanguageOption<bool> CollapseRegionsWhenCollapsingToDefinitions = new PerLanguageOption<bool>(
nameof(BlockStructureOptions), nameof(CollapseRegionsWhenCollapsingToDefinitions), defaultValue: false);
}
}
\ No newline at end of file
// 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;
using System.Collections.Immutable;
using System.Threading;
using Microsoft.CodeAnalysis.Options;
namespace Microsoft.CodeAnalysis.Structure
{
......@@ -20,7 +20,8 @@ internal abstract class AbstractSyntaxNodeStructureProvider<TSyntaxNode> : Abstr
return;
}
CollectBlockSpans(node, spans, cancellationToken);
var options = document.Project.Solution.Options;
CollectBlockSpans(node, spans, options, cancellationToken);
}
public sealed override void CollectBlockSpans(
......@@ -35,11 +36,12 @@ internal abstract class AbstractSyntaxNodeStructureProvider<TSyntaxNode> : Abstr
private void CollectBlockSpans(
SyntaxNode node,
ArrayBuilder<BlockSpan> spans,
OptionSet options,
CancellationToken cancellationToken)
{
if (node is TSyntaxNode)
{
CollectBlockSpans((TSyntaxNode)node, spans, cancellationToken);
CollectBlockSpans((TSyntaxNode)node, spans, options, cancellationToken);
}
}
......@@ -50,6 +52,7 @@ protected virtual bool SupportedInWorkspaceKind(string kind)
}
protected abstract void CollectBlockSpans(
TSyntaxNode node, ArrayBuilder<BlockSpan> spans, CancellationToken cancellationToken);
TSyntaxNode node, ArrayBuilder<BlockSpan> spans,
OptionSet options, CancellationToken cancellationToken);
}
}
\ No newline at end of file
' 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.Collections.Immutable
Imports System.Threading
Imports Microsoft.CodeAnalysis.Options
Imports Microsoft.CodeAnalysis.Structure
Imports Microsoft.CodeAnalysis.VisualBasic.Syntax
......@@ -11,6 +11,7 @@ Namespace Microsoft.CodeAnalysis.VisualBasic.Structure
Protected Overrides Sub CollectBlockSpans(accessorDeclaration As AccessorStatementSyntax,
spans As ArrayBuilder(Of BlockSpan),
options As OptionSet,
cancellationToken As CancellationToken)
CollectCommentsRegions(accessorDeclaration, spans)
......
' 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.Structure
Imports Microsoft.CodeAnalysis.VisualBasic.Syntax
......@@ -10,6 +11,7 @@ Namespace Microsoft.CodeAnalysis.VisualBasic.Structure
Protected Overrides Sub CollectBlockSpans(compilationUnit As CompilationUnitSyntax,
spans As ArrayBuilder(Of BlockSpan),
options As OptionSet,
cancellationToken As CancellationToken)
CollectCommentsRegions(compilationUnit, spans)
spans.AddIfNotNull(CreateRegion(
......
' 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.Structure
Imports Microsoft.CodeAnalysis.VisualBasic.Syntax
......@@ -10,6 +11,7 @@ Namespace Microsoft.CodeAnalysis.VisualBasic.Structure
Protected Overrides Sub CollectBlockSpans(constructorDeclaration As SubNewStatementSyntax,
spans As ArrayBuilder(Of BlockSpan),
options As OptionSet,
cancellationToken As CancellationToken)
Dim regions As New List(Of BlockSpan)
......
......@@ -2,6 +2,7 @@
Imports System.Collections.Immutable
Imports System.Threading
Imports Microsoft.CodeAnalysis.Options
Imports Microsoft.CodeAnalysis.Structure
Imports Microsoft.CodeAnalysis.VisualBasic.Syntax
......@@ -11,6 +12,7 @@ Namespace Microsoft.CodeAnalysis.VisualBasic.Structure
Protected Overrides Sub CollectBlockSpans(delegateDeclaration As DelegateStatementSyntax,
spans As ArrayBuilder(Of BlockSpan),
options As OptionSet,
cancellationToken As CancellationToken)
CollectCommentsRegions(delegateDeclaration, spans)
End Sub
......
' 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.Structure
Imports Microsoft.CodeAnalysis.VisualBasic.Syntax
......@@ -10,6 +11,7 @@ Namespace Microsoft.CodeAnalysis.VisualBasic.Structure
Protected Overrides Sub CollectBlockSpans(node As DoLoopBlockSyntax,
spans As ArrayBuilder(Of BlockSpan),
options As OptionSet,
cancellationToken As CancellationToken)
spans.AddIfNotNull(CreateRegionFromBlock(
node, node.DoStatement, autoCollapse:=False,
......
......@@ -2,6 +2,7 @@
Imports System.Text
Imports System.Threading
Imports Microsoft.CodeAnalysis.Options
Imports Microsoft.CodeAnalysis.Structure
Imports Microsoft.CodeAnalysis.Text
Imports Microsoft.CodeAnalysis.VisualBasic.Syntax
......@@ -71,6 +72,7 @@ Namespace Microsoft.CodeAnalysis.VisualBasic.Structure
Protected Overrides Sub CollectBlockSpans(documentationComment As DocumentationCommentTriviaSyntax,
spans As ArrayBuilder(Of BlockSpan),
options As OptionSet,
cancellationToken As CancellationToken)
Dim firstCommentToken = documentationComment.ChildNodesAndTokens().FirstOrNullable()
Dim lastCommentToken = documentationComment.ChildNodesAndTokens().LastOrNullable()
......
' 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.Structure
Imports Microsoft.CodeAnalysis.VisualBasic.Syntax
......@@ -10,6 +11,7 @@ Namespace Microsoft.CodeAnalysis.VisualBasic.Structure
Protected Overrides Sub CollectBlockSpans(enumDeclaration As EnumStatementSyntax,
spans As ArrayBuilder(Of BlockSpan),
options As OptionSet,
cancellationToken As CancellationToken)
CollectCommentsRegions(enumDeclaration, spans)
......
' 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.Structure
Imports Microsoft.CodeAnalysis.VisualBasic.Syntax
......@@ -10,6 +11,7 @@ Namespace Microsoft.CodeAnalysis.VisualBasic.Structure
Protected Overrides Sub CollectBlockSpans(eventDeclaration As EventStatementSyntax,
spans As ArrayBuilder(Of BlockSpan),
options As OptionSet,
cancellationToken As CancellationToken)
CollectCommentsRegions(eventDeclaration, spans)
......
......@@ -2,6 +2,7 @@
Imports System.Collections.Immutable
Imports System.Threading
Imports Microsoft.CodeAnalysis.Options
Imports Microsoft.CodeAnalysis.Structure
Imports Microsoft.CodeAnalysis.VisualBasic.Syntax
......@@ -11,6 +12,7 @@ Namespace Microsoft.CodeAnalysis.VisualBasic.Structure
Protected Overrides Sub CollectBlockSpans(externalMethodDeclaration As DeclareStatementSyntax,
spans As ArrayBuilder(Of BlockSpan),
options As OptionSet,
cancellationToken As CancellationToken)
CollectCommentsRegions(externalMethodDeclaration, spans)
End Sub
......
......@@ -2,6 +2,7 @@
Imports System.Collections.Immutable
Imports System.Threading
Imports Microsoft.CodeAnalysis.Options
Imports Microsoft.CodeAnalysis.Structure
Imports Microsoft.CodeAnalysis.VisualBasic.Syntax
......@@ -11,6 +12,7 @@ Namespace Microsoft.CodeAnalysis.VisualBasic.Structure
Protected Overrides Sub CollectBlockSpans(fieldDeclaration As FieldDeclarationSyntax,
spans As ArrayBuilder(Of BlockSpan),
options As OptionSet,
cancellationToken As CancellationToken)
CollectCommentsRegions(fieldDeclaration, spans)
End Sub
......
' 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.Structure
Imports Microsoft.CodeAnalysis.VisualBasic.Syntax
......@@ -10,6 +11,7 @@ Namespace Microsoft.CodeAnalysis.VisualBasic.Structure
Protected Overrides Sub CollectBlockSpans(node As ForBlockSyntax,
spans As ArrayBuilder(Of BlockSpan),
options As OptionSet,
cancellationToken As CancellationToken)
spans.AddIfNotNull(CreateRegionFromBlock(
node, node.ForOrForEachStatement, autoCollapse:=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.Structure
Imports Microsoft.CodeAnalysis.VisualBasic.Syntax
......@@ -10,6 +11,7 @@ Namespace Microsoft.CodeAnalysis.VisualBasic.Structure
Protected Overrides Sub CollectBlockSpans(node As ForEachBlockSyntax,
spans As ArrayBuilder(Of BlockSpan),
options As OptionSet,
cancellationToken As CancellationToken)
spans.AddIfNotNull(CreateRegionFromBlock(
node, node.ForOrForEachStatement, autoCollapse:=False,
......
......@@ -4,6 +4,7 @@ Imports System.Threading
Imports Microsoft.CodeAnalysis.Text
Imports Microsoft.CodeAnalysis.Structure
Imports System.Collections.Immutable
Imports Microsoft.CodeAnalysis.Options
Namespace Microsoft.CodeAnalysis.VisualBasic.Structure.MetadataAsSource
......@@ -12,6 +13,7 @@ Namespace Microsoft.CodeAnalysis.VisualBasic.Structure.MetadataAsSource
Protected Overrides Sub CollectBlockSpans(node As TSyntaxNode,
spans As ArrayBuilder(Of BlockSpan),
options As OptionSet,
cancellationToken As CancellationToken)
Dim startToken = node.GetFirstToken()
Dim endToken = GetEndToken(node)
......
......@@ -4,7 +4,6 @@ Imports Microsoft.CodeAnalysis.VisualBasic.Syntax
Namespace Microsoft.CodeAnalysis.VisualBasic.Structure.MetadataAsSource
Friend Class MetadataConstructorDeclarationStructureProvider
Inherits AbstractMetadataAsSourceStructureProvider(Of SubNewStatementSyntax)
Protected Overrides Function GetEndToken(node As SubNewStatementSyntax) As SyntaxToken
......@@ -13,4 +12,4 @@ Namespace Microsoft.CodeAnalysis.VisualBasic.Structure.MetadataAsSource
node.DeclarationKeyword)
End Function
End Class
End Namespace
End Namespace
\ No newline at end of file
......@@ -12,4 +12,4 @@ Namespace Microsoft.CodeAnalysis.VisualBasic.Structure.MetadataAsSource
node.DelegateKeyword)
End Function
End Class
End Namespace
End Namespace
\ No newline at end of file
......@@ -12,4 +12,4 @@ Namespace Microsoft.CodeAnalysis.VisualBasic.Structure.MetadataAsSource
node.EnumKeyword)
End Function
End Class
End Namespace
End Namespace
\ No newline at end of file
' 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.Structure
Imports Microsoft.CodeAnalysis.Text
Imports Microsoft.CodeAnalysis.VisualBasic.Syntax
......@@ -21,6 +22,7 @@ Namespace Microsoft.CodeAnalysis.VisualBasic.Structure.MetadataAsSource
Protected Overrides Sub CollectBlockSpans(regionDirective As RegionDirectiveTriviaSyntax,
spans As ArrayBuilder(Of BlockSpan),
options As OptionSet,
cancellationToken As CancellationToken)
Dim match = regionDirective.GetMatchingStartOrEndDirective(cancellationToken)
If match IsNot Nothing Then
......
' 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.Structure
Imports Microsoft.CodeAnalysis.VisualBasic.Syntax
......@@ -10,6 +11,7 @@ Namespace Microsoft.CodeAnalysis.VisualBasic.Structure
Protected Overrides Sub CollectBlockSpans(methodDeclaration As MethodStatementSyntax,
spans As ArrayBuilder(Of BlockSpan),
options As OptionSet,
cancellationToken As CancellationToken)
CollectCommentsRegions(methodDeclaration, spans)
......
' 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.Structure
Imports Microsoft.CodeAnalysis.VisualBasic.Syntax
......@@ -10,6 +11,7 @@ Namespace Microsoft.CodeAnalysis.VisualBasic.Structure
Protected Overrides Sub CollectBlockSpans(node As MultiLineIfBlockSyntax,
spans As ArrayBuilder(Of BlockSpan),
options As OptionSet,
cancellationToken As CancellationToken)
spans.AddIfNotNull(CreateRegionFromBlock(
node, node.IfStatement, autoCollapse:=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.Structure
Imports Microsoft.CodeAnalysis.VisualBasic.Syntax
......@@ -10,6 +11,7 @@ Namespace Microsoft.CodeAnalysis.VisualBasic.Structure
Protected Overrides Sub CollectBlockSpans(lambdaExpression As MultiLineLambdaExpressionSyntax,
spans As ArrayBuilder(Of BlockSpan),
options As OptionSet,
cancellationToken As CancellationToken)
If Not lambdaExpression.EndSubOrFunctionStatement.IsMissing Then
spans.AddIfNotNull(CreateRegionFromBlock(
......
' 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.Structure
Imports Microsoft.CodeAnalysis.VisualBasic.Syntax
......@@ -10,6 +11,7 @@ Namespace Microsoft.CodeAnalysis.VisualBasic.Structure
Protected Overrides Sub CollectBlockSpans(namespaceDeclaration As NamespaceStatementSyntax,
spans As ArrayBuilder(Of BlockSpan),
options As OptionSet,
cancellationToken As CancellationToken)
CollectCommentsRegions(namespaceDeclaration, spans)
......
' 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.Structure
Imports Microsoft.CodeAnalysis.VisualBasic.Syntax
......@@ -10,6 +11,7 @@ Namespace Microsoft.CodeAnalysis.VisualBasic.Structure
Protected Overrides Sub CollectBlockSpans(operatorDeclaration As OperatorStatementSyntax,
spans As ArrayBuilder(Of BlockSpan),
options As OptionSet,
cancellationToken As CancellationToken)
CollectCommentsRegions(operatorDeclaration, spans)
......
' 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.Structure
Imports Microsoft.CodeAnalysis.VisualBasic.Syntax
......@@ -10,6 +11,7 @@ Namespace Microsoft.CodeAnalysis.VisualBasic.Structure
Protected Overrides Sub CollectBlockSpans(propertyDeclaration As PropertyStatementSyntax,
spans As ArrayBuilder(Of BlockSpan),
options As OptionSet,
cancellationToken As CancellationToken)
CollectCommentsRegions(propertyDeclaration, spans)
......
' 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.Structure
Imports Microsoft.CodeAnalysis.Text
Imports Microsoft.CodeAnalysis.VisualBasic.Syntax
......@@ -21,13 +22,17 @@ Namespace Microsoft.CodeAnalysis.VisualBasic.Structure
Protected Overrides Sub CollectBlockSpans(regionDirective As RegionDirectiveTriviaSyntax,
spans As ArrayBuilder(Of BlockSpan),
cancellationToken As CancellationToken)
Dim matchingDirective = regionDirective.GetMatchingStartOrEndDirective(cancellationToken)
options As OptionSet,
CancellationToken As CancellationToken)
Dim matchingDirective = regionDirective.GetMatchingStartOrEndDirective(CancellationToken)
If matchingDirective IsNot Nothing Then
Dim autoCollapse = options.GetOption(
BlockStructureOptions.CollapseRegionsWhenCollapsingToDefinitions, LanguageNames.VisualBasic)
spans.AddIfNotNull(CreateRegion(
TextSpan.FromBounds(regionDirective.SpanStart, matchingDirective.Span.End),
GetBannerText(regionDirective),
autoCollapse:=False,
autoCollapse:=autoCollapse,
isDefaultCollapsed:=True,
type:=BlockTypes.PreprocessorRegion,
isCollapsible:=True))
......
' 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.Structure
Imports Microsoft.CodeAnalysis.VisualBasic.Syntax
......@@ -10,6 +11,7 @@ Namespace Microsoft.CodeAnalysis.VisualBasic.Structure
Protected Overrides Sub CollectBlockSpans(node As SelectBlockSyntax,
spans As ArrayBuilder(Of BlockSpan),
options As OptionSet,
cancellationToken As CancellationToken)
spans.AddIfNotNull(CreateRegionFromBlock(
node, node.SelectStatement, autoCollapse:=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.Structure
Imports Microsoft.CodeAnalysis.VisualBasic.Syntax
......@@ -10,6 +11,7 @@ Namespace Microsoft.CodeAnalysis.VisualBasic.Structure
Protected Overrides Sub CollectBlockSpans(node As SyncLockBlockSyntax,
spans As ArrayBuilder(Of BlockSpan),
options As OptionSet,
cancellationToken As CancellationToken)
spans.AddIfNotNull(CreateRegionFromBlock(
node, node.SyncLockStatement, autoCollapse:=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.Structure
Imports Microsoft.CodeAnalysis.VisualBasic.Syntax
......@@ -10,6 +11,7 @@ Namespace Microsoft.CodeAnalysis.VisualBasic.Structure
Protected Overrides Sub CollectBlockSpans(node As TryBlockSyntax,
spans As ArrayBuilder(Of BlockSpan),
options As OptionSet,
cancellationToken As CancellationToken)
spans.AddIfNotNull(CreateRegionFromBlock(
node, node.TryStatement, autoCollapse:=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.Structure
Imports Microsoft.CodeAnalysis.VisualBasic.Syntax
......@@ -10,6 +11,7 @@ Namespace Microsoft.CodeAnalysis.VisualBasic.Structure
Protected Overrides Sub CollectBlockSpans(typeDeclaration As TypeStatementSyntax,
spans As ArrayBuilder(Of BlockSpan),
options As OptionSet,
cancellationToken As CancellationToken)
CollectCommentsRegions(typeDeclaration, spans)
......
' 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.Structure
Imports Microsoft.CodeAnalysis.VisualBasic.Syntax
......@@ -10,6 +11,7 @@ Namespace Microsoft.CodeAnalysis.VisualBasic.Structure
Protected Overrides Sub CollectBlockSpans(node As UsingBlockSyntax,
spans As ArrayBuilder(Of BlockSpan),
options As OptionSet,
cancellationToken As CancellationToken)
spans.AddIfNotNull(CreateRegionFromBlock(
node, node.UsingStatement, autoCollapse:=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.Structure
Imports Microsoft.CodeAnalysis.VisualBasic.Syntax
......@@ -10,6 +11,7 @@ Namespace Microsoft.CodeAnalysis.VisualBasic.Structure
Protected Overrides Sub CollectBlockSpans(node As WhileBlockSyntax,
spans As ArrayBuilder(Of BlockSpan),
options As OptionSet,
cancellationToken As CancellationToken)
spans.AddIfNotNull(CreateRegionFromBlock(
node, node.WhileStatement, autoCollapse:=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.Structure
Imports Microsoft.CodeAnalysis.VisualBasic.Syntax
......@@ -10,6 +11,7 @@ Namespace Microsoft.CodeAnalysis.VisualBasic.Structure
Protected Overrides Sub CollectBlockSpans(node As WithBlockSyntax,
spans As ArrayBuilder(Of BlockSpan),
options As OptionSet,
cancellationToken As CancellationToken)
spans.AddIfNotNull(CreateRegionFromBlock(
node, node.WithStatement, autoCollapse:=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.Structure
Imports Microsoft.CodeAnalysis.VisualBasic.Syntax
......@@ -10,6 +11,7 @@ Namespace Microsoft.CodeAnalysis.VisualBasic.Structure
Protected Overrides Sub CollectBlockSpans(xmlExpression As XmlNodeSyntax,
spans As ArrayBuilder(Of BlockSpan),
options As OptionSet,
cancellationToken As CancellationToken)
' If this XML expression is inside structured trivia (i.e. an XML doc comment), don't outline.
If xmlExpression.HasAncestor(Of DocumentationCommentTriviaSyntax)() Then
......
......@@ -47,6 +47,8 @@
Content="{x:Static local:AdvancedOptionPageStrings.Option_Show_outlining_for_code_level_constructs}" />
<CheckBox x:Name="Show_outlining_for_comments_and_preprocessor_regions"
Content="{x:Static local:AdvancedOptionPageStrings.Option_Show_outlining_for_comments_and_preprocessor_regions}" />
<CheckBox x:Name="Collapse_regions_when_collapsing_to_definitions"
Content="{x:Static local:AdvancedOptionPageStrings.Option_Collapse_regions_when_collapsing_to_definitions}" />
</StackPanel>
</GroupBox>
<GroupBox x:Uid="BlockStructureGuidesGroupBox"
......
......@@ -29,6 +29,7 @@ public AdvancedOptionPageControl(IServiceProvider serviceProvider) : base(servic
BindToOption(Show_outlining_for_declaration_level_constructs, BlockStructureOptions.ShowOutliningForDeclarationLevelConstructs, LanguageNames.CSharp);
BindToOption(Show_outlining_for_code_level_constructs, BlockStructureOptions.ShowOutliningForCodeLevelConstructs, LanguageNames.CSharp);
BindToOption(Show_outlining_for_comments_and_preprocessor_regions, BlockStructureOptions.ShowOutliningForCommentsAndPreprocessorRegions, LanguageNames.CSharp);
BindToOption(Collapse_regions_when_collapsing_to_definitions, BlockStructureOptions.CollapseRegionsWhenCollapsingToDefinitions, LanguageNames.CSharp);
BindToOption(Show_guides_for_declaration_level_constructs, BlockStructureOptions.ShowBlockStructureGuidesForDeclarationLevelConstructs, LanguageNames.CSharp);
BindToOption(Show_guides_for_code_level_constructs, BlockStructureOptions.ShowBlockStructureGuidesForCodeLevelConstructs, LanguageNames.CSharp);
......
......@@ -99,6 +99,9 @@ public static string Option_Show_outlining_for_code_level_constructs
public static string Option_Show_outlining_for_comments_and_preprocessor_regions
=> ServicesVSResources.Show_outlining_for_comments_and_preprocessor_regions;
public static string Option_Collapse_regions_when_collapsing_to_definitions
=> ServicesVSResources.Collapse_regions_when_collapsing_to_definitions;
public static string Option_Block_Structure_Guides
=> ServicesVSResources.Block_Structure_Guides;
......
......@@ -370,6 +370,15 @@ internal class ServicesVSResources {
}
}
/// <summary>
/// Looks up a localized string similar to Collapse #regions when collapsing to definitions.
/// </summary>
internal static string Collapse_regions_when_collapsing_to_definitions {
get {
return ResourceManager.GetString("Collapse_regions_when_collapsing_to_definitions", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Computing remove suppressions fix....
/// </summary>
......
......@@ -810,6 +810,9 @@ Additional information: {1}</value>
<data name="Prefer_coalesce_expression" xml:space="preserve">
<value>Prefer coalesce expression</value>
</data>
<data name="Collapse_regions_when_collapsing_to_definitions" xml:space="preserve">
<value>Collapse #regions when collapsing to definitions</value>
</data>
<data name="Prefer_null_propagation" xml:space="preserve">
<value>Prefer null propagation</value>
</data>
......
......@@ -48,6 +48,8 @@
Content="{x:Static local:AdvancedOptionPageStrings.Option_Show_outlining_for_code_level_constructs}" />
<CheckBox x:Name="Show_outlining_for_comments_and_preprocessor_regions"
Content="{x:Static local:AdvancedOptionPageStrings.Option_Show_outlining_for_comments_and_preprocessor_regions}" />
<CheckBox x:Name="Collapse_regions_when_collapsing_to_definitions"
Content="{x:Static local:AdvancedOptionPageStrings.Option_Collapse_regions_when_collapsing_to_definitions}" />
</StackPanel>
</GroupBox>
<GroupBox x:Uid="BlockStructureGuidesGroupBox"
......
......@@ -4,7 +4,6 @@ Imports Microsoft.CodeAnalysis
Imports Microsoft.CodeAnalysis.Editing
Imports Microsoft.CodeAnalysis.Editor.Shared.Options
Imports Microsoft.CodeAnalysis.ExtractMethod
Imports Microsoft.CodeAnalysis.Shared.Options
Imports Microsoft.CodeAnalysis.Structure
Imports Microsoft.CodeAnalysis.SymbolSearch
Imports Microsoft.VisualStudio.LanguageServices.Implementation
......@@ -24,6 +23,7 @@ Namespace Microsoft.VisualStudio.LanguageServices.VisualBasic.Options
BindToOption(Show_outlining_for_declaration_level_constructs, BlockStructureOptions.ShowOutliningForDeclarationLevelConstructs, LanguageNames.VisualBasic)
BindToOption(Show_outlining_for_code_level_constructs, BlockStructureOptions.ShowOutliningForCodeLevelConstructs, LanguageNames.VisualBasic)
BindToOption(Show_outlining_for_comments_and_preprocessor_regions, BlockStructureOptions.ShowOutliningForCommentsAndPreprocessorRegions, LanguageNames.VisualBasic)
BindToOption(Collapse_regions_when_collapsing_to_definitions, BlockStructureOptions.CollapseRegionsWhenCollapsingToDefinitions, LanguageNames.VisualBasic)
BindToOption(Show_guides_for_declaration_level_constructs, BlockStructureOptions.ShowBlockStructureGuidesForDeclarationLevelConstructs, LanguageNames.VisualBasic)
BindToOption(Show_guides_for_code_level_constructs, BlockStructureOptions.ShowBlockStructureGuidesForCodeLevelConstructs, LanguageNames.VisualBasic)
......
......@@ -134,6 +134,9 @@ Namespace Microsoft.VisualStudio.LanguageServices.VisualBasic.Options
Public ReadOnly Property Option_Show_outlining_for_comments_and_preprocessor_regions As String =
ServicesVSResources.Show_outlining_for_comments_and_preprocessor_regions
Public ReadOnly Property Option_Collapse_regions_when_collapsing_to_definitions As String =
ServicesVSResources.Collapse_regions_when_collapsing_to_definitions
Public ReadOnly Property Option_Block_Structure_Guides As String =
ServicesVSResources.Block_Structure_Guides
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册