public void RemoveCircular() { var reachable = new HashSet <string>(); var roots = new HashSet <string>() { @"C:\dev\app\src\main.rs", @"C:\dev\app\src\foo.rs" }; var imports = new ModuleImport() { { new PathSegment("frob.rs", true), new ModuleImport() }, }; var frobImports = new ModuleImport() { { new PathSegment("in1", true), new ModuleImport() { { new PathSegment("in2.rs", true), new ModuleImport() } } } }; var in2Imports = new ModuleImport() { { new PathSegment("ext1.rs", true), new ModuleImport() }, { new PathSegment("ext2.rs", true), new ModuleImport() }, { new PathSegment(@"..\frob.rs", true), new ModuleImport() }, { new PathSegment(@"..\main.rs", true), new ModuleImport() }, { new PathSegment(@"..\foo.rs", true), new ModuleImport() }, }; var tracker = new ModuleTracker(@"C:\dev\app\src\main.rs"); foreach (string path in roots) { tracker.AddRootModule(path); } tracker.ExtractReachableAndMakeIncremental(); var orphanSet = tracker.DeleteModule(@"C:\dev\app\src\in1\in2.rs"); }
private TrackedFileNode CreateTrackedNode(ProjectElement elm) { var node = new TrackedFileNode(this, elm); if (!ModuleTracker.IsIncremental) { ModuleTracker.AddRootModule(node.Url); } else { HashSet <string> children = ModuleTracker.AddRootModuleIncremental(node.Url); foreach (string child in children) { HierarchyNode parent = this.CreateFolderNodes(Path.GetDirectoryName(child), false); parent.AddChild(CreateUntrackedNode(child)); } } return(node); }