Completions

This commit is contained in:
nub31
2025-10-23 13:49:12 +02:00
parent 3da68a1e34
commit 53cb8b9cc0
4 changed files with 222 additions and 41 deletions

View File

@@ -18,10 +18,10 @@ internal class HoverHandler(WorkspaceManager workspaceManager) : HoverHandlerBas
public override Task<Hover?> Handle(HoverParams request, CancellationToken cancellationToken)
{
return Task.FromResult(HandleSync(request));
return Task.FromResult(HandleSync(request, cancellationToken));
}
private Hover? HandleSync(HoverParams request)
private Hover? HandleSync(HoverParams request, CancellationToken cancellationToken)
{
var compilationUnit = workspaceManager.GetCompilationUnit(request.TextDocument.Uri);
if (compilationUnit == null)
@@ -34,7 +34,7 @@ internal class HoverHandler(WorkspaceManager workspaceManager) : HoverHandlerBas
var hoveredNode = compilationUnit.Functions
.SelectMany(x => x.EnumerateDescendantsAndSelf())
.Where(n => IsHoveringOverNode(n, line, character))
.Where(n => n.ContainsPosition(line, character))
.OrderBy(n => n.Tokens.First().Span.Start.Line)
.ThenBy(n => n.Tokens.First().Span.Start.Column)
.LastOrDefault();
@@ -155,41 +155,4 @@ internal class HoverHandler(WorkspaceManager workspaceManager) : HoverHandlerBas
```
""";
}
private static bool IsHoveringOverNode(Node node, int line, int character)
{
if (node.Tokens.Count == 0)
{
return false;
}
var start = node.Tokens.First().Span.Start;
var end = node.Tokens.Last().Span.End;
var startLine = start.Line - 1;
var startChar = start.Column - 1;
var endLine = end.Line - 1;
var endChar = end.Column - 1;
if (line < startLine || line > endLine) return false;
if (line > startLine && line < endLine) return true;
if (startLine == endLine)
{
return character >= startChar && character <= endChar;
}
if (line == startLine)
{
return character >= startChar;
}
if (line == endLine)
{
return character <= endChar;
}
return false;
}
}