Browse Source

redo diagnostics when options change, fixes #208

Johannes Rieken 8 years ago
parent
commit
8cbd548f8e
1 changed files with 51 additions and 42 deletions
  1. 51 42
      src/languageFeatures.ts

+ 51 - 42
src/languageFeatures.ts

@@ -4,9 +4,9 @@
  *--------------------------------------------------------------------------------------------*/
 'use strict';
 
-import {LanguageServiceDefaultsImpl} from './monaco.contribution';
+import { LanguageServiceDefaultsImpl } from './monaco.contribution';
 import * as ts from '../lib/typescriptServices';
-import {TypeScriptWorker} from './worker';
+import { TypeScriptWorker } from './worker';
 
 import Uri = monaco.Uri;
 import Position = monaco.Position;
@@ -18,7 +18,7 @@ import IDisposable = monaco.IDisposable;
 
 export abstract class Adapter {
 
-	constructor(protected _worker: (first:Uri, ...more:Uri[]) => Promise<TypeScriptWorker>) {
+	constructor(protected _worker: (first: Uri, ...more: Uri[]) => Promise<TypeScriptWorker>) {
 	}
 
 	protected _positionToOffset(uri: Uri, position: monaco.IPosition): number {
@@ -74,6 +74,7 @@ export class DiagnostcsAdapter extends Adapter {
 		};
 
 		const onModelRemoved = (model: monaco.editor.IModel): void => {
+			monaco.editor.setModelMarkers(model, this._selector, []);
 			const key = model.uri.toString();
 			if (this._listener[key]) {
 				this._listener[key].dispose();
@@ -89,13 +90,21 @@ export class DiagnostcsAdapter extends Adapter {
 		}));
 
 		this._disposables.push({
-			dispose: () => {
-				for (let key in this._listener) {
-					this._listener[key].dispose();
+			dispose() {
+				for (const model of monaco.editor.getModels()) {
+					onModelRemoved(model);
 				}
 			}
 		});
 
+		this._disposables.push(this._defaults.onDidChange(() => {
+			// redo diagnostics when options change
+			for (const model of monaco.editor.getModels()) {
+				onModelRemoved(model);
+				onModelAdd(model);
+			}
+		}));
+
 		monaco.editor.getModels().forEach(onModelAdd);
 	}
 
@@ -154,7 +163,7 @@ export class SuggestAdapter extends Adapter implements monaco.languages.Completi
 		return ['.'];
 	}
 
-	provideCompletionItems(model:monaco.editor.IReadOnlyModel, position:Position, token:CancellationToken): Thenable<monaco.languages.CompletionItem[]> {
+	provideCompletionItems(model: monaco.editor.IReadOnlyModel, position: Position, token: CancellationToken): Thenable<monaco.languages.CompletionItem[]> {
 		const wordInfo = model.getWordUntilPosition(position);
 		const resource = model.uri;
 		const offset = this._positionToOffset(resource, position);
@@ -250,7 +259,7 @@ export class SignatureHelpAdapter extends Adapter implements monaco.languages.Si
 				return;
 			}
 
-			let ret:monaco.languages.SignatureHelp = {
+			let ret: monaco.languages.SignatureHelp = {
 				activeSignature: info.selectedItemIndex,
 				activeParameter: info.argumentIndex,
 				signatures: []
@@ -258,7 +267,7 @@ export class SignatureHelpAdapter extends Adapter implements monaco.languages.Si
 
 			info.items.forEach(item => {
 
-				let signature:monaco.languages.SignatureInformation = {
+				let signature: monaco.languages.SignatureInformation = {
 					label: '',
 					documentation: null,
 					parameters: []
@@ -267,7 +276,7 @@ export class SignatureHelpAdapter extends Adapter implements monaco.languages.Si
 				signature.label += ts.displayPartsToString(item.prefixDisplayParts);
 				item.parameters.forEach((p, i, a) => {
 					let label = ts.displayPartsToString(p.displayParts);
-					let parameter:monaco.languages.ParameterInformation = {
+					let parameter: monaco.languages.ParameterInformation = {
 						label: label,
 						documentation: ts.displayPartsToString(p.documentation)
 					};
@@ -291,7 +300,7 @@ export class SignatureHelpAdapter extends Adapter implements monaco.languages.Si
 
 export class QuickInfoAdapter extends Adapter implements monaco.languages.HoverProvider {
 
-	provideHover(model:monaco.editor.IReadOnlyModel, position:Position, token:CancellationToken): Thenable<monaco.languages.Hover> {
+	provideHover(model: monaco.editor.IReadOnlyModel, position: Position, token: CancellationToken): Thenable<monaco.languages.Hover> {
 		let resource = model.uri;
 
 		return wireCancellationToken(token, this._worker(resource).then(worker => {
@@ -336,7 +345,7 @@ export class OccurrencesAdapter extends Adapter implements monaco.languages.Docu
 
 export class DefinitionAdapter extends Adapter {
 
-	public provideDefinition(model:monaco.editor.IReadOnlyModel, position:Position, token:CancellationToken): Thenable<monaco.languages.Definition> {
+	public provideDefinition(model: monaco.editor.IReadOnlyModel, position: Position, token: CancellationToken): Thenable<monaco.languages.Definition> {
 		const resource = model.uri;
 
 		return wireCancellationToken(token, this._worker(resource).then(worker => {
@@ -364,7 +373,7 @@ export class DefinitionAdapter extends Adapter {
 
 export class ReferenceAdapter extends Adapter implements monaco.languages.ReferenceProvider {
 
-	provideReferences(model:monaco.editor.IReadOnlyModel, position:Position, context: monaco.languages.ReferenceContext, token: CancellationToken): Thenable<monaco.languages.Location[]> {
+	provideReferences(model: monaco.editor.IReadOnlyModel, position: Position, context: monaco.languages.ReferenceContext, token: CancellationToken): Thenable<monaco.languages.Location[]> {
 		const resource = model.uri;
 
 		return wireCancellationToken(token, this._worker(resource).then(worker => {
@@ -392,7 +401,7 @@ export class ReferenceAdapter extends Adapter implements monaco.languages.Refere
 
 export class OutlineAdapter extends Adapter implements monaco.languages.DocumentSymbolProvider {
 
-	public provideDocumentSymbols(model:monaco.editor.IReadOnlyModel, token: CancellationToken): Thenable<monaco.languages.SymbolInformation[]> {
+	public provideDocumentSymbols(model: monaco.editor.IReadOnlyModel, token: CancellationToken): Thenable<monaco.languages.SymbolInformation[]> {
 		const resource = model.uri;
 
 		return wireCancellationToken(token, this._worker(resource).then(worker => worker.getNavigationBarItems(resource.toString())).then(items => {
@@ -428,34 +437,34 @@ export class OutlineAdapter extends Adapter implements monaco.languages.Document
 }
 
 export class Kind {
-	public static unknown:string = '';
-	public static keyword:string = 'keyword';
-	public static script:string = 'script';
-	public static module:string = 'module';
-	public static class:string = 'class';
-	public static interface:string = 'interface';
-	public static type:string = 'type';
-	public static enum:string = 'enum';
-	public static variable:string = 'var';
-	public static localVariable:string = 'local var';
-	public static function:string = 'function';
-	public static localFunction:string = 'local function';
-	public static memberFunction:string = 'method';
-	public static memberGetAccessor:string = 'getter';
-	public static memberSetAccessor:string = 'setter';
-	public static memberVariable:string = 'property';
-	public static constructorImplementation:string = 'constructor';
-	public static callSignature:string = 'call';
-	public static indexSignature:string = 'index';
-	public static constructSignature:string = 'construct';
-	public static parameter:string = 'parameter';
-	public static typeParameter:string = 'type parameter';
-	public static primitiveType:string = 'primitive type';
-	public static label:string = 'label';
-	public static alias:string = 'alias';
-	public static const:string = 'const';
-	public static let:string = 'let';
-	public static warning:string = 'warning';
+	public static unknown: string = '';
+	public static keyword: string = 'keyword';
+	public static script: string = 'script';
+	public static module: string = 'module';
+	public static class: string = 'class';
+	public static interface: string = 'interface';
+	public static type: string = 'type';
+	public static enum: string = 'enum';
+	public static variable: string = 'var';
+	public static localVariable: string = 'local var';
+	public static function: string = 'function';
+	public static localFunction: string = 'local function';
+	public static memberFunction: string = 'method';
+	public static memberGetAccessor: string = 'getter';
+	public static memberSetAccessor: string = 'setter';
+	public static memberVariable: string = 'property';
+	public static constructorImplementation: string = 'constructor';
+	public static callSignature: string = 'call';
+	public static indexSignature: string = 'index';
+	public static constructSignature: string = 'construct';
+	public static parameter: string = 'parameter';
+	public static typeParameter: string = 'type parameter';
+	public static primitiveType: string = 'primitive type';
+	public static label: string = 'label';
+	public static alias: string = 'alias';
+	public static const: string = 'const';
+	public static let: string = 'let';
+	public static warning: string = 'warning';
 }
 
 let outlineTypeTable: { [kind: string]: monaco.languages.SymbolKind } = Object.create(null);