Skip to content

Add AmbiguityResolver to decide how to resolve ambiguity #7482

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Closed
wants to merge 1 commit into from
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 3 additions & 2 deletions cabal-install/src/Distribution/Client/CmdBench.hs
Original file line number Diff line number Diff line change
Expand Up @@ -85,7 +85,8 @@ benchAction flags@NixStyleFlags {..} targetStrings globalFlags = do
baseCtx <- establishProjectBaseContext verbosity cliConfig OtherCommand

targetSelectors <- either (reportTargetSelectorProblems verbosity) return
=<< readTargetSelectors (localPackages baseCtx) (Just BenchKind) targetStrings
=<< readTargetSelectors (localPackages baseCtx)
(Just BenchKind) flags targetStrings

buildCtx <-
runProjectPreBuildPhase verbosity baseCtx $ \elaboratedPlan -> do
Expand Down Expand Up @@ -118,7 +119,7 @@ benchAction flags@NixStyleFlags {..} targetStrings globalFlags = do
runProjectPostBuildPhase verbosity baseCtx buildCtx buildOutcomes
where
verbosity = fromFlagOrDefault normal (configVerbosity configFlags)
cliConfig = commandLineFlagsToProjectConfig globalFlags flags
cliConfig = commandLineFlagsToProjectConfig globalFlags flags
mempty -- ClientInstallFlags, not needed here

-- | This defines what a 'TargetSelector' means for the @bench@ command.
Expand Down
3 changes: 2 additions & 1 deletion cabal-install/src/Distribution/Client/CmdBuild.hs
Original file line number Diff line number Diff line change
Expand Up @@ -107,7 +107,8 @@ buildAction flags@NixStyleFlags { extraFlags = buildFlags, ..} targetStrings glo

targetSelectors <-
either (reportTargetSelectorProblems verbosity) return
=<< readTargetSelectors (localPackages baseCtx) Nothing targetStrings
=<< readTargetSelectors (localPackages baseCtx)
Nothing flags targetStrings

buildCtx <-
runProjectPreBuildPhase verbosity baseCtx $ \elaboratedPlan -> do
Expand Down
4 changes: 2 additions & 2 deletions cabal-install/src/Distribution/Client/CmdErrorMessages.hs
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ import Distribution.Client.TargetSelector
import Distribution.Client.TargetProblem
( TargetProblem(..), TargetProblem' )
import Distribution.Client.TargetSelector
( ComponentKind(..), ComponentKindFilter, TargetSelector(..),
( ComponentKind(..), TargetSelector(..),
componentKind, showTargetSelector )

import Distribution.Package
Expand Down Expand Up @@ -170,7 +170,7 @@ targetSelectorRefersToPkgs (TargetPackageNamed _ mkfilter) = isNothing mkfilter
targetSelectorRefersToPkgs TargetComponent{} = False
targetSelectorRefersToPkgs TargetComponentUnknown{} = False

targetSelectorFilter :: TargetSelector -> Maybe ComponentKindFilter
targetSelectorFilter :: TargetSelector -> Maybe ComponentKind
targetSelectorFilter (TargetPackage _ _ mkfilter) = mkfilter
targetSelectorFilter (TargetPackageNamed _ mkfilter) = mkfilter
targetSelectorFilter (TargetAllPackages mkfilter) = mkfilter
Expand Down
3 changes: 2 additions & 1 deletion cabal-install/src/Distribution/Client/CmdHaddock.hs
Original file line number Diff line number Diff line change
Expand Up @@ -74,7 +74,8 @@ haddockAction flags@NixStyleFlags {..} targetStrings globalFlags = do
baseCtx <- establishProjectBaseContext verbosity cliConfig HaddockCommand

targetSelectors <- either (reportTargetSelectorProblems verbosity) return
=<< readTargetSelectors (localPackages baseCtx) Nothing targetStrings
=<< readTargetSelectors (localPackages baseCtx) Nothing flags
targetStrings

buildCtx <-
runProjectPreBuildPhase verbosity baseCtx $ \elaboratedPlan -> do
Expand Down
6 changes: 3 additions & 3 deletions cabal-install/src/Distribution/Client/CmdInstall.hs
Original file line number Diff line number Diff line change
Expand Up @@ -238,8 +238,8 @@ installAction flags@NixStyleFlags { extraFlags = clientInstallFlags', .. } targe
else do
targetSelectors <-
either (reportTargetSelectorProblems verbosity) return
=<< readTargetSelectors (localPackages localBaseCtx)
Nothing targetStrings''
=<< readTargetSelectors (localPackages localBaseCtx) Nothing flags
targetStrings''

(specs, selectors) <-
getSpecsAndTargetSelectors
Expand Down Expand Up @@ -429,7 +429,7 @@ getSpecsAndTargetSelectors
-> [TargetSelector]
-> DistDirLayout
-> ProjectBaseContext
-> Maybe ComponentKindFilter
-> Maybe ComponentKind
-> IO ([PackageSpecifier UnresolvedSourcePackage], [TargetSelector])
getSpecsAndTargetSelectors verbosity reducedVerbosity pkgDb targetSelectors localDistDirLayout localBaseCtx targetFilter =
withInstallPlan reducedVerbosity localBaseCtx $ \elaboratedPlan _ -> do
Expand Down
2 changes: 1 addition & 1 deletion cabal-install/src/Distribution/Client/CmdListBin.hs
Original file line number Diff line number Diff line change
Expand Up @@ -77,7 +77,7 @@ listbinAction flags@NixStyleFlags{..} args globalFlags = do

-- elaborate target selectors
targetSelectors <- either (reportTargetSelectorProblems verbosity) return
=<< readTargetSelectors localPkgs (Just ExeKind) [target]
=<< readTargetSelectors localPkgs (Just ExeKind) flags [target]

buildCtx <-
runProjectPreBuildPhase verbosity baseCtx $ \elaboratedPlan -> do
Expand Down
9 changes: 5 additions & 4 deletions cabal-install/src/Distribution/Client/CmdRepl.hs
Original file line number Diff line number Diff line change
Expand Up @@ -199,7 +199,7 @@ replCommand = Client.installCommand {
replAction :: NixStyleFlags (ReplFlags, EnvFlags) -> [String] -> GlobalFlags -> IO ()
replAction flags@NixStyleFlags { extraFlags = (replFlags, envFlags), ..} targetStrings globalFlags = do
let
with = withProject cliConfig verbosity targetStrings
with = withProject flags cliConfig verbosity targetStrings
without config = withoutProject (config <> cliConfig) verbosity targetStrings

(baseCtx, targetSelectors, finalizer, replType) <-
Expand Down Expand Up @@ -333,13 +333,14 @@ data ReplType = ProjectRepl
-- 7.6, though. 🙁
deriving (Show, Eq)

withProject :: ProjectConfig -> Verbosity -> [String]
withProject :: NixStyleFlags a -> ProjectConfig -> Verbosity -> [String]
-> IO (ProjectBaseContext, [TargetSelector], IO (), ReplType)
withProject cliConfig verbosity targetStrings = do
withProject flags cliConfig verbosity targetStrings = do
baseCtx <- establishProjectBaseContext verbosity cliConfig OtherCommand

targetSelectors <- either (reportTargetSelectorProblems verbosity) return
=<< readTargetSelectors (localPackages baseCtx) (Just LibKind) targetStrings
=<< readTargetSelectors (localPackages baseCtx) (Just LibKind)
flags targetStrings

return (baseCtx, targetSelectors, return (), ProjectRepl)

Expand Down
2 changes: 1 addition & 1 deletion cabal-install/src/Distribution/Client/CmdRun.hs
Original file line number Diff line number Diff line change
Expand Up @@ -180,7 +180,7 @@ runAction flags@NixStyleFlags {..} targetStrings globalFlags = do
else reportTargetSelectorProblems verbosity err

(baseCtx', targetSelectors) <-
readTargetSelectors (localPackages baseCtx) (Just ExeKind) (take 1 targetStrings)
readTargetSelectors (localPackages baseCtx) (Just ExeKind) flags (take 1 targetStrings)
>>= \case
Left err@(TargetSelectorNoTargetsInProject:_)
| (script:_) <- targetStrings -> scriptOrError script err
Expand Down
4 changes: 2 additions & 2 deletions cabal-install/src/Distribution/Client/CmdSdist.hs
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ import Distribution.Client.NixStyleOptions
( NixStyleFlags (..), defaultNixStyleFlags )
import Distribution.Client.TargetSelector
( TargetSelector(..), ComponentKind
, readTargetSelectors, reportTargetSelectorProblems )
, readTargetSelectors', reportTargetSelectorProblems )
import Distribution.Client.Setup
( GlobalFlags(..) )
import Distribution.Solver.Types.SourcePackage
Expand Down Expand Up @@ -143,7 +143,7 @@ sdistAction (ProjectFlags{..}, SdistFlags{..}) targetStrings globalFlags = do
let localPkgs = localPackages baseCtx

targetSelectors <- either (reportTargetSelectorProblems verbosity) return
=<< readTargetSelectors localPkgs Nothing targetStrings
=<< readTargetSelectors' localPkgs Nothing targetStrings

-- elaborate path, create target directory
mOutputPath' <- case mOutputPath of
Expand Down
3 changes: 2 additions & 1 deletion cabal-install/src/Distribution/Client/CmdTest.hs
Original file line number Diff line number Diff line change
Expand Up @@ -97,7 +97,8 @@ testAction flags@NixStyleFlags {..} targetStrings globalFlags = do
baseCtx <- establishProjectBaseContext verbosity cliConfig OtherCommand

targetSelectors <- either (reportTargetSelectorProblems verbosity) return
=<< readTargetSelectors (localPackages baseCtx) (Just TestKind) targetStrings
=<< readTargetSelectors (localPackages baseCtx)
(Just TestKind) flags targetStrings

buildCtx <-
runProjectPreBuildPhase verbosity baseCtx $ \elaboratedPlan -> do
Expand Down
4 changes: 3 additions & 1 deletion cabal-install/src/Distribution/Client/Config.hs
Original file line number Diff line number Diff line change
Expand Up @@ -431,7 +431,9 @@ instance Semigroup SavedConfig where
configAllowOlder =
combineMonoid savedConfigureExFlags configAllowOlder,
configWriteGhcEnvironmentFilesPolicy
= combine configWriteGhcEnvironmentFilesPolicy
= combine configWriteGhcEnvironmentFilesPolicy,
configPickFirstTarget
= combine configPickFirstTarget
}
where
combine = combine' savedConfigureExFlags
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -607,7 +607,9 @@ convertToLegacySharedConfig
configAllowOlder = projectConfigAllowOlder,
configAllowNewer = projectConfigAllowNewer,
configWriteGhcEnvironmentFilesPolicy
= projectConfigWriteGhcEnvironmentFilesPolicy
= projectConfigWriteGhcEnvironmentFilesPolicy,
configPickFirstTarget
= mempty
}

installFlags = InstallFlags {
Expand Down
14 changes: 12 additions & 2 deletions cabal-install/src/Distribution/Client/Setup.hs
Original file line number Diff line number Diff line change
Expand Up @@ -604,12 +604,15 @@ data ConfigExFlags = ConfigExFlags {
configAllowNewer :: Maybe AllowNewer,
configAllowOlder :: Maybe AllowOlder,
configWriteGhcEnvironmentFilesPolicy
:: Flag WriteGhcEnvironmentFilesPolicy
:: Flag WriteGhcEnvironmentFilesPolicy,
configPickFirstTarget
:: Flag Bool
}
deriving (Eq, Show, Generic)

defaultConfigExFlags :: ConfigExFlags
defaultConfigExFlags = mempty { configSolver = Flag defaultSolver }
defaultConfigExFlags = mempty { configSolver = Flag defaultSolver
, configPickFirstTarget = Flag False }

configureExCommand :: CommandUI (ConfigFlags, ConfigExFlags)
configureExCommand = configureCommand {
Expand Down Expand Up @@ -685,6 +688,13 @@ configureExOptions _showOrParseArgs src =
(reqArg "always|never|ghc8.4.4+"
writeGhcEnvironmentFilesPolicyParser
writeGhcEnvironmentFilesPolicyPrinter)

, option [] ["pick-first-target"]
("If there's an amibguity in the target selector, then resolve it by"
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

typo ambiguity

++ " choosing the first")
configPickFirstTarget
(\v flags -> flags { configPickFirstTarget = v})
trueArg
]


Expand Down
2 changes: 1 addition & 1 deletion cabal-install/src/Distribution/Client/TargetProblem.hs
Original file line number Diff line number Diff line change
Expand Up @@ -45,8 +45,8 @@ data TargetProblem a
| TargetProblemNoSuchPackage PackageId
| TargetProblemNoSuchComponent PackageId ComponentName

-- | A custom target problem
| CustomTargetProblem a
-- ^ A custom target problem
deriving (Eq, Show, Functor)

-- | Type alias for a 'TargetProblem' with no user-defined problems/errors.
Expand Down
Loading