-
Notifications
You must be signed in to change notification settings - Fork 701
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
Add source file to project parse errors and warnings #10644
base: master
Are you sure you want to change the base?
Add source file to project parse errors and warnings #10644
Conversation
7c990c9
to
a74ddc3
Compare
@gbaz what are your concerns with the following comment and is there a test for this? cabal/cabal-install/src/Distribution/Client/ProjectConfig/Legacy.hs Lines 175 to 176 in e562334
|
<$> adaptParseError l (parseConditionConfVarFromClause . BS.pack $ "else(" <> p <> ")") | ||
<$> ( let s = "elif(" <> p <> ")" | ||
in projectParse (Just s) source (adaptParseError l (parseConditionConfVarFromClause $ BS.pack s)) | ||
) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@gbaz was this a typo, using "else(" instead of "elif("?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@Mikolaj, @ffaf1 and @geekosaur, I didn't hear back about this. Here's the code on the master branch:
cabal/cabal-install/src/Distribution/Client/ProjectConfig/Legacy.hs
Lines 305 to 319 in 54b4838
parseElseClauses x = case x of | |
(ParseUtils.Section _l "else" _p xs' : xs) -> do | |
subpcs <- go [] xs' | |
rest <- go [] xs | |
pure (Just <$> subpcs, rest) | |
(ParseUtils.Section l "elif" p xs' : xs) -> do | |
subpcs <- go [] xs' | |
(elseClauses, rest) <- parseElseClauses xs | |
let condNode = | |
(\c pcs e -> CondNode mempty mempty [CondBranch c pcs e]) | |
<$> adaptParseError l (parseConditionConfVarFromClause . BS.pack $ "else(" <> p <> ")") | |
<*> subpcs | |
<*> elseClauses | |
pure (Just <$> condNode, rest) | |
_ -> (\r -> (pure Nothing, r)) <$> go [] x |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Let's ping @gbaz again, maybe he missed the previous notification.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@ffaf1 Gershom hasn't been answering my pings from this repository lately, so I'd not hold my breath. Of course, I'm happy to be wrong here!
deec1f5
to
6f5239b
Compare
6f5239b
to
9f05ce2
Compare
Reverting to draft while I settle some Windows versus POSIX file path issues. |
d45311c
to
829c24d
Compare
d42c82a
to
9e745ee
Compare
9e745ee
to
d80b5ec
Compare
Instead of keep working on this, @philderbeast, do you want to help reviewing this: #8889? |
This has been ready for 3 weeks but I put it in draft while I waited for #10646, needed for asserting on the multiline output. |
f2b83d7
to
c16f967
Compare
5086730
to
1bc9cff
Compare
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Good as far as I can see!
1bc9cff
to
42f3609
Compare
- Track which file has errors and which has warnings - Add test for import parse warnings - Remove added type sigs, use e for error type - Move ProjectParseResult into its own module - Import qualified from Deprecated.ParseUtils - Reverse warnings so they are in line number order - Report parse result error in imported config - Split project test into warning and error tests - Add type synonyms for project parse - Extract function reportProjectParseWarnings - Show the snippet that doesn't parse - Add if, elif and else test projects - Fix else for elif typo - Show provenance if not root - Rerun expected output with provenance - Redo ParseWarningProvenence with ordered output - Add ProjectParseError record - Reword badly formed comment lines - Satisfy fix-whitespace - Add changelog entry - Updated - indented expectation - No snippet when modifying compiler under condition - Only show custom message with snippet - Rerun expected output with source - Use a Doc for the ReportParseResult message - Update expected .out files - Use normalized path when recursing - Consistent projectParse ... source - Consistent projectParse ... normSource - Use normalizeWindowsOutput - Use .md extension on changelog entry - Satisfy HLint
42f3609
to
38ce204
Compare
Fixes #10635. Improves warning and error messages shown when parsing project files and their imports.
Warning Messages
To trigger these warning messages, the examples use badly formed comments that have a single dash instead of two as is required of a line comment in
.cabal
and.project
files (and imported.config
files).Before the fix:
The
cabal.project
file name is repeated. Warnings are misattributed to having been in the project rather than from a configuration file imported by the project. Warnings are shown in reverse line number order.After the fix:
The warnings are shown in a list. For warnings within the same
.project
or imported.config
file, warnings are sorted by line number. The file that is the source of the warning is shown.The warnings associated with configuration files are shown in the order these files were imported by the project:
Error Messages from Project
To trigger these error messages, the examples use badly formed conditions:
Before the fix:
The parse error is shown with hard line breaks.
After the fix:
The snippet that failed to parse may be shown and the parse error is shown as one line, with no hard line breaks.
Error Messages from Imported Config
With the same setup but now with the error in an imported file:
Before the fix:
The project rather than the imported configuration file is shown as the source file.
After the fix:
The imported configuration file is shown as the source with a snippet of the error.
significance: significant
in the changelog file.