remove markers on settings change. Fixes Microsoft/monaco-editor#840

This commit is contained in:
Martin Aeschlimann 2018-04-30 14:35:24 +02:00
parent 1fc63ab25c
commit c0250bfca3
2 changed files with 12 additions and 3 deletions

View file

@ -30,7 +30,7 @@ export function setupMode(defaults: LanguageServiceDefaultsImpl): void {
monaco.languages.registerDocumentSymbolProvider(languageId, new languageFeatures.DocumentSymbolAdapter(worker)); monaco.languages.registerDocumentSymbolProvider(languageId, new languageFeatures.DocumentSymbolAdapter(worker));
monaco.languages.registerRenameProvider(languageId, new languageFeatures.RenameAdapter(worker)); monaco.languages.registerRenameProvider(languageId, new languageFeatures.RenameAdapter(worker));
monaco.languages.registerColorProvider(languageId, new languageFeatures.DocumentColorAdapter(worker)); monaco.languages.registerColorProvider(languageId, new languageFeatures.DocumentColorAdapter(worker));
new languageFeatures.DiagnostcsAdapter(languageId, worker); new languageFeatures.DiagnosticsAdapter(languageId, worker, defaults);
} }

View file

@ -25,12 +25,12 @@ export interface WorkerAccessor {
// --- diagnostics --- --- // --- diagnostics --- ---
export class DiagnostcsAdapter { export class DiagnosticsAdapter {
private _disposables: IDisposable[] = []; private _disposables: IDisposable[] = [];
private _listener: { [uri: string]: IDisposable } = Object.create(null); 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 => { const onModelAdd = (model: monaco.editor.IModel): void => {
let modeId = model.getModeId(); let modeId = model.getModeId();
if (modeId !== this._languageId) { if (modeId !== this._languageId) {
@ -64,6 +64,15 @@ export class DiagnostcsAdapter {
onModelAdd(event.model); onModelAdd(event.model);
})); }));
defaults.onDidChange(_ => {
monaco.editor.getModels().forEach(model => {
if (model.getModeId() === this._languageId) {
onModelRemoved(model);
onModelAdd(model);
}
});
});
this._disposables.push({ this._disposables.push({
dispose: () => { dispose: () => {
for (let key in this._listener) { for (let key in this._listener) {