Skip to content

Commit aa5455c

Browse files
committed
Load all schema before validating them
1 parent 82d2d79 commit aa5455c

File tree

2 files changed

+15
-7
lines changed

2 files changed

+15
-7
lines changed

language-server/src/features/schema-documents.js

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -19,16 +19,20 @@ const schemaDocuments = new Map();
1919
export const getSchemaDocument = async (connection, textDocument) => {
2020
let { version, schemaDocument } = schemaDocuments.get(textDocument.uri) ?? {};
2121

22-
if (version !== textDocument.version) {
22+
if (version === -1 || version !== textDocument.version) {
2323
const settings = await getDocumentSettings(connection, textDocument.uri);
2424
schemaDocument = await JsonSchemaDocument.fromTextDocument(textDocument, settings.defaultDialect);
2525

26-
if (textDocument.version !== -1) {
27-
schemaDocuments.set(textDocument.uri, { version: textDocument.version, schemaDocument });
28-
}
26+
schemaDocuments.set(textDocument.uri, { version: textDocument.version, schemaDocument });
2927
}
3028

3129
return schemaDocument;
3230
};
3331

3432
export const clearSchemaDocuments = () => schemaDocuments.clear();
33+
34+
export const allSchemaDocuments = function* () {
35+
for (const { schemaDocument } of schemaDocuments.values()) {
36+
yield schemaDocument;
37+
}
38+
};

language-server/src/features/workspace.js

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ import {
1010
} from "vscode-languageserver";
1111
import { TextDocument } from "vscode-languageserver-textdocument";
1212
import { publish, publishAsync, subscribe } from "../pubsub.js";
13-
import { getSchemaDocument } from "./schema-documents.js";
13+
import { allSchemaDocuments, getSchemaDocument } from "./schema-documents.js";
1414
import { getDocumentSettings } from "./document-settings.js";
1515
import picomatch from "picomatch";
1616

@@ -62,7 +62,7 @@ export default {
6262
const reporter = await connection.window.createWorkDoneProgress();
6363
reporter.begin("JSON Schema: Indexing workspace");
6464

65-
// Re/validate all schemas
65+
// Load all schemas
6666
const settings = await getDocumentSettings(connection);
6767
const schemaFilePatterns = settings.schemaFilePatterns;
6868
for await (const uri of workspaceSchemas(schemaFilePatterns)) {
@@ -72,7 +72,11 @@ export default {
7272
textDocument = TextDocument.create(uri, "json", -1, instanceJson);
7373
}
7474

75-
const schemaDocument = await getSchemaDocument(connection, textDocument);
75+
await getSchemaDocument(connection, textDocument);
76+
}
77+
78+
// Re/validate all schemas
79+
for (const schemaDocument of allSchemaDocuments()) {
7680
validateSchema(schemaDocument);
7781
}
7882

0 commit comments

Comments
 (0)