diff --git a/src-exe/cabal-plan.hs b/src-exe/cabal-plan.hs index a163e7c..7fb3472 100644 --- a/src-exe/cabal-plan.hs +++ b/src-exe/cabal-plan.hs @@ -147,13 +147,13 @@ parsePattern = either (Left . show) Right . P.runParser (patternP <* P.eof) () " toCompType t = fail $ "Unknown component type: " ++ show t prettyPattern :: Pattern -> T.Text -prettyPattern (Pattern pkg kind cname) = - maybe "" (<> ":") pkg +prettyPattern (Pattern pkg kind cname) = + maybe "" (<> ":") pkg <> maybe "" ((<> ":") . prettyCompType) kind - <> fromMaybe "" cname + <> fromMaybe "" cname prettyCompType :: CompType -> T.Text -prettyCompType compType = case compType of +prettyCompType compType = case compType of CompTypeBench -> "bench" CompTypeExe -> "exe" CompTypeLib -> "lib" @@ -331,18 +331,24 @@ main = do depId <- findUniqueUnitOrExit plan depPat doWhyDepends optsUseColors plan compId depId where - findUniqueUnitOrExit :: PlanJson -> Pattern -> IO UnitId - findUniqueUnitOrExit p pat = - case findUnit p pat of + findUniqueUnitOrExit :: PlanJson -> Pattern -> IO UnitId + findUniqueUnitOrExit p pat = + case findUnit p pat of [(_, uid, _)] -> pure uid - [] -> do + [] -> do hPutStrLn stderr $ "Could not find any unit with pattern: " ++ T.unpack (prettyPattern pat) exitFailure - xs -> do + xs + | [(_, uid, _)] <- filter nonSetupUnits xs -> pure uid + | otherwise -> do hPutStrLn stderr $ "Ambiguous target \"" ++ T.unpack (prettyPattern pat) ++ "\". Found the following targets:" for_ xs $ \(t, _, _) -> hPutStrLn stderr $ " " ++ T.unpack t exitFailure + nonSetupUnits :: (Text, UnitId, CompName) -> Bool + nonSetupUnits (_, _, CompNameSetup) = False + nonSetupUnits _ = True + findPlan search = do cwd <- getCurrentDirectory (searchMethod, mProjRoot) <- case search of