Skip to content

Commit

Permalink
Merge pull request #3829 from savpek/feature/directory-removal-fix
Browse files Browse the repository at this point in the history
Fix for directory remove/move/rename
  • Loading branch information
JoeRobich authored Jun 6, 2020
2 parents c6cb69e + 7e1208e commit 7e8bd2b
Show file tree
Hide file tree
Showing 5 changed files with 42 additions and 14 deletions.
1 change: 1 addition & 0 deletions .vscode/launch.json
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
"request": "launch",
"runtimeExecutable": "${execPath}",
"args": [
"--disable-extensions",
"--extensionDevelopmentPath=${workspaceRoot}"
],
"stopOnEntry": false,
Expand Down
8 changes: 7 additions & 1 deletion package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

3 changes: 2 additions & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -96,6 +96,7 @@
"yauzl": "2.10.0"
},
"devDependencies": {
"@types/vscode": "1.33.0",
"@types/archiver": "2.1.2",
"@types/chai": "4.1.7",
"@types/chai-arrays": "1.0.2",
Expand Down Expand Up @@ -3475,4 +3476,4 @@
]
}
}
}
}
41 changes: 30 additions & 11 deletions src/features/changeForwarding.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,8 @@
* Licensed under the MIT License. See License.txt in the project root for license information.
*--------------------------------------------------------------------------------------------*/

import {Uri, workspace} from 'vscode';
import {OmniSharpServer} from '../omnisharp/server';
import { Uri, workspace } from 'vscode';
import { OmniSharpServer } from '../omnisharp/server';
import * as serverUtils from '../omnisharp/utils';
import { FileChangeType } from '../omnisharp/protocol';
import { IDisposable } from '../Disposable';
Expand All @@ -14,7 +14,7 @@ function forwardDocumentChanges(server: OmniSharpServer): IDisposable {

return workspace.onDidChangeTextDocument(event => {

let {document} = event;
let { document } = event;
if (document.isUntitled || document.languageId !== 'csharp' || document.uri.scheme !== 'file') {
return;
}
Expand All @@ -23,7 +23,7 @@ function forwardDocumentChanges(server: OmniSharpServer): IDisposable {
return;
}

serverUtils.updateBuffer(server, {Buffer: document.getText(), FileName: document.fileName}).catch(err => {
serverUtils.updateBuffer(server, { Buffer: document.getText(), FileName: document.fileName }).catch(err => {
console.error(err);
return err;
});
Expand All @@ -33,27 +33,46 @@ function forwardDocumentChanges(server: OmniSharpServer): IDisposable {
function forwardFileChanges(server: OmniSharpServer): IDisposable {

function onFileSystemEvent(changeType: FileChangeType): (uri: Uri) => void {
return function(uri: Uri)
{
return function (uri: Uri) {
if (!server.isRunning()) {
return;
}
let req = { FileName: uri.fsPath, changeType};

let req = { FileName: uri.fsPath, changeType };

serverUtils.filesChanged(server, [req]).catch(err => {
console.warn(`[o] failed to forward file change event for ${uri.fsPath}`, err);
return err;
});
};
};
}

function onFolderEvent(changeType: FileChangeType): (uri: Uri) => void {
return async function (uri: Uri) {
if (!server.isRunning()) {
return;
}

if (changeType === FileChangeType.Delete) {
let requests = [{ FileName: uri.fsPath, changeType: FileChangeType.DirectoryDelete }];

serverUtils.filesChanged(server, requests).catch(err => {
console.warn(`[o] failed to forward file change event for ${uri.fsPath}`, err);
return err;
});
}
};
}

const watcher = workspace.createFileSystemWatcher('**/*.*');
let d1 = watcher.onDidCreate(onFileSystemEvent(FileChangeType.Create));
let d2 = watcher.onDidDelete(onFileSystemEvent(FileChangeType.Delete));
let d3 = watcher.onDidChange(onFileSystemEvent(FileChangeType.Change));

return new CompositeDisposable(watcher, d1, d2, d3);
const watcherForFolders = workspace.createFileSystemWatcher('**/');
let d4 = watcherForFolders.onDidDelete(onFolderEvent(FileChangeType.Delete));

return new CompositeDisposable(watcher, d1, d2, d3, watcherForFolders, d4);
}

export default function forwardChanges(server: OmniSharpServer): IDisposable {
Expand Down
3 changes: 2 additions & 1 deletion src/omnisharp/protocol.ts
Original file line number Diff line number Diff line change
Expand Up @@ -465,7 +465,8 @@ export interface FilesChangedRequest extends Request {
export enum FileChangeType {
Change = "Change",
Create = "Create",
Delete = "Delete"
Delete = "Delete",
DirectoryDelete = "DirectoryDelete"
}

export namespace V2 {
Expand Down

0 comments on commit 7e8bd2b

Please sign in to comment.