提交 c244ae1c 编写于 作者: B Balaji Soundrarajan

Merge pull request #3870 from basoundr/3447BraceCompletionFormatOnReturn

Format during Return in a Brace Completion Session
......@@ -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<IFormattingRule> GetFormattingRules(Document document)
return SpecializedCollections.SingletonEnumerable(BraceCompletionFormattingRule.Instance).Concat(Formatter.GetDefaultFormattingRules(document));
}
private void FormatTrackingSpan(IBraceCompletionSession session, IEnumerable<IFormattingRule> rules = null)
private void FormatTrackingSpan(IBraceCompletionSession session, bool shouldHonorAutoFormattingOnCloseBraceOption, IEnumerable<IFormattingRule> rules = null)
{
if (!session.SubjectBuffer.GetOption(FeatureOnOffOptions.AutoFormattingOnCloseBrace))
if (!session.SubjectBuffer.GetOption(FeatureOnOffOptions.AutoFormattingOnCloseBrace) && shouldHonorAutoFormattingOnCloseBraceOption)
{
return;
}
......
......@@ -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<OptionKey, object>
{
{ 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);
}
}
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册