-
Notifications
You must be signed in to change notification settings - Fork 0
/
index.ts
51 lines (45 loc) · 1.58 KB
/
index.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
import { LanguageMode } from '../languageModes';
import { TextDocument, Diagnostic } from 'vscode-languageserver';
import { LanguageModelCache, getLanguageModelCache } from '../languageModelCache';
import { VueDocumentRegions } from '../embeddedSupport';
import { getLanguageService as getJSONLanguageService, LanguageService } from 'vscode-json-languageservice';
export function getJsonMode(
documentRegions: LanguageModelCache<VueDocumentRegions>
): LanguageMode {
const languageService = getJSONLanguageService({});
return _getJsonMode(documentRegions, languageService);
}
function _getJsonMode(
documentRegions: LanguageModelCache<VueDocumentRegions>,
languageService: LanguageService
): LanguageMode {
const embeddedDocuments = getLanguageModelCache(10, 60, document =>
documentRegions.get(document).getEmbeddedDocument('json')
);
const json = getLanguageModelCache(10, 60, document =>
languageService.parseJSONDocument(document)
);
return {
getId() {
return 'json';
},
async doValidation(doc: TextDocument) {
// console.log('json start validation');
const embedded = embeddedDocuments.get(doc);
let diaglog: Diagnostic[] = [];
try {
diaglog = await languageService.doValidation(embedded, json.get(embedded), {trailingCommas: 'error'});
// console.log(embedded, json.get(embedded));
// console.log('diaglog', diaglog);
} catch(e) {
console.error(e);
}
return diaglog;
},
onDocumentRemoved() {},
dispose() {
json.dispose();
embeddedDocuments.dispose();
}
};
}