Skip to content

Commit

Permalink
[#427] Override just one preference in my extension to CDT LSP
Browse files Browse the repository at this point in the history
* add facilities to оverride just one preference
  • Loading branch information
ruspl-afed committed Feb 19, 2025
1 parent 69b8a08 commit 1943391
Show file tree
Hide file tree
Showing 4 changed files with 41 additions and 25 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -164,4 +164,22 @@ public interface ClangdMetadata extends ConfigurationMetadata {
LspEditorUiMessages.ContentAssistConfigurationPage_fill_function_arguments,
LspEditorUiMessages.ContentAssistConfigurationPage_fill_function_arguments_description);

/**
* Returns the default {@link List} of {@link PreferenceMetadata}
*
* @since 3.0
*/
List<PreferenceMetadata<?>> defaults = List.of(//
clangdPath, //
useTidy, //
useBackgroundIndex, //
completionStyle, //
prettyPrint, //
queryDriver, //
additionalOptions, //
logToConsole, //
validateClangdOptions, //
fillFunctionArguments//
);

}
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,6 @@
*******************************************************************************/
package org.eclipse.cdt.lsp.clangd.internal.config;

import java.util.ArrayList;
import java.util.List;

import org.eclipse.cdt.lsp.clangd.ClangdMetadata;
Expand All @@ -26,18 +25,7 @@ public final class ClangdMetadataDefaults extends ConfigurationMetadataBase impl

@Override
protected List<PreferenceMetadata<?>> definePreferences() {
List<PreferenceMetadata<?>> defined = new ArrayList<>();
defined.add(clangdPath);
defined.add(useTidy);
defined.add(useBackgroundIndex);
defined.add(completionStyle);
defined.add(prettyPrint);
defined.add(queryDriver);
defined.add(additionalOptions);
defined.add(logToConsole);
defined.add(validateClangdOptions);
defined.add(fillFunctionArguments);
return defined;
return defaults;
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -14,11 +14,14 @@

package org.eclipse.cdt.lsp.config;

import java.util.ArrayList;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import java.util.Objects;
import java.util.Optional;
import java.util.function.Function;
import java.util.stream.Collectors;

import org.eclipse.core.runtime.preferences.PreferenceMetadata;

Expand All @@ -41,6 +44,24 @@ public ConfigurationMetadataBase() {
*/
protected abstract List<PreferenceMetadata<?>> definePreferences();

protected final List<PreferenceMetadata<?>> overrideOne(List<PreferenceMetadata<?>> input,
PreferenceMetadata<?> with) {
return overrideList(input, List.of(with));
}

protected final List<PreferenceMetadata<?>> overrideList(List<PreferenceMetadata<?>> input,
List<PreferenceMetadata<?>> with) {
Map<String, PreferenceMetadata<?>> overrides = with.stream()
.collect(Collectors.toMap(PreferenceMetadata::identifer, Function.identity()));
List<PreferenceMetadata<?>> result = new ArrayList<>();
for (PreferenceMetadata<?> metadata : input) {
Optional<PreferenceMetadata<?>> found = Optional.ofNullable(overrides.remove(metadata.identifer()));
result.add(found.orElse(metadata));
}
overrides.values().forEach(result::add);
return result;
}

protected final PreferenceMetadata<Boolean> overrideBoolean(PreferenceMetadata<Boolean> predefined,
boolean override) {
return new PreferenceMetadata<>(predefined.valueClass(), predefined.identifer(), //
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,6 @@
*******************************************************************************/
package org.eclipse.cdt.lsp.examples.preferences;

import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;

Expand All @@ -27,19 +26,9 @@ public class MyClangdOptionsDefaults extends ConfigurationMetadataBase implement

@Override
protected List<PreferenceMetadata<?>> definePreferences() {
List<PreferenceMetadata<?>> defined = new ArrayList<>();
defined.add(clangdPath);
defined.add(useTidy);
defined.add(useBackgroundIndex);
defined.add(completionStyle);
defined.add(prettyPrint);
defined.add(queryDriver);
defined.add(overrideString(additionalOptions, //
return overrideOne(defaults, overrideString(additionalOptions, //
List.of("--header-insertion=never", "--default-config").stream()
.collect(Collectors.joining(System.lineSeparator()))));
defined.add(logToConsole);
defined.add(validateClangdOptions);
return defined;
}

}

0 comments on commit 1943391

Please sign in to comment.