From 353b56f44f47494ed8741a13461addce9d6f731a Mon Sep 17 00:00:00 2001 From: Mitchell Dalvi Rosen Date: Mon, 3 Mar 2025 15:19:02 -0500 Subject: [PATCH] don't omit nameless dependencies from `dependencies` output --- .../Editor/HandleInput/Dependencies.hs | 32 +++++++++++++++---- .../src/Unison/Codebase/Editor/Output.hs | 4 +-- .../src/Unison/CommandLine/OutputMessages.hs | 4 +-- 3 files changed, 30 insertions(+), 10 deletions(-) diff --git a/unison-cli/src/Unison/Codebase/Editor/HandleInput/Dependencies.hs b/unison-cli/src/Unison/Codebase/Editor/HandleInput/Dependencies.hs index 7feb3e4069..07892e8a46 100644 --- a/unison-cli/src/Unison/Codebase/Editor/HandleInput/Dependencies.hs +++ b/unison-cli/src/Unison/Codebase/Editor/HandleInput/Dependencies.hs @@ -3,9 +3,11 @@ module Unison.Codebase.Editor.HandleInput.Dependencies ) where +import Control.Arrow ((***)) import Data.Bifoldable (bifoldMap, binull) import Data.Set qualified as Set import U.Codebase.Sqlite.Operations qualified as Operations +import Unison.Builtin qualified as Builtin import Unison.Cli.Monad (Cli) import Unison.Cli.Monad qualified as Cli import Unison.Cli.MonadUtils qualified as Cli @@ -28,7 +30,6 @@ import Unison.Referent qualified as Referent import Unison.Syntax.HashQualifiedPrime qualified as HQ' import Unison.Util.Defns (Defns (..), DefnsF) import Unison.Util.Defns qualified as Defns -import qualified Unison.Builtin as Builtin handleDependencies :: HQ.HashQualified Name -> Cli () handleDependencies hq = do @@ -61,22 +62,41 @@ handleDependencies hq = do let dependencyNames :: DefnsF [] - (HQ'.HashQualified Name, HQ'.HashQualified Name) - (HQ'.HashQualified Name, HQ'.HashQualified Name) + (HQ.HashQualified Name, HQ.HashQualified Name) + (HQ.HashQualified Name, HQ.HashQualified Name) dependencyNames = bimap (f (Referent.fromTermReference >>> PPE.termNames ppe)) (f (PPE.typeNames ppe)) dependencies where + f :: + (Reference -> [(HQ'.HashQualified Name, HQ'.HashQualified Name)]) -> + Set Reference -> + [(HQ.HashQualified Name, HQ.HashQualified Name)] f g = Set.toList - >>> mapMaybe (g >>> listToMaybe) - >>> Name.sortByText (fst >>> HQ'.toText) + -- Pick the best name for a reference (with `listToMaybe`), else use the ref (if nameless) + >>> map (\x -> maybe (Left x) Right (listToMaybe (g x))) + >>> partitionEithers + -- Sort the named references alphabetically, then stick the hash-only ones at the end + >>> h + + h :: + ([Reference], [(HQ'.HashQualified Name, HQ'.HashQualified Name)]) -> + [(HQ.HashQualified Name, HQ.HashQualified Name)] + h (nameless, named) = + concat + [ named + & Name.sortByText (fst >>> HQ'.toText) + & map (HQ'.toHQ *** HQ'.toHQ), + nameless + & map (\x -> let y = HQ.fromReference x in (y, y)) + ] -- Set numbered args (dependencyNames.types ++ dependencyNames.terms) - & map (SA.HashQualified . HQ'.toHQ . fst) + & map (SA.HashQualified . fst) & Cli.setNumberedArgs let lds = bifoldMap (Set.map LD.referent) (Set.map LD.typeRef) refs diff --git a/unison-cli/src/Unison/Codebase/Editor/Output.hs b/unison-cli/src/Unison/Codebase/Editor/Output.hs index 872b644b22..7d2133c828 100644 --- a/unison-cli/src/Unison/Codebase/Editor/Output.hs +++ b/unison-cli/src/Unison/Codebase/Editor/Output.hs @@ -342,8 +342,8 @@ data Output (Set LabeledDependency) ( DefnsF [] - (HQ'.HashQualified Name, HQ'.HashQualified Name) - (HQ'.HashQualified Name, HQ'.HashQualified Name) + (HQ.HashQualified Name, HQ.HashQualified Name) + (HQ.HashQualified Name, HQ.HashQualified Name) ) | -- | List dependents of a type or term. ListDependents diff --git a/unison-cli/src/Unison/CommandLine/OutputMessages.hs b/unison-cli/src/Unison/CommandLine/OutputMessages.hs index 434275c9fa..9ff2d12062 100644 --- a/unison-cli/src/Unison/CommandLine/OutputMessages.hs +++ b/unison-cli/src/Unison/CommandLine/OutputMessages.hs @@ -1455,8 +1455,8 @@ notifyUser dir = \case "Dependencies" "dependencies" lds - (map (HQ'.toHQ *** HQ'.toHQ) defns.types) - (map (HQ'.toHQ *** HQ'.toHQ) defns.terms) + defns.types + defns.terms ListStructuredFind terms -> pure $ listFind False Nothing terms ListTextFind True terms ->