This commit is contained in:
nub31
2025-10-23 14:31:14 +02:00
parent acc38ad8ff
commit db46dbba03
3 changed files with 57 additions and 74 deletions

View File

@@ -2,7 +2,6 @@ using NubLang.Ast;
using OmniSharp.Extensions.LanguageServer.Protocol.Client.Capabilities;
using OmniSharp.Extensions.LanguageServer.Protocol.Document;
using OmniSharp.Extensions.LanguageServer.Protocol.Models;
using Range = OmniSharp.Extensions.LanguageServer.Protocol.Models.Range;
namespace NubLang.LSP;
@@ -41,16 +40,7 @@ internal class DefinitionHandler(WorkspaceManager workspaceManager) : Definition
var parameter = function?.Prototype.Parameters.FirstOrDefault(x => x.Name == variableIdentifierNode.Name);
if (parameter != null)
{
if (parameter.Tokens.Count == 0)
{
return null;
}
return new LocationOrLocationLinks(new Location
{
Uri = parameter.Tokens.First().Span.FilePath,
Range = new Range(parameter.Tokens.First().Span.Start.Line - 1, parameter.Tokens.First().Span.Start.Column - 1, parameter.Tokens.Last().Span.End.Line - 1, parameter.Tokens.Last().Span.End.Column - 1)
});
return new LocationOrLocationLinks(parameter.ToLocation());
}
var variable = function?.Body?
@@ -60,33 +50,20 @@ internal class DefinitionHandler(WorkspaceManager workspaceManager) : Definition
if (variable != null)
{
if (variable.Tokens.Count == 0)
{
return null;
}
return new LocationOrLocationLinks(new Location
{
Uri = variable.Tokens.First().Span.FilePath,
Range = new Range(variable.Tokens.First().Span.Start.Line - 1, variable.Tokens.First().Span.Start.Column - 1, variable.Tokens.Last().Span.End.Line - 1, variable.Tokens.Last().Span.End.Column - 1)
});
return new LocationOrLocationLinks(variable.ToLocation());
}
return null;
}
case FuncIdentifierNode funcIdentifierNode:
{
var functionBody = compilationUnit.ImportedFunctions.FirstOrDefault(x => x.Module == funcIdentifierNode.Module && x.Name == funcIdentifierNode.Name);
if (functionBody == null || functionBody.Tokens.Count == 0)
var prototype = compilationUnit.ImportedFunctions.FirstOrDefault(x => x.Module == funcIdentifierNode.Module && x.Name == funcIdentifierNode.Name);
if (prototype != null)
{
return null;
return new LocationOrLocationLinks(prototype.ToLocation());
}
return new LocationOrLocationLinks(new Location
{
Uri = functionBody.Tokens.First().Span.FilePath,
Range = new Range(functionBody.Tokens.First().Span.Start.Line - 1, functionBody.Tokens.First().Span.Start.Column - 1, functionBody.Tokens.Last().Span.End.Line - 1, functionBody.Tokens.Last().Span.End.Column - 1)
});
return null;
}
default:
{