use of org.eclipse.lsp4j.CodeActionOptions in project eclipse.jdt.ls by eclipse.
the class JDTLanguageServer method getCodeActionOptions.
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);
options.setResolveProvider(Boolean.valueOf(preferenceManager.getClientPreferences().isResolveCodeActionSupported()));
return options;
}
use of org.eclipse.lsp4j.CodeActionOptions in project eclipse.jdt.ls by eclipse.
the class InitHandler method registerCapabilities.
@Override
public void registerCapabilities(InitializeResult initializeResult) {
ServerCapabilities capabilities = new ServerCapabilities();
if (!preferenceManager.getClientPreferences().isCompletionDynamicRegistered()) {
capabilities.setCompletionProvider(CompletionHandler.DEFAULT_COMPLETION_OPTIONS);
}
if (!preferenceManager.getClientPreferences().isFormattingDynamicRegistrationSupported()) {
capabilities.setDocumentFormattingProvider(Boolean.TRUE);
}
if (!preferenceManager.getClientPreferences().isRangeFormattingDynamicRegistrationSupported()) {
capabilities.setDocumentRangeFormattingProvider(Boolean.TRUE);
}
if (!preferenceManager.getClientPreferences().isOnTypeFormattingDynamicRegistrationSupported()) {
capabilities.setDocumentOnTypeFormattingProvider(new DocumentOnTypeFormattingOptions(";", Arrays.asList("\n", "}")));
}
if (!preferenceManager.getClientPreferences().isCodeLensDynamicRegistrationSupported()) {
capabilities.setCodeLensProvider(new CodeLensOptions(true));
}
if (!preferenceManager.getClientPreferences().isSignatureHelpDynamicRegistrationSupported()) {
capabilities.setSignatureHelpProvider(SignatureHelpHandler.createOptions());
}
if (!preferenceManager.getClientPreferences().isRenameDynamicRegistrationSupported()) {
capabilities.setRenameProvider(RenameHandler.createOptions());
}
if (!preferenceManager.getClientPreferences().isCodeActionDynamicRegistered()) {
if (preferenceManager.getClientPreferences().isResolveCodeActionSupported()) {
CodeActionOptions codeActionOptions = new CodeActionOptions();
codeActionOptions.setResolveProvider(Boolean.TRUE);
capabilities.setCodeActionProvider(codeActionOptions);
} else {
capabilities.setCodeActionProvider(Boolean.TRUE);
}
}
if (!preferenceManager.getClientPreferences().isExecuteCommandDynamicRegistrationSupported()) {
Set<String> commands = commandHandler.getAllCommands();
if (!commands.isEmpty()) {
capabilities.setExecuteCommandProvider(new ExecuteCommandOptions(new ArrayList<>(commands)));
}
} else {
// Send static command at the startup - they remain registered all the time
Set<String> staticCommands = commandHandler.getStaticCommands();
if (!staticCommands.isEmpty()) {
capabilities.setExecuteCommandProvider(new ExecuteCommandOptions(new ArrayList<>(staticCommands)));
}
}
if (!preferenceManager.getClientPreferences().isWorkspaceSymbolDynamicRegistered()) {
capabilities.setWorkspaceSymbolProvider(Boolean.TRUE);
}
if (!preferenceManager.getClientPreferences().isClientDocumentSymbolProviderRegistered() && !preferenceManager.getClientPreferences().isDocumentSymbolDynamicRegistered()) {
capabilities.setDocumentSymbolProvider(Boolean.TRUE);
}
if (!preferenceManager.getClientPreferences().isDefinitionDynamicRegistered()) {
capabilities.setDefinitionProvider(Boolean.TRUE);
}
if (!preferenceManager.getClientPreferences().isTypeDefinitionDynamicRegistered()) {
capabilities.setTypeDefinitionProvider(Boolean.TRUE);
}
if (!preferenceManager.getClientPreferences().isClientHoverProviderRegistered() && !preferenceManager.getClientPreferences().isHoverDynamicRegistered()) {
capabilities.setHoverProvider(Boolean.TRUE);
}
if (!preferenceManager.getClientPreferences().isReferencesDynamicRegistered()) {
capabilities.setReferencesProvider(Boolean.TRUE);
}
if (!preferenceManager.getClientPreferences().isDocumentHighlightDynamicRegistered()) {
capabilities.setDocumentHighlightProvider(Boolean.TRUE);
}
if (!preferenceManager.getClientPreferences().isFoldgingRangeDynamicRegistered()) {
capabilities.setFoldingRangeProvider(Boolean.TRUE);
}
if (!preferenceManager.getClientPreferences().isImplementationDynamicRegistered()) {
capabilities.setImplementationProvider(Boolean.TRUE);
}
if (!preferenceManager.getClientPreferences().isSelectionRangeDynamicRegistered()) {
capabilities.setSelectionRangeProvider(Boolean.TRUE);
}
capabilities.setCallHierarchyProvider(Boolean.TRUE);
TextDocumentSyncOptions textDocumentSyncOptions = new TextDocumentSyncOptions();
textDocumentSyncOptions.setOpenClose(Boolean.TRUE);
textDocumentSyncOptions.setSave(new SaveOptions(Boolean.TRUE));
textDocumentSyncOptions.setChange(TextDocumentSyncKind.Incremental);
if (preferenceManager.getClientPreferences().isWillSaveRegistered()) {
textDocumentSyncOptions.setWillSave(Boolean.TRUE);
}
if (preferenceManager.getClientPreferences().isWillSaveWaitUntilRegistered()) {
textDocumentSyncOptions.setWillSaveWaitUntil(Boolean.TRUE);
}
capabilities.setTextDocumentSync(textDocumentSyncOptions);
WorkspaceServerCapabilities wsCapabilities = new WorkspaceServerCapabilities();
WorkspaceFoldersOptions wsFoldersOptions = new WorkspaceFoldersOptions();
wsFoldersOptions.setSupported(Boolean.TRUE);
wsFoldersOptions.setChangeNotifications(Boolean.TRUE);
wsCapabilities.setWorkspaceFolders(wsFoldersOptions);
capabilities.setWorkspace(wsCapabilities);
SemanticTokensWithRegistrationOptions semanticTokensOptions = new SemanticTokensWithRegistrationOptions();
semanticTokensOptions.setFull(new SemanticTokensServerFull(false));
semanticTokensOptions.setRange(false);
semanticTokensOptions.setDocumentSelector(List.of(new DocumentFilter("java", "file", null), new DocumentFilter("java", "jdt", null)));
semanticTokensOptions.setLegend(SemanticTokensHandler.legend());
capabilities.setSemanticTokensProvider(semanticTokensOptions);
initializeResult.setCapabilities(capabilities);
}
use of org.eclipse.lsp4j.CodeActionOptions in project lsp4e by eclipse.
the class LSPCodeActionMarkerResolution method checkMarkerResoultion.
private void checkMarkerResoultion(IMarker marker) throws IOException, CoreException, InterruptedException, ExecutionException, TimeoutException {
if (marker.getAttribute(LSP_REMEDIATION) == null) {
IResource res = marker.getResource();
if (res != null && res.getType() == IResource.FILE) {
IFile file = (IFile) res;
String languageServerId = marker.getAttribute(LSPDiagnosticsToMarkers.LANGUAGE_SERVER_ID, null);
List<CompletableFuture<LanguageServer>> languageServerFutures = new ArrayList<>();
if (languageServerId != null) {
// try to use same LS as the one that created the marker
LanguageServerDefinition definition = LanguageServersRegistry.getInstance().getDefinition(languageServerId);
if (definition != null) {
CompletableFuture<LanguageServer> serverFuture = LanguageServiceAccessor.getInitializedLanguageServer(file, definition, serverCapabilities -> serverCapabilities == null || providesCodeActions(serverCapabilities));
if (serverFuture != null) {
languageServerFutures.add(serverFuture);
}
}
}
if (languageServerFutures.isEmpty()) {
// if it's not there, try any other server
languageServerFutures.addAll(LanguageServiceAccessor.getInitializedLanguageServers(file, capabilities -> {
Either<Boolean, CodeActionOptions> codeActionProvider = capabilities.getCodeActionProvider();
if (codeActionProvider == null) {
return false;
} else if (codeActionProvider.isLeft()) {
return Boolean.TRUE.equals(codeActionProvider.getLeft());
} else if (codeActionProvider.isRight()) {
return true;
}
return false;
}));
}
List<CompletableFuture<?>> futures = new ArrayList<>();
for (CompletableFuture<LanguageServer> lsf : languageServerFutures) {
marker.setAttribute(LSP_REMEDIATION, COMPUTING);
Diagnostic diagnostic = (Diagnostic) marker.getAttribute(MarkerAttributeComputer.LSP_DIAGNOSTIC);
CodeActionContext context = new CodeActionContext(Collections.singletonList(diagnostic));
CodeActionParams params = new CodeActionParams();
params.setContext(context);
params.setTextDocument(new TextDocumentIdentifier(LSPEclipseUtils.toUri(marker.getResource()).toString()));
params.setRange(diagnostic.getRange());
CompletableFuture<List<Either<Command, CodeAction>>> codeAction = lsf.thenComposeAsync(ls -> ls.getTextDocumentService().codeAction(params));
futures.add(codeAction);
codeAction.thenAcceptAsync(actions -> {
try {
marker.setAttribute(LSP_REMEDIATION, actions);
} catch (CoreException e) {
LanguageServerPlugin.logError(e);
}
});
}
// wait a bit to avoid showing too much "Computing" without looking like a freeze
CompletableFuture.allOf(futures.toArray(new CompletableFuture[futures.size()])).get(300, TimeUnit.MILLISECONDS);
}
}
}
use of org.eclipse.lsp4j.CodeActionOptions in project camel-language-server by camel-tooling.
the class CamelLanguageServer method createServerCapabilities.
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)));
capabilities.setFoldingRangeProvider(Boolean.TRUE);
return capabilities;
}
use of org.eclipse.lsp4j.CodeActionOptions in project lxtk by lxtk-org.
the class CodeActionFeature method initialize.
@Override
void initialize(ServerCapabilities capabilities, List<DocumentFilter> documentSelector) {
if (documentSelector == null)
return;
Either<Boolean, CodeActionOptions> capability = capabilities.getCodeActionProvider();
if (capability == null || !(capability.isRight() || Boolean.TRUE.equals(capability.getLeft())))
return;
CodeActionRegistrationOptions registerOptions = new CodeActionRegistrationOptions();
registerOptions.setDocumentSelector(documentSelector);
CodeActionOptions options = capability.getRight();
if (options != null) {
registerOptions.setWorkDoneProgress(options.getWorkDoneProgress());
registerOptions.setCodeActionKinds(options.getCodeActionKinds());
registerOptions.setResolveProvider(options.getResolveProvider());
}
register(new Registration(UUID.randomUUID().toString(), METHOD, registerOptions));
}
Aggregations