|
// 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 Roslyn.Utilities;
namespace Microsoft.CodeAnalysis.Shared.Extensions;
internal static class TextLineExtensions
{
public static int? GetLastNonWhitespacePosition(this TextLine line)
{
var text = line.Text!;
var startPosition = line.Start;
for (var i = line.End - 1; i >= startPosition; i--)
{
if (!char.IsWhiteSpace(text[i]))
return i;
}
return null;
}
/// <summary>
/// Returns the first non-whitespace position on the given line, or null if
/// the line is empty or contains only whitespace.
/// </summary>
public static int? GetFirstNonWhitespacePosition(this TextLine line)
{
var firstNonWhitespaceOffset = line.GetFirstNonWhitespaceOffset();
return firstNonWhitespaceOffset.HasValue
? firstNonWhitespaceOffset + line.Start
: null;
}
/// <summary>
/// Returns the first non-whitespace position on the given line as an offset
/// from the start of the line, or null if the line is empty or contains only
/// whitespace.
/// </summary>
public static int? GetFirstNonWhitespaceOffset(this TextLine line)
{
var text = line.Text;
if (text != null)
{
for (var i = line.Start; i < line.End; i++)
{
if (!char.IsWhiteSpace(text[i]))
return i - line.Start;
}
}
return null;
}
public static string GetLeadingWhitespace(this TextLine line)
=> line.ToString().GetLeadingWhitespace();
/// <summary>
/// Determines whether the specified line is empty or contains whitespace only.
/// </summary>
public static bool IsEmptyOrWhitespace(this TextLine line)
{
var text = line.Text;
RoslynDebug.Assert(text is object);
for (var i = line.Span.Start; i < line.Span.End; i++)
{
if (!char.IsWhiteSpace(text[i]))
{
return false;
}
}
return true;
}
public static int GetColumnOfFirstNonWhitespaceCharacterOrEndOfLine(this TextLine line, int tabSize)
=> line.ToString().GetColumnOfFirstNonWhitespaceCharacterOrEndOfLine(tabSize);
public static int GetColumnFromLineOffset(this TextLine line, int lineOffset, int tabSize)
=> line.ToString().GetColumnFromLineOffset(lineOffset, tabSize);
public static int GetLineOffsetFromColumn(this TextLine line, int column, int tabSize)
=> line.ToString().GetLineOffsetFromColumn(column, tabSize);
}
|