From 7704bbcdeac1583c4effb556146b2adeb5548efc Mon Sep 17 00:00:00 2001 From: Geod24 Date: Wed, 10 Aug 2022 10:03:10 +0200 Subject: [PATCH] Project: Use Dependency.visit instead of if/else --- source/dub/project.d | 25 ++++++++++++++----------- 1 file changed, 14 insertions(+), 11 deletions(-) diff --git a/source/dub/project.d b/source/dub/project.d index eee524a57..28fcb3a9d 100644 --- a/source/dub/project.d +++ b/source/dub/project.d @@ -510,17 +510,20 @@ shared static this() { } } else if (m_selections.hasSelectedVersion(basename)) { vspec = m_selections.getSelectedVersion(basename); - if (!vspec.path.empty) { - auto path = vspec.path; - if (!path.absolute) path = m_rootPackage.path ~ path; - p = m_packageManager.getOrLoadPackage(path, NativePath.init, true); - p = resolveSubPackage(p, subname, true); - } else if (!vspec.repository.empty) { - p = m_packageManager.loadSCMPackage(basename, vspec.repository); - p = resolveSubPackage(p, subname, true); - } else { - p = m_packageManager.getBestPackage(dep.name, vspec); - } + p = vspec.visit!( + (NativePath path_) { + auto path = path_.absolute ? path_ : m_rootPackage.path ~ path_; + auto tmp = m_packageManager.getOrLoadPackage(path, NativePath.init, true); + return resolveSubPackage(tmp, subname, true); + }, + (Repository repo) { + auto tmp = m_packageManager.loadSCMPackage(basename, repo); + return resolveSubPackage(tmp, subname, true); + }, + (VersionRange range) { + return m_packageManager.getBestPackage(dep.name, vspec); + }, + ); } else if (m_dependencies.canFind!(d => getBasePackageName(d.name) == basename)) { auto idx = m_dependencies.countUntil!(d => getBasePackageName(d.name) == basename); auto bp = m_dependencies[idx].basePackage;