From 63a4ef98225278cddf155e59d1017f3b35610a66 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ond=C5=99ej=20Musil?= Date: Tue, 19 Nov 2019 12:55:22 +0900 Subject: [PATCH 1/3] Added getDocumentSymbols call to extension API MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Ondřej Musil --- src/documentSymbols.ts | 12 ++++++++++++ src/extension.api.ts | 4 ++++ src/extension.ts | 10 +++++++--- src/protocol.ts | 22 +++++++++++++++++++++- 4 files changed, 44 insertions(+), 4 deletions(-) create mode 100644 src/documentSymbols.ts diff --git a/src/documentSymbols.ts b/src/documentSymbols.ts new file mode 100644 index 000000000..005be55b9 --- /dev/null +++ b/src/documentSymbols.ts @@ -0,0 +1,12 @@ +'use strict'; + +import { LanguageClient, DocumentSymbolParams } from "vscode-languageclient"; +import { DocumentSymbolRequest, DocumentSymbolsResponse } from "./protocol"; + +export type getDocumentSymbolsCommand = (params: DocumentSymbolParams) => Promise; + +export function getDocumentSymbolsProvider(languageClient: LanguageClient): getDocumentSymbolsCommand { + return async (params: DocumentSymbolParams): Promise => { + return languageClient.sendRequest(DocumentSymbolRequest.type, params); + }; +} diff --git a/src/extension.api.ts b/src/extension.api.ts index f47c4e835..68ce3a812 100644 --- a/src/extension.api.ts +++ b/src/extension.api.ts @@ -1,3 +1,4 @@ +import { getDocumentSymbolsCommand } from './documentSymbols'; import { RequirementsData } from './requirements'; import { TextDocumentPositionParams } from 'vscode-languageclient'; import { CancellationToken, Command, ProviderResult } from 'vscode'; @@ -5,9 +6,12 @@ import { CancellationToken, Command, ProviderResult } from 'vscode'; export type provideHoverCommandFn = (params: TextDocumentPositionParams, token: CancellationToken) => ProviderResult; export type registerHoverCommand = (callback: provideHoverCommandFn) => void; +export const ExtensionApiVersion = '0.3'; + export interface ExtensionAPI { readonly apiVersion: string; readonly javaRequirement: RequirementsData; readonly status: "Started" | "Error"; readonly registerHoverCommand: registerHoverCommand; + readonly getDocumentSymbols: getDocumentSymbolsCommand; } diff --git a/src/extension.ts b/src/extension.ts index e2ab74295..05088bb6f 100644 --- a/src/extension.ts +++ b/src/extension.ts @@ -7,13 +7,14 @@ import { workspace, extensions, ExtensionContext, window, StatusBarAlignment, co import { ExecuteCommandParams, ExecuteCommandRequest, LanguageClient, LanguageClientOptions, RevealOutputChannelOn, Position as LSPosition, Location as LSLocation, StreamInfo, VersionedTextDocumentIdentifier, ErrorHandler, Message, ErrorAction, CloseAction, InitializationFailedHandler } from 'vscode-languageclient'; import { onExtensionChange, collectJavaExtensions } from './plugin'; import { prepareExecutable, awaitServerConnection } from './javaServerStarter'; +import { getDocumentSymbolsCommand, getDocumentSymbolsProvider } from './documentSymbols'; import * as requirements from './requirements'; import { Commands } from './commands'; import { StatusNotification, ClassFileContentsRequest, ProjectConfigurationUpdateRequest, MessageType, ActionableNotification, FeatureStatus, CompileWorkspaceRequest, CompileWorkspaceStatus, ProgressReportNotification, ExecuteClientCommandRequest, SendNotificationRequest, SourceAttachmentRequest, SourceAttachmentResult, SourceAttachmentAttribute } from './protocol'; -import { ExtensionAPI } from './extension.api'; +import { ExtensionAPI, ExtensionApiVersion } from './extension.api'; import * as buildpath from './buildpath'; import * as hoverAction from './hoverAction'; import * as sourceAction from './sourceAction'; @@ -207,6 +208,7 @@ export function activate(context: ExtensionContext): Promise { languageClient = new LanguageClient('java', extensionName, serverOptions, clientOptions); languageClient.registerProposedFeatures(); const registerHoverCommand = hoverAction.registerClientHoverProvider(languageClient, context); + const getDocumentSymbols: getDocumentSymbolsCommand = getDocumentSymbolsProvider(languageClient); languageClient.onReady().then(() => { languageClient.onNotification(StatusNotification.type, (report) => { @@ -217,10 +219,11 @@ export function activate(context: ExtensionContext): Promise { lastStatus = item.text; commands.executeCommand('setContext', 'javaLSReady', true); resolve({ - apiVersion: '0.2', + apiVersion: ExtensionApiVersion, javaRequirement: requirements, status: report.type, registerHoverCommand, + getDocumentSymbols }); break; case 'Error': @@ -229,10 +232,11 @@ export function activate(context: ExtensionContext): Promise { p.report({ message: 'Finished with Error' }); toggleItem(window.activeTextEditor, item); resolve({ - apiVersion: '0.2', + apiVersion: ExtensionApiVersion, javaRequirement: requirements, status: report.type, registerHoverCommand, + getDocumentSymbols }); break; case 'Starting': diff --git a/src/protocol.ts b/src/protocol.ts index 4672501ac..bf8397fca 100644 --- a/src/protocol.ts +++ b/src/protocol.ts @@ -1,6 +1,20 @@ 'use strict'; -import { RequestType, NotificationType, TextDocumentIdentifier, ExecuteCommandParams, CodeActionParams, WorkspaceEdit, FormattingOptions, WorkspaceSymbolParams, SymbolInformation, TextDocumentPositionParams, Location } from 'vscode-languageclient'; +import { + CodeActionParams, + DocumentSymbol, + DocumentSymbolParams, + ExecuteCommandParams, + FormattingOptions, + Location, + NotificationType, + RequestType, + SymbolInformation, + TextDocumentIdentifier, + TextDocumentPositionParams, + WorkspaceEdit, + WorkspaceSymbolParams, +} from 'vscode-languageclient'; import { Command, Range } from 'vscode'; /** @@ -356,3 +370,9 @@ export interface LinkLocation extends Location { export namespace FindLinks { export const type = new RequestType('java/findLinks'); } + +export type DocumentSymbolsResponse = DocumentSymbol[] | SymbolInformation[] | null; + +export namespace DocumentSymbolRequest { + export const type = new RequestType('textDocument/documentSymbol'); +} From 3ed4670af3b759ecf0814b8c43f29f88e7fb0ae3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ond=C5=99ej=20Musil?= Date: Thu, 21 Nov 2019 12:38:38 +0900 Subject: [PATCH 2/3] Used DocumentSymbolRequest from vscode-languageclient + added CancellationToken to sendRequest call MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Ondřej Musil --- src/documentSymbols.ts | 16 ++++++++++++---- src/protocol.ts | 5 ----- 2 files changed, 12 insertions(+), 9 deletions(-) diff --git a/src/documentSymbols.ts b/src/documentSymbols.ts index 005be55b9..07194f417 100644 --- a/src/documentSymbols.ts +++ b/src/documentSymbols.ts @@ -1,12 +1,20 @@ 'use strict'; -import { LanguageClient, DocumentSymbolParams } from "vscode-languageclient"; -import { DocumentSymbolRequest, DocumentSymbolsResponse } from "./protocol"; +import { + CancellationToken, + DocumentSymbolParams, + DocumentSymbolRequest, + LanguageClient +} from "vscode-languageclient"; +import { DocumentSymbolsResponse } from "./protocol"; -export type getDocumentSymbolsCommand = (params: DocumentSymbolParams) => Promise; +export type getDocumentSymbolsCommand = (params: DocumentSymbolParams, token?: CancellationToken) => Promise; export function getDocumentSymbolsProvider(languageClient: LanguageClient): getDocumentSymbolsCommand { - return async (params: DocumentSymbolParams): Promise => { + return async (params: DocumentSymbolParams, token?: CancellationToken): Promise => { + if (token !== undefined) { + return languageClient.sendRequest(DocumentSymbolRequest.type, params, token); + } return languageClient.sendRequest(DocumentSymbolRequest.type, params); }; } diff --git a/src/protocol.ts b/src/protocol.ts index bf8397fca..3492c3744 100644 --- a/src/protocol.ts +++ b/src/protocol.ts @@ -3,7 +3,6 @@ import { CodeActionParams, DocumentSymbol, - DocumentSymbolParams, ExecuteCommandParams, FormattingOptions, Location, @@ -372,7 +371,3 @@ export namespace FindLinks { } export type DocumentSymbolsResponse = DocumentSymbol[] | SymbolInformation[] | null; - -export namespace DocumentSymbolRequest { - export const type = new RequestType('textDocument/documentSymbol'); -} From 68f7e55dde70481ae2827855d6ddbbbb83f6ef62 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ond=C5=99ej=20Musil?= Date: Thu, 21 Nov 2019 13:42:57 +0900 Subject: [PATCH 3/3] Moved DocumentSymbolResponse from protocol.ts to documentSymbols.ts MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Ondřej Musil --- src/documentSymbols.ts | 7 +++++-- src/protocol.ts | 3 --- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/src/documentSymbols.ts b/src/documentSymbols.ts index 07194f417..f4b72a74b 100644 --- a/src/documentSymbols.ts +++ b/src/documentSymbols.ts @@ -2,11 +2,14 @@ import { CancellationToken, + DocumentSymbol, DocumentSymbolParams, DocumentSymbolRequest, - LanguageClient + LanguageClient, + SymbolInformation } from "vscode-languageclient"; -import { DocumentSymbolsResponse } from "./protocol"; + +type DocumentSymbolsResponse = DocumentSymbol[] | SymbolInformation[] | null; export type getDocumentSymbolsCommand = (params: DocumentSymbolParams, token?: CancellationToken) => Promise; diff --git a/src/protocol.ts b/src/protocol.ts index 3492c3744..28da7d484 100644 --- a/src/protocol.ts +++ b/src/protocol.ts @@ -2,7 +2,6 @@ import { CodeActionParams, - DocumentSymbol, ExecuteCommandParams, FormattingOptions, Location, @@ -369,5 +368,3 @@ export interface LinkLocation extends Location { export namespace FindLinks { export const type = new RequestType('java/findLinks'); } - -export type DocumentSymbolsResponse = DocumentSymbol[] | SymbolInformation[] | null;