@@ -36,18 +36,50 @@ import { LanguageClient } from "vscode-languageclient/node";
36
36
*/
37
37
export class LanguageClientManager {
38
38
// document selector used by language client
39
- static documentSelector = [
39
+ static appleLangDocumentSelector = [
40
40
{ scheme : "file" , language : "swift" } ,
41
41
{ scheme : "untitled" , language : "swift" } ,
42
- { scheme : "file" , language : "c" } ,
43
- { scheme : "untitled" , language : "c" } ,
44
- { scheme : "file" , language : "cpp" } ,
45
- { scheme : "untitled" , language : "cpp" } ,
46
42
{ scheme : "file" , language : "objective-c" } ,
47
43
{ scheme : "untitled" , language : "objective-c" } ,
48
44
{ scheme : "file" , language : "objective-cpp" } ,
49
45
{ scheme : "untitled" , language : "objective-cpp" } ,
50
46
] ;
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
+
51
83
// build argument to sourcekit-lsp filter
52
84
static buildArgumentFilter : ArgumentFilter [ ] = [
53
85
{ argument : "--build-path" , include : 1 } ,
@@ -128,10 +160,10 @@ export class LanguageClientManager {
128
160
}
129
161
// on change config restart server
130
162
const onChangeConfig = vscode . workspace . onDidChangeConfiguration ( event => {
131
- if ( event . affectsConfiguration ( "sourcekit-lsp.serverPath " ) ) {
163
+ if ( event . affectsConfiguration ( "sourcekit-lsp" ) ) {
132
164
vscode . window
133
165
. showInformationMessage (
134
- "Changing LSP server path requires the language server be restarted." ,
166
+ "Changing LSP settings requires the language server be restarted." ,
135
167
"Ok"
136
168
)
137
169
. then ( selected => {
@@ -389,6 +421,7 @@ export class LanguageClientManager {
389
421
if ( folder ) {
390
422
workspaceFolder = { uri : folder , name : FolderContext . uriName ( folder ) , index : 0 } ;
391
423
}
424
+
392
425
const clientOptions : langclient . LanguageClientOptions = {
393
426
documentSelector : LanguageClientManager . documentSelector ,
394
427
revealOutputChannelOn : langclient . RevealOutputChannelOn . Never ,
0 commit comments