non-function type error, with argument details. #7873
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Motivation
Add some extra context when someone mistakenly uses something that isn't a function where a function should be.
Context
Issue #7405 provides an example where part of the nix expression is evaluated and assumed to be a function, since arguments follow. In this case, which part of the expression evaluates to the function is arguably unclear to the user.
Current error:
Error with extra context:
To hopefully make cases like this more clear, I print the type and value of the non-function, followed by the type and value of its arguments. Because printing sets and lists can result in enormous walls of text, I only print the expr types for sets and lists.
Implementation notes
Because I wanted to make an error message with a dynamic number of arguments, I needed to create a new constructor for ErrorBuilder that takes a hintformat. Then I added a function to create this hintformat. Since allocating hintformats on the stack is discouraged, the build function and etc use a unique_ptr.
Checklist for maintainers
Maintainers: tick if completed or explain if not relevant
tests/**.sh
src/*/tests
tests/nixos/*