Skip to content

Commit a41e165

Browse files
ddscharfeghentschke
authored andcommitted
[#220] Support environment variables in clangd options
1 parent 3b9393b commit a41e165

File tree

2 files changed

+16
-3
lines changed

2 files changed

+16
-3
lines changed

bundles/org.eclipse.cdt.lsp.clangd/META-INF/MANIFEST.MF

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -29,9 +29,10 @@ Require-Bundle: org.eclipse.cdt.lsp;bundle-version="0.0.0",
2929
org.eclipse.ui.editors;bundle-version="0.0.0",
3030
org.eclipse.ui.ide;bundle-version="0.0.0",
3131
org.eclipse.ui.workbench;bundle-version="0.0.0",
32-
org.eclipse.ui.workbench.texteditor;bundle-version="0.0.0"
33-
Bundle-Activator: org.eclipse.cdt.lsp.internal.clangd.editor.ClangdPlugin
32+
org.eclipse.ui.workbench.texteditor;bundle-version="0.0.0",
33+
org.eclipse.core.variables
3434
Service-Component: OSGI-INF/org.eclipse.cdt.lsp.clangd.BuiltinClangdOptionsDefaults.xml,
3535
OSGI-INF/org.eclipse.cdt.lsp.internal.clangd.ClangdConfigurationAccess.xml,
3636
OSGI-INF/org.eclipse.cdt.lsp.internal.clangd.ClangdFallbackManager.xml,
3737
OSGI-INF/org.eclipse.cdt.lsp.internal.clangd.ClangdMetadataDefaults.xml
38+
Bundle-Activator: org.eclipse.cdt.lsp.internal.clangd.editor.ClangdPlugin

bundles/org.eclipse.cdt.lsp.clangd/src/org/eclipse/cdt/lsp/internal/clangd/ClangdLanguageServerProvider.java

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,14 +19,17 @@
1919
import java.util.ArrayList;
2020
import java.util.List;
2121
import java.util.Objects;
22+
import java.util.stream.Collectors;
2223

2324
import org.eclipse.cdt.lsp.clangd.ClangdConfiguration;
2425
import org.eclipse.cdt.lsp.clangd.ClangdFallbackFlags;
2526
import org.eclipse.cdt.lsp.editor.Configuration;
2627
import org.eclipse.cdt.lsp.editor.LanguageServerEnable;
2728
import org.eclipse.cdt.lsp.server.ICLanguageServerProvider;
2829
import org.eclipse.core.resources.IProject;
30+
import org.eclipse.core.runtime.CoreException;
2931
import org.eclipse.core.runtime.ServiceCaller;
32+
import org.eclipse.core.variables.VariablesPlugin;
3033

3134
public final class ClangdLanguageServerProvider implements ICLanguageServerProvider {
3235

@@ -47,10 +50,19 @@ public Object getInitializationOptions(URI rootUri) {
4750
@Override
4851
public List<String> getCommands(URI rootUri) {
4952
List<String> result = new ArrayList<>();
50-
configuration.call(c -> result.addAll(c.commands(rootUri)));
53+
configuration.call(c -> result.addAll(c.commands(rootUri).stream()
54+
.map(ClangdLanguageServerProvider::resolveVariables).collect(Collectors.toList())));
5155
return result;
5256
}
5357

58+
private static String resolveVariables(String cmd) {
59+
try {
60+
return VariablesPlugin.getDefault().getStringVariableManager().performStringSubstitution(cmd);
61+
} catch (CoreException e) {
62+
return cmd;
63+
}
64+
}
65+
5466
@Override
5567
public boolean isEnabledFor(IProject project) {
5668
boolean[] enabled = new boolean[1];

0 commit comments

Comments
 (0)