public async override Task <CompletionList> Handle(CompletionParams request, CancellationToken token) { var omnisharpRequest = new AutoCompleteRequest() { FileName = Helpers.FromUri(request.TextDocument.Uri), Column = Convert.ToInt32(request.Position.Character), Line = Convert.ToInt32(request.Position.Line), WantKind = true, WantDocumentationForEveryCompletionResult = true, WantReturnType = true, WantSnippet = Capability.CompletionItem?.SnippetSupport ?? false }; var omnisharpResponse = await _autoCompleteHandler.Handle(omnisharpRequest); var completions = new Dictionary <string, List <CompletionItem> >(); foreach (var response in omnisharpResponse) { var isSnippet = !string.IsNullOrEmpty(response.Snippet); var text = isSnippet ? response.Snippet : response.CompletionText; var textFormat = isSnippet ? InsertTextFormat.Snippet : InsertTextFormat.PlainText; var completionItem = new CompletionItem { Label = response.CompletionText, Detail = string.IsNullOrEmpty(response.ReturnType) ? response.DisplayText : $"{response.ReturnType} {response.DisplayText}", Documentation = response.Description, Kind = GetCompletionItemKind(response.Kind), InsertText = text, InsertTextFormat = textFormat, }; if (!completions.ContainsKey(completionItem.Label)) { completions[completionItem.Label] = new List <CompletionItem>(); } completions[completionItem.Label].Add(completionItem); } var result = new List <CompletionItem>(); foreach (var key in completions.Keys) { var suggestion = completions[key][0]; var overloadCount = completions[key].Count - 1; if (overloadCount > 0) { // indicate that there is more suggestion.Detail = $"{suggestion.Detail} (+ {overloadCount} overload(s))"; } result.Add(suggestion); } return(new CompletionList(result)); }
public async override Task <CommandOrCodeActionContainer> Handle(CodeActionParams request, CancellationToken cancellationToken) { var omnisharpRequest = new GetCodeActionsRequest { FileName = Helpers.FromUri(request.TextDocument.Uri), Column = (int)request.Range.Start.Character, Line = (int)request.Range.Start.Line, Selection = Helpers.FromRange(request.Range), }; var omnisharpResponse = await _getActionsHandler.Handle(omnisharpRequest); var codeActions = new List <CodeAction>(); foreach (var ca in omnisharpResponse.CodeActions) { var omnisharpCaRequest = new RunCodeActionRequest { Identifier = ca.Identifier, FileName = Helpers.FromUri(request.TextDocument.Uri), Column = Convert.ToInt32(request.Range.Start.Character), Line = Convert.ToInt32(request.Range.Start.Line), Selection = Helpers.FromRange(request.Range), ApplyTextChanges = false, WantsTextChanges = true, }; var omnisharpCaResponse = await _runActionHandler.Handle(omnisharpCaRequest); var changes = omnisharpCaResponse.Changes.ToDictionary( x => Helpers.ToUri(x.FileName), x => ((ModifiedFileResponse)x).Changes.Select(edit => new TextEdit { NewText = edit.NewText, Range = Helpers.ToRange((edit.StartColumn, edit.StartLine), (edit.EndColumn, edit.EndLine)) }));
public Task Handle(DidCloseTextDocumentParams notification) { return(_closeHandler?.Handle(new FileCloseRequest() { FileName = Helpers.FromUri(notification.TextDocument.Uri) }) ?? Task.CompletedTask); }
public async override Task <WorkspaceEdit> Handle(RenameParams request, CancellationToken token) { var omnisharpRequest = new RenameRequest { FileName = Helpers.FromUri(request.TextDocument.Uri), RenameTo = request.NewName, Column = Convert.ToInt32(request.Position.Character), Line = Convert.ToInt32(request.Position.Line), Buffer = request.NewName, WantsTextChanges = true, ApplyTextChanges = false }; var omnisharpResponse = await _renameHandler.Handle(omnisharpRequest); if (omnisharpResponse.ErrorMessage != null) { return(new WorkspaceEdit()); } var changes = omnisharpResponse.Changes.ToDictionary(change => Helpers.ToUri(change.FileName), x => x.Changes.Select(edit => new TextEdit { NewText = edit.NewText, Range = Helpers.ToRange((edit.StartColumn, edit.StartLine), (edit.EndColumn, edit.EndLine)) }));
public override async Task <CommandOrCodeActionContainer> Handle(CodeActionParams request, CancellationToken cancellationToken) { var omnisharpRequest = new GetCodeActionsRequest { FileName = Helpers.FromUri(request.TextDocument.Uri), Column = request.Range.Start.Character, Line = request.Range.Start.Line, Selection = Helpers.FromRange(request.Range), }; var omnisharpResponse = await _getActionsHandler.Handle(omnisharpRequest); var codeActions = new List <CodeAction>(); foreach (var ca in omnisharpResponse.CodeActions) { CodeActionKind kind; if (ca.Identifier.StartsWith("using ")) { kind = CodeActionKind.SourceOrganizeImports; } else if (ca.Identifier.StartsWith("Inline ")) { kind = CodeActionKind.RefactorInline; } else if (ca.Identifier.StartsWith("Extract ")) { kind = CodeActionKind.RefactorExtract; } else if (ca.Identifier.StartsWith("Change ")) { kind = CodeActionKind.QuickFix; } else { kind = CodeActionKind.Refactor; } codeActions.Add( new CodeAction { Title = ca.Name, Kind = kind, Diagnostics = new Container <Diagnostic>(), Edit = new WorkspaceEdit(), Command = Command.Create("omnisharp/executeCodeAction") .WithTitle(ca.Name) .WithArguments(new CommandData() { Uri = request.TextDocument.Uri, Identifier = ca.Identifier, Name = ca.Name, Range = request.Range, }) }); } return(new CommandOrCodeActionContainer( codeActions.Select(ca => new CommandOrCodeAction(ca)))); }
public override async Task <CodeLens> Handle(CodeLens request, CancellationToken token) { var omnisharpRequest = new FindUsagesRequest { FileName = Helpers.FromUri(request.Data.ToObject <Uri>()), Column = (int)request.Range.Start.Character, Line = (int)request.Range.Start.Line, OnlyThisFile = false, ExcludeDefinition = true }; var omnisharpResponse = await _findUsagesHandler.Handle(omnisharpRequest); var length = omnisharpResponse?.QuickFixes?.Count() ?? 0; var jsonCamelCaseContract = new JsonSerializer { ContractResolver = new CamelCasePropertyNamesContractResolver() }; request = request with { Command = new Command { Title = length == 1 ? "1 reference" : $"{length} references", Name = "omnisharp/client/findReferences", Arguments = new JArray( new[]
public Task Handle(DidOpenTextDocumentParams notification) { return(_openHandler?.Handle(new FileOpenRequest() { Buffer = notification.TextDocument.Text, FileName = Helpers.FromUri(notification.TextDocument.Uri) }) ?? Task.CompletedTask); }
public async override Task <Unit> Handle(DidChangeTextDocumentParams notification, CancellationToken cancellationToken) { if (notification.ContentChanges == null) { return(Unit.Value); } var contentChanges = notification.ContentChanges.ToArray(); if (contentChanges.Length == 1 && contentChanges[0].Range == null) { var change = contentChanges[0]; await _bufferHandler.Handle(new UpdateBufferRequest() { FileName = Helpers.FromUri(notification.TextDocument.Uri), Buffer = change.Text }); return(Unit.Value); } var changes = contentChanges .Select(change => new LinePositionSpanTextChange() { NewText = change.Text, StartColumn = Convert.ToInt32(change.Range.Start.Character), StartLine = Convert.ToInt32(change.Range.Start.Line), EndColumn = Convert.ToInt32(change.Range.End.Character), EndLine = Convert.ToInt32(change.Range.End.Line), }) .ToArray(); await _bufferHandler.Handle(new UpdateBufferRequest() { FileName = Helpers.FromUri(notification.TextDocument.Uri), Changes = changes }); _documentVersions.Update(notification.TextDocument); return(Unit.Value); }
public async override Task <Unit> Handle(DidCloseTextDocumentParams notification, CancellationToken cancellationToken) { if (_closeHandler != null) { await _closeHandler.Handle(new FileCloseRequest() { FileName = Helpers.FromUri(notification.TextDocument.Uri) }); } return(Unit.Value); }
public async override Task <SymbolInformationOrDocumentSymbolContainer> Handle(DocumentSymbolParams request, CancellationToken token) { var omnisharpRequest = new CodeStructureRequest() { FileName = Helpers.FromUri(request.TextDocument.Uri), }; var omnisharpResponse = await _codeStructureHandler.Handle(omnisharpRequest); return(omnisharpResponse.Elements?.Select(ToDocumentSymbolInformationOrDocumentSymbol).ToArray() ?? Array.Empty <SymbolInformationOrDocumentSymbol>()); }
public override async Task <CompletionItem> Handle(CompletionItem request, CancellationToken cancellationToken) { var resolveRequest = new CompletionResolveRequest { Item = ToOmnisharpCompletionItem(request) }; var result = await _completionResolveHandler.Handle(resolveRequest); Debug.Assert(result.Item != null); return(ToLSPCompletionItem(result.Item !)); }
public async override Task <Unit> Handle(DidOpenTextDocumentParams notification, CancellationToken cancellationToken) { if (_openHandler != null) { await _openHandler.Handle(new FileOpenRequest() { Buffer = notification.TextDocument.Text, FileName = Helpers.FromUri(notification.TextDocument.Uri) }); } return(Unit.Value); }
public override async Task <CompletionList> Handle(CompletionParams request, CancellationToken token) { var omnisharpRequest = new CompletionRequest() { FileName = Helpers.FromUri(request.TextDocument.Uri), Column = Convert.ToInt32(request.Position.Character), Line = Convert.ToInt32(request.Position.Line), CompletionTrigger = ConvertEnum <CompletionTriggerKind, OmnisharpCompletionTriggerKind>(request.Context?.TriggerKind ?? CompletionTriggerKind.Invoked), TriggerCharacter = request.Context?.TriggerCharacter is { Length : > 0 } str?str[0] : null }; var omnisharpResponse = await _completionHandler.Handle(omnisharpRequest); return(new CompletionList(omnisharpResponse.Items.Select(ToLSPCompletionItem), isIncomplete: omnisharpResponse.IsIncomplete)); }
public async override Task <LocationOrLocationLinks> Handle(ImplementationParams request, CancellationToken token) { var omnisharpRequest = new FindImplementationsRequest() { FileName = FromUri(request.TextDocument.Uri), Column = Convert.ToInt32(request.Position.Character), Line = Convert.ToInt32(request.Position.Line) }; var omnisharpResponse = await _findImplementationsHandler.Handle(omnisharpRequest); return(omnisharpResponse?.QuickFixes?.Select(x => new LocationOrLocationLink(new Location { Uri = ToUri(x.FileName), Range = ToRange((x.Column, x.Line)) })).ToArray() ?? Array.Empty <LocationOrLocationLink>());
public override async Task <TextEditContainer> Handle(DocumentFormattingParams request, CancellationToken cancellationToken) { var omnisharpRequest = new CodeFormatRequest() { FileName = Helpers.FromUri(request.TextDocument.Uri), WantsTextChanges = true }; var omnisharpResponse = await _codeFormatHandler.Handle(omnisharpRequest); return(omnisharpResponse.Changes.Select(change => new TextEdit() { NewText = change.NewText, Range = new Range(new Position(change.StartLine, change.StartColumn), new Position(change.EndLine, change.EndColumn)) }).ToArray()); }
public async override Task <CodeLensContainer> Handle(CodeLensParams request, CancellationToken token) { var omnisharpRequest = new MembersTreeRequest() { FileName = Helpers.FromUri(request.TextDocument.Uri), }; var omnisharpResponse = await _membersAsTreeHandler.Handle(omnisharpRequest); var codeLenseContainer = new List <CodeLens>(); foreach (var node in omnisharpResponse.TopLevelTypeDefinitions) { ToCodeLens(request.TextDocument, node, codeLenseContainer); } return(codeLenseContainer); }
public async Task <DocumentSymbolInformationContainer> Handle(DocumentSymbolParams request, CancellationToken token) { var omnisharpRequest = new MembersTreeRequest() { FileName = Helpers.FromUri(request.TextDocument.Uri), }; var omnisharpResponse = await _membersAsTreeHandler.Handle(omnisharpRequest); var symbolInformationContainer = new List <DocumentSymbolInformation>(); foreach (var node in omnisharpResponse.TopLevelTypeDefinitions) { ToDocumentSymbol(node, symbolInformationContainer); } return(symbolInformationContainer); }
public async override Task <TextEditContainer> Handle(DocumentRangeFormattingParams request, CancellationToken cancellationToken) { var omnisharpRequest = new FormatRangeRequest() { FileName = Helpers.FromUri(request.TextDocument.Uri), Line = Convert.ToInt32(request.Range.Start.Line), Column = Convert.ToInt32(request.Range.Start.Character), EndLine = Convert.ToInt32(request.Range.End.Line), EndColumn = Convert.ToInt32(request.Range.End.Character), }; var omnisharpResponse = await _formatRangeHandler.Handle(omnisharpRequest); return(omnisharpResponse.Changes.Select(change => new TextEdit() { NewText = change.NewText, Range = new Range(new Position(change.StartLine, change.StartColumn), new Position(change.EndLine, change.EndColumn)) }).ToArray()); }
public async override Task <Hover> Handle(HoverParams request, CancellationToken token) { var omnisharpRequest = new TypeLookupRequest() { FileName = Helpers.FromUri(request.TextDocument.Uri), Column = Convert.ToInt32(request.Position.Character), Line = Convert.ToInt32(request.Position.Line), IncludeDocumentation = true }; var omnisharpResponse = await _definitionHandler.Handle(omnisharpRequest); return(new Hover() { // TODO: Range? We don't currently have that! // Range = Contents = new MarkedStringsOrMarkupContent(new Container <MarkedString>(Helpers.EscapeMarkdown(omnisharpResponse.Type), Helpers.EscapeMarkdown(omnisharpResponse.Documentation))) }); }
public override async Task <TextEditContainer> Handle(DocumentOnTypeFormattingParams request, CancellationToken cancellationToken) { // TODO: request.options var omnisharpRequest = new FormatAfterKeystrokeRequest() { Character = request.Character, Line = Convert.ToInt32(request.Position.Line), Column = Convert.ToInt32(request.Position.Character), FileName = Helpers.FromUri(request.TextDocument.Uri), }; var omnisharpResponse = await _formatAfterKeystrokeHandler.Handle(omnisharpRequest); return(omnisharpResponse.Changes.Select(change => new TextEdit() { NewText = change.NewText, Range = new Range(new Position(change.StartLine, change.StartColumn), new Position(change.EndLine, change.EndColumn)) }).ToArray()); }
public async override Task <LocationContainer> Handle(ReferenceParams request, CancellationToken token) { var omnisharpRequest = new FindUsagesRequest { FileName = Helpers.FromUri(request.TextDocument.Uri), Column = Convert.ToInt32(request.Position.Character), Line = Convert.ToInt32(request.Position.Line), OnlyThisFile = false, ExcludeDefinition = !request.Context.IncludeDeclaration }; var omnisharpResponse = await _findUsagesHandler.Handle(omnisharpRequest); return(omnisharpResponse.QuickFixes?.Select(x => new Location { Uri = Helpers.ToUri(x.FileName), Range = x.ToRange() }).ToArray()); }
public override async Task <Hover> Handle(HoverParams request, CancellationToken token) { var omnisharpRequest = new QuickInfoRequest() { FileName = Helpers.FromUri(request.TextDocument.Uri), Column = Convert.ToInt32(request.Position.Character), Line = Convert.ToInt32(request.Position.Line), }; var omnisharpResponse = await _definitionHandler.Handle(omnisharpRequest); return(new Hover() { // TODO: Range? We don't currently have that! // Range = Contents = new MarkedStringsOrMarkupContent(new MarkupContent() { Value = omnisharpResponse.Markdown, Kind = MarkupKind.Markdown }) }); }
public async Task <LocationOrLocations> Handle(DefinitionParams request, CancellationToken token) { var omnisharpRequest = new GotoDefinitionRequest() { FileName = FromUri(request.TextDocument.Uri), Column = Convert.ToInt32(request.Position.Character), Line = Convert.ToInt32(request.Position.Line) }; var omnisharpResponse = await _definitionHandler.Handle(omnisharpRequest); if (string.IsNullOrWhiteSpace(omnisharpResponse.FileName)) { return(new LocationOrLocations()); } return(new LocationOrLocations(new Location() { Uri = ToUri(omnisharpResponse.FileName), Range = ToRange((omnisharpResponse.Column, omnisharpResponse.Line)) }));
public async Task <Unit> Handle(ExecuteCommandParams request, CancellationToken cancellationToken) { Debug.Assert(request.Command == "omnisharp/executeCodeAction"); var data = request.Arguments[0].ToObject <CommandData>(_serializer.JsonSerializer); var omnisharpCaRequest = new RunCodeActionRequest { Identifier = data.Identifier, FileName = data.Uri.GetFileSystemPath(), Column = data.Range.Start.Character, Line = data.Range.Start.Line, Selection = Helpers.FromRange(data.Range), ApplyTextChanges = false, WantsTextChanges = true, WantsAllCodeActionOperations = true }; var omnisharpCaResponse = await _runActionHandler.Handle(omnisharpCaRequest); if (omnisharpCaResponse.Changes != null) { var edit = Helpers.ToWorkspaceEdit( omnisharpCaResponse.Changes, _server.ClientSettings.Capabilities.Workspace.WorkspaceEdit.Value, _documentVersions ); ; await _server.Workspace.ApplyWorkspaceEdit(new ApplyWorkspaceEditParams() { Label = data.Name, Edit = edit }, cancellationToken); // Do something with response? //if (response.Applied) } return(Unit.Value); }
public override async Task <LocationOrLocationLinks> Handle(DefinitionParams request, CancellationToken token) { var omnisharpRequest = new GotoDefinitionRequest() { FileName = FromUri(request.TextDocument.Uri), Column = Convert.ToInt32(request.Position.Character), Line = Convert.ToInt32(request.Position.Line) }; var omnisharpResponse = await _definitionHandler.Handle(omnisharpRequest); if (omnisharpResponse.Definitions == null) { return(new LocationOrLocationLinks()); } return(new LocationOrLocationLinks(omnisharpResponse.Definitions.Select <Definition, LocationOrLocationLink>(definition => new Location() { Uri = definition.Location.FileName, Range = ToRange(definition.Location.Range) }))); }
public async override Task <CodeLens> Handle(CodeLens request, CancellationToken token) { var omnisharpRequest = new FindUsagesRequest { FileName = Helpers.FromUri(request.Data.ToObject <Uri>()), Column = (int)request.Range.Start.Character, Line = (int)request.Range.Start.Line, OnlyThisFile = false, ExcludeDefinition = true }; var omnisharpResponse = await _findUsagesHandler.Handle(omnisharpRequest); var length = omnisharpResponse?.QuickFixes?.Count() ?? 0; request.Command = new Command { Title = length == 1 ? "1 reference" : $"{length} references" // TODO: Hook up command. }; return(request); }
public async Task <SignatureHelp> Handle(TextDocumentPositionParams request, CancellationToken token) { var omnisharpRequest = new SignatureHelpRequest { FileName = Helpers.FromUri(request.TextDocument.Uri), Column = Convert.ToInt32(request.Position.Character), Line = Convert.ToInt32(request.Position.Line) }; var omnisharpResponse = await _signatureHandler.Handle(omnisharpRequest); if (!omnisharpResponse.Signatures.Any()) { return(null); } var containerSignatures = omnisharpResponse.Signatures.Select(x => new SignatureInformation { Documentation = x.Documentation, Label = x.Label, Parameters = new Container <ParameterInformation>(x.Parameters.Select(param => new ParameterInformation { Documentation = param.Documentation, Label = param.Label })) }); var signatures = new Container <SignatureInformation>(containerSignatures); return(new SignatureHelp { ActiveParameter = omnisharpResponse.ActiveParameter, ActiveSignature = omnisharpResponse.ActiveSignature, Signatures = signatures }); }