TST: Disallow bare tm.assert_produces_warning
Our tests currently ensure that warnings are triggered whenever appropriate, but to ensure end users get a correct and meaningful warning message, we should also make sure the correct warning message is surfaced whenever we check for a warning.
And so I propose we start enforcing the usage of the match argument in all uses of tm.assert_produces_warning.
Using the regex assert_produces_warning\([a-zA-Z]*\), I was able to find around 200 bare uses of assert_produces_warning, and some of them are checking that warnings are not raised, so this will be an easy task to finish and would be a good way for new contributors to get familiar with the pandas codebase.
If all agree, then we can open a new issue which would have instructions for how to find the bare uses, and maybe we can enforce this using our linter. We could also implement a method tm.external_warning_produced similiar to tm.external_error_raised, which would be equivalent to using tm.assert_produces_warning(warning, match=None)
See also #23922, #30999 and #37261.
Hey, is this still available to pick up? If yes, I'd like to take it as an open-source beginner.
Yes, but the easy part is mostly done. What's left is to enforce the match argument using our linter, which might be a bit hard for a beginner and so I'd recommend working on other issues instead.
But, feel free to work on this issue if you know what you're doing. PRs will be welcomed!
Sure, I can give it a go. As far as I can see, I need to write a new script and edit pre-commit formatter. Does this sound reasonable?
I've never worked with pre-commit but yeah I think it's something along these lines.
Note that when you work on this, you should exclude the uses of tm.assert_produces_warning(None) from needing the match argument since this checks that no warning is produced.
Good luck!
Alright, thanks! I’ll assign myself to this issue.
Take
Hey, is there a list of files that should be deliberately excluded from this check? I found a few on the linked PR but I'm not sure if that's the complete list.
I don't have a full list, sorry.