Skip to content

Commit b732a11

Browse files
author
Loïc Mangeonjean
committed
feat: add a way to add custom json schemas
1 parent 36652cb commit b732a11

File tree

1 file changed

+19
-1
lines changed

1 file changed

+19
-1
lines changed

src/features/jsonContribution.ts

Lines changed: 19 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,13 @@
11
import 'monaco-editor/esm/vs/language/json/monaco.contribution'
22
import * as monaco from 'monaco-editor'
33
import { getJsonSchemas, onDidChangeJsonSchema } from 'vscode/monaco'
4+
import { Disposable } from 'vscode'
45
import { registerWorkerLoader } from '../worker'
56

7+
type Unpacked<T> = T extends (infer U)[] ? U : T
8+
type Schema = Unpacked<NonNullable<monaco.languages.json.DiagnosticsOptions['schemas']>>
9+
10+
const customSchemas: Schema[] = []
611
function updateDiagnosticsOptions () {
712
monaco.languages.json.jsonDefaults.setDiagnosticsOptions({
813
comments: 'ignore',
@@ -16,7 +21,8 @@ function updateDiagnosticsOptions () {
1621
{
1722
uri: 'https://json-schema.org/draft/2019-09/schema',
1823
fileMatch: ['*.schema.json']
19-
}
24+
},
25+
...customSchemas
2026
]
2127
})
2228
}
@@ -26,3 +32,15 @@ onDidChangeJsonSchema(updateDiagnosticsOptions)
2632

2733
const workerLoader = async () => (await import(/* webpackChunkName: "MonacoJsonWorker" */'monaco-editor/esm/vs/language/json/json.worker?worker')).default
2834
registerWorkerLoader('json', workerLoader)
35+
36+
export function addJsonSchema (schema: Unpacked<NonNullable<monaco.languages.json.DiagnosticsOptions['schemas']>>): Disposable {
37+
customSchemas.push(schema)
38+
updateDiagnosticsOptions()
39+
return new Disposable(() => {
40+
const index = customSchemas.indexOf(schema)
41+
if (index >= 0) {
42+
customSchemas.splice(index, 1)
43+
updateDiagnosticsOptions()
44+
}
45+
})
46+
}

0 commit comments

Comments
 (0)