diff --git a/src/jsonMode.ts b/src/jsonMode.ts index a3047456..7ff62ec1 100644 --- a/src/jsonMode.ts +++ b/src/jsonMode.ts @@ -27,12 +27,16 @@ 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(new languageFeatures.DiagnostcsAdapter(languageId, worker)); + disposables.push(diagnostcsAdapter); 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 47bcc4a5..613ce3aa 100644 --- a/src/languageFeatures.ts +++ b/src/languageFeatures.ts @@ -4,8 +4,8 @@ *--------------------------------------------------------------------------------------------*/ 'use strict'; -import {LanguageServiceDefaultsImpl} from './monaco.contribution'; -import {JSONWorker} from './jsonWorker'; +import { LanguageServiceDefaultsImpl } from './monaco.contribution'; +import { JSONWorker } from './jsonWorker'; import * as ls from 'vscode-languageserver-types'; @@ -68,6 +68,7 @@ export class DiagnostcsAdapter { this._disposables.push({ dispose: () => { + monaco.editor.getModels().forEach(onModelRemoved); for (let key in this._listener) { this._listener[key].dispose(); } @@ -82,6 +83,14 @@ 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()); @@ -241,7 +250,7 @@ function fromMarkdownString(entry: string | monaco.IMarkdownString): ls.MarkupCo } function fromCompletionItem(entry: DataCompletionItem): ls.CompletionItem { - let item : ls.CompletionItem = { + let item: ls.CompletionItem = { label: entry.label, sortText: entry.sortText, filterText: entry.filterText, @@ -254,7 +263,7 @@ function fromCompletionItem(entry: DataCompletionItem): ls.CompletionItem { item.insertText = entry.insertText.value; item.insertTextFormat = ls.InsertTextFormat.Snippet } else { - item.insertText = entry.insertText; + item.insertText = entry.insertText; } if (entry.range) { item.textEdit = ls.TextEdit.replace(fromRange(entry.range), item.insertText); @@ -283,7 +292,7 @@ export class CompletionAdapter implements monaco.languages.CompletionItemProvide return; } let items: monaco.languages.CompletionItem[] = info.items.map(entry => { - let item : monaco.languages.CompletionItem = { + let item: monaco.languages.CompletionItem = { label: entry.label, insertText: entry.insertText, sortText: entry.sortText, @@ -297,7 +306,7 @@ export class CompletionAdapter implements monaco.languages.CompletionItemProvide item.insertText = entry.textEdit.newText; } if (entry.insertTextFormat === ls.InsertTextFormat.Snippet) { - item.insertText = { value: item.insertText }; + item.insertText = { value: item.insertText }; } return item; });