提交 5bb7f2e0 编写于 作者: D Dirk Baeumer

Fixes #8719: Closing a file without saving is not cleaning markers

上级 e1880326
...@@ -4,9 +4,6 @@ ...@@ -4,9 +4,6 @@
*--------------------------------------------------------------------------------------------*/ *--------------------------------------------------------------------------------------------*/
'use strict'; 'use strict';
import * as fs from 'fs';
import * as path from 'path';
import { workspace, TextDocument, TextDocumentChangeEvent, TextDocumentContentChangeEvent, Disposable } from 'vscode'; import { workspace, TextDocument, TextDocumentChangeEvent, TextDocumentContentChangeEvent, Disposable } from 'vscode';
import * as Proto from '../protocol'; import * as Proto from '../protocol';
import { ITypescriptServiceClient } from '../typescriptService'; import { ITypescriptServiceClient } from '../typescriptService';
...@@ -83,7 +80,6 @@ export default class BufferSyncSupport { ...@@ -83,7 +80,6 @@ export default class BufferSyncSupport {
private diagnostics: Diagnostics; private diagnostics: Diagnostics;
private disposables: Disposable[] = []; private disposables: Disposable[] = [];
private syncedBuffers: Map<SyncedBuffer>; private syncedBuffers: Map<SyncedBuffer>;
private closedFiles: Map<boolean>;
private projectValidationRequested: boolean; private projectValidationRequested: boolean;
...@@ -104,7 +100,6 @@ export default class BufferSyncSupport { ...@@ -104,7 +100,6 @@ export default class BufferSyncSupport {
this.diagnosticDelayer = new Delayer<any>(100); this.diagnosticDelayer = new Delayer<any>(100);
this.syncedBuffers = Object.create(null); this.syncedBuffers = Object.create(null);
this.closedFiles = Object.create(null);
} }
public listen(): void { public listen(): void {
...@@ -112,19 +107,6 @@ export default class BufferSyncSupport { ...@@ -112,19 +107,6 @@ export default class BufferSyncSupport {
workspace.onDidCloseTextDocument(this.onDidCloseTextDocument, this, this.disposables); workspace.onDidCloseTextDocument(this.onDidCloseTextDocument, this, this.disposables);
workspace.onDidChangeTextDocument(this.onDidChangeTextDocument, this, this.disposables); workspace.onDidChangeTextDocument(this.onDidChangeTextDocument, this, this.disposables);
workspace.textDocuments.forEach(this.onDidOpenTextDocument, this); workspace.textDocuments.forEach(this.onDidOpenTextDocument, this);
workspace.createFileSystemWatcher('**/*', true, true, false).onDidDelete((resource) => {
let filepath = this.client.asAbsolutePath(resource);
if (!filepath) {
return;
}
if (!this.syncedBuffers[filepath]) {
// The file is not synced (open in an editor) and got
// removed from disk. Make sure it is not in the closedFiles
// list since we shouldn't revalidate it.
delete this.closedFiles[filepath];
this.diagnostics.delete(filepath);
}
});
} }
public get validate(): boolean { public get validate(): boolean {
...@@ -165,7 +147,6 @@ export default class BufferSyncSupport { ...@@ -165,7 +147,6 @@ export default class BufferSyncSupport {
} }
let syncedBuffer = new SyncedBuffer(document, filepath, this, this.client); let syncedBuffer = new SyncedBuffer(document, filepath, this, this.client);
this.syncedBuffers[filepath] = syncedBuffer; this.syncedBuffers[filepath] = syncedBuffer;
delete this.closedFiles[filepath];
syncedBuffer.open(); syncedBuffer.open();
this.requestDiagnostic(filepath); this.requestDiagnostic(filepath);
} }
...@@ -179,14 +160,7 @@ export default class BufferSyncSupport { ...@@ -179,14 +160,7 @@ export default class BufferSyncSupport {
if (!syncedBuffer) { if (!syncedBuffer) {
return; return;
} }
// If the file still exists on disk keep on validating the file. this.diagnostics.delete(filepath);
if (fs.existsSync(filepath) && this.extensions[path.extname(filepath)]) {
this.closedFiles[filepath] = true;
} else {
// Ensure we don't have the file in the map and clear all errors.
delete this.closedFiles[filepath];
this.diagnostics.delete(filepath);
}
delete this.syncedBuffers[filepath]; delete this.syncedBuffers[filepath];
syncedBuffer.close(); syncedBuffer.close();
} }
...@@ -246,13 +220,6 @@ export default class BufferSyncSupport { ...@@ -246,13 +220,6 @@ export default class BufferSyncSupport {
} }
}); });
// Now add all files that we have requested diagnostics for but are now
// closed. Otherwise it might be confusing that interfile dependent markers
// don't get fixed.
Object.keys(this.closedFiles).forEach((file) => {
files.push(file);
});
let args: Proto.GeterrRequestArgs = { let args: Proto.GeterrRequestArgs = {
delay: 0, delay: 0,
files: files files: files
......
...@@ -41,5 +41,6 @@ export interface ITypescriptServiceClient { ...@@ -41,5 +41,6 @@ export interface ITypescriptServiceClient {
execute(command:'occurrences', args: Proto.FileLocationRequestArgs, token?: CancellationToken): Promise<Proto.OccurrencesResponse>; execute(command:'occurrences', args: Proto.FileLocationRequestArgs, token?: CancellationToken): Promise<Proto.OccurrencesResponse>;
execute(command:'projectInfo', args: Proto.ProjectInfoRequestArgs, token?: CancellationToken): Promise<Proto.ProjectInfoResponse>; execute(command:'projectInfo', args: Proto.ProjectInfoRequestArgs, token?: CancellationToken): Promise<Proto.ProjectInfoResponse>;
execute(command:'reloadProjects', args: any, expectedResult:boolean, token?: CancellationToken): Promise<any>; execute(command:'reloadProjects', args: any, expectedResult:boolean, token?: CancellationToken): Promise<any>;
execute(command:'reload', args: Proto.ReloadRequestArgs, expectedResult: boolean, token?: CancellationToken): Promise<any>;
execute(command:string, args:any, expectedResult:boolean| CancellationToken, token?: CancellationToken):Promise<any>; execute(command:string, args:any, expectedResult:boolean| CancellationToken, token?: CancellationToken):Promise<any>;
} }
\ No newline at end of file
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册