Skip to content

Commit 088e8ae

Browse files
authored
Add setting to disable c/c++ support (#493)
1 parent 7bd3ba6 commit 088e8ae

File tree

3 files changed

+66
-8
lines changed

3 files changed

+66
-8
lines changed

package.json

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -232,6 +232,22 @@
232232
"markdownDeprecationMessage": "**Deprecated**: Please use `#editor.inlayHints.enabled#` instead.",
233233
"order": 3
234234
},
235+
"sourcekit-lsp.support-c-cpp": {
236+
"type": "string",
237+
"default": "cpptools-inactive",
238+
"enum": [
239+
"enable",
240+
"disable",
241+
"cpptools-inactive"
242+
],
243+
"enumDescriptions": [
244+
"Always enable",
245+
"Always disable",
246+
"Disable when C/C++ extension is active"
247+
],
248+
"description": "Add LSP functionality for C/C++ files. By default this is set to disable when the C/C++ extension is active.",
249+
"order": 4
250+
},
235251
"sourcekit-lsp.trace.server": {
236252
"type": "string",
237253
"default": "off",
@@ -241,7 +257,7 @@
241257
"verbose"
242258
],
243259
"description": "Traces the communication between VS Code and the SourceKit-LSP language server.",
244-
"order": 4
260+
"order": 5
245261
}
246262
}
247263
},

src/configuration.ts

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,8 @@
1414

1515
import * as vscode from "vscode";
1616

17+
type CFamilySupportOptions = "enable" | "disable" | "cpptools-inactive";
18+
1719
/** sourcekit-lsp configuration */
1820
export interface LSPConfiguration {
1921
/** Path to sourcekit-lsp executable */
@@ -22,6 +24,8 @@ export interface LSPConfiguration {
2224
readonly serverArguments: string[];
2325
/** Are inlay hints enabled */
2426
readonly inlayHintsEnabled: boolean;
27+
/** Support C Family source files */
28+
readonly supportCFamily: CFamilySupportOptions;
2529
}
2630

2731
/** workspace folder configuration */
@@ -56,6 +60,11 @@ const configuration = {
5660
.getConfiguration("sourcekit-lsp")
5761
.get<boolean>("inlayHints.enabled", true);
5862
},
63+
get supportCFamily(): CFamilySupportOptions {
64+
return vscode.workspace
65+
.getConfiguration("sourcekit-lsp")
66+
.get<CFamilySupportOptions>("support-c-cpp", "cpptools-inactive");
67+
},
5968
};
6069
},
6170

src/sourcekit-lsp/LanguageClientManager.ts

Lines changed: 40 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -36,18 +36,50 @@ import { LanguageClient } from "vscode-languageclient/node";
3636
*/
3737
export class LanguageClientManager {
3838
// document selector used by language client
39-
static documentSelector = [
39+
static appleLangDocumentSelector = [
4040
{ scheme: "file", language: "swift" },
4141
{ scheme: "untitled", language: "swift" },
42-
{ scheme: "file", language: "c" },
43-
{ scheme: "untitled", language: "c" },
44-
{ scheme: "file", language: "cpp" },
45-
{ scheme: "untitled", language: "cpp" },
4642
{ scheme: "file", language: "objective-c" },
4743
{ scheme: "untitled", language: "objective-c" },
4844
{ scheme: "file", language: "objective-cpp" },
4945
{ scheme: "untitled", language: "objective-cpp" },
5046
];
47+
// document selector used by language client
48+
static cFamilyDocumentSelector = [
49+
{ scheme: "file", language: "c" },
50+
{ scheme: "untitled", language: "c" },
51+
{ scheme: "file", language: "cpp" },
52+
{ scheme: "untitled", language: "cpp" },
53+
];
54+
static get documentSelector(): { scheme: string; language: string }[] {
55+
let documentSelector: { scheme: string; language: string }[];
56+
switch (configuration.lsp.supportCFamily) {
57+
case "enable":
58+
documentSelector = [
59+
...LanguageClientManager.appleLangDocumentSelector,
60+
...LanguageClientManager.cFamilyDocumentSelector,
61+
];
62+
break;
63+
64+
case "disable":
65+
documentSelector = LanguageClientManager.appleLangDocumentSelector;
66+
break;
67+
68+
case "cpptools-inactive": {
69+
const cppToolsActive =
70+
vscode.extensions.getExtension("ms-vscode.cpptools")?.isActive;
71+
documentSelector =
72+
cppToolsActive === true
73+
? LanguageClientManager.appleLangDocumentSelector
74+
: [
75+
...LanguageClientManager.appleLangDocumentSelector,
76+
...LanguageClientManager.cFamilyDocumentSelector,
77+
];
78+
}
79+
}
80+
return documentSelector;
81+
}
82+
5183
// build argument to sourcekit-lsp filter
5284
static buildArgumentFilter: ArgumentFilter[] = [
5385
{ argument: "--build-path", include: 1 },
@@ -128,10 +160,10 @@ export class LanguageClientManager {
128160
}
129161
// on change config restart server
130162
const onChangeConfig = vscode.workspace.onDidChangeConfiguration(event => {
131-
if (event.affectsConfiguration("sourcekit-lsp.serverPath")) {
163+
if (event.affectsConfiguration("sourcekit-lsp")) {
132164
vscode.window
133165
.showInformationMessage(
134-
"Changing LSP server path requires the language server be restarted.",
166+
"Changing LSP settings requires the language server be restarted.",
135167
"Ok"
136168
)
137169
.then(selected => {
@@ -389,6 +421,7 @@ export class LanguageClientManager {
389421
if (folder) {
390422
workspaceFolder = { uri: folder, name: FolderContext.uriName(folder), index: 0 };
391423
}
424+
392425
const clientOptions: langclient.LanguageClientOptions = {
393426
documentSelector: LanguageClientManager.documentSelector,
394427
revealOutputChannelOn: langclient.RevealOutputChannelOn.Never,

0 commit comments

Comments
 (0)