File: CodeModel\SyntaxNodeKey.cs
Web Access
Project: src\src\VisualStudio\Core\Impl\Microsoft.VisualStudio.LanguageServices.Implementation.csproj (Microsoft.VisualStudio.LanguageServices.Implementation)
// 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.
 
#nullable disable
 
using System;
 
namespace Microsoft.VisualStudio.LanguageServices.Implementation.CodeModel;
 
/// <summary>
/// Uniquely identifies a top-level syntax declaration within a SyntaxTree. This is achieved by combining the
/// qualified name of the declaration and an ordinal value. The ordinal value is used to distinguish nodes which
/// have the same qualified name -- for example, across partial classes within the same tree.
/// </summary>
internal readonly record struct SyntaxNodeKey
{
    public string Name { get; }
    public int Ordinal { get; }
 
    public static readonly SyntaxNodeKey Empty = new();
 
    public SyntaxNodeKey(string name, int ordinal)
    {
        if (ordinal < -1)
        {
            // Note: An ordinal value of -1 is special -- it means that this is the node
            // key for an "unknown" code model element.
            throw new ArgumentOutOfRangeException(nameof(ordinal));
        }
 
        Name = name ?? throw new ArgumentNullException(nameof(name));
        Ordinal = ordinal;
    }
 
    public bool IsEmpty => Name is null && Ordinal == 0;
}