-
-
Notifications
You must be signed in to change notification settings - Fork 335
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
Give Pyright what it wants (alias
attributes everywhere)
#3114
base: main
Are you sure you want to change the base?
Conversation
Codecov ReportAll modified and coverable lines are covered by tests ✅
Additional details and impacted files@@ Coverage Diff @@
## main #3114 +/- ##
==========================================
+ Coverage 99.58% 99.59% +0.01%
==========================================
Files 121 121
Lines 18157 18872 +715
Branches 3272 3535 +263
==========================================
+ Hits 18082 18796 +714
- Misses 52 53 +1
Partials 23 23
|
this makes me want to write a linter rule, but also feels ridiculous (and idk which flake8 plugin it would fit) to write an attrs+pyright-specific rule. How slow/fast is the test? If it's anything but trivial I could rewrite it as an ast visitor. |
Yeah lint rule would make more sense but unfortunately a lint rule would miss context that's helpful (like whether a class is exported). It takes 1.75 seconds to run locally, though that's with the overhead of starting pytest. |
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.
Alias changes make sense and test looks like it would work pretty well but didn't look into the details super closely, but general idea of it seems solid.
If test is slow, do we need to mark it with @slow
or something?
Maybe? Here's the output at the end of
I don't think it's an appreciable slowdown. Maybe it's a good idea to put EDIT: just the second optimization there changed it to 0.64s locally, so I think it's fine if not marked |
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.
maybe also good to add a comment or two on what this token thing is doing, I find it hard to understand at a glance what the code is doing.
src/trio/_tests/test_exports.py
Outdated
# linters don't like my not using the index, go figure. | ||
for end_offset, token in enumerate(file[start:]): # noqa: B007 |
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.
if you declare end_offset
outside the loop I think the warning goes away (and makes the code easier to read).
codecov wants a pragma: no branch
on the loop to hit 100%
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.
Unfortunately the warning doesn't go away; it does make the code more correct (previously it didn't handle start==len(file)-1
, I think)
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.
I think with the zero-initialization now that should be good
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.
This is fairly gnarly to fix in an AST visitor, I don't see any way of doing it that's not overkill, but I think you could open an issue for ruff and see if they have a decent way of getting at it.
There’s another approach we could use, but it’d might require starting an additional interpreter. Run a script which monkeypatches Unsure if that’d be faster though. We could avoid the new interpreter if the monkeypatch was done before any tests import trio, but that means it affects all tests. Probably not too much of an issue since metadata does nothing, and just wrapping the function should be fairly safe. |
It's not significantly faster:
I think the main improvement would be that it's slightly more reliable. It sounds annoying to implement though. |
I don't like pyright nor this behavior, but that doesn't mean users should have to care. We can add a test to prevent any sort of regression regarding this, forever.
cc @mikenerone cause this is from Gitter.
also @CoolCat467 I ran into issues with running the
regenerate-files
pre-commit hook and couldn't figure them out after about 15 minutes. It was complaining aboutattrs
not being possible to import but unfortunately there's no way to get it to use thetest-requirements.txt
file. Have you run into this issue regarding it not picking up the virtual environment? (I'm using a seperate git client so that kind of makes sense, but now's the first time I ran into this...)