Skip to content

Commit

Permalink
feat: range hover
Browse files Browse the repository at this point in the history
FYI #256
  • Loading branch information
fannheyward committed Jul 29, 2021
1 parent 8985b98 commit f6092a7
Show file tree
Hide file tree
Showing 2 changed files with 28 additions and 2 deletions.
20 changes: 19 additions & 1 deletion src/client.ts
Original file line number Diff line number Diff line change
@@ -1,7 +1,8 @@
import { CodeActionKind, Command, Executable, LanguageClient, LanguageClientOptions, ServerOptions, StaticFeature, Uri, workspace } from 'coc.nvim';
import { CodeActionKind, Command, Executable, LanguageClient, LanguageClientOptions, Position, Range, ServerOptions, StaticFeature, Uri, workspace } from 'coc.nvim';
import { CodeAction, CodeActionParams, CodeActionRequest } from 'vscode-languageserver-protocol';
import { Env } from './config';
import { isRustDocument } from './ctx';
import * as ra from './lsp_ext';

class ExperimentalFeatures implements StaticFeature {
fillClientCapabilities(capabilities: any): void {
Expand Down Expand Up @@ -61,6 +62,23 @@ export function createClient(bin: string, extra: Env): LanguageClient {
documentSelector: [{ language: 'rust' }],
initializationOptions,
middleware: {
async provideHover(document, position, token) {
const doc = await workspace.document;
let positionOrRange: Range | Position | null = null;
const mode = (await workspace.nvim.call('visualmode')) as string;
if (mode) {
positionOrRange = await workspace.getSelectedRange(mode, doc);
}
if (!positionOrRange) {
const state = await workspace.getCurrentState();
positionOrRange = state.position;
}
const param: ra.HoverParams = {
position: positionOrRange,
textDocument: { uri: doc.uri },
};
return await client.sendRequest(ra.hover, param, token);
},
async resolveCompletionItem(item, token, next) {
if (item.data && !item.data.position) {
// TODO: remove this if coc undefined item.data
Expand Down
10 changes: 9 additions & 1 deletion src/lsp_ext.ts
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,14 @@ export const serverStatus = new lc.NotificationType<ServerStatusParams>('experim

export const reloadWorkspace = new lc.RequestType0<null, void>('rust-analyzer/reloadWorkspace');

export const hover = new lc.RequestType<HoverParams, lc.Hover | null, void>('textDocument/hover');

export interface HoverParams {
workDoneToken?: lc.ProgressToken;
textDocument: lc.TextDocumentIdentifier;
position: lc.Range | lc.Position;
}

export interface SyntaxTreeParams {
textDocument: lc.TextDocumentIdentifier;
range: lc.Range | null;
Expand Down Expand Up @@ -55,7 +63,7 @@ export interface MatchingBraceParams {
}
export const matchingBrace = new lc.RequestType<MatchingBraceParams, lc.Position[], void>('experimental/matchingBrace');

export const parentModule = new lc.RequestType<lc.TextDocumentPositionParams, lc.Location[] | lc.LocationLink[], void>('experimental/parentModule');
export const parentModule = new lc.RequestType<lc.TextDocumentPositionParams, lc.LocationLink[], void>('experimental/parentModule');

export interface JoinLinesParams {
textDocument: lc.TextDocumentIdentifier;
Expand Down

0 comments on commit f6092a7

Please sign in to comment.