@@ -47,29 +47,30 @@ export const semanticTokensLegend: vscode.SemanticTokensLegend = {
47
47
export function setupSyntacticCapabilities (
48
48
params : ClientCapabilities ,
49
49
server : vscode . ServerCapabilities ,
50
+ initOptions : LanguageServerInitializationOptions ,
50
51
) {
51
- if ( params . textDocument ?. selectionRange ) {
52
+ if ( ! initOptions . respectClientCapabilities || params . textDocument ?. selectionRange ) {
52
53
server . selectionRangeProvider = true ;
53
54
}
54
- if ( params . textDocument ?. foldingRange ) {
55
+ if ( ! initOptions . respectClientCapabilities || params . textDocument ?. foldingRange ) {
55
56
server . foldingRangeProvider = true ;
56
57
}
57
- if ( params . textDocument ?. linkedEditingRange ) {
58
+ if ( ! initOptions . respectClientCapabilities || params . textDocument ?. linkedEditingRange ) {
58
59
server . linkedEditingRangeProvider = true ;
59
60
}
60
- if ( params . textDocument ?. colorProvider ) {
61
+ if ( ! initOptions . respectClientCapabilities || params . textDocument ?. colorProvider ) {
61
62
server . colorProvider = true ;
62
63
}
63
- if ( params . textDocument ?. documentSymbol ) {
64
+ if ( ! initOptions . respectClientCapabilities || params . textDocument ?. documentSymbol ) {
64
65
server . documentSymbolProvider = true ;
65
66
}
66
- if ( params . textDocument ?. formatting ) {
67
+ if ( ! initOptions . respectClientCapabilities || params . textDocument ?. formatting ) {
67
68
server . documentFormattingProvider = true ;
68
69
}
69
- if ( params . textDocument ?. rangeFormatting ) {
70
+ if ( ! initOptions . respectClientCapabilities || params . textDocument ?. rangeFormatting ) {
70
71
server . documentRangeFormattingProvider = true ;
71
72
}
72
- if ( params . textDocument ?. onTypeFormatting ) {
73
+ if ( ! initOptions . respectClientCapabilities || params . textDocument ?. onTypeFormatting ) {
73
74
// https://github.com/microsoft/vscode/blob/ce119308e8fd4cd3f992d42b297588e7abe33a0c/extensions/typescript-language-features/src/languageFeatures/formatting.ts#L99
74
75
server . documentOnTypeFormattingProvider = {
75
76
firstTriggerCharacter : ';' ,
@@ -81,33 +82,33 @@ export function setupSyntacticCapabilities(
81
82
export function setupSemanticCapabilities (
82
83
params : ClientCapabilities ,
83
84
server : vscode . ServerCapabilities ,
84
- options : LanguageServerInitializationOptions ,
85
+ initOptions : LanguageServerInitializationOptions ,
85
86
plugins : ReturnType < LanguageServerPlugin > [ ] ,
86
87
) {
87
- if ( params . textDocument ?. references ) {
88
+ if ( ! initOptions . respectClientCapabilities || params . textDocument ?. references ) {
88
89
server . referencesProvider = true ;
89
90
}
90
- if ( params . textDocument ?. implementation ) {
91
+ if ( ! initOptions . respectClientCapabilities || params . textDocument ?. implementation ) {
91
92
server . implementationProvider = true ;
92
93
}
93
- if ( params . textDocument ?. definition ) {
94
+ if ( ! initOptions . respectClientCapabilities || params . textDocument ?. definition ) {
94
95
server . definitionProvider = true ;
95
96
}
96
- if ( params . textDocument ?. typeDefinition ) {
97
+ if ( ! initOptions . respectClientCapabilities || params . textDocument ?. typeDefinition ) {
97
98
server . typeDefinitionProvider = true ;
98
99
}
99
- if ( params . textDocument ?. callHierarchy ) {
100
+ if ( ! initOptions . respectClientCapabilities || params . textDocument ?. callHierarchy ) {
100
101
server . callHierarchyProvider = true ;
101
102
}
102
- if ( params . textDocument ?. hover ) {
103
+ if ( ! initOptions . respectClientCapabilities || params . textDocument ?. hover ) {
103
104
server . hoverProvider = true ;
104
105
}
105
- if ( params . textDocument ?. rename ) {
106
+ if ( ! initOptions . respectClientCapabilities || params . textDocument ?. rename ) {
106
107
server . renameProvider = {
107
108
prepareProvider : true ,
108
109
} ;
109
110
}
110
- if ( params . workspace ?. fileOperations ) {
111
+ if ( ! initOptions . respectClientCapabilities || params . workspace ?. fileOperations ) {
111
112
server . workspace = {
112
113
fileOperations : {
113
114
willRename : {
@@ -127,13 +128,13 @@ export function setupSemanticCapabilities(
127
128
}
128
129
} ;
129
130
}
130
- if ( params . textDocument ?. signatureHelp ) {
131
+ if ( ! initOptions . respectClientCapabilities || params . textDocument ?. signatureHelp ) {
131
132
server . signatureHelpProvider = {
132
133
triggerCharacters : [ '(' , ',' , '<' ] ,
133
134
retriggerCharacters : [ ')' ] ,
134
135
} ;
135
136
}
136
- if ( params . textDocument ?. completion ) {
137
+ if ( ! initOptions . respectClientCapabilities || params . textDocument ?. completion ) {
137
138
server . completionProvider = {
138
139
// triggerCharacters: '!@#$%^&*()_+-=`~{}|[]\:";\'<>?,./ '.split(''), // all symbols on keyboard
139
140
// hardcode to fix https://github.com/sublimelsp/LSP-volar/issues/114
@@ -149,23 +150,23 @@ export function setupSemanticCapabilities(
149
150
] ) ] ,
150
151
resolveProvider : true ,
151
152
} ;
152
- if ( options . ignoreTriggerCharacters ) {
153
+ if ( initOptions . ignoreTriggerCharacters ) {
153
154
server . completionProvider . triggerCharacters = server . completionProvider . triggerCharacters
154
- ?. filter ( c => ! options . ignoreTriggerCharacters ! . includes ( c ) ) ;
155
+ ?. filter ( c => ! initOptions . ignoreTriggerCharacters ! . includes ( c ) ) ;
155
156
}
156
157
}
157
- if ( params . textDocument ?. documentHighlight ) {
158
+ if ( ! initOptions . respectClientCapabilities || params . textDocument ?. documentHighlight ) {
158
159
server . documentHighlightProvider = true ;
159
160
}
160
- if ( params . textDocument ?. documentLink ) {
161
+ if ( ! initOptions . respectClientCapabilities || params . textDocument ?. documentLink ) {
161
162
server . documentLinkProvider = {
162
163
resolveProvider : false , // TODO
163
164
} ;
164
165
}
165
- if ( params . workspace ?. symbol ) {
166
+ if ( ! initOptions . respectClientCapabilities || params . workspace ?. symbol ) {
166
167
server . workspaceSymbolProvider = true ;
167
168
}
168
- if ( params . textDocument ?. codeLens ) {
169
+ if ( ! initOptions . respectClientCapabilities || params . textDocument ?. codeLens ) {
169
170
server . codeLensProvider = {
170
171
resolveProvider : true ,
171
172
} ;
@@ -176,14 +177,14 @@ export function setupSemanticCapabilities(
176
177
]
177
178
} ;
178
179
}
179
- if ( params . textDocument ?. semanticTokens ) {
180
+ if ( ! initOptions . respectClientCapabilities || params . textDocument ?. semanticTokens ) {
180
181
server . semanticTokensProvider = {
181
182
range : true ,
182
183
full : false ,
183
184
legend : semanticTokensLegend ,
184
185
} ;
185
186
}
186
- if ( params . textDocument ?. codeAction ) {
187
+ if ( ! initOptions . respectClientCapabilities || params . textDocument ?. codeAction ) {
187
188
server . codeActionProvider = {
188
189
codeActionKinds : [
189
190
vscode . CodeActionKind . Empty ,
@@ -199,10 +200,10 @@ export function setupSemanticCapabilities(
199
200
resolveProvider : true ,
200
201
} ;
201
202
}
202
- if ( params . textDocument ?. inlayHint ) {
203
+ if ( ! initOptions . respectClientCapabilities || params . textDocument ?. inlayHint ) {
203
204
server . inlayHintProvider = true ;
204
205
}
205
- if ( params . textDocument ?. diagnostic && ( options . diagnosticModel ?? DiagnosticModel . Push ) === DiagnosticModel . Pull ) {
206
+ if ( ! initOptions . respectClientCapabilities || params . textDocument ?. diagnostic && ( initOptions . diagnosticModel ?? DiagnosticModel . Push ) === DiagnosticModel . Pull ) {
206
207
server . diagnosticProvider = {
207
208
documentSelector : [
208
209
...plugins . map ( plugin => plugin . extraFileExtensions . map ( ext => ( { pattern : `**/*.${ ext . extension } ` } ) ) ) . flat ( ) ,
0 commit comments