diff --git a/src/jsonMode.ts b/src/jsonMode.ts index 7ff62ec1..30605489 100644 --- a/src/jsonMode.ts +++ b/src/jsonMode.ts @@ -4,11 +4,11 @@ *--------------------------------------------------------------------------------------------*/ 'use strict'; -import {WorkerManager} from './workerManager'; -import {JSONWorker} from './jsonWorker'; -import {LanguageServiceDefaultsImpl} from './monaco.contribution'; +import { WorkerManager } from './workerManager'; +import { JSONWorker } from './jsonWorker'; +import { LanguageServiceDefaultsImpl } from './monaco.contribution'; import * as languageFeatures from './languageFeatures'; -import {createTokenizationSupport} from './tokenization'; +import { createTokenizationSupport } from './tokenization'; import Promise = monaco.Promise; import Uri = monaco.Uri; @@ -27,16 +27,12 @@ export function setupMode(defaults: LanguageServiceDefaultsImpl): void { let languageId = defaults.languageId; - let diagnostcsAdapter = new languageFeatures.DiagnostcsAdapter(languageId, worker); - defaults.onDidChange(c => diagnostcsAdapter.clearMarkers()); - - disposables.push(monaco.languages.registerCompletionItemProvider(languageId, new languageFeatures.CompletionAdapter(worker))); disposables.push(monaco.languages.registerHoverProvider(languageId, new languageFeatures.HoverAdapter(worker))); disposables.push(monaco.languages.registerDocumentSymbolProvider(languageId, new languageFeatures.DocumentSymbolAdapter(worker))); disposables.push(monaco.languages.registerDocumentFormattingEditProvider(languageId, new languageFeatures.DocumentFormattingEditProvider(worker))); disposables.push(monaco.languages.registerDocumentRangeFormattingEditProvider(languageId, new languageFeatures.DocumentRangeFormattingEditProvider(worker))); - disposables.push(diagnostcsAdapter); + disposables.push(new languageFeatures.DiagnosticsAdapter(languageId, worker, defaults)); disposables.push(monaco.languages.setTokensProvider(languageId, createTokenizationSupport(true))); disposables.push(monaco.languages.setLanguageConfiguration(languageId, richEditConfiguration)); } diff --git a/src/languageFeatures.ts b/src/languageFeatures.ts index 613ce3aa..67ad7400 100644 --- a/src/languageFeatures.ts +++ b/src/languageFeatures.ts @@ -24,12 +24,12 @@ export interface WorkerAccessor { // --- diagnostics --- --- -export class DiagnostcsAdapter { +export class DiagnosticsAdapter { private _disposables: IDisposable[] = []; private _listener: { [uri: string]: IDisposable } = Object.create(null); - constructor(private _languageId: string, private _worker: WorkerAccessor) { + constructor(private _languageId: string, private _worker: WorkerAccessor, defaults: LanguageServiceDefaultsImpl) { const onModelAdd = (model: monaco.editor.IModel): void => { let modeId = model.getModeId(); if (modeId !== this._languageId) { @@ -66,6 +66,15 @@ export class DiagnostcsAdapter { this._resetSchema(event.model.uri); })); + defaults.onDidChange(_ => { + monaco.editor.getModels().forEach(model => { + if (model.getModeId() === this._languageId) { + onModelRemoved(model); + onModelAdd(model);; + } + }); + }); + this._disposables.push({ dispose: () => { monaco.editor.getModels().forEach(onModelRemoved); @@ -83,14 +92,6 @@ export class DiagnostcsAdapter { this._disposables = []; } - public clearMarkers() { - monaco.editor.getModels().forEach(model => { - if (model.getModeId() === this._languageId) { - monaco.editor.setModelMarkers(model, this._languageId, []); - } - }); - } - private _resetSchema(resource: Uri): void { this._worker().then(worker => { worker.resetSchema(resource.toString());