Skip to content

Commit

Permalink
fix lsp problem
Browse files Browse the repository at this point in the history
  • Loading branch information
HendrikMennen committed Dec 8, 2023
1 parent 247d86c commit 549a7dd
Show file tree
Hide file tree
Showing 7 changed files with 166 additions and 96 deletions.
5 changes: 3 additions & 2 deletions src/OneWare.Core/Views/DockViews/EditView.axaml.cs
Original file line number Diff line number Diff line change
Expand Up @@ -103,9 +103,10 @@ private void Setup()
{
var completion = new CompletionWindow(CodeBox)
{
CloseWhenCaretAtBeginning = false,
CloseWhenCaretAtBeginning = true,
AdditionalOffset = new Vector(0, 3),
MaxHeight = 225
MaxHeight = 225,
CloseAutomatically = true,
};
_typeAssistance?.Attach(completion);
}
Expand Down
7 changes: 1 addition & 6 deletions src/OneWare.Cpp/TypeAssistanceCpp.cs
Original file line number Diff line number Diff line change
Expand Up @@ -60,7 +60,7 @@ protected override ICompletionData ConvertCompletionItem(CompletionItem comp, in

void AfterComplete()
{
_ = ShowOverloadProviderAsync();
_ = ShowSignatureHelpAsync();
}

var description = comp.Documentation != null ? (comp.Documentation.MarkupContent != null ? comp.Documentation.MarkupContent.Value : comp.Documentation.String) : null;
Expand All @@ -69,10 +69,5 @@ void AfterComplete()
return new CompletionData(comp.InsertText ?? "", newLabel, description, icon, 0,
comp, offset, AfterComplete);
}

protected override bool CharAtNormalCompletion(char c)
{
return char.IsLetterOrDigit(c) || c is '_' || c is ':';
}
}
}
4 changes: 3 additions & 1 deletion src/OneWare.SDK/EditorExtensions/CompletionData.cs
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ public class CompletionData : ICompletionData

private Action? AfterCompletion { get; }

private int CompletionOffset { get; }
public int CompletionOffset { get; }

public IImage? Image { get; }

Expand Down Expand Up @@ -55,6 +55,8 @@ public void Complete(TextArea textArea, ISegment completionSegment, EventArgs in

var caretStop = new Regex(@"\$.");
var placeHolder = new Regex(@"\${.*?}");

Console.WriteLine(CompletionOffset + " " + completionSegment.Offset + completionSegment.EndOffset);

var newLine = TextUtilities.GetNewLineFromDocument(textArea.Document, segmentLine.LineNumber);

Expand Down
8 changes: 6 additions & 2 deletions src/OneWare.SDK/LanguageService/ILanguageService.cs
Original file line number Diff line number Diff line change
Expand Up @@ -25,9 +25,13 @@ public interface ILanguageService

public void RefreshTextDocument(string fullPath, Container<TextDocumentContentChangeEvent> changes);
public void RefreshTextDocument(string fullPath, string newText);

public IEnumerable<string> GetSignatureHelpTriggerChars();
public IEnumerable<string> GetSignatureHelpRetriggerChars();
public IEnumerable<string> GetCompletionTriggerChars();
public IEnumerable<string> GetCompletionCommitChars();

public Task<CompletionList?> RequestCompletionAsync(string fullPath, Position pos, string triggerChar,
CompletionTriggerKind triggerKind);
public Task<CompletionList?> RequestCompletionAsync(string fullPath, Position pos, CompletionTriggerKind triggerKind, string? triggerChar);
public Task<CompletionItem?> ResolveCompletionItemAsync(CompletionItem completionItem);
public Task<RangeOrPlaceholderRange?> PrepareRenameAsync(string fullPath, Position pos);
public Task<WorkspaceEdit?> RequestRenameAsync(string fullPath, Position pos, string newName);
Expand Down
22 changes: 21 additions & 1 deletion src/OneWare.SDK/LanguageService/LanguageServiceBase.cs
Original file line number Diff line number Diff line change
Expand Up @@ -73,7 +73,27 @@ public virtual void RefreshTextDocument(string fullPath, string newText)

}

public virtual Task<CompletionList?> RequestCompletionAsync(string fullPath, Position pos, string triggerChar, CompletionTriggerKind triggerKind)
public IEnumerable<string> GetSignatureHelpTriggerChars()
{
return [];
}

public IEnumerable<string> GetSignatureHelpRetriggerChars()
{
return [];
}

public virtual IEnumerable<string> GetCompletionTriggerChars()
{
return [];
}

public virtual IEnumerable<string> GetCompletionCommitChars()
{
return [];
}

public virtual Task<CompletionList?> RequestCompletionAsync(string fullPath, Position pos, CompletionTriggerKind triggerKind, string? triggerChar)
{
return Task.FromResult<CompletionList?>(null);
}
Expand Down
101 changes: 68 additions & 33 deletions src/OneWare.SDK/LanguageService/LanguageServiceLsp.cs
Original file line number Diff line number Diff line change
Expand Up @@ -25,12 +25,12 @@ namespace OneWare.SDK.LanguageService
public abstract class LanguageServiceLsp : LanguageServiceBase
{
private readonly Dictionary<ProgressToken, (ApplicationProcess, string)> _tokenRegister = new();
protected LanguageClient? Client { get; private set; }
private LanguageClient? Client { get; set; }

private CancellationTokenSource? _cancellation;
private IChildProcess? _process;
protected string? Arguments { get; set; }
protected string? ExecutablePath { get; set; }
private string? Arguments { get; set; }
private string? ExecutablePath { get; set; }

protected LanguageServiceLsp(string name, string? executablePath, string? arguments, string? workspace) : base(name, workspace)
{
Expand Down Expand Up @@ -101,9 +101,9 @@ public override async Task ActivateAsync()
var reader = new StreamReader(_process.StandardError);
_ = Task.Run(() =>
{
while (_process.HasStandardError)
while (_process.HasStandardError && !reader.EndOfStream && !_cancellation.IsCancellationRequested)
{
Console.WriteLine(reader.ReadToEnd());
Console.WriteLine("ERR:" + reader.ReadToEnd());
}
}, _cancellation.Token);

Expand Down Expand Up @@ -168,16 +168,16 @@ protected async Task InitAsync(Stream input, Stream output, Action<LanguageClien
options.EnableDynamicRegistration();
options.OnShowMessage(x => ContainerLocator.Container.Resolve<ILogger>()?.Log(x.Message, ConsoleColor.DarkCyan));
options.OnTelemetryEvent(x => { ContainerLocator.Container.Resolve<ILogger>()?.Log(x, ConsoleColor.Magenta); });
// options.WithCapability(new SynchronizationCapability()
// {
// DidSave = true,
// WillSave = true,
// WillSaveWaitUntil = true
// });

options.WithCapability(new TextSynchronizationCapability()
{
DidSave = true,
WillSave = false,
WillSaveWaitUntil = false
});
options.WithCapability(new HoverCapability
{
ContentFormat = new Container<MarkupKind>(MarkupKind.PlainText)
ContentFormat = new Container<MarkupKind>(MarkupKind.PlainText, MarkupKind.Markdown)
});
options.WithCapability(new PublishDiagnosticsCapability
{
Expand All @@ -191,12 +191,25 @@ protected async Task InitAsync(Stream input, Stream output, Action<LanguageClien
{
LinkSupport = false
});
options.WithCapability(new DidChangeWatchedFilesCapability());
options.WithCapability(new ReferenceCapability());
// options.WithCapability(new DidChangeWatchedFilesCapability()
// {
//
// });
options.WithCapability(new ReferenceCapability()
{

});
options.WithCapability(new SignatureHelpCapability
{
SignatureInformation = new SignatureInformationCapabilityOptions
{ DocumentationFormat = new Container<MarkupKind>(MarkupKind.PlainText) },
{
DocumentationFormat = new Container<MarkupKind>(MarkupKind.PlainText),
ParameterInformation = new SignatureParameterInformationCapabilityOptions()
{
LabelOffsetSupport = true
},
ActiveParameterSupport = true
},
ContextSupport = true
});
options.WithCapability(new CodeActionCapability
Expand All @@ -220,39 +233,54 @@ protected async Task InitAsync(Stream input, Stream output, Action<LanguageClien
{
CompletionItem = new CompletionItemCapabilityOptions
{
CommitCharactersSupport = true,
CommitCharactersSupport = false,
DocumentationFormat = new Container<MarkupKind>(MarkupKind.PlainText),
SnippetSupport = true,
PreselectSupport = true,
InsertReplaceSupport = true,
InsertTextModeSupport = new CompletionItemInsertTextModeSupportCapabilityOptions()
{
ValueSet = new Container<InsertTextMode>(InsertTextMode.AdjustIndentation, InsertTextMode.AsIs)
},
ResolveAdditionalTextEditsSupport = true,
TagSupport = new Supports<CompletionItemTagSupportCapabilityOptions?>
{
Value = new CompletionItemTagSupportCapabilityOptions
{
ValueSet = new Container<CompletionItemTag>(CompletionItemTag.Deprecated)
}
}
},
},
CompletionItemKind = new CompletionItemKindCapabilityOptions
{
ValueSet = new Container<CompletionItemKind>(
(CompletionItemKind[])Enum.GetValues(typeof(CompletionItemKind)))
},
ContextSupport = true,
DynamicRegistration = true
InsertTextMode = InsertTextMode.AdjustIndentation,
DynamicRegistration = false
});
options.WithClientCapabilities(new ClientCapabilities
{
Workspace = new WorkspaceClientCapabilities
{
ApplyEdit = true,
Configuration = true,
DidChangeConfiguration =
new DidChangeConfigurationCapability { DynamicRegistration = true },
DidChangeWatchedFiles = new DidChangeWatchedFilesCapability { DynamicRegistration = true },
ExecuteCommand = new ExecuteCommandCapability { DynamicRegistration = true },
DidChangeConfiguration = new DidChangeConfigurationCapability
{
DynamicRegistration = false
},
DidChangeWatchedFiles = new DidChangeWatchedFilesCapability
{
DynamicRegistration = false
},
ExecuteCommand = new ExecuteCommandCapability
{
DynamicRegistration = false
},
Symbol = new WorkspaceSymbolCapability
{
DynamicRegistration = true,
DynamicRegistration = false,
SymbolKind = new SymbolKindCapabilityOptions
{
ValueSet = new Container<SymbolKind>(
Expand All @@ -263,11 +291,6 @@ protected async Task InitAsync(Stream input, Stream output, Action<LanguageClien
WorkspaceFolders = true
},
Window = new WindowClientCapabilities(),
// TextDocument = new TextDocumentClientCapabilities
// {
// Synchronization = new SynchronizationCapability
// { DidSave = true, WillSave = true, WillSaveWaitUntil = true }
// }
});

customOptions?.Invoke(options);
Expand All @@ -281,7 +304,6 @@ protected async Task InitAsync(Stream input, Stream output, Action<LanguageClien
try
{
await Client.Initialize(cancelToken).ConfigureAwait(false);
//client.ProgressManager.
}
catch (Exception e)
{
Expand Down Expand Up @@ -437,8 +459,7 @@ public override Task ExecuteCommandAsync(Command cmd)
return Client.ExecuteCommand(cmd);
}

public override async Task<CompletionList?> RequestCompletionAsync(string fullPath, Position pos, string triggerChar,
CompletionTriggerKind triggerKind)
public override async Task<CompletionList?> RequestCompletionAsync(string fullPath, Position pos, CompletionTriggerKind triggerKind, string? triggerChar)
{
var cts = new CancellationTokenSource();
cts.CancelAfter(1000);
Expand All @@ -454,7 +475,7 @@ public override Task ExecuteCommandAsync(Command cmd)
Context = new CompletionContext
{
TriggerKind = triggerKind,
TriggerCharacter = triggerChar
TriggerCharacter = triggerChar,
},
Position = pos
}, cts.Token);
Expand Down Expand Up @@ -861,5 +882,19 @@ public override Task ExecuteCommandAsync(Command cmd)

return formatting;
}

#region Capability Check

public override IEnumerable<string> GetCompletionTriggerChars()
{
return Client?.ServerSettings.Capabilities.CompletionProvider?.TriggerCharacters ?? [];
}

public override IEnumerable<string> GetCompletionCommitChars()
{
return Client?.ServerSettings.Capabilities.CompletionProvider?.AllCommitCharacters ?? [];
}

#endregion
}
}
Loading

0 comments on commit 549a7dd

Please sign in to comment.