public static ModulePackage GetOrCreatePackageByDirectory(string physicalPackagePath, bool create = false) { RootPackage root = null; foreach (var kv in ParsedDirectories) { if (!physicalPackagePath.StartsWith(kv.Key)) { continue; } root = kv.Value; physicalPackagePath = physicalPackagePath.Substring(kv.Key.Length); break; } if (root == null) { return(null); } physicalPackagePath = physicalPackagePath.Trim(Path.DirectorySeparatorChar); if (physicalPackagePath == string.Empty) { return(root); } return(root.GetOrCreateSubPackage(physicalPackagePath.Replace(Path.DirectorySeparatorChar, '.'), create)); }
/// <summary> /// Use this method to add a syntax tree to the parse cache. /// Equally-named trees will be overwritten. /// </summary> public void AddOrUpdate(IAbstractSyntaxTree ast) { if (ast == null) { return; } var packName = ModuleNameHelper.ExtractPackageName(ast.ModuleName); if (string.IsNullOrEmpty(packName)) { Root.Modules[ast.ModuleName] = ast; if (ast.ModuleName == "object") { HandleObjectModule(ast); } return; } var pack = Root.GetOrCreateSubPackage(packName, true); pack.Modules[ModuleNameHelper.ExtractModuleName(ast.ModuleName)] = ast; }
void PrepareQueue(RootPackage root) { if (!Directory.Exists(baseDirectory)) { return; } //ISSUE: wild card character ? seems to behave differently across platforms // msdn: -> Exactly zero or one character. // monodocs: -> Exactly one character. var dFiles = Directory.GetFiles(baseDirectory, "*.d", SearchOption.AllDirectories); var diFiles = Directory.GetFiles(baseDirectory, "*.di", SearchOption.AllDirectories); var files = new string[dFiles.Length + diFiles.Length]; Array.Copy(dFiles, 0, files, 0, dFiles.Length); Array.Copy(diFiles, 0, files, dFiles.Length, diFiles.Length); var lastPack = (ModulePackage)root; var lastDir = baseDirectory; bool isPhobosRoot = this.baseDirectory.EndsWith(Path.DirectorySeparatorChar + "phobos"); foreach (var file in files) { var modulePath = DModule.GetModuleName(baseDirectory, file); if (lastDir != (lastDir = Path.GetDirectoryName(file))) { isPhobosRoot = this.baseDirectory.EndsWith(Path.DirectorySeparatorChar + "phobos"); var packName = ModuleNameHelper.ExtractPackageName(modulePath); lastPack = root.GetOrCreateSubPackage(packName, true); } // Skip index.d (D2) || phobos.d (D2|D1) if (isPhobosRoot && (file.EndsWith("index.d") || file.EndsWith("phobos.d"))) { continue; } queue.Push(new KeyValuePair <string, ModulePackage>(file, lastPack)); } }
void PrepareQueue(RootPackage root) { if (!Directory.Exists(baseDirectory)) return; //ISSUE: wild card character ? seems to behave differently across platforms // msdn: -> Exactly zero or one character. // monodocs: -> Exactly one character. var dFiles = Directory.GetFiles(baseDirectory, "*.d", SearchOption.AllDirectories); var diFiles = Directory.GetFiles(baseDirectory, "*.di", SearchOption.AllDirectories); var files = new string[dFiles.Length + diFiles.Length]; Array.Copy(dFiles, 0, files, 0, dFiles.Length); Array.Copy(diFiles, 0, files, dFiles.Length, diFiles.Length); var lastPack = (ModulePackage)root; var lastDir = baseDirectory; bool isPhobosRoot = this.baseDirectory.EndsWith(Path.DirectorySeparatorChar + "phobos"); foreach (var file in files) { var modulePath = DModule.GetModuleName(baseDirectory, file); if (lastDir != (lastDir = Path.GetDirectoryName(file))) { isPhobosRoot = this.baseDirectory.EndsWith(Path.DirectorySeparatorChar + "phobos"); var packName = ModuleNameHelper.ExtractPackageName(modulePath); lastPack = root.GetOrCreateSubPackage(packName, true); } // Skip index.d (D2) || phobos.d (D2|D1) if (isPhobosRoot && (file.EndsWith("index.d") || file.EndsWith("phobos.d"))) continue; queue.Push(new KeyValuePair<string, ModulePackage>(file, lastPack)); } }