Skip to content

Commit 6d3f2b2

Browse files
authored
Disable some Compose features if Docker's extension is installed (#75)
Docker's extension bundles a language server that provides some Compose features that overlap with the ones from the Container Tools extension. Red Hat's YAML extension also does something similar which was previously accounted for. The code has now been changed to disable select Compose features if Docker's extension or Red Hat's YAML extension is installed. Signed-off-by: Remy Suen <remy.suen@docker.com>
1 parent a0bf654 commit 6d3f2b2

File tree

1 file changed

+20
-12
lines changed

1 file changed

+20
-12
lines changed

src/utils/AlternateYamlLanguageServiceClientFeature.ts

Lines changed: 20 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -24,20 +24,28 @@ export class AlternateYamlLanguageServiceClientFeature implements StaticFeature,
2424
};
2525
}
2626

27-
public fillClientCapabilities(capabilities: ClientCapabilities): void {
28-
// If the RedHat YAML extension is present, we can disable many of the compose language service features
29-
if (vscode.extensions.getExtension('redhat.vscode-yaml')) {
30-
const altYamlClientCapabilities: AlternateYamlLanguageServiceClientCapabilities = {
31-
syntaxValidation: true,
32-
schemaValidation: true,
33-
basicCompletions: true,
34-
advancedCompletions: false, // YAML extension does not have advanced completions for compose docs
35-
hover: false, // YAML extension provides hover, but the compose spec lacks descriptions -- https://github.com/compose-spec/compose-spec/issues/138
36-
imageLinks: false, // YAML extension does not have image hyperlinks for compose docs
37-
serviceStartupCodeLens: false, // YAML extension does not have service startup code lens for compose docs
38-
formatting: true,
27+
private createAlternateYamlLanguageServiceClientCapabilities(): AlternateYamlLanguageServiceClientCapabilities | null {
28+
// If RedHat YAML's extension or Docker's extension is present, we can disable many of the compose language service features
29+
const redhat = vscode.extensions.getExtension('redhat.vscode-yaml') !== undefined;
30+
const docker = vscode.extensions.getExtension('docker.docker') !== undefined;
31+
if (redhat || docker) {
32+
return {
33+
syntaxValidation: redhat || docker,
34+
schemaValidation: redhat,
35+
basicCompletions: redhat || docker,
36+
advancedCompletions: false, // The other extensions do not have advanced completions for Compose docs
37+
hover: redhat || docker, // Compose spec has descriptions
38+
imageLinks: docker, // Docker's extension supports Docker Hub, GHCR, MAR, and Quay.io
39+
serviceStartupCodeLens: false, // The other extensions do not provide any code lens
40+
formatting: redhat || docker,
3941
};
42+
}
43+
return null;
44+
}
4045

46+
public fillClientCapabilities(capabilities: ClientCapabilities): void {
47+
const altYamlClientCapabilities = this.createAlternateYamlLanguageServiceClientCapabilities();
48+
if (altYamlClientCapabilities !== null) {
4149
capabilities.experimental = {
4250
...capabilities.experimental,
4351
alternateYamlLanguageService: altYamlClientCapabilities,

0 commit comments

Comments
 (0)