mirror of
https://github.com/microsoft/vscode.git
synced 2026-02-24 03:35:38 +00:00
Fixes #8719: Closing a file without saving is not cleaning markers
This commit is contained in:
@@ -4,9 +4,6 @@
|
||||
*--------------------------------------------------------------------------------------------*/
|
||||
'use strict';
|
||||
|
||||
import * as fs from 'fs';
|
||||
import * as path from 'path';
|
||||
|
||||
import { workspace, TextDocument, TextDocumentChangeEvent, TextDocumentContentChangeEvent, Disposable } from 'vscode';
|
||||
import * as Proto from '../protocol';
|
||||
import { ITypescriptServiceClient } from '../typescriptService';
|
||||
@@ -83,7 +80,6 @@ export default class BufferSyncSupport {
|
||||
private diagnostics: Diagnostics;
|
||||
private disposables: Disposable[] = [];
|
||||
private syncedBuffers: Map<SyncedBuffer>;
|
||||
private closedFiles: Map<boolean>;
|
||||
|
||||
private projectValidationRequested: boolean;
|
||||
|
||||
@@ -104,7 +100,6 @@ export default class BufferSyncSupport {
|
||||
this.diagnosticDelayer = new Delayer<any>(100);
|
||||
|
||||
this.syncedBuffers = Object.create(null);
|
||||
this.closedFiles = Object.create(null);
|
||||
}
|
||||
|
||||
public listen(): void {
|
||||
@@ -112,19 +107,6 @@ export default class BufferSyncSupport {
|
||||
workspace.onDidCloseTextDocument(this.onDidCloseTextDocument, this, this.disposables);
|
||||
workspace.onDidChangeTextDocument(this.onDidChangeTextDocument, this, this.disposables);
|
||||
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 {
|
||||
@@ -165,7 +147,6 @@ export default class BufferSyncSupport {
|
||||
}
|
||||
let syncedBuffer = new SyncedBuffer(document, filepath, this, this.client);
|
||||
this.syncedBuffers[filepath] = syncedBuffer;
|
||||
delete this.closedFiles[filepath];
|
||||
syncedBuffer.open();
|
||||
this.requestDiagnostic(filepath);
|
||||
}
|
||||
@@ -179,14 +160,7 @@ export default class BufferSyncSupport {
|
||||
if (!syncedBuffer) {
|
||||
return;
|
||||
}
|
||||
// If the file still exists on disk keep on validating the file.
|
||||
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);
|
||||
}
|
||||
this.diagnostics.delete(filepath);
|
||||
delete this.syncedBuffers[filepath];
|
||||
syncedBuffer.close();
|
||||
}
|
||||
@@ -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 = {
|
||||
delay: 0,
|
||||
files: files
|
||||
|
||||
@@ -41,5 +41,6 @@ export interface ITypescriptServiceClient {
|
||||
execute(command:'occurrences', args: Proto.FileLocationRequestArgs, token?: CancellationToken): Promise<Proto.OccurrencesResponse>;
|
||||
execute(command:'projectInfo', args: Proto.ProjectInfoRequestArgs, token?: CancellationToken): Promise<Proto.ProjectInfoResponse>;
|
||||
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>;
|
||||
}
|
||||
Reference in New Issue
Block a user