Skip to content

Commit

Permalink
Expose JSON worker
Browse files Browse the repository at this point in the history
Fix #727
  • Loading branch information
DavidMulder0 authored and DMR9 committed May 11, 2023
1 parent 584584e commit c1dd3e1
Show file tree
Hide file tree
Showing 3 changed files with 36 additions and 5 deletions.
16 changes: 13 additions & 3 deletions src/language/json/jsonMode.ts
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,18 @@ import * as languageFeatures from '../common/lspLanguageFeatures';
import { createTokenizationSupport } from './tokenization';
import { Uri, IDisposable, languages, editor } from '../../fillers/monaco-editor-core';

let worker: languageFeatures.WorkerAccessor<JSONWorker>;

export function getWorker(): Promise<(...uris: Uri[]) => Promise<JSONWorker>> {
return new Promise((resolve, reject) => {
if (!worker) {
return reject('JSON not registered!');
}

resolve(worker);
});
}

class JSONDiagnosticsAdapter extends languageFeatures.DiagnosticsAdapter<JSONWorker> {
constructor(
languageId: string,
Expand Down Expand Up @@ -44,9 +56,7 @@ export function setupMode(defaults: LanguageServiceDefaults): IDisposable {
const client = new WorkerManager(defaults);
disposables.push(client);

const worker: languageFeatures.WorkerAccessor<JSONWorker> = (
...uris: Uri[]
): Promise<JSONWorker> => {
worker = (...uris: Uri[]): Promise<JSONWorker> => {
return client.getLanguageServiceWorker(...uris);
};

Expand Down
16 changes: 16 additions & 0 deletions src/language/json/jsonWorker.ts
Original file line number Diff line number Diff line change
Expand Up @@ -141,6 +141,22 @@ export class JSONWorker {
let ranges = this._languageService.getSelectionRanges(document, positions, jsonDocument);
return Promise.resolve(ranges);
}
async parseJSONDocument(uri: string): Promise<jsonService.JSONDocument | null> {
let document = this._getTextDocument(uri);
if (!document) {
return null;
}
let jsonDocument = this._languageService.parseJSONDocument(document);
return Promise.resolve(jsonDocument);
}
async getMatchingSchemas(uri: string): Promise<jsonService.MatchingSchema[]> {
let document = this._getTextDocument(uri);
if (!document) {
return [];
}
let jsonDocument = this._languageService.parseJSONDocument(document);
return Promise.resolve(this._languageService.getMatchingSchemas(document, jsonDocument));
}
private _getTextDocument(uri: string): jsonService.TextDocument | null {
let models = this._ctx.getMirrorModels();
for (let model of models) {
Expand Down
9 changes: 7 additions & 2 deletions src/language/json/monaco.contribution.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,8 @@
*--------------------------------------------------------------------------------------------*/

import * as mode from './jsonMode';
import { Emitter, IEvent, languages } from '../../fillers/monaco-editor-core';
import { Emitter, IEvent, languages, Uri } from '../../fillers/monaco-editor-core';
import type { JSONWorker } from './jsonWorker';

// --- JSON configuration and defaults ---------

Expand Down Expand Up @@ -197,8 +198,12 @@ export const jsonDefaults: LanguageServiceDefaults = new LanguageServiceDefaults
modeConfigurationDefault
);

export const getWorker = (): Promise<(...uris: Uri[]) => Promise<JSONWorker>> => {
return getMode().then((mode) => mode.getWorker());
};

// export to the global based API
(<any>languages).json = { jsonDefaults };
(<any>languages).json = { jsonDefaults, getWorker };

// --- Registration to monaco editor ---

Expand Down

0 comments on commit c1dd3e1

Please sign in to comment.