File: FindSymbols\FindReferences\Finders\FinderLocation.cs
Web Access
Project: ..\..\..\src\Workspaces\Core\Portable\Microsoft.CodeAnalysis.Workspaces.csproj (Microsoft.CodeAnalysis.Workspaces)
// 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.
 
namespace Microsoft.CodeAnalysis.FindSymbols.Finders
{
    internal readonly struct FinderLocation
    {
        /// <summary>
        /// The actual node that we found the reference on.  Normally the 'Name' portion
        /// of any piece of syntax.  Might also be something like a 'foreach' statement node
        /// when finding results for something like GetEnumerator.
        /// </summary>
        public readonly SyntaxNode Node;
 
        /// <summary>
        /// The location we want want to return through the FindRefs API.  The location contains
        /// additional information (like if this was a Write, or if it was Implicit).  This value
        /// also has a <see cref="ReferenceLocation.Location"/> property.  Importantly, this value
        /// is not necessarily the same location you would get by calling <see cref="Node"/>.<see
        /// cref="SyntaxNode.GetLocation"/>.  Instead, this location is where we want to navigate
        /// the user to.  A case where this can be different is with an indexer reference.  The <see
        /// cref="Node"/> will be the node for the full 'ElementAccessExpression', whereas the 
        /// location we will take the user to will be the zero-length position immediately preceding
        /// the `[` character.
        /// </summary>
        public readonly ReferenceLocation Location;
 
        public FinderLocation(SyntaxNode node, ReferenceLocation location)
        {
            Node = node;
            Location = location;
        }
 
        public void Deconstruct(out SyntaxNode node, out ReferenceLocation location)
        {
            node = Node;
            location = Location;
        }
    }
}