File: Shared\Extensions\SnapshotSpanExtensions.cs
Web Access
Project: src\src\EditorFeatures\Core\Microsoft.CodeAnalysis.EditorFeatures.csproj (Microsoft.CodeAnalysis.EditorFeatures)
// 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 Microsoft.CodeAnalysis.Text;
using Microsoft.CodeAnalysis.Text.Shared.Extensions;
using Microsoft.VisualStudio.Text;
 
namespace Microsoft.CodeAnalysis.Editor.Shared.Extensions;
 
internal static class SnapshotSpanExtensions
{
    public static ITrackingSpan CreateTrackingSpan(this SnapshotSpan snapshotSpan, SpanTrackingMode trackingMode)
        => snapshotSpan.Snapshot.CreateTrackingSpan(snapshotSpan.Span, trackingMode);
 
    public static void GetLinesAndCharacters(
        this SnapshotSpan snapshotSpan,
        out int startLineNumber,
        out int startCharacterIndex,
        out int endLineNumber,
        out int endCharacterIndex)
    {
        snapshotSpan.Snapshot.GetLineAndCharacter(snapshotSpan.Span.Start, out startLineNumber, out startCharacterIndex);
        snapshotSpan.Snapshot.GetLineAndCharacter(snapshotSpan.Span.End, out endLineNumber, out endCharacterIndex);
    }
 
    public static LinePositionSpan ToLinePositionSpan(this SnapshotSpan snapshotSpan)
    {
        snapshotSpan.GetLinesAndCharacters(out var startLine, out var startChar, out var endLine, out var endChar);
        return new LinePositionSpan(new LinePosition(startLine, startChar), new LinePosition(endLine, endChar));
    }
 
    public static bool IntersectsWith(this SnapshotSpan snapshotSpan, TextSpan textSpan)
        => snapshotSpan.IntersectsWith(textSpan.ToSpan());
 
    public static bool IntersectsWith(this SnapshotSpan snapshotSpan, int position)
        => snapshotSpan.Span.IntersectsWith(position);
}