Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
52 changes: 28 additions & 24 deletions src/LanguageServer/Protocol/Handler/InlayHint/InlayHintHandler.cs
Original file line number Diff line number Diff line change
Expand Up @@ -49,14 +49,19 @@ public TextDocumentIdentifier GetTextDocumentIdentifier(InlayHintParams request)

internal static async Task<LSP.InlayHint[]?> GetInlayHintsAsync(Document document, TextDocumentIdentifier textDocumentIdentifier, LSP.Range range, InlineHintsOptions options, bool displayAllOverride, InlayHintCache inlayHintCache, CancellationToken cancellationToken)
{
var text = await document.GetValueTextAsync(cancellationToken).ConfigureAwait(false);
var hints = await CalculateInlayHintsAsync(document, range, options, displayAllOverride, cancellationToken).ConfigureAwait(false);
var syntaxVersion = await document.GetSyntaxVersionAsync(cancellationToken).ConfigureAwait(false);

// Store the members in the resolve cache so that when we get a resolve request for a particular
// member we can re-use the inline hint.
var resultId = inlayHintCache.UpdateCache(new InlayHintCache.InlayHintCacheEntry(hints));

if (hints.Length == 0)
return Array.Empty<LSP.InlayHint>();

var text = await document.GetValueTextAsync(cancellationToken).ConfigureAwait(false);
var syntaxVersion = await document.GetSyntaxVersionAsync(cancellationToken).ConfigureAwait(false);
var syntaxVersionString = syntaxVersion.ToString();

var inlayHints = new LSP.InlayHint[hints.Length];
for (var i = 0; i < hints.Length; i++)
{
Expand Down Expand Up @@ -85,7 +90,7 @@ public TextDocumentIdentifier GetTextDocumentIdentifier(InlayHintParams request)
ToolTip = null,
PaddingLeft = leftPadding,
PaddingRight = rightPadding,
Data = new InlayHintResolveData(resultId, i, textDocumentIdentifier, syntaxVersion.ToString(), range, displayAllOverride)
Data = new InlayHintResolveData(resultId, i, textDocumentIdentifier, syntaxVersionString, range, displayAllOverride)
};

inlayHints[i] = inlayHint;
Expand All @@ -110,35 +115,34 @@ internal static async Task<ImmutableArray<InlineHint>> CalculateInlayHintsAsync(
/// </summary>
private static (string label, bool leftPadding, bool rightPadding) Trim(ImmutableArray<TaggedText> taggedTexts)
{
using var _ = ArrayBuilder<TaggedText>.GetInstance(out var result);
var leftPadding = false;
var rightPadding = false;

if (taggedTexts.Length == 0)
return (string.Empty, leftPadding, rightPadding);

var first = taggedTexts.First();
var trimStart = first.Text.TrimStart();
leftPadding = first.Text.Length - trimStart.Length != 0;

if (taggedTexts.Length == 1)
{
var first = taggedTexts.First();

var trimStart = first.Text.TrimStart();
var trimBoth = trimStart.TrimEnd();
result.Add(new TaggedText(first.Tag, trimBoth));
leftPadding = first.Text.Length - trimStart.Length != 0;
rightPadding = trimStart.Length - trimBoth.Length != 0;

return (trimBoth, leftPadding, rightPadding);
}
else if (taggedTexts.Length >= 2)
{
var first = taggedTexts.First();
var trimStart = first.Text.TrimStart();
result.Add(new TaggedText(first.Tag, trimStart));
leftPadding = first.Text.Length - trimStart.Length != 0;

for (var i = 1; i < taggedTexts.Length - 1; i++)
result.Add(taggedTexts[i]);

var last = taggedTexts.Last();
var trimEnd = last.Text.TrimEnd();
result.Add(new TaggedText(last.Tag, trimEnd));
rightPadding = last.Text.Length - trimEnd.Length != 0;
}

using var _ = ArrayBuilder<TaggedText>.GetInstance(out var result);
result.Add(new TaggedText(first.Tag, trimStart));

for (var i = 1; i < taggedTexts.Length - 1; i++)
result.Add(taggedTexts[i]);

var last = taggedTexts.Last();
var trimEnd = last.Text.TrimEnd();
result.Add(new TaggedText(last.Tag, trimEnd));
rightPadding = last.Text.Length - trimEnd.Length != 0;

return (result.ToImmutable().JoinText(), leftPadding, rightPadding);
}
Expand Down
Loading