schema URI not resolving in workspace file (#175320)

schema URI  not resolve in workspace file
This commit is contained in:
Martin Aeschlimann 2023-02-24 12:33:59 +01:00 committed by GitHub
parent d2e62228f4
commit 07d120e10a
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23

View file

@ -545,11 +545,10 @@ function getSettings(): Settings {
} }
}; };
const collectSchemaSettings = (schemaSettings: JSONSchemaSettings[] | undefined, folderUri?: Uri) => { const collectSchemaSettings = (schemaSettings: JSONSchemaSettings[] | undefined, folderUri: Uri | undefined = undefined, settingsLocation = folderUri) => {
if (schemaSettings) { if (schemaSettings) {
for (const setting of schemaSettings) { for (const setting of schemaSettings) {
const url = getSchemaId(setting, folderUri); const url = getSchemaId(setting, settingsLocation);
if (url) { if (url) {
const schemaSetting: JSONSchemaSettings = { url, fileMatch: setting.fileMatch, folderUri: folderUri?.toString(false), schema: setting.schema }; const schemaSetting: JSONSchemaSettings = { url, fileMatch: setting.fileMatch, folderUri: folderUri?.toString(false), schema: setting.schema };
schemas.push(schemaSetting); schemas.push(schemaSetting);
@ -558,15 +557,19 @@ function getSettings(): Settings {
} }
}; };
const folders = workspace.workspaceFolders;
const schemaConfigInfo = workspace.getConfiguration('json', null).inspect<JSONSchemaSettings[]>('schemas'); const schemaConfigInfo = workspace.getConfiguration('json', null).inspect<JSONSchemaSettings[]>('schemas');
if (schemaConfigInfo) { if (schemaConfigInfo) {
if (workspace.workspaceFile) { if (schemaConfigInfo.workspaceValue && workspace.workspaceFile && folders && folders.length) {
collectSchemaSettings(schemaConfigInfo.workspaceValue, workspace.workspaceFile); const settingsLocation = Uri.joinPath(workspace.workspaceFile, '..');
for (const folder of folders) {
collectSchemaSettings(schemaConfigInfo.workspaceValue, folder.uri, settingsLocation);
}
} }
collectSchemaSettings(schemaConfigInfo.globalValue); collectSchemaSettings(schemaConfigInfo.globalValue);
} }
const folders = workspace.workspaceFolders;
if (folders) { if (folders) {
for (const folder of folders) { for (const folder of folders) {
const schemaConfigInfo = workspace.getConfiguration('json', folder.uri).inspect<JSONSchemaSettings[]>('schemas'); const schemaConfigInfo = workspace.getConfiguration('json', folder.uri).inspect<JSONSchemaSettings[]>('schemas');
@ -576,14 +579,14 @@ function getSettings(): Settings {
return settings; return settings;
} }
function getSchemaId(schema: JSONSchemaSettings, folderUri?: Uri): string | undefined { function getSchemaId(schema: JSONSchemaSettings, settingsLocation?: Uri): string | undefined {
let url = schema.url; let url = schema.url;
if (!url) { if (!url) {
if (schema.schema) { if (schema.schema) {
url = schema.schema.id || `vscode://schemas/custom/${encodeURIComponent(hash(schema.schema).toString(16))}`; url = schema.schema.id || `vscode://schemas/custom/${encodeURIComponent(hash(schema.schema).toString(16))}`;
} }
} else if (folderUri && (url[0] === '.' || url[0] === '/')) { } else if (settingsLocation && (url[0] === '.' || url[0] === '/')) {
url = Uri.joinPath(folderUri, url).toString(false); url = Uri.joinPath(settingsLocation, url).toString(false);
} }
return url; return url;
} }