| File: BraceMatching\IBraceMatcher.cs | Web Access |
| Project: src\roslyn\src\Features\Core\Portable\Microsoft.CodeAnalysis.Features.csproj (Microsoft.CodeAnalysis.Features) |
// Licensed to the .NET Foundation under one or more agreements. // The .NET Foundation licenses this file to you under the MIT license. // See the LICENSE file in the project root for more information. using System.Threading; using System.Threading.Tasks; namespace Microsoft.CodeAnalysis.BraceMatching; internal interface IBraceMatcher { /// <summary> /// Given a <paramref name="document"/> and a <paramref name="position"/> within that document, gets the <see /// cref="BraceMatchingResult"/> if the position is at the start or end character of a matching pair of braces. /// Importantly, the <paramref name="position"/> is the position of the actual character to examine. For /// example, given: <c>Goo()$$[1, 2, 3]</c> (where <c>$$</c> is the position), this would only be considering /// the <c>[</c> brace, not the <c>)</c> brace that precedes it. Similarly, for <c>Goo()[1, 2, 3$$]</c> this /// would be considering the <c>]</c> brace. If <c>Goo()[1, 2, 3]$$</c> were passed, no braces should be /// reported, despite the position being at the end of a brace. /// <para> /// It is the job of the calling feature ("Brace Matching") to actually make multiple calls into these matchers /// to then determine what to do. For example with <c>Goo(true)$$[1, 2, 3]</c> (where $$ is now the caret /// position of the user), the feature will make two calls in, one for <c>Goo(true$$)[1, 2, 3]</c> and one for /// <c>Goo(true)$$[1, 2, 3]</c>. This will allow it to see that the caret is between two complete brace pairs, /// and it can highlight both. The <see cref="IBraceMatcher"/> does not have to consider this, or try to pick /// which set of braces to return. /// </para> /// </summary> Task<BraceMatchingResult?> FindBracesAsync(Document document, int position, BraceMatchingOptions options, CancellationToken cancellationToken); }