diff --git a/extensions/ql-vscode/gulpfile.ts/deploy.ts b/extensions/ql-vscode/gulpfile.ts/deploy.ts index 97491eb93..f713fdc88 100644 --- a/extensions/ql-vscode/gulpfile.ts/deploy.ts +++ b/extensions/ql-vscode/gulpfile.ts/deploy.ts @@ -15,7 +15,8 @@ const packageFiles = [ 'snippets.json', 'media', 'node_modules', - 'out' + 'out', + 'workspace-databases-schema.json' ]; async function copyPackage(sourcePath: string, destPath: string): Promise { diff --git a/extensions/ql-vscode/package.json b/extensions/ql-vscode/package.json index 5e685d9df..686d686b0 100644 --- a/extensions/ql-vscode/package.json +++ b/extensions/ql-vscode/package.json @@ -84,6 +84,12 @@ "editor.wordBasedSuggestions": false } }, + "jsonValidation": [ + { + "fileMatch": "workspace-databases.json", + "url": "./workspace-databases-schema.json" + } + ], "languages": [ { "id": "ql", diff --git a/extensions/ql-vscode/src/databases/db-config-store.ts b/extensions/ql-vscode/src/databases/db-config-store.ts index 2056e0d0c..fd47247dd 100644 --- a/extensions/ql-vscode/src/databases/db-config-store.ts +++ b/extensions/ql-vscode/src/databases/db-config-store.ts @@ -12,6 +12,7 @@ export class DbConfigStore extends DisposableObject { public constructor(workspaceStoragePath: string) { super(); + this.configPath = path.join(workspaceStoragePath, 'workspace-databases.json'); this.config = this.createEmptyConfig(); diff --git a/extensions/ql-vscode/workspace-databases-schema.json b/extensions/ql-vscode/workspace-databases-schema.json new file mode 100644 index 000000000..513c25cc2 --- /dev/null +++ b/extensions/ql-vscode/workspace-databases-schema.json @@ -0,0 +1,49 @@ +{ + "type": "object", + "properties": { + "$schema": { + "type": "string" + }, + "remote": { + "type": "object", + "properties": { + "repositoryLists": { + "type": "array", + "items": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "repositories": { + "type": "array", + "items": { + "type": "string", + "pattern": "^[a-zA-Z0-9-_\\.]+/[a-zA-Z0-9-_\\.]+$" + } + } + }, + "required": ["name", "repositories"], + "additionalProperties": false + } + }, + "owners": { + "type": "array", + "items": { + "type": "string", + "pattern": "^[a-zA-Z0-9-_\\.]+$" + } + }, + "repositories": { + "type": "array", + "items": { + "type": "string", + "pattern": "^[a-zA-Z0-9-_\\.]+/[a-zA-Z0-9-_\\.]+$" + } + } + }, + "required": ["repositoryLists", "owners", "repositories"], + "additionalProperties": false + } + } +}