Skip to content

Commit 5f655e9

Browse files
author
Ravi Chande
authored
Merge pull request #1805 from rchande/fileChangeNotification
Provide more granular file change events based on VS Code file create/delete events
2 parents 98b4fe7 + 96dab56 commit 5f655e9

File tree

2 files changed

+32
-15
lines changed

2 files changed

+32
-15
lines changed

src/features/changeForwarding.ts

Lines changed: 21 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
import {Disposable, Uri, workspace} from 'vscode';
99
import {OmniSharpServer} from '../omnisharp/server';
1010
import * as serverUtils from '../omnisharp/utils';
11+
import { FileChangeType } from '../omnisharp/protocol';
1112

1213
function forwardDocumentChanges(server: OmniSharpServer): Disposable {
1314

@@ -31,25 +32,30 @@ function forwardDocumentChanges(server: OmniSharpServer): Disposable {
3132

3233
function forwardFileChanges(server: OmniSharpServer): Disposable {
3334

34-
function onFileSystemEvent(uri: Uri): void {
35-
if (!server.isRunning()) {
36-
return;
37-
}
38-
39-
let req = { FileName: uri.fsPath };
40-
41-
serverUtils.filesChanged(server, [req]).catch(err => {
42-
console.warn(`[o] failed to forward file change event for ${uri.fsPath}`, err);
43-
return err;
44-
});
35+
function onFileSystemEvent(changeType: FileChangeType): (Uri) => void {
36+
return function(uri: Uri)
37+
{
38+
if (!server.isRunning()) {
39+
return;
40+
}
41+
42+
let req = { FileName: uri.fsPath, changeType};
43+
44+
serverUtils.filesChanged(server, [req]).catch(err => {
45+
console.warn(`[o] failed to forward file change event for ${uri.fsPath}`, err);
46+
return err;
47+
});
48+
};
4549
}
4650

4751
const watcher = workspace.createFileSystemWatcher('**/*.*');
48-
let d1 = watcher.onDidCreate(onFileSystemEvent);
49-
let d2 = watcher.onDidChange(onFileSystemEvent);
50-
let d3 = watcher.onDidDelete(onFileSystemEvent);
52+
let d1 = watcher.onDidCreate(onFileSystemEvent(FileChangeType.Create));
53+
let d2 = watcher.onDidDelete(onFileSystemEvent(FileChangeType.Delete));
54+
55+
// In theory we don't need to subscribe to "change" notifications
56+
// because we already get them through the buffer update request
5157

52-
return Disposable.from(watcher, d1, d2, d3);
58+
return Disposable.from(watcher, d1, d2);
5359
}
5460

5561
export default function forwardChanges(server: OmniSharpServer): Disposable {

src/omnisharp/protocol.ts

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -417,6 +417,17 @@ export interface PackageDependency {
417417
Name: string;
418418
Version: string;
419419
}
420+
421+
export interface FilesChangedRequest extends Request{
422+
ChangeType: FileChangeType;
423+
}
424+
425+
export enum FileChangeType
426+
{
427+
Change = "Change",
428+
Create = "Create",
429+
Delete = "Delete"
430+
}
420431

421432
export namespace V2 {
422433

0 commit comments

Comments
 (0)