Add error-to-raise-arguments-error refactoring rule #635
+93
−2
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.
This PR implements a new refactoring rule that transforms
errorfunction calls with format strings intoraise-arguments-errorcalls, helping developers follow Racket's error message conventions.Problem
The
errorfunction is easy to use in ways that violate Racket's error messages conventions. When developers useerrorwith format strings like~a, they miss the opportunity to provide structured error information thatraise-arguments-erroroffers. For example:produces an error message that's harder to parse and less structured than:
Solution
The new
error-to-raise-arguments-errorrule automatically detects and refactors these cases. The rule:errorcalls that use~aformat placeholders with simple identifier argumentsraise-arguments-errorcallExample Transformations
Basic case:
Multiple arguments:
Safety
The rule is conservative and only applies when:
~aplaceholders exactly matches the number of arguments~aplaceholders (not other format directives)This ensures the transformation is safe and doesn't change program behavior.
Testing
Added comprehensive tests covering:
~aat the end of stringsAll 670 tests pass (667 existing + 3 new).
Fixes #[issue number]
Original prompt
Fixes #604
💡 You can make Copilot smarter by setting up custom instructions, customizing its development environment and configuring Model Context Protocol (MCP) servers. Learn more Copilot coding agent tips in the docs.