REPL command in project requires a target#10684
REPL command in project requires a target#10684philderbeast wants to merge 5 commits intohaskell:masterfrom
Conversation
09fcf06 to
6dd178f
Compare
2782ef9 to
5a50424
Compare
35477a0 to
1b8edc1
Compare
1b8edc1 to
2a587e3
Compare
2a587e3 to
59869f3
Compare
59869f3 to
d34ecf2
Compare
d34ecf2 to
80875e2
Compare
|
This pull request will be easier to review once the |
geekosaur
left a comment
There was a problem hiding this comment.
Approving despite suggestions because they're not functional changes.
2e359e9 to
88c7a58
Compare
There was a problem hiding this comment.
Thanks for this patch and the test! I have a couple questions...
@mpickering could you take a brief look at this (it's a small patch)? Especially my comment under the -- NOTE:.
| text "There are no packages in" | ||
| <+> (project <> char '.') | ||
| <+> text "Please add a package to the project and pick a component to use as the target of the REPL command." |
There was a problem hiding this comment.
the no-packages case is certainly already handled in other places today, right? (people keep forgetting packages:... and get an error message.) Is it possible to not duplicate this logic?
There was a problem hiding this comment.
After removing the target string manipulation, the current behaviour (#9983) is bad and doesn't cover this case:
$ ~/.ghcup/bin/cabal --numeric-version
3.14.2.0
$ ~/.ghcup/bin/cabal repl --project-dir=cabal-testsuite/PackageTests/ReplProjectTarget --project-file=empty.project
Configuration is affected by the following files:
- empty.project
Warning: There are no packages or optional-packages in the project
Resolving dependencies...
Error: [Cabal-7076]
Internal error when trying to open a repl for the package fake-package-0. The package is not in the set of available targets for the project plan, which would suggest an inconsistency between readTargetSelectors and resolveTargets.
Also I'd be curious to know how to get better output from a debug build of cabal-install with assertions enabled because that version gives me a poorer error report with no line number:
$ cabal repl --project-dir=cabal-testsuite/PackageTests/ReplProjectTarget --project-file=empty.project
Warning: this is a debug build of cabal-install with assertions enabled.
Configuration is affected by the following files:
- empty.project
Warning: There are no packages or optional-packages in the project
Resolving dependencies...
Assertion failed
There was a problem hiding this comment.
Warning: There are no packages or optional-packages in the project
is a different issue, I think, (#8679 probably) so it may be wise to try to avoid solving it here.
There was a problem hiding this comment.
assertion failure is bad but also looks like a future work. We're minutes from cutting the 3.16 branch and all backporting will have to go through extra careful consideration (mostly deciding the tradeoff: scarse resource for the release vs profit from performing the backport)
There was a problem hiding this comment.
The assertion bothers me. I could cut back on the scope of this pull request or dig in more about the assertion.
There was a problem hiding this comment.
the no-packages case is certainly already handled in other places today, right? (people keep forgetting
packages:...and get an error message.) Is it possible to not duplicate this logic?
@ulysses4ever, it is handled elsewhere but as a warning:
cabal/cabal-install/src/Distribution/Client/ProjectOrchestration.hs
Lines 312 to 314 in 27593dc
So in the meantime (as I'm not suppressing the warning) we get both a warning and an error:
$ cabal repl --project-file=empty.project
Warning: this is a debug build of cabal-install with assertions enabled.
Warning: There are no packages or optional-packages in the project
Error: [Cabal-7076]
There are no packages in 'empty.project'. Please add a package to the project and pick a
single [package:][ctype:]component as target for the REPL command.
There was a problem hiding this comment.
Given the warning (unless there's already some way to suppress it, shouldn't the error message change to be a follow-on to it?
There was a problem hiding this comment.
I'm OK with the warning and then the error. Scolding, I warned you and now look what has happened, an error!
I feel the better way to fix this would be to suppress the warning.
0835a09 to
9efb34b
Compare
|
Is this not superceded by #11237? |
Not totally, we can pick a default but don't when there is one package in a project, #11237 (comment). |
2216929 to
84a58e9
Compare
- Show packages when no --project-file is given - Handle the case with no packages in the project - Add a changelog - Add tests - Satisfy hlint - Satisfy fourmolu - Don't need a target when there is one package - Adjust target strings for sole package - Add alt.project tests for ReplOptions - Silence the 1st withCtx call's verbosity - Don't repeat configuration is affected by - Satisfy whitespace - Fixups after rebase - Remove punct variable - Review comment changes - Comma with but joining indep' clauses - Use single package - Update tests, adding more assertions - Improve test descriptions - Mention [package:][ctype:]component - Don't repeat [package:][ctype:]component - Lift validatedTargets, rename r as replFlags - Don't use -XRecordWildCards for configFlags - Add a one.project one pkg test - Remove target string manipulation - Make reportProjectNoTarget a function - Redo ReplProjectTarget tests - Redo ReplProjectNoneTarget tests - Satisfy fix-whitespace - Error whether or not project has packages - Guard against triggering an assertion if targets are null - Skip if Windows - Repl commands mentioning the fake-package - Don't yet automatically pick only choice - Autopick the one package - Split ReplProjectTarget test - Add tests for repl all target - Default target to all with multireplh - Add a retargetting message - Add test for default "all" target when multirepl - Add type synonym TargetPick - Add targetedRepl - RejectNoTargets if target strings not null Co-Authored-By: brandon s allbery kf8nh <[email protected]>
- Update expected fake-package-0 message
|
Closing in favour of #11452. |
|
|
@geekosaur sorry to have done that to mergify. |
|
Mergify's too dumb to realize that the PR is closed so it doesn't matter. |
|
|
Fixes #10527 and #9983. Depend-on: #10688.
Doesn't allow an empty list of targets with a project context.
With a project, the REPL command requires a target. If one is not given then a message is shown explaining this and naming the project if the
--project-fileoption was given (but not when the default 'cabal.project' project name is used implicitly).We're not yet able to list project targets so in the meantime, the messages lists the packages of the project.cabal.projectis used:--project-fileoption is used, the file name is included:fake-package-0. This was confusing:cabal-install:exe:cabalversions mentioned usingallas the target but this won't work for the REPL command:significance: significantin the changelog file.