下面列出了怎么用org.eclipse.lsp4j.CodeActionOptions的API类实例代码及写法,或者点击链接到github查看源代码。
private ServerCapabilities createServerCapabilities() {
ServerCapabilities capabilities = new ServerCapabilities();
capabilities.setTextDocumentSync(TextDocumentSyncKind.Full);
capabilities.setCompletionProvider(new CompletionOptions(Boolean.TRUE, Arrays.asList(".","?","&", "\"", "=")));
capabilities.setHoverProvider(Boolean.TRUE);
capabilities.setDocumentSymbolProvider(Boolean.TRUE);
capabilities.setReferencesProvider(Boolean.TRUE);
capabilities.setDefinitionProvider(Boolean.TRUE);
capabilities.setCodeActionProvider(new CodeActionOptions(Arrays.asList(CodeActionKind.QuickFix)));
return capabilities;
}
private CodeActionOptions getCodeActionOptions() {
String[] kinds = { CodeActionKind.QuickFix, CodeActionKind.Refactor, CodeActionKind.RefactorExtract, CodeActionKind.RefactorInline, CodeActionKind.RefactorRewrite, CodeActionKind.Source, CodeActionKind.SourceOrganizeImports };
List<String> codeActionKinds = new ArrayList<>();
for (String kind : kinds) {
if (preferenceManager.getClientPreferences().isSupportedCodeActionKind(kind)) {
codeActionKinds.add(kind);
}
}
CodeActionOptions options = new CodeActionOptions(codeActionKinds);
return options;
}
public void setCodeActionProvider(final CodeActionOptions codeActionProvider) {
if (codeActionProvider == null) {
this.codeActionProvider = null;
return;
}
this.codeActionProvider = Either.forRight(codeActionProvider);
}
/**
* Configure the server capabilities for this instance.
*
* @param params
* the initialization parameters
* @return the server capabilities
*/
protected ServerCapabilities createServerCapabilities(InitializeParams params) {
ServerCapabilities serverCapabilities = new ServerCapabilities();
serverCapabilities.setHoverProvider(true);
serverCapabilities.setDefinitionProvider(true);
serverCapabilities.setReferencesProvider(true);
serverCapabilities.setDocumentSymbolProvider(true);
serverCapabilities.setWorkspaceSymbolProvider(true);
Set<? extends IResourceServiceProvider> allLanguages = getAllLanguages();
if (allLanguages.stream().anyMatch((serviceProvider) -> serviceProvider.get(ICodeLensService.class) != null)) {
CodeLensOptions codeLensOptions = new CodeLensOptions();
codeLensOptions.setResolveProvider(allLanguages.stream()
.anyMatch((serviceProvider) -> serviceProvider.get(ICodeLensResolver.class) != null));
serverCapabilities.setCodeLensProvider(codeLensOptions);
}
boolean supportsCodeActions = allLanguages.stream()
.anyMatch((serviceProvider) -> serviceProvider.get(ICodeActionService.class) != null
|| serviceProvider.get(ICodeActionService2.class) != null);
if (supportsCodeActions) {
Optional<List<String>> supportedKinds = getSupportedCodeActionKinds();
if (supportedKinds.isPresent()) {
serverCapabilities.setCodeActionProvider(new CodeActionOptions(supportedKinds.get()));
} else {
serverCapabilities.setCodeActionProvider(true);
}
} else {
serverCapabilities.setCodeActionProvider(false);
}
serverCapabilities.setSignatureHelpProvider(new SignatureHelpOptions(ImmutableList.of("(", ",")));
serverCapabilities.setTextDocumentSync(TextDocumentSyncKind.Incremental);
CompletionOptions completionOptions = new CompletionOptions();
completionOptions.setResolveProvider(false);
completionOptions.setTriggerCharacters(ImmutableList.of("."));
serverCapabilities.setCompletionProvider(completionOptions);
serverCapabilities.setDocumentFormattingProvider(true);
serverCapabilities.setDocumentRangeFormattingProvider(true);
serverCapabilities.setDocumentHighlightProvider(true);
ClientCapabilities clientCapabilities = null;
if (params != null) {
clientCapabilities = params.getCapabilities();
}
TextDocumentClientCapabilities textDocument = null;
if (clientCapabilities != null) {
textDocument = clientCapabilities.getTextDocument();
}
RenameCapabilities rename = null;
if (textDocument != null) {
rename = textDocument.getRename();
}
Boolean prepareSupport = null;
if (rename != null) {
prepareSupport = rename.getPrepareSupport();
}
boolean clientPrepareSupport = Objects.equal(Boolean.TRUE, prepareSupport);
if (clientPrepareSupport && allLanguages.stream()
.anyMatch(serviceProvider -> serviceProvider.get(IRenameService2.class) != null)) {
RenameOptions renameOptions = new RenameOptions();
renameOptions.setPrepareProvider(true);
serverCapabilities.setRenameProvider(Either.<Boolean, RenameOptions> forRight(renameOptions));
} else {
serverCapabilities.setRenameProvider(Either.forLeft(allLanguages.stream()
.anyMatch((serviceProvider) -> serviceProvider.get(IRenameService.class) != null
|| serviceProvider.get(IRenameService2.class) != null)));
}
WorkspaceClientCapabilities workspace = null;
if (clientCapabilities != null) {
workspace = clientCapabilities.getWorkspace();
}
ExecuteCommandCapabilities executeCommand = null;
if (workspace != null) {
executeCommand = workspace.getExecuteCommand();
}
if (executeCommand != null) {
commandRegistry.initialize(allLanguages, clientCapabilities, client);
ExecuteCommandOptions executeCommandOptions = new ExecuteCommandOptions();
executeCommandOptions.setCommands(commandRegistry.getCommands());
serverCapabilities.setExecuteCommandProvider(executeCommandOptions);
}
semanticHighlightingRegistry.initialize(allLanguages, clientCapabilities, client);
serverCapabilities.setSemanticHighlighting(new SemanticHighlightingServerCapabilities(
semanticHighlightingRegistry.getAllScopes()));
for (IResourceServiceProvider language : allLanguages) {
ICapabilitiesContributor capabilitiesContributor = language.get(ICapabilitiesContributor.class);
if (capabilitiesContributor != null) {
capabilitiesContributor.contribute(serverCapabilities, params);
}
}
return serverCapabilities;
}
public void setBindings(LSPBindings bindings) {
this.bindings = bindings;
ServerCapabilities serverCapabilities = bindings.getInitResult().getCapabilities();
Either<Boolean, CodeActionOptions> codeActions = serverCapabilities.getCodeActionProvider();
allowCodeActions = codeActions != null && (!codeActions.isLeft() || codeActions.getLeft());
}
/**
* The server provides code actions. The `CodeActionOptions` return type is only
* valid if the client signals code action literal support via the property
* `textDocument.codeAction.codeActionLiteralSupport`.
*/
@Pure
public Either<Boolean, CodeActionOptions> getCodeActionProvider() {
return this.codeActionProvider;
}
/**
* The server provides code actions. The `CodeActionOptions` return type is only
* valid if the client signals code action literal support via the property
* `textDocument.codeAction.codeActionLiteralSupport`.
*/
public void setCodeActionProvider(final Either<Boolean, CodeActionOptions> codeActionProvider) {
this.codeActionProvider = codeActionProvider;
}