Skip to content

Commit 9ac95e0

Browse files
committed
Provide client-side snippet until language server is ready
Signed-off-by: sheche <[email protected]>
1 parent 083f580 commit 9ac95e0

File tree

3 files changed

+23
-10
lines changed

3 files changed

+23
-10
lines changed

src/extension.ts

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ import { registerClientProviders } from './providerDispatcher';
2222
import * as fileEventHandler from './fileEventHandler';
2323
import { StandardLanguageClient } from './standardLanguageClient';
2424
import { apiManager } from './apiManager';
25-
import { SnippetCompletionProvider } from './snippetCompletionProvider';
25+
import { snippetCompletionProvider } from './snippetCompletionProvider';
2626
import { runtimeStatusBarProvider } from './runtimeStatusBarProvider';
2727
import { serverStatusBarProvider } from './serverStatusBarProvider';
2828
import { markdownPreviewProvider } from "./markdownPreviewProvider";
@@ -408,8 +408,7 @@ export function activate(context: ExtensionContext): Promise<ExtensionAPI> {
408408
}
409409
});
410410

411-
const snippetProvider: SnippetCompletionProvider = new SnippetCompletionProvider();
412-
context.subscriptions.push(languages.registerCompletionItemProvider({ scheme: 'file', language: 'java' }, snippetProvider));
411+
context.subscriptions.push(snippetCompletionProvider.initialize());
413412
context.subscriptions.push(serverStatusBarProvider);
414413
context.subscriptions.push(runtimeStatusBarProvider);
415414

src/snippetCompletionProvider.ts

Lines changed: 18 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,24 @@
11
'use strict';
22

3-
import { CompletionItemProvider, TextDocument, Position, CancellationToken, CompletionContext, CompletionItem, CompletionItemKind, SnippetString, MarkdownString } from "vscode";
3+
import { CompletionItemProvider, TextDocument, Position, CancellationToken, CompletionContext, CompletionItem, CompletionItemKind, SnippetString, MarkdownString, languages, Disposable } from "vscode";
44
import * as fse from 'fs-extra';
55
import * as path from 'path';
6-
import { apiManager } from "./apiManager";
7-
import { ClientStatus } from "./extension.api";
86

9-
export class SnippetCompletionProvider implements CompletionItemProvider {
7+
class SnippetCompletionProvider implements Disposable {
8+
9+
private providerImpl: Disposable;
10+
11+
public initialize(): SnippetCompletionProvider {
12+
this.providerImpl = languages.registerCompletionItemProvider({ scheme: 'file', language: 'java' }, new SnippetCompletionProviderImpl());
13+
return this;
14+
}
15+
16+
public dispose(): void {
17+
this.providerImpl.dispose();
18+
}
19+
}
20+
21+
class SnippetCompletionProviderImpl implements CompletionItemProvider {
1022

1123
private snippets: {};
1224

@@ -15,9 +27,6 @@ export class SnippetCompletionProvider implements CompletionItemProvider {
1527
}
1628

1729
public async provideCompletionItems(_document: TextDocument, _position: Position, _token: CancellationToken, _context: CompletionContext): Promise<CompletionItem[]> {
18-
if (apiManager.getApiInstance().status === ClientStatus.Started) {
19-
return [];
20-
}
2130

2231
const snippetItems: CompletionItem[] = [];
2332
for (const label of Object.keys(this.snippets)) {
@@ -48,3 +57,5 @@ export function beautifyDocument(raw: string): MarkdownString {
4857
const escapedString = raw.replace(/\$\{\d:?(.*?)\}/gm, '$1').replace(/\$\d/gm, '');
4958
return new MarkdownString().appendCodeblock(escapedString, "java");
5059
}
60+
61+
export const snippetCompletionProvider: SnippetCompletionProvider = new SnippetCompletionProvider();

src/standardLanguageClient.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@ import { TypeHierarchyDirection, TypeHierarchyItem } from "./typeHierarchy/proto
3333
import { buildFilePatterns } from './plugin';
3434
import { pomCodeActionMetadata, PomCodeActionProvider } from "./pom/pomCodeActionProvider";
3535
import { findRuntimes, IJavaRuntime } from "jdk-utils";
36+
import { snippetCompletionProvider } from "./snippetCompletionProvider";
3637

3738
const extensionName = 'Language Support for Java';
3839
const GRADLE_CHECKSUM = "gradle/checksum/prompt";
@@ -110,6 +111,8 @@ export class StandardLanguageClient {
110111
if (!hasImported) {
111112
showImportFinishNotification(context);
112113
}
114+
// Disable the client-side snippet provider since LS is ready.
115+
snippetCompletionProvider.dispose();
113116
break;
114117
case 'Started':
115118
this.status = ClientStatus.Started;

0 commit comments

Comments
 (0)