diff --git a/src/EditorFeatures/CSharp/AutomaticCompletion/Sessions/CurlyBraceCompletionSession.cs b/src/EditorFeatures/CSharp/AutomaticCompletion/Sessions/CurlyBraceCompletionSession.cs index dcd6f9918e4cdb4c27659748140f9b0e79723e65..ace99206d899bd87e4f90b66b70085825ba00da6 100644 --- a/src/EditorFeatures/CSharp/AutomaticCompletion/Sessions/CurlyBraceCompletionSession.cs +++ b/src/EditorFeatures/CSharp/AutomaticCompletion/Sessions/CurlyBraceCompletionSession.cs @@ -39,7 +39,7 @@ public CurlyBraceCompletionSession(ISyntaxFactsService syntaxFactsService, ISmar public override void AfterStart(IBraceCompletionSession session, CancellationToken cancellationToken) { - FormatTrackingSpan(session); + FormatTrackingSpan(session, shouldHonorAutoFormattingOnCloseBraceOption: true); session.TextView.TryMoveCaretToAndEnsureVisible(session.ClosingPoint.GetPoint(session.SubjectBuffer.CurrentSnapshot).Subtract(1)); } @@ -65,12 +65,8 @@ public override void AfterReturn(IBraceCompletionSession session, CancellationTo var document = session.SubjectBuffer.CurrentSnapshot.GetOpenDocumentInCurrentContextWithChanges(); if (document != null) { - // first add one line in between, and format braces - if (session.SubjectBuffer.GetOption(FeatureOnOffOptions.AutoFormattingOnCloseBrace)) - { - document.InsertText(session.ClosingPoint.GetPosition(session.SubjectBuffer.CurrentSnapshot) - 1, Environment.NewLine, cancellationToken); - FormatTrackingSpan(session, GetFormattingRules(document)); - } + document.InsertText(session.ClosingPoint.GetPosition(session.SubjectBuffer.CurrentSnapshot) - 1, Environment.NewLine, cancellationToken); + FormatTrackingSpan(session, shouldHonorAutoFormattingOnCloseBraceOption: false, rules: GetFormattingRules(document)); // put caret at right indentation PutCaretOnLine(session, session.OpeningPoint.GetPoint(session.SubjectBuffer.CurrentSnapshot).GetContainingLineNumber() + 1); @@ -114,9 +110,9 @@ private IEnumerable GetFormattingRules(Document document) return SpecializedCollections.SingletonEnumerable(BraceCompletionFormattingRule.Instance).Concat(Formatter.GetDefaultFormattingRules(document)); } - private void FormatTrackingSpan(IBraceCompletionSession session, IEnumerable rules = null) + private void FormatTrackingSpan(IBraceCompletionSession session, bool shouldHonorAutoFormattingOnCloseBraceOption, IEnumerable rules = null) { - if (!session.SubjectBuffer.GetOption(FeatureOnOffOptions.AutoFormattingOnCloseBrace)) + if (!session.SubjectBuffer.GetOption(FeatureOnOffOptions.AutoFormattingOnCloseBrace) && shouldHonorAutoFormattingOnCloseBraceOption) { return; } diff --git a/src/EditorFeatures/CSharpTest/AutomaticCompletion/AutomaticBraceCompletionTests.cs b/src/EditorFeatures/CSharpTest/AutomaticCompletion/AutomaticBraceCompletionTests.cs index 384b74e4f13662735eb4f94d2cf0db4a9c187703..24d6ba79a17139484c9c1f40ba67adec1c50b638 100644 --- a/src/EditorFeatures/CSharpTest/AutomaticCompletion/AutomaticBraceCompletionTests.cs +++ b/src/EditorFeatures/CSharpTest/AutomaticCompletion/AutomaticBraceCompletionTests.cs @@ -757,6 +757,7 @@ public void man() } } + [WorkItem(3447, "https://github.com/dotnet/roslyn/issues/3447")] [WorkItem(850540)] [Fact, Trait(Traits.Feature, Traits.Features.AutomaticCompletion)] public void BlockIndentationWithAutomaticBraceFormattingDisabled() @@ -773,6 +774,14 @@ public void X() {} }"; + var expectedAfterReturn = @"class C +{ + public void X() + { + + } +}"; + var optionSet = new Dictionary { { new OptionKey(FeatureOnOffOptions.AutoFormattingOnCloseBrace, LanguageNames.CSharp), false }, @@ -785,7 +794,7 @@ public void X() CheckStart(session.Session); Assert.Equal(expected, session.Session.SubjectBuffer.CurrentSnapshot.GetText()); - CheckReturnOnNonEmptyLine(session.Session, 3); + CheckReturn(session.Session, 4, expectedAfterReturn); } }