Skip to content

Commit 84f4522

Browse files
Ondrej Musilfbricon
authored andcommitted
Added getDocumentSymbols call to extension API (#1151)
Signed-off-by: Ondřej Musil <ondrej.musil@qoretechnologies.com>
1 parent 368ca0f commit 84f4522

4 files changed

Lines changed: 47 additions & 4 deletions

File tree

src/documentSymbols.ts

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
'use strict';
2+
3+
import {
4+
CancellationToken,
5+
DocumentSymbol,
6+
DocumentSymbolParams,
7+
DocumentSymbolRequest,
8+
LanguageClient,
9+
SymbolInformation
10+
} from "vscode-languageclient";
11+
12+
type DocumentSymbolsResponse = DocumentSymbol[] | SymbolInformation[] | null;
13+
14+
export type getDocumentSymbolsCommand = (params: DocumentSymbolParams, token?: CancellationToken) => Promise<DocumentSymbolsResponse>;
15+
16+
export function getDocumentSymbolsProvider(languageClient: LanguageClient): getDocumentSymbolsCommand {
17+
return async (params: DocumentSymbolParams, token?: CancellationToken): Promise<DocumentSymbolsResponse> => {
18+
if (token !== undefined) {
19+
return languageClient.sendRequest(DocumentSymbolRequest.type, params, token);
20+
}
21+
return languageClient.sendRequest(DocumentSymbolRequest.type, params);
22+
};
23+
}

src/extension.api.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,17 @@
1+
import { getDocumentSymbolsCommand } from './documentSymbols';
12
import { RequirementsData } from './requirements';
23
import { TextDocumentPositionParams } from 'vscode-languageclient';
34
import { CancellationToken, Command, ProviderResult } from 'vscode';
45

56
export type provideHoverCommandFn = (params: TextDocumentPositionParams, token: CancellationToken) => ProviderResult<Command[] | undefined>;
67
export type registerHoverCommand = (callback: provideHoverCommandFn) => void;
78

9+
export const ExtensionApiVersion = '0.3';
10+
811
export interface ExtensionAPI {
912
readonly apiVersion: string;
1013
readonly javaRequirement: RequirementsData;
1114
readonly status: "Started" | "Error";
1215
readonly registerHoverCommand: registerHoverCommand;
16+
readonly getDocumentSymbols: getDocumentSymbolsCommand;
1317
}

src/extension.ts

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,13 +7,14 @@ import { workspace, extensions, ExtensionContext, window, StatusBarAlignment, co
77
import { ExecuteCommandParams, ExecuteCommandRequest, LanguageClient, LanguageClientOptions, RevealOutputChannelOn, Position as LSPosition, Location as LSLocation, StreamInfo, VersionedTextDocumentIdentifier, ErrorHandler, Message, ErrorAction, CloseAction, InitializationFailedHandler } from 'vscode-languageclient';
88
import { onExtensionChange, collectJavaExtensions } from './plugin';
99
import { prepareExecutable, awaitServerConnection } from './javaServerStarter';
10+
import { getDocumentSymbolsCommand, getDocumentSymbolsProvider } from './documentSymbols';
1011
import * as requirements from './requirements';
1112
import { Commands } from './commands';
1213
import {
1314
StatusNotification, ClassFileContentsRequest, ProjectConfigurationUpdateRequest, MessageType, ActionableNotification, FeatureStatus, CompileWorkspaceRequest, CompileWorkspaceStatus, ProgressReportNotification, ExecuteClientCommandRequest, SendNotificationRequest,
1415
SourceAttachmentRequest, SourceAttachmentResult, SourceAttachmentAttribute
1516
} from './protocol';
16-
import { ExtensionAPI } from './extension.api';
17+
import { ExtensionAPI, ExtensionApiVersion } from './extension.api';
1718
import * as buildpath from './buildpath';
1819
import * as hoverAction from './hoverAction';
1920
import * as sourceAction from './sourceAction';
@@ -207,6 +208,7 @@ export function activate(context: ExtensionContext): Promise<ExtensionAPI> {
207208
languageClient = new LanguageClient('java', extensionName, serverOptions, clientOptions);
208209
languageClient.registerProposedFeatures();
209210
const registerHoverCommand = hoverAction.registerClientHoverProvider(languageClient, context);
211+
const getDocumentSymbols: getDocumentSymbolsCommand = getDocumentSymbolsProvider(languageClient);
210212

211213
languageClient.onReady().then(() => {
212214
languageClient.onNotification(StatusNotification.type, (report) => {
@@ -217,10 +219,11 @@ export function activate(context: ExtensionContext): Promise<ExtensionAPI> {
217219
lastStatus = item.text;
218220
commands.executeCommand('setContext', 'javaLSReady', true);
219221
resolve({
220-
apiVersion: '0.2',
222+
apiVersion: ExtensionApiVersion,
221223
javaRequirement: requirements,
222224
status: report.type,
223225
registerHoverCommand,
226+
getDocumentSymbols
224227
});
225228
break;
226229
case 'Error':
@@ -229,10 +232,11 @@ export function activate(context: ExtensionContext): Promise<ExtensionAPI> {
229232
p.report({ message: 'Finished with Error' });
230233
toggleItem(window.activeTextEditor, item);
231234
resolve({
232-
apiVersion: '0.2',
235+
apiVersion: ExtensionApiVersion,
233236
javaRequirement: requirements,
234237
status: report.type,
235238
registerHoverCommand,
239+
getDocumentSymbols
236240
});
237241
break;
238242
case 'Starting':

src/protocol.ts

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,18 @@
11
'use strict';
22

3-
import { RequestType, NotificationType, TextDocumentIdentifier, ExecuteCommandParams, CodeActionParams, WorkspaceEdit, FormattingOptions, WorkspaceSymbolParams, SymbolInformation, TextDocumentPositionParams, Location } from 'vscode-languageclient';
3+
import {
4+
CodeActionParams,
5+
ExecuteCommandParams,
6+
FormattingOptions,
7+
Location,
8+
NotificationType,
9+
RequestType,
10+
SymbolInformation,
11+
TextDocumentIdentifier,
12+
TextDocumentPositionParams,
13+
WorkspaceEdit,
14+
WorkspaceSymbolParams,
15+
} from 'vscode-languageclient';
416
import { Command, Range } from 'vscode';
517

618
/**

0 commit comments

Comments
 (0)