Skip to content

Commit e6420dc

Browse files
authored
Merge pull request #327 from apupier/useAnOutputChannel
Use an output channel
2 parents 397c37d + 6e5e6d9 commit e6420dc

File tree

2 files changed

+26
-15
lines changed

2 files changed

+26
-15
lines changed

src/extension.ts

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88

99
import * as path from 'path';
1010

11-
import { workspace, ExtensionContext, extensions } from 'vscode';
11+
import { workspace, ExtensionContext, extensions, OutputChannel, window } from 'vscode';
1212
import { LanguageClient, LanguageClientOptions, ServerOptions, TransportKind, NotificationType } from 'vscode-languageclient';
1313
import { URI } from 'vscode-uri';
1414
import { CUSTOM_SCHEMA_REQUEST, CUSTOM_CONTENT_REQUEST, SchemaExtensionAPI } from './schema-extension-api';
@@ -25,6 +25,8 @@ namespace DynamicCustomSchemaRequestRegistration {
2525
export const type: NotificationType<{}, {}> = new NotificationType('yaml/registerCustomSchemaRequest');
2626
}
2727

28+
let client: LanguageClient;
29+
2830
export function activate(context: ExtensionContext) {
2931
// The YAML language server is implemented in node
3032
let serverModule = context.asAbsolutePath(path.join('node_modules', 'yaml-language-server', 'out', 'server', 'src', 'server.js'));
@@ -57,7 +59,7 @@ export function activate(context: ExtensionContext) {
5759
};
5860

5961
// Create the language client and start it
60-
let client = new LanguageClient('yaml', 'YAML Support', serverOptions, clientOptions);
62+
client = new LanguageClient('yaml', 'YAML Support', serverOptions, clientOptions);
6163
let disposable = client.start();
6264

6365
const schemaExtensionAPI = new SchemaExtensionAPI(client);
@@ -131,3 +133,7 @@ function getSchemaAssociation(context: ExtensionContext): ISchemaAssociations {
131133

132134
return associations;
133135
}
136+
137+
export function logToExtensionOutputChannel(message: string) {
138+
client.outputChannel.appendLine(message);
139+
}

src/schema-extension-api.ts

Lines changed: 18 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import { URI } from 'vscode-uri'
22
import { LanguageClient, RequestType } from 'vscode-languageclient';
33
import { workspace } from 'vscode';
4+
import { logToExtensionOutputChannel } from './extension';
45

56
interface SchemaContributorProvider {
67
readonly requestSchema: (resource: string) => string;
@@ -92,24 +93,28 @@ class SchemaExtensionAPI implements ExtensionAPI {
9293
public requestCustomSchema(resource: string): string[] {
9394
const matches = [];
9495
for (let customKey of Object.keys(this._customSchemaContributors)) {
95-
const contributor = this._customSchemaContributors[customKey];
96-
let uri: string;
97-
if (contributor.label && workspace.textDocuments) {
98-
const labelRegexp = new RegExp(contributor.label, 'g');
99-
for (const doc of workspace.textDocuments) {
100-
if (doc.uri.toString() === resource) {
101-
if (labelRegexp.test(doc.getText())) {
102-
uri = contributor.requestSchema(resource);
103-
return [uri];
96+
try {
97+
const contributor = this._customSchemaContributors[customKey];
98+
let uri: string;
99+
if (contributor.label && workspace.textDocuments) {
100+
const labelRegexp = new RegExp(contributor.label, 'g');
101+
for (const doc of workspace.textDocuments) {
102+
if (doc.uri.toString() === resource) {
103+
if (labelRegexp.test(doc.getText())) {
104+
uri = contributor.requestSchema(resource);
105+
return [uri];
106+
}
104107
}
105108
}
106109
}
107-
}
108110

109-
uri = contributor.requestSchema(resource);
111+
uri = contributor.requestSchema(resource);
110112

111-
if (uri) {
112-
matches.push(uri);
113+
if (uri) {
114+
matches.push(uri);
115+
}
116+
} catch (error) {
117+
logToExtensionOutputChannel(`Error thrown while requesting schema "${error}" when calling the registered contributor "${customKey}"`);
113118
}
114119
}
115120
return matches;

0 commit comments

Comments
 (0)